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 675374D96B for ; Mon, 2 Jun 2025 19:16:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 20E6168DF82; Mon, 2 Jun 2025 22:16:36 +0300 (EEST) Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id E889568D640 for ; Mon, 2 Jun 2025 22:16:28 +0300 (EEST) Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-234488c2ea6so50978755ad.3 for ; Mon, 02 Jun 2025 12:16:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748891787; x=1749496587; 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=BaH3zFMtYOa723U/Bkkg9Kh3CcRdL7xprnTIeE62uBI=; b=N2Go4nyLMI2lonyIiSdl29IPA5QDSe7qvnTT5VX/qkrmHvDFxgbBf6v3NTzrCmgqBJ NvWQRpPyrbfhuSZmVZsKO4qUpmTT5saX9veax1yj39O9go8NzBVuCh2vJPqWB0nTv3a1 fvWowSFnm1IYJIe5qPW0w50fNIi54/Lzv2fYfwrqUGpkEm5QgBcUn3+s10vCedV+0sCU ardgEXhk9ELDMpdZD+pkPAOOXYRJo23bdDDx+c7Ld7Aw2XyNmVYT3Iz6NUeQIggLpgrB PzfxPvgwBVbGpV4ZlXjaZxPfMS6cWGR0gTeczhhyj6L7yqLx2O5+cfrJqzscU2qCKOPY hFzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748891787; x=1749496587; 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=BaH3zFMtYOa723U/Bkkg9Kh3CcRdL7xprnTIeE62uBI=; b=E2Yw/SvA63RUC1/bNJEJl2cp0cl22AAIoqoyWK9scqX5VjyGjX6p/WWwH2tpZZa3FP dIlml5GtMxRMHaLEsBBUnzU6jlDrEfQIMda2h69Hka8tSTzNHM8Mo6w+OeruWoFKrK/V w4fEWN+fzAeyEjCG2+MHQJvdWGO5fLT8VbOUhZpiY+0HBtmXayYCJwfD6X66/tPDw9Ao AZ0u3pIaTfnAfPdfHO/QWOj61MGENcjABtZNN9h+DQRSitfkZvgmMPgyLSbKVIgrPuXt YghXC4NeEivRjmYy9UNR/IcjCKmwPlrXGiZoER3Mn96n+99Snt/B4FwQXzodm1QustG4 eqHg== X-Gm-Message-State: AOJu0YzpbAXyGrWqYZeAJ/XkjOd1W7QsFVvUbtRmSho42glo0lVSiIhG Pqa/a0mu61HrbxIveCiUfab51otjZ1qOmVglDQn0/ss01y9BQLX1+v0I9goI0JwB4Ui3MNxkQ68 gPMvN3oWcVg1oBoCeNC83F8UC/P8AlUc7zVbe X-Gm-Gg: ASbGncuuz864s0rVOhunhIiVkUH8KkaAE09rCKeWHxYMlWZDg6KIOcuoH8rfcA4hUyK czrFYtmU4gHKKcgPESIG1XsrVyIu6Pz+MhJt0GLQtsF9EkM/pfKZ0/H334fs4bFrIFbhvyOwEtL dQ+SAcfYHeQB631ABa9ymxexmsFi6embWTkLyspjvvKCmjtxOyoNe2Y7u6/PloweZh4/TnHj7lI 5rB X-Google-Smtp-Source: AGHT+IGzG1+LZJmlVtPBoFc3V8Np7Z+nJ1yfq2iKSYXjf7Grr2ZOyj0iJ5x5biYakBeuEHkxuXQ3WqslAIFyWCcltHI= X-Received: by 2002:a17:902:ecd1:b0:234:f182:a754 with SMTP id d9443c01a7336-2353963c8femr186058695ad.47.1748891786495; Mon, 02 Jun 2025 12:16:26 -0700 (PDT) MIME-Version: 1.0 References: <20250602191313.906527-1-47210458+raphaelthegreat@users.noreply.github.com> <20250602191313.906527-4-47210458+raphaelthegreat@users.noreply.github.com> In-Reply-To: <20250602191313.906527-4-47210458+raphaelthegreat@users.noreply.github.com> From: IndecisiveTurtle Date: Mon, 2 Jun 2025 22:16:14 +0300 X-Gm-Features: AX0GCFtZ8VVSWisJ_QGvCQFM2BL_uZYf-EzF41ibgUSHu4oebbGWW5rQYmyKN80 Message-ID: To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH v6 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: Q29tcGFyZWQgdG8gdjUsIHRoaXMgaXMgc2ltcGx5IGEgcmViYXNlIHRvIGluY2x1ZGUKMWM3OGRi OGZmYzZmOGM0MWMwZTE1OTNlNzNlNTZlNTI5ZDM0ZTYwZiBhbmQgcmVzb2x2ZXMgRkFURSB0ZXN0 IGJ5CnJldmVydGluZyB0bwpWQzJfVFJBTlNGT1JNXzlfNyBhcyBkZWZhdWx0IHdhdmVsZXQsIHdo aWNoIEkgY2hhbmdlZCB0byBhbm90aGVyIGZvcgpzb21lIG9mIG15IHRlc3RzIGFuZCBuZWdsZWN0 ZWQgY2hhbmdlIGJhY2sKCs6jz4TOuc+CIM6UzrXPhSAyIM6Zzr/Phc69IDIwMjUgz4PPhM65z4Ig MTA6MTPigK/OvC7OvC4sIM6/L863IEluZGVjaXNpdmVUdXJ0bGUKPGdlb3N0ZXIzZEBnbWFpbC5j b20+IM6tzrPPgc6xz4jOtToKPgo+IEZyb206IEluZGVjaXNpdmVUdXJ0bGUgPGdlb3N0ZXIzZEBn bWFpbC5jb20+Cj4KPiBQZXJmb3JtYW5jZSB3aXNlLCBlbmNvZGluZyBhIDM0NDB4MTQ0MCAxLW1p bnV0ZSB2aWRlbyBpcyBwZXJmb3JtZWQgaW4gYWJvdXQgMi40IG1pbnV0ZXMgd2l0aCB0aGUgY3B1 IGVuY29kZXIgcnVubmluZyBvbiBteSBSeXplbiA1IDQ2MDBILCB3aGlsZSBpdCB0YWtlcyBhYm91 dCAxLjMgbWludXRlcyBvbiBteSBOVklESUEgR1RYIDE2NTAKPgo+IEhhYXIgc2hhZGVyIGhhcyBh IHN1Ymdyb3VwIG9wdGltaXplZCB2YXJpYW50IHRoYXQgYXBwbGllcyB3aGVuIGNvbmZpZ3VyZWQg d2F2ZWxldCBkZXB0aCBhbGxvd3MgaXQKPiAtLS0KPiAgY29uZmlndXJlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMyArCj4gIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICAg ICAgICAgICAgICAgICAgICAgIHwgICAxICsKPiAgbGliYXZjb2RlYy92YzJlbmNfdnVsa2FuLmMg ICAgICAgICAgICAgICAgICAgfCA3NzcgKysrKysrKysrKysrKysrKysrKwo+ICBsaWJhdmNvZGVj L3Z1bGthbi92YzJfZHd0X2hhYXIuY29tcCAgICAgICAgICB8ICA4MiArKwo+ICBsaWJhdmNvZGVj L3Z1bGthbi92YzJfZHd0X2hhYXJfc3ViZ3JvdXAuY29tcCB8ICA3NSArKwo+ICBsaWJhdmNvZGVj L3Z1bGthbi92YzJfZHd0X2hvcl9sZWdhbGwuY29tcCAgICB8ICA4MiArKwo+ICBsaWJhdmNvZGVj L3Z1bGthbi92YzJfZHd0X3VwbG9hZC5jb21wICAgICAgICB8ICA5NiArKysKPiAgbGliYXZjb2Rl Yy92dWxrYW4vdmMyX2R3dF92ZXJfbGVnYWxsLmNvbXAgICAgfCAgNzggKysKPiAgbGliYXZjb2Rl Yy92dWxrYW4vdmMyX2VuY29kZS5jb21wICAgICAgICAgICAgfCAxNzMgKysrKysKPiAgbGliYXZj b2RlYy92dWxrYW4vdmMyX3NsaWNlX3NpemVzLmNvbXAgICAgICAgfCAxNzAgKysrKwo+ICAxMSBm aWxlcyBjaGFuZ2VkLCAxNTM4IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2Y29kZWMvdmMyZW5jX3Z1bGthbi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVj L3Z1bGthbi92YzJfZHd0X2hhYXIuY29tcAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2Rl Yy92dWxrYW4vdmMyX2R3dF9oYWFyX3N1Ymdyb3VwLmNvbXAKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaG9yX2xlZ2FsbC5jb21wCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92YzJfZHd0X3VwbG9hZC5jb21wCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92YzJfZHd0X3Zlcl9sZWdhbGwuY29tcAo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vdmMyX2VuY29kZS5jb21wCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92YzJfc2xpY2Vfc2l6ZXMuY29tcAo+ Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4IGY2MTEyOGJjZTYu LjkxYTQyOWUxZDQgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIvY29uZmlndXJlCj4g QEAgLTMxMzYsNiArMzEzNiw3IEBAIHV0dmlkZW9fZW5jb2Rlcl9zZWxlY3Q9ImJzd2FwZHNwIGh1 ZmZtYW4gbGx2aWRlbmNkc3AiCj4gIHZibGVfZGVjb2Rlcl9zZWxlY3Q9ImxsdmlkZHNwIgo+ICB2 Ym5fZGVjb2Rlcl9zZWxlY3Q9InRleHR1cmVkc3AiCj4gIHZibl9lbmNvZGVyX3NlbGVjdD0idGV4 dHVyZWRzcGVuYyIKPiArdmMyX3Z1bGthbl9lbmNvZGVyX3NlbGVjdD0idnVsa2FuIHNwaXJ2X2Nv bXBpbGVyIgo+ICB2bWl4X2RlY29kZXJfc2VsZWN0PSJpZGN0ZHNwIgo+ICB2YzFfZGVjb2Rlcl9z ZWxlY3Q9ImJsb2NrZHNwIGgyNjRxcGVsIGludHJheDggbXBlZ3ZpZGVvZGVjIHFwZWxkc3AgdmMx ZHNwIgo+ICB2YzFpbWFnZV9kZWNvZGVyX3NlbGVjdD0idmMxX2RlY29kZXIiCj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gaW5kZXggZjEw Y2Q5MWZmMS4uZDEyN2FlOTBlZCAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4g KysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IEBAIC03NzIsNiArNzcyLDkgQEAgT0JKUy0kKENP TkZJR19WQzFfTU1BTF9ERUNPREVSKSAgICAgICAgKz0gbW1hbGRlYy5vCj4gIE9CSlMtJChDT05G SUdfVkMxX1FTVl9ERUNPREVSKSAgICAgICAgICs9IHFzdmRlYy5vCj4gIE9CSlMtJChDT05GSUdf VkMxX1Y0TDJNMk1fREVDT0RFUikgICAgICs9IHY0bDJfbTJtX2RlYy5vCj4gIE9CSlMtJChDT05G SUdfVkMyX0VOQ09ERVIpICAgICAgICAgICAgICs9IHZjMmVuYy5vIHZjMmVuY19kd3QubyB2YzJl bmNfY29tbW9uLm8gZGlyYWN0YWIubwo+ICtPQkpTLSQoQ09ORklHX1ZDMl9WVUxLQU5fRU5DT0RF UikgICAgICArPSB2YzJlbmNfdnVsa2FuLm8gdnVsa2FuL3ZjMl9lbmNvZGUubyB2dWxrYW4vdmMy X3NsaWNlX3NpemVzLm8gXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2dWxrYW4vdmMyX2R3dF9ob3JfbGVnYWxsLm8gdnVsa2FuL3ZjMl9kd3RfdmVyX2xlZ2Fs bC5vIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVsa2Fu L3ZjMl9kd3RfdXBsb2FkLm8gdnVsa2FuL3ZjMl9kd3RfaGFhci5vIHZ1bGthbi92YzJfZHd0X2hh YXJfc3ViZ3JvdXAubwo+ICBPQkpTLSQoQ09ORklHX1ZDUjFfREVDT0RFUikgICAgICAgICAgICAr PSB2Y3IxLm8KPiAgT0JKUy0kKENPTkZJR19WTURBVURJT19ERUNPREVSKSAgICAgICAgKz0gdm1k YXVkaW8ubwo+ICBPQkpTLSQoQ09ORklHX1ZNRFZJREVPX0RFQ09ERVIpICAgICAgICArPSB2bWR2 aWRlby5vCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVj L2FsbGNvZGVjcy5jCj4gaW5kZXggY2Q0ZjZlY2Q1OS4uY2QyM2E5NDkwYyAxMDA2NDQKPiAtLS0g YS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gKysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ IEBAIC0zNjcsNiArMzY3LDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfdmMxX21tYWxfZGVj b2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfdmMxX3Fzdl9kZWNvZGVyOwo+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl92YzFfdjRsMm0ybV9kZWNvZGVyOwo+ICBleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl92YzJfZW5jb2RlcjsKPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfdmMyX3Z1 bGthbl9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl92Y3IxX2RlY29kZXI7Cj4g IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX3ZtZHZpZGVvX2RlY29kZXI7Cj4gIGV4dGVybiBjb25z dCBGRkNvZGVjIGZmX3ZtaXhfZGVjb2RlcjsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YzJl bmNfdnVsa2FuLmMgYi9saWJhdmNvZGVjL3ZjMmVuY192dWxrYW4uYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uZDI3MDBjYzVlYgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9saWJhdmNvZGVjL3ZjMmVuY192dWxrYW4uYwo+IEBAIC0wLDAgKzEsNzc3IEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCAoQykgMjAyNSByYXBoYWVsdGhlZ3JlYXQgPGdlb3N0ZXIzZEBnbWFp bC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiAr ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2Vy dC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L3BpeGRlc2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgImxp YmF2dXRpbC90aHJlYWQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC92ZXJzaW9uLmgiCj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX3NwaXJ2LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv aHdjb250ZXh0X3Z1bGthbi5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIu aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC92dWxrYW4uaCIKPiArI2luY2x1ZGUgImNvZGVjX2lu dGVybmFsLmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAiZW5jb2RlLmgi Cj4gKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCj4gKyNpbmNsdWRlICJ2YzJlbmNfY29tbW9uLmgiCj4g KyNpbmNsdWRlICJod2NvbmZpZy5oIgo+ICsKPiArI2RlZmluZSBMRUdBTExfVElMRV9ESU0gMTYK PiArI2RlZmluZSBMRUdBTExfV09SS0dST1VQX1ggNjQKPiArI2RlZmluZSBTTElDRV9XT1JLR1JP VVBfWCAxMjgKPiArI2RlZmluZSBNQVhfTlVNX1BMQU5FUyAzCj4gKwo+ICtleHRlcm4gY29uc3Qg Y2hhciAqZmZfc291cmNlX2NvbW1vbl9jb21wOwo+ICtleHRlcm4gY29uc3QgY2hhciAqZmZfc291 cmNlX3ZjMl9lbmNvZGVfY29tcDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJf ZHd0X2hvcl9sZWdhbGxfY29tcDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJf ZHd0X3Zlcl9sZWdhbGxfY29tcDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJf c2xpY2Vfc2l6ZXNfY29tcDsKPiArZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV92YzJfZHd0 X3VwbG9hZF9jb21wOwo+ICtleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX3ZjMl9kd3RfaGFh cl9jb21wOwo+ICtleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX3ZjMl9kd3RfaGFhcl9zdWJn cm91cF9jb21wOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVkMyRHd0UHVzaERhdGEgewo+ICsgICAg aW50IHM7Cj4gKyAgICB1bmlvbiB7Cj4gKyAgICAgICAgaW50IGRpZmZfb2Zmc2V0Owo+ICsgICAg ICAgIGludCBwbGFuZV9pZHg7Cj4gKyAgICB9Owo+ICsgICAgaW50IGxldmVsOwo+ICt9IFZDMkR3 dFB1c2hEYXRhOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVkMyRW5jQXV4RGF0YSB7Cj4gKyAgICBp bnQgcXVhbnRbTUFYX0RXVF9MRVZFTFNdWzRdOwo+ICsgICAgaW50IGZmX2RpcmFjX3FzY2FsZV90 YWJbMTE2XTsKPiArICAgIHVpbnQxNl90IGludGVybGVhdmVkX3VlX2dvbG9tYl90YWJbMjU2XTsK PiArICAgIHVpbnQxNl90IHRvcF9pbnRlcmxlYXZlZF91ZV9nb2xvbWJfdGFiWzI1Nl07Cj4gKyAg ICB1aW50OF90IGdvbG9tYl9sZW5fdGFiWzI1Nl07Cj4gK30gVkMyRW5jQXV4RGF0YTsKPiArCj4g K3R5cGVkZWYgc3RydWN0IFZDMkVuY1B1c2hEYXRhIHsKPiArICAgIFZrRGV2aWNlQWRkcmVzcyBw YjsKPiArICAgIGludCBudW1feDsKPiArICAgIGludCBudW1feTsKPiArICAgIGludCB3YXZlbGV0 X2RlcHRoOwo+ICsgICAgaW50IHNpemVfc2NhbGVyOwo+ICsgICAgaW50IHByZWZpeF9ieXRlczsK PiArfSBWQzJFbmNQdXNoRGF0YTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZDMkVuY1NsaWNlQXJn cyB7Cj4gKyAgICBpbnQgcXVhbnRfaWR4Owo+ICsgICAgaW50IGJ5dGVzOwo+ICsgICAgaW50IHBi X3N0YXJ0Owo+ICsgICAgaW50IHBhZDsKPiArfSBWQzJFbmNTbGljZUFyZ3M7Cj4gKwo+ICt0eXBl ZGVmIHN0cnVjdCBWQzJFbmNTbGljZUNhbGNQdXNoRGF0YSB7Cj4gKyAgICBpbnQgbnVtX3g7Cj4g KyAgICBpbnQgbnVtX3k7Cj4gKyAgICBpbnQgd2F2ZWxldF9kZXB0aDsKPiArICAgIGludCBzaXpl X3NjYWxlcjsKPiArICAgIGludCBwcmVmaXhfYnl0ZXM7Cj4gKyAgICBpbnQgYml0c19jZWlsOwo+ ICsgICAgaW50IGJpdHNfZmxvb3I7Cj4gK30gVkMyRW5jU2xpY2VDYWxjUHVzaERhdGE7Cj4gKwo+ ICt0eXBlZGVmIHN0cnVjdCBWQzJFbmNWdWxrYW5Db250ZXh0IHsKPiArICAgIFZDMkVuY0NvbnRl eHQgYmFzZTsKPiArICAgIEZGVmtCdWZmZXIgbHV0X2J1ZjsKPiArICAgIEZGVmtCdWZmZXIgc2xp Y2VfYnVmOwo+ICsgICAgVkMyRW5jU2xpY2VBcmdzICpzbGljZV9hcmdzOwo+ICsKPiArICAgIC8q IFZ1bGthbiBzdGF0ZSAqLwo+ICsgICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4Owo+ICsgICAgQVZW dWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7Cj4gKyAgICBGRlZrRXhlY1Bvb2wgZTsKPiArICAg IEZGVmtFeGVjQ29udGV4dCAqZXhlYzsKPiArCj4gKyAgICBGRlZ1bGthblNoYWRlciBkd3RfaGFh cl9zaGQ7Cj4gKyAgICBGRlZ1bGthblNoYWRlciBkd3RfdXBsb2FkX3NoZDsKPiArICAgIEZGVnVs a2FuU2hhZGVyIGR3dF9ob3Jfc2hkLCBkd3RfdmVyX3NoZDsKPiArICAgIEZGVnVsa2FuU2hhZGVy IHNsaWNlX3NoZDsKPiArICAgIEZGVnVsa2FuU2hhZGVyIGVuY19zaGQ7Cj4gKyAgICBBVkJ1ZmZl clBvb2wqIGR3dF9idWZfcG9vbDsKPiArICAgIGludCBoYWFyX3N1Ymdyb3VwOwo+ICsKPiArICAg IFZrQnVmZmVyIHBsYW5lX2J1ZjsKPiArICAgIFZDMkVuY1B1c2hEYXRhIGVuY19jb25zdHM7Cj4g KyAgICBWQzJEd3RQdXNoRGF0YSBkd3RfY29uc3RzOwo+ICsgICAgVkMyRW5jU2xpY2VDYWxjUHVz aERhdGEgY2FsY19jb25zdHM7Cj4gKwo+ICsgICAgLyogSW50ZXJtZWRpYXRlIGZyYW1lIHBvb2wg Ki8KPiArICAgIEFWQnVmZmVyUmVmICppbnRlcm1lZGlhdGVfZnJhbWVzX3JlZlszXTsKPiArICAg IEFWRnJhbWUgKmludGVybWVkaWF0ZV9mcmFtZVtBVl9OVU1fREFUQV9QT0lOVEVSU107Cj4gKyAg ICBWa0ltYWdlVmlldyBpbnRlcm1lZGlhdGVfdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwo+ ICt9IFZDMkVuY1Z1bGthbkNvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfdnVsa2FuX3Bp cGVsaW5lKFZDMkVuY1Z1bGthbkNvbnRleHQqIHMsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIqIHNoZCwgaW50 IHB1c2hfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGdfeCwg aW50IGxnX3ksIGludCBsZ196LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqIHBsX25hbWUsIGNvbnN0IGNoYXIqIHBsX3NvdXJjZSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRfZGVzYywgaW50IG51bV9kZXNjKQo+ICt7Cj4g KyAgICBpbnQgZXJyID0gMDsKPiArICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwo+ICsgICAgc2l6ZV90 IHNwdl9sZW47Cj4gKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKPiArICAgIEZGVnVsa2Fu Q29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRC aW5kaW5nICpkZXNjOwo+ICsKPiArICAgIGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCBzaGQsIHBs X25hbWUsIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIDAsIGxnX3gsIGxnX3ksIGxnX3osIDApOwo+ICsKPiArICAgIGF2X2JwcmludGYo JnNoZC0+c3JjLCAic3RydWN0IFNsaWNlQXJncyB7aW50IHF1YW50X2lkeDtpbnQgYnl0ZXM7aW50 IHBiX3N0YXJ0O2ludCBwYWQ7fTtcbiIpOwo+ICsKPiArICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNj cmlwdG9yU2V0QmluZGluZyBbXSkgewo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLm5hbWUg ICAgICAgPSAic3JjX3BsYW5lcyIsCj4gKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVT Q1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCj4gKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0g ZmZfdmtfc2hhZGVyX3JlcF9mbXQodmtjdHgtPmZyYW1lcy0+c3dfZm9ybWF0LCBGRl9WS19SRVBf VUlOVCksCj4gKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKPiArICAgICAgICAgICAgLmVs ZW1zICAgICAgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyh2a2N0eC0+ZnJhbWVzLT5zd19mb3Jt YXQpLAo+ICsgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRF X0JJVCwKPiArICAgICAgICB9LAo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLm5hbWUgICAg ICAgPSAiY29lZl9idWYiLAo+ICsgICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBU T1JfVFlQRV9TVE9SQUdFX0lNQUdFLAo+ICsgICAgICAgICAgICAubWVtX2xheW91dCA9ICJyMzJp IiwKPiArICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAo+ICsgICAgICAgICAgICAuZWxlbXMg ICAgICA9IDMsCj4gKyAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICAubmFt ZSAgICAgICAgPSAiQXV4RGF0YSIsCj4gKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RF U0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKPiArICAgICAgICAgICAgLnN0YWdlcyAgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAgICAgICAubWVtX2xheW91 dCAgPSAic2NhbGFyIiwKPiArICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludCBsdXRfcXVh bnRbNV1bNF07IGludCBmZl9kaXJhY19xc2NhbGVfdGFiWzExNl07ICIKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgInVpbnQxNl90IGludGVybGVhdmVkX3VlX2dvbG9tYl90YWJbMjU2XTsg Igo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAidWludDE2X3QgdG9wX2ludGVybGVhdmVk X3VlX2dvbG9tYl90YWJbMjU2XTsgIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAidWlu dDhfdCBnb2xvbWJfbGVuX3RhYlsyNTZdOyIsCj4gKyAgICAgICAgfSwKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJTbGljZUJ1ZmZlciIsCj4gKyAgICAgICAgICAg IC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKPiArICAg ICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsg ICAgICAgICAgICAubWVtX2xheW91dCAgPSAic2NhbGFyIiwKPiArICAgICAgICAgICAgLmJ1Zl9j b250ZW50ID0gIlNsaWNlQXJncyBzbGljZV9hcmdzW107IiwKPiArICAgICAgICB9LAo+ICsgICAg fTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCBzaGQs IGRlc2MgKyBzdGFydF9kZXNjLCBudW1fZGVzYywgMCwgMCkpOwo+ICsKPiArICAgIGZmX3ZrX3No YWRlcl9hZGRfcHVzaF9jb25zdChzaGQsIDAsIHB1c2hfc2l6ZSwgVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklUKTsKPiArICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBQQl9VTkFM SUdORURcbiIpOwo+ICsgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIFBMQU5FX0ZN VCAlZFxuIiwgdmtjdHgtPmZyYW1lcy0+c3dfZm9ybWF0KTsKPiArICAgIEdMU0xEKGZmX3NvdXJj ZV9jb21tb25fY29tcCk7Cj4gKyAgICBHTFNMRChwbF9zb3VyY2UpOwo+ICsKPiArICAgIC8qIENv bXBpbGUgSGFhciBzaGFkZXIgKi8KPiArICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4 LCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLCAmc3B2X29wYXF1ZSkpOwo+ ICsgICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVu LCAibWFpbiIpKTsKPiArICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYyh2a2N0eCwg JnMtPmUsIHNoZCkpOwo+ICsKPiArZmFpbDoKPiArICAgIHJldHVybiBlcnI7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgaW5pdF9mcmFtZV9wb29scyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sK PiArICAgIGludCBpLCBlcnIgPSAwOwo+ICsgICAgVkMyRW5jVnVsa2FuQ29udGV4dCAqc3YgPSBh dmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lc19jdHg7Cj4g KyAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKnZrX2ZyYW1lczsKPiArICAgIGVudW0gQVZQaXhl bEZvcm1hdCBzd19mb3JtYXQgPSBBVl9QSVhfRk1UX0dSQVkzMjsKPiArCj4gKyAgICBmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKSB7Cj4gKyAgICAgICAgc3YtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVm W2ldID0gYXZfaHdmcmFtZV9jdHhfYWxsb2Moc3YtPnZrY3R4LmRldmljZV9yZWYpOwo+ICsgICAg ICAgIGlmICghc3YtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldKQo+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgICAgICBmcmFtZXNfY3R4ID0gKEFWSFdG cmFtZXNDb250ZXh0ICopc3YtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldLT5kYXRhOwo+ICsg ICAgICAgIGZyYW1lc19jdHgtPmZvcm1hdCAgICA9IEFWX1BJWF9GTVRfVlVMS0FOOwo+ICsgICAg ICAgIGZyYW1lc19jdHgtPnN3X2Zvcm1hdCA9IHN3X2Zvcm1hdDsKPiArICAgICAgICBmcmFtZXNf Y3R4LT53aWR0aCAgICAgPSBzdi0+YmFzZS5wbGFuZVtpXS5kd3Rfd2lkdGg7Cj4gKyAgICAgICAg ZnJhbWVzX2N0eC0+aGVpZ2h0ICAgID0gc3YtPmJhc2UucGxhbmVbaV0uZHd0X2hlaWdodDsKPiAr Cj4gKyAgICAgICAgdmtfZnJhbWVzID0gZnJhbWVzX2N0eC0+aHdjdHg7Cj4gKyAgICAgICAgdmtf ZnJhbWVzLT50aWxpbmcgICAgPSBWS19JTUFHRV9USUxJTkdfT1BUSU1BTDsKPiArICAgICAgICB2 a19mcmFtZXMtPnVzYWdlICAgICA9IFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUOwo+ICsgICAg ICAgIHZrX2ZyYW1lcy0+aW1nX2ZsYWdzID0gVktfSU1BR0VfQ1JFQVRFX01VVEFCTEVfRk9STUFU X0JJVDsKPiArCj4gKyAgICAgICAgZXJyID0gYXZfaHdmcmFtZV9jdHhfaW5pdChzdi0+aW50ZXJt ZWRpYXRlX2ZyYW1lc19yZWZbaV0pOwo+ICsgICAgICAgIGlmIChlcnIgPCAwKSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUg ZnJhbWUgcG9vbCB3aXRoIGZvcm1hdCAlczogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICBhdl9n ZXRfcGl4X2ZtdF9uYW1lKHN3X2Zvcm1hdCksIGF2X2VycjJzdHIoZXJyKSk7Cj4gKyAgICAgICAg ICAgIGF2X2J1ZmZlcl91bnJlZigmc3YtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2ldKTsKPiAr ICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAg cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnVsa2FuX2JpbmRfaW1nX3BsYW5l cyhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBWa0ltYWdlVmlldyAq dmlld3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNldCwgaW50 IGJpbmRpbmcpCj4gK3sKPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQo+ICsgICAg ICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nKHMsIGUsIHNoZCwgc2V0LCBiaW5kaW5nLCBpLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdzW2ldLCBWS19JTUFHRV9MQVlP VVRfR0VORVJBTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hB TkRMRSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3dF9wbGFuZV9oYWFyKFZDMkVuY1Z1bGth bkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZXhlYywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBWa0ltYWdlTWVtb3J5QmFycmllcjIqIGltZ19iYXIsIGludCBuYl9pbWdfYmFyKQo+ ICt7Cj4gKyAgICBpbnQgcCwgZ3JvdXBfeCwgZ3JvdXBfeTsKPiArICAgIEZGVnVsa2FuQ29udGV4 dCAqdmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtj dHgtPnZrZm47Cj4gKyAgICBQbGFuZSogcGxhbmU7Cj4gKwo+ICsgICAgcy0+ZHd0X2NvbnN0cy5s ZXZlbCA9IHMtPmJhc2Uud2F2ZWxldF9kZXB0aDsKPiArICAgIHZ1bGthbl9iaW5kX2ltZ19wbGFu ZXModmtjdHgsIGV4ZWMsICZzLT5kd3RfaGFhcl9zaGQsIHMtPmludGVybWVkaWF0ZV92aWV3cywg MCwgMCk7Cj4gKyAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVjLCAmcy0+ZHd0 X2hhYXJfc2hkKTsKPiArCj4gKyAgICAvKiBIYWFyIHBhc3MgKi8KPiArICAgIGZvciAocCA9IDA7 IHAgPCAzOyBwKyspIHsKPiArICAgICAgICBwbGFuZSA9ICZzLT5iYXNlLnBsYW5lW3BdOwo+ICsg ICAgICAgIHMtPmR3dF9jb25zdHMucGxhbmVfaWR4ID0gcDsKPiArICAgICAgICBpZiAocy0+aGFh cl9zdWJncm91cCkgewo+ICsgICAgICAgICAgICBncm91cF94ID0gRkZBTElHTihwbGFuZS0+ZHd0 X3dpZHRoLCA4KSA+PiAzOwo+ICsgICAgICAgICAgICBncm91cF95ID0gRkZBTElHTihwbGFuZS0+ ZHd0X2hlaWdodCwgOCkgPj4gMzsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICBn cm91cF94ID0gRkZBTElHTihwbGFuZS0+ZHd0X3dpZHRoLCAzMikgPj4gNTsKPiArICAgICAgICAg ICAgZ3JvdXBfeSA9IEZGQUxJR04ocGxhbmUtPmR3dF9oZWlnaHQsIDMyKSA+PiA1Owo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KHZrY3R4 LCBleGVjLCAmcy0+ZHd0X2hhYXJfc2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihWQzJEd3RQ dXNoRGF0YSksICZzLT5kd3RfY29uc3RzKTsKPiArICAgICAgICB2ay0+Q21kRGlzcGF0Y2goZXhl Yy0+YnVmLCBncm91cF94LCBncm91cF95LCAxKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBXYWl0 IGZvciBoYWFyIGRpc3BhdGNoZXMgdG8gY29tcGxldGUgKi8KPiArICAgIHZrLT5DbWRQaXBlbGlu ZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9ERVBFTkRFTkNZX0lORk8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0g bmJfaW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3dF9wbGFuZV9sZWdhbGwoVkMyRW5jVnVsa2FuQ29u dGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICpleGVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiogaW1nX2JhciwgaW50IG5iX2ltZ19iYXIpCj4g K3sKPiArICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1 bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47Cj4gKyAgICBpbnQgbGVnYWxsX2dyb3Vw X3ggPSAocy0+YmFzZS5wbGFuZVswXS5kd3RfaGVpZ2h0ICsgTEVHQUxMX1dPUktHUk9VUF9YIC0g MSkgPj4gNjsKPiArICAgIGludCBsZWdhbGxfZ3JvdXBfeSA9IChzLT5iYXNlLnBsYW5lWzBdLmR3 dF93aWR0aCArIExFR0FMTF9XT1JLR1JPVVBfWCAtIDEpID4+IDY7Cj4gKyAgICBpbnQgaTsKPiAr Cj4gKyAgICAvKiBQZXJmb3JtIGxlZ2FsbCB3YXZlbGV0IHRyYXNmb3JtICovCj4gKyAgICBmb3Ig KGkgPSAwOyBpIDwgcy0+YmFzZS53YXZlbGV0X2RlcHRoOyBpKyspIHsKPiArICAgICAgICBzLT5k d3RfY29uc3RzLmxldmVsID0gaTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRhbCBsZWdhbGwg cGFzcyAqLwo+ICsgICAgICAgIHZ1bGthbl9iaW5kX2ltZ19wbGFuZXModmtjdHgsIGV4ZWMsICZz LT5kd3RfaG9yX3NoZCwgcy0+aW50ZXJtZWRpYXRlX3ZpZXdzLCAwLCAwKTsKPiArICAgICAgICBm Zl92a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVjLCAmcy0+ZHd0X2hvcl9zaGQpOwo+ICsg ICAgICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgJnMtPmR3 dF9ob3Jfc2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihWQzJEd3RQdXNoRGF0YSksICZzLT5k d3RfY29uc3RzKTsKPiArICAgICAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBsZWdhbGxf Z3JvdXBfeCwgMSwgMyk7Cj4gKyAgICAgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+ YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZ X0lORk8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9p bWdfYmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7 Cj4gKwo+ICsgICAgICAgIC8qIFZlcnRpY2FsIGxlZ2FsbCBwYXNzICovCj4gKyAgICAgICAgdnVs a2FuX2JpbmRfaW1nX3BsYW5lcyh2a2N0eCwgZXhlYywgJnMtPmR3dF92ZXJfc2hkLCBzLT5pbnRl cm1lZGlhdGVfdmlld3MsIDAsIDApOwo+ICsgICAgICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIo dmtjdHgsIGV4ZWMsICZzLT5kd3RfdmVyX3NoZCk7Cj4gKyAgICAgICAgZmZfdmtfc2hhZGVyX3Vw ZGF0ZV9wdXNoX2NvbnN0KHZrY3R4LCBleGVjLCAmcy0+ZHd0X3Zlcl9zaGQsIFZLX1NIQURFUl9T VEFHRV9DT01QVVRFX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRhKSwgJnMtPmR3dF9jb25zdHMpOwo+ICsgICAgICAg IHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsIGxlZ2FsbF9ncm91cF95LCAxLCAzKTsKPiArICAg ICAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5m bykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMg PSBpbWdfYmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKPiArICAgIH0KPiArfQo+ICsKPiAr c3RhdGljIGludCBkd3RfcGxhbmVzKFZDMkVuY1Z1bGthbkNvbnRleHQgKnMsIEFWRnJhbWUgKmZy YW1lKQo+ICt7Cj4gKyAgICBpbnQgaSwgZXJyID0gMCwgbmJfaW1nX2JhciA9IDA7Cj4gKyAgICBp bnQgd2F2ZWxldF9pZHggPSBzLT5iYXNlLndhdmVsZXRfaWR4Owo+ICsgICAgaW50IGdyb3VwX3gg PSBzLT5iYXNlLnBsYW5lWzBdLmR3dF93aWR0aCA+PiAzOwo+ICsgICAgaW50IGdyb3VwX3kgPSBz LT5iYXNlLnBsYW5lWzBdLmR3dF9oZWlnaHQgPj4gMzsKPiArICAgIEZGVnVsa2FuQ29udGV4dCAq dmtjdHggPSAmcy0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgt PnZrZm47Cj4gKyAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWMgPSBzLT5leGVjOwo+ICsgICAgVmtJ bWFnZVZpZXcgdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwo+ICsgICAgVmtJbWFnZU1lbW9y eUJhcnJpZXIyIGltZ19iYXJbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwo+ICsKPiArICAgIC8qIEdl bmVyYXRlIGJhcnJpZXJzIGFuZCBpbWFnZSB2aWV3cyBmb3IgZnJhbWUgaW1hZ2VzLiAqLwo+ICsg ICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSh2a2N0eCwgZXhlYywgZnJhbWUsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NP TU1BTkRTX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJ TkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKPiArICAgIFJFVChmZl92a19jcmVhdGVf aW1hZ2V2aWV3cyh2a2N0eCwgZXhlYywgdmlld3MsIGZyYW1lLCBGRl9WS19SRVBfVUlOVCkpOwo+ ICsgICAgZmZfdmtfZnJhbWVfYmFycmllcih2a2N0eCwgZXhlYywgZnJhbWUsIGltZ19iYXIsICZu Yl9pbWdfYmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8y X0FMTF9DT01NQU5EU19CSVQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5F X1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBW S19BQ0NFU1NfU0hBREVSX1JFQURfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBWS19J TUFHRV9MQVlPVVRfR0VORVJBTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVf RkFNSUxZX0lHTk9SRUQpOwo+ICsKPiArICAgIC8qIFN1Ym1pdCB0aGUgaW1hZ2UgYmFycmllcnMu ICovCj4gKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRl bmN5SW5mbykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0g aW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5p bWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0pOwo+ICsKPiArICAgIC8qIENyZWF0ZSBhIHRlbXBvcmF0 eSBmcmFtZXMgKi8KPiArICAgIG5iX2ltZ19iYXIgPSAwOwo+ICsgICAgZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgewo+ICsgICAgICAgIHMtPmludGVybWVkaWF0ZV9mcmFtZVtpXSA9IGF2X2ZyYW1l X2FsbG9jKCk7Cj4gKyAgICAgICAgaWYgKCFzLT5pbnRlcm1lZGlhdGVfZnJhbWVbaV0pCj4gKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgICAgIFJFVChhdl9o d2ZyYW1lX2dldF9idWZmZXIocy0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbaV0sCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5pbnRlcm1lZGlhdGVfZnJhbWVbaV0sIDAp KTsKPiArICAgICAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBz LT5pbnRlcm1lZGlhdGVfZnJhbWVbaV0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVf U0hBREVSX0JJVCkpOwo+ICsgICAgICAgIFJFVChmZl92a19jcmVhdGVfaW1hZ2V2aWV3cyh2a2N0 eCwgZXhlYywgJnMtPmludGVybWVkaWF0ZV92aWV3c1tpXSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy0+aW50ZXJtZWRpYXRlX2ZyYW1lW2ldLCBGRl9WS19SRVBfSU5U KSk7Cj4gKyAgICAgICAgZmZfdmtfZnJhbWVfYmFycmllcih2a2N0eCwgZXhlYywgcy0+aW50ZXJt ZWRpYXRlX2ZyYW1lW2ldLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFE RVJfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9S RUFEX0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9H RU5FUkFMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lH Tk9SRUQpOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIFN1Ym1pdCB0aGUgaW1hZ2UgYmFycmllcnMu ICovCj4gKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRl bmN5SW5mbykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0g aW1nX2JhciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5p bWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0pOwo+ICsKPiArICAgIC8qIEJpbmQgaW5wdXQgaW1hZ2Vz IHRvIHRoZSBzaGFkZXIuICovCj4gKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSh2 a2N0eCwgZXhlYywgJnMtPmR3dF91cGxvYWRfc2hkLCBmcmFtZSwgdmlld3MsIDAsIDAsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwg VktfTlVMTF9IQU5ETEUpOwo+ICsgICAgdnVsa2FuX2JpbmRfaW1nX3BsYW5lcyh2a2N0eCwgZXhl YywgJnMtPmR3dF91cGxvYWRfc2hkLCBzLT5pbnRlcm1lZGlhdGVfdmlld3MsIDAsIDEpOwo+ICsK PiArICAgIC8qIFVwbG9hZCBjb2VmZmljaWVudHMgZnJvbSBwbGFuZXMgdG8gdGhlIGJ1ZmZlci4g Ki8KPiArICAgIHMtPmR3dF9jb25zdHMuZGlmZl9vZmZzZXQgPSBzLT5iYXNlLmRpZmZfb2Zmc2V0 Owo+ICsgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcih2a2N0eCwgZXhlYywgJnMtPmR3dF91cGxv YWRfc2hkKTsKPiArICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhl YywgJnMtPmR3dF91cGxvYWRfc2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRh KSwgJnMtPmR3dF9jb25zdHMpOwo+ICsgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgZ3Jv dXBfeCwgZ3JvdXBfeSwgMSk7Cj4gKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5i dWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5G TywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucEltYWdl TWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKPiArCj4gKyAgICAv KiBQZXJmb3JtIHdhdmVsZXQgdHJhc2Zvcm0uICovCj4gKyAgICBpZiAod2F2ZWxldF9pZHggPT0g VkMyX1RSQU5TRk9STV9IQUFSIHx8IHdhdmVsZXRfaWR4ID09IFZDMl9UUkFOU0ZPUk1fSEFBUl9T KQo+ICsgICAgICAgIGR3dF9wbGFuZV9oYWFyKHMsIGV4ZWMsIGltZ19iYXIsIG5iX2ltZ19iYXIp Owo+ICsgICAgZWxzZSBpZiAod2F2ZWxldF9pZHggPT0gVkMyX1RSQU5TRk9STV81XzMpCj4gKyAg ICAgICAgZHd0X3BsYW5lX2xlZ2FsbChzLCBleGVjLCBpbWdfYmFyLCBuYl9pbWdfYmFyKTsKPiAr Cj4gK2ZhaWw6Cj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBlbmNv ZGVfc2xpY2VzKFZDMkVuY1Z1bGthbkNvbnRleHQgKnN2KQo+ICt7Cj4gKyAgICBWQzJFbmNDb250 ZXh0ICpzID0gJnN2LT5iYXNlOwo+ICsgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gc3YtPmV4 ZWM7Cj4gKyAgICBpbnQgbnVtX3NsaWNlcyA9IHMtPm51bV94ICogcy0+bnVtX3k7Cj4gKyAgICBp bnQgbnVtX3NsaWNlX2dyb3VwcyA9IChudW1fc2xpY2VzICsgU0xJQ0VfV09SS0dST1VQX1ggLSAx KSA+PiA3Owo+ICsgICAgaW50IGksIHNraXAgPSAwOwo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2 a2N0eCA9ICZzdi0+dmtjdHg7Cj4gKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgt PnZrZm47Cj4gKwo+ICsgICAgLyogQ2FsY3VsYXRlIHNsaWNlIHNpemVzLiAqLwo+ICsgICAgdnVs a2FuX2JpbmRfaW1nX3BsYW5lcyh2a2N0eCwgZXhlYywgJnN2LT5zbGljZV9zaGQsIHN2LT5pbnRl cm1lZGlhdGVfdmlld3MsIDAsIDApOwo+ICsgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1 ZmZlcih2a2N0eCwgZXhlYywgJnN2LT5zbGljZV9zaGQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIDEsIDAsICZzdi0+bHV0X2J1ZiwgMCwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFZDMkVuY0F1eERhdGEpLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAg IGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIodmtjdHgsIGV4ZWMsICZzdi0+c2xpY2Vf c2hkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAyLCAwLCAmc3Yt PnNsaWNlX2J1ZiwgMCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Yt PnNsaWNlX2J1Zi5zaXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19GT1JNQVRfVU5ERUZJTkVEKTsKPiArICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIodmtjdHgs IGV4ZWMsICZzdi0+c2xpY2Vfc2hkKTsKPiArICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9j b25zdCh2a2N0eCwgZXhlYywgJnN2LT5zbGljZV9zaGQsIFZLX1NIQURFUl9TVEFHRV9DT01QVVRF X0JJVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YoVkMy RW5jU2xpY2VDYWxjUHVzaERhdGEpLCAmc3YtPmNhbGNfY29uc3RzKTsKPiArICAgIHZrLT5DbWRE aXNwYXRjaChleGVjLT5idWYsIG51bV9zbGljZV9ncm91cHMsIDEsIDEpOwo+ICsKPiArICAgIGZs dXNoX3B1dF9iaXRzKCZzLT5wYik7Cj4gKyAgICBzdi0+ZW5jX2NvbnN0cy5wYiArPSBwdXRfYnl0 ZXNfb3V0cHV0KCZzLT5wYik7Cj4gKwo+ICsgICAgLyogV2FpdCBmb3Igc2xpY2Ugc2l6ZXMgdG8g YmUgd3JpdHRlbi4gKi8KPiArICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1Ziwg JihWa0RlcGVuZGVuY3lJbmZvKSB7Cj4gKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfREVQRU5ERU5DWV9JTkZPLAo+ICsgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSAm KFZrQnVmZmVyTWVtb3J5QmFycmllcjIpIHsKPiArICAgICAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCj4gKyAgICAgICAgICAgIC5zcmNT dGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKPiArICAg ICAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFE RVJfQklULAo+ICsgICAgICAgICAgICAuc3JjQWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURF Ul9XUklURV9CSVQsCj4gKyAgICAgICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJf U0hBREVSX1JFQURfQklULAo+ICsgICAgICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZL X1FVRVVFX0ZBTUlMWV9JR05PUkVELAo+ICsgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRl eCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAo+ICsgICAgICAgICAgICAuYnVmZmVyID0gc3Yt PnNsaWNlX2J1Zi5idWYsCj4gKyAgICAgICAgICAgIC5zaXplID0gc2l6ZW9mKFZDMkVuY1NsaWNl QXJncykgKiBudW1fc2xpY2VzLAo+ICsgICAgICAgICAgICAub2Zmc2V0ID0gMCwKPiArICAgICAg ICB9LAo+ICsgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSAxVSwKPiArICAgIH0p Owo+ICsKPiArICAgIC8qIFBlcmZvcm0gdGhlIGVuY29kaW5nLiAqLwo+ICsgICAgdnVsa2FuX2Jp bmRfaW1nX3BsYW5lcyh2a2N0eCwgZXhlYywgJnN2LT5lbmNfc2hkLCBzdi0+aW50ZXJtZWRpYXRl X3ZpZXdzLCAwLCAwKTsKPiArICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIodmtj dHgsIGV4ZWMsICZzdi0+ZW5jX3NoZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgMSwgMCwgJnN2LT5sdXRfYnVmLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoVkMyRW5jQXV4RGF0YSksCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwo+ICsgICAgZmZfdmtfc2hh ZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcih2a2N0eCwgZXhlYywgJnN2LT5lbmNfc2hkLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAyLCAwLCAmc3YtPnNsaWNlX2J1Ziwg MCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNsaWNlX2J1Zi5z aXplLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5E RUZJTkVEKTsKPiArICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIodmtjdHgsIGV4ZWMsICZzdi0+ ZW5jX3NoZCk7Cj4gKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX3B1c2hfY29uc3QodmtjdHgsIGV4 ZWMsICZzdi0+ZW5jX3NoZCwgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihWQzJFbmNQdXNoRGF0YSksICZz di0+ZW5jX2NvbnN0cyk7Cj4gKwo+ICsgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgbnVt X3NsaWNlX2dyb3VwcywgMSwgMSk7Cj4gKwo+ICsgICAgZmZfdmtfZXhlY19zdWJtaXQodmtjdHgs IGV4ZWMpOwo+ICsgICAgZmZfdmtfZXhlY193YWl0KHZrY3R4LCBleGVjKTsKPiArCj4gKyAgICBm b3IgKGludCBzbGljZV95ID0gMDsgc2xpY2VfeSA8IHMtPm51bV95OyBzbGljZV95KyspIHsKPiAr ICAgICAgICBmb3IgKGludCBzbGljZV94ID0gMDsgc2xpY2VfeCA8IHMtPm51bV94OyBzbGljZV94 KyspIHsKPiArICAgICAgICAgICAgVkMyRW5jU2xpY2VBcmdzICphcmdzID0gJnN2LT5zbGljZV9h cmdzW3MtPm51bV94ICogc2xpY2VfeSArIHNsaWNlX3hdOwo+ICsgICAgICAgICAgICBza2lwICs9 IGFyZ3MtPmJ5dGVzOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvKiBTa2lwIGZv cndhcmQgdG8gd3JpdGUgZW5kIGhlYWRlciAqLwo+ICsgICAgc2tpcF9wdXRfYnl0ZXMoJnMtPnBi LCBza2lwKTsKPiArCj4gKyAgICAvKiBGcmVlIGFsbG9jYXRlZCBpbnRlcm1lZGlhdGUgZnJhbWVz ICovCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQo+ICsgICAgICAgIGF2X2ZyYW1lX2Zy ZWUoJnN2LT5pbnRlcm1lZGlhdGVfZnJhbWVbaV0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGVu Y29kZV9mcmFtZShWQzJFbmNWdWxrYW5Db250ZXh0ICpzdiwgQVZQYWNrZXQgKmF2cGt0LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpmcmFtZSwgY29uc3QgaW50IGhl YWRlcl9zaXplKQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgaW50NjRfdCBtYXhfZnJhbWVf Ynl0ZXM7Cj4gKyAgICBBVkJ1ZmZlclJlZiAqYXZwa3RfYnVmID0gTlVMTDsKPiArICAgIEZGVmtC dWZmZXIqIGJ1Zl92ayA9IE5VTEw7Cj4gKyAgICBWQzJFbmNDb250ZXh0KiBzID0gJnN2LT5iYXNl Owo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzdi0+dmtjdHg7Cj4gKwo+ICsgICAg LyogUGVyZm9ybSB3YXZlbGV0IHBhc3Mgb24gdGhlIGlucHV0IGRhdGEuICovCj4gKyAgICByZXQg PSBkd3RfcGxhbmVzKHN2LCAoQVZGcmFtZSopZnJhbWUpOwo+ICsgICAgaWYgKHJldCkKPiArICAg ICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgY2Fu IGZpdCBhdCBhbGwgYWxsIDMgcGxhbmVzIG9mIGRhdGEgKi8KPiArICAgIG1heF9mcmFtZV9ieXRl cyA9IGhlYWRlcl9zaXplICsgTUFYX05VTV9QTEFORVMgKiBzLT5hdmN0eC0+d2lkdGgKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzLT5hdmN0 eC0+aGVpZ2h0Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogc2l6ZW9mKGR3dGNvZWYpOwo+ICsKPiArICAgIC8qIEdldCBhIHBvb2xlZCBkZXZp Y2UgbG9jYWwgaG9zdCB2aXNpYmxlIGJ1ZmZlciBmb3Igd3JpdGluZyBvdXRwdXQgZGF0YSAqLwo+ ICsgICAgcmV0ID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIodmtjdHgsICZzdi0+ZHd0X2J1Zl9w b29sLCAmYXZwa3RfYnVmLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJVCB8Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCwg TlVMTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9mcmFtZV9ieXRl cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJU WV9IT1NUX0NBQ0hFRF9CSVQgfAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQgfAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfQ09IRVJFTlRfQklUKTsK PiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgZmZf dmtfZXhlY19hZGRfZGVwX2J1Zih2a2N0eCwgc3YtPmV4ZWMsICZhdnBrdF9idWYsIDEsIDEpOwo+ ICsgICAgYnVmX3ZrID0gKEZGVmtCdWZmZXIgKilhdnBrdF9idWYtPmRhdGE7Cj4gKyAgICBzdi0+ ZW5jX2NvbnN0cy5wYiA9IGJ1Zl92ay0+YWRkcmVzczsKPiArCj4gKyAgICAvKiBJbml0aWFsaXpl IHBhY2tldC4gKi8KPiArICAgIGF2cGt0LT5idWYgPSBhdnBrdF9idWY7Cj4gKyAgICBhdnBrdC0+ ZGF0YSA9IGJ1Zl92ay0+bWFwcGVkX21lbTsKPiArICAgIGF2cGt0LT5zaXplID0gbWF4X2ZyYW1l X2J5dGVzOwo+ICsgICAgaW5pdF9wdXRfYml0cygmcy0+cGIsIGF2cGt0LT5kYXRhLCBhdnBrdC0+ c2l6ZSk7Cj4gKwo+ICsgICAgLyogRW5jb2RlIGZyYW1lICovCj4gKyAgICBmZl92YzJfd3JpdGVf ZnJhbWVfaGVhZGVyKHMpOwo+ICsgICAgZW5jb2RlX3NsaWNlcyhzdik7Cj4gKyAgICBmZl92YzJf d3JpdGVfc2VxdWVuY2VfZW5kKHMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYXZfY29sZCBpbnQgdmMyX2VuY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgs IEFWUGFja2V0ICphdnBrdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQVZGcmFtZSAqZnJhbWUsIGludCAqZ290X3BhY2tldCkKPiArewo+ICsgICAgaW50IHJl dCA9IDA7Cj4gKyAgICBWQzJFbmNWdWxrYW5Db250ZXh0ICpzdiA9IGF2Y3R4LT5wcml2X2RhdGE7 Cj4gKyAgICBWQzJFbmNDb250ZXh0ICpzID0gJnN2LT5iYXNlOwo+ICsgICAgY29uc3QgaW50IGJp dGV4YWN0ID0gYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19CSVRFWEFDVDsKPiArICAgIGNv bnN0IGludCBhdXhfZGF0YV9zaXplID0gYml0ZXhhY3QgPyBzaXplb2YoIkxhdmMiKSA6IHNpemVv ZihMSUJBVkNPREVDX0lERU5UKTsKPiArICAgIGNvbnN0IGludCBoZWFkZXJfc2l6ZSA9IDEwMCAr IGF1eF9kYXRhX3NpemU7Cj4gKwo+ICsgICAgcmV0ID0gZmZfdmMyX2ZyYW1lX2luaXQoYXZjdHgs IHMpOwo+ICsgICAgaWYgKHJldCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHN2 LT5jYWxjX2NvbnN0cy5zaXplX3NjYWxlciA9IHMtPnNpemVfc2NhbGVyOwo+ICsgICAgc3YtPmNh bGNfY29uc3RzLmJpdHNfY2VpbCAgPSBzLT5zbGljZV9tYXhfYnl0ZXMgPDwgMzsKPiArICAgIHN2 LT5jYWxjX2NvbnN0cy5iaXRzX2Zsb29yID0gcy0+c2xpY2VfbWluX2J5dGVzIDw8IDM7Cj4gKyAg ICBzdi0+ZW5jX2NvbnN0cy5wcmVmaXhfYnl0ZXMgPSAwOwo+ICsgICAgc3YtPmVuY19jb25zdHMu c2l6ZV9zY2FsZXIgPSBzLT5zaXplX3NjYWxlcjsKPiArCj4gKyAgICBzdi0+ZXhlYyA9IGZmX3Zr X2V4ZWNfZ2V0KCZzdi0+dmtjdHgsICZzdi0+ZSk7Cj4gKyAgICBmZl92a19leGVjX3N0YXJ0KCZz di0+dmtjdHgsIHN2LT5leGVjKTsKPiArCj4gKyAgICByZXQgPSBlbmNvZGVfZnJhbWUoc3YsIGF2 cGt0LCBmcmFtZSwgaGVhZGVyX3NpemUpOwo+ICsgICAgaWYgKHJldCkKPiArICAgICAgICByZXR1 cm4gcmV0Owo+ICsKPiArICAgIGZsdXNoX3B1dF9iaXRzKCZzLT5wYik7Cj4gKyAgICBhdl9zaHJp bmtfcGFja2V0KGF2cGt0LCBwdXRfYnl0ZXNfb3V0cHV0KCZzLT5wYikpOwo+ICsgICAgYXZwa3Qt PmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsKPiArICAgICpnb3RfcGFja2V0ID0gMTsKPiArCj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IHZjMl9lbmNvZGVf ZW5kKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgVkMyRW5jVnVsa2FuQ29udGV4 dCAqc3YgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9 ICZzdi0+dmtjdHg7Cj4gKyAgICBpbnQgaTsKPiArCj4gKyAgICBmZl92a19leGVjX3Bvb2xfZnJl ZSh2a2N0eCwgJnN2LT5lKTsKPiArCj4gKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnN2 LT5kd3RfdXBsb2FkX3NoZCk7Cj4gKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnN2LT5k d3RfaGFhcl9zaGQpOwo+ICsgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzdi0+ZHd0X2hv cl9zaGQpOwo+ICsgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzdi0+ZHd0X3Zlcl9zaGQp Owo+ICsgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzdi0+c2xpY2Vfc2hkKTsKPiArICAg IGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmc3YtPmVuY19zaGQpOwo+ICsKPiArICAgIGZmX3Zr X2ZyZWVfYnVmKHZrY3R4LCAmc3YtPnNsaWNlX2J1Zik7Cj4gKyAgICBmZl92a19mcmVlX2J1Zih2 a2N0eCwgJnN2LT5sdXRfYnVmKTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7 Cj4gKyAgICAgICAgZmZfdmMyZW5jX2ZyZWVfdHJhbnNmb3Jtcygmc3YtPmJhc2UudHJhbnNmb3Jt X2FyZ3NbaV0udCk7Cj4gKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZzdi0+aW50ZXJtZWRpYXRl X2ZyYW1lc19yZWZbaV0pOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2J1ZmZlcl9wb29sX3VuaW5p dCgmc3YtPmR3dF9idWZfcG9vbCk7Cj4gKyAgICBmZl92a191bmluaXQodmtjdHgpOwo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdmMyX2VuY29kZV9p bml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPiArewo+ICsgICAgaW50IGVyciA9IDAsIGRlcHRo Owo+ICsgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpmbXQ7Cj4gKyAgICBWQzJFbmNWdWxr YW5Db250ZXh0ICpzdiA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAgICBWQzJFbmNDb250ZXh0ICpz ID0gJnN2LT5iYXNlOwo+ICsgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzdi0+dmtjdHg7 Cj4gKyAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2Owo+ICsgICAgVkMyRW5jQXV4RGF0YSAqYWQg PSBOVUxMOwo+ICsgICAgdW5zaWduZWQgaW50IHN1Ymdyb3VwX3NpemUgPSB2a2N0eC0+c3ViZ3Jv dXBfcHJvcHMubWF4U3ViZ3JvdXBTaXplOwo+ICsKPiArICAgIC8qIEluaXQgdnVsa2FuICovCj4g KyAgICBlcnIgPSBmZl92a19pbml0KCZzdi0+dmtjdHgsIGF2Y3R4LCBOVUxMLCBhdmN0eC0+aHdf ZnJhbWVzX2N0eCk7Cj4gKyAgICBpZiAoZXJyIDwgMCkKPiArICAgICAgICByZXR1cm4gZXJyOwo+ ICsKPiArICAgIHN2LT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZLX1FVRVVFX0NPTVBVVEVf QklULCAwKTsKPiArICAgIGlmICghc3YtPnFmKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzIVxuIik7Cj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PVFNVUCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3B2ID0gZmZf dmtfc3BpcnZfaW5pdCgpOwo+ICsgICAgaWYgKCFzcHYpIHsKPiArICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFNQSVItViBjb21waWxlciFc biIpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiAr ICAgIGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBzdi0+cWYsICZzdi0+ZSwgMSwgMCwgMCwg MCwgTlVMTCk7Cj4gKwo+ICsgICAgLyogQ2hyb21hIHN1YnNhbXBsaW5nICovCj4gKyAgICBlcnIg PSBhdl9waXhfZm10X2dldF9jaHJvbWFfc3ViX3NhbXBsZSh2a2N0eC0+ZnJhbWVzLT5zd19mb3Jt YXQsICZzLT5jaHJvbWFfeF9zaGlmdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPmNocm9tYV95X3NoaWZ0 KTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAg LyogQml0IGRlcHRoIGFuZCBjb2xvciByYW5nZSBpbmRleCAqLwo+ICsgICAgZm10ID0gYXZfcGl4 X2ZtdF9kZXNjX2dldCh2a2N0eC0+ZnJhbWVzLT5zd19mb3JtYXQpOwo+ICsgICAgZGVwdGggPSBm bXQtPmNvbXBbMF0uZGVwdGg7Cj4gKwo+ICsgICAgLyogMTYtYml0IGRlcHRoIGlzIHVuc3VwcG9y dGVkIGJ5IHRoaXMgZW5jb2RlciAqLwo+ICsgICAgaWYgKGRlcHRoID09IDE2KSB7Cj4gKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICIxNi1iaXQgcGl4ZWwgZm9ybWF0IGRlcHRo IGlzIHVuc3VwcG9ydGVkIGJ5IHRoaXMgZW5jb2RlclxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PVFNVUCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogUGVyZm9ybSBjb21tb24gaW5p dGlhbGl6YXRpb24uICovCj4gKyAgICBlcnIgPSBmZl92YzJfZW5jb2RlX2luaXQoYXZjdHgsIGRl cHRoKTsKPiArICAgIGlmIChlcnIgPCAwKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsg ICAgLyogSW5pdGlhbGl6ZSBIYWFyIHB1c2ggZGF0YSAqLwo+ICsgICAgc3YtPmR3dF9jb25zdHMu ZGlmZl9vZmZzZXQgPSBzLT5kaWZmX29mZnNldDsKPiArICAgIHN2LT5kd3RfY29uc3RzLnMgPSBz LT53YXZlbGV0X2lkeCA9PSBWQzJfVFJBTlNGT1JNX0hBQVJfUyA/IDEgOiAwOwo+ICsgICAgc3Yt PmR3dF9jb25zdHMubGV2ZWwgPSAwOwo+ICsKPiArICAgIC8qIEluaXRpYWxpemVyIHNsaWNlIGNh bGN1bGF0aW9uIHB1c2ggZGF0YSAqLwo+ICsgICAgc3YtPmNhbGNfY29uc3RzLm51bV94ID0gcy0+ bnVtX3g7Cj4gKyAgICBzdi0+Y2FsY19jb25zdHMubnVtX3kgPSBzLT5udW1feTsKPiArICAgIHN2 LT5jYWxjX2NvbnN0cy53YXZlbGV0X2RlcHRoID0gcy0+d2F2ZWxldF9kZXB0aDsKPiArICAgIHN2 LT5jYWxjX2NvbnN0cy5wcmVmaXhfYnl0ZXMgPSBzLT5wcmVmaXhfYnl0ZXM7Cj4gKwo+ICsgICAg LyogSW5pdGlhbGl6ZSBlbmNvZGVyIHB1c2ggZGF0YSAqLwo+ICsgICAgc3YtPmVuY19jb25zdHMu d2F2ZWxldF9kZXB0aCA9IHMtPndhdmVsZXRfZGVwdGg7Cj4gKyAgICBzdi0+ZW5jX2NvbnN0cy5u dW1feCA9IHMtPm51bV94Owo+ICsgICAgc3YtPmVuY19jb25zdHMubnVtX3kgPSBzLT5udW1feTsK PiArCj4gKyAgICAvKiBDcmVhdGUgYnVmZmVyIGZvciBlbmNvZGVyIGF1eGlsYXJ5IGRhdGEuICov Cj4gKyAgICBSRVQoZmZfdmtfY3JlYXRlX2J1Zih2a2N0eCwgJnN2LT5sdXRfYnVmLCBzaXplb2Yo VkMyRW5jQXV4RGF0YSksIE5VTEwsIE5VTEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBW S19CVUZGRVJfVVNBR0VfVU5JRk9STV9CVUZGRVJfQklUIHwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklULAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQg fAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklT SUJMRV9CSVQpKTsKPiArICAgIFJFVChmZl92a19tYXBfYnVmZmVyKHZrY3R4LCAmc3YtPmx1dF9i dWYsICh2b2lkICopJmFkLCAwKSk7Cj4gKyAgICBmZl92YzJfaW5pdF9xdWFudF9tYXRyaXgocywg YWQtPnF1YW50KTsKPiArICAgIG1lbWNweShhZC0+ZmZfZGlyYWNfcXNjYWxlX3RhYiwgZmZfZGly YWNfcXNjYWxlX3RhYiwgc2l6ZW9mKGZmX2RpcmFjX3FzY2FsZV90YWIpKTsKPiArICAgIG1lbWNw eShhZC0+aW50ZXJsZWF2ZWRfdWVfZ29sb21iX3RhYiwgaW50ZXJsZWF2ZWRfdWVfZ29sb21iX3Rh Yiwgc2l6ZW9mKGludGVybGVhdmVkX3VlX2dvbG9tYl90YWIpKTsKPiArICAgIG1lbWNweShhZC0+ dG9wX2ludGVybGVhdmVkX3VlX2dvbG9tYl90YWIsIHRvcF9pbnRlcmxlYXZlZF91ZV9nb2xvbWJf dGFiLCBzaXplb2YodG9wX2ludGVybGVhdmVkX3VlX2dvbG9tYl90YWIpKTsKPiArICAgIG1lbWNw eShhZC0+Z29sb21iX2xlbl90YWIsIGdvbG9tYl9sZW5fdGFiLCBzaXplb2YoZ29sb21iX2xlbl90 YWIpKTsKPiArICAgIFJFVChmZl92a191bm1hcF9idWZmZXIodmtjdHgsICZzdi0+bHV0X2J1Ziwg MSkpOwo+ICsKPiArICAgIC8qIENyZWF0ZSBidWZmZXIgZm9yIGVuY29kZXIgYXV4aWxhcnkgZGF0 YS4gKi8KPiArICAgIFJFVChmZl92a19jcmVhdGVfYnVmKHZrY3R4LCAmc3YtPnNsaWNlX2J1ZiwK PiArICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihWQzJFbmNTbGljZUFyZ3MpICogcy0+ bnVtX3ggKiBzLT5udW1feSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZG RVJfQklUIHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFE RVJfREVWSUNFX0FERFJFU1NfQklULAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVN T1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQgfAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQpKTsKPiArICAgIFJFVChmZl92 a19tYXBfYnVmZmVyKHZrY3R4LCAmc3YtPnNsaWNlX2J1ZiwgKHZvaWQgKikmc3YtPnNsaWNlX2Fy Z3MsIDApKTsKPiArICAgIG1lbXNldChzdi0+c2xpY2VfYXJncywgMCwgc3YtPnNsaWNlX2J1Zi5z aXplKTsKPiArCj4gKyAgICAvKiBJbml0aWFsaXplIGludGVybWVkaWF0ZSBmcmFtZSBwb29sLiAq Lwo+ICsgICAgUkVUKGluaXRfZnJhbWVfcG9vbHMoYXZjdHgpKTsKPiArCj4gKyAgICAvKiBJbml0 aWFsaXplIGVuY29kaW5nIHBpcGVsaW5lcyAqLwo+ICsgICAgaW5pdF92dWxrYW5fcGlwZWxpbmUo c3YsIHNwdiwgJnN2LT5kd3RfdXBsb2FkX3NoZCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRhKSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDgsIDEsICJkd3RfdXBsb2FkX3BsIiwgZmZfc291 cmNlX3ZjMl9kd3RfdXBsb2FkX2NvbXAsIDAsIDIpOwo+ICsgICAgaW5pdF92dWxrYW5fcGlwZWxp bmUoc3YsIHNwdiwgJnN2LT5zbGljZV9zaGQsIHNpemVvZihWQzJFbmNQdXNoRGF0YSksCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBTTElDRV9XT1JLR1JPVVBfWCwgMSwgMSwgInNsaWNlX3Bs IiwgZmZfc291cmNlX3ZjMl9zbGljZV9zaXplc19jb21wLCAxLCAzKTsKPiArICAgIGluaXRfdnVs a2FuX3BpcGVsaW5lKHN2LCBzcHYsICZzdi0+ZW5jX3NoZCwgc2l6ZW9mKFZDMkVuY1B1c2hEYXRh KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIFNMSUNFX1dPUktHUk9VUF9YLCAxLCAxLCAi ZW5jX3BsIiwgZmZfc291cmNlX3ZjMl9lbmNvZGVfY29tcCwgMSwgMyk7Cj4gKyAgICBzdi0+aGFh cl9zdWJncm91cCA9IDA7Cj4gKwo+ICsgICAgaWYgKHMtPndhdmVsZXRfaWR4ID09IFZDMl9UUkFO U0ZPUk1fSEFBUiB8fCBzLT53YXZlbGV0X2lkeCA9PSBWQzJfVFJBTlNGT1JNX0hBQVJfUykgewo+ ICsgICAgICAgIGlmIChzdWJncm91cF9zaXplID09IDMyICYmIHMtPndhdmVsZXRfZGVwdGggPCAz KSB7Cj4gKyAgICAgICAgICAgIGluaXRfdnVsa2FuX3BpcGVsaW5lKHN2LCBzcHYsICZzdi0+ZHd0 X2hhYXJfc2hkLCBzaXplb2YoVkMyRHd0UHVzaERhdGEpLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA2NCwgMSwgMSwgImR3dF9oYWFyX3BsIiwgZmZfc291cmNlX3ZjMl9kd3Rf aGFhcl9zdWJncm91cF9jb21wLCAxLCAxKTsKPiArICAgICAgICAgICAgc3YtPmhhYXJfc3ViZ3Jv dXAgPSAxOwo+ICsgICAgICAgIH0gZWxzZSBpZiAoc3ViZ3JvdXBfc2l6ZSA9PSA2NCAmJiBzLT53 YXZlbGV0X2RlcHRoIDwgNCkgewo+ICsgICAgICAgICAgICBpbml0X3Z1bGthbl9waXBlbGluZShz diwgc3B2LCAmc3YtPmR3dF9oYWFyX3NoZCwgc2l6ZW9mKFZDMkR3dFB1c2hEYXRhKSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQsIDEsIDEsICJkd3RfaGFhcl9wbCIsIGZm X3NvdXJjZV92YzJfZHd0X2hhYXJfc3ViZ3JvdXBfY29tcCwgMSwgMSk7Cj4gKyAgICAgICAgICAg IHN2LT5oYWFyX3N1Ymdyb3VwID0gMTsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAg ICBpbml0X3Z1bGthbl9waXBlbGluZShzdiwgc3B2LCAmc3YtPmR3dF9oYWFyX3NoZCwgc2l6ZW9m KFZDMkR3dFB1c2hEYXRhKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIs IDMyLCAxLCAiZHd0X2hhYXJfcGwiLCBmZl9zb3VyY2VfdmMyX2R3dF9oYWFyX2NvbXAsIDEsIDEp Owo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSBpZiAocy0+d2F2ZWxldF9pZHggPT0gVkMyX1RS QU5TRk9STV81XzMpIHsKPiArICAgICAgICBpbml0X3Z1bGthbl9waXBlbGluZShzdiwgc3B2LCAm c3YtPmR3dF9ob3Jfc2hkLCBzaXplb2YoVkMyRHd0UHVzaERhdGEpLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExFR0FMTF9XT1JLR1JPVVBfWCwgMSwgMSwgImR3dF9ob3JfcGwiLCBm Zl9zb3VyY2VfdmMyX2R3dF9ob3JfbGVnYWxsX2NvbXAsIDEsIDEpOwo+ICsgICAgICAgIGluaXRf dnVsa2FuX3BpcGVsaW5lKHN2LCBzcHYsICZzdi0+ZHd0X3Zlcl9zaGQsIHNpemVvZihWQzJEd3RQ dXNoRGF0YSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVHQUxMX1dPUktHUk9V UF9YLCAxLCAxLCAiZHd0X3Zlcl9wbCIsIGZmX3NvdXJjZV92YzJfZHd0X3Zlcl9sZWdhbGxfY29t cCwgMSwgMSk7Cj4gKyAgICB9Cj4gKwo+ICtmYWlsOgo+ICsgICAgcmV0dXJuIGVycjsKPiArfQo+ ICsKPiArI2RlZmluZSBWQzJFTkNfRkxBR1MgKEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNIHwg QVZfT1BUX0ZMQUdfVklERU9fUEFSQU0pCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB2YzJlbmNf b3B0aW9uc1tdID0gewo+ICsgICAgeyJ0b2xlcmFuY2UiLCAgICAgIk1heCB1bmRlcnNob290IGlu IHBlcmNlbnQiLCBvZmZzZXRvZihWQzJFbmNDb250ZXh0LCB0b2xlcmFuY2UpLCBBVl9PUFRfVFlQ RV9ET1VCTEUsIHsuZGJsID0gNS4wZn0sIDAuMGYsIDQ1LjBmLCBWQzJFTkNfRkxBR1MsIC51bml0 ID0gInRvbGVyYW5jZSJ9LAo+ICsgICAgeyJzbGljZV93aWR0aCIsICAgIlNsaWNlIHdpZHRoIiwg IG9mZnNldG9mKFZDMkVuY0NvbnRleHQsIHNsaWNlX3dpZHRoKSwgQVZfT1BUX1RZUEVfSU5ULCB7 Lmk2NCA9IDMyfSwgMzIsIDEwMjQsIFZDMkVOQ19GTEFHUywgLnVuaXQgPSAic2xpY2Vfd2lkdGgi fSwKPiArICAgIHsic2xpY2VfaGVpZ2h0IiwgICJTbGljZSBoZWlnaHQiLCBvZmZzZXRvZihWQzJF bmNDb250ZXh0LCBzbGljZV9oZWlnaHQpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gMTZ9LCA4 LCAxMDI0LCBWQzJFTkNfRkxBR1MsIC51bml0ID0gInNsaWNlX2hlaWdodCJ9LAo+ICsgICAgeyJ3 YXZlbGV0X2RlcHRoIiwgIlRyYW5zZm9ybSBkZXB0aCIsIG9mZnNldG9mKFZDMkVuY0NvbnRleHQs IHdhdmVsZXRfZGVwdGgpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gNH0sIDEsIDUsIFZDMkVO Q19GTEFHUywgLnVuaXQgPSAid2F2ZWxldF9kZXB0aCJ9LAo+ICsgICAgeyJ3YXZlbGV0X3R5cGUi LCAgIlRyYW5zZm9ybSB0eXBlIiwgIG9mZnNldG9mKFZDMkVuY0NvbnRleHQsIHdhdmVsZXRfaWR4 KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IFZDMl9UUkFOU0ZPUk1fSEFBUn0sIDEsIFZDMl9U UkFOU0ZPUk1TX05CLCBWQzJFTkNfRkxBR1MsIC51bml0ID0gIndhdmVsZXRfaWR4In0sCj4gKyAg ICAgICAgeyI1XzMiLCAgICAgICAgICAiTGVHYWxsICg1LDMpIiwgICAgICAgICAgICAwLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQgPSBWQzJfVFJBTlNGT1JNXzVfM30sICAgIElOVF9NSU4sIElO VF9NQVgsIFZDMkVOQ19GTEFHUywgLnVuaXQgPSAid2F2ZWxldF9pZHgifSwKPiArICAgICAgICB7 ImhhYXIiLCAgICAgICAgICJIYWFyICh3aXRoIHNoaWZ0KSIsICAgICAgIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7Lmk2NCA9IFZDMl9UUkFOU0ZPUk1fSEFBUl9TfSwgSU5UX01JTiwgSU5UX01BWCwg VkMyRU5DX0ZMQUdTLCAudW5pdCA9ICJ3YXZlbGV0X2lkeCJ9LAo+ICsgICAgICAgIHsiaGFhcl9u b3NoaWZ0IiwgIkhhYXIgKHdpdGhvdXQgc2hpZnQpIiwgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0ID0gVkMyX1RSQU5TRk9STV9IQUFSfSwgICBJTlRfTUlOLCBJTlRfTUFYLCBWQzJFTkNf RkxBR1MsIC51bml0ID0gIndhdmVsZXRfaWR4In0sCj4gKyAgICB7InFtIiwgIkN1c3RvbSBxdWFu dGl6YXRpb24gbWF0cml4Iiwgb2Zmc2V0b2YoVkMyRW5jQ29udGV4dCwgcXVhbnRfbWF0cml4KSwg QVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IFZDMl9RTV9ERUZ9LCAwLCBWQzJfUU1fTkIsIFZDMkVO Q19GTEFHUywgLnVuaXQgPSAicXVhbnRfbWF0cml4In0sCj4gKyAgICAgICAgeyJkZWZhdWx0Iiwg ICAiRGVmYXVsdCBmcm9tIHRoZSBzcGVjaWZpY2F0aW9ucyIsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCB7Lmk2NCA9IFZDMl9RTV9ERUZ9LCBJTlRfTUlOLCBJTlRfTUFYLCBWQzJFTkNfRkxBR1MsIC51 bml0ID0gInF1YW50X21hdHJpeCJ9LAo+ICsgICAgICAgIHsiY29sb3IiLCAgICAgIlByZXZlbnRz IGxvdyBiaXRyYXRlIGRpc2NvbG9yYXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSBWQzJfUU1fQ09MfSwgSU5UX01JTiwgSU5UX01BWCwgVkMyRU5DX0ZMQUdTLCAudW5pdCA9ICJx dWFudF9tYXRyaXgifSwKPiArICAgICAgICB7ImZsYXQiLCAgICAgICJPcHRpbWl6ZSBmb3IgUFNO UiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZDMl9RTV9GTEFUfSwgSU5UX01JTiwg SU5UX01BWCwgVkMyRU5DX0ZMQUdTLCAudW5pdCA9ICJxdWFudF9tYXRyaXgifSwKPiArICAgIHtO VUxMfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgdmMyZW5jX2NsYXNzID0gewo+ ICsgICAgLmNsYXNzX25hbWUgPSAidmMyX3Z1bGthbl9lbmNvZGVyIiwKPiArICAgIC5jYXRlZ29y eSA9IEFWX0NMQVNTX0NBVEVHT1JZX0VOQ09ERVIsCj4gKyAgICAub3B0aW9uID0gdmMyZW5jX29w dGlvbnMsCj4gKyAgICAuaXRlbV9uYW1lID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAu dmVyc2lvbiA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IEZGQ29kZWNEZWZhdWx0IHZjMmVuY19kZWZhdWx0c1tdID0gewo+ICsgICAgeyAiYiIsICAgICAg ICAgICAgICAiNjAwMDAwMDAwIiAgIH0sCj4gKyAgICB7IE5VTEwgfSwKPiArfTsKPiArCj4gK3N0 YXRpYyBjb25zdCBBVkNvZGVjSFdDb25maWdJbnRlcm5hbCAqY29uc3QgdmMyX2h3X2NvbmZpZ3Nb XSA9IHsKPiArICAgIEhXX0NPTkZJR19FTkNPREVSX0ZSQU1FUyhWVUxLQU4sIFZVTEtBTiksCj4g KyAgICBIV19DT05GSUdfRU5DT0RFUl9ERVZJQ0UoTk9ORSwgIFZVTEtBTiksCj4gKyAgICBOVUxM LAo+ICt9Owo+ICsKPiArY29uc3QgRkZDb2RlYyBmZl92YzJfdnVsa2FuX2VuY29kZXIgPSB7Cj4g KyAgICAucC5uYW1lICAgICAgICAgPSAidmMyX3Z1bGthbiIsCj4gKyAgICBDT0RFQ19MT05HX05B TUUoIlNNUFRFIFZDLTIiKSwKPiArICAgIC5wLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywKPiArICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lEX0RJUkFDLAo+ICsgICAg LnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0hBUkRXQVJFLAo+ICsgICAgLmNhcHNfaW50 ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwKPiArICAgIC5wcml2X2RhdGFfc2l6 ZSA9IHNpemVvZihWQzJFbmNWdWxrYW5Db250ZXh0KSwKPiArICAgIC5pbml0ICAgICAgICAgICA9 IHZjMl9lbmNvZGVfaW5pdCwKPiArICAgIC5jbG9zZSAgICAgICAgICA9IHZjMl9lbmNvZGVfZW5k LAo+ICsgICAgRkZfQ09ERUNfRU5DT0RFX0NCKHZjMl9lbmNvZGVfZnJhbWUpLAo+ICsgICAgLnAu cHJpdl9jbGFzcyAgID0gJnZjMmVuY19jbGFzcywKPiArICAgIC5kZWZhdWx0cyAgICAgICA9IHZj MmVuY19kZWZhdWx0cywKPiArICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZNVF9WVUxLQU4pLAo+ ICsgICAgLmh3X2NvbmZpZ3MgICAgID0gdmMyX2h3X2NvbmZpZ3MsCj4gK307Cj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaGFhci5jb21wIGIvbGliYXZjb2RlYy92dWxr YW4vdmMyX2R3dF9oYWFyLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAuLjQ4MDZjY2E3MjkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92dWxr YW4vdmMyX2R3dF9oYWFyLmNvbXAKPiBAQCAtMCwwICsxLDgyIEBACj4gKy8qCj4gKyAqIFZDMiBj b2RlYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgcmFwaGFlbHRoZWdyZWF0IDxnZW9z dGVyM2RAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu Cj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNleHRlbnNpb24gR0xfRVhU X3NjYWxhcl9ibG9ja19sYXlvdXQgOiByZXF1aXJlCj4gKyNleHRlbnNpb24gR0xfRVhUX2J1ZmZl cl9yZWZlcmVuY2UgOiByZXF1aXJlCj4gKwo+ICsjZGVmaW5lIExPQ0FMX1ggMTAyNAo+ICsKPiAr bGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBDb21wdXRlSW5mbyB7Cj4gKyAg ICBpbnQgczsKPiArICAgIGludCBwbGFuZV9pZHg7Cj4gKyAgICBpbnQgd2F2ZWxldF9kZXB0aDsK PiArfTsKPiArCj4gK3NoYXJlZCBpbnQgbG9jYWxfY29lZltMT0NBTF9YXTsKPiArCj4gK3ZvaWQg bWFpbigpCj4gK3sKPiArICAgIGl2ZWMyIGNvb3JkID0gaXZlYzIoZ2xfR2xvYmFsSW52b2NhdGlv bklELnh5KTsKPiArICAgIGl2ZWMyIGR3dF9kaW0gPSBpbWFnZVNpemUoY29lZl9idWZbcGxhbmVf aWR4XSk7Cj4gKyAgICBpbnQgdmFsdWUgPSBpbWFnZUxvYWQoY29lZl9idWZbcGxhbmVfaWR4XSwg Y29vcmQpLng7Cj4gKwo+ICsgICAgLyogUGVyZm9ybSBIYWFyIHdhdmVsZXQgb24gdGhlIDMyeDMy IGxvY2FsIHdvcmtncm91cCB3aXRoIHNoYXJlZCBtZW1vcnkgKi8KPiArICAgIGZvciAoaW50IGkg PSAwOyBpIDwgd2F2ZWxldF9kZXB0aDsgaSsrKQo+ICsgICAgewo+ICsgICAgICAgIGl2ZWMyIG1h c2sgPSBpdmVjMigoMSA8PCBpKSAtIDEpOwo+ICsgICAgICAgIGlmIChhbnkobm90RXF1YWwoY29v cmQgJiBtYXNrLCBpdmVjMigwKSkpKQo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAg ICAgLyogT2Zmc2V0IGJldHdlZW4gdmFsaWQgaG9yIHBpeGVscyBmb3IgZWFjaCBsZXZlbCwgKzEs ICsyLCArNCBldGMgKi8KPiArICAgICAgICBpbnQgZGlzdCA9ICgxIDw8IGkpOwo+ICsKPiArICAg ICAgICBsb2NhbF9jb2VmW2dsX0xvY2FsSW52b2NhdGlvbkluZGV4XSA9IHZhbHVlOwo+ICsgICAg ICAgIGJhcnJpZXIoKTsKPiArCj4gKyAgICAgICAgLyogSG9yaXpvbnRhbCBoYWFyIHdhdmVsZXQg Ki8KPiArICAgICAgICB1aW50IG90aGVyX2lkID0gZ2xfTG9jYWxJbnZvY2F0aW9uSW5kZXggXiBk aXN0Owo+ICsgICAgICAgIGludCBvdGhlciA9IGxvY2FsX2NvZWZbb3RoZXJfaWRdOwo+ICsgICAg ICAgIGludCBhID0gZ2xfTG9jYWxJbnZvY2F0aW9uSW5kZXggPCBvdGhlcl9pZCA/IHZhbHVlIDog b3RoZXI7Cj4gKyAgICAgICAgaW50IGIgPSBnbF9Mb2NhbEludm9jYXRpb25JbmRleCA8IG90aGVy X2lkID8gb3RoZXIgOiB2YWx1ZTsKPiArICAgICAgICBpbnQgZHN0X2IgPSAoYiAtIGEpICogKDEg PDwgcyk7Cj4gKyAgICAgICAgaW50IGRzdF9hID0gYSAqICgxIDw8IHMpICsgKChkc3RfYiArIDEp ID4+IDEpOwo+ICsgICAgICAgIHZhbHVlID0gZ2xfTG9jYWxJbnZvY2F0aW9uSW5kZXggPCBvdGhl cl9pZCA/IGRzdF9hIDogZHN0X2I7Cj4gKwo+ICsgICAgICAgIC8qIE9mZnNldCBiZXR3ZWVuIHZh bGlkIHZlciBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwsICsxLCArMiwgKzQgZXRjICovCj4gKyAgICAg ICAgZGlzdCA8PD0gNTsKPiArCj4gKyAgICAgICAgbG9jYWxfY29lZltnbF9Mb2NhbEludm9jYXRp b25JbmRleF0gPSB2YWx1ZTsKPiArICAgICAgICBiYXJyaWVyKCk7Cj4gKwo+ICsgICAgICAgIC8q IFZlcnRpY2FsIGhhYXIgd2F2ZWxldCAqLwo+ICsgICAgICAgIG90aGVyX2lkID0gZ2xfTG9jYWxJ bnZvY2F0aW9uSW5kZXggXiBkaXN0Owo+ICsgICAgICAgIG90aGVyID0gbG9jYWxfY29lZltvdGhl cl9pZF07Cj4gKyAgICAgICAgYSA9IGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IDwgb3RoZXJfaWQg PyB2YWx1ZSA6IG90aGVyOwo+ICsgICAgICAgIGIgPSBnbF9Mb2NhbEludm9jYXRpb25JbmRleCA8 IG90aGVyX2lkID8gb3RoZXIgOiB2YWx1ZTsKPiArICAgICAgICBkc3RfYiA9IGIgLSBhOwo+ICsg ICAgICAgIGRzdF9hID0gYSArICgoZHN0X2IgKyAxKSA+PiAxKTsKPiArICAgICAgICB2YWx1ZSA9 IGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IDwgb3RoZXJfaWQgPyBkc3RfYSA6IGRzdF9iOwo+ICsg ICAgfQo+ICsKPiArICAgIC8qIFN0b3JlIHZhbHVlICovCj4gKyAgICBpbWFnZVN0b3JlKGNvZWZf YnVmW3BsYW5lX2lkeF0sIGNvb3JkLCBpdmVjNCh2YWx1ZSkpOwo+ICt9Cj4gZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaGFhcl9zdWJncm91cC5jb21wIGIvbGliYXZjb2Rl Yy92dWxrYW4vdmMyX2R3dF9oYWFyX3N1Ymdyb3VwLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAuLjgxYjA5NjQyNzEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF9oYWFyX3N1Ymdyb3VwLmNvbXAKPiBAQCAtMCwwICsx LDc1IEBACj4gKy8qCj4gKyAqIFZDMiBjb2RlYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MjUgcmFwaGFlbHRoZWdyZWF0IDxnZW9zdGVyM2RAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiAr ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8K PiArCj4gKyNleHRlbnNpb24gR0xfRVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiByZXF1aXJlCj4g KyNleHRlbnNpb24gR0xfS0hSX3NoYWRlcl9zdWJncm91cF9iYXNpYyA6IHJlcXVpcmUKPiArI2V4 dGVuc2lvbiBHTF9LSFJfc2hhZGVyX3N1Ymdyb3VwX3NodWZmbGUgOiByZXF1aXJlCj4gKwo+ICsj ZGVmaW5lIFRJTEVfRElNIDgKPiArCj4gK2xheW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIpIHVu aWZvcm0gQ29tcHV0ZUluZm8gewo+ICsgICAgaW50IHM7Cj4gKyAgICBpbnQgcGxhbmVfaWR4Owo+ ICsgICAgaW50IHdhdmVsZXRfZGVwdGg7Cj4gK307Cj4gKwo+ICt2b2lkIG1haW4oKQo+ICt7Cj4g KyAgICBpdmVjMiB0aWxlX2Nvb3JkID0gaXZlYzIoZ2xfV29ya0dyb3VwSUQueHkpOwo+ICsgICAg aXZlYzIgbG9jYWxfY29vcmQgPSBpdmVjMihnbF9Mb2NhbEludm9jYXRpb25JbmRleCAmIDcsIGds X0xvY2FsSW52b2NhdGlvbkluZGV4ID4+IDMpOwo+ICsgICAgaXZlYzIgY29vcmQgPSB0aWxlX2Nv b3JkICogaXZlYzIoVElMRV9ESU0pICsgbG9jYWxfY29vcmQ7Cj4gKwo+ICsgICAgaW50IHZhbHVl ID0gaW1hZ2VMb2FkKGNvZWZfYnVmW3BsYW5lX2lkeF0sIGNvb3JkKS54Owo+ICsgICAgZm9yIChp bnQgaSA9IDA7IGkgPCB3YXZlbGV0X2RlcHRoOyBpKyspCj4gKyAgICB7Cj4gKyAgICAgICAgaXZl YzIgbWFzayA9IGl2ZWMyKCgxIDw8IGkpIC0gMSk7Cj4gKyAgICAgICAgaWYgKGFueShub3RFcXVh bChsb2NhbF9jb29yZCAmIG1hc2ssIGl2ZWMyKDApKSkpCj4gKyAgICAgICAgICAgIGJyZWFrOwo+ ICsKPiArICAgICAgICAvKiBPZmZzZXQgYmV0d2VlbiB2YWxpZCBob3IgcGl4ZWxzIGZvciBlYWNo IGxldmVsLCArMSwgKzIsICs0IGV0YyAqLwo+ICsgICAgICAgIGludCBkaXN0ID0gKDEgPDwgaSk7 Cj4gKwo+ICsgICAgICAgIC8qIEhvcml6b250YWwgaGFhciB3YXZlbGV0ICovCj4gKyAgICAgICAg dWludCBvdGhlcl9zdWJfaWQgPSBnbF9TdWJncm91cEludm9jYXRpb25JRCBeIGRpc3Q7Cj4gKyAg ICAgICAgaW50IG90aGVyID0gc3ViZ3JvdXBTaHVmZmxlKHZhbHVlLCBvdGhlcl9zdWJfaWQpOwo+ ICsgICAgICAgIGludCBhID0gZ2xfU3ViZ3JvdXBJbnZvY2F0aW9uSUQgPCBvdGhlcl9zdWJfaWQg PyB2YWx1ZSA6IG90aGVyOwo+ICsgICAgICAgIGludCBiID0gZ2xfU3ViZ3JvdXBJbnZvY2F0aW9u SUQgPCBvdGhlcl9zdWJfaWQgPyBvdGhlciA6IHZhbHVlOwo+ICsgICAgICAgIGludCBkc3RfYiA9 IChiIC0gYSkgKiAoMSA8PCBzKTsKPiArICAgICAgICBpbnQgZHN0X2EgPSBhICogKDEgPDwgcykg KyAoKGRzdF9iICsgMSkgPj4gMSk7Cj4gKyAgICAgICAgdmFsdWUgPSBnbF9TdWJncm91cEludm9j YXRpb25JRCA8IG90aGVyX3N1Yl9pZCA/IGRzdF9hIDogZHN0X2I7Cj4gKwo+ICsgICAgICAgIC8q IE9mZnNldCBiZXR3ZWVuIHZhbGlkIHZlciBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwsICsxLCArMiwg KzQgZXRjICovCj4gKyAgICAgICAgZGlzdCA8PD0gMzsKPiArCj4gKyAgICAgICAgLyogVmVydGlj YWwgaGFhciB3YXZlbGV0ICovCj4gKyAgICAgICAgb3RoZXJfc3ViX2lkID0gZ2xfU3ViZ3JvdXBJ bnZvY2F0aW9uSUQgXiBkaXN0Owo+ICsgICAgICAgIG90aGVyID0gc3ViZ3JvdXBTaHVmZmxlKHZh bHVlLCBvdGhlcl9zdWJfaWQpOwo+ICsgICAgICAgIGEgPSBnbF9TdWJncm91cEludm9jYXRpb25J RCA8IG90aGVyX3N1Yl9pZCA/IHZhbHVlIDogb3RoZXI7Cj4gKyAgICAgICAgYiA9IGdsX1N1Ymdy b3VwSW52b2NhdGlvbklEIDwgb3RoZXJfc3ViX2lkID8gb3RoZXIgOiB2YWx1ZTsKPiArICAgICAg ICBkc3RfYiA9IGIgLSBhOwo+ICsgICAgICAgIGRzdF9hID0gYSArICgoZHN0X2IgKyAxKSA+PiAx KTsKPiArICAgICAgICB2YWx1ZSA9IGdsX1N1Ymdyb3VwSW52b2NhdGlvbklEIDwgb3RoZXJfc3Vi X2lkID8gZHN0X2EgOiBkc3RfYjsKPiArICAgIH0KPiArCj4gKyAgICAvKiBTdG9yZSB2YWx1ZSAq Lwo+ICsgICAgaW1hZ2VTdG9yZShjb2VmX2J1ZltwbGFuZV9pZHhdLCBjb29yZCwgaXZlYzQodmFs dWUpKTsKPiArfQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92YzJfZHd0X2hvcl9s ZWdhbGwuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaG9yX2xlZ2FsbC5jb21wCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5iYWRhMmVlMWZkCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9kd3RfaG9yX2xlZ2FsbC5j b21wCj4gQEAgLTAsMCArMSw4MiBAQAo+ICsvKgo+ICsgKiBWQzIgY29kZWMKPiArICoKPiArICog Q29weXJpZ2h0IChjKSAyMDI1IHJhcGhhZWx0aGVncmVhdCA8Z2Vvc3RlcjNkQGdtYWlsLmNvbT4K PiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKPiArICovCj4gKwo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9zY2FsYXJfYmxvY2tfbGF5 b3V0IDogcmVxdWlyZQo+ICsjZXh0ZW5zaW9uIEdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIDogcmVx dWlyZQo+ICsKPiArbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBDb21wdXRl SW5mbyB7Cj4gKyAgICBpbnQgczsKPiArICAgIGludCBkaWZmX29mZnNldDsKPiArICAgIGludCBs ZXZlbDsKPiArfTsKPiArCj4gK2ludCBpbWFnZV9sb2FkKGludCBjb29yZF94KQo+ICt7Cj4gKyAg ICBpbnQgY29vcmRfeSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCk7Cj4gKyAgICByZXR1 cm4gaW1hZ2VMb2FkKGNvZWZfYnVmW2dsX0dsb2JhbEludm9jYXRpb25JRC56XSwgaXZlYzIoY29v cmRfeCwgY29vcmRfeSkpLng7Cj4gK30KPiArCj4gK3ZvaWQgaW1hZ2Vfc3RvcmUoaW50IGNvb3Jk X3gsIGludCB2YWx1ZSkKPiArewo+ICsgICAgaW50IGNvb3JkX3kgPSBpbnQoZ2xfR2xvYmFsSW52 b2NhdGlvbklELngpOwo+ICsgICAgaW1hZ2VTdG9yZShjb2VmX2J1ZltnbF9HbG9iYWxJbnZvY2F0 aW9uSUQuel0sIGl2ZWMyKGNvb3JkX3gsIGNvb3JkX3kpLCBpdmVjNCh2YWx1ZSkpOwo+ICt9Cj4g Kwo+ICt2b2lkIG1haW4oKQo+ICt7Cj4gKyAgICBpbnQgY29vcmRfeSA9IGludChnbF9HbG9iYWxJ bnZvY2F0aW9uSUQueCk7Cj4gKyAgICB1aW50IHBsYW5lX2lkeCA9IGdsX0dsb2JhbEludm9jYXRp b25JRC56Owo+ICsgICAgaXZlYzIgd29ya19hcmVhID0gaW1hZ2VTaXplKGNvZWZfYnVmW3BsYW5l X2lkeF0pOwo+ICsgICAgaW50IGRpc3QgPSAxIDw8IGxldmVsOwo+ICsgICAgaWYgKGNvb3JkX3kg Pj0gd29ya19hcmVhLnkgfHwgKGNvb3JkX3kgJiAoZGlzdCAtIDEpKSAhPSAwKQo+ICsgICAgICAg IHJldHVybjsKPiArCj4gKyAgICAvLyBTaGlmdCBpbiBvbmUgYml0IHRoYXQgaXMgdXNlZCBmb3Ig YWRkaXRpb25hbCBwcmVjaXNpb24KPiArICAgIGZvciAoaW50IHggPSAwOyB4IDwgd29ya19hcmVh Lng7IHggKz0gZGlzdCkKPiArICAgICAgICBpbWFnZV9zdG9yZSh4LCBpbWFnZV9sb2FkKHgpIDw8 IDEpOwo+ICsKPiArICAgIC8vIExpZnRpbmcgc3RhZ2UgMgo+ICsgICAgZm9yIChpbnQgeCA9IDA7 IHggPCB3b3JrX2FyZWEueCAtIDIgKiBkaXN0OyB4ICs9IDIgKiBkaXN0KSB7Cj4gKyAgICAgICAg aW50IGxocyA9IGltYWdlX2xvYWQoeCk7Cj4gKyAgICAgICAgaW50IHJocyA9IGltYWdlX2xvYWQo eCArIDIgKiBkaXN0KTsKPiArICAgICAgICBpbnQgdmFsdWUgPSBpbWFnZV9sb2FkKHggKyBkaXN0 KTsKPiArICAgICAgICB2YWx1ZSAtPSAobGhzICsgcmhzICsgMSkgPj4gMTsKPiArICAgICAgICBp bWFnZV9zdG9yZSh4ICsgZGlzdCwgdmFsdWUpOwo+ICsgICAgfQo+ICsgICAgaW50IGxocyA9IGlt YWdlX2xvYWQod29ya19hcmVhLnggLSAyICogZGlzdCk7Cj4gKyAgICBpbnQgdmFsdWUgPSBpbWFn ZV9sb2FkKHdvcmtfYXJlYS54IC0gZGlzdCk7Cj4gKyAgICB2YWx1ZSAtPSAoMiAqIGxocyArIDEp ID4+IDE7Cj4gKyAgICBpbWFnZV9zdG9yZSh3b3JrX2FyZWEueCAtIGRpc3QsIHZhbHVlKTsKPiAr Cj4gKyAgICAvLyBMaWZ0aW5nIHN0YWdlIDEKPiArICAgIGxocyA9IGltYWdlX2xvYWQoZGlzdCk7 Cj4gKyAgICB2YWx1ZSA9IGltYWdlX2xvYWQoMCk7Cj4gKyAgICB2YWx1ZSArPSAoMiAqIGxocyAr IDIpID4+IDI7Cj4gKyAgICBpbWFnZV9zdG9yZSgwLCB2YWx1ZSk7Cj4gKyAgICBmb3IgKGludCB4 ID0gMiAqIGRpc3Q7IHggPD0gd29ya19hcmVhLnggLSAyICogZGlzdDsgeCArPSAyICogZGlzdCkg ewo+ICsgICAgICAgIGludCBsaHMgPSBpbWFnZV9sb2FkKHggLSBkaXN0KTsKPiArICAgICAgICBp bnQgcmhzID0gaW1hZ2VfbG9hZCh4ICsgZGlzdCk7Cj4gKyAgICAgICAgaW50IHZhbHVlID0gaW1h Z2VfbG9hZCh4KTsKPiArICAgICAgICB2YWx1ZSArPSAobGhzICsgcmhzICsgMikgPj4gMjsKPiAr ICAgICAgICBpbWFnZV9zdG9yZSh4LCB2YWx1ZSk7Cj4gKyAgICB9Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3dF91cGxvYWQuY29tcCBiL2xpYmF2Y29kZWMvdnVs a2FuL3ZjMl9kd3RfdXBsb2FkLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAuLmM3NThmZDg2N2YKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92 dWxrYW4vdmMyX2R3dF91cGxvYWQuY29tcAo+IEBAIC0wLDAgKzEsOTYgQEAKPiArLyoKPiArICog VkMyIGNvZGVjCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSByYXBoYWVsdGhlZ3JlYXQg PGdlb3N0ZXIzZEBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZG bXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoK PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArI2V4dGVuc2lvbiBH TF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91dCA6IHJlcXVpcmUKPiArI2V4dGVuc2lvbiBHTF9FWFRf c2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0aWNfdHlwZXMgOiByZXF1aXJlCj4gKwo+ICsjZGVmaW5l IEFWX1BJWF9GTVRfWFYzMCAyMTQKPiArI2RlZmluZSBBVl9QSVhfRk1UX1hWMzYgMjE2Cj4gKyNk ZWZpbmUgQVZfUElYX0ZNVF9YVjQ4IDI0Mgo+ICsjZGVmaW5lIEFWX1BJWF9GTVRfUDIxMiAyMjIK PiArI2RlZmluZSBBVl9QSVhfRk1UX1AwMTIgMjA5Cj4gKyNkZWZpbmUgQVZfUElYX0ZNVF9QMjEw IDE5OAo+ICsjZGVmaW5lIEFWX1BJWF9GTVRfUDAxNiAxNjkKPiArI2RlZmluZSBBVl9QSVhfRk1U X1AwMTAgMTU4Cj4gKyNkZWZpbmUgQVZfUElYX0ZNVF9OVjE2IDEwMQo+ICsjZGVmaW5lIEFWX1BJ WF9GTVRfTlYxMiAyMwo+ICsKPiArI2RlZmluZSBZIDAKPiArI2RlZmluZSBVIDEKPiArI2RlZmlu ZSBWIDIKPiArCj4gK2xheW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIpIHVuaWZvcm0gQ29tcHV0 ZUluZm8gewo+ICsgICAgaW50IHM7Cj4gKyAgICBpbnQgZGlmZl9vZmZzZXQ7Cj4gKyAgICBpbnQg bGV2ZWw7Cj4gK307Cj4gKwo+ICt1dmVjNCBsb2FkX3BsYW5lKHVpbnQgcGxhbmVfaWR4KQo+ICt7 Cj4gKyAgICBpdmVjMiBjb29yZCA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7Cj4g KyAgICByZXR1cm4gaW1hZ2VMb2FkKHNyY19wbGFuZXNbcGxhbmVfaWR4XSwgY29vcmQpOwo+ICt9 Cj4gKwo+ICt2b2lkIHN0b3JlX3BsYW5lKHVpbnQgcGxhbmVfaWR4LCB1aW50IHZhbHVlKQo+ICt7 Cj4gKyAgICBpbnQgcmVzdWx0ID0gaW50KHZhbHVlIC0gZGlmZl9vZmZzZXQpOwo+ICsgICAgaXZl YzIgY29vcmQgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpOwo+ICsgICAgaW1hZ2VT dG9yZShjb2VmX2J1ZltwbGFuZV9pZHhdLCBjb29yZCwgaXZlYzQocmVzdWx0KSk7Cj4gK30KPiAr Cj4gK3ZvaWQgbWFpbigpCj4gK3sKPiArICAgIHV2ZWM0IHAwID0gbG9hZF9wbGFuZSgwKTsKPiAr I2lmIFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1hWMzAKPiArICAgIHN0b3JlX3BsYW5lKFksIChw MC54ID4+IDEwKSAmIDB4M0ZGKTsKPiArICAgIHN0b3JlX3BsYW5lKFUsIHAwLnggJiAweDNGRik7 Cj4gKyAgICBzdG9yZV9wbGFuZShWLCAocDAueCA+PiAyMCkgJiAweDNGRik7Cj4gKyNlbGlmIFBM QU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1hWMzYKPiArICAgIHN0b3JlX3BsYW5lKFksIHAwLnkgPj4g NCk7Cj4gKyAgICBzdG9yZV9wbGFuZShVLCBwMC54ID4+IDQpOwo+ICsgICAgc3RvcmVfcGxhbmUo ViwgcDAueiA+PiA0KTsKPiArI2VsaWYgUExBTkVfRk1UID09IEFWX1BJWF9GTVRfTlYxMgo+ICsg ICAgdXZlYzQgcDEgPSBsb2FkX3BsYW5lKDEpOwo+ICsgICAgc3RvcmVfcGxhbmUoWSwgcDAueCB8 IHAwLnkgPDwgOCk7Cj4gKyAgICBzdG9yZV9wbGFuZShVLCBwMS54KTsKPiArICAgIHN0b3JlX3Bs YW5lKFYsIHAxLnkpOwo+ICsjZWxpZiBQTEFORV9GTVQgPT0gQVZfUElYX0ZNVF9OVjE2Cj4gKyAg ICB1dmVjNCBwMSA9IGxvYWRfcGxhbmUoMSk7Cj4gKyAgICBzdG9yZV9wbGFuZShZLCBwMC54KTsK PiArICAgIHN0b3JlX3BsYW5lKFUsIHAxLngpOwo+ICsgICAgc3RvcmVfcGxhbmUoViwgcDEueSk7 Cj4gKyNlbGlmIFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1AwMTAgfHwgUExBTkVfRk1UID09IEFW X1BJWF9GTVRfUDIxMAo+ICsgICAgdXZlYzQgcDEgPSBsb2FkX3BsYW5lKDEpOwo+ICsgICAgc3Rv cmVfcGxhbmUoWSwgcDAueCA+PiA2KTsKPiArICAgIHN0b3JlX3BsYW5lKFUsIHAxLnggPj4gNik7 Cj4gKyAgICBzdG9yZV9wbGFuZShWLCBwMS55ID4+IDYpOwo+ICsjZWxpZiBQTEFORV9GTVQgPT0g QVZfUElYX0ZNVF9QMDEyIHx8IFBMQU5FX0ZNVCA9PSBBVl9QSVhfRk1UX1AyMTIKPiArICAgIHV2 ZWM0IHAxID0gbG9hZF9wbGFuZSgxKTsKPiArICAgIHN0b3JlX3BsYW5lKFksIHAwLnggPj4gNCk7 Cj4gKyAgICBzdG9yZV9wbGFuZShVLCBwMS54ID4+IDQpOwo+ICsgICAgc3RvcmVfcGxhbmUoViwg cDEueSA+PiA0KTsKPiArI2Vsc2UKPiArICAgIHN0b3JlX3BsYW5lKFksIHAwLngpOwo+ICsgICAg c3RvcmVfcGxhbmUoVSwgbG9hZF9wbGFuZSgxKS54KTsKPiArICAgIHN0b3JlX3BsYW5lKFYsIGxv YWRfcGxhbmUoMikueCk7Cj4gKyNlbmRpZgo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv dnVsa2FuL3ZjMl9kd3RfdmVyX2xlZ2FsbC5jb21wIGIvbGliYXZjb2RlYy92dWxrYW4vdmMyX2R3 dF92ZXJfbGVnYWxsLmNvbXAKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAuLmNhMzkxY2M4ZDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZjb2RlYy92dWxrYW4v dmMyX2R3dF92ZXJfbGVnYWxsLmNvbXAKPiBAQCAtMCwwICsxLDc4IEBACj4gKy8qCj4gKyAqIFZD MiBjb2RlYwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgcmFwaGFlbHRoZWdyZWF0IDxn ZW9zdGVyM2RAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4g KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNleHRlbnNpb24gR0xf RVhUX3NjYWxhcl9ibG9ja19sYXlvdXQgOiByZXF1aXJlCj4gKyNleHRlbnNpb24gR0xfRVhUX2J1 ZmZlcl9yZWZlcmVuY2UgOiByZXF1aXJlCj4gKwo+ICtsYXlvdXQocHVzaF9jb25zdGFudCwgc2Nh bGFyKSB1bmlmb3JtIENvbXB1dGVJbmZvIHsKPiArICAgIGludCBzOwo+ICsgICAgaW50IGRpZmZf b2Zmc2V0Owo+ICsgICAgaW50IGxldmVsOwo+ICt9Owo+ICsKPiAraW50IGltYWdlX2xvYWQoaW50 IGNvb3JkX3kpCj4gK3sKPiArICAgIGludCBjb29yZF94ID0gaW50KGdsX0dsb2JhbEludm9jYXRp b25JRC54KTsKPiArICAgIHJldHVybiBpbWFnZUxvYWQoY29lZl9idWZbZ2xfR2xvYmFsSW52b2Nh dGlvbklELnpdLCBpdmVjMihjb29yZF94LCBjb29yZF95KSkueDsKPiArfQo+ICsKPiArdm9pZCBp bWFnZV9zdG9yZShpbnQgY29vcmRfeSwgaW50IHZhbHVlKQo+ICt7Cj4gKyAgICBpbnQgY29vcmRf eCA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCk7Cj4gKyAgICBpbWFnZVN0b3JlKGNvZWZf YnVmW2dsX0dsb2JhbEludm9jYXRpb25JRC56XSwgaXZlYzIoY29vcmRfeCwgY29vcmRfeSksIGl2 ZWM0KHZhbHVlKSk7Cj4gK30KPiArCj4gK3ZvaWQgbWFpbigpCj4gK3sKPiArICAgIGludCBjb29y ZF94ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KTsKPiArICAgIHVpbnQgcGxhbmVfaWR4 ID0gZ2xfR2xvYmFsSW52b2NhdGlvbklELno7Cj4gKyAgICBpdmVjMiB3b3JrX2FyZWEgPSBpbWFn ZVNpemUoY29lZl9idWZbcGxhbmVfaWR4XSk7Cj4gKyAgICBpbnQgZGlzdCA9IDEgPDwgbGV2ZWw7 Cj4gKyAgICBpZiAoY29vcmRfeCA+PSB3b3JrX2FyZWEueCB8fCAoY29vcmRfeCAmIChkaXN0IC0g MSkpICE9IDApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIC8vIExpZnRpbmcgc3RhZ2Ug Mgo+ICsgICAgZm9yIChpbnQgeSA9IGRpc3Q7IHkgPCB3b3JrX2FyZWEueSAtIDIgKiBkaXN0OyB5 ICs9IDIgKiBkaXN0KSB7Cj4gKyAgICAgICAgaW50IGxocyA9IGltYWdlX2xvYWQoeSAtIGRpc3Qp Owo+ICsgICAgICAgIGludCByaHMgPSBpbWFnZV9sb2FkKHkgKyBkaXN0KTsKPiArICAgICAgICBp bnQgdmFsdWUgPSBpbWFnZV9sb2FkKHkpOwo+ICsgICAgICAgIHZhbHVlIC09IChsaHMgKyByaHMg KyAxKSA+PiAxOwo+ICsgICAgICAgIGltYWdlX3N0b3JlKHksIHZhbHVlKTsKPiArICAgIH0KPiAr ICAgIGludCBsaHMgPSBpbWFnZV9sb2FkKHdvcmtfYXJlYS55IC0gMiAqIGRpc3QpOwo+ICsgICAg aW50IHZhbHVlID0gaW1hZ2VfbG9hZCh3b3JrX2FyZWEueSAtIGRpc3QpOwo+ICsgICAgdmFsdWUg LT0gKDIgKiBsaHMgKyAxKSA+PiAxOwo+ICsgICAgaW1hZ2Vfc3RvcmUod29ya19hcmVhLnkgLSBk aXN0LCB2YWx1ZSk7Cj4gKwo+ICsgICAgLy8gTGlmdGluZyBzdGFnZSAxCj4gKyAgICBsaHMgPSBp bWFnZV9sb2FkKGRpc3QpOwo+ICsgICAgdmFsdWUgPSBpbWFnZV9sb2FkKDApOwo+ICsgICAgdmFs dWUgKz0gKDIgKiBsaHMgKyAyKSA+PiAyOwo+ICsgICAgaW1hZ2Vfc3RvcmUoMCwgdmFsdWUpOwo+ ICsgICAgZm9yIChpbnQgeSA9IDIgKiBkaXN0OyB5IDw9IHdvcmtfYXJlYS55IC0gMiAqIGRpc3Q7 IHkgKz0gMiAqIGRpc3QpIHsKPiArICAgICAgICBpbnQgbGhzID0gaW1hZ2VfbG9hZCh5ICsgZGlz dCk7Cj4gKyAgICAgICAgaW50IHJocyA9IGltYWdlX2xvYWQoeSAtIGRpc3QpOwo+ICsgICAgICAg IGludCB2YWx1ZSA9IGltYWdlX2xvYWQoeSk7Cj4gKyAgICAgICAgdmFsdWUgKz0gKGxocyArIHJo cyArIDIpID4+IDI7Cj4gKyAgICAgICAgaW1hZ2Vfc3RvcmUoeSwgdmFsdWUpOwo+ICsgICAgfQo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9lbmNvZGUuY29tcCBiL2xp YmF2Y29kZWMvdnVsa2FuL3ZjMl9lbmNvZGUuY29tcAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMC4uYmQwYmJiYzFjYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJh dmNvZGVjL3Z1bGthbi92YzJfZW5jb2RlLmNvbXAKPiBAQCAtMCwwICsxLDE3MyBAQAo+ICsvKgo+ ICsgKiBWQzIgY29kZWMKPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDI1IHJhcGhhZWx0aGVn cmVhdCA8Z2Vvc3RlcjNkQGdtYWlsLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ICsjZXh0ZW5z aW9uIEdMX0VYVF9zaGFkZXJfZXhwbGljaXRfYXJpdGhtZXRpY190eXBlcyA6IHJlcXVpcmUKPiAr I2V4dGVuc2lvbiBHTF9FWFRfc2NhbGFyX2Jsb2NrX2xheW91dCA6IHJlcXVpcmUKPiArI2V4dGVu c2lvbiBHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZSA6IHJlcXVpcmUKPiArI2V4dGVuc2lvbiBHTF9F WFRfZGVidWdfcHJpbnRmIDogcmVxdWlyZQo+ICsKPiArI2RlZmluZSBNQVhfRFdUX0xFVkVMUyAo NSkKPiArCj4gK2xheW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIpIHVuaWZvcm0gQ29tcHV0ZUlu Zm8gewo+ICsgICAgdThidWYgYnl0ZXN0cmVhbTsKPiArICAgIGl2ZWMyIG51bV9zbGljZXM7Cj4g KyAgICBpbnQgd2F2ZWxldF9kZXB0aDsKPiArICAgIGludCBzaXplX3NjYWxlcjsKPiArICAgIGlu dCBwcmVmaXhfYnl0ZXM7Cj4gK307Cj4gKwo+ICt2b2lkIHB1dF92YzJfdWVfdWludChpbm91dCBQ dXRCaXRDb250ZXh0IHBiLCB1aW50IHZhbCkKPiArewo+ICsgICAgdWludDY0X3QgcGJpdHMgPSAx Owo+ICsgICAgaW50IGJpdHMgPSAxOwo+ICsKPiArICAgICsrdmFsOwo+ICsKPiArICAgIHdoaWxl ICgodmFsID4+IDgpICE9IDApCj4gKyAgICB7Cj4gKyAgICAgICAgcGJpdHMgfD0gdWludDY0X3Qo aW50ZXJsZWF2ZWRfdWVfZ29sb21iX3RhYlt2YWwgJiAweGZmXSkgPDwgYml0czsKPiArICAgICAg ICB2YWwgPj49IDg7Cj4gKyAgICAgICAgYml0cyArPSAxNjsKPiArICAgIH0KPiArCj4gKyAgICBw Yml0cyB8PSB1aW50NjRfdCh0b3BfaW50ZXJsZWF2ZWRfdWVfZ29sb21iX3RhYlt2YWxdKSA8PCBi aXRzOwo+ICsgICAgYml0cyAgKz0gZ29sb21iX2xlbl90YWJbdmFsXTsKPiArICAgIHB1dF9iaXRz NjMocGIsIGJpdHMsIHBiaXRzKTsKPiArfQo+ICsKPiArdm9pZCBza2lwX3B1dF9ieXRlcyhpbm91 dCBQdXRCaXRDb250ZXh0IHBiLCBpbnQgbikKPiArewo+ICsgICAgaW50IHNraXBfZHdvcmRzID0g biA+PiAyOwo+ICsgICAgd2hpbGUgKHNraXBfZHdvcmRzID4gMCkKPiArICAgIHsKPiArICAgICAg ICB1OHZlYzRidWYocGIuYnVmKS52ID0gdTh2ZWM0KDB4RkYpOwo+ICsgICAgICAgIHBiLmJ1ZiAr PSA0Owo+ICsgICAgICAgIHNraXBfZHdvcmRzLS07Cj4gKyAgICB9Cj4gKyAgICBpbnQgc2tpcF9i aXRzID0gKG4gJiAzKSA8PCAzOwo+ICsgICAgcGIuYml0X2J1ZiA9ICgxIDw8IHNraXBfYml0cykg LSAxOwo+ICsgICAgcGIuYml0X2xlZnQgPSB1aW50OF90KEJVRl9CSVRTIC0gc2tpcF9iaXRzKTsK PiArfQo+ICsKPiAraW50IHF1YW50c1tNQVhfRFdUX0xFVkVMU11bNF07Cj4gKwo+ICtpbnQgc3Vi YmFuZF9jb29yZChpbnQgaW5kZXgsIGludCBoLCBpbnQgbHZsKQo+ICt7Cj4gKyAgICBpbnQgY29v cmQgPSBpbmRleDsKPiArICAgIGNvb3JkIDw8PSAxOwo+ICsgICAgY29vcmQgfD0gaDsKPiArICAg IGNvb3JkIDw8PSAod2F2ZWxldF9kZXB0aC1sdmwtMSk7Cj4gKyAgICByZXR1cm4gY29vcmQ7Cj4g K30KPiArCj4gK3ZvaWQgbWFpbigpCj4gK3sKPiArICAgIGludCBzbGljZV9pbmRleCA9IGludChn bF9HbG9iYWxJbnZvY2F0aW9uSUQueCk7Cj4gKyAgICBpbnQgbWF4X2luZGV4ID0gbnVtX3NsaWNl cy54ICogbnVtX3NsaWNlcy55Owo+ICsgICAgaWYgKHNsaWNlX2luZGV4ID49IG1heF9pbmRleCkK PiArICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAgLyogU3RlcCAyLiBRdWFudGl6ZSBhbmQgZW5j b2RlICovCj4gKyAgICBpbnQgcGJfc3RhcnQgPSBzbGljZV9hcmdzW3NsaWNlX2luZGV4XS5wYl9z dGFydDsKPiArICAgIGludCB3b3JrZ3JvdXBfeCA9IGludChnbF9Xb3JrR3JvdXBTaXplLngpOwo+ ICsgICAgZm9yIChpbnQgaSA9IDAsIGluZGV4ID0gd29ya2dyb3VwX3ggLSAxOyBpIDwgZ2xfV29y a0dyb3VwSUQueDsgaSsrKSB7Cj4gKyAgICAgICAgcGJfc3RhcnQgKz0gc2xpY2VfYXJnc1tpbmRl eF0ucGJfc3RhcnQgKyBzbGljZV9hcmdzW2luZGV4XS5ieXRlczsKPiArICAgICAgICBpbmRleCAr PSB3b3JrZ3JvdXBfeDsKPiArICAgIH0KPiArICAgIGl2ZWMyIHNsaWNlX2Nvb3JkID0gaXZlYzIo c2xpY2VfaW5kZXggJSBudW1fc2xpY2VzLngsIHNsaWNlX2luZGV4IC8gbnVtX3NsaWNlcy54KTsK PiArICAgIGludCBzbGljZV9ieXRlc19tYXggPSBzbGljZV9hcmdzW3NsaWNlX2luZGV4XS5ieXRl czsKPiArICAgIGludCBxdWFudF9pbmRleCA9IHNsaWNlX2FyZ3Nbc2xpY2VfaW5kZXhdLnF1YW50 X2lkeDsKPiArCj4gKyAgICBQdXRCaXRDb250ZXh0IHBiOwo+ICsgICAgaW5pdF9wdXRfYml0cyhw YiwgT0ZGQlVGKHU4YnVmLCBieXRlc3RyZWFtLCBwYl9zdGFydCksIHNsaWNlX2J5dGVzX21heCk7 Cj4gKwo+ICsgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IHdhdmVsZXRfZGVwdGg7IGxl dmVsKyspCj4gKyAgICAgICAgZm9yIChpbnQgb3JpZW50YXRpb24gPSBpbnQobGV2ZWwgPiAwKTsg b3JpZW50YXRpb24gPCA0OyBvcmllbnRhdGlvbisrKQo+ICsgICAgICAgICAgICBxdWFudHNbbGV2 ZWxdW29yaWVudGF0aW9uXSA9IG1heChxdWFudF9pbmRleCAtIGx1dF9xdWFudFtsZXZlbF1bb3Jp ZW50YXRpb25dLCAwKTsKPiArCj4gKyAgICAvKiBXcml0ZSBxdWFudCBpbmRleCBmb3IgdGhpcyBz bGljZSAqLwo+ICsgICAgcHV0X2JpdHMocGIsIDgsIHF1YW50X2luZGV4KTsKPiArCj4gKyAgICAv KiBMdW1hICsgMiBDaHJvbWEgcGxhbmVzICovCj4gKyAgICBmb3IgKGludCBwID0gMDsgcCA8IDM7 IHArKykKPiArICAgIHsKPiArICAgICAgICBpbnQgcGFkX3MsIHBhZF9jOwo+ICsgICAgICAgIGlu dCBieXRlc19zdGFydCA9IGludDMyX3QocHV0X2J5dGVzX2NvdW50KHBiKSk7Cj4gKwo+ICsgICAg ICAgIC8qIFNhdmUgY3VycmVudCBsb2NhdGlvbiBhbmQgd3JpdGUgYSB6ZXJvIHZhbHVlICovCj4g KyAgICAgICAgdWludDY0X3Qgd3JpdGVfcHRyX3N0YXJ0ID0gcGIuYnVmOwo+ICsgICAgICAgIGlu dCBiaXRfbGVmdF9zdGFydCA9IHBiLmJpdF9sZWZ0Owo+ICsgICAgICAgIHB1dF9iaXRzKHBiLCA4 LCAwKTsKPiArCj4gKyAgICAgICAgaXZlYzIgZHd0X2RpbSA9IGltYWdlU2l6ZShjb2VmX2J1Zltw XSk7Cj4gKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IHdhdmVsZXRfZGVwdGg7 IGxldmVsKyspCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpdmVjMiBiYW5kX3NpemUgPSBk d3RfZGltID4+ICh3YXZlbGV0X2RlcHRoIC0gbGV2ZWwpOwo+ICsgICAgICAgICAgICBmb3IgKGlu dCBvID0gaW50KGxldmVsID4gMCk7IG8gPCA0OyBvKyspCj4gKyAgICAgICAgICAgIHsKPiArICAg ICAgICAgICAgICAgIC8qIEVuY29kZSBzdWJiYW5kICovCj4gKyAgICAgICAgICAgICAgICBpbnQg bGVmdCA9IGJhbmRfc2l6ZS54ICogKHNsaWNlX2Nvb3JkLngpIC8gbnVtX3NsaWNlcy54Owo+ICsg ICAgICAgICAgICAgICAgaW50IHJpZ2h0ID0gYmFuZF9zaXplLnggKiAoc2xpY2VfY29vcmQueCsx KSAvIG51bV9zbGljZXMueDsKPiArICAgICAgICAgICAgICAgIGludCB0b3AgPSBiYW5kX3NpemUu eSAqIChzbGljZV9jb29yZC55KSAvIG51bV9zbGljZXMueTsKPiArICAgICAgICAgICAgICAgIGlu dCBib3R0b20gPSBiYW5kX3NpemUueSAqIChzbGljZV9jb29yZC55KzEpIC8gbnVtX3NsaWNlcy55 Owo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCBxX2lkeCA9IHF1YW50c1tsZXZlbF1b b107Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcWZhY3RvciA9IGZmX2RpcmFjX3FzY2Fs ZV90YWJbcV9pZHhdOwo+ICsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCB5aCA9IG8gPj4g MTsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludCB4aCA9IG8gJiAxOwo+ICsKPiArICAgICAg ICAgICAgICAgIGZvciAoaW50IHkgPSB0b3A7IHkgPCBib3R0b207IHkrKykKPiArICAgICAgICAg ICAgICAgIHsKPiArICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gbGVmdDsgeCA8IHJp Z2h0OyB4KyspCj4gKyAgICAgICAgICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgc3ggPSBzdWJiYW5kX2Nvb3JkKHgsIHhoLCBsZXZlbCk7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGludCBzeSA9IHN1YmJhbmRfY29vcmQoeSwgeWgsIGxldmVsKTsKPiArICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGNvZWYgPSBpbWFnZUxvYWQoY29lZl9idWZbcF0sIGl2 ZWMyKHN4LCBzeSkpLng7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgY19hYnMgPSB1 aW50KGFicyhjb2VmKSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNfYWJzID0gKGNfYWJz IDw8IDIpIC8gcWZhY3RvcjsKPiArICAgICAgICAgICAgICAgICAgICAgICAgcHV0X3ZjMl91ZV91 aW50KHBiLCBjX2Ficyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjX2FicyAhPSAw KQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0X2JpdHMocGIsIDEsIGludChjb2Vm IDwgMCkpOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAgICBmbHVzaF9wdXRfYml0cyhwYik7 Cj4gKyAgICAgICAgaW50IGJ5dGVzX2xlbiA9IGludDMyX3QocHV0X2J5dGVzX2NvdW50KHBiKSkg LSBieXRlc19zdGFydCAtIDE7Cj4gKyAgICAgICAgaWYgKHAgPT0gMikKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIGludCBsZW5fZGlmZiA9IHNsaWNlX2J5dGVzX21heCAtIGludDMyX3QocHV0 X2J5dGVzX2NvdW50KHBiKSk7Cj4gKyAgICAgICAgICAgIHBhZF9zID0gYWxpZ24oKGJ5dGVzX2xl biArIGxlbl9kaWZmKSwgc2l6ZV9zY2FsZXIpL3NpemVfc2NhbGVyOwo+ICsgICAgICAgICAgICBw YWRfYyA9IChwYWRfcypzaXplX3NjYWxlcikgLSBieXRlc19sZW47Cj4gKyAgICAgICAgfQo+ICsg ICAgICAgIGVsc2UKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHBhZF9zID0gYWxpZ24oYnl0 ZXNfbGVuLCBzaXplX3NjYWxlcikvc2l6ZV9zY2FsZXI7Cj4gKyAgICAgICAgICAgIHBhZF9jID0g KHBhZF9zKnNpemVfc2NhbGVyKSAtIGJ5dGVzX2xlbjsKPiArICAgICAgICB9Cj4gKyAgICAgICAg dWludDY0X3Qgc3RhcnRfcHRyID0gd3JpdGVfcHRyX3N0YXJ0ICsgKChCVUZfQklUUyAtIGJpdF9s ZWZ0X3N0YXJ0KSA+PiAzKTsKPiArICAgICAgICB1OGJ1ZihzdGFydF9wdHIpLnYgPSB1aW50OF90 KHBhZF9zKTsKPiArICAgICAgICAvKiB2YzItcmVmZXJlbmNlIHVzZXMgdGhhdCBwYWRkaW5nIHRo YXQgZGVjb2RlcyB0byAnMCcgY29lZmZzICovCj4gKyAgICAgICAgc2tpcF9wdXRfYnl0ZXMocGIs IHBhZF9jKTsKPiArICAgIH0KPiArfQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92 YzJfc2xpY2Vfc2l6ZXMuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9zbGljZV9zaXplcy5j b21wCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi42MTA3MGMxZGMy Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3ZjMl9zbGljZV9zaXpl cy5jb21wCj4gQEAgLTAsMCArMSwxNzAgQEAKPiArLyoKPiArICogVkMyIGNvZGVjCj4gKyAqCj4g KyAqIENvcHlyaWdodCAoYykgMjAyNSByYXBoYWVsdGhlZ3JlYXQgPGdlb3N0ZXIzZEBnbWFpbC5j b20+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsKPiArI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxp Y2l0X2FyaXRobWV0aWNfdHlwZXMgOiByZXF1aXJlCj4gKyNleHRlbnNpb24gR0xfRVhUX3NjYWxh cl9ibG9ja19sYXlvdXQgOiByZXF1aXJlCj4gKyNleHRlbnNpb24gR0xfRVhUX2J1ZmZlcl9yZWZl cmVuY2UgOiByZXF1aXJlCj4gKwo+ICsjZGVmaW5lIERJUkFDX01BWF9RVUFOVF9JTkRFWCAxMTYK PiArI2RlZmluZSBNQVhfRFdUX0xFVkVMUyA1Cj4gKwo+ICtsYXlvdXQocHVzaF9jb25zdGFudCwg c2NhbGFyKSB1bmlmb3JtIENvbXB1dGVJbmZvIHsKPiArICAgIGl2ZWMyIG51bV9zbGljZXM7Cj4g KyAgICBpbnQgd2F2ZWxldF9kZXB0aDsKPiArICAgIGludCBzaXplX3NjYWxlcjsKPiArICAgIGlu dCBwcmVmaXhfYnl0ZXM7Cj4gKyAgICBpbnQgYml0c19jZWlsOwo+ICsgICAgaW50IGJpdHNfZmxv b3I7Cj4gK307Cj4gKwo+ICtpbnQgY291bnRfdmMyX3VlX3VpbnQodWludCB2YWwpCj4gK3sKPiAr ICAgIHJldHVybiAyICogZmluZE1TQih2YWwgKyAxKSArIDE7Cj4gK30KPiArCj4gK2ludCBjYWNo ZVtESVJBQ19NQVhfUVVBTlRfSU5ERVhdOwo+ICtpbnQgcXVhbnRzW01BWF9EV1RfTEVWRUxTXVs0 XTsKPiArc2hhcmVkIGludCBzbGljZV9zaXplc1tnbF9Xb3JrR3JvdXBTaXplLnhdOwo+ICsKPiAr aW50IHN1YmJhbmRfY29vcmQoaW50IGluZGV4LCBpbnQgaCwgaW50IGx2bCkKPiArewo+ICsgICAg aW50IGNvb3JkID0gaW5kZXg7Cj4gKyAgICBjb29yZCA8PD0gMTsKPiArICAgIGNvb3JkIHw9IGg7 Cj4gKyAgICBjb29yZCA8PD0gKHdhdmVsZXRfZGVwdGgtbHZsLTEpOwo+ICsgICAgcmV0dXJuIGNv b3JkOwo+ICt9Cj4gKwo+ICtpbnQgY291bnRfaHFfc2xpY2UoaW50IHF1YW50X2luZGV4KQo+ICt7 Cj4gKyAgICBpbnQgYml0cyA9IDA7Cj4gKyAgICBpZiAoY2FjaGVbcXVhbnRfaW5kZXhdICE9IDAp Cj4gKyAgICAgICAgcmV0dXJuIGNhY2hlW3F1YW50X2luZGV4XTsKPiArCj4gKyAgICBiaXRzICs9 IDgqcHJlZml4X2J5dGVzOwo+ICsgICAgYml0cyArPSA4OyAvKiBxdWFudF9pZHggKi8KPiArCj4g KyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgd2F2ZWxldF9kZXB0aDsgbGV2ZWwrKykK PiArICAgICAgICBmb3IgKGludCBvcmllbnRhdGlvbiA9IGludChsZXZlbCA+IDApOyBvcmllbnRh dGlvbiA8IDQ7IG9yaWVudGF0aW9uKyspCj4gKyAgICAgICAgICAgIHF1YW50c1tsZXZlbF1bb3Jp ZW50YXRpb25dID0gbWF4KHF1YW50X2luZGV4IC0gbHV0X3F1YW50W2xldmVsXVtvcmllbnRhdGlv bl0sIDApOwo+ICsKPiArICAgIGludCBzbGljZV9pbmRleCA9IGludChnbF9HbG9iYWxJbnZvY2F0 aW9uSUQueCk7Cj4gKyAgICBpdmVjMiBzbGljZV9jb29yZCA9IGl2ZWMyKHNsaWNlX2luZGV4ICUg bnVtX3NsaWNlcy54LCBzbGljZV9pbmRleCAvIG51bV9zbGljZXMueCk7Cj4gKyAgICBmb3IgKGlu dCBwID0gMDsgcCA8IDM7IHArKykKPiArICAgIHsKPiArICAgICAgICBpbnQgYnl0ZXNfc3RhcnQg PSBiaXRzID4+IDM7Cj4gKyAgICAgICAgYml0cyArPSA4Owo+ICsKPiArICAgICAgICBpdmVjMiBk d3RfZGltID0gaW1hZ2VTaXplKGNvZWZfYnVmW3BdKTsKPiArICAgICAgICBmb3IgKGludCBsZXZl bCA9IDA7IGxldmVsIDwgd2F2ZWxldF9kZXB0aDsgbGV2ZWwrKykKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAgIGl2ZWMyIGJhbmRfZGltID0gZHd0X2RpbSA+PiAod2F2ZWxldF9kZXB0aCAtIGxl dmVsKTsKPiArICAgICAgICAgICAgZm9yIChpbnQgbyA9IGludChsZXZlbCA+IDApOyBvIDwgNDsg bysrKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdCA9 IGJhbmRfZGltLnggKiBzbGljZV9jb29yZC54IC8gbnVtX3NsaWNlcy54Owo+ICsgICAgICAgICAg ICAgICAgY29uc3QgaW50IHJpZ2h0ID0gYmFuZF9kaW0ueCAqIChzbGljZV9jb29yZC54KzEpIC8g bnVtX3NsaWNlcy54Owo+ICsgICAgICAgICAgICAgICAgY29uc3QgaW50IHRvcCA9IGJhbmRfZGlt LnkgKiBzbGljZV9jb29yZC55IC8gbnVtX3NsaWNlcy55Owo+ICsgICAgICAgICAgICAgICAgY29u c3QgaW50IGJvdHRvbSA9IGJhbmRfZGltLnkgKiAoc2xpY2VfY29vcmQueSsxKSAvIG51bV9zbGlj ZXMueTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcV9pZHggPSBxdWFudHNbbGV2 ZWxdW29dOwo+ICsgICAgICAgICAgICAgICAgY29uc3QgaW50IHFmYWN0b3IgPSBmZl9kaXJhY19x c2NhbGVfdGFiW3FfaWR4XTsKPiArCj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgeWggPSBv ID4+IDE7Cj4gKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgeGggPSBvICYgMTsKPiArCj4gKyAg ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gdG9wOyB5IDwgYm90dG9tOyB5KyspCj4gKyAgICAg ICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IGxlZnQ7IHgg PCByaWdodDsgeCsrKQo+ICsgICAgICAgICAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHN4ID0gc3ViYmFuZF9jb29yZCh4LCB4aCwgbGV2ZWwpOwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgc3kgPSBzdWJiYW5kX2Nvb3JkKHksIHloLCBsZXZlbCk7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2VmID0gaW1hZ2VMb2FkKGNvZWZfYnVmW3Bd LCBpdmVjMihzeCwgc3kpKS54Owo+ICsgICAgICAgICAgICAgICAgICAgICAgICB1aW50IGNfYWJz ID0gdWludChhYnMoY29lZikpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjX2FicyA9IChj X2FicyA8PCAyKSAvIHFmYWN0b3I7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgKz0g Y291bnRfdmMyX3VlX3VpbnQoY19hYnMpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICBiaXRz ICs9IGludChjX2FicyA+IDApOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAgICBiaXRzICs9 IGFsaWduKGJpdHMsIDgpIC0gYml0czsKPiArICAgICAgICBpbnQgYnl0ZXNfbGVuID0gKGJpdHMg Pj4gMykgLSBieXRlc19zdGFydCAtIDE7Cj4gKyAgICAgICAgaW50IHBhZF9zID0gYWxpZ24oYnl0 ZXNfbGVuLCBzaXplX3NjYWxlcikgLyBzaXplX3NjYWxlcjsKPiArICAgICAgICBpbnQgcGFkX2Mg PSAocGFkX3MgKiBzaXplX3NjYWxlcikgLSBieXRlc19sZW47Cj4gKyAgICAgICAgYml0cyArPSBw YWRfYyAqIDg7Cj4gKyAgICB9Cj4gKwo+ICsgICAgY2FjaGVbcXVhbnRfaW5kZXhdID0gYml0czsK PiArICAgIHJldHVybiBiaXRzOwo+ICt9Cj4gKwo+ICtpbnQgc3NpemVfcm91bmQoaW50IGIpCj4g K3sKPiArICAgIHJldHVybiBhbGlnbihiLCBzaXplX3NjYWxlcikgKyA0ICsgcHJlZml4X2J5dGVz Owo+ICt9Cj4gKwo+ICt2b2lkIG1haW4oKQo+ICt7Cj4gKyAgICBpbnQgc2xpY2VfaW5kZXggPSBp bnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpOwo+ICsgICAgaW50IG1heF9pbmRleCA9IG51bV9z bGljZXMueCAqIG51bV9zbGljZXMueTsKPiArICAgIGlmIChzbGljZV9pbmRleCA+PSBtYXhfaW5k ZXgpCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRElS QUNfTUFYX1FVQU5UX0lOREVYOyBpKyspCj4gKyAgICAgICAgY2FjaGVbaV0gPSAwOwo+ICsKPiAr ICAgIGNvbnN0IGludCBxX2NlaWwgPSBESVJBQ19NQVhfUVVBTlRfSU5ERVg7Cj4gKyAgICBjb25z dCBpbnQgdG9wID0gYml0c19jZWlsOwo+ICsgICAgY29uc3QgaW50IGJvdHRvbSA9IGJpdHNfZmxv b3I7Cj4gKyAgICBpbnQgcXVhbnRfYnVmWzJdID0gaW50WzJdKC0xLCAtMSk7Cj4gKyAgICBpbnQg cXVhbnQgPSBzbGljZV9hcmdzW3NsaWNlX2luZGV4XS5xdWFudF9pZHg7Cj4gKyAgICBpbnQgc3Rl cCA9IDE7Cj4gKyAgICBpbnQgYml0c19sYXN0ID0gMDsKPiArICAgIGludCBiaXRzID0gY291bnRf aHFfc2xpY2UocXVhbnQpOwo+ICsgICAgd2hpbGUgKChiaXRzID4gdG9wKSB8fCAoYml0cyA8IGJv dHRvbSkpCj4gKyAgICB7Cj4gKyAgICAgICAgY29uc3QgaW50IHNpZ25lZF9zdGVwID0gYml0cyA+ IHRvcCA/ICtzdGVwIDogLXN0ZXA7Cj4gKyAgICAgICAgcXVhbnQgPSBjbGFtcChxdWFudCArIHNp Z25lZF9zdGVwLCAwLCBxX2NlaWwtMSk7Cj4gKyAgICAgICAgYml0cyA9IGNvdW50X2hxX3NsaWNl KHF1YW50KTsKPiArICAgICAgICBpZiAocXVhbnRfYnVmWzFdID09IHF1YW50KQo+ICsgICAgICAg IHsKPiArICAgICAgICAgICAgcXVhbnQgPSBtYXgocXVhbnRfYnVmWzBdLCBxdWFudCk7Cj4gKyAg ICAgICAgICAgIGJpdHMgPSBxdWFudCA9PSBxdWFudF9idWZbMF0gPyBiaXRzX2xhc3QgOiBiaXRz Owo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKyAgICAgICAgc3RlcCA9IGNs YW1wKHN0ZXAgLyAyLCAxLCAocV9jZWlsIC0gMSkgLyAyKTsKPiArICAgICAgICBxdWFudF9idWZb MV0gPSBxdWFudF9idWZbMF07Cj4gKyAgICAgICAgcXVhbnRfYnVmWzBdID0gcXVhbnQ7Cj4gKyAg ICAgICAgYml0c19sYXN0ID0gYml0czsKPiArICAgIH0KPiArICAgIGludCBieXRlcyA9IHNzaXpl X3JvdW5kKGJpdHMgPj4gMyk7Cj4gKyAgICBzbGljZV9hcmdzW3NsaWNlX2luZGV4XS5xdWFudF9p ZHggPSBjbGFtcChxdWFudCwgMCwgcV9jZWlsLTEpOwo+ICsgICAgc2xpY2VfYXJnc1tzbGljZV9p bmRleF0uYnl0ZXMgPSBieXRlczsKPiArICAgIHNsaWNlX3NpemVzW2dsX0xvY2FsSW52b2NhdGlv bkluZGV4XSA9IGJ5dGVzOwo+ICsgICAgYmFycmllcigpOwo+ICsKPiArICAgIC8qIFByZWZpeCBz dW0gZm9yIGFsbCBzbGljZXMgaW4gY3VycmVudCB3b3JrZ3JvdXAgKi8KPiArICAgIGludCB0b3Rh bF9ieXRlcyA9IDA7Cj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsX0xvY2FsSW52b2NhdGlv bkluZGV4OyBpKyspCj4gKyAgICAgICAgdG90YWxfYnl0ZXMgKz0gc2xpY2Vfc2l6ZXNbaV07Cj4g KyAgICBzbGljZV9hcmdzW3NsaWNlX2luZGV4XS5wYl9zdGFydCA9IHRvdGFsX2J5dGVzOwo+ICt9 Cj4gLS0KPiAyLjQ5LjAKPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3Jn Cmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5z dWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0 QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==