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 6F4104DEAD for ; Thu, 5 Jun 2025 12:28:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 9360268CC19; Thu, 5 Jun 2025 15:28:38 +0300 (EEST) Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 5307A68C636 for ; Thu, 5 Jun 2025 15:28:32 +0300 (EEST) Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-235a3dd4f0dso6210385ad.0 for ; Thu, 05 Jun 2025 05:28:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749126510; x=1749731310; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ZQgBHLYeTrs2op8XTAYj+F80+IsHEZFmBbLyULM78EI=; b=ICsBZuDTpAy3yBIPhgfuTx797K5NUOugqDQCfFlBTQWzI9tnXryd+1nT8N2dpUBIUY /7WaiJBVnv5L2F8V67Ye+0YsOsY6dxXg8eGaO1jtQDbuWsHWOs+mqVWzgFCdk+MXzrvB KP2vbMQm13w+lQFMSxTPR6W5yUOi/JQMxNRt6GHr2CxkSfWnF5Pk9dGQLn8iX6ZPWdFj TuAPe01b+NGIRDcX6mM420fKiXTzb7hJLRt782oP6vNASg145yxFSJNCtx6UiuR81tj4 Nlbc3yiKgGYDXDMBhTRgVrgyfIbZSYXwrf6FLqnsXaTZh/ztMmz9PBsyf4APCAeR359S aYSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749126510; x=1749731310; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZQgBHLYeTrs2op8XTAYj+F80+IsHEZFmBbLyULM78EI=; b=tGs/LyzlBbWsPZ+PmI512bA09xNZGd2pWOjw+phZJYie84vQT6rVKsKnWDVEC23R7R fQFK1wxb1AoXuHsRaGz3e0myc7tdboEiRxNxnPHFJ/ftkffHATltBWgQY9PwXDQcGTTF UtQxrZqQi0pAVine/ZB/nHoycbGJgP4hfToaPNPUEdtcwftohAuyNC7/jTsWwxGZHS3v OwGPuUGZiKzn6JgJR+YdM5EOKAocXTZYN2S3Tql50BlyH8UUA9qoT+8H6cbl4Vv3dARE 68BepjHa/FOBssBV3+M8BJ2t6L5OPNOcDMyzYTEgicyZ0afYJ4e96G2KqyAJPHyt6GLo td7w== X-Gm-Message-State: AOJu0YyXVRwO47PFh0Dm+qb3yU9zgdXhZ5/J2hqfrdwrW6eFyE4TKpYZ hBrtktCly7Vi3wq+WvupucMgSMHC0nPZmusZQQqr0w3Hc6se59R1OuDgmx1ftg== X-Gm-Gg: ASbGncvwIxXbvjB0K/lTUY4uH+AHxquy32QAhqmBJ6K0x1ebtDGk9rWF4Dex/0HotjX kKMsyPLdK65saYQJuE19lUbRJqdZpZ9XU+6XosDfKvOVKeOF/Y+7xQIyC1dxXPv2LtnUKxz9wet /gk/vWjApHpVsfv6mjbGXIYmYcSAOuc0xzvQQsJMC8d/ApTQvHHVeYBU6f1V3yQWxageS5wEGvq 1ofWVSWKjc33pw0NWu6xkNW1iM/hi37f3ER526xNfDEZsMb2omTZKy0VlUl0dOB6hcbRakhBQNN cqWKrIgScPXJ6j43hIjUuIIgDs6HUx8qEwqXg31aaaeQHpG6Egb4i3WzJ/CyHQrOpKA= X-Google-Smtp-Source: AGHT+IGJUTbwTQQN/WZxtBn/WIeg5RAuawW1cKYTUpTzGpOqyXkclDPytetdoUANXjHA/nbEzIFoaQ== X-Received: by 2002:a17:903:a50:b0:235:e71e:a396 with SMTP id d9443c01a7336-235e71ea9a9mr56653375ad.51.1749126509817; Thu, 05 Jun 2025 05:28:29 -0700 (PDT) Received: from velotio-ThinkPad-E14.. ([2405:201:1008:b04e:e33:6693:dff4:3424]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23506bd9486sm118338105ad.67.2025.06.05.05.28.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Jun 2025 05:28:29 -0700 (PDT) From: Faeez Kadiri To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 Jun 2025 17:58:16 +0530 Message-Id: <20250605122816.747732-1-f1k2faeez@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avfilter: add CUDA-accelerated transpose filter 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 Cc: Faeez Kadiri 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: QWRkIGEgbmV3IENVREEtYWNjZWxlcmF0ZWQgdHJhbnNwb3NlIGZpbHRlciAodHJhbnNwb3NlX2N1 ZGEpIHRoYXQgcHJvdmlkZXMKaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmlkZW8gdHJhbnNwb3NpdGlv biBvcGVyYXRpb25zIG9uIE5WSURJQSBHUFVzIHVzaW5nCkNVREEuIFRoaXMgZmlsdGVyIHN1cHBv cnRzIGFsbCB0aGUgc2FtZSB0cmFuc3Bvc2Ugb3BlcmF0aW9ucyBhcyB0aGUgQ1BVCnRyYW5zcG9z ZSBmaWx0ZXIgd2hpbGUgbGV2ZXJhZ2luZyBHUFUgYWNjZWxlcmF0aW9uIGZvciBpbXByb3ZlZCBw ZXJmb3JtYW5jZS4KClN1cHBvcnRlZCBvcGVyYXRpb25zOgotIDkwwrAgY2xvY2t3aXNlIHJvdGF0 aW9uCi0gOTDCsCBjb3VudGVyLWNsb2Nrd2lzZSByb3RhdGlvbgotIDkwwrAgY2xvY2t3aXNlICsg dmVydGljYWwgZmxpcAotIDkwwrAgY291bnRlci1jbG9ja3dpc2UgKyB2ZXJ0aWNhbCBmbGlwCi0g MTgwwrAgcm90YXRpb24KLSBIb3Jpem9udGFsIGZsaXAKLSBWZXJ0aWNhbCBmbGlwCgpTdXBwb3J0 ZWQgcGl4ZWwgZm9ybWF0czoKLSBZVVY0MjBQLCBOVjEyLCBZVVY0NDRQICg4LWJpdCkKLSBQMDEw LCBQMDE2LCBZVVY0NDRQMTYgKDEwLzE2LWJpdCkKLSBSR0IzMiwgQkdSMzIsIDBSR0IzMiwgMEJH UjMyIChwYWNrZWQgUkdCKQoKVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgQ1VEQSB0ZXh0dXJlIG1l bW9yeSBmb3Igb3B0aW1hbCBtZW1vcnkgYWNjZXNzCnBhdHRlcm5zIGFuZCBpbmNsdWRlcyBhIG5l dyBDVURBIFZQUCAoVmlkZW8gUG9zdC1Qcm9jZXNzaW5nKSBmcmFtZXdvcmsKdGhhdCBjYW4gYmUg cmV1c2VkIGJ5IGZ1dHVyZSBDVURBIGZpbHRlcnMuCgpQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMg b3ZlciBDUFUgdHJhbnNwb3NlOgotIDRLIFlVVjQyMFA6IH4xNXggZmFzdGVyCi0gMTA4MHAgWVVW NDIwUDogfjh4IGZhc3RlcgotIE5lZ2xpZ2libGUgQ1BVIHVzYWdlIGR1cmluZyBwcm9jZXNzaW5n CgpUaGUgZmlsdGVyIG1haW50YWlucyBmdWxsIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZXhpc3Rp bmcgdHJhbnNwb3NlIGZpbHRlcgpBUEkgYW5kIGluY2x1ZGVzIHBhc3N0aHJvdWdoIG1vZGUgZm9y IGxhbmRzY2FwZSBjb250ZW50IHdoZW4gZW5hYmxlZC4KCkRlcGVuZGVuY2llczogcmVxdWlyZXMg Q1VEQSBTREsgYW5kIGZmbnZjb2RlYyBoZWFkZXJzLgoKRXhhbXBsZSB1c2FnZToKICBmZm1wZWcg LWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkgaW5wdXQubXA0IFwK ICAgICAgICAgLXZmIHRyYW5zcG9zZV9jdWRhPTEgLWM6diBoMjY0X252ZW5jIG91dHB1dC5tcDQK ClNpZ25lZC1vZmYtYnk6IEZhZWV6IEthZGlyaSA8ZjFrMmZhZWV6QGdtYWlsLmNvbT4KLS0tCiBD aGFuZ2Vsb2cgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogY29uZmlndXJlICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZG9jL2ZpbHRlcnMudGV4aSAgICAgICAgICAgICAg ICAgfCAxMzcgKysrKysrKysrKwogbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgICAgICAgfCAg IDEgKwogbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jICAgICAgICAgfCAgIDEgKwogbGliYXZmaWx0 ZXIvY3VkYS9jdWRhX3ZwcC5jICAgICAgfCAyNDggKysrKysrKysrKysrKysrKysrCiBsaWJhdmZp bHRlci9jdWRhL2N1ZGFfdnBwLmggICAgICB8IDExMyArKysrKysrKysKIGxpYmF2ZmlsdGVyL3Zm X3RyYW5zcG9zZV9jdWRhLmMgIHwgNDIzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGxpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmN1IHwgMjE5ICsrKysrKysrKysrKysrKysK IDkgZmlsZXMgY2hhbmdlZCwgMTE0NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZmaWx0ZXIvdmZfdHJhbnNwb3NlX2N1ZGEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zmls dGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmN1CgpkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdl bG9nCmluZGV4IDQyMTc0NDk0MzguLmNmMWQwMTk2NDUgMTAwNjQ0Ci0tLSBhL0NoYW5nZWxvZwor KysgYi9DaGFuZ2Vsb2cKQEAgLTE4LDcgKzE4LDcgQEAgdmVyc2lvbiA8bmV4dD46CiAtIEFQViBl bmNvZGluZyBzdXBwb3J0IHRocm91Z2ggYSBsaWJvcGVuYXB2IHdyYXBwZXIKIC0gVlZDIGRlY29k ZXIgc3VwcG9ydHMgYWxsIGNvbnRlbnQgb2YgU0NDIChTY3JlZW4gQ29udGVudCBDb2RpbmcpOgog ICBJQkMgKEludGVyIEJsb2NrIENvcHkpLCBQYWxldHRlIE1vZGUgYW5kIEFDVCAoQWRhcHRpdmUg Q29sb3IgVHJhbnNmb3JtCi0KKy0gVHJhbnNwb3NlIENVREEgZmlsdGVyICh0cmFuc3Bvc2VfY3Vk YSkKIAogdmVyc2lvbiA3LjE6CiAtIFJhdyBDYXB0aW9ucyB3aXRoIFRpbWUgKFJDV1QpIGNsb3Nl ZCBjYXB0aW9uIGRlbXV4ZXIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRl eCA4OWE3NjZiNDAzLi5kNmIwN2Q3YWZlIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29u ZmlndXJlCkBAIC00MDE2LDYgKzQwMTYsOCBAQCB0aW50ZXJsYWNlX3BhZF90ZXN0X2RlcHM9InRp bnRlcmxhY2VfZmlsdGVyIgogdG9uZW1hcF9maWx0ZXJfZGVwcz0iY29uc3RfbmFuIgogdG9uZW1h cF92YWFwaV9maWx0ZXJfZGVwcz0idmFhcGkgVkFQcm9jRmlsdGVyUGFyYW1ldGVyQnVmZmVySERS VG9uZU1hcHBpbmciCiB0b25lbWFwX29wZW5jbF9maWx0ZXJfZGVwcz0ib3BlbmNsIGNvbnN0X25h biIKK3RyYW5zcG9zZV9jdWRhX2ZpbHRlcl9kZXBzPSJmZm52Y29kZWMiCit0cmFuc3Bvc2VfY3Vk YV9maWx0ZXJfZGVwc19hbnk9ImN1ZGFfbnZjYyBjdWRhX2xsdm0iCiB0cmFuc3Bvc2Vfb3BlbmNs X2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiB0cmFuc3Bvc2VfdmFhcGlfZmlsdGVyX2RlcHM9InZhYXBp IFZBUHJvY1BpcGVsaW5lQ2Fwc19yb3RhdGlvbl9mbGFncyIKIHRyYW5zcG9zZV92dF9maWx0ZXJf ZGVwcz0idmlkZW90b29sYm94IFZUUGl4ZWxSb3RhdGlvblNlc3Npb25DcmVhdGUiCmRpZmYgLS1n aXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCA2M2Y1NWY1Nzk0 Li44MzIxZjg0N2RlIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0 ZXJzLnRleGkKQEAgLTI2ODU2LDYgKzI2ODU2LDE0MyBAQCBPbmx5IGRlaW50ZXJsYWNlIGZyYW1l cyBtYXJrZWQgYXMgaW50ZXJsYWNlZC4KIFRoZSBkZWZhdWx0IHZhbHVlIGlzIEBjb2Rle2FsbH0u CiBAZW5kIHRhYmxlCiAKK0BhbmNob3J7dHJhbnNwb3NlX2N1ZGF9CitAc3Vic2VjdGlvbiB0cmFu c3Bvc2VfY3VkYQorCitUcmFuc3Bvc2Ugcm93cyB3aXRoIGNvbHVtbnMgaW4gdGhlIGlucHV0IHZp ZGVvIGFuZCBvcHRpb25hbGx5IGZsaXAgaXQgdXNpbmcgQ1VEQS4KKworVGhpcyBpcyB0aGUgQ1VE QSB2YXJpYW50IG9mIHRoZSBAcmVme3RyYW5zcG9zZX0gZmlsdGVyLiBJdCBwcm92aWRlcyBoYXJk d2FyZS1hY2NlbGVyYXRlZCAKK3RyYW5zcG9zaXRpb24gb3BlcmF0aW9ucyBvbiBDVURBLWNhcGFi bGUgZGV2aWNlcyB3aXRoIHN1cHBvcnQgZm9yIG11bHRpcGxlIHBpeGVsIGZvcm1hdHMuCisKK1Ro ZSBmaWx0ZXIgdXNlcyBlZmZpY2llbnQgQ1VEQSBrZXJuZWxzIHdpdGggdGV4dHVyZSBtZW1vcnkg Zm9yIG9wdGltYWwgcGVyZm9ybWFuY2UgYWNyb3NzIAorYWxsIHN1cHBvcnRlZCBwaXhlbCBmb3Jt YXRzIGFuZCBmcmFtZSBzaXplcy4KKworQHN1YnNlY3Rpb24gU3VwcG9ydGVkIFBpeGVsIEZvcm1h dHMKKworVGhlIGZpbHRlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBpeGVsIGZvcm1hdHM6CitA aXRlbWl6ZQorQGl0ZW0gWVVWNDIwUCAoOC1iaXQgcGxhbmFyIFlVVikKK0BpdGVtIE5WMTIgKDgt Yml0IHNlbWktcGxhbmFyIFlVVikKK0BpdGVtIFlVVjQ0NFAgKDgtYml0IHBsYW5hciBZVVYgNDo0 OjQpCitAaXRlbSBQMDEwTEUgKDEwLWJpdCBzZW1pLXBsYW5hciBZVVYpCitAaXRlbSBQMDE2TEUg KDE2LWJpdCBzZW1pLXBsYW5hciBZVVYpCitAaXRlbSBZVVY0NDRQMTZMRSAoMTYtYml0IHBsYW5h ciBZVVYgNDo0OjQpCitAaXRlbSBSR0IwICgzMi1iaXQgUkdCIHdpdGggYWxwaGEgcGFkZGluZykK K0BpdGVtIEJHUjAgKDMyLWJpdCBCR1Igd2l0aCBhbHBoYSBwYWRkaW5nKQorQGl0ZW0gUkdCQSAo MzItYml0IFJHQkEpCitAaXRlbSBCR1JBICgzMi1iaXQgQkdSQSkKK0BlbmQgaXRlbWl6ZQorCitA c3Vic2VjdGlvbiBPcHRpb25zCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJz OgorCitAdGFibGUgQG9wdGlvbgorCitAaXRlbSBkaXIKK1NwZWNpZnkgdGhlIHRyYW5zcG9zaXRp b24gZGlyZWN0aW9uLgorCitDYW4gYXNzdW1lIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorQHRhYmxl IEBzYW1wCitAaXRlbSAwLCBjY2xvY2tfZmxpcAorUm90YXRlIGJ5IDkwIGRlZ3JlZXMgY291bnRl cmNsb2Nrd2lzZSBhbmQgdmVydGljYWxseSBmbGlwIChkZWZhdWx0KSwgdGhhdCBpczoKK0BleGFt cGxlCitMLlIgICAgIEwubAorLiAuIC0+ICAuIC4KK2wuciAgICAgUi5yCitAZW5kIGV4YW1wbGUK KworQGl0ZW0gMSwgY2xvY2sKK1JvdGF0ZSBieSA5MCBkZWdyZWVzIGNsb2Nrd2lzZSwgdGhhdCBp czoKK0BleGFtcGxlCitMLlIgICAgIGwuTAorLiAuIC0+ICAuIC4KK2wuciAgICAgci5SCitAZW5k IGV4YW1wbGUKKworQGl0ZW0gMiwgY2Nsb2NrCitSb3RhdGUgYnkgOTAgZGVncmVlcyBjb3VudGVy Y2xvY2t3aXNlLCB0aGF0IGlzOgorQGV4YW1wbGUKK0wuUiAgICAgUi5yCisuIC4gLT4gIC4gLgor bC5yICAgICBMLmwKK0BlbmQgZXhhbXBsZQorCitAaXRlbSAzLCBjbG9ja19mbGlwCitSb3RhdGUg YnkgOTAgZGVncmVlcyBjbG9ja3dpc2UgYW5kIHZlcnRpY2FsbHkgZmxpcCwgdGhhdCBpczoKK0Bl eGFtcGxlCitMLlIgICAgIHIuUgorLiAuIC0+ICAuIC4KK2wuciAgICAgbC5MCitAZW5kIGV4YW1w bGUKKworQGl0ZW0gNCwgcmV2ZXJzYWwKK1JvdGF0ZSBieSAxODAgZGVncmVlcywgdGhhdCBpczoK K0BleGFtcGxlCitMLlIgICAgIHIubAorLiAuIC0+ICAuIC4KK2wuciAgICAgUi5MCitAZW5kIGV4 YW1wbGUKKworQGl0ZW0gNSwgaGZsaXAKK0ZsaXAgaG9yaXpvbnRhbGx5LCB0aGF0IGlzOgorQGV4 YW1wbGUKK0wuUiAgICAgUi5MCisuIC4gLT4gIC4gLgorbC5yICAgICByLmwKK0BlbmQgZXhhbXBs ZQorCitAaXRlbSA2LCB2ZmxpcAorRmxpcCB2ZXJ0aWNhbGx5LCB0aGF0IGlzOgorQGV4YW1wbGUK K0wuUiAgICAgbC5yCisuIC4gLT4gIC4gLgorbC5yICAgICBMLlIKK0BlbmQgZXhhbXBsZQorQGVu ZCB0YWJsZQorCitAaXRlbSBwYXNzdGhyb3VnaAorRG8gbm90IGFwcGx5IHRoZSB0cmFuc3Bvc2l0 aW9uIGlmIHRoZSBpbnB1dCBnZW9tZXRyeSBtYXRjaGVzIHRoZSBvbmUKK3NwZWNpZmllZCBieSB0 aGUgc3BlY2lmaWVkIHZhbHVlLiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorQHRh YmxlIEBzYW1wCitAaXRlbSBub25lCitBbHdheXMgYXBwbHkgdHJhbnNwb3NpdGlvbi4gKGRlZmF1 bHQpCitAaXRlbSBwb3J0cmFpdAorUHJlc2VydmUgcG9ydHJhaXQgZ2VvbWV0cnkgKHdoZW4gQHZh cntoZWlnaHR9ID49IEB2YXJ7d2lkdGh9KS4KK0BpdGVtIGxhbmRzY2FwZQorUHJlc2VydmUgbGFu ZHNjYXBlIGdlb21ldHJ5ICh3aGVuIEB2YXJ7d2lkdGh9ID49IEB2YXJ7aGVpZ2h0fSkuCitAZW5k IHRhYmxlCisKK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gVXNhZ2UgRXhhbXBsZXMKKworQGl0 ZW1pemUKK0BpdGVtCitSb3RhdGUgYSB2aWRlbyA5MCBkZWdyZWVzIGNsb2Nrd2lzZToKK0BleGFt cGxlCitmZm1wZWcgLWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9ybWF0IGN1ZGEgLWkg aW5wdXQubXA0IC12ZiAidHJhbnNwb3NlX2N1ZGE9ZGlyPWNsb2NrIiBvdXRwdXQubXA0CitAZW5k IGV4YW1wbGUKKworQGl0ZW0KK1JvdGF0ZSBhIHZpZGVvIDkwIGRlZ3JlZXMgY291bnRlcmNsb2Nr d2lzZToKK0BleGFtcGxlCitmZm1wZWcgLWh3YWNjZWwgY3VkYSAtaHdhY2NlbF9vdXRwdXRfZm9y bWF0IGN1ZGEgLWkgaW5wdXQubXA0IC12ZiAidHJhbnNwb3NlX2N1ZGE9ZGlyPWNjbG9jayIgb3V0 cHV0Lm1wNAorQGVuZCBleGFtcGxlCisKK0BpdGVtCitGbGlwIGEgdmlkZW8gaG9yaXpvbnRhbGx5 OgorQGV4YW1wbGUKK2ZmbXBlZyAtaHdhY2NlbCBjdWRhIC1od2FjY2VsX291dHB1dF9mb3JtYXQg Y3VkYSAtaSBpbnB1dC5tcDQgLXZmICJ0cmFuc3Bvc2VfY3VkYT1kaXI9aGZsaXAiIG91dHB1dC5t cDQKK0BlbmQgZXhhbXBsZQorCitAaXRlbQorUm90YXRlIDE4MCBkZWdyZWVzOgorQGV4YW1wbGUK K2ZmbXBlZyAtaHdhY2NlbCBjdWRhIC1od2FjY2VsX291dHB1dF9mb3JtYXQgY3VkYSAtaSBpbnB1 dC5tcDQgLXZmICJ0cmFuc3Bvc2VfY3VkYT1kaXI9cmV2ZXJzYWwiIG91dHB1dC5tcDQKK0BlbmQg ZXhhbXBsZQorQGVuZCBpdGVtaXplCisKIEBhbmNob3J7Q1VEQSBOUFB9CiBAc2VjdGlvbiBDVURB IE5QUAogQmVsb3cgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBO VklESUEgUGVyZm9ybWFuY2UgUHJpbWl0aXZlcyAobGlibnBwKSB2aWRlbyBmaWx0ZXJzLgpkaWZm IC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmlsZQppbmRl eCA5N2Y4ZjE3MjcyLi43MzdmMzk3MzE1IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9NYWtlZmls ZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpAQCAtNTM1LDYgKzUzNSw3IEBAIE9CSlMtJChD T05GSUdfVE9ORU1BUF9PUEVOQ0xfRklMVEVSKSAgICAgICAgICs9IHZmX3RvbmVtYXBfb3BlbmNs Lm8gb3BlbmNsLm8gXAogT0JKUy0kKENPTkZJR19UT05FTUFQX1ZBQVBJX0ZJTFRFUikgICAgICAg ICAgKz0gdmZfdG9uZW1hcF92YWFwaS5vIHZhYXBpX3ZwcC5vCiBPQkpTLSQoQ09ORklHX1RQQURf RklMVEVSKSAgICAgICAgICAgICAgICAgICArPSB2Zl90cGFkLm8KIE9CSlMtJChDT05GSUdfVFJB TlNQT1NFX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX3RyYW5zcG9zZS5vCitPQkpTLSQoQ09O RklHX1RSQU5TUE9TRV9DVURBX0ZJTFRFUikgICAgICAgICArPSB2Zl90cmFuc3Bvc2VfY3VkYS5v IHZmX3RyYW5zcG9zZV9jdWRhLnB0eC5vIGN1ZGEvY3VkYV92cHAubyBjdWRhL2xvYWRfaGVscGVy Lm8KIE9CSlMtJChDT05GSUdfVFJBTlNQT1NFX05QUF9GSUxURVIpICAgICAgICAgICs9IHZmX3Ry YW5zcG9zZV9ucHAubwogT0JKUy0kKENPTkZJR19UUkFOU1BPU0VfT1BFTkNMX0ZJTFRFUikgICAg ICAgKz0gdmZfdHJhbnNwb3NlX29wZW5jbC5vIG9wZW5jbC5vIG9wZW5jbC90cmFuc3Bvc2Uubwog T0JKUy0kKENPTkZJR19UUkFOU1BPU0VfVkFBUElfRklMVEVSKSAgICAgICAgKz0gdmZfdHJhbnNw b3NlX3ZhYXBpLm8gdmFhcGlfdnBwLm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRl cnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwppbmRleCAzYmMwNDViMjhmLi42ZDBlZjVl NjU0IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKKysrIGIvbGliYXZmaWx0 ZXIvYWxsZmlsdGVycy5jCkBAIC01MDMsNiArNTAzLDcgQEAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVy IGZmX3ZmX3RvbmVtYXBfb3BlbmNsOwogZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3RvbmVt YXBfdmFhcGk7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdHBhZDsKIGV4dGVybiBjb25z dCBGRkZpbHRlciBmZl92Zl90cmFuc3Bvc2U7CitleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZf dHJhbnNwb3NlX2N1ZGE7CiBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfdHJhbnNwb3NlX25w cDsKIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl90cmFuc3Bvc2Vfb3BlbmNsOwogZXh0ZXJu IGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3RyYW5zcG9zZV92YWFwaTsKZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL2N1ZGEvY3VkYV92cHAuYyBiL2xpYmF2ZmlsdGVyL2N1ZGEvY3VkYV92cHAuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iOGE5MzgyMGY5Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5jCkBAIC0wLDAgKzEsMjQ4IEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBGYWVleiBLYWRpcmkgPCBmMWsyZmFlZXogYXQgZ21h aWwgZG90IGNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworCisj aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNp bmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvZmls dGVycy5oIgorI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2Zvcm1hdHMuaCIKKyNpbmNsdWRlICJjdWRh X3ZwcC5oIgorI2luY2x1ZGUgImxvYWRfaGVscGVyLmgiCisKK2ludCBmZl9jdWRhX3ZwcF9xdWVy eV9mb3JtYXRzKGNvbnN0IEFWRmlsdGVyQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVkZpbHRlckZvcm1hdHNDb25maWcgKipjZmdfaW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVkZpbHRlckZvcm1hdHNDb25maWcgKipjZmdfb3V0KQorewor ICAgIHN0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdHNbXSA9IHsKKyAgICAg ICAgQVZfUElYX0ZNVF9DVURBLCBBVl9QSVhfRk1UX05PTkUsCisgICAgfTsKKyAgICBpbnQgZXJy OworCisgICAgZXJyID0gZmZfc2V0X2NvbW1vbl9mb3JtYXRzX2Zyb21fbGlzdDIoYXZjdHgsIGNm Z19pbiwgY2ZnX291dCwgcGl4X2ZtdHMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1 cm4gZXJyOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9jdWRhX3ZwcF9jb25maWdfaW5w dXQoQVZGaWx0ZXJMaW5rICppbmxpbmspCit7CisgICAgRmlsdGVyTGluayAgICAgICAgICAqbCA9 IGZmX2ZpbHRlcl9saW5rKGlubGluayk7CisgICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IGlu bGluay0+ZHN0OworICAgIENVREFWUFBDb250ZXh0ICpjdHggICAgPSBhdmN0eC0+cHJpdjsKKwor ICAgIGlmIChjdHgtPnBpcGVsaW5lX3VuaW5pdCkKKyAgICAgICAgY3R4LT5waXBlbGluZV91bmlu aXQoYXZjdHgpOworCisgICAgaWYgKCFsLT5od19mcmFtZXNfY3R4KSB7CisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQSBoYXJkd2FyZSBmcmFtZXMgcmVmZXJlbmNlIGlzICIK KyAgICAgICAgICAgICAgICJyZXF1aXJlZCB0byBhc3NvY2lhdGUgdGhlIHByb2Nlc3NpbmcgZGV2 aWNlLlxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAg Y3R4LT5pbnB1dF9mcmFtZXNfcmVmID0gYXZfYnVmZmVyX3JlZihsLT5od19mcmFtZXNfY3R4KTsK KyAgICBpZiAoIWN0eC0+aW5wdXRfZnJhbWVzX3JlZikgeworICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkEgaW5wdXQgZnJhbWVzIHJlZmVyZW5jZSBjcmVhdGUgIgorICAgICAg ICAgICAgICAgImZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor ICAgIH0KKyAgICBjdHgtPmlucHV0X2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCopY3R4LT5p bnB1dF9mcmFtZXNfcmVmLT5kYXRhOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9jdWRh X3ZwcF9jb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBGaWx0ZXJM aW5rICAgICAgICpvdXRsID0gZmZfZmlsdGVyX2xpbmsob3V0bGluayk7CisgICAgQVZGaWx0ZXJD b250ZXh0ICphdmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBBVkZpbHRlckxpbmsgICAqaW5saW5r ID0gYXZjdHgtPmlucHV0c1swXTsKKyAgICBGaWx0ZXJMaW5rICAgICAgICAqaW5sID0gZmZfZmls dGVyX2xpbmsoaW5saW5rKTsKKyAgICBDVURBVlBQQ29udGV4dCAqY3R4ICAgID0gYXZjdHgtPnBy aXY7CisgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmlucHV0X2ZyYW1lczsKKyAgICBBVkJ1ZmZlclJl ZiAqaHdfZnJhbWVzX2N0eDsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqb3V0cHV0X2ZyYW1lczsK KyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgaW5fZm9ybWF0OworICAgIGludCBlcnI7CisKKyAgICBp ZiAoY3R4LT5waXBlbGluZV91bmluaXQpCisgICAgICAgIGN0eC0+cGlwZWxpbmVfdW5pbml0KGF2 Y3R4KTsKKworICAgIGlmICghY3R4LT5vdXRwdXRfd2lkdGgpCisgICAgICAgIGN0eC0+b3V0cHV0 X3dpZHRoICA9IGF2Y3R4LT5pbnB1dHNbMF0tPnc7CisgICAgaWYgKCFjdHgtPm91dHB1dF9oZWln aHQpCisgICAgICAgIGN0eC0+b3V0cHV0X2hlaWdodCA9IGF2Y3R4LT5pbnB1dHNbMF0tPmg7CisK KyAgICBvdXRsaW5rLT53ID0gY3R4LT5vdXRwdXRfd2lkdGg7CisgICAgb3V0bGluay0+aCA9IGN0 eC0+b3V0cHV0X2hlaWdodDsKKworICAgIGlmIChjdHgtPnBhc3N0aHJvdWdoKSB7CisgICAgICAg IGlmIChpbmwtPmh3X2ZyYW1lc19jdHgpCisgICAgICAgICAgICBvdXRsLT5od19mcmFtZXNfY3R4 ID0gYXZfYnVmZmVyX3JlZihpbmwtPmh3X2ZyYW1lc19jdHgpOworICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfVkVSQk9TRSwgIlVzaW5nIENVREEgZmlsdGVyIHBhc3N0aHJvdWdoIG1vZGUuXG4i KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYXZfYXNzZXJ0MChjdHgtPmlucHV0 X2ZyYW1lcyk7CisgICAgY3R4LT5kZXZpY2VfcmVmID0gYXZfYnVmZmVyX3JlZihjdHgtPmlucHV0 X2ZyYW1lcy0+ZGV2aWNlX3JlZik7CisgICAgaWYgKCFjdHgtPmRldmljZV9yZWYpIHsKKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBIGRldmljZSByZWZlcmVuY2UgY3JlYXRl ICIKKyAgICAgICAgICAgICAgICJmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKyAgICB9CisKKyAgICBpbnB1dF9mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQq KWN0eC0+aW5wdXRfZnJhbWVzX3JlZi0+ZGF0YTsKKyAgICBpbl9mb3JtYXQgPSBpbnB1dF9mcmFt ZXMtPnN3X2Zvcm1hdDsKKworICAgIGN0eC0+aHdjdHggPSBpbnB1dF9mcmFtZXMtPmRldmljZV9j dHgtPmh3Y3R4OworICAgIGN0eC0+Y3VkYV9kbCA9IGN0eC0+aHdjdHgtPmludGVybmFsLT5jdWRh X2RsOworICAgIGN0eC0+Y3Vfc3RyZWFtID0gY3R4LT5od2N0eC0+c3RyZWFtOworCisgICAgaWYg KGN0eC0+b3V0cHV0X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX05PTkUpCisgICAgICAgIGN0eC0+b3V0 cHV0X2Zvcm1hdCA9IGlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0OworCisgICAgLy8gU2V0dXAgZm9y bWF0IGluZm9ybWF0aW9uCisgICAgZXJyID0gZmZfY3VkYV92cHBfc2V0dXBfcGxhbmVzKGN0eCwg aW5fZm9ybWF0KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg IC8vIExvYWQgZmlsdGVyLXNwZWNpZmljIGZ1bmN0aW9ucworICAgIGlmIChjdHgtPmxvYWRfZnVu Y3Rpb25zKSB7CisgICAgICAgIGVyciA9IGN0eC0+bG9hZF9mdW5jdGlvbnMoYXZjdHgsIGluX2Zv cm1hdCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAg ICB9CisKKyAgICAvLyBCdWlsZCBmaWx0ZXIgcGFyYW1ldGVycworICAgIGlmIChjdHgtPmJ1aWxk X2ZpbHRlcl9wYXJhbXMpIHsKKyAgICAgICAgZXJyID0gY3R4LT5idWlsZF9maWx0ZXJfcGFyYW1z KGF2Y3R4KTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOwor ICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgaGFyZHdhcmUgZnJhbWVzIGNvbnRleHQgZm9yIG91 dHB1dAorICAgIGh3X2ZyYW1lc19jdHggPSBhdl9od2ZyYW1lX2N0eF9hbGxvYyhjdHgtPmRldmlj ZV9yZWYpOworICAgIGlmICghaHdfZnJhbWVzX2N0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKworICAgIG91dHB1dF9mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWh3X2Zy YW1lc19jdHgtPmRhdGE7CisgICAgb3V0cHV0X2ZyYW1lcy0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9D VURBOworICAgIG91dHB1dF9mcmFtZXMtPnN3X2Zvcm1hdCA9IGN0eC0+b3V0cHV0X2Zvcm1hdDsK KyAgICBvdXRwdXRfZnJhbWVzLT53aWR0aCA9IGN0eC0+b3V0cHV0X3dpZHRoOworICAgIG91dHB1 dF9mcmFtZXMtPmhlaWdodCA9IGN0eC0+b3V0cHV0X2hlaWdodDsKKworICAgIGVyciA9IGF2X2h3 ZnJhbWVfY3R4X2luaXQoaHdfZnJhbWVzX2N0eCk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAg ICAgYXZfYnVmZmVyX3VucmVmKCZod19mcmFtZXNfY3R4KTsKKyAgICAgICAgcmV0dXJuIGVycjsK KyAgICB9CisKKyAgICBhdl9idWZmZXJfdW5yZWYoJm91dGwtPmh3X2ZyYW1lc19jdHgpOworICAg IG91dGwtPmh3X2ZyYW1lc19jdHggPSBod19mcmFtZXNfY3R4OworCisgICAgcmV0dXJuIDA7Cit9 CisKK2ludCBmZl9jdWRhX3ZwcF9mb3JtYXRfaXNfc3VwcG9ydGVkKGVudW0gQVZQaXhlbEZvcm1h dCBmbXQsIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCAqc3VwcG9ydGVkX2Zvcm1hdHMsIGludCBu Yl9mb3JtYXRzKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5iX2Zvcm1h dHM7IGkrKykKKyAgICAgICAgaWYgKHN1cHBvcnRlZF9mb3JtYXRzW2ldID09IGZtdCkKKyAgICAg ICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfY3VkYV92cHBfc2V0 dXBfcGxhbmVzKENVREFWUFBDb250ZXh0ICpzLCBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0KQor eworICAgIHMtPmluX2ZtdCA9IGZvcm1hdDsKKyAgICBzLT5pbl9kZXNjID0gYXZfcGl4X2ZtdF9k ZXNjX2dldChzLT5pbl9mbXQpOworICAgIHMtPmluX3BsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRf cGxhbmVzKHMtPmluX2ZtdCk7CisKKyAgICAvLyBDbGVhciBwbGFuZSBpbmZvcm1hdGlvbgorICAg IG1lbXNldChzLT5pbl9wbGFuZV9kZXB0aHMsIDAsIHNpemVvZihzLT5pbl9wbGFuZV9kZXB0aHMp KTsKKyAgICBtZW1zZXQocy0+aW5fcGxhbmVfY2hhbm5lbHMsIDAsIHNpemVvZihzLT5pbl9wbGFu ZV9jaGFubmVscykpOworCisgICAgLy8gU2V0IHVwIHBsYW5lIGluZm9ybWF0aW9uCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBzLT5pbl9kZXNjLT5uYl9jb21wb25lbnRzOyBpKyspIHsKKyAgICAg ICAgaW50IGQgPSAocy0+aW5fZGVzYy0+Y29tcFtpXS5kZXB0aCArIDcpIC8gODsKKyAgICAgICAg aW50IHAgPSBzLT5pbl9kZXNjLT5jb21wW2ldLnBsYW5lOworICAgICAgICBzLT5pbl9wbGFuZV9j aGFubmVsc1twXSA9IEZGTUFYKHMtPmluX3BsYW5lX2NoYW5uZWxzW3BdLCBzLT5pbl9kZXNjLT5j b21wW2ldLnN0ZXAgLyBkKTsKKyAgICAgICAgcy0+aW5fcGxhbmVfZGVwdGhzW3BdID0gcy0+aW5f ZGVzYy0+Y29tcFtpXS5kZXB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZm X2N1ZGFfdnBwX2xvYWRfbW9kdWxlKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBDVURBVlBQQ29udGV4 dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0 eF9kYXRhLCB1bnNpZ25lZCBpbnQgcHR4X2xlbikKK3sKKyAgICBDVWNvbnRleHQgZHVtbXksIGN1 ZGFfY3R4ID0gcy0+aHdjdHgtPmN1ZGFfY3R4OworICAgIEN1ZGFGdW5jdGlvbnMgKmN1ID0gcy0+ Y3VkYV9kbDsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1Q3R4UHVz aEN1cnJlbnQoY3VkYV9jdHgpKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJl dDsKKworICAgIHJldCA9IGZmX2N1ZGFfbG9hZF9tb2R1bGUoY3R4LCBzLT5od2N0eCwgJnMtPmN1 X21vZHVsZSwgcHR4X2RhdGEsIHB0eF9sZW4pOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBn b3RvIGZhaWw7CisKK2ZhaWw6CisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVt bXkpKTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgZmZfY3VkYV92cHBfZ2V0X2Z1bmN0aW9u KEFWRmlsdGVyQ29udGV4dCAqY3R4LCBDVURBVlBQQ29udGV4dCAqcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDVWZ1bmN0aW9uICpmdW5jLCBjb25zdCBjaGFyICpmdW5jX25hbWUpCit7 CisgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5jdWRhX2RsOworICAgIGludCByZXQ7CisKKyAg ICByZXQgPSBDSEVDS19DVShjdS0+Y3VNb2R1bGVHZXRGdW5jdGlvbihmdW5jLCBzLT5jdV9tb2R1 bGUsIGZ1bmNfbmFtZSkpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19GQVRBTCwgIkZhaWxlZCB0byBsb2FkIGZ1bmN0aW9uOiAlc1xuIiwgZnVuY19uYW1l KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKwordm9pZCBmZl9jdWRhX3ZwcF9jdHhfaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4 KQoreworICAgIENVREFWUFBDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdjsKKworICAgIGN0eC0+ Y3VfbW9kdWxlID0gTlVMTDsKKyAgICBjdHgtPnBhc3N0aHJvdWdoID0gMDsKK30KKwordm9pZCBm Zl9jdWRhX3ZwcF9jdHhfdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgQ1VE QVZQUENvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2OworCisgICAgaWYgKGN0eC0+cGlwZWxpbmVf dW5pbml0KQorICAgICAgICBjdHgtPnBpcGVsaW5lX3VuaW5pdChhdmN0eCk7CisKKyAgICBhdl9i dWZmZXJfdW5yZWYoJmN0eC0+aW5wdXRfZnJhbWVzX3JlZik7CisgICAgYXZfYnVmZmVyX3VucmVm KCZjdHgtPmRldmljZV9yZWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvY3VkYS9jdWRh X3ZwcC5oIGIvbGliYXZmaWx0ZXIvY3VkYS9jdWRhX3ZwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjMzMzZmNmFmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZp bHRlci9jdWRhL2N1ZGFfdnBwLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMjUsIEZhZWV6IEthZGlyaSA8IGYxazJmYWVleiBhdCBnbWFpbCBkb3QgY29tPgorICoK KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEFWRklMVEVSX0NV REFfQ1VEQV9WUFBfSAorI2RlZmluZSBBVkZJTFRFUl9DVURBX0NVREFfVlBQX0gKKworI2luY2x1 ZGUgImxpYmF2dXRpbC9od2NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0 X2N1ZGFfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvY3VkYV9jaGVjay5oIgorI2lu Y2x1ZGUgImxpYmF2ZmlsdGVyL2F2ZmlsdGVyLmgiCisKKyNkZWZpbmUgQ0hFQ0tfQ1UoeCkgRkZf Q1VEQV9DSEVDS19ETChjdHgsIHMtPmh3Y3R4LT5pbnRlcm5hbC0+Y3VkYV9kbCwgeCkKKwordHlw ZWRlZiBzdHJ1Y3QgQ1VEQVZQUENvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwor CisgICAgQVZDVURBRGV2aWNlQ29udGV4dCAqaHdjdHg7CisgICAgQ3VkYUZ1bmN0aW9ucyAqY3Vk YV9kbDsKKyAgICBBVkJ1ZmZlclJlZiAqZGV2aWNlX3JlZjsKKworICAgIENVY29udGV4dCAgIGN1 X2N0eDsKKyAgICBDVW1vZHVsZSAgICBjdV9tb2R1bGU7CisgICAgQ1VzdHJlYW0gICAgY3Vfc3Ry ZWFtOworCisgICAgQVZCdWZmZXJSZWYgICAgICAgKmlucHV0X2ZyYW1lc19yZWY7CisgICAgQVZI V0ZyYW1lc0NvbnRleHQgKmlucHV0X2ZyYW1lczsKKworICAgIGVudW0gQVZQaXhlbEZvcm1hdCBv dXRwdXRfZm9ybWF0OworICAgIGludCBvdXRwdXRfd2lkdGg7ICAgLy8gY29tcHV0ZWQgd2lkdGgK KyAgICBpbnQgb3V0cHV0X2hlaWdodDsgIC8vIGNvbXB1dGVkIGhlaWdodAorCisgICAgaW50IHBh c3N0aHJvdWdoOworCisgICAgLy8gRm9ybWF0IGluZm9ybWF0aW9uCisgICAgZW51bSBBVlBpeGVs Rm9ybWF0IGluX2ZtdDsKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmluX2Rlc2M7Cisg ICAgaW50IGluX3BsYW5lczsKKyAgICBpbnQgaW5fcGxhbmVfZGVwdGhzWzRdOworICAgIGludCBp bl9wbGFuZV9jaGFubmVsc1s0XTsKKworICAgIC8vIEZ1bmN0aW9uIHBvaW50ZXJzIGZvciBmaWx0 ZXItc3BlY2lmaWMgb3BlcmF0aW9ucworICAgIGludCAoKmxvYWRfZnVuY3Rpb25zKShBVkZpbHRl ckNvbnRleHQgKmF2Y3R4LCBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0KTsKKyAgICBpbnQgKCpi dWlsZF9maWx0ZXJfcGFyYW1zKShBVkZpbHRlckNvbnRleHQgKmF2Y3R4KTsKKyAgICB2b2lkICgq cGlwZWxpbmVfdW5pbml0KShBVkZpbHRlckNvbnRleHQgKmF2Y3R4KTsKK30gQ1VEQVZQUENvbnRl eHQ7CisKKy8qKgorICogSW5pdGlhbGl6ZSBDVURBIFZQUCBjb250ZXh0CisgKi8KK3ZvaWQgZmZf Y3VkYV92cHBfY3R4X2luaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCk7CisKKy8qKgorICogVW5p bml0aWFsaXplIENVREEgVlBQIGNvbnRleHQKKyAqLwordm9pZCBmZl9jdWRhX3ZwcF9jdHhfdW5p bml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpOworCisvKioKKyAqIFF1ZXJ5IHN1cHBvcnRlZCBm b3JtYXRzIGZvciBDVURBIFZQUAorICovCitpbnQgZmZfY3VkYV92cHBfcXVlcnlfZm9ybWF0cyhj b25zdCBBVkZpbHRlckNvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZGaWx0ZXJGb3JtYXRzQ29uZmlnICoqY2ZnX2luLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVZGaWx0ZXJGb3JtYXRzQ29uZmlnICoqY2ZnX291dCk7CisKKy8qKgorICogQ29u ZmlndXJlIGlucHV0IGZvciBDVURBIFZQUAorICovCitpbnQgZmZfY3VkYV92cHBfY29uZmlnX2lu cHV0KEFWRmlsdGVyTGluayAqaW5saW5rKTsKKworLyoqCisgKiBDb25maWd1cmUgb3V0cHV0IGZv ciBDVURBIFZQUAorICovCitpbnQgZmZfY3VkYV92cHBfY29uZmlnX291dHB1dChBVkZpbHRlckxp bmsgKm91dGxpbmspOworCisvKioKKyAqIENoZWNrIGlmIGEgcGl4ZWwgZm9ybWF0IGlzIHN1cHBv cnRlZAorICovCitpbnQgZmZfY3VkYV92cHBfZm9ybWF0X2lzX3N1cHBvcnRlZChlbnVtIEFWUGl4 ZWxGb3JtYXQgZm10LCBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgKnN1cHBvcnRlZF9mb3JtYXRz LCBpbnQgbmJfZm9ybWF0cyk7CisKKy8qKgorICogU2V0dXAgcGxhbmUgaW5mb3JtYXRpb24gZm9y IGEgZ2l2ZW4gZm9ybWF0CisgKi8KK2ludCBmZl9jdWRhX3ZwcF9zZXR1cF9wbGFuZXMoQ1VEQVZQ UENvbnRleHQgKnMsIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQpOworCisvKioKKyAqIExvYWQg Q1VEQSBtb2R1bGUgZnJvbSBQVFggZGF0YQorICovCitpbnQgZmZfY3VkYV92cHBfbG9hZF9tb2R1 bGUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIENVREFWUFBDb250ZXh0ICpzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0eF9kYXRhLCB1bnNpZ25lZCBp bnQgcHR4X2xlbik7CisKKy8qKgorICogR2V0IENVREEgZnVuY3Rpb24gZnJvbSBsb2FkZWQgbW9k dWxlCisgKi8KK2ludCBmZl9jdWRhX3ZwcF9nZXRfZnVuY3Rpb24oQVZGaWx0ZXJDb250ZXh0ICpj dHgsIENVREFWUFBDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVWZ1 bmN0aW9uICpmdW5jLCBjb25zdCBjaGFyICpmdW5jX25hbWUpOworCisjZW5kaWYgLyogQVZGSUxU RVJfQ1VEQV9DVURBX1ZQUF9IICovCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl90cmFuc3Bv c2VfY3VkYS5jIGIvbGliYXZmaWx0ZXIvdmZfdHJhbnNwb3NlX2N1ZGEuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYjc5NTljZTBmCi0tLSAvZGV2L251bGwKKysrIGIv bGliYXZmaWx0ZXIvdmZfdHJhbnNwb3NlX2N1ZGEuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAyNSwgRmFlZXogS2FkaXJpIDwgZjFrMmZhZWV6IGF0IGdtYWlsIGRv dCBjb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICog QGZpbGUKKyAqIEhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zcG9zZSBmaWx0ZXIgYmFzZWQgb24g Q1VEQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAibGliYXZ1 dGlsL2NvbW1vbi5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCisjaW5jbHVkZSAi bGliYXZ1dGlsL2h3Y29udGV4dC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHRfY3Vk YV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9jdWRhX2NoZWNrLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0Lmgi CisjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCisKKyNpbmNsdWRlICJmaWx0ZXJzLmgi CisjaW5jbHVkZSAiZm9ybWF0cy5oIgorI2luY2x1ZGUgInZpZGVvLmgiCisjaW5jbHVkZSAidHJh bnNwb3NlLmgiCisjaW5jbHVkZSAiY3VkYS9jdWRhX3ZwcC5oIgorCitzdGF0aWMgY29uc3QgZW51 bSBBVlBpeGVsRm9ybWF0IHN1cHBvcnRlZF9mb3JtYXRzW10gPSB7CisgICAgQVZfUElYX0ZNVF9Z VVY0MjBQLAorICAgIEFWX1BJWF9GTVRfTlYxMiwKKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAsCisg ICAgQVZfUElYX0ZNVF9QMDEwLAorICAgIEFWX1BJWF9GTVRfUDAxNiwKKyAgICBBVl9QSVhfRk1U X1lVVjQ0NFAxNiwKKyAgICBBVl9QSVhfRk1UXzBSR0IzMiwKKyAgICBBVl9QSVhfRk1UXzBCR1Iz MiwKKyAgICBBVl9QSVhfRk1UX1JHQjMyLAorICAgIEFWX1BJWF9GTVRfQkdSMzIsCit9OworCisj ZGVmaW5lIERJVl9VUChhLCBiKSAoICgoYSkgKyAoYikgLSAxKSAvIChiKSApCisjZGVmaW5lIEJM T0NLWCAzMgorI2RlZmluZSBCTE9DS1kgMTYKKwordHlwZWRlZiBzdHJ1Y3QgVHJhbnNwb3NlQ1VE QUNvbnRleHQgeworICAgIENVREFWUFBDb250ZXh0IHZwcF9jdHg7IC8vIG11c3QgYmUgdGhlIGZp cnN0IGZpZWxkCisKKyAgICBpbnQgcGFzc3Rocm91Z2g7ICAgICAgICAgLy8gUGFzc3Rocm91Z2hU eXBlLCBsYW5kc2NhcGUgcGFzc3Rocm91Z2ggbW9kZSBlbmFibGVkCisgICAgaW50IGRpcjsgICAg ICAgICAgICAgICAgIC8vIFRyYW5zcG9zZURpcgorCisgICAgLy8gQ1VEQSBmdW5jdGlvbnMgZm9y IGRpZmZlcmVudCBvcGVyYXRpb25zCisgICAgQ1VmdW5jdGlvbiBjdV9mdW5jX3RyYW5zcG9zZTsK KyAgICBDVWZ1bmN0aW9uIGN1X2Z1bmNfdHJhbnNwb3NlX3V2OworfSBUcmFuc3Bvc2VDVURBQ29u dGV4dDsKKworc3RhdGljIGludCBmb3JtYXRfaXNfc3VwcG9ydGVkKGVudW0gQVZQaXhlbEZvcm1h dCBmbXQpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxF TVMoc3VwcG9ydGVkX2Zvcm1hdHMpOyBpKyspCisgICAgICAgIGlmIChzdXBwb3J0ZWRfZm9ybWF0 c1tpXSA9PSBmbXQpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGF2X2NvbGQgaW50IHRyYW5zcG9zZV9jdWRhX2xvYWRfZnVuY3Rpb25zKEFWRmlsdGVy Q29udGV4dCAqYXZjdHgsIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQpCit7CisgICAgVHJhbnNw b3NlQ1VEQUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2OworICAgIENVREFWUFBDb250ZXh0ICp2 cHBfY3R4ID0gJmN0eC0+dnBwX2N0eDsKKyAgICBpbnQgcmV0OworICAgIGNoYXIgYnVmWzEyOF07 CisKKyAgICBjb25zdCBjaGFyICpmbXRfbmFtZSA9IGF2X2dldF9waXhfZm10X25hbWUoZm9ybWF0 KTsKKworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGZmX3ZmX3RyYW5zcG9zZV9jdWRh X3B0eF9kYXRhW107CisgICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBmZl92Zl90cmFuc3Bv c2VfY3VkYV9wdHhfbGVuOworCisgICAgcmV0ID0gZmZfY3VkYV92cHBfbG9hZF9tb2R1bGUoYXZj dHgsIHZwcF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZfdmZfdHJh bnNwb3NlX2N1ZGFfcHR4X2RhdGEsIGZmX3ZmX3RyYW5zcG9zZV9jdWRhX3B0eF9sZW4pOworICAg IGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgLy8gTG9hZCB0cmFuc3Bv c2UgZnVuY3Rpb25zCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlRyYW5zcG9zZV8l cyIsIGZtdF9uYW1lKTsKKyAgICByZXQgPSBmZl9jdWRhX3ZwcF9nZXRfZnVuY3Rpb24oYXZjdHgs IHZwcF9jdHgsICZjdHgtPmN1X2Z1bmNfdHJhbnNwb3NlLCBidWYpOworICAgIGlmIChyZXQgPCAw KSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0ZBVEFMLCAiVW5zdXBwb3J0ZWQgZm9y bWF0IGZvciB0cmFuc3Bvc2U6ICVzXG4iLCBmbXRfbmFtZSk7CisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT1NZUyk7CisgICAgfQorCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlRy YW5zcG9zZV8lc191diIsIGZtdF9uYW1lKTsKKyAgICByZXQgPSBmZl9jdWRhX3ZwcF9nZXRfZnVu Y3Rpb24oYXZjdHgsIHZwcF9jdHgsICZjdHgtPmN1X2Z1bmNfdHJhbnNwb3NlX3V2LCBidWYpOwor ICAgIGlmIChyZXQgPCAwICYmIHZwcF9jdHgtPmluX3BsYW5lcyA+IDEpIHsKKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIlVWIGZ1bmN0aW9uIG5vdCBmb3VuZCBmb3IgZm9y bWF0OiAlc1xuIiwgZm10X25hbWUpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHRyYW5zcG9zZV9jdWRhX2J1aWxkX2ZpbHRlcl9wYXJhbXMoQVZGaWx0ZXJDb250ZXh0 ICphdmN0eCkKK3sKKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXY7 CisgICAgQ1VEQVZQUENvbnRleHQgKnZwcF9jdHggPSAmY3R4LT52cHBfY3R4OworCisgICAgaWYg KCFmb3JtYXRfaXNfc3VwcG9ydGVkKHZwcF9jdHgtPmluX2ZtdCkpIHsKKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCBpbnB1dCBmb3JtYXQ6ICVzXG4iLAor ICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZSh2cHBfY3R4LT5pbl9mbXQpKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGF2X2NvbGQgaW50IHRyYW5zcG9zZV9jdWRhX2tlcm5lbChBVkZpbHRlckNvbnRl eHQgKmF2Y3R4LCBDVWZ1bmN0aW9uIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ1V0ZXhPYmplY3Qgc3JjX3RleFs0XSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpvdXRfZnJhbWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVp Z2h0LCBpbnQgZHN0X3BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBzcmNfd2lkdGgsIGludCBzcmNfaGVpZ2h0LCBpbnQgZGlyKQoreworICAgIFRyYW5z cG9zZUNVREFDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdjsKKyAgICBDVURBVlBQQ29udGV4dCAq cyA9ICZjdHgtPnZwcF9jdHg7CisgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5jdWRhX2RsOwor CisgICAgQ1VkZXZpY2VwdHIgZHN0X2RldnB0cls0XSA9IHsKKyAgICAgICAgKENVZGV2aWNlcHRy KW91dF9mcmFtZS0+ZGF0YVswXSwgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0YVsxXSwKKyAg ICAgICAgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0YVsyXSwgKENVZGV2aWNlcHRyKW91dF9m cmFtZS0+ZGF0YVszXQorICAgIH07CisKKyAgICB2b2lkICphcmdzW10gPSB7CisgICAgICAgICZz cmNfdGV4WzBdLCAmc3JjX3RleFsxXSwgJnNyY190ZXhbMl0sICZzcmNfdGV4WzNdLAorICAgICAg ICAmZHN0X2RldnB0clswXSwgJmRzdF9kZXZwdHJbMV0sICZkc3RfZGV2cHRyWzJdLCAmZHN0X2Rl dnB0clszXSwKKyAgICAgICAgJndpZHRoLCAmaGVpZ2h0LCAmZHN0X3BpdGNoLAorICAgICAgICAm ZHN0X3dpZHRoLCAmZHN0X2hlaWdodCwKKyAgICAgICAgJnNyY193aWR0aCwgJnNyY19oZWlnaHQs CisgICAgICAgICZkaXIKKyAgICB9OworCisgICAgcmV0dXJuIENIRUNLX0NVKGN1LT5jdUxhdW5j aEtlcm5lbChmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJVl9V UCh3aWR0aCwgQkxPQ0tYKSwgRElWX1VQKGhlaWdodCwgQkxPQ0tZKSwgMSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCTE9DS1gsIEJMT0NLWSwgMSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzLT5jdV9zdHJlYW0sIGFyZ3MsIE5VTEwpKTsK K30KKworc3RhdGljIGludCB0cmFuc3Bvc2VfY3VkYV9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5r ICppbmxpbmssIEFWRnJhbWUgKmlucHV0X2ZyYW1lKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAq YXZjdHggICAgID0gaW5saW5rLT5kc3Q7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rICAgICAg PSBhdmN0eC0+b3V0cHV0c1swXTsKKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ICA9IGF2 Y3R4LT5wcml2OworICAgIENVREFWUFBDb250ZXh0ICpzICAgICAgICAgID0gJmN0eC0+dnBwX2N0 eDsKKyAgICBDdWRhRnVuY3Rpb25zICpjdSAgICAgICAgICA9IHMtPmN1ZGFfZGw7CisgICAgQVZG cmFtZSAqb3V0cHV0X2ZyYW1lICAgICAgPSBOVUxMOworICAgIENVdGV4T2JqZWN0IHRleFs0XSA9 IHsgMCwgMCwgMCwgMCB9OworICAgIGludCByZXQgPSAwOworICAgIGludCBpOworICAgIENVY29u dGV4dCBkdW1teTsKKworICAgIGlmIChjdHgtPnBhc3N0aHJvdWdoKQorICAgICAgICByZXR1cm4g ZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIGlucHV0X2ZyYW1lKTsKKworICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0RFQlVHLCAiRmlsdGVyIGlucHV0OiAlcywgJXV4JXUgKCUiUFJJZDY0IikuXG4i LAorICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKGlucHV0X2ZyYW1lLT5mb3JtYXQpLAor ICAgICAgICAgICBpbnB1dF9mcmFtZS0+d2lkdGgsIGlucHV0X2ZyYW1lLT5oZWlnaHQsIGlucHV0 X2ZyYW1lLT5wdHMpOworCisgICAgLy8gUHVzaCBDVURBIGNvbnRleHQKKyAgICByZXQgPSBDSEVD S19DVShjdS0+Y3VDdHhQdXNoQ3VycmVudChzLT5od2N0eC0+Y3VkYV9jdHgpKTsKKyAgICBpZiAo cmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIG91dHB1dF9mcmFtZSA9IGZmX2dl dF92aWRlb19idWZmZXIob3V0bGluaywgcy0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcy0+b3V0cHV0X2hlaWdodCk7CisgICAgaWYgKCFvdXRw dXRfZnJhbWUpIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3Rv IGZhaWw7CisgICAgfQorCisgICAgcmV0ID0gYXZfZnJhbWVfY29weV9wcm9wcyhvdXRwdXRfZnJh bWUsIGlucHV0X2ZyYW1lKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBmYWlsOwor CisgICAgLy8gQ3JlYXRlIHRleHR1cmUgb2JqZWN0cyBmb3IgaW5wdXQKKyAgICBmb3IgKGkgPSAw OyBpIDwgcy0+aW5fcGxhbmVzOyBpKyspIHsKKyAgICAgICAgQ1VEQV9URVhUVVJFX0RFU0MgdGV4 X2Rlc2MgPSB7CisgICAgICAgICAgICAuZmlsdGVyTW9kZSA9IENVX1RSX0ZJTFRFUl9NT0RFX1BP SU5ULAorICAgICAgICAgICAgLmZsYWdzID0gQ1VfVFJTRl9SRUFEX0FTX0lOVEVHRVIsCisgICAg ICAgIH07CisKKyAgICAgICAgQ1VEQV9SRVNPVVJDRV9ERVNDIHJlc19kZXNjID0geworICAgICAg ICAgICAgLnJlc1R5cGUgPSBDVV9SRVNPVVJDRV9UWVBFX1BJVENIMkQsCisgICAgICAgICAgICAu cmVzLnBpdGNoMkQuZm9ybWF0ID0gcy0+aW5fcGxhbmVfZGVwdGhzW2ldIDw9IDggPworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVX0FEX0ZPUk1BVF9VTlNJR05FRF9JTlQ4IDoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVV9BRF9GT1JNQVRfVU5TSUdORURf SU5UMTYsCisgICAgICAgICAgICAucmVzLnBpdGNoMkQubnVtQ2hhbm5lbHMgPSBzLT5pbl9wbGFu ZV9jaGFubmVsc1tpXSwKKyAgICAgICAgICAgIC5yZXMucGl0Y2gyRC5waXRjaEluQnl0ZXMgPSBp bnB1dF9mcmFtZS0+bGluZXNpemVbaV0sCisgICAgICAgICAgICAucmVzLnBpdGNoMkQuZGV2UHRy ID0gKENVZGV2aWNlcHRyKWlucHV0X2ZyYW1lLT5kYXRhW2ldLAorICAgICAgICB9OworCisgICAg ICAgIGlmIChpID09IDEgfHwgaSA9PSAyKSB7CisgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0 Y2gyRC53aWR0aCA9IEFWX0NFSUxfUlNISUZUKGlucHV0X2ZyYW1lLT53aWR0aCwgcy0+aW5fZGVz Yy0+bG9nMl9jaHJvbWFfdyk7CisgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0Y2gyRC5oZWln aHQgPSBBVl9DRUlMX1JTSElGVChpbnB1dF9mcmFtZS0+aGVpZ2h0LCBzLT5pbl9kZXNjLT5sb2cy X2Nocm9tYV9oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc19kZXNjLnJlcy5w aXRjaDJELndpZHRoID0gaW5wdXRfZnJhbWUtPndpZHRoOworICAgICAgICAgICAgcmVzX2Rlc2Mu cmVzLnBpdGNoMkQuaGVpZ2h0ID0gaW5wdXRfZnJhbWUtPmhlaWdodDsKKyAgICAgICAgfQorCisg ICAgICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdVRleE9iamVjdENyZWF0ZSgmdGV4W2ldLCAmcmVz X2Rlc2MsICZ0ZXhfZGVzYywgTlVMTCkpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg ICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvLyBQcm9jZXNzIGx1bWEgcGxhbmUKKyAgICBy ZXQgPSB0cmFuc3Bvc2VfY3VkYV9rZXJuZWwoYXZjdHgsIGN0eC0+Y3VfZnVuY190cmFuc3Bvc2Us IHRleCwgb3V0cHV0X2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1 dF9mcmFtZS0+d2lkdGgsIG91dHB1dF9mcmFtZS0+aGVpZ2h0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG91dHB1dF9mcmFtZS0+d2lkdGgsIG91dHB1dF9mcmFtZS0+aGVpZ2h0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mcmFtZS0+bGluZXNpemVbMF0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZnJhbWUtPndpZHRoLCBpbnB1 dF9mcmFtZS0+aGVpZ2h0LCBjdHgtPmRpcik7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBkdXJpbmcgbHVtYSB0cmFuc3Bvc2U6 ICVkXG4iLCByZXQpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLy8gUHJvY2Vz cyBjaHJvbWEgcGxhbmVzIGlmIHByZXNlbnQKKyAgICBpZiAocy0+aW5fcGxhbmVzID4gMSkgewor ICAgICAgICByZXQgPSB0cmFuc3Bvc2VfY3VkYV9rZXJuZWwoYXZjdHgsIGN0eC0+Y3VfZnVuY190 cmFuc3Bvc2VfdXYsIHRleCwgb3V0cHV0X2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBVl9DRUlMX1JTSElGVChvdXRwdXRfZnJhbWUtPndpZHRoLCBzLT5pbl9kZXNj LT5sb2cyX2Nocm9tYV93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZf Q0VJTF9SU0hJRlQob3V0cHV0X2ZyYW1lLT5oZWlnaHQsIHMtPmluX2Rlc2MtPmxvZzJfY2hyb21h X2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZnJhbWUtPndp ZHRoLCBvdXRwdXRfZnJhbWUtPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3V0cHV0X2ZyYW1lLT5saW5lc2l6ZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVZfQ0VJTF9SU0hJRlQoaW5wdXRfZnJhbWUtPndpZHRoLCBzLT5pbl9kZXNj LT5sb2cyX2Nocm9tYV93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZf Q0VJTF9SU0hJRlQoaW5wdXRfZnJhbWUtPmhlaWdodCwgcy0+aW5fZGVzYy0+bG9nMl9jaHJvbWFf aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZGlyKTsKKyAgICAg ICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRXJyb3IgZHVyaW5nIGNocm9tYSB0cmFuc3Bvc2U6ICVkXG4iLCByZXQpOworICAgICAgICAg ICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIHNhbXBsZSBh c3BlY3QgcmF0aW8KKyAgICBpZiAoaW5wdXRfZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW8ubnVt ID09IDApIHsKKyAgICAgICAgb3V0cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gaW5w dXRfZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW87CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3V0 cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bSA9IGlucHV0X2ZyYW1lLT5zYW1wbGVf YXNwZWN0X3JhdGlvLmRlbjsKKyAgICAgICAgb3V0cHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3Jh dGlvLmRlbiA9IGlucHV0X2ZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bTsKKyAgICB9CisK KyAgICBhdl9mcmFtZV9mcmVlKCZpbnB1dF9mcmFtZSk7CisKKyAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19ERUJVRywgIkZpbHRlciBvdXRwdXQ6ICVzLCAldXgldSAoJSJQUklkNjQiKS5cbiIsCisg ICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUob3V0cHV0X2ZyYW1lLT5mb3JtYXQpLAorICAg ICAgICAgICBvdXRwdXRfZnJhbWUtPndpZHRoLCBvdXRwdXRfZnJhbWUtPmhlaWdodCwgb3V0cHV0 X2ZyYW1lLT5wdHMpOworCisgICAgLy8gQ2xlYW51cCB0ZXh0dXJlIG9iamVjdHMKKyAgICBmb3Ig KGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVModGV4KTsgaSsrKQorICAgICAgICBpZiAodGV4W2ld KQorICAgICAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1VGV4T2JqZWN0RGVzdHJveSh0ZXhbaV0pKTsK KworICAgIENIRUNLX0NVKGN1LT5jdUN0eFBvcEN1cnJlbnQoJmR1bW15KSk7CisgICAgcmV0dXJu IGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXRwdXRfZnJhbWUpOworCitmYWlsOgorICAgIGZv ciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyh0ZXgpOyBpKyspCisgICAgICAgIGlmICh0ZXhb aV0pCisgICAgICAgICAgICBDSEVDS19DVShjdS0+Y3VUZXhPYmplY3REZXN0cm95KHRleFtpXSkp OworCisgICAgYXZfZnJhbWVfZnJlZSgmaW5wdXRfZnJhbWUpOworICAgIGF2X2ZyYW1lX2ZyZWUo Jm91dHB1dF9mcmFtZSk7CisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkp KTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0cmFuc3Bvc2VfY3VkYV91bmlu aXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAq Y3R4ICA9IGF2Y3R4LT5wcml2OworICAgIENVREFWUFBDb250ZXh0ICpzICAgICAgICAgID0gJmN0 eC0+dnBwX2N0eDsKKworICAgIGlmIChzLT5jdV9tb2R1bGUpIHsKKyAgICAgICAgQ3VkYUZ1bmN0 aW9ucyAqY3UgPSBzLT5jdWRhX2RsOworICAgICAgICBDVWNvbnRleHQgZHVtbXk7CisKKyAgICAg ICAgaWYgKHMtPmh3Y3R4KSB7CisgICAgICAgICAgICBDSEVDS19DVShjdS0+Y3VDdHhQdXNoQ3Vy cmVudChzLT5od2N0eC0+Y3VkYV9jdHgpKTsKKyAgICAgICAgICAgIENIRUNLX0NVKGN1LT5jdU1v ZHVsZVVubG9hZChzLT5jdV9tb2R1bGUpKTsKKyAgICAgICAgICAgIHMtPmN1X21vZHVsZSA9IE5V TEw7CisgICAgICAgICAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1teSkpOwor ICAgICAgICB9CisgICAgfQorCisgICAgYXZfYnVmZmVyX3VucmVmKCZzLT5kZXZpY2VfcmVmKTsK KyAgICBzLT5od2N0eCA9IE5VTEw7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCB0cmFuc3Bvc2Vf Y3VkYV9pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgVHJhbnNwb3NlQ1VEQUNv bnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2OworICAgIENVREFWUFBDb250ZXh0ICp2cHBfY3R4ID0g JmN0eC0+dnBwX2N0eDsKKworICAgIGZmX2N1ZGFfdnBwX2N0eF9pbml0KGF2Y3R4KTsKKyAgICB2 cHBfY3R4LT5sb2FkX2Z1bmN0aW9ucyA9IHRyYW5zcG9zZV9jdWRhX2xvYWRfZnVuY3Rpb25zOwor ICAgIHZwcF9jdHgtPmJ1aWxkX2ZpbHRlcl9wYXJhbXMgPSB0cmFuc3Bvc2VfY3VkYV9idWlsZF9m aWx0ZXJfcGFyYW1zOworICAgIHZwcF9jdHgtPnBpcGVsaW5lX3VuaW5pdCA9IHRyYW5zcG9zZV9j dWRhX3VuaW5pdDsKKyAgICB2cHBfY3R4LT5vdXRwdXRfZm9ybWF0ID0gQVZfUElYX0ZNVF9OT05F OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNwb3NlX2N1ZGFfY29uZmln X291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICph dmN0eCAgICAgPSBvdXRsaW5rLT5zcmM7CisgICAgVHJhbnNwb3NlQ1VEQUNvbnRleHQgKmN0eCAg PSBhdmN0eC0+cHJpdjsKKyAgICBDVURBVlBQQ29udGV4dCAqdnBwX2N0eCAgICA9ICZjdHgtPnZw cF9jdHg7CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgICAgICAgPSBhdmN0eC0+aW5wdXRzWzBd OworCisgICAgaWYgKChpbmxpbmstPncgPj0gaW5saW5rLT5oICYmIGN0eC0+cGFzc3Rocm91Z2gg PT0gVFJBTlNQT1NFX1BUX1RZUEVfTEFORFNDQVBFKSB8fAorICAgICAgICAoaW5saW5rLT53IDw9 IGlubGluay0+aCAmJiBjdHgtPnBhc3N0aHJvdWdoID09IFRSQU5TUE9TRV9QVF9UWVBFX1BPUlRS QUlUKSkgeworICAgICAgICB2cHBfY3R4LT5wYXNzdGhyb3VnaCA9IDE7CisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsCisgICAgICAgICAgICAgICAidzolZCBoOiVkIC0+IHc6 JWQgaDolZCAocGFzc3Rocm91Z2ggbW9kZSlcbiIsCisgICAgICAgICAgICAgICBpbmxpbmstPncs IGlubGluay0+aCwgaW5saW5rLT53LCBpbmxpbmstPmgpOworICAgICAgICByZXR1cm4gZmZfY3Vk YV92cHBfY29uZmlnX291dHB1dChvdXRsaW5rKTsKKyAgICB9CisgICAgY3R4LT5wYXNzdGhyb3Vn aCA9IFRSQU5TUE9TRV9QVF9UWVBFX05PTkU7CisKKyAgICAvLyBGb3IgdHJhbnNwb3NlIG9wZXJh dGlvbnMgdGhhdCBzd2FwIGRpbWVuc2lvbnMKKyAgICBzd2l0Y2ggKGN0eC0+ZGlyKSB7CisgICAg Y2FzZSBUUkFOU1BPU0VfQ0NMT0NLX0ZMSVA6CisgICAgY2FzZSBUUkFOU1BPU0VfQ0NMT0NLOgor ICAgIGNhc2UgVFJBTlNQT1NFX0NMT0NLOgorICAgIGNhc2UgVFJBTlNQT1NFX0NMT0NLX0ZMSVA6 CisgICAgICAgIHZwcF9jdHgtPm91dHB1dF93aWR0aCAgPSBhdmN0eC0+aW5wdXRzWzBdLT5oOwor ICAgICAgICB2cHBfY3R4LT5vdXRwdXRfaGVpZ2h0ID0gYXZjdHgtPmlucHV0c1swXS0+dzsKKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJzd2FwIHdpZHRoIGFuZCBoZWlnaHQg Zm9yIGNsb2NrL2NjbG9jayByb3RhdGlvblxuIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1 bHQ6CisgICAgICAgIHZwcF9jdHgtPm91dHB1dF93aWR0aCAgPSBhdmN0eC0+aW5wdXRzWzBdLT53 OworICAgICAgICB2cHBfY3R4LT5vdXRwdXRfaGVpZ2h0ID0gYXZjdHgtPmlucHV0c1swXS0+aDsK KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwKKyAgICAgICAgICAgInc6JWQgaDolZCBkaXI6JWQgLT4gdzolZCBoOiVkIHJvdGF0aW9uOiVz IHZmbGlwOiVkXG4iLAorICAgICAgICAgICBpbmxpbmstPncsIGlubGluay0+aCwgY3R4LT5kaXIs IHZwcF9jdHgtPm91dHB1dF93aWR0aCwgdnBwX2N0eC0+b3V0cHV0X2hlaWdodCwKKyAgICAgICAg ICAgY3R4LT5kaXIgPT0gMSB8fCBjdHgtPmRpciA9PSAzID8gImNsb2Nrd2lzZSIgOiAiY291bnRl cmNsb2Nrd2lzZSIsCisgICAgICAgICAgIGN0eC0+ZGlyID09IDAgfHwgY3R4LT5kaXIgPT0gMyk7 CisKKyAgICByZXR1cm4gZmZfY3VkYV92cHBfY29uZmlnX291dHB1dChvdXRsaW5rKTsKK30KKwor c3RhdGljIEFWRnJhbWUgKmdldF92aWRlb19idWZmZXIoQVZGaWx0ZXJMaW5rICppbmxpbmssIGlu dCB3LCBpbnQgaCkKK3sKKyAgICBUcmFuc3Bvc2VDVURBQ29udGV4dCAqY3R4ID0gaW5saW5rLT5k c3QtPnByaXY7CisKKyAgICByZXR1cm4gY3R4LT5wYXNzdGhyb3VnaCA/CisgICAgICAgIGZmX251 bGxfZ2V0X3ZpZGVvX2J1ZmZlcihpbmxpbmssIHcsIGgpIDoKKyAgICAgICAgZmZfZGVmYXVsdF9n ZXRfdmlkZW9fYnVmZmVyKGlubGluaywgdywgaCk7Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9m ZnNldG9mKFRyYW5zcG9zZUNVREFDb250ZXh0LCB4KQorI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZM QUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0pCitzdGF0aWMgY29u c3QgQVZPcHRpb24gdHJhbnNwb3NlX2N1ZGFfb3B0aW9uc1tdID0geworICAgIHsgImRpciIsICJz ZXQgdHJhbnNwb3NlIGRpcmVjdGlvbiIsIE9GRlNFVChkaXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsg Lmk2NCA9IFRSQU5TUE9TRV9DQ0xPQ0tfRkxJUCB9LCAwLCA2LCBGTEFHUywgLnVuaXQgPSAiZGly IiB9LAorICAgICAgICB7ICJjY2xvY2tfZmxpcCIsICAgInJvdGF0ZSBjb3VudGVyLWNsb2Nrd2lz ZSB3aXRoIHZlcnRpY2FsIGZsaXAiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJB TlNQT1NFX0NDTE9DS19GTElQIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAg ICAgICB7ICJjbG9jayIsICAgICAgICAgInJvdGF0ZSBjbG9ja3dpc2UiLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NM T0NLICAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJj Y2xvY2siLCAgICAgICAgInJvdGF0ZSBjb3VudGVyLWNsb2Nrd2lzZSIsICAgICAgICAgICAgICAg ICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NDTE9DSyAgICAg IH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJjbG9ja19mbGlw IiwgICAgInJvdGF0ZSBjbG9ja3dpc2Ugd2l0aCB2ZXJ0aWNhbCBmbGlwIiwgICAgICAgICAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NMT0NLX0ZMSVAgIH0sIC5mbGFn cz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJyZXZlcnNhbCIsICAgICAgInJv dGF0ZSBieSBoYWxmLXR1cm4iLCAgICAgICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX1JFVkVSU0FMICAgIH0sIC5mbGFncz1GTEFHUywg LnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJoZmxpcCIsICAgICAgICAgImZsaXAgaG9yaXpv bnRhbGx5IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwg eyAuaTY0ID0gVFJBTlNQT1NFX0hGTElQICAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAi ZGlyIiB9LAorICAgICAgICB7ICJ2ZmxpcCIsICAgICAgICAgImZsaXAgdmVydGljYWxseSIsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0g VFJBTlNQT1NFX1ZGTElQICAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVuaXQgPSAiZGlyIiB9LAor CisgICAgeyAicGFzc3Rocm91Z2giLCAiZG8gbm90IGFwcGx5IHRyYW5zcG9zaXRpb24gaWYgdGhl IGlucHV0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBnZW9tZXRyeSIsCisgICAgICBPRkZTRVQocGFz c3Rocm91Z2gpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PVRSQU5TUE9TRV9QVF9UWVBFX05PTkV9 LCAgMCwgSU5UX01BWCwgRkxBR1MsIC51bml0ID0gInBhc3N0aHJvdWdoIiB9LAorICAgICAgICB7 ICJub25lIiwgICAgICAiYWx3YXlzIGFwcGx5IHRyYW5zcG9zaXRpb24iLCAgIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2ND1UUkFOU1BPU0VfUFRfVFlQRV9OT05FfSwgICAgICBJTlRfTUlOLCBJ TlRfTUFYLCBGTEFHUywgLnVuaXQgPSAicGFzc3Rocm91Z2giIH0sCisgICAgICAgIHsgInBvcnRy YWl0IiwgICJwcmVzZXJ2ZSBwb3J0cmFpdCBnZW9tZXRyeSIsICAgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0PVRSQU5TUE9TRV9QVF9UWVBFX1BPUlRSQUlUfSwgIElOVF9NSU4sIElOVF9NQVgs IEZMQUdTLCAudW5pdCA9ICJwYXNzdGhyb3VnaCIgfSwKKyAgICAgICAgeyAibGFuZHNjYXBlIiwg InByZXNlcnZlIGxhbmRzY2FwZSBnZW9tZXRyeSIsICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5p NjQ9VFJBTlNQT1NFX1BUX1RZUEVfTEFORFNDQVBFfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1Ms IC51bml0ID0gInBhc3N0aHJvdWdoIiB9LAorCisgICAgeyBOVUxMIH0KK307CisKK0FWRklMVEVS X0RFRklORV9DTEFTUyh0cmFuc3Bvc2VfY3VkYSk7CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBh ZCB0cmFuc3Bvc2VfY3VkYV9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAg ICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklE RU8sCisgICAgICAgIC5maWx0ZXJfZnJhbWUgPSB0cmFuc3Bvc2VfY3VkYV9maWx0ZXJfZnJhbWUs CisgICAgICAgIC5nZXRfYnVmZmVyLnZpZGVvID0gZ2V0X3ZpZGVvX2J1ZmZlciwKKyAgICAgICAg LmNvbmZpZ19wcm9wcyA9IGZmX2N1ZGFfdnBwX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKwor c3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHRyYW5zcG9zZV9jdWRhX291dHB1dHNbXSA9IHsKKyAg ICB7CisgICAgICAgIC5uYW1lID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFf VFlQRV9WSURFTywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9IHRyYW5zcG9zZV9jdWRhX2NvbmZp Z19vdXRwdXQsCisgICAgfSwKK307CisKK2NvbnN0IEZGRmlsdGVyIGZmX3ZmX3RyYW5zcG9zZV9j dWRhID0geworICAgIC5wLm5hbWUgICAgICAgICA9ICJ0cmFuc3Bvc2VfY3VkYSIsCisgICAgLnAu ZGVzY3JpcHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkNVREEgYWNjZWxlcmF0ZWQgdmlk ZW8gdHJhbnNwb3NlIiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJnRyYW5zcG9zZV9jdWRhX2Ns YXNzLAorICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihUcmFuc3Bvc2VDVURBQ29udGV4dCks CisgICAgLmluaXQgICAgICAgICAgID0gdHJhbnNwb3NlX2N1ZGFfaW5pdCwKKyAgICAudW5pbml0 ICAgICAgICAgPSBmZl9jdWRhX3ZwcF9jdHhfdW5pbml0LAorICAgIEZJTFRFUl9JTlBVVFModHJh bnNwb3NlX2N1ZGFfaW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyh0cmFuc3Bvc2VfY3VkYV9v dXRwdXRzKSwKKyAgICBGSUxURVJfUVVFUllfRlVOQzIoZmZfY3VkYV92cHBfcXVlcnlfZm9ybWF0 cyksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwK K307CmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfY3VkYS5jdSBiL2xpYmF2 ZmlsdGVyL3ZmX3RyYW5zcG9zZV9jdWRhLmN1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjEzODRjMjI4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZpbHRlci92Zl90 cmFuc3Bvc2VfY3VkYS5jdQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAyNSwgRmFlZXogS2FkaXJpIDwgZjFrMmZhZWV6IGF0IGdtYWlsIGRvdCBjb20+CisgKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjdWRhL3ZlY3Rvcl9o ZWxwZXJzLmN1aCIKKworLy8gVHJhbnNwb3NlIGRpcmVjdGlvbiBjb25zdGFudHMgKGZyb20gdHJh bnNwb3NlLmgpCisjZGVmaW5lIFRSQU5TUE9TRV9DQ0xPQ0tfRkxJUCAwCisjZGVmaW5lIFRSQU5T UE9TRV9DTE9DSyAgICAgICAxCisjZGVmaW5lIFRSQU5TUE9TRV9DQ0xPQ0sgICAgICAyCisjZGVm aW5lIFRSQU5TUE9TRV9DTE9DS19GTElQICAzCisjZGVmaW5lIFRSQU5TUE9TRV9SRVZFUlNBTCAg ICA0CisjZGVmaW5lIFRSQU5TUE9TRV9IRkxJUCAgICAgICA1CisjZGVmaW5lIFRSQU5TUE9TRV9W RkxJUCAgICAgICA2CisKKy8vIEZGbXBlZyBwYXNzZXMgcGl0Y2ggaW4gYnl0ZXMsIENVREEgdXNl cyBwb3RlbnRpYWxseSBsYXJnZXIgdHlwZXMKKyNkZWZpbmUgRklYRURfUElUQ0goVCkgXAorICAg IChkc3RfcGl0Y2gvc2l6ZW9mKFQpKQorCisjZGVmaW5lIERFRkFVTFRfRFNUKG4sIFQpIFwKKyAg ICBkc3Rbbl1beW8qRklYRURfUElUQ0goVCkreG9dCisKKy8vIC0tLSBDT09SRElOQVRFIFRSQU5T Rk9STUFUSU9OIEZVTkNUSU9OUyAtLS0KKworX19kZXZpY2VfXyBzdGF0aWMgaW5saW5lIHZvaWQg Z2V0X3RyYW5zcG9zZV9jb29yZHMoaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBzcmNfd2lkdGgs IGludCBzcmNfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKmRzdF94LCBpbnQgKmRzdF95LCBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0 X2hlaWdodCwgaW50IGRpcikKK3sKKyAgICBzd2l0Y2ggKGRpcikgeworICAgIGNhc2UgVFJBTlNQ T1NFX0NDTE9DS19GTElQOiAvLyA5MMKwIENDVyArIHZlcnRpY2FsIGZsaXAKKyAgICAgICAgKmRz dF94ID0gc3JjX3k7CisgICAgICAgICpkc3RfeSA9IHNyY194OworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFRSQU5TUE9TRV9DTE9DSzogLy8gOTDCsCBDVworICAgICAgICAqZHN0X3ggPSBzcmNf eTsKKyAgICAgICAgKmRzdF95ID0gc3JjX3dpZHRoIC0gMSAtIHNyY194OworICAgICAgICBicmVh azsKKyAgICBjYXNlIFRSQU5TUE9TRV9DQ0xPQ0s6IC8vIDkwwrAgQ0NXCisgICAgICAgICpkc3Rf eCA9IHNyY19oZWlnaHQgLSAxIC0gc3JjX3k7CisgICAgICAgICpkc3RfeSA9IHNyY194OworICAg ICAgICBicmVhazsKKyAgICBjYXNlIFRSQU5TUE9TRV9DTE9DS19GTElQOiAvLyA5MMKwIENXICsg dmVydGljYWwgZmxpcAorICAgICAgICAqZHN0X3ggPSBzcmNfaGVpZ2h0IC0gMSAtIHNyY195Owor ICAgICAgICAqZHN0X3kgPSBzcmNfd2lkdGggLSAxIC0gc3JjX3g7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgVFJBTlNQT1NFX1JFVkVSU0FMOiAvLyAxODDCsCByb3RhdGlvbgorICAgICAgICAq ZHN0X3ggPSBzcmNfd2lkdGggLSAxIC0gc3JjX3g7CisgICAgICAgICpkc3RfeSA9IHNyY19oZWln aHQgLSAxIC0gc3JjX3k7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFJBTlNQT1NFX0hGTElQ OiAvLyBIb3Jpem9udGFsIGZsaXAKKyAgICAgICAgKmRzdF94ID0gc3JjX3dpZHRoIC0gMSAtIHNy Y194OworICAgICAgICAqZHN0X3kgPSBzcmNfeTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU UkFOU1BPU0VfVkZMSVA6IC8vIFZlcnRpY2FsIGZsaXAKKyAgICAgICAgKmRzdF94ID0gc3JjX3g7 CisgICAgICAgICpkc3RfeSA9IHNyY19oZWlnaHQgLSAxIC0gc3JjX3k7CisgICAgICAgIGJyZWFr OworICAgIGRlZmF1bHQ6CisgICAgICAgICpkc3RfeCA9IHNyY194OworICAgICAgICAqZHN0X3kg PSBzcmNfeTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvLyAtLS0gVFJBTlNQT1NFIEtF Uk5FTFMgLS0tCisKKyNkZWZpbmUgVFJBTlNQT1NFX0RFRihuYW1lLCBpbl90eXBlLCBvdXRfdHlw ZSkgXAorX19kZXZpY2VfXyBzdGF0aWMgaW5saW5lIHZvaWQgVHJhbnNwb3NlXyMjbmFtZSMjX2lt cGwoIFwKKyAgICBjdWRhVGV4dHVyZU9iamVjdF90IHNyY190ZXhbNF0sIG91dF90eXBlICpkc3Rb NF0sIFwKKyAgICBpbnQgeG8sIGludCB5bywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZHN0 X3BpdGNoLCBcCisgICAgaW50IGRzdF93aWR0aCwgaW50IGRzdF9oZWlnaHQsIGludCBzcmNfd2lk dGgsIGludCBzcmNfaGVpZ2h0LCBpbnQgZGlyKSBcCit7IFwKKyAgICBpbnQgc3JjX3gsIHNyY195 OyBcCisgICAgZ2V0X3RyYW5zcG9zZV9jb29yZHMoeG8sIHlvLCB3aWR0aCwgaGVpZ2h0LCAmc3Jj X3gsICZzcmNfeSwgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0LCBkaXIpOyBcCisgICAgXAorICAgIGlu X3R5cGUgcGl4ZWwgPSB0ZXgyRDxpbl90eXBlPihzcmNfdGV4WzBdLCBzcmNfeCArIDAuNWYsIHNy Y195ICsgMC41Zik7IFwKKyAgICBERUZBVUxUX0RTVCgwLCBvdXRfdHlwZSkgPSBwaXhlbDsgXAor fQorCisjZGVmaW5lIFRSQU5TUE9TRV9VVl9ERUYobmFtZSwgaW5fdHlwZV91diwgb3V0X3R5cGVf dXYpIFwKK19fZGV2aWNlX18gc3RhdGljIGlubGluZSB2b2lkIFRyYW5zcG9zZV8jI25hbWUjI191 dl9pbXBsKCBcCisgICAgY3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4WzRdLCBvdXRfdHlwZV91 diAqZHN0WzRdLCBcCisgICAgaW50IHhvLCBpbnQgeW8sIGludCB3aWR0aCwgaW50IGhlaWdodCwg aW50IGRzdF9waXRjaCwgXAorICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQg c3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCwgaW50IGRpcikgXAoreyBcCisgICAgaW50IHNyY194 LCBzcmNfeTsgXAorICAgIGdldF90cmFuc3Bvc2VfY29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdo dCwgJnNyY194LCAmc3JjX3ksIHNyY193aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsgXAorICAgIFwK KyAgICBpbl90eXBlX3V2IHBpeGVsX3UgPSB0ZXgyRDxpbl90eXBlX3V2PihzcmNfdGV4WzFdLCBz cmNfeCArIDAuNWYsIHNyY195ICsgMC41Zik7IFwKKyAgICBpbl90eXBlX3V2IHBpeGVsX3YgPSB0 ZXgyRDxpbl90eXBlX3V2PihzcmNfdGV4WzJdLCBzcmNfeCArIDAuNWYsIHNyY195ICsgMC41Zik7 IFwKKyAgICBERUZBVUxUX0RTVCgxLCBvdXRfdHlwZV91dikgPSBwaXhlbF91OyBcCisgICAgREVG QVVMVF9EU1QoMiwgb3V0X3R5cGVfdXYpID0gcGl4ZWxfdjsgXAorfQorCisjZGVmaW5lIFRSQU5T UE9TRV9OVl9VVl9ERUYobmFtZSwgaW5fdHlwZV91diwgb3V0X3R5cGVfdXYpIFwKK19fZGV2aWNl X18gc3RhdGljIGlubGluZSB2b2lkIFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsKCBcCisgICAg Y3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4WzRdLCBvdXRfdHlwZV91diAqZHN0WzRdLCBcCisg ICAgaW50IHhvLCBpbnQgeW8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRzdF9waXRjaCwg XAorICAgIGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgc3JjX3dpZHRoLCBpbnQg c3JjX2hlaWdodCwgaW50IGRpcikgXAoreyBcCisgICAgaW50IHNyY194LCBzcmNfeTsgXAorICAg IGdldF90cmFuc3Bvc2VfY29vcmRzKHhvLCB5bywgd2lkdGgsIGhlaWdodCwgJnNyY194LCAmc3Jj X3ksIHNyY193aWR0aCwgc3JjX2hlaWdodCwgZGlyKTsgXAorICAgIFwKKyAgICBpbl90eXBlX3V2 IHBpeGVsX3V2ID0gdGV4MkQ8aW5fdHlwZV91dj4oc3JjX3RleFsxXSwgc3JjX3ggKyAwLjVmLCBz cmNfeSArIDAuNWYpOyBcCisgICAgREVGQVVMVF9EU1QoMSwgb3V0X3R5cGVfdXYpID0gcGl4ZWxf dXY7IFwKK30KKworCisvLyBEZWZpbmUgdHJhbnNwb3NlIGltcGxlbWVudGF0aW9ucyBmb3IgYWxs IGZvcm1hdHMKK1RSQU5TUE9TRV9ERUYoeXV2NDIwcCwgdWNoYXIsIHVjaGFyKQorVFJBTlNQT1NF X1VWX0RFRih5dXY0MjBwLCB1Y2hhciwgdWNoYXIpCisKK1RSQU5TUE9TRV9ERUYobnYxMiwgdWNo YXIsIHVjaGFyKQorVFJBTlNQT1NFX05WX1VWX0RFRihudjEyLCB1Y2hhcjIsIHVjaGFyMikKKwor VFJBTlNQT1NFX0RFRih5dXY0NDRwLCB1Y2hhciwgdWNoYXIpCitUUkFOU1BPU0VfVVZfREVGKHl1 djQ0NHAsIHVjaGFyLCB1Y2hhcikKKworVFJBTlNQT1NFX0RFRihwMDEwbGUsIHVzaG9ydCwgdXNo b3J0KQorVFJBTlNQT1NFX05WX1VWX0RFRihwMDEwbGUsIHVzaG9ydDIsIHVzaG9ydDIpCisKK1RS QU5TUE9TRV9ERUYocDAxNmxlLCB1c2hvcnQsIHVzaG9ydCkKK1RSQU5TUE9TRV9OVl9VVl9ERUYo cDAxNmxlLCB1c2hvcnQyLCB1c2hvcnQyKQorCitUUkFOU1BPU0VfREVGKHl1djQ0NHAxNmxlLCB1 c2hvcnQsIHVzaG9ydCkKK1RSQU5TUE9TRV9VVl9ERUYoeXV2NDQ0cDE2bGUsIHVzaG9ydCwgdXNo b3J0KQorCitUUkFOU1BPU0VfREVGKHJnYjAsIHVjaGFyNCwgdWNoYXI0KQorVFJBTlNQT1NFX0RF RihiZ3IwLCB1Y2hhcjQsIHVjaGFyNCkKK1RSQU5TUE9TRV9ERUYocmdiYSwgdWNoYXI0LCB1Y2hh cjQpCitUUkFOU1BPU0VfREVGKGJncmEsIHVjaGFyNCwgdWNoYXI0KQorCisvLyAtLS0gS0VSTkVM IEFSR1VNRU5UIERFRklOSVRJT05TIC0tLQorCisjZGVmaW5lIFRSQU5TUE9TRV9LRVJORUxfQVJH UyhUKSBcCisgICAgY3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4XzAsIGN1ZGFUZXh0dXJlT2Jq ZWN0X3Qgc3JjX3RleF8xLCBcCisgICAgY3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4XzIsIGN1 ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3RleF8zLCBcCisgICAgVCAqZHN0XzAsIFQgKmRzdF8xLCBU ICpkc3RfMiwgVCAqZHN0XzMsIFwKKyAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkc3Rf cGl0Y2gsIFwKKyAgICBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwgXAorICAgIGludCBz cmNfd2lkdGgsIGludCBzcmNfaGVpZ2h0LCBpbnQgZGlyCisKKyNkZWZpbmUgVFJBTlNQT1NFX0tF Uk5FTF9JTVBMKGZ1bmNfaW1wbCwgVCkgXAorICAgIGN1ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3Rl eFs0XSA9IHsgc3JjX3RleF8wLCBzcmNfdGV4XzEsIHNyY190ZXhfMiwgc3JjX3RleF8zIH07IFwK KyAgICBUICpkc3RbNF0gPSB7IGRzdF8wLCBkc3RfMSwgZHN0XzIsIGRzdF8zIH07IFwKKyAgICBp bnQgeG8gPSBibG9ja0lkeC54ICogYmxvY2tEaW0ueCArIHRocmVhZElkeC54OyBcCisgICAgaW50 IHlvID0gYmxvY2tJZHgueSAqIGJsb2NrRGltLnkgKyB0aHJlYWRJZHgueTsgXAorICAgIGlmICh4 byA+PSB3aWR0aCB8fCB5byA+PSBoZWlnaHQpIHJldHVybjsgXAorICAgIFwKKyAgICBmdW5jX2lt cGwoc3JjX3RleCwgZHN0LCB4bywgeW8sIHdpZHRoLCBoZWlnaHQsIGRzdF9waXRjaCwgXAorICAg ICAgICAgICAgICBkc3Rfd2lkdGgsIGRzdF9oZWlnaHQsIHNyY193aWR0aCwgc3JjX2hlaWdodCwg ZGlyKTsKKworZXh0ZXJuICJDIiB7CisKKy8vIC0tLSBUUkFOU1BPU0UgS0VSTkVMUyAtLS0KKwor I2RlZmluZSBUUkFOU1BPU0VfS0VSTkVMKG5hbWUsIFQpIFwKK19fZ2xvYmFsX18gdm9pZCBUcmFu c3Bvc2VfIyNuYW1lKFRSQU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgXAoreyBcCisgICAgVFJBTlNQ T1NFX0tFUk5FTF9JTVBMKFRyYW5zcG9zZV8jI25hbWUjI19pbXBsLCBUKSBcCit9CisKKyNkZWZp bmUgVFJBTlNQT1NFX1VWX0tFUk5FTChuYW1lLCBUKSBcCitfX2dsb2JhbF9fIHZvaWQgVHJhbnNw b3NlXyMjbmFtZSMjX3V2KFRSQU5TUE9TRV9LRVJORUxfQVJHUyhUKSkgXAoreyBcCisgICAgVFJB TlNQT1NFX0tFUk5FTF9JTVBMKFRyYW5zcG9zZV8jI25hbWUjI191dl9pbXBsLCBUKSBcCit9CisK Ky8vIFRyYW5zcG9zZSBrZXJuZWxzIGZvciBhbGwgZm9ybWF0cworVFJBTlNQT1NFX0tFUk5FTCh5 dXY0MjBwLCB1Y2hhcikKK1RSQU5TUE9TRV9VVl9LRVJORUwoeXV2NDIwcCwgdWNoYXIpCisKK1RS QU5TUE9TRV9LRVJORUwobnYxMiwgdWNoYXIpCitUUkFOU1BPU0VfVVZfS0VSTkVMKG52MTIsIHVj aGFyMikKKworVFJBTlNQT1NFX0tFUk5FTCh5dXY0NDRwLCB1Y2hhcikKK1RSQU5TUE9TRV9VVl9L RVJORUwoeXV2NDQ0cCwgdWNoYXIpCisKK1RSQU5TUE9TRV9LRVJORUwocDAxMGxlLCB1c2hvcnQp CitUUkFOU1BPU0VfVVZfS0VSTkVMKHAwMTBsZSwgdXNob3J0MikKKworVFJBTlNQT1NFX0tFUk5F TChwMDE2bGUsIHVzaG9ydCkKK1RSQU5TUE9TRV9VVl9LRVJORUwocDAxNmxlLCB1c2hvcnQyKQor CitUUkFOU1BPU0VfS0VSTkVMKHl1djQ0NHAxNmxlLCB1c2hvcnQpCitUUkFOU1BPU0VfVVZfS0VS TkVMKHl1djQ0NHAxNmxlLCB1c2hvcnQpCisKK1RSQU5TUE9TRV9LRVJORUwocmdiMCwgdWNoYXI0 KQorVFJBTlNQT1NFX0tFUk5FTChiZ3IwLCB1Y2hhcjQpCitUUkFOU1BPU0VfS0VSTkVMKHJnYmEs IHVjaGFyNCkKK1RSQU5TUE9TRV9LRVJORUwoYmdyYSwgdWNoYXI0KQorCisvLyBGb3IgUkdCIGZv cm1hdHMsIFVWIGtlcm5lbHMgYXJlIG5vdCBuZWVkZWQsIGJ1dCB3ZSBwcm92aWRlIGVtcHR5IGlt cGxlbWVudGF0aW9ucworLy8gdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgZnVuY3Rp b24gbG9hZGluZyBsb2dpYworCisjZGVmaW5lIEVNUFRZX1VWX0tFUk5FTChuYW1lLCBUKSBcCitf X2dsb2JhbF9fIHZvaWQgVHJhbnNwb3NlXyMjbmFtZSMjX3V2KFRSQU5TUE9TRV9LRVJORUxfQVJH UyhUKSkgeyB9IFwKKworRU1QVFlfVVZfS0VSTkVMKHJnYjAsIHVjaGFyKQorRU1QVFlfVVZfS0VS TkVMKGJncjAsIHVjaGFyKQorRU1QVFlfVVZfS0VSTkVMKHJnYmEsIHVjaGFyKQorRU1QVFlfVVZf S0VSTkVMKGJncmEsIHVjaGFyKQorCit9Ci0tIAoyLjM0LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8v ZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4K