From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 1CE484F21E for ; Sat, 17 May 2025 20:50:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id BB51968D948; Sat, 17 May 2025 23:50:42 +0300 (EEST) Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 2253E68D7C5 for ; Sat, 17 May 2025 23:50:40 +0300 (EEST) Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22c33677183so28825215ad.2 for ; Sat, 17 May 2025 13:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747515038; x=1748119838; darn=ffmpeg.org; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=tn9+sMNPxR62KCpkGpNsIRh11fRT+5GFxYjQuLD/mpU=; b=hZauUgkUKEQ/umCKGQhxFRdheZAdx/pYNeHxybnxi2D5diK3I23YXqKIGJUDXDUQ0d jbhqvOfgm4Fkjhei6ICXNJjnZ7o0kpYHFZtlrmUB7bwN/97oSEeXUMcSY8Ip8aPuPT/F eLQYHDoliONhVv1KVCyEm6J7sjKE7fo1egWsfYmtLDetQSh8DLdacLZKzs/SmgVG+bWz BObkb8KoRhweZuk8gRNOUFFbPyP6dechrnZVHbvXgKQeA8vx+Gferwoi3D4lk1NnHHsu crsR6yrDWak0M5odaZvj3q9tmrebRKf1feiYbDHmgCHqTBFZlc3ixsZ7VvZiDshifjyY oI8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747515038; x=1748119838; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tn9+sMNPxR62KCpkGpNsIRh11fRT+5GFxYjQuLD/mpU=; b=bVfJ0vEUtkJoGZV5iHqaBHh90tTIsHJclLiM7lokpuBLBBgb79pmcjksFNjL2MhgT/ Q9nSVbJuS1zMvgmLxxiYC7I1i5uUsV9DwSI3ZvnmW18CHlQEFFTy21zXLjLl5Qc9TOtX vFfuDYG+Z33tj1WOTLy57gQN8eetih3j9wgBG2n47OY6+AS/T57U+9eAfHdWDe/NEus/ lWcX3KCIegMRZeobgNjfhveVD1lcsjU6k4nVaHRsYnf1j4MDF2BW/H4kf+dSzEWMw/fh rNdkC77Pu/l/5E1O9d2FYZnmYQKx+DzyV87+jLO+OMs1/Ye+U+viD/X61wKxYG94UFeg Hbgg== X-Gm-Message-State: AOJu0Yzt4ip10YpTEF8sasSCHtmtKoAPHaIFWuJdMdxGXcL3THc4UPZh qi+S1iSeZPjdWZiHWEcNLKmnULbNm9uz4tBFCOG9rTyxSzwkt+qN26o1lWbgK4vUW1IQDnD5yhW 1KtGgZBwO/+qUMegrxJu6yT8Bx1ctb7d2lQ== X-Gm-Gg: ASbGncvdD78VgYBVS/e0SgBDolSSGhlCld3icPuXA3QbmyKWaxhQbz044+l0Brxzq7z HDjc8Kj/QMHl9jKNyE7YUVLRLo9xv9GbrOjH8cksBIYeljmZqu3cpbAyneJ1DqrkZn4jBmXpwe8 DDrm0pJM3DH+AIyZwCaxj54WplLn345tQHT2cqVdH/TAuc1+QwDLNYCrIxM1NNvm+Q1w== X-Google-Smtp-Source: AGHT+IHQfcnr7hV/GK9omF6S6T9DvLNoDWk/D7EPosQx/0DtZXiymyp4cYvIp/5wDBPuUBvurJWomR3xU/9OTGLDsZY= X-Received: by 2002:a17:902:dac7:b0:224:e0f:4b5 with SMTP id d9443c01a7336-231de351d32mr97412075ad.7.1747515038109; Sat, 17 May 2025 13:50:38 -0700 (PDT) MIME-Version: 1.0 References: <20250517204907.482987-1-47210458+raphaelthegreat@users.noreply.github.com> <20250517204907.482987-4-47210458+raphaelthegreat@users.noreply.github.com> In-Reply-To: <20250517204907.482987-4-47210458+raphaelthegreat@users.noreply.github.com> From: IndecisiveTurtle Date: Sat, 17 May 2025 23:50:26 +0300 X-Gm-Features: AX0GCFtKi_LFLGZK8PFLzlc0Qm6x5FaaB3YE4wDDRr9eNj6_-ECoq8Vl9KS5iuA Message-ID: To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH v4 4/4] lavc: implement a Vulkan-based VC-2 encoder Implements a Vulkan based dirac encoder. Supports Haar and Legall wavelets and should work with all wavelet depths. 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: SSB0cmllZCB0byBzb2x2ZSBhbGwgdGhlIHJldmlldyBjb21tZW50cyBmcm9tIHRoZSBsYXN0IHBh dGNoc2V0LApwbGVhc2UgcmV2aWV3IGluIGNhc2UgSSBtaXNzZWQgYW55dGhpbmcuIFRoYW5rcwoK zqPPhM65z4IgzqPOrM6yIDE3IM6czrHOkCAyMDI1IM+Dz4TOuc+CIDExOjQ54oCvzrwuzrwuLCDO vy/OtyBJbmRlY2lzaXZlVHVydGxlCjxnZW9zdGVyM2RAZ21haWwuY29tPiDOrc6zz4HOsc+IzrU6 Cj4KPiBGcm9tOiBJbmRlY2lzaXZlVHVydGxlIDxnZW9zdGVyM2RAZ21haWwuY29tPgo+Cj4gUGVy Zm9ybWFuY2Ugd2lzZSwgZW5jb2RpbmcgYSAzNDQweDE0NDAgMS1taW51dGUgdmlkZW8gaXMgcGVy Zm9ybWVkIGluIGFib3V0IDIuNCBtaW51dGVzIHdpdGggdGhlIGNwdSBlbmNvZGVyIHJ1bm5pbmcg b24gbXkgUnl6ZW4gNSA0NjAwSCwgd2hpbGUgaXQgdGFrZXMgYWJvdXQgMS4zIG1pbnV0ZXMgb24g bXkgTlZJRElBIEdUWCAxNjUwCj4KPiBIYWFyIHNoYWRlciBoYXMgYSBzdWJncm91cCBvcHRpbWl6 ZWQgdmFyaWFudCB0aGF0IGFwcGxpZXMgd2hlbiBjb25maWd1cmVkIHdhdmVsZXQgZGVwdGggYWxs b3dzIGl0Cj4gLS0tCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKPiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDMgKwo+ICBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCj4gIGxpYmF2Y29kZWMvdmMyZW5jX3Z1bGthbi5jICAgICAgICAgICAgICAgICAg IHwgNzc1ICsrKysrKysrKysrKysrKysrKysKPiAgbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9o YWFyLmNvbXAgICAgICAgICAgfCAgODIgKysKPiAgbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9o YWFyX3N1Ymdyb3VwLmNvbXAgfCAgNzUgKysKPiAgbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9o b3JfbGVnYWxsLmNvbXAgICAgfCAgODIgKysKPiAgbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF91 cGxvYWQuY29tcCAgICAgICAgfCAgOTYgKysrCj4gIGxpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3Rf dmVyX2xlZ2FsbC5jb21wICAgIHwgIDc4ICsrCj4gIGxpYmF2Y29kZWMvdnVsa2FuL3ZjMl9lbmNv ZGUuY29tcCAgICAgICAgICAgIHwgMTU5ICsrKysKPiAgbGliYXZjb2RlYy92dWxrYW4vdmMyX3Ns aWNlX3NpemVzLmNvbXAgICAgICAgfCAxNzAgKysrKwo+ICAxMSBmaWxlcyBjaGFuZ2VkLCAxNTIy IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdmMyZW5jX3Z1 bGthbi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92YzJfZHd0X2hh YXIuY29tcAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9o YWFyX3N1Ymdyb3VwLmNvbXAKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2Fu L3ZjMl9kd3RfaG9yX2xlZ2FsbC5jb21wCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVj L3Z1bGthbi92YzJfZHd0X3VwbG9hZC5jb21wCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNv ZGVjL3Z1bGthbi92YzJfZHd0X3Zlcl9sZWdhbGwuY29tcAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy92dWxrYW4vdmMyX2VuY29kZS5jb21wCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWJhdmNvZGVjL3Z1bGthbi92YzJfc2xpY2Vfc2l6ZXMuY29tcAo+Cj4gZGlmZiAtLWdpdCBhL2Nv bmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IDJlNjliM2M1NmMuLjA5ZjlkZmYyNTggMTAwNzU1 Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTMxMzIsNiArMzEzMiw3 IEBAIHV0dmlkZW9fZW5jb2Rlcl9zZWxlY3Q9ImJzd2FwZHNwIGh1ZmZtYW4gbGx2aWRlbmNkc3Ai Cj4gIHZibGVfZGVjb2Rlcl9zZWxlY3Q9ImxsdmlkZHNwIgo+ICB2Ym5fZGVjb2Rlcl9zZWxlY3Q9 InRleHR1cmVkc3AiCj4gIHZibl9lbmNvZGVyX3NlbGVjdD0idGV4dHVyZWRzcGVuYyIKPiArdmMy X3Z1bGthbl9lbmNvZGVyX3NlbGVjdD0idnVsa2FuIHNwaXJ2X2NvbXBpbGVyIgo+ICB2bWl4X2Rl Y29kZXJfc2VsZWN0PSJpZGN0ZHNwIgo+ICB2YzFfZGVjb2Rlcl9zZWxlY3Q9ImJsb2NrZHNwIGgy NjRxcGVsIGludHJheDggbXBlZ3ZpZGVvZGVjIHFwZWxkc3AgdmMxZHNwIgo+ICB2YzFpbWFnZV9k ZWNvZGVyX3NlbGVjdD0idmMxX2RlY29kZXIiCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFr ZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gaW5kZXggYmRmMGQ2NzQyZS4uMjA5Njg1MjBk NyAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gKysrIGIvbGliYXZjb2RlYy9N YWtlZmlsZQo+IEBAIC03NzIsNiArNzcyLDkgQEAgT0JKUy0kKENPTkZJR19WQzFfTU1BTF9ERUNP REVSKSAgICAgICAgKz0gbW1hbGRlYy5vCj4gIE9CSlMtJChDT05GSUdfVkMxX1FTVl9ERUNPREVS KSAgICAgICAgICs9IHFzdmRlYy5vCj4gIE9CSlMtJChDT05GSUdfVkMxX1Y0TDJNMk1fREVDT0RF UikgICAgICs9IHY0bDJfbTJtX2RlYy5vCj4gIE9CSlMtJChDT05GSUdfVkMyX0VOQ09ERVIpICAg ICAgICAgICAgICs9IHZjMmVuYy5vIHZjMmVuY19kd3QubyB2YzJlbmNfY29tbW9uLm8gZGlyYWN0 YWIubwo+ICtPQkpTLSQoQ09ORklHX1ZDMl9WVUxLQU5fRU5DT0RFUikgICAgICArPSB2YzJlbmNf dnVsa2FuLm8gdnVsa2FuL3ZjMl9lbmNvZGUubyB2dWxrYW4vdmMyX3NsaWNlX3NpemVzLm8gXAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dWxrYW4vdmMyX2R3 dF9ob3JfbGVnYWxsLm8gdnVsa2FuL3ZjMl9kd3RfdmVyX2xlZ2FsbC5vIFwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVsa2FuL3ZjMl9kd3RfdXBsb2FkLm8g dnVsa2FuL3ZjMl9kd3RfaGFhci5vIHZ1bGthbi92YzJfZHd0X2hhYXJfc3ViZ3JvdXAubwo+ICBP QkpTLSQoQ09ORklHX1ZDUjFfREVDT0RFUikgICAgICAgICAgICArPSB2Y3IxLm8KPiAgT0JKUy0k KENPTkZJR19WTURBVURJT19ERUNPREVSKSAgICAgICAgKz0gdm1kYXVkaW8ubwo+ICBPQkpTLSQo Q09ORklHX1ZNRFZJREVPX0RFQ09ERVIpICAgICAgICArPSB2bWR2aWRlby5vCj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gaW5k ZXggY2Q0ZjZlY2Q1OS4uY2QyM2E5NDkwYyAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL2FsbGNv ZGVjcy5jCj4gKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IEBAIC0zNjcsNiArMzY3LDcg QEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfdmMxX21tYWxfZGVjb2RlcjsKPiAgZXh0ZXJuIGNv bnN0IEZGQ29kZWMgZmZfdmMxX3Fzdl9kZWNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl92YzFfdjRsMm0ybV9kZWNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl92YzJfZW5j b2RlcjsKPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfdmMyX3Z1bGthbl9lbmNvZGVyOwo+ICBl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl92Y3IxX2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNv ZGVjIGZmX3ZtZHZpZGVvX2RlY29kZXI7Cj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX3ZtaXhf ZGVjb2RlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YzJlbmNfdnVsa2FuLmMgYi9saWJh dmNvZGVjL3ZjMmVuY192dWxrYW4uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMC4uMjNiMjA0Y2Y5Mgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVjL3Zj MmVuY192dWxrYW4uYwo+IEBAIC0wLDAgKzEsNzc1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAo QykgMjAyNSByYXBoYWVsdGhlZ3JlYXQgPGdlb3N0ZXIzZEBnbWFpbC5jb20+Cj4gKyAqCj4gKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V Cj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4g KyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiArI2lu Y2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC90aHJlYWQuaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC92ZXJzaW9uLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv dnVsa2FuX3NwaXJ2LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X3Z1bGthbi5o Igo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC92dWxrYW4uaCIKPiArI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCj4gKyNpbmNs dWRlICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiZW5jb2RlLmgiCj4gKyNpbmNsdWRlICJ2ZXJz aW9uLmgiCj4gKyNpbmNsdWRlICJ2YzJlbmNfY29tbW9uLmgiCj4gKyNpbmNsdWRlICJod2NvbmZp Zy5oIgo+ICsKPiArI2RlZmluZSBMRUdBTExfVElMRV9ESU0gMTYKPiArI2RlZmluZSBMRUdBTExf V09SS0dST1VQX1ggNjQKPiArI2RlZmluZSBTTElDRV9XT1JLR1JPVVBfWCAxMjgKPiArI2RlZmlu ZSBNQVhfTlVNX1BMQU5FUyAzCj4gKwo+ICtleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX2Nv bW1vbl9jb21wOwo+ICtleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX3ZjMl9lbmNvZGVfY29t cDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJfZHd0X2hvcl9sZWdhbGxfY29t cDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJfZHd0X3Zlcl9sZWdhbGxfY29t cDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJfc2xpY2Vfc2l6ZXNfY29tcDsK PiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJfZHd0X3VwbG9hZF9jb21wOwo+ICtl eHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX3ZjMl9kd3RfaGFhcl9jb21wOwo+ICtleHRlcm4g Y29uc3QgY2hhciAqZmZfc291cmNlX3ZjMl9kd3RfaGFhcl9zdWJncm91cF9jb21wOwo+ICsKPiAr dHlwZWRlZiBzdHJ1Y3QgVkMyRHd0UHVzaERhdGEgewo+ICsgICAgaW50IHM7Cj4gKyAgICB1bmlv biB7Cj4gKyAgICAgICAgaW50IGRpZmZfb2Zmc2V0Owo+ICsgICAgICAgIGludCBwbGFuZV9pZHg7 Cj4gKyAgICB9Owo+ICsgICAgaW50IGxldmVsOwo+ICt9IFZDMkR3dFB1c2hEYXRhOwo+ICsKPiAr dHlwZWRlZiBzdHJ1Y3QgVkMyRW5jQXV4RGF0YSB7Cj4gKyAgICBpbnQgcXVhbnRbTUFYX0RXVF9M RVZFTFNdWzRdOwo+ICsgICAgaW50IGZmX2RpcmFjX3FzY2FsZV90YWJbMTE2XTsKPiArICAgIHVp bnQxNl90IGludGVybGVhdmVkX3VlX2dvbG9tYl90YWJbMjU2XTsKPiArICAgIHVpbnQxNl90IHRv cF9pbnRlcmxlYXZlZF91ZV9nb2xvbWJfdGFiWzI1Nl07Cj4gKyAgICB1aW50OF90IGdvbG9tYl9s ZW5fdGFiWzI1Nl07Cj4gK30gVkMyRW5jQXV4RGF0YTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZD MkVuY1B1c2hEYXRhIHsKPiArICAgIFZrRGV2aWNlQWRkcmVzcyBwYjsKPiArICAgIGludCBudW1f eDsKPiArICAgIGludCBudW1feTsKPiArICAgIGludCB3YXZlbGV0X2RlcHRoOwo+ICsgICAgaW50 IHNpemVfc2NhbGVyOwo+ICsgICAgaW50IHByZWZpeF9ieXRlczsKPiArfSBWQzJFbmNQdXNoRGF0 YTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZDMkVuY1NsaWNlQXJncyB7Cj4gKyAgICBpbnQgcXVh bnRfaWR4Owo+ICsgICAgaW50IGJ5dGVzOwo+ICsgICAgaW50IHBiX3N0YXJ0Owo+ICsgICAgaW50 IHBhZDsKPiArfSBWQzJFbmNTbGljZUFyZ3M7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWQzJFbmNT bGljZUNhbGNQdXNoRGF0YSB7Cj4gKyAgICBpbnQgbnVtX3g7Cj4gKyAgICBpbnQgbnVtX3k7Cj4g KyAgICBpbnQgd2F2ZWxldF9kZXB0aDsKPiArICAgIGludCBzaXplX3NjYWxlcjsKPiArICAgIGlu dCBwcmVmaXhfYnl0ZXM7Cj4gKyAgICBpbnQgYml0c19jZWlsOwo+ICsgICAgaW50IGJpdHNfZmxv b3I7Cj4gK30gVkMyRW5jU2xpY2VDYWxjUHVzaERhdGE7Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBW QzJFbmNWdWxrYW5Db250ZXh0IHsKPiArICAgIFZDMkVuY0NvbnRleHQgYmFzZTsKPiArICAgIEZG VmtCdWZmZXIgbHV0X2J1ZjsKPiArICAgIEZGVmtCdWZmZXIgc2xpY2VfYnVmOwo+ICsgICAgVkMy RW5jU2xpY2VBcmdzICpzbGljZV9hcmdzOwo+ICsKPiArICAgIC8qIFZ1bGthbiBzdGF0ZSAqLwo+ ICsgICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4Owo+ICsgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZh bWlseSAqcWY7Cj4gKyAgICBGRlZrRXhlY1Bvb2wgZTsKPiArICAgIEZGVmtFeGVjQ29udGV4dCAq ZXhlYzsKPiArCj4gKyAgICBGRlZ1bGthblNoYWRlciBkd3RfaGFhcl9zaGQ7Cj4gKyAgICBGRlZ1 bGthblNoYWRlciBkd3RfdXBsb2FkX3NoZDsKPiArICAgIEZGVnVsa2FuU2hhZGVyIGR3dF9ob3Jf c2hkLCBkd3RfdmVyX3NoZDsKPiArICAgIEZGVnVsa2FuU2hhZGVyIHNsaWNlX3NoZDsKPiArICAg IEZGVnVsa2FuU2hhZGVyIGVuY19zaGQ7Cj4gKyAgICBBVkJ1ZmZlclBvb2wqIGR3dF9idWZfcG9v bDsKPiArICAgIGludCBoYWFyX3N1Ymdyb3VwOwo+ICsKPiArICAgIFZrQnVmZmVyIHBsYW5lX2J1 ZjsKPiArICAgIFZDMkVuY1B1c2hEYXRhIGVuY19jb25zdHM7Cj4gKyAgICBWQzJEd3RQdXNoRGF0 YSBkd3RfY29uc3RzOwo+ICsgICAgVkMyRW5jU2xpY2VDYWxjUHVzaERhdGEgY2FsY19jb25zdHM7 Cj4gKwo+ICsgICAgLyogSW50ZXJtZWRpYXRlIGZyYW1lIHBvb2wgKi8KPiArICAgIEFWQnVmZmVy UmVmICppbnRlcm1lZGlhdGVfZnJhbWVzX3JlZlszXTsKPiArICAgIEFWRnJhbWUgKmludGVybWVk aWF0ZV9mcmFtZVtBVl9OVU1fREFUQV9QT0lOVEVSU107Cj4gKyAgICBWa0ltYWdlVmlldyBpbnRl cm1lZGlhdGVfdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwo+ICt9IFZDMkVuY1Z1bGthbkNv bnRleHQ7Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfdnVsa2FuX3BpcGVsaW5lKFZDMkVuY1Z1bGth bkNvbnRleHQqIHMsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIqIHNoZCwgaW50IHB1c2hfc2l6ZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGdfeCwgaW50IGxnX3ksIGludCBsZ196 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBsX25hbWUs IGNvbnN0IGNoYXIqIHBsX3NvdXJjZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc3RhcnRfZGVzYywgaW50IG51bV9kZXNjKQo+ICt7Cj4gKyAgICBpbnQgZXJyID0gMDsK PiArICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90IHNwdl9sZW47Cj4gKyAgICB2 b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAm cy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOwo+ICsK PiArICAgIGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCBzaGQsIHBsX25hbWUsIFZLX1NIQURFUl9T VEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIGxnX3gs IGxnX3ksIGxnX3osIDApOwo+ICsKPiArICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAic3RydWN0 IFNsaWNlQXJncyB7aW50IHF1YW50X2lkeDtpbnQgYnl0ZXM7aW50IHBiX3N0YXJ0O2ludCBwYWQ7 fTtcbiIpOwo+ICsKPiArICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBb XSkgewo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLm5hbWUgICAgICAgPSAic3JjX3BsYW5l cyIsCj4gKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JB R0VfSU1BR0UsCj4gKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9m bXQodmtjdHgtPmZyYW1lcy0+c3dfZm9ybWF0LCBGRl9WS19SRVBfVUlOVCksCj4gKyAgICAgICAg ICAgIC5kaW1lbnNpb25zID0gMiwKPiArICAgICAgICAgICAgLmVsZW1zICAgICAgPSBhdl9waXhf Zm10X2NvdW50X3BsYW5lcyh2a2N0eC0+ZnJhbWVzLT5zd19mb3JtYXQpLAo+ICsgICAgICAgICAg ICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICB9 LAo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiY29lZl9idWYiLAo+ ICsgICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lN QUdFLAo+ICsgICAgICAgICAgICAubWVtX2xheW91dCA9ICJyMzJpIiwKPiArICAgICAgICAgICAg LmRpbWVuc2lvbnMgPSAyLAo+ICsgICAgICAgICAgICAuZWxlbXMgICAgICA9IDMsCj4gKyAgICAg ICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAg ICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICAubmFtZSAgICAgICAgPSAiQXV4RGF0 YSIsCj4gKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklG T1JNX0JVRkZFUiwKPiArICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdF X0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAubWVtX2xheW91dCAgPSAic2NhbGFyIiwKPiAr ICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludCBsdXRfcXVhbnRbNV1bNF07IGludCBmZl9k aXJhY19xc2NhbGVfdGFiWzExNl07ICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgInVp bnQxNl90IGludGVybGVhdmVkX3VlX2dvbG9tYl90YWJbMjU2XTsgIgo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAidWludDE2X3QgdG9wX2ludGVybGVhdmVkX3VlX2dvbG9tYl90YWJbMjU2 XTsgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAidWludDhfdCBnb2xvbWJfbGVuX3Rh YlsyNTZdOyIsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIC5uYW1l ICAgICAgICA9ICJTbGljZUJ1ZmZlciIsCj4gKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZL X0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAgICAgICAgICAgLnN0YWdlcyAg ICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAubWVtX2xh eW91dCAgPSAic2NhbGFyIiwKPiArICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gIlNsaWNlQXJn cyBzbGljZV9hcmdzW107IiwKPiArICAgICAgICB9LAo+ICsgICAgfTsKPiArICAgIFJFVChmZl92 a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCBzaGQsIGRlc2MgKyBzdGFydF9kZXNj LCBudW1fZGVzYywgMCwgMCkpOwo+ICsKPiArICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25z dChzaGQsIDAsIHB1c2hfc2l6ZSwgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKPiArICAg IGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBQQl9VTkFMSUdORURcbiIpOwo+ICsgICAg YXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIFBMQU5FX0ZNVCAlZFxuIiwgdmtjdHgtPmZy YW1lcy0+c3dfZm9ybWF0KTsKPiArICAgIEdMU0xEKGZmX3NvdXJjZV9jb21tb25fY29tcCk7Cj4g KyAgICBHTFNMRChwbF9zb3VyY2UpOwo+ICsKPiArICAgIC8qIENvbXBpbGUgSGFhciBzaGFkZXIg Ki8KPiArICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4LCBzcHYsIHNoZCwgJnNwdl9k YXRhLCAmc3B2X2xlbiwgIm1haW4iLCAmc3B2X29wYXF1ZSkpOwo+ICsgICAgUkVUKGZmX3ZrX3No YWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKPiArICAg IFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYyh2a2N0eCwgJnMtPmUsIHNoZCkpOwo+ICsK PiArZmFpbDoKPiArICAgIHJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW5pdF9m cmFtZV9wb29scyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIGludCBpLCBlcnIg PSAwOwo+ICsgICAgVkMyRW5jVnVsa2FuQ29udGV4dCAqc3YgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ ICsgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lc19jdHg7Cj4gKyAgICBBVlZ1bGthbkZyYW1l c0NvbnRleHQgKnZrX2ZyYW1lczsKPiArICAgIGVudW0gQVZQaXhlbEZvcm1hdCBzd19mb3JtYXQg PSBBVl9QSVhfRk1UX0dSQVkzMjsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7 Cj4gKyAgICAgICAgc3YtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldID0gYXZfaHdmcmFtZV9j dHhfYWxsb2Moc3YtPnZrY3R4LmRldmljZV9yZWYpOwo+ICsgICAgICAgIGlmICghc3YtPmludGVy bWVkaWF0ZV9mcmFtZXNfcmVmW2ldKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+ICsKPiArICAgICAgICBmcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0ICopc3Yt PmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldLT5kYXRhOwo+ICsgICAgICAgIGZyYW1lc19jdHgt PmZvcm1hdCAgICA9IEFWX1BJWF9GTVRfVlVMS0FOOwo+ICsgICAgICAgIGZyYW1lc19jdHgtPnN3 X2Zvcm1hdCA9IHN3X2Zvcm1hdDsKPiArICAgICAgICBmcmFtZXNfY3R4LT53aWR0aCAgICAgPSBz di0+YmFzZS5wbGFuZVtpXS5kd3Rfd2lkdGg7Cj4gKyAgICAgICAgZnJhbWVzX2N0eC0+aGVpZ2h0 ICAgID0gc3YtPmJhc2UucGxhbmVbaV0uZHd0X2hlaWdodDsKPiArCj4gKyAgICAgICAgdmtfZnJh bWVzID0gZnJhbWVzX2N0eC0+aHdjdHg7Cj4gKyAgICAgICAgdmtfZnJhbWVzLT50aWxpbmcgICAg PSBWS19JTUFHRV9USUxJTkdfT1BUSU1BTDsKPiArICAgICAgICB2a19mcmFtZXMtPnVzYWdlICAg ICA9IFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUOwo+ICsgICAgICAgIHZrX2ZyYW1lcy0+aW1n X2ZsYWdzID0gVktfSU1BR0VfQ1JFQVRFX01VVEFCTEVfRk9STUFUX0JJVDsKPiArCj4gKyAgICAg ICAgZXJyID0gYXZfaHdmcmFtZV9jdHhfaW5pdChzdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZb aV0pOwo+ICsgICAgICAgIGlmIChlcnIgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZnJhbWUgcG9vbCB3aXRoIGZv cm1hdCAlczogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKHN3 X2Zvcm1hdCksIGF2X2VycjJzdHIoZXJyKSk7Cj4gKyAgICAgICAgICAgIGF2X2J1ZmZlcl91bnJl Zigmc3YtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldKTsKPiArICAgICAgICAgICAgcmV0dXJu IGVycjsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgdnVsa2FuX2JpbmRfaW1nX3BsYW5lcyhGRlZ1bGthbkNvbnRleHQg KnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBWa0ltYWdlVmlldyAqdmlld3MsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNldCwgaW50IGJpbmRpbmcpCj4gK3sKPiAr ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQo+ICsgICAgICAgIGZmX3ZrX3NoYWRlcl91 cGRhdGVfaW1nKHMsIGUsIHNoZCwgc2V0LCBiaW5kaW5nLCBpLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZpZXdzW2ldLCBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGR3dF9wbGFuZV9oYWFyKFZDMkVuY1Z1bGthbkNvbnRleHQgKnMsIEZGVmtF eGVjQ29udGV4dCAqZXhlYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlTWVt b3J5QmFycmllcjIqIGltZ19iYXIsIGludCBuYl9pbWdfYmFyKQo+ICt7Cj4gKyAgICBpbnQgcCwg Z3JvdXBfeCwgZ3JvdXBfeTsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtj dHg7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47Cj4gKyAgICBQ bGFuZSogcGxhbmU7Cj4gKwo+ICsgICAgcy0+ZHd0X2NvbnN0cy5sZXZlbCA9IHMtPmJhc2Uud2F2 ZWxldF9kZXB0aDsKPiArICAgIHZ1bGthbl9iaW5kX2ltZ19wbGFuZXModmtjdHgsIGV4ZWMsICZz LT5kd3RfaGFhcl9zaGQsIHMtPmludGVybWVkaWF0ZV92aWV3cywgMCwgMCk7Cj4gKyAgICBmZl92 a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVjLCAmcy0+ZHd0X2hhYXJfc2hkKTsKPiArCj4g KyAgICAvKiBIYWFyIHBhc3MgKi8KPiArICAgIGZvciAocCA9IDA7IHAgPCAzOyBwKyspIHsKPiAr ICAgICAgICBwbGFuZSA9ICZzLT5iYXNlLnBsYW5lW3BdOwo+ICsgICAgICAgIHMtPmR3dF9jb25z dHMucGxhbmVfaWR4ID0gcDsKPiArICAgICAgICBpZiAocy0+aGFhcl9zdWJncm91cCkgewo+ICsg ICAgICAgICAgICBncm91cF94ID0gRkZBTElHTihwbGFuZS0+ZHd0X3dpZHRoLCA4KSA+PiAzOwo+ ICsgICAgICAgICAgICBncm91cF95ID0gRkZBTElHTihwbGFuZS0+ZHd0X2hlaWdodCwgOCkgPj4g MzsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBncm91cF94ID0gRkZBTElHTihw bGFuZS0+ZHd0X3dpZHRoLCAzMikgPj4gNTsKPiArICAgICAgICAgICAgZ3JvdXBfeSA9IEZGQUxJ R04ocGxhbmUtPmR3dF9oZWlnaHQsIDMyKSA+PiA1Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KHZrY3R4LCBleGVjLCAmcy0+ZHd0X2hh YXJfc2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihWQzJEd3RQdXNoRGF0YSksICZzLT5kd3Rf Y29uc3RzKTsKPiArICAgICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBncm91cF94LCBn cm91cF95LCAxKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBXYWl0IGZvciBoYWFyIGRpc3BhdGNo ZXMgdG8gY29tcGxldGUgKi8KPiArICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1 ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8s Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucEltYWdlTWVt b3J5QmFycmllcnMgPSBpbWdfYmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2JhciwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGR3dF9wbGFuZV9sZWdhbGwoVkMyRW5jVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWND b250ZXh0ICpleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VNZW1v cnlCYXJyaWVyMiogaW1nX2JhciwgaW50IG5iX2ltZ19iYXIpCj4gK3sKPiArICAgIEZGVnVsa2Fu Q29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsg PSAmdmtjdHgtPnZrZm47Cj4gKyAgICBpbnQgbGVnYWxsX2dyb3VwX3ggPSAocy0+YmFzZS5wbGFu ZVswXS5kd3RfaGVpZ2h0ICsgTEVHQUxMX1dPUktHUk9VUF9YIC0gMSkgPj4gNjsKPiArICAgIGlu dCBsZWdhbGxfZ3JvdXBfeSA9IChzLT5iYXNlLnBsYW5lWzBdLmR3dF93aWR0aCArIExFR0FMTF9X T1JLR1JPVVBfWCAtIDEpID4+IDY7Cj4gKyAgICBpbnQgaTsKPiArCj4gKyAgICAvKiBQZXJmb3Jt IGxlZ2FsbCB3YXZlbGV0IHRyYXNmb3JtICovCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+YmFz ZS53YXZlbGV0X2RlcHRoOyBpKyspIHsKPiArICAgICAgICBzLT5kd3RfY29uc3RzLmxldmVsID0g aTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRhbCBsZWdhbGwgcGFzcyAqLwo+ICsgICAgICAg IHZ1bGthbl9iaW5kX2ltZ19wbGFuZXModmtjdHgsIGV4ZWMsICZzLT5kd3RfaG9yX3NoZCwgcy0+ aW50ZXJtZWRpYXRlX3ZpZXdzLCAwLCAwKTsKPiArICAgICAgICBmZl92a19leGVjX2JpbmRfc2hh ZGVyKHZrY3R4LCBleGVjLCAmcy0+ZHd0X2hvcl9zaGQpOwo+ICsgICAgICAgIGZmX3ZrX3NoYWRl cl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgJnMtPmR3dF9ob3Jfc2hkLCBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAsIHNpemVvZihWQzJEd3RQdXNoRGF0YSksICZzLT5kd3RfY29uc3RzKTsKPiArICAg ICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBsZWdhbGxfZ3JvdXBfeCwgMSwgMyk7Cj4g KyAgICAgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5j eUluZm8pIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJp ZXJzID0gaW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdfYmFyLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cj4gKwo+ICsgICAgICAgIC8q IFZlcnRpY2FsIGxlZ2FsbCBwYXNzICovCj4gKyAgICAgICAgdnVsa2FuX2JpbmRfaW1nX3BsYW5l cyh2a2N0eCwgZXhlYywgJnMtPmR3dF92ZXJfc2hkLCBzLT5pbnRlcm1lZGlhdGVfdmlld3MsIDAs IDApOwo+ICsgICAgICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIodmtjdHgsIGV4ZWMsICZzLT5k d3RfdmVyX3NoZCk7Cj4gKyAgICAgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KHZr Y3R4LCBleGVjLCAmcy0+ZHd0X3Zlcl9zaGQsIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKFZDMkR3 dFB1c2hEYXRhKSwgJnMtPmR3dF9jb25zdHMpOwo+ICsgICAgICAgIHZrLT5DbWREaXNwYXRjaChl eGVjLT5idWYsIGxlZ2FsbF9ncm91cF95LCAxLCAzKTsKPiArICAgICAgICB2ay0+Q21kUGlwZWxp bmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbWFnZU1lbW9yeUJh cnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9KTsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIGludCBkd3RfcGxh bmVzKFZDMkVuY1Z1bGthbkNvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lKQo+ICt7Cj4gKyAgICBp bnQgaSwgZXJyID0gMCwgbmJfaW1nX2JhciA9IDA7Cj4gKyAgICBpbnQgd2F2ZWxldF9pZHggPSBz LT5iYXNlLndhdmVsZXRfaWR4Owo+ICsgICAgaW50IGdyb3VwX3ggPSBzLT5iYXNlLnBsYW5lWzBd LmR3dF93aWR0aCA+PiAzOwo+ICsgICAgaW50IGdyb3VwX3kgPSBzLT5iYXNlLnBsYW5lWzBdLmR3 dF9oZWlnaHQgPj4gMzsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7 Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47Cj4gKyAgICBGRlZr RXhlY0NvbnRleHQgKmV4ZWMgPSBzLT5leGVjOwo+ICsgICAgVmtJbWFnZVZpZXcgdmlld3NbQVZf TlVNX0RBVEFfUE9JTlRFUlNdOwo+ICsgICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyIGltZ19iYXJb QVZfTlVNX0RBVEFfUE9JTlRFUlNdOwo+ICsKPiArICAgIC8qIEdlbmVyYXRlIGJhcnJpZXJzIGFu ZCBpbWFnZSB2aWV3cyBmb3IgZnJhbWUgaW1hZ2VzLiAqLwo+ICsgICAgUkVUKGZmX3ZrX2V4ZWNf YWRkX2RlcF9mcmFtZSh2a2N0eCwgZXhlYywgZnJhbWUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRF X1NIQURFUl9CSVQpKTsKPiArICAgIFJFVChmZl92a19jcmVhdGVfaW1hZ2V2aWV3cyh2a2N0eCwg ZXhlYywgdmlld3MsIGZyYW1lLCBGRl9WS19SRVBfVUlOVCkpOwo+ICsgICAgZmZfdmtfZnJhbWVf YmFycmllcih2a2N0eCwgZXhlYywgZnJhbWUsIGltZ19iYXIsICZuYl9pbWdfYmFyLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9T SEFERVJfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1JF QURfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJB TCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOwo+ ICsKPiArICAgIC8qIFN1Ym1pdCB0aGUgaW1hZ2UgYmFycmllcnMuICovCj4gKyAgICB2ay0+Q21k UGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJD b3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0pOwo+ICsKPiArICAgIC8qIENyZWF0ZSBhIHRlbXBvcmF0eSBmcmFtZXMgKi8KPiArICAg IG5iX2ltZ19iYXIgPSAwOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewo+ICsgICAg ICAgIHMtPmludGVybWVkaWF0ZV9mcmFtZVtpXSA9IGF2X2ZyYW1lX2FsbG9jKCk7Cj4gKyAgICAg ICAgaWYgKCFzLT5pbnRlcm1lZGlhdGVfZnJhbWVbaV0pCj4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgICAgIFJFVChhdl9od2ZyYW1lX2dldF9idWZmZXIo cy0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbaV0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzLT5pbnRlcm1lZGlhdGVfZnJhbWVbaV0sIDApKTsKPiArICAgICAgICBSRVQo ZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBzLT5pbnRlcm1lZGlhdGVfZnJh bWVbaV0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElO RV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOwo+ICsg ICAgICAgIFJFVChmZl92a19jcmVhdGVfaW1hZ2V2aWV3cyh2a2N0eCwgZXhlYywgJnMtPmludGVy bWVkaWF0ZV92aWV3c1tpXSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cy0+aW50ZXJtZWRpYXRlX2ZyYW1lW2ldLCBGRl9WS19SRVBfSU5UKSk7Cj4gKyAgICAgICAgZmZf dmtfZnJhbWVfYmFycmllcih2a2N0eCwgZXhlYywgcy0+aW50ZXJtZWRpYXRlX2ZyYW1lW2ldLCBp bWdfYmFyLCAmbmJfaW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJ UEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJVCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOwo+ICsgICAgfQo+ ICsKPiArICAgIC8qIFN1Ym1pdCB0aGUgaW1hZ2UgYmFycmllcnMuICovCj4gKyAgICB2ay0+Q21k UGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJD b3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0pOwo+ICsKPiArICAgIC8qIEJpbmQgaW5wdXQgaW1hZ2VzIHRvIHRoZSBzaGFkZXIuICov Cj4gKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSh2a2N0eCwgZXhlYywgJnMtPmR3 dF91cGxvYWRfc2hkLCBmcmFtZSwgdmlld3MsIDAsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwgVktfTlVMTF9IQU5ETEUpOwo+ ICsgICAgdnVsa2FuX2JpbmRfaW1nX3BsYW5lcyh2a2N0eCwgZXhlYywgJnMtPmR3dF91cGxvYWRf c2hkLCBzLT5pbnRlcm1lZGlhdGVfdmlld3MsIDAsIDEpOwo+ICsKPiArICAgIC8qIFVwbG9hZCBj b2VmZmljaWVudHMgZnJvbSBwbGFuZXMgdG8gdGhlIGJ1ZmZlci4gKi8KPiArICAgIHMtPmR3dF9j b25zdHMuZGlmZl9vZmZzZXQgPSBzLT5iYXNlLmRpZmZfb2Zmc2V0Owo+ICsgICAgZmZfdmtfZXhl Y19iaW5kX3NoYWRlcih2a2N0eCwgZXhlYywgJnMtPmR3dF91cGxvYWRfc2hkKTsKPiArICAgIGZm X3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgJnMtPmR3dF91cGxvYWRf c2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRhKSwgJnMtPmR3dF9jb25zdHMp Owo+ICsgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgZ3JvdXBfeCwgZ3JvdXBfeSwgMSk7 Cj4gKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5 SW5mbykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBp bWdfYmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5p bWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9KTsKPiArCj4gKyAgICAvKiBQZXJmb3JtIHdhdmVsZXQg dHJhc2Zvcm0uICovCj4gKyAgICBpZiAod2F2ZWxldF9pZHggPT0gVkMyX1RSQU5TRk9STV9IQUFS IHx8IHdhdmVsZXRfaWR4ID09IFZDMl9UUkFOU0ZPUk1fSEFBUl9TKQo+ICsgICAgICAgIGR3dF9w bGFuZV9oYWFyKHMsIGV4ZWMsIGltZ19iYXIsIG5iX2ltZ19iYXIpOwo+ICsgICAgZWxzZSBpZiAo d2F2ZWxldF9pZHggPT0gVkMyX1RSQU5TRk9STV81XzMpCj4gKyAgICAgICAgZHd0X3BsYW5lX2xl Z2FsbChzLCBleGVjLCBpbWdfYmFyLCBuYl9pbWdfYmFyKTsKPiArCj4gK2ZhaWw6Cj4gKyAgICBy ZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBlbmNvZGVfc2xpY2VzKFZDMkVuY0Nv bnRleHQgKnMpCj4gK3sKPiArICAgIFZDMkVuY1Z1bGthbkNvbnRleHQgKnN2ID0gKFZDMkVuY1Z1 bGthbkNvbnRleHQqKXM7Cj4gKyAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWMgPSBzdi0+ZXhlYzsK PiArICAgIGludCBudW1fc2xpY2VzID0gcy0+bnVtX3ggKiBzLT5udW1feTsKPiArICAgIGludCBu dW1fc2xpY2VfZ3JvdXBzID0gKG51bV9zbGljZXMgKyBTTElDRV9XT1JLR1JPVVBfWCAtIDEpID4+ IDc7Cj4gKyAgICBpbnQgaSwgc2tpcCA9IDA7Cj4gKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4 ID0gJnN2LT52a2N0eDsKPiArICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZ2a2N0eC0+dmtm bjsKPiArCj4gKyAgICAvKiBDYWxjdWxhdGUgc2xpY2Ugc2l6ZXMuICovCj4gKyAgICB2dWxrYW5f YmluZF9pbWdfcGxhbmVzKHZrY3R4LCBleGVjLCAmc3YtPnNsaWNlX3NoZCwgc3YtPmludGVybWVk aWF0ZV92aWV3cywgMCwgMCk7Cj4gKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVy KHZrY3R4LCBleGVjLCAmc3YtPnNsaWNlX3NoZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgMSwgMCwgJnN2LT5sdXRfYnVmLCAwLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoVkMyRW5jQXV4RGF0YSksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwo+ICsgICAgZmZf dmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcih2a2N0eCwgZXhlYywgJnN2LT5zbGljZV9zaGQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDIsIDAsICZzdi0+c2xp Y2VfYnVmLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2xp Y2VfYnVmLnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZP Uk1BVF9VTkRFRklORUQpOwo+ICsgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcih2a2N0eCwgZXhl YywgJnN2LT5zbGljZV9zaGQpOwo+ICsgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0 KHZrY3R4LCBleGVjLCAmc3YtPnNsaWNlX3NoZCwgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklU LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihWQzJFbmNT bGljZUNhbGNQdXNoRGF0YSksICZzdi0+Y2FsY19jb25zdHMpOwo+ICsgICAgdmstPkNtZERpc3Bh dGNoKGV4ZWMtPmJ1ZiwgbnVtX3NsaWNlX2dyb3VwcywgMSwgMSk7Cj4gKwo+ICsgICAgZmx1c2hf cHV0X2JpdHMoJnMtPnBiKTsKPiArICAgIHN2LT5lbmNfY29uc3RzLnBiICs9IHB1dF9ieXRlc19v dXRwdXQoJnMtPnBiKTsKPiArCj4gKyAgICAvKiBXYWl0IGZvciBzbGljZSBzaXplcyB0byBiZSB3 cml0dGVuLiAqLwo+ICsgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZr RGVwZW5kZW5jeUluZm8pIHsKPiArICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9E RVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9ICYoVmtC dWZmZXJNZW1vcnlCYXJyaWVyMikgewo+ICsgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKPiArICAgICAgICAgICAgLnNyY1N0YWdl TWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAo+ICsgICAgICAg ICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9C SVQsCj4gKyAgICAgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1dS SVRFX0JJVCwKPiArICAgICAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9TSEFE RVJfUkVBRF9CSVQsCj4gKyAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVF VUVfRkFNSUxZX0lHTk9SRUQsCj4gKyAgICAgICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0g VktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCj4gKyAgICAgICAgICAgIC5idWZmZXIgPSBzdi0+c2xp Y2VfYnVmLmJ1ZiwKPiArICAgICAgICAgICAgLnNpemUgPSBzaXplb2YoVkMyRW5jU2xpY2VBcmdz KSAqIG51bV9zbGljZXMsCj4gKyAgICAgICAgICAgIC5vZmZzZXQgPSAwLAo+ICsgICAgICAgIH0s Cj4gKyAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IDFVLAo+ICsgICAgfSk7Cj4g Kwo+ICsgICAgLyogUGVyZm9ybSB0aGUgZW5jb2RpbmcuICovCj4gKyAgICB2dWxrYW5fYmluZF9p bWdfcGxhbmVzKHZrY3R4LCBleGVjLCAmc3YtPmVuY19zaGQsIHN2LT5pbnRlcm1lZGlhdGVfdmll d3MsIDAsIDApOwo+ICsgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcih2a2N0eCwg ZXhlYywgJnN2LT5lbmNfc2hkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCAxLCAwLCAmc3YtPmx1dF9idWYsIDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZihWQzJFbmNBdXhEYXRhKSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Cj4gKyAgICBmZl92a19zaGFkZXJf dXBkYXRlX2Rlc2NfYnVmZmVyKHZrY3R4LCBleGVjLCAmc3YtPmVuY19zaGQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDIsIDAsICZzdi0+c2xpY2VfYnVmLCAwLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2xpY2VfYnVmLnNpemUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklO RUQpOwo+ICsgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcih2a2N0eCwgZXhlYywgJnN2LT5lbmNf c2hkKTsKPiArICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywg JnN2LT5lbmNfc2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKFZDMkVuY1B1c2hEYXRhKSwgJnN2LT5l bmNfY29uc3RzKTsKPiArCj4gKyAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBudW1fc2xp Y2VfZ3JvdXBzLCAxLCAxKTsKPiArCj4gKyAgICBmZl92a19leGVjX3N1Ym1pdCh2a2N0eCwgZXhl Yyk7Cj4gKyAgICBmZl92a19leGVjX3dhaXQodmtjdHgsIGV4ZWMpOwo+ICsKPiArICAgIGZvciAo aW50IHNsaWNlX3kgPSAwOyBzbGljZV95IDwgcy0+bnVtX3k7IHNsaWNlX3krKykgewo+ICsgICAg ICAgIGZvciAoaW50IHNsaWNlX3ggPSAwOyBzbGljZV94IDwgcy0+bnVtX3g7IHNsaWNlX3grKykg ewo+ICsgICAgICAgICAgICBWQzJFbmNTbGljZUFyZ3MgKmFyZ3MgPSAmc3YtPnNsaWNlX2FyZ3Nb cy0+bnVtX3ggKiBzbGljZV95ICsgc2xpY2VfeF07Cj4gKyAgICAgICAgICAgIHNraXAgKz0gYXJn cy0+Ynl0ZXM7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8qIFNraXAgZm9yd2Fy ZCB0byB3cml0ZSBlbmQgaGVhZGVyICovCj4gKyAgICBza2lwX3B1dF9ieXRlcygmcy0+cGIsIHNr aXApOwo+ICsKPiArICAgIC8qIEZyZWUgYWxsb2NhdGVkIGludGVybWVkaWF0ZSBmcmFtZXMgKi8K PiArICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCj4gKyAgICAgICAgYXZfZnJhbWVfZnJlZSgm c3YtPmludGVybWVkaWF0ZV9mcmFtZVtpXSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZW5jb2Rl X2ZyYW1lKFZDMkVuY1Z1bGthbkNvbnRleHQgKnN2LCBBVlBhY2tldCAqYXZwa3QsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBjb25zdCBpbnQgaGVhZGVy X3NpemUpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBpbnQ2NF90IG1heF9mcmFtZV9ieXRl czsKPiArICAgIEFWQnVmZmVyUmVmICphdnBrdF9idWYgPSBOVUxMOwo+ICsgICAgRkZWa0J1ZmZl ciogYnVmX3ZrID0gTlVMTDsKPiArICAgIFZDMkVuY0NvbnRleHQqIHMgPSAmc3YtPmJhc2U7Cj4g KyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnN2LT52a2N0eDsKPiArCj4gKyAgICAvKiBQ ZXJmb3JtIHdhdmVsZXQgcGFzcyBvbiB0aGUgaW5wdXQgZGF0YS4gKi8KPiArICAgIHJldCA9IGR3 dF9wbGFuZXMoc3YsIChBVkZyYW1lKilmcmFtZSk7Cj4gKyAgICBpZiAocmV0KQo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKwo+ICsgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgdGhhdCBjYW4gZml0 IGF0IGFsbCBhbGwgMyBwbGFuZXMgb2YgZGF0YSAqLwo+ICsgICAgbWF4X2ZyYW1lX2J5dGVzID0g aGVhZGVyX3NpemUgKyBNQVhfTlVNX1BMQU5FUyAqIHMtPmF2Y3R4LT53aWR0aAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHMtPmF2Y3R4LT5o ZWlnaHQKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiBzaXplb2YoZHd0Y29lZik7Cj4gKwo+ICsgICAgLyogR2V0IGEgcG9vbGVkIGRldmljZSBs b2NhbCBob3N0IHZpc2libGUgYnVmZmVyIGZvciB3cml0aW5nIG91dHB1dCBkYXRhICovCj4gKyAg ICByZXQgPSBmZl92a19nZXRfcG9vbGVkX2J1ZmZlcih2a2N0eCwgJnN2LT5kd3RfYnVmX3Bvb2ws ICZhdnBrdF9idWYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZG RVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklUIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklULCBOVUxM LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2ZyYW1lX2J5dGVzLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hP U1RfQ0FDSEVEX0JJVCB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19N RU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCB8Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DT0hFUkVOVF9CSVQpOwo+ICsg ICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBmZl92a19l eGVjX2FkZF9kZXBfYnVmKHZrY3R4LCBzdi0+ZXhlYywgJmF2cGt0X2J1ZiwgMSwgMSk7Cj4gKyAg ICBidWZfdmsgPSAoRkZWa0J1ZmZlciAqKWF2cGt0X2J1Zi0+ZGF0YTsKPiArICAgIHN2LT5lbmNf Y29uc3RzLnBiID0gYnVmX3ZrLT5hZGRyZXNzOwo+ICsKPiArICAgIC8qIEluaXRpYWxpemUgcGFj a2V0LiAqLwo+ICsgICAgYXZwa3QtPmJ1ZiA9IGF2cGt0X2J1ZjsKPiArICAgIGF2cGt0LT5kYXRh ID0gYnVmX3ZrLT5tYXBwZWRfbWVtOwo+ICsgICAgYXZwa3QtPnNpemUgPSBtYXhfZnJhbWVfYnl0 ZXM7Cj4gKyAgICBpbml0X3B1dF9iaXRzKCZzLT5wYiwgYXZwa3QtPmRhdGEsIGF2cGt0LT5zaXpl KTsKPiArCj4gKyAgICAvKiBFbmNvZGUgZnJhbWUgKi8KPiArICAgIGZmX3ZjMl9lbmNvZGVfZnJh bWUocywgZW5jb2RlX3NsaWNlcyk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBhdl9jb2xkIGludCB2YzJfZW5jb2RlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwg QVZQYWNrZXQgKmF2cGt0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBVkZyYW1lICpmcmFtZSwgaW50ICpnb3RfcGFja2V0KQo+ICt7Cj4gKyAgICBpbnQgcmV0 ID0gMDsKPiArICAgIFZDMkVuY1Z1bGthbkNvbnRleHQgKnN2ID0gYXZjdHgtPnByaXZfZGF0YTsK PiArICAgIFZDMkVuY0NvbnRleHQgKnMgPSAmc3YtPmJhc2U7Cj4gKyAgICBjb25zdCBpbnQgYml0 ZXhhY3QgPSBhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0JJVEVYQUNUOwo+ICsgICAgY29u c3QgaW50IGF1eF9kYXRhX3NpemUgPSBiaXRleGFjdCA/IHNpemVvZigiTGF2YyIpIDogc2l6ZW9m KExJQkFWQ09ERUNfSURFTlQpOwo+ICsgICAgY29uc3QgaW50IGhlYWRlcl9zaXplID0gMTAwICsg YXV4X2RhdGFfc2l6ZTsKPiArCj4gKyAgICByZXQgPSBmZl92YzJfZnJhbWVfaW5pdF9wcm9wZXJ0 aWVzKGF2Y3R4LCBzKTsKPiArICAgIGlmIChyZXQpCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiAr Cj4gKyAgICBzdi0+Y2FsY19jb25zdHMuc2l6ZV9zY2FsZXIgPSBzLT5zaXplX3NjYWxlcjsKPiAr ICAgIHN2LT5jYWxjX2NvbnN0cy5iaXRzX2NlaWwgID0gcy0+c2xpY2VfbWF4X2J5dGVzIDw8IDM7 Cj4gKyAgICBzdi0+Y2FsY19jb25zdHMuYml0c19mbG9vciA9IHMtPnNsaWNlX21pbl9ieXRlcyA8 PCAzOwo+ICsgICAgc3YtPmVuY19jb25zdHMucHJlZml4X2J5dGVzID0gMDsKPiArICAgIHN2LT5l bmNfY29uc3RzLnNpemVfc2NhbGVyID0gcy0+c2l6ZV9zY2FsZXI7Cj4gKwo+ICsgICAgc3YtPmV4 ZWMgPSBmZl92a19leGVjX2dldCgmc3YtPnZrY3R4LCAmc3YtPmUpOwo+ICsgICAgZmZfdmtfZXhl Y19zdGFydCgmc3YtPnZrY3R4LCBzdi0+ZXhlYyk7Cj4gKwo+ICsgICAgcmV0ID0gZW5jb2RlX2Zy YW1lKHN2LCBhdnBrdCwgZnJhbWUsIGhlYWRlcl9zaXplKTsKPiArICAgIGlmIChyZXQpCj4gKyAg ICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBmbHVzaF9wdXRfYml0cygmcy0+cGIpOwo+ICsg ICAgYXZfc2hyaW5rX3BhY2tldChhdnBrdCwgcHV0X2J5dGVzX291dHB1dCgmcy0+cGIpKTsKPiAr ICAgIGF2cGt0LT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVk7Cj4gKyAgICAqZ290X3BhY2tldCA9 IDE7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIGludCB2 YzJfZW5jb2RlX2VuZChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIFZDMkVuY1Z1 bGthbkNvbnRleHQgKnN2ID0gYXZjdHgtPnByaXZfZGF0YTsKPiArICAgIEZGVnVsa2FuQ29udGV4 dCAqdmtjdHggPSAmc3YtPnZrY3R4Owo+ICsgICAgaW50IGk7Cj4gKwo+ICsgICAgZmZfdmtfZXhl Y19wb29sX2ZyZWUodmtjdHgsICZzdi0+ZSk7Cj4gKwo+ICsgICAgZmZfdmtfc2hhZGVyX2ZyZWUo dmtjdHgsICZzdi0+ZHd0X3VwbG9hZF9zaGQpOwo+ICsgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtj dHgsICZzdi0+ZHd0X2hhYXJfc2hkKTsKPiArICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAm c3YtPmR3dF9ob3Jfc2hkKTsKPiArICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmc3YtPmR3 dF92ZXJfc2hkKTsKPiArICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmc3YtPnNsaWNlX3No ZCk7Cj4gKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnN2LT5lbmNfc2hkKTsKPiArCj4g KyAgICBmZl92a19mcmVlX2J1Zih2a2N0eCwgJnN2LT5zbGljZV9idWYpOwo+ICsgICAgZmZfdmtf ZnJlZV9idWYodmtjdHgsICZzdi0+bHV0X2J1Zik7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgewo+ICsgICAgICAgIGZmX3ZjMmVuY19mcmVlX3RyYW5zZm9ybXMoJnN2LT5iYXNl LnRyYW5zZm9ybV9hcmdzW2ldLnQpOwo+ICsgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmc3YtPmlu dGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldKTsKPiArICAgIH0KPiArCj4gKyAgICBhdl9idWZmZXJf cG9vbF91bmluaXQoJnN2LT5kd3RfYnVmX3Bvb2wpOwo+ICsgICAgZmZfdmtfdW5pbml0KHZrY3R4 KTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IHZj Ml9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArICAgIGludCBlcnIg PSAwLCBkZXB0aDsKPiArICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZm10Owo+ICsgICAg VkMyRW5jVnVsa2FuQ29udGV4dCAqc3YgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgVkMyRW5j Q29udGV4dCAqcyA9ICZzdi0+YmFzZTsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAm c3YtPnZrY3R4Owo+ICsgICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdjsKPiArICAgIFZDMkVuY0F1 eERhdGEgKmFkID0gTlVMTDsKPiArICAgIHVuc2lnbmVkIGludCBzdWJncm91cF9zaXplID0gdmtj dHgtPnN1Ymdyb3VwX3Byb3BzLm1heFN1Ymdyb3VwU2l6ZTsKPiArCj4gKyAgICAvKiBJbml0IHZ1 bGthbiAqLwo+ICsgICAgZXJyID0gZmZfdmtfaW5pdCgmc3YtPnZrY3R4LCBhdmN0eCwgTlVMTCwg YXZjdHgtPmh3X2ZyYW1lc19jdHgpOwo+ICsgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgcmV0 dXJuIGVycjsKPiArCj4gKyAgICBzdi0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVV RV9DT01QVVRFX0JJVCwgMCk7Cj4gKyAgICBpZiAoIXN2LT5xZikgewo+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlcyFcbiIp Owo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1RTVVApOwo+ICsgICAgfQo+ICsKPiArICAg IHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKPiArICAgIGlmICghc3B2KSB7Cj4gKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYg Y29tcGlsZXIhXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAg IH0KPiArCj4gKyAgICBmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgc3YtPnFmLCAmc3YtPmUs IDEsIDAsIDAsIDAsIE5VTEwpOwo+ICsKPiArICAgIC8qIENocm9tYSBzdWJzYW1wbGluZyAqLwo+ ICsgICAgZXJyID0gYXZfcGl4X2ZtdF9nZXRfY2hyb21hX3N1Yl9zYW1wbGUodmtjdHgtPmZyYW1l cy0+c3dfZm9ybWF0LCAmcy0+Y2hyb21hX3hfc2hpZnQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5jaHJv bWFfeV9zaGlmdCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJyOwo+ ICsKPiArICAgIC8qIEJpdCBkZXB0aCBhbmQgY29sb3IgcmFuZ2UgaW5kZXggKi8KPiArICAgIGZt dCA9IGF2X3BpeF9mbXRfZGVzY19nZXQodmtjdHgtPmZyYW1lcy0+c3dfZm9ybWF0KTsKPiArICAg IGRlcHRoID0gZm10LT5jb21wWzBdLmRlcHRoOwo+ICsKPiArICAgIC8qIDE2LWJpdCBkZXB0aCBp cyB1bnN1cHBvcnRlZCBieSB0aGlzIGVuY29kZXIgKi8KPiArICAgIGlmIChkZXB0aCA9PSAxNikg ewo+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiMTYtYml0IHBpeGVsIGZv cm1hdCBkZXB0aCBpcyB1bnN1cHBvcnRlZCBieSB0aGlzIGVuY29kZXJcbiIpOwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT1RTVVApOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFBlcmZvcm0g Y29tbW9uIGluaXRpYWxpemF0aW9uLiAqLwo+ICsgICAgZXJyID0gZmZfdmMyX2VuY29kZV9pbml0 KGF2Y3R4LCBkZXB0aCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJy Owo+ICsKPiArICAgIC8qIEluaXRpYWxpemUgSGFhciBwdXNoIGRhdGEgKi8KPiArICAgIHN2LT5k d3RfY29uc3RzLmRpZmZfb2Zmc2V0ID0gcy0+ZGlmZl9vZmZzZXQ7Cj4gKyAgICBzdi0+ZHd0X2Nv bnN0cy5zID0gcy0+d2F2ZWxldF9pZHggPT0gVkMyX1RSQU5TRk9STV9IQUFSX1MgPyAxIDogMDsK PiArICAgIHN2LT5kd3RfY29uc3RzLmxldmVsID0gMDsKPiArCj4gKyAgICAvKiBJbml0aWFsaXpl ciBzbGljZSBjYWxjdWxhdGlvbiBwdXNoIGRhdGEgKi8KPiArICAgIHN2LT5jYWxjX2NvbnN0cy5u dW1feCA9IHMtPm51bV94Owo+ICsgICAgc3YtPmNhbGNfY29uc3RzLm51bV95ID0gcy0+bnVtX3k7 Cj4gKyAgICBzdi0+Y2FsY19jb25zdHMud2F2ZWxldF9kZXB0aCA9IHMtPndhdmVsZXRfZGVwdGg7 Cj4gKyAgICBzdi0+Y2FsY19jb25zdHMucHJlZml4X2J5dGVzID0gcy0+cHJlZml4X2J5dGVzOwo+ ICsKPiArICAgIC8qIEluaXRpYWxpemUgZW5jb2RlciBwdXNoIGRhdGEgKi8KPiArICAgIHN2LT5l bmNfY29uc3RzLndhdmVsZXRfZGVwdGggPSBzLT53YXZlbGV0X2RlcHRoOwo+ICsgICAgc3YtPmVu Y19jb25zdHMubnVtX3ggPSBzLT5udW1feDsKPiArICAgIHN2LT5lbmNfY29uc3RzLm51bV95ID0g cy0+bnVtX3k7Cj4gKwo+ICsgICAgLyogQ3JlYXRlIGJ1ZmZlciBmb3IgZW5jb2RlciBhdXhpbGFy eSBkYXRhLiAqLwo+ICsgICAgUkVUKGZmX3ZrX2NyZWF0ZV9idWYodmtjdHgsICZzdi0+bHV0X2J1 Ziwgc2l6ZW9mKFZDMkVuY0F1eERhdGEpLCBOVUxMLCBOVUxMLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1VOSUZPUk1fQlVGRkVSX0JJVCB8Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJ VCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0Vf TE9DQUxfQklUIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJU WV9IT1NUX1ZJU0lCTEVfQklUKSk7Cj4gKyAgICBSRVQoZmZfdmtfbWFwX2J1ZmZlcih2a2N0eCwg JnN2LT5sdXRfYnVmLCAodm9pZCAqKSZhZCwgMCkpOwo+ICsgICAgZmZfdmMyX2luaXRfcXVhbnRf bWF0cml4KHMsIGFkLT5xdWFudCk7Cj4gKyAgICBtZW1jcHkoYWQtPmZmX2RpcmFjX3FzY2FsZV90 YWIsIGZmX2RpcmFjX3FzY2FsZV90YWIsIHNpemVvZihmZl9kaXJhY19xc2NhbGVfdGFiKSk7Cj4g KyAgICBtZW1jcHkoYWQtPmludGVybGVhdmVkX3VlX2dvbG9tYl90YWIsIGludGVybGVhdmVkX3Vl X2dvbG9tYl90YWIsIHNpemVvZihpbnRlcmxlYXZlZF91ZV9nb2xvbWJfdGFiKSk7Cj4gKyAgICBt ZW1jcHkoYWQtPnRvcF9pbnRlcmxlYXZlZF91ZV9nb2xvbWJfdGFiLCB0b3BfaW50ZXJsZWF2ZWRf dWVfZ29sb21iX3RhYiwgc2l6ZW9mKHRvcF9pbnRlcmxlYXZlZF91ZV9nb2xvbWJfdGFiKSk7Cj4g KyAgICBtZW1jcHkoYWQtPmdvbG9tYl9sZW5fdGFiLCBnb2xvbWJfbGVuX3RhYiwgc2l6ZW9mKGdv bG9tYl9sZW5fdGFiKSk7Cj4gKyAgICBSRVQoZmZfdmtfdW5tYXBfYnVmZmVyKHZrY3R4LCAmc3Yt Pmx1dF9idWYsIDEpKTsKPiArCj4gKyAgICAvKiBDcmVhdGUgYnVmZmVyIGZvciBlbmNvZGVyIGF1 eGlsYXJ5IGRhdGEuICovCj4gKyAgICBSRVQoZmZfdmtfY3JlYXRlX2J1Zih2a2N0eCwgJnN2LT5z bGljZV9idWYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVkMyRW5jU2xpY2VB cmdzKSAqIHMtPm51bV94ICogcy0+bnVtX3ksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLCBOVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NU T1JBR0VfQlVGRkVSX0JJVCB8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJf VVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUKSk7Cj4gKyAg ICBSRVQoZmZfdmtfbWFwX2J1ZmZlcih2a2N0eCwgJnN2LT5zbGljZV9idWYsICh2b2lkICopJnN2 LT5zbGljZV9hcmdzLCAwKSk7Cj4gKyAgICBtZW1zZXQoc3YtPnNsaWNlX2FyZ3MsIDAsIHN2LT5z bGljZV9idWYuc2l6ZSk7Cj4gKwo+ICsgICAgLyogSW5pdGlhbGl6ZSBpbnRlcm1lZGlhdGUgZnJh bWUgcG9vbC4gKi8KPiArICAgIFJFVChpbml0X2ZyYW1lX3Bvb2xzKGF2Y3R4KSk7Cj4gKwo+ICsg ICAgLyogSW5pdGlhbGl6ZSBlbmNvZGluZyBwaXBlbGluZXMgKi8KPiArICAgIGluaXRfdnVsa2Fu X3BpcGVsaW5lKHN2LCBzcHYsICZzdi0+ZHd0X3VwbG9hZF9zaGQsIHNpemVvZihWQzJEd3RQdXNo RGF0YSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICA4LCA4LCAxLCAiZHd0X3VwbG9hZF9w bCIsIGZmX3NvdXJjZV92YzJfZHd0X3VwbG9hZF9jb21wLCAwLCAyKTsKPiArICAgIGluaXRfdnVs a2FuX3BpcGVsaW5lKHN2LCBzcHYsICZzdi0+c2xpY2Vfc2hkLCBzaXplb2YoVkMyRW5jUHVzaERh dGEpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU0xJQ0VfV09SS0dST1VQX1gsIDEsIDEs ICJzbGljZV9wbCIsIGZmX3NvdXJjZV92YzJfc2xpY2Vfc2l6ZXNfY29tcCwgMSwgMyk7Cj4gKyAg ICBpbml0X3Z1bGthbl9waXBlbGluZShzdiwgc3B2LCAmc3YtPmVuY19zaGQsIHNpemVvZihWQzJF bmNQdXNoRGF0YSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTTElDRV9XT1JLR1JPVVBf WCwgMSwgMSwgImVuY19wbCIsIGZmX3NvdXJjZV92YzJfZW5jb2RlX2NvbXAsIDEsIDMpOwo+ICsg ICAgc3YtPmhhYXJfc3ViZ3JvdXAgPSAwOwo+ICsKPiArICAgIGlmIChzLT53YXZlbGV0X2lkeCA9 PSBWQzJfVFJBTlNGT1JNX0hBQVIgfHwgcy0+d2F2ZWxldF9pZHggPT0gVkMyX1RSQU5TRk9STV9I QUFSX1MpIHsKPiArICAgICAgICBpZiAoc3ViZ3JvdXBfc2l6ZSA9PSAzMiAmJiBzLT53YXZlbGV0 X2RlcHRoIDwgMykgewo+ICsgICAgICAgICAgICBpbml0X3Z1bGthbl9waXBlbGluZShzdiwgc3B2 LCAmc3YtPmR3dF9oYWFyX3NoZCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRhKSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgNjQsIDEsIDEsICJkd3RfaGFhcl9wbCIsIGZmX3NvdXJj ZV92YzJfZHd0X2hhYXJfc3ViZ3JvdXBfY29tcCwgMSwgMSk7Cj4gKyAgICAgICAgICAgIHN2LT5o YWFyX3N1Ymdyb3VwID0gMTsKPiArICAgICAgICB9IGVsc2UgaWYgKHN1Ymdyb3VwX3NpemUgPT0g NjQgJiYgcy0+d2F2ZWxldF9kZXB0aCA8IDQpIHsKPiArICAgICAgICAgICAgaW5pdF92dWxrYW5f cGlwZWxpbmUoc3YsIHNwdiwgJnN2LT5kd3RfaGFhcl9zaGQsIHNpemVvZihWQzJEd3RQdXNoRGF0 YSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0LCAxLCAxLCAiZHd0X2hh YXJfcGwiLCBmZl9zb3VyY2VfdmMyX2R3dF9oYWFyX3N1Ymdyb3VwX2NvbXAsIDEsIDEpOwo+ICsg ICAgICAgICAgICBzdi0+aGFhcl9zdWJncm91cCA9IDE7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiAr ICAgICAgICAgICAgaW5pdF92dWxrYW5fcGlwZWxpbmUoc3YsIHNwdiwgJnN2LT5kd3RfaGFhcl9z aGQsIHNpemVvZihWQzJEd3RQdXNoRGF0YSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDMyLCAzMiwgMSwgImR3dF9oYWFyX3BsIiwgZmZfc291cmNlX3ZjMl9kd3RfaGFhcl9j b21wLCAxLCAxKTsKPiArICAgICAgICB9Cj4gKyAgICB9IGVsc2UgaWYgKHMtPndhdmVsZXRfaWR4 ID09IFZDMl9UUkFOU0ZPUk1fNV8zKSB7Cj4gKyAgICAgICAgaW5pdF92dWxrYW5fcGlwZWxpbmUo c3YsIHNwdiwgJnN2LT5kd3RfaG9yX3NoZCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRhKSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMRUdBTExfV09SS0dST1VQX1gsIDEsIDEsICJkd3Rf aG9yX3BsIiwgZmZfc291cmNlX3ZjMl9kd3RfaG9yX2xlZ2FsbF9jb21wLCAxLCAxKTsKPiArICAg ICAgICBpbml0X3Z1bGthbl9waXBlbGluZShzdiwgc3B2LCAmc3YtPmR3dF92ZXJfc2hkLCBzaXpl b2YoVkMyRHd0UHVzaERhdGEpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFR0FM TF9XT1JLR1JPVVBfWCwgMSwgMSwgImR3dF92ZXJfcGwiLCBmZl9zb3VyY2VfdmMyX2R3dF92ZXJf bGVnYWxsX2NvbXAsIDEsIDEpOwo+ICsgICAgfQo+ICsKPiArZmFpbDoKPiArICAgIHJldHVybiBl cnI7Cj4gK30KPiArCj4gKyNkZWZpbmUgVkMyRU5DX0ZMQUdTIChBVl9PUFRfRkxBR19FTkNPRElO R19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQo+ICtzdGF0aWMgY29uc3QgQVZPcHRp b24gdmMyZW5jX29wdGlvbnNbXSA9IHsKPiArICAgIHsidG9sZXJhbmNlIiwgICAgICJNYXggdW5k ZXJzaG9vdCBpbiBwZXJjZW50Iiwgb2Zmc2V0b2YoVkMyRW5jQ29udGV4dCwgdG9sZXJhbmNlKSwg QVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibCA9IDUuMGZ9LCAwLjBmLCA0NS4wZiwgVkMyRU5DX0ZM QUdTLCAudW5pdCA9ICJ0b2xlcmFuY2UifSwKPiArICAgIHsic2xpY2Vfd2lkdGgiLCAgICJTbGlj ZSB3aWR0aCIsICBvZmZzZXRvZihWQzJFbmNDb250ZXh0LCBzbGljZV93aWR0aCksIEFWX09QVF9U WVBFX0lOVCwgey5pNjQgPSAzMn0sIDMyLCAxMDI0LCBWQzJFTkNfRkxBR1MsIC51bml0ID0gInNs aWNlX3dpZHRoIn0sCj4gKyAgICB7InNsaWNlX2hlaWdodCIsICAiU2xpY2UgaGVpZ2h0Iiwgb2Zm c2V0b2YoVkMyRW5jQ29udGV4dCwgc2xpY2VfaGVpZ2h0KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2 NCA9IDE2fSwgOCwgMTAyNCwgVkMyRU5DX0ZMQUdTLCAudW5pdCA9ICJzbGljZV9oZWlnaHQifSwK PiArICAgIHsid2F2ZWxldF9kZXB0aCIsICJUcmFuc2Zvcm0gZGVwdGgiLCBvZmZzZXRvZihWQzJF bmNDb250ZXh0LCB3YXZlbGV0X2RlcHRoKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDR9LCAx LCA1LCBWQzJFTkNfRkxBR1MsIC51bml0ID0gIndhdmVsZXRfZGVwdGgifSwKPiArICAgIHsid2F2 ZWxldF90eXBlIiwgICJUcmFuc2Zvcm0gdHlwZSIsICBvZmZzZXRvZihWQzJFbmNDb250ZXh0LCB3 YXZlbGV0X2lkeCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSBWQzJfVFJBTlNGT1JNXzVfM30s IDAsIFZDMl9UUkFOU0ZPUk1TX05CLCBWQzJFTkNfRkxBR1MsIC51bml0ID0gIndhdmVsZXRfaWR4 In0sCj4gKyAgICAgICAgeyI1XzMiLCAgICAgICAgICAiTGVHYWxsICg1LDMpIiwgICAgICAgICAg ICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBWQzJfVFJBTlNGT1JNXzVfM30sICAgIElO VF9NSU4sIElOVF9NQVgsIFZDMkVOQ19GTEFHUywgLnVuaXQgPSAid2F2ZWxldF9pZHgifSwKPiAr ICAgICAgICB7ImhhYXIiLCAgICAgICAgICJIYWFyICh3aXRoIHNoaWZ0KSIsICAgICAgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZDMl9UUkFOU0ZPUk1fSEFBUl9TfSwgSU5UX01JTiwg SU5UX01BWCwgVkMyRU5DX0ZMQUdTLCAudW5pdCA9ICJ3YXZlbGV0X2lkeCJ9LAo+ICsgICAgICAg IHsiaGFhcl9ub3NoaWZ0IiwgIkhhYXIgKHdpdGhvdXQgc2hpZnQpIiwgICAgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0ID0gVkMyX1RSQU5TRk9STV9IQUFSfSwgICBJTlRfTUlOLCBJTlRfTUFY LCBWQzJFTkNfRkxBR1MsIC51bml0ID0gIndhdmVsZXRfaWR4In0sCj4gKyAgICB7InFtIiwgIkN1 c3RvbSBxdWFudGl6YXRpb24gbWF0cml4Iiwgb2Zmc2V0b2YoVkMyRW5jQ29udGV4dCwgcXVhbnRf bWF0cml4KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IFZDMl9RTV9ERUZ9LCAwLCBWQzJfUU1f TkIsIFZDMkVOQ19GTEFHUywgLnVuaXQgPSAicXVhbnRfbWF0cml4In0sCj4gKyAgICAgICAgeyJk ZWZhdWx0IiwgICAiRGVmYXVsdCBmcm9tIHRoZSBzcGVjaWZpY2F0aW9ucyIsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2NCA9IFZDMl9RTV9ERUZ9LCBJTlRfTUlOLCBJTlRfTUFYLCBWQzJFTkNf RkxBR1MsIC51bml0ID0gInF1YW50X21hdHJpeCJ9LAo+ICsgICAgICAgIHsiY29sb3IiLCAgICAg IlByZXZlbnRzIGxvdyBiaXRyYXRlIGRpc2NvbG9yYXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgey5pNjQgPSBWQzJfUU1fQ09MfSwgSU5UX01JTiwgSU5UX01BWCwgVkMyRU5DX0ZMQUdTLCAu dW5pdCA9ICJxdWFudF9tYXRyaXgifSwKPiArICAgICAgICB7ImZsYXQiLCAgICAgICJPcHRpbWl6 ZSBmb3IgUFNOUiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZDMl9RTV9GTEFUfSwg SU5UX01JTiwgSU5UX01BWCwgVkMyRU5DX0ZMQUdTLCAudW5pdCA9ICJxdWFudF9tYXRyaXgifSwK PiArICAgIHtOVUxMfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgdmMyZW5jX2Ns YXNzID0gewo+ICsgICAgLmNsYXNzX25hbWUgPSAidmMyX3Z1bGthbl9lbmNvZGVyIiwKPiArICAg IC5jYXRlZ29yeSA9IEFWX0NMQVNTX0NBVEVHT1JZX0VOQ09ERVIsCj4gKyAgICAub3B0aW9uID0g dmMyZW5jX29wdGlvbnMsCj4gKyAgICAuaXRlbV9uYW1lID0gYXZfZGVmYXVsdF9pdGVtX25hbWUs Cj4gKyAgICAudmVyc2lvbiA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVAo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IHZjMmVuY19kZWZhdWx0c1tdID0gewo+ICsgICAgeyAi YiIsICAgICAgICAgICAgICAiNjAwMDAwMDAwIiAgIH0sCj4gKyAgICB7IE5VTEwgfSwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBBVkNvZGVjSFdDb25maWdJbnRlcm5hbCAqY29uc3QgZmZfdmMy X2h3X2NvbmZpZ3NbXSA9IHsKPiArICAgIEhXX0NPTkZJR19FTkNPREVSX0ZSQU1FUyhWVUxLQU4s IFZVTEtBTiksCj4gKyAgICBIV19DT05GSUdfRU5DT0RFUl9ERVZJQ0UoTk9ORSwgIFZVTEtBTiks Cj4gKyAgICBOVUxMLAo+ICt9Owo+ICsKPiArY29uc3QgRkZDb2RlYyBmZl92YzJfdnVsa2FuX2Vu Y29kZXIgPSB7Cj4gKyAgICAucC5uYW1lICAgICAgICAgPSAidmMyX3Z1bGthbiIsCj4gKyAgICBD T0RFQ19MT05HX05BTUUoIlNNUFRFIFZDLTIiKSwKPiArICAgIC5wLnR5cGUgICAgICAgICA9IEFW TUVESUFfVFlQRV9WSURFTywKPiArICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lEX0RJ UkFDLAo+ICsgICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0hBUkRXQVJFLAo+ICsg ICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwKPiArICAgIC5w cml2X2RhdGFfc2l6ZSA9IHNpemVvZihWQzJFbmNWdWxrYW5Db250ZXh0KSwKPiArICAgIC5pbml0 ICAgICAgICAgICA9IHZjMl9lbmNvZGVfaW5pdCwKPiArICAgIC5jbG9zZSAgICAgICAgICA9IHZj Ml9lbmNvZGVfZW5kLAo+ICsgICAgRkZfQ09ERUNfRU5DT0RFX0NCKHZjMl9lbmNvZGVfZnJhbWUp LAo+ICsgICAgLnAucHJpdl9jbGFzcyAgID0gJnZjMmVuY19jbGFzcywKPiArICAgIC5kZWZhdWx0 cyAgICAgICA9IHZjMmVuY19kZWZhdWx0cywKPiArICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZN VF9WVUxLQU4pLAo+ICsgICAgLmh3X2NvbmZpZ3MgICAgID0gZmZfdmMyX2h3X2NvbmZpZ3MsCj4g K307Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaGFhci5jb21wIGIv bGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9oYWFyLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAuLjQ4MDZjY2E3MjkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9oYWFyLmNvbXAKPiBAQCAtMCwwICsxLDgyIEBACj4g Ky8qCj4gKyAqIFZDMiBjb2RlYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgcmFwaGFl bHRoZWdyZWF0IDxnZW9zdGVyM2RAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNl eHRlbnNpb24gR0xfRVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiByZXF1aXJlCj4gKyNleHRlbnNp b24gR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UgOiByZXF1aXJlCj4gKwo+ICsjZGVmaW5lIExPQ0FM X1ggMTAyNAo+ICsKPiArbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBDb21w dXRlSW5mbyB7Cj4gKyAgICBpbnQgczsKPiArICAgIGludCBwbGFuZV9pZHg7Cj4gKyAgICBpbnQg d2F2ZWxldF9kZXB0aDsKPiArfTsKPiArCj4gK3NoYXJlZCBpbnQgbG9jYWxfY29lZltMT0NBTF9Y XTsKPiArCj4gK3ZvaWQgbWFpbigpCj4gK3sKPiArICAgIGl2ZWMyIGNvb3JkID0gaXZlYzIoZ2xf R2xvYmFsSW52b2NhdGlvbklELnh5KTsKPiArICAgIGl2ZWMyIGR3dF9kaW0gPSBpbWFnZVNpemUo Y29lZl9idWZbcGxhbmVfaWR4XSk7Cj4gKyAgICBpbnQgdmFsdWUgPSBpbWFnZUxvYWQoY29lZl9i dWZbcGxhbmVfaWR4XSwgY29vcmQpLng7Cj4gKwo+ICsgICAgLyogUGVyZm9ybSBIYWFyIHdhdmVs ZXQgb24gdGhlIDMyeDMyIGxvY2FsIHdvcmtncm91cCB3aXRoIHNoYXJlZCBtZW1vcnkgKi8KPiAr ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2F2ZWxldF9kZXB0aDsgaSsrKQo+ICsgICAgewo+ICsg ICAgICAgIGl2ZWMyIG1hc2sgPSBpdmVjMigoMSA8PCBpKSAtIDEpOwo+ICsgICAgICAgIGlmIChh bnkobm90RXF1YWwoY29vcmQgJiBtYXNrLCBpdmVjMigwKSkpKQo+ICsgICAgICAgICAgICBicmVh azsKPiArCj4gKyAgICAgICAgLyogT2Zmc2V0IGJldHdlZW4gdmFsaWQgaG9yIHBpeGVscyBmb3Ig ZWFjaCBsZXZlbCwgKzEsICsyLCArNCBldGMgKi8KPiArICAgICAgICBpbnQgZGlzdCA9ICgxIDw8 IGkpOwo+ICsKPiArICAgICAgICBsb2NhbF9jb2VmW2dsX0xvY2FsSW52b2NhdGlvbkluZGV4XSA9 IHZhbHVlOwo+ICsgICAgICAgIGJhcnJpZXIoKTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRh bCBoYWFyIHdhdmVsZXQgKi8KPiArICAgICAgICB1aW50IG90aGVyX2lkID0gZ2xfTG9jYWxJbnZv Y2F0aW9uSW5kZXggXiBkaXN0Owo+ICsgICAgICAgIGludCBvdGhlciA9IGxvY2FsX2NvZWZbb3Ro ZXJfaWRdOwo+ICsgICAgICAgIGludCBhID0gZ2xfTG9jYWxJbnZvY2F0aW9uSW5kZXggPCBvdGhl cl9pZCA/IHZhbHVlIDogb3RoZXI7Cj4gKyAgICAgICAgaW50IGIgPSBnbF9Mb2NhbEludm9jYXRp b25JbmRleCA8IG90aGVyX2lkID8gb3RoZXIgOiB2YWx1ZTsKPiArICAgICAgICBpbnQgZHN0X2Ig PSAoYiAtIGEpICogKDEgPDwgcyk7Cj4gKyAgICAgICAgaW50IGRzdF9hID0gYSAqICgxIDw8IHMp ICsgKChkc3RfYiArIDEpID4+IDEpOwo+ICsgICAgICAgIHZhbHVlID0gZ2xfTG9jYWxJbnZvY2F0 aW9uSW5kZXggPCBvdGhlcl9pZCA/IGRzdF9hIDogZHN0X2I7Cj4gKwo+ICsgICAgICAgIC8qIE9m ZnNldCBiZXR3ZWVuIHZhbGlkIHZlciBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwsICsxLCArMiwgKzQg ZXRjICovCj4gKyAgICAgICAgZGlzdCA8PD0gNTsKPiArCj4gKyAgICAgICAgbG9jYWxfY29lZltn bF9Mb2NhbEludm9jYXRpb25JbmRleF0gPSB2YWx1ZTsKPiArICAgICAgICBiYXJyaWVyKCk7Cj4g Kwo+ICsgICAgICAgIC8qIFZlcnRpY2FsIGhhYXIgd2F2ZWxldCAqLwo+ICsgICAgICAgIG90aGVy X2lkID0gZ2xfTG9jYWxJbnZvY2F0aW9uSW5kZXggXiBkaXN0Owo+ICsgICAgICAgIG90aGVyID0g bG9jYWxfY29lZltvdGhlcl9pZF07Cj4gKyAgICAgICAgYSA9IGdsX0xvY2FsSW52b2NhdGlvbklu ZGV4IDwgb3RoZXJfaWQgPyB2YWx1ZSA6IG90aGVyOwo+ICsgICAgICAgIGIgPSBnbF9Mb2NhbElu dm9jYXRpb25JbmRleCA8IG90aGVyX2lkID8gb3RoZXIgOiB2YWx1ZTsKPiArICAgICAgICBkc3Rf YiA9IGIgLSBhOwo+ICsgICAgICAgIGRzdF9hID0gYSArICgoZHN0X2IgKyAxKSA+PiAxKTsKPiAr ICAgICAgICB2YWx1ZSA9IGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IDwgb3RoZXJfaWQgPyBkc3Rf YSA6IGRzdF9iOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFN0b3JlIHZhbHVlICovCj4gKyAgICBp bWFnZVN0b3JlKGNvZWZfYnVmW3BsYW5lX2lkeF0sIGNvb3JkLCBpdmVjNCh2YWx1ZSkpOwo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaGFhcl9zdWJncm91cC5j b21wIGIvbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9oYWFyX3N1Ymdyb3VwLmNvbXAKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjgxYjA5NjQyNzEKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9oYWFyX3N1Ymdyb3VwLmNv bXAKPiBAQCAtMCwwICsxLDc1IEBACj4gKy8qCj4gKyAqIFZDMiBjb2RlYwo+ICsgKgo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMjUgcmFwaGFlbHRoZWdyZWF0IDxnZW9zdGVyM2RAZ21haWwuY29tPgo+ ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp Ywo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQo+ICsgKi8KPiArCj4gKyNleHRlbnNpb24gR0xfRVhUX3NjYWxhcl9ibG9ja19sYXlv dXQgOiByZXF1aXJlCj4gKyNleHRlbnNpb24gR0xfS0hSX3NoYWRlcl9zdWJncm91cF9iYXNpYyA6 IHJlcXVpcmUKPiArI2V4dGVuc2lvbiBHTF9LSFJfc2hhZGVyX3N1Ymdyb3VwX3NodWZmbGUgOiBy ZXF1aXJlCj4gKwo+ICsjZGVmaW5lIFRJTEVfRElNIDgKPiArCj4gK2xheW91dChwdXNoX2NvbnN0 YW50LCBzY2FsYXIpIHVuaWZvcm0gQ29tcHV0ZUluZm8gewo+ICsgICAgaW50IHM7Cj4gKyAgICBp bnQgcGxhbmVfaWR4Owo+ICsgICAgaW50IHdhdmVsZXRfZGVwdGg7Cj4gK307Cj4gKwo+ICt2b2lk IG1haW4oKQo+ICt7Cj4gKyAgICBpdmVjMiB0aWxlX2Nvb3JkID0gaXZlYzIoZ2xfV29ya0dyb3Vw SUQueHkpOwo+ICsgICAgaXZlYzIgbG9jYWxfY29vcmQgPSBpdmVjMihnbF9Mb2NhbEludm9jYXRp b25JbmRleCAmIDcsIGdsX0xvY2FsSW52b2NhdGlvbkluZGV4ID4+IDMpOwo+ICsgICAgaXZlYzIg Y29vcmQgPSB0aWxlX2Nvb3JkICogaXZlYzIoVElMRV9ESU0pICsgbG9jYWxfY29vcmQ7Cj4gKwo+ ICsgICAgaW50IHZhbHVlID0gaW1hZ2VMb2FkKGNvZWZfYnVmW3BsYW5lX2lkeF0sIGNvb3JkKS54 Owo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3YXZlbGV0X2RlcHRoOyBpKyspCj4gKyAgICB7 Cj4gKyAgICAgICAgaXZlYzIgbWFzayA9IGl2ZWMyKCgxIDw8IGkpIC0gMSk7Cj4gKyAgICAgICAg aWYgKGFueShub3RFcXVhbChsb2NhbF9jb29yZCAmIG1hc2ssIGl2ZWMyKDApKSkpCj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsKPiArICAgICAgICAvKiBPZmZzZXQgYmV0d2VlbiB2YWxpZCBob3Ig cGl4ZWxzIGZvciBlYWNoIGxldmVsLCArMSwgKzIsICs0IGV0YyAqLwo+ICsgICAgICAgIGludCBk aXN0ID0gKDEgPDwgaSk7Cj4gKwo+ICsgICAgICAgIC8qIEhvcml6b250YWwgaGFhciB3YXZlbGV0 ICovCj4gKyAgICAgICAgdWludCBvdGhlcl9zdWJfaWQgPSBnbF9TdWJncm91cEludm9jYXRpb25J RCBeIGRpc3Q7Cj4gKyAgICAgICAgaW50IG90aGVyID0gc3ViZ3JvdXBTaHVmZmxlKHZhbHVlLCBv dGhlcl9zdWJfaWQpOwo+ICsgICAgICAgIGludCBhID0gZ2xfU3ViZ3JvdXBJbnZvY2F0aW9uSUQg PCBvdGhlcl9zdWJfaWQgPyB2YWx1ZSA6IG90aGVyOwo+ICsgICAgICAgIGludCBiID0gZ2xfU3Vi Z3JvdXBJbnZvY2F0aW9uSUQgPCBvdGhlcl9zdWJfaWQgPyBvdGhlciA6IHZhbHVlOwo+ICsgICAg ICAgIGludCBkc3RfYiA9IChiIC0gYSkgKiAoMSA8PCBzKTsKPiArICAgICAgICBpbnQgZHN0X2Eg PSBhICogKDEgPDwgcykgKyAoKGRzdF9iICsgMSkgPj4gMSk7Cj4gKyAgICAgICAgdmFsdWUgPSBn bF9TdWJncm91cEludm9jYXRpb25JRCA8IG90aGVyX3N1Yl9pZCA/IGRzdF9hIDogZHN0X2I7Cj4g Kwo+ICsgICAgICAgIC8qIE9mZnNldCBiZXR3ZWVuIHZhbGlkIHZlciBwaXhlbHMgZm9yIGVhY2gg bGV2ZWwsICsxLCArMiwgKzQgZXRjICovCj4gKyAgICAgICAgZGlzdCA8PD0gMzsKPiArCj4gKyAg ICAgICAgLyogVmVydGljYWwgaGFhciB3YXZlbGV0ICovCj4gKyAgICAgICAgb3RoZXJfc3ViX2lk ID0gZ2xfU3ViZ3JvdXBJbnZvY2F0aW9uSUQgXiBkaXN0Owo+ICsgICAgICAgIG90aGVyID0gc3Vi Z3JvdXBTaHVmZmxlKHZhbHVlLCBvdGhlcl9zdWJfaWQpOwo+ICsgICAgICAgIGEgPSBnbF9TdWJn cm91cEludm9jYXRpb25JRCA8IG90aGVyX3N1Yl9pZCA/IHZhbHVlIDogb3RoZXI7Cj4gKyAgICAg ICAgYiA9IGdsX1N1Ymdyb3VwSW52b2NhdGlvbklEIDwgb3RoZXJfc3ViX2lkID8gb3RoZXIgOiB2 YWx1ZTsKPiArICAgICAgICBkc3RfYiA9IGIgLSBhOwo+ICsgICAgICAgIGRzdF9hID0gYSArICgo ZHN0X2IgKyAxKSA+PiAxKTsKPiArICAgICAgICB2YWx1ZSA9IGdsX1N1Ymdyb3VwSW52b2NhdGlv bklEIDwgb3RoZXJfc3ViX2lkID8gZHN0X2EgOiBkc3RfYjsKPiArICAgIH0KPiArCj4gKyAgICAv KiBTdG9yZSB2YWx1ZSAqLwo+ICsgICAgaW1hZ2VTdG9yZShjb2VmX2J1ZltwbGFuZV9pZHhdLCBj b29yZCwgaXZlYzQodmFsdWUpKTsKPiArfQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGth bi92YzJfZHd0X2hvcl9sZWdhbGwuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaG9y X2xlZ2FsbC5jb21wCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5i YWRhMmVlMWZkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9k d3RfaG9yX2xlZ2FsbC5jb21wCj4gQEAgLTAsMCArMSw4MiBAQAo+ICsvKgo+ICsgKiBWQzIgY29k ZWMKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI1IHJhcGhhZWx0aGVncmVhdCA8Z2Vvc3Rl cjNkQGdtYWlsLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4g KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9z Y2FsYXJfYmxvY2tfbGF5b3V0IDogcmVxdWlyZQo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9idWZmZXJf cmVmZXJlbmNlIDogcmVxdWlyZQo+ICsKPiArbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikg dW5pZm9ybSBDb21wdXRlSW5mbyB7Cj4gKyAgICBpbnQgczsKPiArICAgIGludCBkaWZmX29mZnNl dDsKPiArICAgIGludCBsZXZlbDsKPiArfTsKPiArCj4gK2ludCBpbWFnZV9sb2FkKGludCBjb29y ZF94KQo+ICt7Cj4gKyAgICBpbnQgY29vcmRfeSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQu eCk7Cj4gKyAgICByZXR1cm4gaW1hZ2VMb2FkKGNvZWZfYnVmW2dsX0dsb2JhbEludm9jYXRpb25J RC56XSwgaXZlYzIoY29vcmRfeCwgY29vcmRfeSkpLng7Cj4gK30KPiArCj4gK3ZvaWQgaW1hZ2Vf c3RvcmUoaW50IGNvb3JkX3gsIGludCB2YWx1ZSkKPiArewo+ICsgICAgaW50IGNvb3JkX3kgPSBp bnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpOwo+ICsgICAgaW1hZ2VTdG9yZShjb2VmX2J1Zltn bF9HbG9iYWxJbnZvY2F0aW9uSUQuel0sIGl2ZWMyKGNvb3JkX3gsIGNvb3JkX3kpLCBpdmVjNCh2 YWx1ZSkpOwo+ICt9Cj4gKwo+ICt2b2lkIG1haW4oKQo+ICt7Cj4gKyAgICBpbnQgY29vcmRfeSA9 IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCk7Cj4gKyAgICB1aW50IHBsYW5lX2lkeCA9IGds X0dsb2JhbEludm9jYXRpb25JRC56Owo+ICsgICAgaXZlYzIgd29ya19hcmVhID0gaW1hZ2VTaXpl KGNvZWZfYnVmW3BsYW5lX2lkeF0pOwo+ICsgICAgaW50IGRpc3QgPSAxIDw8IGxldmVsOwo+ICsg ICAgaWYgKGNvb3JkX3kgPj0gd29ya19hcmVhLnkgfHwgKGNvb3JkX3kgJiAoZGlzdCAtIDEpKSAh PSAwKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAvLyBTaGlmdCBpbiBvbmUgYml0IHRo YXQgaXMgdXNlZCBmb3IgYWRkaXRpb25hbCBwcmVjaXNpb24KPiArICAgIGZvciAoaW50IHggPSAw OyB4IDwgd29ya19hcmVhLng7IHggKz0gZGlzdCkKPiArICAgICAgICBpbWFnZV9zdG9yZSh4LCBp bWFnZV9sb2FkKHgpIDw8IDEpOwo+ICsKPiArICAgIC8vIExpZnRpbmcgc3RhZ2UgMgo+ICsgICAg Zm9yIChpbnQgeCA9IDA7IHggPCB3b3JrX2FyZWEueCAtIDIgKiBkaXN0OyB4ICs9IDIgKiBkaXN0 KSB7Cj4gKyAgICAgICAgaW50IGxocyA9IGltYWdlX2xvYWQoeCk7Cj4gKyAgICAgICAgaW50IHJo cyA9IGltYWdlX2xvYWQoeCArIDIgKiBkaXN0KTsKPiArICAgICAgICBpbnQgdmFsdWUgPSBpbWFn ZV9sb2FkKHggKyBkaXN0KTsKPiArICAgICAgICB2YWx1ZSAtPSAobGhzICsgcmhzICsgMSkgPj4g MTsKPiArICAgICAgICBpbWFnZV9zdG9yZSh4ICsgZGlzdCwgdmFsdWUpOwo+ICsgICAgfQo+ICsg ICAgaW50IGxocyA9IGltYWdlX2xvYWQod29ya19hcmVhLnggLSAyICogZGlzdCk7Cj4gKyAgICBp bnQgdmFsdWUgPSBpbWFnZV9sb2FkKHdvcmtfYXJlYS54IC0gZGlzdCk7Cj4gKyAgICB2YWx1ZSAt PSAoMiAqIGxocyArIDEpID4+IDE7Cj4gKyAgICBpbWFnZV9zdG9yZSh3b3JrX2FyZWEueCAtIGRp c3QsIHZhbHVlKTsKPiArCj4gKyAgICAvLyBMaWZ0aW5nIHN0YWdlIDEKPiArICAgIGxocyA9IGlt YWdlX2xvYWQoZGlzdCk7Cj4gKyAgICB2YWx1ZSA9IGltYWdlX2xvYWQoMCk7Cj4gKyAgICB2YWx1 ZSArPSAoMiAqIGxocyArIDIpID4+IDI7Cj4gKyAgICBpbWFnZV9zdG9yZSgwLCB2YWx1ZSk7Cj4g KyAgICBmb3IgKGludCB4ID0gMiAqIGRpc3Q7IHggPD0gd29ya19hcmVhLnggLSAyICogZGlzdDsg eCArPSAyICogZGlzdCkgewo+ICsgICAgICAgIGludCBsaHMgPSBpbWFnZV9sb2FkKHggLSBkaXN0 KTsKPiArICAgICAgICBpbnQgcmhzID0gaW1hZ2VfbG9hZCh4ICsgZGlzdCk7Cj4gKyAgICAgICAg aW50IHZhbHVlID0gaW1hZ2VfbG9hZCh4KTsKPiArICAgICAgICB2YWx1ZSArPSAobGhzICsgcmhz ICsgMikgPj4gMjsKPiArICAgICAgICBpbWFnZV9zdG9yZSh4LCB2YWx1ZSk7Cj4gKyAgICB9Cj4g K30KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF91cGxvYWQuY29tcCBi L2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfdXBsb2FkLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmM3NThmZDg2N2YKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF91cGxvYWQuY29tcAo+IEBAIC0wLDAgKzEsOTYg QEAKPiArLyoKPiArICogVkMyIGNvZGVjCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBy YXBoYWVsdGhlZ3JlYXQgPGdlb3N0ZXIzZEBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsK PiArI2V4dGVuc2lvbiBHTF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91dCA6IHJlcXVpcmUKPiArI2V4 dGVuc2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0aWNfdHlwZXMgOiByZXF1aXJl Cj4gKwo+ICsjZGVmaW5lIEFWX1BJWF9GTVRfWFYzMCAyMTQKPiArI2RlZmluZSBBVl9QSVhfRk1U X1hWMzYgMjE2Cj4gKyNkZWZpbmUgQVZfUElYX0ZNVF9YVjQ4IDI0Mgo+ICsjZGVmaW5lIEFWX1BJ WF9GTVRfUDIxMiAyMjIKPiArI2RlZmluZSBBVl9QSVhfRk1UX1AwMTIgMjA5Cj4gKyNkZWZpbmUg QVZfUElYX0ZNVF9QMjEwIDE5OAo+ICsjZGVmaW5lIEFWX1BJWF9GTVRfUDAxNiAxNjkKPiArI2Rl ZmluZSBBVl9QSVhfRk1UX1AwMTAgMTU4Cj4gKyNkZWZpbmUgQVZfUElYX0ZNVF9OVjE2IDEwMQo+ ICsjZGVmaW5lIEFWX1BJWF9GTVRfTlYxMiAyMwo+ICsKPiArI2RlZmluZSBZIDAKPiArI2RlZmlu ZSBVIDEKPiArI2RlZmluZSBWIDIKPiArCj4gK2xheW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIp IHVuaWZvcm0gQ29tcHV0ZUluZm8gewo+ICsgICAgaW50IHM7Cj4gKyAgICBpbnQgZGlmZl9vZmZz ZXQ7Cj4gKyAgICBpbnQgbGV2ZWw7Cj4gK307Cj4gKwo+ICt1dmVjNCBsb2FkX3BsYW5lKHVpbnQg cGxhbmVfaWR4KQo+ICt7Cj4gKyAgICBpdmVjMiBjb29yZCA9IGl2ZWMyKGdsX0dsb2JhbEludm9j YXRpb25JRC54eSk7Cj4gKyAgICByZXR1cm4gaW1hZ2VMb2FkKHNyY19wbGFuZXNbcGxhbmVfaWR4 XSwgY29vcmQpOwo+ICt9Cj4gKwo+ICt2b2lkIHN0b3JlX3BsYW5lKHVpbnQgcGxhbmVfaWR4LCB1 aW50IHZhbHVlKQo+ICt7Cj4gKyAgICBpbnQgcmVzdWx0ID0gaW50KHZhbHVlIC0gZGlmZl9vZmZz ZXQpOwo+ICsgICAgaXZlYzIgY29vcmQgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkp Owo+ICsgICAgaW1hZ2VTdG9yZShjb2VmX2J1ZltwbGFuZV9pZHhdLCBjb29yZCwgaXZlYzQocmVz dWx0KSk7Cj4gK30KPiArCj4gK3ZvaWQgbWFpbigpCj4gK3sKPiArICAgIHV2ZWM0IHAwID0gbG9h ZF9wbGFuZSgwKTsKPiArI2lmIFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1hWMzAKPiArICAgIHN0 b3JlX3BsYW5lKFksIChwMC54ID4+IDEwKSAmIDB4M0ZGKTsKPiArICAgIHN0b3JlX3BsYW5lKFUs IHAwLnggJiAweDNGRik7Cj4gKyAgICBzdG9yZV9wbGFuZShWLCAocDAueCA+PiAyMCkgJiAweDNG Rik7Cj4gKyNlbGlmIFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1hWMzYKPiArICAgIHN0b3JlX3Bs YW5lKFksIHAwLnkgPj4gNCk7Cj4gKyAgICBzdG9yZV9wbGFuZShVLCBwMC54ID4+IDQpOwo+ICsg ICAgc3RvcmVfcGxhbmUoViwgcDAueiA+PiA0KTsKPiArI2VsaWYgUExBTkVfRk1UID09IEFWX1BJ WF9GTVRfTlYxMgo+ICsgICAgdXZlYzQgcDEgPSBsb2FkX3BsYW5lKDEpOwo+ICsgICAgc3RvcmVf cGxhbmUoWSwgcDAueCB8IHAwLnkgPDwgOCk7Cj4gKyAgICBzdG9yZV9wbGFuZShVLCBwMS54KTsK PiArICAgIHN0b3JlX3BsYW5lKFYsIHAxLnkpOwo+ICsjZWxpZiBQTEFORV9GTVQgPT0gQVZfUElY X0ZNVF9OVjE2Cj4gKyAgICB1dmVjNCBwMSA9IGxvYWRfcGxhbmUoMSk7Cj4gKyAgICBzdG9yZV9w bGFuZShZLCBwMC54KTsKPiArICAgIHN0b3JlX3BsYW5lKFUsIHAxLngpOwo+ICsgICAgc3RvcmVf cGxhbmUoViwgcDEueSk7Cj4gKyNlbGlmIFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1AwMTAgfHwg UExBTkVfRk1UID09IEFWX1BJWF9GTVRfUDIxMAo+ICsgICAgdXZlYzQgcDEgPSBsb2FkX3BsYW5l KDEpOwo+ICsgICAgc3RvcmVfcGxhbmUoWSwgcDAueCA+PiA2KTsKPiArICAgIHN0b3JlX3BsYW5l KFUsIHAxLnggPj4gNik7Cj4gKyAgICBzdG9yZV9wbGFuZShWLCBwMS55ID4+IDYpOwo+ICsjZWxp ZiBQTEFORV9GTVQgPT0gQVZfUElYX0ZNVF9QMDEyIHx8IFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1U X1AyMTIKPiArICAgIHV2ZWM0IHAxID0gbG9hZF9wbGFuZSgxKTsKPiArICAgIHN0b3JlX3BsYW5l KFksIHAwLnggPj4gNCk7Cj4gKyAgICBzdG9yZV9wbGFuZShVLCBwMS54ID4+IDQpOwo+ICsgICAg c3RvcmVfcGxhbmUoViwgcDEueSA+PiA0KTsKPiArI2Vsc2UKPiArICAgIHN0b3JlX3BsYW5lKFks IHAwLngpOwo+ICsgICAgc3RvcmVfcGxhbmUoVSwgbG9hZF9wbGFuZSgxKS54KTsKPiArICAgIHN0 b3JlX3BsYW5lKFYsIGxvYWRfcGxhbmUoMikueCk7Cj4gKyNlbmRpZgo+ICt9Cj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfdmVyX2xlZ2FsbC5jb21wIGIvbGliYXZjb2Rl Yy92dWxrYW4vdmMyX2R3dF92ZXJfbGVnYWxsLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAuLmNhMzkxY2M4ZDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGli YXZjb2RlYy92dWxrYW4vdmMyX2R3dF92ZXJfbGVnYWxsLmNvbXAKPiBAQCAtMCwwICsxLDc4IEBA Cj4gKy8qCj4gKyAqIFZDMiBjb2RlYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgcmFw aGFlbHRoZWdyZWF0IDxnZW9zdGVyM2RAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4g KyNleHRlbnNpb24gR0xfRVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiByZXF1aXJlCj4gKyNleHRl bnNpb24gR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UgOiByZXF1aXJlCj4gKwo+ICtsYXlvdXQocHVz aF9jb25zdGFudCwgc2NhbGFyKSB1bmlmb3JtIENvbXB1dGVJbmZvIHsKPiArICAgIGludCBzOwo+ ICsgICAgaW50IGRpZmZfb2Zmc2V0Owo+ICsgICAgaW50IGxldmVsOwo+ICt9Owo+ICsKPiAraW50 IGltYWdlX2xvYWQoaW50IGNvb3JkX3kpCj4gK3sKPiArICAgIGludCBjb29yZF94ID0gaW50KGds X0dsb2JhbEludm9jYXRpb25JRC54KTsKPiArICAgIHJldHVybiBpbWFnZUxvYWQoY29lZl9idWZb Z2xfR2xvYmFsSW52b2NhdGlvbklELnpdLCBpdmVjMihjb29yZF94LCBjb29yZF95KSkueDsKPiAr fQo+ICsKPiArdm9pZCBpbWFnZV9zdG9yZShpbnQgY29vcmRfeSwgaW50IHZhbHVlKQo+ICt7Cj4g KyAgICBpbnQgY29vcmRfeCA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCk7Cj4gKyAgICBp bWFnZVN0b3JlKGNvZWZfYnVmW2dsX0dsb2JhbEludm9jYXRpb25JRC56XSwgaXZlYzIoY29vcmRf eCwgY29vcmRfeSksIGl2ZWM0KHZhbHVlKSk7Cj4gK30KPiArCj4gK3ZvaWQgbWFpbigpCj4gK3sK PiArICAgIGludCBjb29yZF94ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiArICAg IHVpbnQgcGxhbmVfaWR4ID0gZ2xfR2xvYmFsSW52b2NhdGlvbklELno7Cj4gKyAgICBpdmVjMiB3 b3JrX2FyZWEgPSBpbWFnZVNpemUoY29lZl9idWZbcGxhbmVfaWR4XSk7Cj4gKyAgICBpbnQgZGlz dCA9IDEgPDwgbGV2ZWw7Cj4gKyAgICBpZiAoY29vcmRfeCA+PSB3b3JrX2FyZWEueCB8fCAoY29v cmRfeCAmIChkaXN0IC0gMSkpICE9IDApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIC8v IExpZnRpbmcgc3RhZ2UgMgo+ICsgICAgZm9yIChpbnQgeSA9IGRpc3Q7IHkgPCB3b3JrX2FyZWEu eSAtIDIgKiBkaXN0OyB5ICs9IDIgKiBkaXN0KSB7Cj4gKyAgICAgICAgaW50IGxocyA9IGltYWdl X2xvYWQoeSAtIGRpc3QpOwo+ICsgICAgICAgIGludCByaHMgPSBpbWFnZV9sb2FkKHkgKyBkaXN0 KTsKPiArICAgICAgICBpbnQgdmFsdWUgPSBpbWFnZV9sb2FkKHkpOwo+ICsgICAgICAgIHZhbHVl IC09IChsaHMgKyByaHMgKyAxKSA+PiAxOwo+ICsgICAgICAgIGltYWdlX3N0b3JlKHksIHZhbHVl KTsKPiArICAgIH0KPiArICAgIGludCBsaHMgPSBpbWFnZV9sb2FkKHdvcmtfYXJlYS55IC0gMiAq IGRpc3QpOwo+ICsgICAgaW50IHZhbHVlID0gaW1hZ2VfbG9hZCh3b3JrX2FyZWEueSAtIGRpc3Qp Owo+ICsgICAgdmFsdWUgLT0gKDIgKiBsaHMgKyAxKSA+PiAxOwo+ICsgICAgaW1hZ2Vfc3RvcmUo d29ya19hcmVhLnkgLSBkaXN0LCB2YWx1ZSk7Cj4gKwo+ICsgICAgLy8gTGlmdGluZyBzdGFnZSAx Cj4gKyAgICBsaHMgPSBpbWFnZV9sb2FkKGRpc3QpOwo+ICsgICAgdmFsdWUgPSBpbWFnZV9sb2Fk KDApOwo+ICsgICAgdmFsdWUgKz0gKDIgKiBsaHMgKyAyKSA+PiAyOwo+ICsgICAgaW1hZ2Vfc3Rv cmUoMCwgdmFsdWUpOwo+ICsgICAgZm9yIChpbnQgeSA9IDIgKiBkaXN0OyB5IDw9IHdvcmtfYXJl YS55IC0gMiAqIGRpc3Q7IHkgKz0gMiAqIGRpc3QpIHsKPiArICAgICAgICBpbnQgbGhzID0gaW1h Z2VfbG9hZCh5ICsgZGlzdCk7Cj4gKyAgICAgICAgaW50IHJocyA9IGltYWdlX2xvYWQoeSAtIGRp c3QpOwo+ICsgICAgICAgIGludCB2YWx1ZSA9IGltYWdlX2xvYWQoeSk7Cj4gKyAgICAgICAgdmFs dWUgKz0gKGxocyArIHJocyArIDIpID4+IDI7Cj4gKyAgICAgICAgaW1hZ2Vfc3RvcmUoeSwgdmFs dWUpOwo+ICsgICAgfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9l bmNvZGUuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9lbmNvZGUuY29tcAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uNGQ4YWRjY2E2MQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9saWJhdmNvZGVjL3Z1bGthbi92YzJfZW5jb2RlLmNvbXAKPiBAQCAtMCwwICsx LDE1OSBAQAo+ICsvKgo+ICsgKiBWQzIgY29kZWMKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAy MDI1IHJhcGhhZWx0aGVncmVhdCA8Z2Vvc3RlcjNkQGdtYWlsLmNvbT4KPiArICoKPiArICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4g KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiAr ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoK PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICov Cj4gKwo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfZXhwbGljaXRfYXJpdGhtZXRpY190eXBl cyA6IHJlcXVpcmUKPiArI2V4dGVuc2lvbiBHTF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91dCA6IHJl cXVpcmUKPiArI2V4dGVuc2lvbiBHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZSA6IHJlcXVpcmUKPiAr I2V4dGVuc2lvbiBHTF9FWFRfZGVidWdfcHJpbnRmIDogcmVxdWlyZQo+ICsKPiArI2RlZmluZSBN QVhfRFdUX0xFVkVMUyAoNSkKPiArCj4gK2xheW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIpIHVu aWZvcm0gQ29tcHV0ZUluZm8gewo+ICsgICAgdThidWYgYnl0ZXN0cmVhbTsKPiArICAgIGl2ZWMy IG51bV9zbGljZXM7Cj4gKyAgICBpbnQgd2F2ZWxldF9kZXB0aDsKPiArICAgIGludCBzaXplX3Nj YWxlcjsKPiArICAgIGludCBwcmVmaXhfYnl0ZXM7Cj4gK307Cj4gKwo+ICt2b2lkIHB1dF92YzJf dWVfdWludChpbm91dCBQdXRCaXRDb250ZXh0IHBiLCB1aW50IHZhbCkKPiArewo+ICsgICAgdWlu dDMyX3QgcGJpdHMgPSAxOwo+ICsgICAgaW50IGJpdHMgPSAxOwo+ICsKPiArICAgICsrdmFsOwo+ ICsKPiArICAgIHdoaWxlICgodmFsID4+IDgpICE9IDApCj4gKyAgICB7Cj4gKyAgICAgICAgcGJp dHMgfD0gdWludDMyX3QoaW50ZXJsZWF2ZWRfdWVfZ29sb21iX3RhYlt2YWwgJiAweGZmXSkgPDwg Yml0czsKPiArICAgICAgICB2YWwgPj49IDg7Cj4gKyAgICAgICAgYml0cyArPSAxNjsKPiArICAg IH0KPiArCj4gKyAgICBwYml0cyB8PSB1aW50MzJfdCh0b3BfaW50ZXJsZWF2ZWRfdWVfZ29sb21i X3RhYlt2YWxdKSA8PCBiaXRzOwo+ICsgICAgYml0cyAgKz0gZ29sb21iX2xlbl90YWJbdmFsXTsK PiArICAgIHB1dF9iaXRzKHBiLCBiaXRzLCBwYml0cyk7Cj4gK30KPiArCj4gK2ludCBxdWFudHNb TUFYX0RXVF9MRVZFTFNdWzRdOwo+ICsKPiAraW50IHN1YmJhbmRfY29vcmQoaW50IGluZGV4LCBp bnQgaCwgaW50IGx2bCkKPiArewo+ICsgICAgaW50IGNvb3JkID0gaW5kZXg7Cj4gKyAgICBjb29y ZCA8PD0gMTsKPiArICAgIGNvb3JkIHw9IGg7Cj4gKyAgICBjb29yZCA8PD0gKHdhdmVsZXRfZGVw dGgtbHZsLTEpOwo+ICsgICAgcmV0dXJuIGNvb3JkOwo+ICt9Cj4gKwo+ICt2b2lkIG1haW4oKQo+ ICt7Cj4gKyAgICBpbnQgc2xpY2VfaW5kZXggPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngp Owo+ICsgICAgaW50IG1heF9pbmRleCA9IG51bV9zbGljZXMueCAqIG51bV9zbGljZXMueTsKPiAr ICAgIGlmIChzbGljZV9pbmRleCA+PSBtYXhfaW5kZXgpCj4gKyAgICAgICAgcmV0dXJuOwo+ICsK PiArICAgIC8qIFN0ZXAgMi4gUXVhbnRpemUgYW5kIGVuY29kZSAqLwo+ICsgICAgaW50IHBiX3N0 YXJ0ID0gc2xpY2VfYXJnc1tzbGljZV9pbmRleF0ucGJfc3RhcnQ7Cj4gKyAgICBpbnQgd29ya2dy b3VwX3ggPSBpbnQoZ2xfV29ya0dyb3VwU2l6ZS54KTsKPiArICAgIGZvciAoaW50IGkgPSAwLCBp bmRleCA9IHdvcmtncm91cF94IC0gMTsgaSA8IGdsX1dvcmtHcm91cElELng7IGkrKykgewo+ICsg ICAgICAgIHBiX3N0YXJ0ICs9IHNsaWNlX2FyZ3NbaW5kZXhdLnBiX3N0YXJ0ICsgc2xpY2VfYXJn c1tpbmRleF0uYnl0ZXM7Cj4gKyAgICAgICAgaW5kZXggKz0gd29ya2dyb3VwX3g7Cj4gKyAgICB9 Cj4gKyAgICBpdmVjMiBzbGljZV9jb29yZCA9IGl2ZWMyKHNsaWNlX2luZGV4ICUgbnVtX3NsaWNl cy54LCBzbGljZV9pbmRleCAvIG51bV9zbGljZXMueCk7Cj4gKyAgICBpbnQgc2xpY2VfYnl0ZXNf bWF4ID0gc2xpY2VfYXJnc1tzbGljZV9pbmRleF0uYnl0ZXM7Cj4gKyAgICBpbnQgcXVhbnRfaW5k ZXggPSBzbGljZV9hcmdzW3NsaWNlX2luZGV4XS5xdWFudF9pZHg7Cj4gKwo+ICsgICAgUHV0Qml0 Q29udGV4dCBwYjsKPiArICAgIGluaXRfcHV0X2JpdHMocGIsIE9GRkJVRih1OGJ1ZiwgYnl0ZXN0 cmVhbSwgcGJfc3RhcnQpLCBzbGljZV9ieXRlc19tYXgpOwo+ICsKPiArICAgIGZvciAoaW50IGxl dmVsID0gMDsgbGV2ZWwgPCB3YXZlbGV0X2RlcHRoOyBsZXZlbCsrKQo+ICsgICAgICAgIGZvciAo aW50IG9yaWVudGF0aW9uID0gaW50KGxldmVsID4gMCk7IG9yaWVudGF0aW9uIDwgNDsgb3JpZW50 YXRpb24rKykKPiArICAgICAgICAgICAgcXVhbnRzW2xldmVsXVtvcmllbnRhdGlvbl0gPSBtYXgo cXVhbnRfaW5kZXggLSBsdXRfcXVhbnRbbGV2ZWxdW29yaWVudGF0aW9uXSwgMCk7Cj4gKwo+ICsg ICAgLyogV3JpdGUgcXVhbnQgaW5kZXggZm9yIHRoaXMgc2xpY2UgKi8KPiArICAgIHB1dF9iaXRz KHBiLCA4LCBxdWFudF9pbmRleCk7Cj4gKwo+ICsgICAgLyogTHVtYSArIDIgQ2hyb21hIHBsYW5l cyAqLwo+ICsgICAgZm9yIChpbnQgcCA9IDA7IHAgPCAzOyBwKyspCj4gKyAgICB7Cj4gKyAgICAg ICAgaW50IHBhZF9zLCBwYWRfYzsKPiArICAgICAgICBpbnQgYnl0ZXNfc3RhcnQgPSBpbnQzMl90 KHB1dF9ieXRlc19jb3VudChwYikpOwo+ICsKPiArICAgICAgICAvKiBTYXZlIGN1cnJlbnQgbG9j YXRpb24gYW5kIHdyaXRlIGEgemVybyB2YWx1ZSAqLwo+ICsgICAgICAgIHVpbnQ2NF90IHdyaXRl X3B0cl9zdGFydCA9IHBiLmJ1ZjsKPiArICAgICAgICBpbnQgYml0X2xlZnRfc3RhcnQgPSBwYi5i aXRfbGVmdDsKPiArICAgICAgICBwdXRfYml0cyhwYiwgOCwgMCk7Cj4gKwo+ICsgICAgICAgIGl2 ZWMyIGR3dF9kaW0gPSBpbWFnZVNpemUoY29lZl9idWZbcF0pOwo+ICsgICAgICAgIGZvciAoaW50 IGxldmVsID0gMDsgbGV2ZWwgPCB3YXZlbGV0X2RlcHRoOyBsZXZlbCsrKQo+ICsgICAgICAgIHsK PiArICAgICAgICAgICAgaXZlYzIgYmFuZF9zaXplID0gZHd0X2RpbSA+PiAod2F2ZWxldF9kZXB0 aCAtIGxldmVsKTsKPiArICAgICAgICAgICAgZm9yIChpbnQgbyA9IGludChsZXZlbCA+IDApOyBv IDwgNDsgbysrKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAvKiBFbmNvZGUg c3ViYmFuZCAqLwo+ICsgICAgICAgICAgICAgICAgaW50IGxlZnQgPSBiYW5kX3NpemUueCAqIChz bGljZV9jb29yZC54KSAvIG51bV9zbGljZXMueDsKPiArICAgICAgICAgICAgICAgIGludCByaWdo dCA9IGJhbmRfc2l6ZS54ICogKHNsaWNlX2Nvb3JkLngrMSkgLyBudW1fc2xpY2VzLng7Cj4gKyAg ICAgICAgICAgICAgICBpbnQgdG9wID0gYmFuZF9zaXplLnkgKiAoc2xpY2VfY29vcmQueSkgLyBu dW1fc2xpY2VzLnk7Cj4gKyAgICAgICAgICAgICAgICBpbnQgYm90dG9tID0gYmFuZF9zaXplLnkg KiAoc2xpY2VfY29vcmQueSsxKSAvIG51bV9zbGljZXMueTsKPiArCj4gKyAgICAgICAgICAgICAg ICBjb25zdCBpbnQgcV9pZHggPSBxdWFudHNbbGV2ZWxdW29dOwo+ICsgICAgICAgICAgICAgICAg Y29uc3QgaW50IHFmYWN0b3IgPSBmZl9kaXJhY19xc2NhbGVfdGFiW3FfaWR4XTsKPiArCj4gKyAg ICAgICAgICAgICAgICBjb25zdCBpbnQgeWggPSBvID4+IDE7Cj4gKyAgICAgICAgICAgICAgICBj b25zdCBpbnQgeGggPSBvICYgMTsKPiArCj4gKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0g dG9wOyB5IDwgYm90dG9tOyB5KyspCj4gKyAgICAgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgZm9yIChpbnQgeCA9IGxlZnQ7IHggPCByaWdodDsgeCsrKQo+ICsgICAgICAgICAg ICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4ID0gc3ViYmFuZF9j b29yZCh4LCB4aCwgbGV2ZWwpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3kgPSBz dWJiYW5kX2Nvb3JkKHksIHloLCBsZXZlbCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBjb2VmID0gaW1hZ2VMb2FkKGNvZWZfYnVmW3BdLCBpdmVjMihzeCwgc3kpKS54Owo+ICsgICAg ICAgICAgICAgICAgICAgICAgICB1aW50IGNfYWJzID0gdWludChhYnMoY29lZikpOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBjX2FicyA9IChjX2FicyA8PCAyKSAvIHFmYWN0b3I7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHB1dF92YzJfdWVfdWludChwYiwgY19hYnMpOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoY19hYnMgIT0gMCkKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHB1dF9iaXRzKHBiLCAxLCBpbnQoY29lZiA8IDApKTsKPiArICAgICAgICAgICAg ICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICB9Cj4gKyAgICAgICAgZmx1c2hfcHV0X2JpdHMocGIpOwo+ICsgICAgICAgIGludCBieXRlc19s ZW4gPSBpbnQzMl90KHB1dF9ieXRlc19jb3VudChwYikpIC0gYnl0ZXNfc3RhcnQgLSAxOwo+ICsg ICAgICAgIGlmIChwID09IDIpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpbnQgbGVuX2Rp ZmYgPSBzbGljZV9ieXRlc19tYXggLSBpbnQzMl90KHB1dF9ieXRlc19jb3VudChwYikpOwo+ICsg ICAgICAgICAgICBwYWRfcyA9IGFsaWduKChieXRlc19sZW4gKyBsZW5fZGlmZiksIHNpemVfc2Nh bGVyKS9zaXplX3NjYWxlcjsKPiArICAgICAgICAgICAgcGFkX2MgPSAocGFkX3Mqc2l6ZV9zY2Fs ZXIpIC0gYnl0ZXNfbGVuOwo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgICBwYWRfcyA9IGFsaWduKGJ5dGVzX2xlbiwgc2l6ZV9zY2FsZXIpL3Np emVfc2NhbGVyOwo+ICsgICAgICAgICAgICBwYWRfYyA9IChwYWRfcypzaXplX3NjYWxlcikgLSBi eXRlc19sZW47Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHVpbnQ2NF90IHN0YXJ0X3B0ciA9IHdy aXRlX3B0cl9zdGFydCArICgoQlVGX0JJVFMgLSBiaXRfbGVmdF9zdGFydCkgPj4gMyk7Cj4gKyAg ICAgICAgdThidWYoc3RhcnRfcHRyKS52ID0gdWludDhfdChwYWRfcyk7Cj4gKyAgICAgICAgLyog dmMyLXJlZmVyZW5jZSB1c2VzIHRoYXQgcGFkZGluZyB0aGF0IGRlY29kZXMgdG8gJzAnIGNvZWZm cyAqLwo+ICsgICAgICAgIHNraXBfcHV0X2J5dGVzKHBiLCBwYWRfYyk7Cj4gKyAgICB9Cj4gK30K PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vdmMyX3NsaWNlX3NpemVzLmNvbXAgYi9s aWJhdmNvZGVjL3Z1bGthbi92YzJfc2xpY2Vfc2l6ZXMuY29tcAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uNjEwNzBjMWRjMgo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9saWJhdmNvZGVjL3Z1bGthbi92YzJfc2xpY2Vfc2l6ZXMuY29tcAo+IEBAIC0wLDAgKzEsMTcw IEBACj4gKy8qCj4gKyAqIFZDMiBjb2RlYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUg cmFwaGFlbHRoZWdyZWF0IDxnZW9zdGVyM2RAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiAr Cj4gKyNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl9leHBsaWNpdF9hcml0aG1ldGljX3R5cGVzIDog cmVxdWlyZQo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9zY2FsYXJfYmxvY2tfbGF5b3V0IDogcmVxdWly ZQo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIDogcmVxdWlyZQo+ICsKPiAr I2RlZmluZSBESVJBQ19NQVhfUVVBTlRfSU5ERVggMTE2Cj4gKyNkZWZpbmUgTUFYX0RXVF9MRVZF TFMgNQo+ICsKPiArbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBDb21wdXRl SW5mbyB7Cj4gKyAgICBpdmVjMiBudW1fc2xpY2VzOwo+ICsgICAgaW50IHdhdmVsZXRfZGVwdGg7 Cj4gKyAgICBpbnQgc2l6ZV9zY2FsZXI7Cj4gKyAgICBpbnQgcHJlZml4X2J5dGVzOwo+ICsgICAg aW50IGJpdHNfY2VpbDsKPiArICAgIGludCBiaXRzX2Zsb29yOwo+ICt9Owo+ICsKPiAraW50IGNv dW50X3ZjMl91ZV91aW50KHVpbnQgdmFsKQo+ICt7Cj4gKyAgICByZXR1cm4gMiAqIGZpbmRNU0Io dmFsICsgMSkgKyAxOwo+ICt9Cj4gKwo+ICtpbnQgY2FjaGVbRElSQUNfTUFYX1FVQU5UX0lOREVY XTsKPiAraW50IHF1YW50c1tNQVhfRFdUX0xFVkVMU11bNF07Cj4gK3NoYXJlZCBpbnQgc2xpY2Vf c2l6ZXNbZ2xfV29ya0dyb3VwU2l6ZS54XTsKPiArCj4gK2ludCBzdWJiYW5kX2Nvb3JkKGludCBp bmRleCwgaW50IGgsIGludCBsdmwpCj4gK3sKPiArICAgIGludCBjb29yZCA9IGluZGV4Owo+ICsg ICAgY29vcmQgPDw9IDE7Cj4gKyAgICBjb29yZCB8PSBoOwo+ICsgICAgY29vcmQgPDw9ICh3YXZl bGV0X2RlcHRoLWx2bC0xKTsKPiArICAgIHJldHVybiBjb29yZDsKPiArfQo+ICsKPiAraW50IGNv dW50X2hxX3NsaWNlKGludCBxdWFudF9pbmRleCkKPiArewo+ICsgICAgaW50IGJpdHMgPSAwOwo+ ICsgICAgaWYgKGNhY2hlW3F1YW50X2luZGV4XSAhPSAwKQo+ICsgICAgICAgIHJldHVybiBjYWNo ZVtxdWFudF9pbmRleF07Cj4gKwo+ICsgICAgYml0cyArPSA4KnByZWZpeF9ieXRlczsKPiArICAg IGJpdHMgKz0gODsgLyogcXVhbnRfaWR4ICovCj4gKwo+ICsgICAgZm9yIChpbnQgbGV2ZWwgPSAw OyBsZXZlbCA8IHdhdmVsZXRfZGVwdGg7IGxldmVsKyspCj4gKyAgICAgICAgZm9yIChpbnQgb3Jp ZW50YXRpb24gPSBpbnQobGV2ZWwgPiAwKTsgb3JpZW50YXRpb24gPCA0OyBvcmllbnRhdGlvbisr KQo+ICsgICAgICAgICAgICBxdWFudHNbbGV2ZWxdW29yaWVudGF0aW9uXSA9IG1heChxdWFudF9p bmRleCAtIGx1dF9xdWFudFtsZXZlbF1bb3JpZW50YXRpb25dLCAwKTsKPiArCj4gKyAgICBpbnQg c2xpY2VfaW5kZXggPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpOwo+ICsgICAgaXZlYzIg c2xpY2VfY29vcmQgPSBpdmVjMihzbGljZV9pbmRleCAlIG51bV9zbGljZXMueCwgc2xpY2VfaW5k ZXggLyBudW1fc2xpY2VzLngpOwo+ICsgICAgZm9yIChpbnQgcCA9IDA7IHAgPCAzOyBwKyspCj4g KyAgICB7Cj4gKyAgICAgICAgaW50IGJ5dGVzX3N0YXJ0ID0gYml0cyA+PiAzOwo+ICsgICAgICAg IGJpdHMgKz0gODsKPiArCj4gKyAgICAgICAgaXZlYzIgZHd0X2RpbSA9IGltYWdlU2l6ZShjb2Vm X2J1ZltwXSk7Cj4gKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IHdhdmVsZXRf ZGVwdGg7IGxldmVsKyspCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpdmVjMiBiYW5kX2Rp bSA9IGR3dF9kaW0gPj4gKHdhdmVsZXRfZGVwdGggLSBsZXZlbCk7Cj4gKyAgICAgICAgICAgIGZv ciAoaW50IG8gPSBpbnQobGV2ZWwgPiAwKTsgbyA8IDQ7IG8rKykKPiArICAgICAgICAgICAgewo+ ICsgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlZnQgPSBiYW5kX2RpbS54ICogc2xpY2VfY29v cmQueCAvIG51bV9zbGljZXMueDsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCByaWdodCA9 IGJhbmRfZGltLnggKiAoc2xpY2VfY29vcmQueCsxKSAvIG51bV9zbGljZXMueDsKPiArICAgICAg ICAgICAgICAgIGNvbnN0IGludCB0b3AgPSBiYW5kX2RpbS55ICogc2xpY2VfY29vcmQueSAvIG51 bV9zbGljZXMueTsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCBib3R0b20gPSBiYW5kX2Rp bS55ICogKHNsaWNlX2Nvb3JkLnkrMSkgLyBudW1fc2xpY2VzLnk7Cj4gKwo+ICsgICAgICAgICAg ICAgICAgY29uc3QgaW50IHFfaWR4ID0gcXVhbnRzW2xldmVsXVtvXTsKPiArICAgICAgICAgICAg ICAgIGNvbnN0IGludCBxZmFjdG9yID0gZmZfZGlyYWNfcXNjYWxlX3RhYltxX2lkeF07Cj4gKwo+ ICsgICAgICAgICAgICAgICAgY29uc3QgaW50IHloID0gbyA+PiAxOwo+ICsgICAgICAgICAgICAg ICAgY29uc3QgaW50IHhoID0gbyAmIDE7Cj4gKwo+ICsgICAgICAgICAgICAgICAgZm9yIChpbnQg eSA9IHRvcDsgeSA8IGJvdHRvbTsgeSsrKQo+ICsgICAgICAgICAgICAgICAgewo+ICsgICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IHggPSBsZWZ0OyB4IDwgcmlnaHQ7IHgrKykKPiArICAgICAg ICAgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzeCA9IHN1YmJh bmRfY29vcmQoeCwgeGgsIGxldmVsKTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN5 ID0gc3ViYmFuZF9jb29yZCh5LCB5aCwgbGV2ZWwpOwo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgY29lZiA9IGltYWdlTG9hZChjb2VmX2J1ZltwXSwgaXZlYzIoc3gsIHN5KSkueDsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgdWludCBjX2FicyA9IHVpbnQoYWJzKGNvZWYpKTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgY19hYnMgPSAoY19hYnMgPDwgMikgLyBxZmFjdG9yOwo+ ICsgICAgICAgICAgICAgICAgICAgICAgICBiaXRzICs9IGNvdW50X3ZjMl91ZV91aW50KGNfYWJz KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSBpbnQoY19hYnMgPiAwKTsKPiAr ICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAg IH0KPiArICAgICAgICB9Cj4gKyAgICAgICAgYml0cyArPSBhbGlnbihiaXRzLCA4KSAtIGJpdHM7 Cj4gKyAgICAgICAgaW50IGJ5dGVzX2xlbiA9IChiaXRzID4+IDMpIC0gYnl0ZXNfc3RhcnQgLSAx Owo+ICsgICAgICAgIGludCBwYWRfcyA9IGFsaWduKGJ5dGVzX2xlbiwgc2l6ZV9zY2FsZXIpIC8g c2l6ZV9zY2FsZXI7Cj4gKyAgICAgICAgaW50IHBhZF9jID0gKHBhZF9zICogc2l6ZV9zY2FsZXIp IC0gYnl0ZXNfbGVuOwo+ICsgICAgICAgIGJpdHMgKz0gcGFkX2MgKiA4Owo+ICsgICAgfQo+ICsK PiArICAgIGNhY2hlW3F1YW50X2luZGV4XSA9IGJpdHM7Cj4gKyAgICByZXR1cm4gYml0czsKPiAr fQo+ICsKPiAraW50IHNzaXplX3JvdW5kKGludCBiKQo+ICt7Cj4gKyAgICByZXR1cm4gYWxpZ24o Yiwgc2l6ZV9zY2FsZXIpICsgNCArIHByZWZpeF9ieXRlczsKPiArfQo+ICsKPiArdm9pZCBtYWlu KCkKPiArewo+ICsgICAgaW50IHNsaWNlX2luZGV4ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25J RC54KTsKPiArICAgIGludCBtYXhfaW5kZXggPSBudW1fc2xpY2VzLnggKiBudW1fc2xpY2VzLnk7 Cj4gKyAgICBpZiAoc2xpY2VfaW5kZXggPj0gbWF4X2luZGV4KQo+ICsgICAgICAgIHJldHVybjsK PiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IERJUkFDX01BWF9RVUFOVF9JTkRFWDsgaSsr KQo+ICsgICAgICAgIGNhY2hlW2ldID0gMDsKPiArCj4gKyAgICBjb25zdCBpbnQgcV9jZWlsID0g RElSQUNfTUFYX1FVQU5UX0lOREVYOwo+ICsgICAgY29uc3QgaW50IHRvcCA9IGJpdHNfY2VpbDsK PiArICAgIGNvbnN0IGludCBib3R0b20gPSBiaXRzX2Zsb29yOwo+ICsgICAgaW50IHF1YW50X2J1 ZlsyXSA9IGludFsyXSgtMSwgLTEpOwo+ICsgICAgaW50IHF1YW50ID0gc2xpY2VfYXJnc1tzbGlj ZV9pbmRleF0ucXVhbnRfaWR4Owo+ICsgICAgaW50IHN0ZXAgPSAxOwo+ICsgICAgaW50IGJpdHNf bGFzdCA9IDA7Cj4gKyAgICBpbnQgYml0cyA9IGNvdW50X2hxX3NsaWNlKHF1YW50KTsKPiArICAg IHdoaWxlICgoYml0cyA+IHRvcCkgfHwgKGJpdHMgPCBib3R0b20pKQo+ICsgICAgewo+ICsgICAg ICAgIGNvbnN0IGludCBzaWduZWRfc3RlcCA9IGJpdHMgPiB0b3AgPyArc3RlcCA6IC1zdGVwOwo+ ICsgICAgICAgIHF1YW50ID0gY2xhbXAocXVhbnQgKyBzaWduZWRfc3RlcCwgMCwgcV9jZWlsLTEp Owo+ICsgICAgICAgIGJpdHMgPSBjb3VudF9ocV9zbGljZShxdWFudCk7Cj4gKyAgICAgICAgaWYg KHF1YW50X2J1ZlsxXSA9PSBxdWFudCkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHF1YW50 ID0gbWF4KHF1YW50X2J1ZlswXSwgcXVhbnQpOwo+ICsgICAgICAgICAgICBiaXRzID0gcXVhbnQg PT0gcXVhbnRfYnVmWzBdID8gYml0c19sYXN0IDogYml0czsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHN0ZXAgPSBjbGFtcChzdGVwIC8gMiwgMSwgKHFfY2Vp bCAtIDEpIC8gMik7Cj4gKyAgICAgICAgcXVhbnRfYnVmWzFdID0gcXVhbnRfYnVmWzBdOwo+ICsg ICAgICAgIHF1YW50X2J1ZlswXSA9IHF1YW50Owo+ICsgICAgICAgIGJpdHNfbGFzdCA9IGJpdHM7 Cj4gKyAgICB9Cj4gKyAgICBpbnQgYnl0ZXMgPSBzc2l6ZV9yb3VuZChiaXRzID4+IDMpOwo+ICsg ICAgc2xpY2VfYXJnc1tzbGljZV9pbmRleF0ucXVhbnRfaWR4ID0gY2xhbXAocXVhbnQsIDAsIHFf Y2VpbC0xKTsKPiArICAgIHNsaWNlX2FyZ3Nbc2xpY2VfaW5kZXhdLmJ5dGVzID0gYnl0ZXM7Cj4g KyAgICBzbGljZV9zaXplc1tnbF9Mb2NhbEludm9jYXRpb25JbmRleF0gPSBieXRlczsKPiArICAg IGJhcnJpZXIoKTsKPiArCj4gKyAgICAvKiBQcmVmaXggc3VtIGZvciBhbGwgc2xpY2VzIGluIGN1 cnJlbnQgd29ya2dyb3VwICovCj4gKyAgICBpbnQgdG90YWxfYnl0ZXMgPSAwOwo+ICsgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBnbF9Mb2NhbEludm9jYXRpb25JbmRleDsgaSsrKQo+ICsgICAgICAg IHRvdGFsX2J5dGVzICs9IHNsaWNlX3NpemVzW2ldOwo+ICsgICAgc2xpY2VfYXJnc1tzbGljZV9p bmRleF0ucGJfc3RhcnQgPSB0b3RhbF9ieXRlczsKPiArfQo+IC0tCj4gMi40OS4wCj4KX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1h aWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFp bG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFi b3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgo=