From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id EBC0345B5B for ; Tue, 21 Mar 2023 15:03:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 12EE068C6B2; Tue, 21 Mar 2023 17:01:53 +0200 (EET) Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 65D5768C56E for ; Tue, 21 Mar 2023 17:01:43 +0200 (EET) Received: by mail-ed1-f42.google.com with SMTP id t5so24058609edd.7 for ; Tue, 21 Mar 2023 08:01:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; t=1679410903; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=cvusqbo4IDXstVvG0krpBLTjiKlxQ7WPOuc9s2Njgd8=; b=lj3w1XZ44QyqqQMjTajgQyvL87YuE/GkcTbqjcnEH+Fh8+vS2ZD5o13OVXJLlBiqu0 e04hvVbCp2o0pUAaKnlA/3kjMi16+B+nj35LcZXR8GoMZabnV8Y1//wPkS5PYnZgucSG iKGNc9d92ujVZ1z7RTX7GOWtdhe3qEtZS4qMfsyCLDvocacmTrOzMJ7PuI6LFi/5Rkso SvNwXV0gAk0EgE8zjOqjvqvuDCuCKyIOAa0ormqlD87Ayag95AQySEumd+ETAc9oBSIy UW+qSBRsyA0jCb2VCfJ8Kv8aGkAMNtd1/GafbzxTh7Z8AEosHXWrWO6XL/Pt4aYbgdOE JaHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679410903; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cvusqbo4IDXstVvG0krpBLTjiKlxQ7WPOuc9s2Njgd8=; b=JNjDPQ1h4NqJFl7au1Wm8+H+/PvddlLKA/koQsEvcJxR69gVXmKJASKmD0E+JIEtIg pYXov2HkW5lvPPodhlRMiGKdi4BWDRLrqJ68tS3mxKXJ1b63zfuBs4vnKNejd1wzXkak tlWQe+3VZXt1T+zHGmic9m/9+7PI3KOqbHvCcp2UYpqCHRJeuuZr9i5YgDpY4E7V604R Okvf7ZxufJHXCeK/GHeeDSIhbJTLaqE0mCaQc99lk6xlbgxqG17m0cxRZZIRhwZ6EJoB DeLB3YB6NZAoDp9RoAflFHL+G2L6RlgAnKZoiMM09GG24uRJeYOnfV9/GYn1T7NOf6JU oP0w== X-Gm-Message-State: AO0yUKXXohpa+XwmLQXI/JMFq3CB19lsDijP/sBfchbC9qFBLdLNihge 17dr7Hj8ec8MDc2eB66Dd5CcgVSGkn4beT2TfG4= X-Google-Smtp-Source: AK7set+IT17vwgnhu3lDQFgXJEOj/uIEW7tpxoux6HPR32JwyRrFMj8ZYKzOlmKjgc/GQeCQgMaXtg== X-Received: by 2002:aa7:d554:0:b0:4fa:601a:3913 with SMTP id u20-20020aa7d554000000b004fa601a3913mr3581715edr.27.1679410902248; Tue, 21 Mar 2023 08:01:42 -0700 (PDT) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id x93-20020a50bae6000000b004fbf6b35a56sm6405817ede.76.2023.03.21.08.01.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Mar 2023 08:01:41 -0700 (PDT) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 Mar 2023 16:01:19 +0100 Message-Id: <20230321150124.21999-7-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230321150124.21999-1-thomas.ff@spin-digital.com> References: <20230321150124.21999-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v7 06/11] avformat: add demuxer and probe support for H266/VVC X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QWRkIGRlbXV4ZXIgdG8gcHJvYmUgcmF3IHZ2YyBhbmQgcGFyc2UgdnZjYyBieXRlIHN0cmVhbSBm b3JtYXQuCgpDby1hdXRob3JlZC1ieTogTnVvIE1pIDxudW9taTIwMjFAZ21haWwuY29tPgotLS0K IGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICB8ICAgMSArCiBsaWJhdmZvcm1hdC9hbGxmb3JtYXRz LmMgfCAgIDEgKwogbGliYXZmb3JtYXQvZGVtdXguYyAgICAgIHwgICA3ICstCiBsaWJhdmZvcm1h dC9oMjY2LmMgICAgICAgfCA5OTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBsaWJhdmZvcm1hdC9oMjY2LmggICAgICAgfCAgOTkgKysrKwogbGliYXZmb3JtYXQvaDI2 NmRlYy5jICAgIHwgIDYxICsrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMTY1IGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaDI2Ni5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaDI2Ni5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZmb3JtYXQvaDI2NmRlYy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCA0N2JiYmJmYjJhLi45ZDhlZmUxOTM2IDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpA QCAtMjQ1LDYgKzI0NSw3IEBAIE9CSlMtJChDT05GSUdfSDI2M19ERU1VWEVSKSAgICAgICAgICAg ICAgKz0gaDI2M2RlYy5vIHJhd2RlYy5vCiBPQkpTLSQoQ09ORklHX0gyNjNfTVVYRVIpICAgICAg ICAgICAgICAgICs9IHJhd2VuYy5vCiBPQkpTLSQoQ09ORklHX0gyNjRfREVNVVhFUikgICAgICAg ICAgICAgICs9IGgyNjRkZWMubyByYXdkZWMubwogT0JKUy0kKENPTkZJR19IMjY0X01VWEVSKSAg ICAgICAgICAgICAgICArPSByYXdlbmMubworT0JKUy0kKENPTkZJR19IMjY2X0RFTVVYRVIpICAg ICAgICAgICAgICArPSBoMjY2ZGVjLm8gcmF3ZGVjLm8KIE9CSlMtJChDT05GSUdfSEFTSF9NVVhF UikgICAgICAgICAgICAgICAgKz0gaGFzaGVuYy5vCiBPQkpTLSQoQ09ORklHX0hDQV9ERU1VWEVS KSAgICAgICAgICAgICAgICs9IGhjYS5vCiBPQkpTLSQoQ09ORklHX0hDT01fREVNVVhFUikgICAg ICAgICAgICAgICs9IGhjb20ubyBwY20ubwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCmluZGV4IGNiNWI2OWU5Y2QuLjg1NTg0 OTQ0OWQgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYworKysgYi9saWJhdmZv cm1hdC9hbGxmb3JtYXRzLmMKQEAgLTE5OSw2ICsxOTksNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfaDI2M19kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZm X2gyNjNfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaDI2NF9kZW11eGVy OwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX2gyNjRfbXV4ZXI7CitleHRlcm4gY29u c3QgQVZJbnB1dEZvcm1hdCAgZmZfaDI2Nl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0 Rm9ybWF0IGZmX2hhc2hfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaGNh X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaGNvbV9kZW11eGVyOwpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvZGVtdXguYyBiL2xpYmF2Zm9ybWF0L2RlbXV4LmMKaW5k ZXggYjE5YWI4NmQwOC4uZjBjNmQ3ODk1ZiAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvZGVtdXgu YworKysgYi9saWJhdmZvcm1hdC9kZW11eC5jCkBAIC0xMjAsNiArMTIwLDcgQEAgc3RhdGljIGlu dCBzZXRfY29kZWNfZnJvbV9wcm9iZV9kYXRhKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0g KnN0LAogICAgICAgICB7ICJtcDMiLCAgICAgICAgQVZfQ09ERUNfSURfTVAzLCAgICAgICAgICBB Vk1FRElBX1RZUEVfQVVESU8gICAgfSwKICAgICAgICAgeyAibXBlZ3ZpZGVvIiwgIEFWX0NPREVD X0lEX01QRUcyVklERU8sICAgQVZNRURJQV9UWVBFX1ZJREVPICAgIH0sCiAgICAgICAgIHsgInRy dWVoZCIsICAgICBBVl9DT0RFQ19JRF9UUlVFSEQsICAgICAgIEFWTUVESUFfVFlQRV9BVURJTyAg ICB9LAorICAgICAgICB7ICJ2dmMiLCAgICAgICAgQVZfQ09ERUNfSURfVlZDLCAgICAgICAgICBB Vk1FRElBX1RZUEVfVklERU8gICAgfSwKICAgICAgICAgeyAwIH0KICAgICB9OwogICAgIGludCBz Y29yZTsKQEAgLTc0Myw3ICs3NDQsOCBAQCBzdGF0aWMgaW50NjRfdCBzZWxlY3RfZnJvbV9wdHNf YnVmZmVyKEFWU3RyZWFtICpzdCwgaW50NjRfdCAqcHRzX2J1ZmZlciwgaW50NjRfdAogewogICAg IEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7CiAgICAgaW50IG9uZWluX29uZW91 dCA9IHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSDI2NCAmJgotICAgICAg ICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hF VkM7CisgICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZf Q09ERUNfSURfSEVWQyAmJgorICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNv ZGVjX2lkICE9IEFWX0NPREVDX0lEX1ZWQzsKIAogICAgIGlmICghb25laW5fb25lb3V0KSB7CiAg ICAgICAgIGludCBkZWxheSA9IHN0aS0+YXZjdHgtPmhhc19iX2ZyYW1lczsKQEAgLTkzMyw3ICs5 MzUsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3BrdF9maWVsZHMoQVZGb3JtYXRDb250ZXh0ICpz LCBBVlN0cmVhbSAqc3QsCiAgICAgaW50NjRfdCBvZmZzZXQ7CiAgICAgQVZSYXRpb25hbCBkdXJh dGlvbjsKICAgICBpbnQgb25laW5fb25lb3V0ID0gc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBB Vl9DT0RFQ19JRF9IMjY0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+ Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQzsKKyAgICAgICAgICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDICYmCisgICAgICAgICAgICAg ICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfVlZDOwogCiAg ICAgaWYgKHMtPmZsYWdzICYgQVZGTVRfRkxBR19OT0ZJTExJTikKICAgICAgICAgcmV0dXJuOwpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaDI2Ni5jIGIvbGliYXZmb3JtYXQvaDI2Ni5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZlMmMyNTMyYTkKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmZvcm1hdC9oMjY2LmMKQEAgLTAsMCArMSw5OTggQEAKKy8qCisgKiBILjI2 Ni9WVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAy MDIyLCBUaG9tYXMgU2llZGVsCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCisjaW5jbHVkZSAibGliYXZjb2Rl Yy9nb2xvbWIuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2gyNjYuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAiYXZjLmgiCisjaW5jbHVkZSAiYXZpby5o IgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJoMjY2LmgiCisKK3R5cGVk ZWYgc3RydWN0IFZWQ0NOQUxVbml0QXJyYXkgeworICAgIHVpbnQ4X3QgYXJyYXlfY29tcGxldGVu ZXNzOworICAgIHVpbnQ4X3QgTkFMX3VuaXRfdHlwZTsKKyAgICB1aW50MTZfdCBudW1fbmFsdXM7 CisgICAgdWludDE2X3QgKm5hbF91bml0X2xlbmd0aDsKKyAgICB1aW50OF90ICoqbmFsX3VuaXQ7 Cit9IFZWQ0NOQUxVbml0QXJyYXk7CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BUTFJlY29yZCB7Cisg ICAgdWludDhfdCBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOworICAgIHVpbnQ4X3QgZ2VuZXJh bF9wcm9maWxlX2lkYzsKKyAgICB1aW50OF90IGdlbmVyYWxfdGllcl9mbGFnOworICAgIHVpbnQ4 X3QgZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgdWludDhfdCBwdGxfZnJhbWVfb25seV9jb25zdHJh aW50X2ZsYWc7CisgICAgdWludDhfdCBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7CisgICAg dWludDhfdCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1s5XTsKKyAgICB1aW50OF90ICpwdGxfc3Vi bGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnOworICAgIHVpbnQ4X3QgKnN1YmxheWVyX2xldmVsX2lk YzsKKyAgICB1aW50OF90IHB0bF9udW1fc3ViX3Byb2ZpbGVzOworICAgIHVpbnQzMl90ICpnZW5l cmFsX3N1Yl9wcm9maWxlX2lkYzsKK30gVlZDUFRMUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBW VkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB7CisgICAgdWludDhfdCBsZW5ndGhTaXplTWlu dXNPbmU7CisgICAgdWludDhfdCBwdGxfcHJlc2VudF9mbGFnOworICAgIHVpbnQxNl90IG9sc19p ZHg7CisgICAgdWludDhfdCBudW1fc3VibGF5ZXJzOworICAgIHVpbnQ4X3QgY29uc3RhbnRfZnJh bWVfcmF0ZTsKKyAgICB1aW50OF90IGNocm9tYV9mb3JtYXRfaWRjOworICAgIHVpbnQ4X3QgYml0 X2RlcHRoX21pbnVzODsKKyAgICBWVkNQVExSZWNvcmQgcHRsOworICAgIHVpbnQxNl90IG1heF9w aWN0dXJlX3dpZHRoOworICAgIHVpbnQxNl90IG1heF9waWN0dXJlX2hlaWdodDsKKyAgICB1aW50 MTZfdCBhdmdfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90IG51bV9vZl9hcnJheXM7CisgICAgVlZD Q05BTFVuaXRBcnJheSAqYXJyYXk7Cit9IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOwor Cit0eXBlZGVmIHN0cnVjdCBWVkNDUHJvZmlsZVRpZXJMZXZlbCB7CisgICAgdWludDhfdCBwcm9m aWxlX2lkYzsKKyAgICB1aW50OF90IHRpZXJfZmxhZzsKKyAgICB1aW50OF90IGdlbmVyYWxfbGV2 ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnOworICAg IHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworLy8gZ2VuZXJhbF9jb25zdHJh aW50X2luZm8KKyAgICB1aW50OF90IGdjaV9wcmVzZW50X2ZsYWc7CisgICAgdWludDhfdCBnY2lf Z2VuZXJhbF9jb25zdHJhaW50c1s5XTsKKyAgICB1aW50OF90IGdjaV9udW1fcmVzZXJ2ZWRfYml0 czsKKy8vIGVuZCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbworICAgIHVpbnQ4X3QgKnB0bF9zdWJs YXllcl9sZXZlbF9wcmVzZW50X2ZsYWc7CisgICAgdWludDhfdCAqc3VibGF5ZXJfbGV2ZWxfaWRj OworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAgdWludDMyX3QgKmdlbmVy YWxfc3ViX3Byb2ZpbGVfaWRjOworfSBWVkNDUHJvZmlsZVRpZXJMZXZlbDsKKworc3RhdGljIHZv aWQgdnZjY191cGRhdGVfcHRsKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0NQcm9maWxlVGllckxldmVsICpwdGwpCit7 CisgICAgLyoKKyAgICAgKiBUaGUgbGV2ZWwgaW5kaWNhdGlvbiBnZW5lcmFsX2xldmVsX2lkYyBt dXN0IGluZGljYXRlIGEgbGV2ZWwgb2YKKyAgICAgKiBjYXBhYmlsaXR5IGVxdWFsIHRvIG9yIGdy ZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCBsZXZlbCBpbmRpY2F0ZWQgZm9yIHRoZQorICAgICAqIGhp Z2hlc3QgdGllciBpbiBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgorICAgICAqLworICAgIGlmICh2 dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPCBwdGwtPnRpZXJfZmxhZykKKyAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0gcHRsLT5nZW5lcmFsX2xldmVsX2lkYzsKKyAgICBl bHNlCisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyA9CisgICAgICAgICAgICBG Rk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMsIHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGMp OworCisgICAgLyoKKyAgICAgKiBUaGUgdGllciBpbmRpY2F0aW9uIGdlbmVyYWxfdGllcl9mbGFn IG11c3QgaW5kaWNhdGUgYSB0aWVyIGVxdWFsIHRvIG9yCisgICAgICogZ3JlYXRlciB0aGFuIHRo ZSBoaWdoZXN0IHRpZXIgaW5kaWNhdGVkIGluIGFsbCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAg ICovCisgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnID0KKyAgICAgICAgRkZNQVgodnZj Yy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnLCBwdGwtPnRpZXJfZmxhZyk7CisKKyAgICAvKgorICAg ICAqIFRoZSBwcm9maWxlIGluZGljYXRpb24gZ2VuZXJhbF9wcm9maWxlX2lkYyBtdXN0IGluZGlj YXRlIGEgcHJvZmlsZSB0bworICAgICAqIHdoaWNoIHRoZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRo IHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9ybXMuCisgICAgICoKKyAgICAgKiBJZiB0 aGUgc2VxdWVuY2UgcGFyYW1ldGVyIHNldHMgYXJlIG1hcmtlZCB3aXRoIGRpZmZlcmVudCBwcm9m aWxlcywgdGhlbgorICAgICAqIHRoZSBzdHJlYW0gbWF5IG5lZWQgZXhhbWluYXRpb24gdG8gZGV0 ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhlCisgICAgICogZW50aXJlIHN0cmVhbSBj b25mb3JtcyB0by4gSWYgdGhlIGVudGlyZSBzdHJlYW0gaXMgbm90IGV4YW1pbmVkLCBvciB0aGUK KyAgICAgKiBleGFtaW5hdGlvbiByZXZlYWxzIHRoYXQgdGhlcmUgaXMgbm8gcHJvZmlsZSB0byB3 aGljaCB0aGUgZW50aXJlIHN0cmVhbQorICAgICAqIGNvbmZvcm1zLCB0aGVuIHRoZSBlbnRpcmUg c3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28gb3IgbW9yZQorICAgICAqIHN1Yi1zdHJlYW1z IHdpdGggc2VwYXJhdGUgY29uZmlndXJhdGlvbiByZWNvcmRzIGluIHdoaWNoIHRoZXNlIHJ1bGVz IGNhbgorICAgICAqIGJlIG1ldC4KKyAgICAgKgorICAgICAqIE5vdGU6IHNldCB0aGUgcHJvZmls ZSB0byB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS4KKyAgICAg Ki8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA9CisgICAgICAgIEZGTUFYKHZ2 Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjLCBwdGwtPnByb2ZpbGVfaWRjKTsKKworICAgIC8q CisgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlmIGFsbAorICAgICAq IHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICovCisgICAgdnZjYy0+cHRs LnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyAmPQorICAgICAgICBwdGwtPnB0bF9mcmFt ZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5h YmxlZF9mbGFnICY9IHB0bC0+cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworCisgICAgLyoK KyAgICAgKiBDb25zdHJhaW50cyBJbmZvCisgICAgICovCisgICAgaWYgKHB0bC0+Z2NpX3ByZXNl bnRfZmxhZykgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9 IDk7CisgICAgICAgIG1lbWNweSgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvWzBd LAorICAgICAgICAgICAgICAgJnB0bC0+Z2NpX2dlbmVyYWxfY29uc3RyYWludHNbMF0sIHNpemVv Zih1aW50OF90KSAqIDkpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdnZjYy0+cHRsLm51bV9i eXRlc19jb25zdHJhaW50X2luZm8gPSAxOworICAgICAgICBtZW1zZXQoJnZ2Y2MtPnB0bC5nZW5l cmFsX2NvbnN0cmFpbnRfaW5mb1swXSwgMCwgc2l6ZW9mKHVpbnQ4X3QpICogOSk7CisgICAgfQor CisgICAgLyoKKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFncyBtYXkgb25seSBiZSBzZXQgaWYgb25l IG9mCisgICAgICogdGhlIHBhcmFtZXRlciBzZXRzIHNldCB0aGF0IGJpdC4KKyAgICAgKi8KKyAg ICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9CisgICAgICAgICh1 aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0g MSk7CisgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYyA9CisgICAgICAgICh1aW50OF90 ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSk7CisK KyAgICBtZW1zZXQodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcsIDAs CisgICAgICAgICAgIHNpemVvZih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsK KyAgICBtZW1zZXQodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYywgMCwKKyAgICAgICAgICAg c2l6ZW9mKHVpbnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOworCisgICAgZm9yIChp bnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICB2 dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSB8PQorICAgICAgICAg ICAgcHRsLT5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldOworICAgICAgICBpZiAo dnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pIHsKKyAgICAgICAg ICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQorICAgICAgICAgICAgICAgIEZG TUFYKHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0sCisgICAgICAgICAgICAgICAgICAg ICAgcHRsLT5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgaWYgKGkgPT0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpIHsKKyAgICAgICAgICAgICAg ICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0gdnZjYy0+cHRsLmdlbmVyYWxfbGV2 ZWxfaWRjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwu c3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0KKyAgICAgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkY1tpICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisKKyAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPQorICAgICAgICBGRk1BWCh2 dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMsIHB0bC0+cHRsX251bV9zdWJfcHJvZmlsZXMp OworICAgIGlmICh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpIHsKKyAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgICAgICh1aW50MzJfdCAq KSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAg ICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9CisgICAgICAgICAgICAg ICAgcHRsLT5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSB7CisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyA9CisgICAgICAg ICAgICAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgdnZjY19wYXJzZV9wdGwoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9maWxlVGllclByZXNlbnRG bGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF9zdWJfbGF5 ZXJzX21pbnVzMSkKK3sKKyAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCBnZW5lcmFsX3B0bDsKKyAg ICBpbnQgajsKKworICAgIGlmIChwcm9maWxlVGllclByZXNlbnRGbGFnKSB7CisgICAgICAgIGdl bmVyYWxfcHRsLnByb2ZpbGVfaWRjID0gZ2V0X2JpdHMoZ2IsIDcpOworICAgICAgICBnZW5lcmFs X3B0bC50aWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIH0KKyAgICBnZW5lcmFsX3B0bC5n ZW5lcmFsX2xldmVsX2lkYyA9IGdldF9iaXRzKGdiLCA4KTsKKworICAgIGdlbmVyYWxfcHRsLnB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgZ2VuZXJh bF9wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBp ZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeyAgICAgICAvLyBwYXJzZSBjb25zdHJhaW50IGlu Zm8KKyAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX3ByZXNlbnRfZmxhZyA9IGdldF9iaXRzMShnYik7 CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnKSB7CisgICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgODsgaisrKQorICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdj aV9nZW5lcmFsX2NvbnN0cmFpbnRzW2pdID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSAwOworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSBnZXRfYml0cyhnYiwgNyk7 CisKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9udW1fcmVzZXJ2ZWRfYml0cyA9IGdldF9i aXRzKGdiLCA4KTsKKyAgICAgICAgICAgIHNraXBfYml0cyhnYiwgZ2VuZXJhbF9wdGwuZ2NpX251 bV9yZXNlcnZlZF9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZ2ItPmluZGV4ICUg OCAhPSAwKQorICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7CisgICAgfQorCisgICAgZ2VuZXJh bF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9CisgICAgICAgICh1aW50OF90 ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiBtYXhfc3ViX2xheWVyc19taW51czEpOworICAg IGZvciAoaW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51czEgLSAxOyBpID49IDA7IGktLSkgewor ICAgICAgICBnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldID0g Z2V0X2JpdHMxKGdiKTsKKyAgICB9CisgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkKKyAg ICAgICAgc2tpcF9iaXRzMShnYik7CisKKyAgICBnZW5lcmFsX3B0bC5zdWJsYXllcl9sZXZlbF9p ZGMgPQorICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpICogbWF4X3N1 Yl9sYXllcnNfbWludXMxKTsKKyAgICBmb3IgKGludCBpID0gbWF4X3N1Yl9sYXllcnNfbWludXMx IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRsLnB0bF9zdWJsYXll cl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCisgICAgICAgICAgICBnZW5lcmFsX3B0bC5zdWJsYXll cl9sZXZlbF9pZGNbaV0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgfQorCisgICAgaWYgKHByb2Zp bGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5wdGxfbnVt X3N1Yl9wcm9maWxlcykgeworICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGMgPQorICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKSBtYWxsb2Moc2l6ZW9mKHVp bnQzMl90KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsX3B0 bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAg ICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9IGdldF9iaXRzX2xvbmco Z2IsIDMyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdl bmVyYWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgICAgICAgICAodWlu dDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworICAgICAgICB9CisgICAgfQorCisg ICAgdnZjY191cGRhdGVfcHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7CisKKyAgICBmcmVlKGdlbmVy YWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUoZ2VuZXJh bF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjKTsKKyAgICBmcmVlKGdlbmVyYWxfcHRsLmdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjKTsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3ZwcyhHZXRCaXRD b250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3Vy YXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdW5zaWduZWQgaW50IHZwc19tYXhfbGF5ZXJzX21p bnVzMTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMTsKKyAgICB1 bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnOworICAgIHVu c2lnbmVkIGludCB2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWc7CisgICAgdW5zaWduZWQg aW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnOworICAgIHVuc2lnbmVkIGludCB2cHNf b2xzX21vZGVfaWRjOworCisgICAgdW5zaWduZWQgaW50ICp2cHNfcHRfcHJlc2VudF9mbGFnOwor ICAgIHVuc2lnbmVkIGludCAqdnBzX3B0bF9tYXhfdGlkOworICAgIHVuc2lnbmVkIGludCB2cHNf bnVtX3B0bHNfbWludXMxID0gMDsKKworICAgIC8qCisgICAgICogdnBzX3ZpZGVvX3BhcmFtZXRl cl9zZXRfaWQgdSg0KQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwgNCk7CisKKyAgICB2cHNf bWF4X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7CisgICAgdnBzX21heF9zdWJfbGF5 ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8qCisgICAgICogbnVtVGVtcG9y YWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSB0byB3aGlj aCB0aGlzCisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGllcyBpcyB0ZW1wb3JhbGx5 IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVtYmVyIG9mIHRlbXBvcmFsIGxh eWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5ZXIgb3IKKyAgICAgKiBz dWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBudW1UZW1wb3JhbExheWVy cy4gVmFsdWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gaXMgbm90IHRlbXBv cmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAgICogdGhhdCBpdCBpcyB1bmtu b3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlLgorICAgICAqLwor ICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxICsg MSk7CisKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCAmJiB2cHNfbWF4X3N1Yl9s YXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3Rp ZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4g MCkKKyAgICAgICAgdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnID0gZ2V0X2JpdHMxKGdi KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaSsr KSB7CisgICAgICAgIHNraXBfYml0cyhnYiwgNik7ICAgIC8vdnBzX2RlZmF1bHRfcHRsX2RwYl9o cmRfbWF4X3RpZF9mbGFnW2ldCisgICAgICAgIGlmIChpID4gMCAmJiAhdnBzX2FsbF9pbmRlcGVu ZGFudF9sYXllcl9mbGFnKSB7CisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAv LyB2cHNfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAg ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAg ICBpZiAodnBzX21heF90aWRfcmVmX3ByZXNlbnRfZmxhZyAmJiBnZXRfYml0czEoZ2IpKSAgLy8g dnBzX2RpcmVjdF9yZWZfbGF5ZXJfZmxhZ1tpXVtqXQorICAgICAgICAgICAgICAgICAgICAgICAg c2tpcF9iaXRzKGdiLCAzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdnBzX21h eF90aWRfaWxfcmVmX3BpY3NfcGx1czEKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCkg eworICAgICAgICBpZiAodnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnKQorICAgICAgICAg ICAgdnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAg ICBpZiAodnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmICgh dnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnKQorICAgICAgICAgICAgICAgIHZwc19vbHNf bW9kZV9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICBpZiAodnBzX29sc19tb2Rl X2lkYyA9PSAyKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZwc19udW1fb3V0cHV0 X2xheWVyX3NldHNfbWludXMyID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAgICAgIGZv ciAoaW50IGkgPSAxOyBpIDw9IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMyICsgMTsg aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHZwc19tYXhf bGF5ZXJzX21pbnVzMTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMx KGdiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2cHNfbnVtX3B0bHNfbWludXMxID0gZ2V0X2JpdHMo Z2IsIDgpOworICAgIH0KKworICAgIHZwc19wdF9wcmVzZW50X2ZsYWcgPQorICAgICAgICAodW5z aWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2cHNfbnVtX3B0bHNfbWludXMxICsgMSkpOworICAgIHZwc19w dGxfbWF4X3RpZCA9CisgICAgICAgICh1bnNpZ25lZCBpbnQgKikgbWFsbG9jKHNpemVvZih1bnNp Z25lZCBpbnQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZwc19udW1fcHRs c19taW51czEgKyAxKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdnBzX251bV9wdGxzX21p bnVzMTsgaSsrKSB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHZwc19wdF9wcmVz ZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOworICAgICAgICBpZiAoIXZwc19kZWZhdWx0X3B0 bF9kcGJfaHJkX21heF90aWRfZmxhZykKKyAgICAgICAgICAgIHZwc19wdGxfbWF4X3RpZFtpXSA9 IGdldF9iaXRzKGdiLCAzKTsKKyAgICB9CisKKyAgICB3aGlsZSAoZ2ItPmluZGV4ICUgOCAhPSAw KQorICAgICAgICBza2lwX2JpdHMxKGdiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZw c19udW1fcHRsc19taW51czE7IGkrKykgeworICAgICAgICB2dmNjX3BhcnNlX3B0bChnYiwgdnZj YywgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSwgdnBzX3B0bF9tYXhfdGlkW2ldKTsKKyAgICB9CisK KyAgICBmcmVlKHZwc19wdF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUodnBzX3B0bF9tYXhfdGlk KTsKKworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2Vfc3BzKEdldEJpdENvbnRl eHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlv blJlY29yZCAqdnZjYykKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3BzX21heF9zdWJfbGF5ZXJzX21p bnVzMSwgbG9nMl9jdHVfc2l6ZV9taW51czU7CisgICAgLy91bnNpZ25lZCBpbnQgbnVtX3Nob3J0 X3Rlcm1fcmVmX3BpY19zZXRzLCBudW1fZGVsdGFfcG9jc1tWVkNfTUFYX1JFRl9QSUNfTElTVFNd OworICAgIC8vdW5zaWduZWQgaW50IHNwc19jaHJvbWFfZm9ybWF0X2lkYzsKKyAgICB1bnNpZ25l ZCBpbnQgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZywgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1 bWFfc2FtcGxlLAorICAgICAgICBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZTsKKyAg ICB1bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxhZzsKKyAgICB1bnNpZ25l ZCBpbnQgZmxhZzsKKworICAgIHNraXBfYml0cyhnYiwgOCk7ICAvLyBzcHNfc2VxX3BhcmFtZXRl cl9zZXRfaWQgJiYgc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQKKyAgICBzcHNfbWF4X3N1Yl9s YXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1w b3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdo aWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFs bHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwg bGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAq IHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5 ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVt cG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVu a25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICov CisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwc19tYXhfc3ViX2xheWVyc19taW51czEg KyAxKTsKKworICAgIHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOwor ICAgIGxvZzJfY3R1X3NpemVfbWludXM1ID0gZ2V0X2JpdHMoZ2IsIDIpOworCisgICAgaWYgKGdl dF9iaXRzMShnYikpICAgICAgICAgIC8vc3BzX3B0bF9kcGJfaHJkX3BhcmFtc19wcmVzZW50X2Zs YWcKKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIDEsIHNwc19tYXhfc3ViX2xheWVy c19taW51czEpOworCisgICAgZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsgICAgIC8vc2tpcF9iaXRz MShnYik7IC8vc3BzX2dkcl9lbmFibGVkX2ZsYWcKKyAgICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEp OyAgICAgLy9zcHNfcmVmX3BpY19yZXNhbXBsaW5nX2VuYWJsZWRfZmxhZworICAgIGlmIChmbGFn KSB7ICAgICAgICAgICAgICAgICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFn CisgICAgICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7IC8vc2tpcF9iaXRzMShnYik7IC8vc3Bz X3Jlc19jaGFuZ2VfaW5fY2x2c19hbGxvd2VkX2ZsYWcKKyAgICB9CisKKyAgICBzcHNfcGljX3dp ZHRoX21heF9pbl9sdW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZj Yy0+bWF4X3BpY3R1cmVfd2lkdGggPQorICAgICAgICBGRk1BWCh2dmNjLT5tYXhfcGljdHVyZV93 aWR0aCwgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUpOworICAgIHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZj Yy0+bWF4X3BpY3R1cmVfaGVpZ2h0ID0KKyAgICAgICAgRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVf aGVpZ2h0LCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUpOworCisgICAgaWYgKGdl dF9iaXRzMShnYikpIHsKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2Nv bmZfd2luX2xlZnRfb2Zmc2V0CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNw c19jb25mX3dpbl9yaWdodF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsg Ly8gc3BzX2NvbmZfd2luX3RvcF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdi KTsgLy8gc3BzX2NvbmZfd2luX2JvdHRvbV9vZmZzZXQKKyAgICB9CisKKyAgICBpZiAoZ2V0X2Jp dHMxKGdiKSkgeyAgICAgICAgLy8gc3BzX3N1YnBpY19pbmZvX3ByZXNlbnRfZmxhZworICAgICAg ICB1bnNpZ25lZCBpbnQgc3BzX251bV9zdWJwaWNzX21pbnVzMSA9IGdldF91ZV9nb2xvbWJfbG9u ZyhnYik7CisgICAgICAgIGlmIChzcHNfbnVtX3N1YnBpY3NfbWludXMxID4gMCkgeyAgICAgICAv LyBzcHNfbnVtX3N1YnBpY3NfbWludXMxCisgICAgICAgICAgICBzcHNfaW5kZXBlbmRhbnRfc3Vi cGljc19mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIHNwc19zdWJwaWNfc2FtZV9z aXplX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkg PSAwOworICAgICAgICAgICAgIHNwc19udW1fc3VicGljc19taW51czEgPiAwICYmIGkgPD0gc3Bz X251bV9zdWJwaWNzX21pbnVzMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXNwc19zdWJwaWNf c2FtZV9zaXplX2ZsYWcgfHwgaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IEZG TUlOKGxvZzJfY3R1X3NpemVfbWludXM1ICsgNSwgMTYpOworICAgICAgICAgICAgICAgIGlmIChp ID4gMCAmJiBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKKyAgICAgICAg ICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOworICAgICAgICAgICAgICAgIGlmIChpID4g MCAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAgICAgICAg ICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNw c19udW1fc3VicGljc19taW51czEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BzX3BpY193aWR0 aF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0 cyhnYiwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNwc19udW1fc3VicGljc19taW51 czEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2Ft cGxlID4gMTI4KQorICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGxlbik7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNwc19pbmRlcGVuZGFudF9zdWJwaWNzX2ZsYWcp IHsKKyAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDIpOyAgICAgICAvLyBzcHNfc3VicGlj X3RyZWF0ZWRfYXNfcGljX2ZsYWcgJiYgc3BzX2xvb3BfZmlsdGVyX2Fjcm9zc19zdWJwaWNfZW5h YmxlZF9mbGFnCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ2V0X3VlX2dvbG9t Yl9sb25nKGdiKTsgLy8gc3BzX3N1YnBpY19pZF9sZW5fbWludXMxCisgICAgICAgIGlmIChnZXRf Yml0czEoZ2IpKSB7ICAgIC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19leHBsaWNpdGx5X3NpZ25h bGxlZF9mbGFnCisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgIC8vIHNwc19zdWJwaWNf aWRfbWFwcGluZ19wcmVzZW50X2ZsYWcKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8PSBzcHNfbnVtX3N1YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg c2tpcF9iaXRzMShnYik7ICAgICAvLyBzcHNfc3VicGljX2lkW2ldCisgICAgICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPSBnZXRfdWVf Z29sb21iX2xvbmcoZ2IpOworCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0 aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19wYXJzZV9w cHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29k ZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworCisgICAgLy8gTm90aGluZyBvZiBpbXBv cnRhbmNlIHRvIHBhcnNlIGluIFBQUworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBh c3QgdGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuYWxfdW5p dF9wYXJzZV9oZWFkZXIoR2V0Qml0Q29udGV4dCAqZ2IsIHVpbnQ4X3QgKm5hbF90eXBlKQorewor ICAgIC8qCisgICAgICogZm9yYmlkZGVuX3plcm9fYml0ICAgIHUoMSkKKyAgICAgKiBudWhfcmVz ZXJ2ZWRfemVyb19iaXQgdSgxKQorICAgICAqIG51aF9sYXllcl9pZCAgICAgICAgICB1KDYpCisg ICAgICovCisgICAgc2tpcF9iaXRzKGdiLCA4KTsKKyAgICAqbmFsX3R5cGUgPSBnZXRfYml0cyhn YiwgNSk7CisKKyAgICAvKgorICAgICAqIG51aF90ZW1wb3JhbF9pZF9wbHVzMSB1KDMpCisgICAg ICovCisgICAgc2tpcF9iaXRzKGdiLCAzKTsKK30KKworc3RhdGljIGludCB2dmNjX2FycmF5X2Fk ZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBuYWxfdHlwZSwgaW50IHBzX2FycmF5 X2NvbXBsZXRlbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVj b2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgaW50IHJldDsKKyAgICB1aW50 OF90IGluZGV4OworICAgIHVpbnQxNl90IG51bV9uYWx1czsKKyAgICBWVkNDTkFMVW5pdEFycmF5 ICphcnJheTsKKworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHZ2Y2MtPm51bV9vZl9hcnJh eXM7IGluZGV4KyspCisgICAgICAgIGlmICh2dmNjLT5hcnJheVtpbmRleF0uTkFMX3VuaXRfdHlw ZSA9PSBuYWxfdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKGluZGV4ID49IHZ2 Y2MtPm51bV9vZl9hcnJheXMpIHsKKyAgICAgICAgdWludDhfdCBpOworCisgICAgICAgIHJldCA9 CisgICAgICAgICAgICBhdl9yZWFsbG9jcF9hcnJheSgmdnZjYy0+YXJyYXksIGluZGV4ICsgMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAg ICBmb3IgKGkgPSB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpIDw9IGluZGV4OyBpKyspCisgICAgICAg ICAgICBtZW1zZXQoJnZ2Y2MtPmFycmF5W2ldLCAwLCBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkp OworICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gaW5kZXggKyAxOworICAgIH0KKworICAg IGFycmF5ID0gJnZ2Y2MtPmFycmF5W2luZGV4XTsKKyAgICBudW1fbmFsdXMgPSBhcnJheS0+bnVt X25hbHVzOworCisgICAgcmV0ID0gYXZfcmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdCwg bnVtX25hbHVzICsgMSwgc2l6ZW9mKHVpbnQ4X3QgKikpOworICAgIGlmIChyZXQgPCAwKQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0KKyAgICAgICAgYXZfcmVhbGxvY3BfYXJyYXko JmFycmF5LT5uYWxfdW5pdF9sZW5ndGgsIG51bV9uYWx1cyArIDEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZih1aW50MTZfdCkpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBy ZXR1cm4gcmV0OworCisgICAgYXJyYXktPm5hbF91bml0W251bV9uYWx1c10gPSBuYWxfYnVmOwor ICAgIGFycmF5LT5uYWxfdW5pdF9sZW5ndGhbbnVtX25hbHVzXSA9IG5hbF9zaXplOworICAgIGFy cmF5LT5OQUxfdW5pdF90eXBlID0gbmFsX3R5cGU7CisgICAgYXJyYXktPm51bV9uYWx1cysrOwor CisgICAgLyoKKyAgICAqIFdoZW4gdGhlIHNhbXBsZSBlbnRyeSBuYW1lIGlzICd2dmMxJywgdGhl IGZvbGxvd2luZyBhcHBsaWVzOgorICAgICog4oCiIFRoZSB2YWx1ZSBvZiBhcnJheV9jb21wbGV0 ZW5lc3Mgc2hhbGwgYmUgZXF1YWwgdG8gMSBmb3IgYXJyYXlzIG9mIFNQUywKKyAgICAqICAgYW5k IFBQUyBOQUwgdW5pdHMuCisgICAgKiDigKIgSWYgYSBWVkMgYml0c3RyZWFtIGluY2x1ZGVzIERD SSBOQUwgdW5pdChzKSwgdGhlIHZhbHVlIG9mCisgICAgKiAgIGFycmF5X2NvbXBsZXRlbmVzcyBz aGFsbCBiZSBlcXVhbCB0byAxIGZvciB0aGUgYXJyYXkgb2YgRENJIHVuaXRzLgorICAgICogICBP dGhlcndpc2UsIE5BTF91bml0X3R5cGUgc2hhbGwgbm90IGluZGljYXRlIERDSSBOQUwgdW5pdHMu CisgICAgKiDigKIgSWYgYSBWVkMgYml0c3RyZWFtIGluY2x1ZGVzIFZQUyBOQUwgdW5pdChzKSwg dGhlIHZhbHVlIG9mCisgICAgKiAgIGFycmF5X2NvbXBsZXRlbmVzcyBzaGFsbCBiZSBlcXVhbCB0 byAxIGZvciB0aGUgYXJyYXkgb2YgVlBTIE5BTCB1bml0cy4KKyAgICAqICAgT3RoZXJ3aXNlLCBO QUxfdW5pdF90eXBlIHNoYWxsIG5vdCBpbmRpY2F0ZSBWUFMgTkFMIHVuaXRzLgorICAgICogV2hl biB0aGUgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNzIGlzIGVxdWFsIHRvIDEgZm9yIGFuIGFy cmF5IG9mIGEKKyAgICAqIHBhcnRpY3VsYXIgTkFMX3VuaXRfdHlwZSB2YWx1ZSwgTkFMIHVuaXRz IG9mIHRoYXQgTkFMX3VuaXRfdHlwZSB2YWx1ZQorICAgICogY2Fubm90IGJlIHVwZGF0ZWQgd2l0 aG91dCBjYXVzaW5nIGEgZGlmZmVyZW50IHNhbXBsZSBlbnRyeSB0byBiZSB1c2VkLgorICAgICog V2hlbiB0aGUgc2FtcGxlIGVudHJ5IG5hbWUgaXMgJ3Z2aTEnLCB0aGUgdmFsdWUgb2YgYXJyYXlf Y29tcGxldGVuZXNzCisgICAgKiBvZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBhcnJh eXMgc2hhbGwgYmUgZXF1YWwgdG8gMDoKKyAgICAgIOKAoiBUaGUgYXJyYXkgb2YgRENJIE5BTCB1 bml0cywgaWYgcHJlc2VudC4KKyAgICAgIOKAoiBUaGUgYXJyYXkgb2YgVlBTIE5BTCB1bml0cywg aWYgcHJlc2VudC4KKyAgICAgIOKAoiBUaGUgYXJyYXkgb2YgU1BTIE5BTCB1bml0cworICAgICAg 4oCiIFRoZSBhcnJheSBvZiBQUFMgTkFMIHVuaXRzLgorICAgICovCisgICAgaWYgKG5hbF90eXBl ID09IFZWQ19WUFNfTlVUIHx8IG5hbF90eXBlID09IFZWQ19TUFNfTlVUIHx8CisgICAgICAgIG5h bF90eXBlID09IFZWQ19QUFNfTlVUIHx8IG5hbF90eXBlID09IFZWQ19EQ0lfTlVUICkKKyAgICAg ICAgYXJyYXktPmFycmF5X2NvbXBsZXRlbmVzcyA9IHBzX2FycmF5X2NvbXBsZXRlbmVzczsKKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYWRkX25hbF91bml0KHVpbnQ4X3Qg Km5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0ID0g MDsKKyAgICBHZXRCaXRDb250ZXh0IGdiYzsKKyAgICB1aW50OF90IG5hbF90eXBlOworICAgIHVp bnQ4X3QgKnJic3BfYnVmOworICAgIHVpbnQzMl90IHJic3Bfc2l6ZTsKKworICAgIHJic3BfYnVm ID0gZmZfbmFsX3VuaXRfZXh0cmFjdF9yYnNwKG5hbF9idWYsIG5hbF9zaXplLCAmcmJzcF9zaXpl LCAyKTsKKyAgICBpZiAoIXJic3BfYnVmKSB7CisgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVN KTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gaW5pdF9nZXRfYml0czgo JmdiYywgcmJzcF9idWYsIHJic3Bfc2l6ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIGdv dG8gZW5kOworCisgICAgbmFsX3VuaXRfcGFyc2VfaGVhZGVyKCZnYmMsICZuYWxfdHlwZSk7CisK KyAgICAvKgorICAgICAqIE5vdGU6IG9ubHkgJ2RlY2xhcmF0aXZlJyBTRUkgbWVzc2FnZXMgYXJl IGFsbG93ZWQgaW4KKyAgICAgKiB2dmNjLiBQZXJoYXBzIHRoZSBTRUkgcGxheWxvYWQgdHlwZSBz aG91bGQgYmUgY2hlY2tlZAorICAgICAqIGFuZCBub24tZGVjbGFyYXRpdmUgU0VJIG1lc3NhZ2Vz IGRpc2NhcmRlZD8KKyAgICAgKi8KKyAgICBzd2l0Y2ggKG5hbF90eXBlKSB7CisgICAgY2FzZSBW VkNfT1BJX05VVDoKKyAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgIGNhc2UgVlZDX1NQU19OVVQ6 CisgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05VVDoKKyAg ICBjYXNlIFZWQ19TVUZGSVhfU0VJX05VVDoKKyAgICAgICAgcmV0ID0gdnZjY19hcnJheV9hZGRf bmFsX3VuaXQobmFsX2J1ZiwgbmFsX3NpemUsIG5hbF90eXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwc19hcnJheV9jb21wbGV0ZW5lc3MsIHZ2Y2MpOworICAgICAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBlbHNlIGlmIChu YWxfdHlwZSA9PSBWVkNfVlBTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfdnBz KCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCkK KyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2Vfc3BzKCZnYmMsIHZ2Y2MpOworICAgICAgICBl bHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfUFBTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2Nf cGFyc2VfcHBzKCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNf T1BJX05VVCkgeworICAgICAgICAgICAgLy8gbm90IHlldCBzdXBwb3J0ZWQKKyAgICAgICAgfQor ICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg ICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgZW5kOgorICAgIGF2X2ZyZWUocmJzcF9idWYpOwor ICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y2NfaW5pdChWVkNEZWNvZGVyQ29u ZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBtZW1zZXQodnZjYywgMCwgc2l6ZW9mKFZW Q0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKSk7CisgICAgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVz T25lID0gMzsgICAgICAgLy8gNCBieXRlcworCisgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25z dHJhaW50X2luZm8gPSAxOworCisgICAgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyA9IDE7Cit9CisK K3N0YXRpYyB2b2lkIHZ2Y2NfY2xvc2UoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2 Y2MpCit7CisgICAgdWludDhfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9v Zl9hcnJheXM7IGkrKykgeworICAgICAgICB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXMgPSAwOwor ICAgICAgICBhdl9mcmVlcCgmdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXQpOworICAgICAgICBhdl9m cmVlcCgmdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoKTsKKyAgICB9CisKKyAgICBmcmVl KHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnKTsKKyAgICBmcmVlKHZ2 Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGMpOworICAgIGZyZWUodnZjYy0+cHRsLmdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjKTsKKworICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMgPSAwOworICAgIGF2 X2ZyZWVwKCZ2dmNjLT5hcnJheSk7Cit9CisKK3N0YXRpYyBpbnQgdnZjY193cml0ZShBVklPQ29u dGV4dCAqcGIsIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIHVp bnQ4X3QgaTsKKyAgICB1aW50MTZfdCBqLCB2cHNfY291bnQgPSAwLCBzcHNfY291bnQgPSAwLCBw cHNfY291bnQgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgLyoKKyAg ICAgKiBJdCdzIHVuY2xlYXIgaG93IHRvIHByb3Blcmx5IGNvbXB1dGUgdGhlc2UgZmllbGRzLCBz bworICAgICAqIGxldCdzIGFsd2F5cyBzZXQgdGhlbSB0byB2YWx1ZXMgbWVhbmluZyAndW5zcGVj aWZpZWQnLgorICAgICAqLworICAgIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlID0gMDsKKyAgICB2dmNj LT5jb25zdGFudF9mcmFtZV9yYXRlID0gMTsKKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJB Q0UsCisgICAgICAgICAgICJsZW5ndGhTaXplTWludXNPbmU6ICAgICAgICAgICAgICAgICAgJSIg UFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lKTsKKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAicHRsX3ByZXNlbnRfZmxhZzog ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bF9w cmVzZW50X2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAg ICJvbHNfaWR4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsIHZ2 Y2MtPm9sc19pZHgpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAg ICJudW1fc3VibGF5ZXJzOiAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAg ICAgICAgICAgdnZjYy0+bnVtX3N1YmxheWVycyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19U UkFDRSwKKyAgICAgICAgICAgImNvbnN0YW50X2ZyYW1lX3JhdGU6ICAgICAgICAgICAgICAgICAl IiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5jb25zdGFudF9mcmFtZV9yYXRlKTsKKyAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiY2hyb21hX2Zvcm1hdF9p ZGM6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmNo cm9tYV9mb3JtYXRfaWRjKTsKKworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAg ICAgICAgICJiaXRfZGVwdGhfbWludXM4OiAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxu IiwKKyAgICAgICAgICAgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCk7CisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9ieXRlc19jb25zdHJhaW50X2luZm86ICAg ICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2Nv bnN0cmFpbnRfaW5mbyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAg ICAgImdlbmVyYWxfcHJvZmlsZV9pZGM6ICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAor ICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyk7CisgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdlbmVyYWxfdGllcl9mbGFnOiAgICAgICAg ICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF90 aWVyX2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJn ZW5lcmFsX2xldmVsX2lkYzogICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAg ICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjKTsKKyAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAorICAgICAgICAgICAicHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnOiAg ICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfZnJhbWVfb25seV9j b25zdHJhaW50X2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAg ICAgICJwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc6ICAgICAgICAgJSIgUFJJdTggIlxuIiwK KyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZyk7CisgICAg Zm9yIChpID0gMDsgaSA8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOyBpKysp IHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJn ZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1slZF06ICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCisg ICAgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm9baV0pOworICAg IH0KKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMTsgaSsrKSB7 CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAicHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1slIiBQUkl1OCAiXTogICUiIFBSSXU4ICJcbiIs IGksCisgICAgICAgICAgICAgICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRf ZmxhZ1tpXSk7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAg ICAgICAic3VibGF5ZXJfbGV2ZWxfaWRjWyUiIFBSSXU4ICJdOiAlIiBQUkl1OCAiXG4iLCBpLAor ICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSk7CisgICAgfQor CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9zdWJfcHJv ZmlsZXM6ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNj LT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2Mt PnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlczsgaSsrKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbJSIg UFJJdTggIl06ICAgICAgICAgJSIgUFJJeDMyICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNj LT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbaV0pOworICAgIH0KKworICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJtYXhfcGljdHVyZV93aWR0aDogICAgICAg ICAgICAgICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm1heF9waWN0dXJl X3dpZHRoKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAibWF4 X3BpY3R1cmVfaGVpZ2h0OiAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLAorICAgICAg ICAgICB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df VFJBQ0UsCisgICAgICAgICAgICJhdmdfZnJhbWVfcmF0ZTogICAgICAgICAgICAgICAgICAgICAg JSIgUFJJdTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKKworICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJudW1fb2ZfYXJyYXlzOiAg ICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+bnVt X29mX2FycmF5cyk7CisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkr KykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAg ImFycmF5X2NvbXBsZXRlbmVzc1slIiBQUkl1OCAiXTogICAgICAgICAgICAgICAlIiBQUkl1OCAi XG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uYXJyYXlfY29tcGxldGVuZXNz KTsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJO QUxfdW5pdF90eXBlWyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxu IiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUpOworICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAgICAgIm51bV9uYWx1 c1slIiBQUkl1OCAiXTogICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwgaSwK KyAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyk7CisgICAgICAgIGZvciAo aiA9IDA7IGogPCB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7IGorKykKKyAgICAgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAgICAgIm5hbF91bml0X2xl bmd0aFslIiBQUkl1OCAiXVslIiBQUkl1MTYgIl06ICAgICAgICAgICAgICAgJSIKKyAgICAgICAg ICAgICAgICAgICBQUkl1MTYgIlxuIiwgaSwgaiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVu Z3RoW2pdKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdlIG5lZWQgYXQgbGVhc3Qgb25lIG9m IGVhY2g6IFZQUyBhbmQgU1BTLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5u dW1fb2ZfYXJyYXlzOyBpKyspCisgICAgICAgIHN3aXRjaCAodnZjYy0+YXJyYXlbaV0uTkFMX3Vu aXRfdHlwZSkgeworICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgICAgICAgICAgdnBzX2Nv dW50ICs9IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICAgICAgc3BzX2NvdW50ICs9IHZ2Y2MtPmFy cmF5W2ldLm51bV9uYWx1czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZWQ19Q UFNfTlVUOgorICAgICAgICAgICAgcHBzX2NvdW50ICs9IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1 czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKworICAgIGlmICghc3BzX2NvdW50IHx8IHNwc19jb3VudCA+IFZWQ19N QVhfU1BTX0NPVU5UKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAg IC8qIGJpdCg1KSByZXNlcnZlZCA9IOKAmDExMTEx4oCZYjsKKyAgICAgICB1bnNpZ25lZCBpbnQg KDIpIExlbmd0aFNpemVNaW51c09uZQorICAgICAgIHVuc2lnbmVkIGludCAoMSkgcHRsX3ByZXNl bnRfZmxhZyAqLworICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA8PCAx IHwgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyB8IDB4ZjgpOworCisgICAgaWYgKHZ2Y2MtPnB0bF9w cmVzZW50X2ZsYWcpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50KDkpIG9s c19pZHg7CisgICAgICAgICAqIHVuc2lnbmVkIGludCgzKSBudW1fc3VibGF5ZXJzOworICAgICAg ICAgKiB1bnNpZ25lZCBpbnQoMikgY29uc3RhbnRfZnJhbWVfcmF0ZTsKKyAgICAgICAgICogdW5z aWduZWQgaW50KDIpIGNocm9tYV9mb3JtYXRfaWRjOyAgICAgKi8KKyAgICAgICAgYXZpb193YjE2 KHBiLAorICAgICAgICAgICAgICAgICAgdnZjYy0+b2xzX2lkeCA8PCA3IHwgdnZjYy0+bnVtX3N1 YmxheWVycyA8PCA0IHwgdnZjYy0+CisgICAgICAgICAgICAgICAgICBjb25zdGFudF9mcmFtZV9y YXRlIDw8IDIgfCB2dmNjLT5jaHJvbWFfZm9ybWF0X2lkYyk7CisKKyAgICAgICAgLyogdW5zaWdu ZWQgaW50KDMpIGJpdF9kZXB0aF9taW51czg7CisgICAgICAgICAgIGJpdCg1KSByZXNlcnZlZCA9 IOKAmDExMTEx4oCZYjsgKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+Yml0X2RlcHRoX21p bnVzOCA8PCA1IHwgMHgxZik7CisKKyAgICAgICAgLy9WVkNQVExSZWNvcmQKKworICAgICAgICAv KiBiaXQoMikgcmVzZXJ2ZWQgPSDigJgwMOKAmWI7CisgICAgICAgICAgIHVuc2lnbmVkIGludCAo NikgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNj LT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAmIDB4M2YpOworCisgICAgICAgIC8qIHVu c2lnbmVkIGludCAoNykgZ2VuZXJhbF9wcm9maWxlX2lkYworICAgICAgICAgICB1bnNpZ25lZCBp bnQgKDEpIGdlbmVyYWxfdGllcl9mbGFnICovCisgICAgICAgIGF2aW9fdzgocGIsCisgICAgICAg ICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMgPDwgMSB8IHZ2Y2MtPnB0bC5n ZW5lcmFsX3RpZXJfZmxhZyk7CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50ICg4KSBnZW5lcmFs X2xldmVsX2lkYyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZl bF9pZGMpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHVuc2lnbmVkIGludCAoMSkgcHRsX2Zy YW1lX29ubHlfY29uc3RyYWludF9mbGFnCisgICAgICAgICAqIHVuc2lnbmVkIGludCAoMSkgcHRs X211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnCisgICAgICAgICAqIHVuc2lnbmVkIGludCAoOCpudW1f Ynl0ZXNfY29uc3RyYWludF9pbmZvIC0yKSBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbyAqLworICAg ICAgICBidWYgPQorICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jKHNpemVvZih1 bnNpZ25lZCBjaGFyKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZj Yy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOworICAgICAgICAqYnVmID0gdnZjYy0+ cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA8PCB2dmNjLT5wdGwuCisgICAgICAg ICAgICBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvICogOCAtIDEgfCB2dmNjLT5wdGwuCisgICAg ICAgICAgICBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgPDwgdnZjYy0+cHRsLm51bV9ieXRl c19jb25zdHJhaW50X2luZm8gKgorICAgICAgICAgICAgOCAtIDIgfCAqdnZjYy0+cHRsLmdlbmVy YWxfY29uc3RyYWludF9pbmZvID4+IDI7CisgICAgICAgIGF2aW9fd3JpdGUocGIsIGJ1ZiwgdnZj Yy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOworICAgICAgICBmcmVlKGJ1Zik7CisK KyAgICAgICAgaWYgKHZ2Y2MtPm51bV9zdWJsYXllcnMgPiAxKSB7CisgICAgICAgICAgICB1aW50 OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzID0gMDsKKyAgICAgICAgICAgIGZv ciAoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAg ICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyA9CisgICAgICAgICAg ICAgICAgICAgIChwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyA8PCAxIHwgdnZjYy0+ cHRsLgorICAgICAgICAgICAgICAgICAgICAgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxh Z1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdmlvX3c4KHBiLCBwdGxfc3VibGF5 ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBp ID0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBp ZiAodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCisgICAgICAg ICAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSk7Cisg ICAgICAgIH0KKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoOCkgbnVtX3N1Yl9wcm9maWxlczsg Ki8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsK KworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9m aWxlczsgaisrKSB7CisgICAgICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMzIpIGdlbmVyYWxfc3Vi X3Byb2ZpbGVfaWRjW2pdOyAqLworICAgICAgICAgICAgYXZpb193YjMyKHBiLCB2dmNjLT5wdGwu Z2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbal0pOworICAgICAgICB9CisKKyAgICAgICAgLy9FbmQg b2YgVnZjUFRMUmVjb3JkCisKKyAgICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50KDE2 KSBtYXhfcGljdHVyZV93aWR0aDsqLworICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPm1heF9w aWN0dXJlX3dpZHRoKTsKKworICAgICAgICAvKgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYp IG1heF9waWN0dXJlX2hlaWdodDsqLworICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPm1heF9w aWN0dXJlX2hlaWdodCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdW5zaWduZWQgaW50KDE2 KSBhdmdfZnJhbWVfcmF0ZTsgKi8KKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5hdmdfZnJh bWVfcmF0ZSk7CisgICAgfQorCisgICAgLyogdW5zaWduZWQgaW50KDgpIG51bV9vZl9hcnJheXM7 ICovCisgICAgYXZpb193OChwYiwgdnZjYy0+bnVtX29mX2FycmF5cyk7CisKKyAgICBmb3IgKGkg PSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAgIC8qCisgICAgICAg ICAqIGJpdCgxKSBhcnJheV9jb21wbGV0ZW5lc3M7CisgICAgICAgICAqIHVuc2lnbmVkIGludCgy KSByZXNlcnZlZCA9IDA7CisgICAgICAgICAqIHVuc2lnbmVkIGludCg1KSBOQUxfdW5pdF90eXBl OworICAgICAgICAgKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+YXJyYXlbaV0uYXJyYXlf Y29tcGxldGVuZXNzIDw8IDcgfAorICAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLk5BTF91 bml0X3R5cGUgJiAweDFmKTsKKyAgICAgICAgLyogdW5zaWduZWQgaW50KDE2KSBudW1fbmFsdXM7 ICovCisgICAgICAgIGlmICh2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlICE9IFZWQ19EQ0lf TlVUICYmCisgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlICE9IFZWQ19P UElfTlVUKQorICAgICAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5hcnJheVtpXS5udW1fbmFs dXMpOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOyBq KyspIHsKKyAgICAgICAgICAgIC8qIHVuc2lnbmVkIGludCgxNikgbmFsX3VuaXRfbGVuZ3RoOyAq LworICAgICAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5n dGhbal0pOworCisgICAgICAgICAgICAvKiBiaXQoOCpuYWxfdW5pdF9sZW5ndGgpIG5hbF91bml0 OyAqLworICAgICAgICAgICAgYXZpb193cml0ZShwYiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRb al0sCisgICAgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0 aFtqXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2gy NjZfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwKKyAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3Vu dCkKK3sKKyAgICBpbnQgbnVtX3BzID0gMCwgcmV0ID0gMDsKKyAgICB1aW50OF90ICpidWYsICpl bmQsICpzdGFydCA9IE5VTEw7CisKKyAgICBpZiAoIWZpbHRlcl9wcykgeworICAgICAgICByZXQg PSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzKHBiLCBidWZfaW4sIHNpemUpOworICAgICAgICBnb3Rv IGVuZDsKKyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihidWZf aW4sICZzdGFydCwgJnNpemUpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBnb3RvIGVuZDsK KworICAgIHJldCA9IDA7CisgICAgYnVmID0gc3RhcnQ7CisgICAgZW5kID0gc3RhcnQgKyBzaXpl OworCisgICAgd2hpbGUgKGVuZCAtIGJ1ZiA+IDQpIHsKKyAgICAgICAgdWludDMyX3QgbGVuID0g RkZNSU4oQVZfUkIzMihidWYpLCBlbmQgLSBidWYgLSA0KTsKKyAgICAgICAgdWludDhfdCB0eXBl ID0gKGJ1Zls1XSA+PiAzKTsKKworICAgICAgICBidWYgKz0gNDsKKworICAgICAgICBzd2l0Y2gg KHR5cGUpIHsKKyAgICAgICAgY2FzZSBWVkNfVlBTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1BT X05VVDoKKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICAgICAgICAgIG51bV9wcysrOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXQgKz0g NCArIGxlbjsKKyAgICAgICAgICAgIGF2aW9fd2IzMihwYiwgbGVuKTsKKyAgICAgICAgICAgIGF2 aW9fd3JpdGUocGIsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK KyAgICAgICAgYnVmICs9IGxlbjsKKyAgICB9CisKKyAgZW5kOgorICAgIGF2X2ZyZWUoc3RhcnQp OworICAgIGlmIChwc19jb3VudCkKKyAgICAgICAgKnBzX2NvdW50ID0gbnVtX3BzOworICAgIHJl dHVybiByZXQ7Cit9CisKK2ludCBmZl9oMjY2X2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3Qg KmJ1Zl9pbiwgdWludDhfdCAqKmJ1Zl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCkKK3sKKyAgICBBVklPQ29udGV4 dCAqcGI7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGF2aW9fb3Blbl9keW5fYnVmKCZwYik7 CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBmZl9o MjY2X2FubmV4YjJtcDQocGIsIGJ1Zl9pbiwgKnNpemUsIGZpbHRlcl9wcywgcHNfY291bnQpOwor ICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGZmaW9fZnJlZV9keW5fYnVmKCZwYik7CisgICAg ICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgKnNpemUgPSBhdmlvX2Nsb3NlX2R5bl9idWYo cGIsIGJ1Zl9vdXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9pc29tX3dyaXRlX3Z2 Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcykKK3sKKyAgICBWVkNE ZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB2dmNjOworICAgIHVpbnQ4X3QgKmJ1ZiwgKmVuZCwg KnN0YXJ0OworICAgIGludCByZXQ7CisKKyAgICBpZiAoc2l6ZSA8IDYpIHsKKyAgICAgICAgLyog V2UgY2FuJ3Qgd3JpdGUgYSB2YWxpZCB2dmNjIGZyb20gdGhlIHByb3ZpZGVkIGRhdGEgKi8KKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfSBlbHNlIGlmICgqZGF0YSA9 PSAxKSB7CisgICAgICAgIC8qIERhdGEgaXMgYWxyZWFkeSB2dmNjLWZvcm1hdHRlZCAqLworICAg ICAgICBhdmlvX3dyaXRlKHBiLCBkYXRhLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg fSBlbHNlIGlmICghKEFWX1JCMjQoZGF0YSkgPT0gMSB8fCBBVl9SQjMyKGRhdGEpID09IDEpKSB7 CisgICAgICAgIC8qIE5vdCBhIHZhbGlkIEFubmV4IEIgc3RhcnQgY29kZSBwcmVmaXggKi8KKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgcmV0ID0gZmZf YXZjX3BhcnNlX25hbF91bml0c19idWYoZGF0YSwgJnN0YXJ0LCAmc2l6ZSk7CisgICAgaWYgKHJl dCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICB2dmNjX2luaXQoJnZ2Y2MpOworCisg ICAgYnVmID0gc3RhcnQ7CisgICAgZW5kID0gc3RhcnQgKyBzaXplOworCisgICAgd2hpbGUgKGVu ZCAtIGJ1ZiA+IDQpIHsKKyAgICAgICAgdWludDMyX3QgbGVuID0gRkZNSU4oQVZfUkIzMihidWYp LCBlbmQgLSBidWYgLSA0KTsKKyAgICAgICAgdWludDhfdCB0eXBlID0gKGJ1Zls1XSA+PiAzKTsK KworICAgICAgICBidWYgKz0gNDsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg Y2FzZSBWVkNfT1BJX05VVDoKKyAgICAgICAgY2FzZSBWVkNfVlBTX05VVDoKKyAgICAgICAgY2Fz ZSBWVkNfU1BTX05VVDoKKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICAgICAgY2FzZSBW VkNfUFJFRklYX1NFSV9OVVQ6CisgICAgICAgIGNhc2UgVlZDX1NVRkZJWF9TRUlfTlVUOgorICAg ICAgICAgICAgcmV0ID0gdnZjY19hZGRfbmFsX3VuaXQoYnVmLCBsZW4sIHBzX2FycmF5X2NvbXBs ZXRlbmVzcywgJnZ2Y2MpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAg ICAgZ290byBlbmQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYnVmICs9IGxlbjsKKyAgICB9CisK KyAgICByZXQgPSB2dmNjX3dyaXRlKHBiLCAmdnZjYyk7CisKKyAgZW5kOgorICAgIHZ2Y2NfY2xv c2UoJnZ2Y2MpOworICAgIGF2X2ZyZWUoc3RhcnQpOworICAgIHJldHVybiByZXQ7Cit9CmRpZmYg LS1naXQgYS9saWJhdmZvcm1hdC9oMjY2LmggYi9saWJhdmZvcm1hdC9oMjY2LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjU4MTQ1ZTRhZQotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Zm9ybWF0L2gyNjYuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogSC4yNjYgLyBW VkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZt cGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIGludGVybmFsIGhlYWRlciBmb3IgSC4y NjYvVlZDIChkZSltdXhlciB1dGlsaXRpZXMKKyAqLworCisjaWZuZGVmIEFWRk9STUFUX0gyNjZf SAorI2RlZmluZSBBVkZPUk1BVF9IMjY2X0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1 ZGUgImF2aW8uaCIKKworLyoqCisgKiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0ZWQgSC4yNjYvVlZD IE5BTCB1bml0cyB0byB0aGUgcHJvdmlkZWQgQVZJT0NvbnRleHQuCisgKgorICogVGhlIE5BTCB1 bml0cyBhcmUgY29udmVydGVkIHRvIGFuIE1QNC1jb21wYXRpYmxlIGZvcm1hdCAoc3RhcnQgY29k ZSBwcmVmaXhlcworICogYXJlIHJlcGxhY2VkIGJ5IDQtYnl0ZSBzaXplIGZpZWxkcywgYXMgcGVy IElTTy9JRUMgMTQ0OTYtMTUpLgorICoKKyAqIElmIGZpbHRlcl9wcyBpcyBub24temVybywgYW55 IFZWQyBwYXJhbWV0ZXIgc2V0cyBmb3VuZCBpbiB0aGUgaW5wdXQgd2lsbCBiZQorICogZGlzY2Fy ZGVkLCBhbmQgKnBzX2NvdW50IHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVk IFBTIE5BTCB1bml0cy4KKyAqCisgKiBAcGFyYW0gcGIgYWRkcmVzcyBvZiB0aGUgQVZJT0NvbnRl eHQgd2hlcmUgdGhlIGRhdGEgc2hhbGwgYmUgd3JpdHRlbgorICogQHBhcmFtIGJ1Zl9pbiBhZGRy ZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQorICogQHBhcmFtIHNpemUg c2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0ZXJfcHMg d2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0cHV0ICgw KQorICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFyYW0gcHNf Y291bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNjYXJk ZWQKKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0dGVuLCBt YXkgYmUgTlVMTAorICogQHJldHVybiB0aGUgYW1vdW50IChpbiBieXRlcykgb2YgZGF0YSB3cml0 dGVuIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZQorICogICAgICAgICB2YWx1ZSBjb3Jy ZXNwb25kaW5nIHRvIGFuIEFWRVJST1IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworaW50 IGZmX2gyNjZfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9p biwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpw c19jb3VudCk7CisKKy8qKgorICogV3JpdGVzIEFubmV4IEIgZm9ybWF0dGVkIEguMjY2L1ZWQyBO QUwgdW5pdHMgdG8gYSBkYXRhIGJ1ZmZlci4KKyAqCisgKiBUaGUgTkFMIHVuaXRzIGFyZSBjb252 ZXJ0ZWQgdG8gYW4gTVA0LWNvbXBhdGlibGUgZm9ybWF0IChzdGFydCBjb2RlIHByZWZpeGVzCisg KiBhcmUgcmVwbGFjZWQgYnkgNC1ieXRlIHNpemUgZmllbGRzLCBhcyBwZXIgSVNPL0lFQyAxNDQ5 Ni0xNSkuCisgKgorICogSWYgZmlsdGVyX3BzIGlzIG5vbi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRl ciBzZXRzIGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJlCisgKiBkaXNjYXJkZWQsIGFuZCAqcHNf Y291bnQgd2lsbCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBkaXNjYXJkZWQgUFMgTkFMIHVuaXRz LgorICoKKyAqIE9uIHN1Y2Nlc3MsICpzaXplIGhvbGRzIHRoZSBzaXplIChpbiBieXRlcykgb2Yg dGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KKyAqCisgKiBAcGFyYW0gYnVmX2luIGFkZHJlc3Mgb2Yg dGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBpbnB1dCBkYXRhCisgKiBAcGFyYW0gc2l6ZSBhZGRyZXNz IG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGlucHV0 CisgKiAgICAgICAgYnVmZmVyIChvbiBpbnB1dCkgYW5kIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChv biBzdWNjZXNzKQorICogQHBhcmFtIGJ1Zl9vdXQgb24gc3VjY2VzcywgYWRkcmVzcyBvZiB0aGUg dmFyaWFibGUgaG9sZGluZyB0aGUgYWRkcmVzcyBvZgorICogICAgICAgIHRoZSBvdXRwdXQgYnVm ZmVyCisgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIgdG8gd3JpdGUgcGFyYW1ldGVyIHNldCBO QUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKKyAqICAgICAgICBvciB0byBkaXNjYXJkIHRoZW0g KG5vbi16ZXJvKQorICogQHBhcmFtIHBzX2NvdW50IGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHdo ZXJlIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkCisgKiAgICAgICAgcGFyYW1ldGVyIHNldCBOQUwg dW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5IGJlIE5VTEwKKyAqIEByZXR1cm4gMCBpbiBjYXNl IG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9S CisgKiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisgKiBAbm90ZSAqYnVmX291dCB3 aWxsIGJlIHRyZWF0ZWQgYXMgdW5pbml0aWFsaXplZCBvbiBpbnB1dCBhbmQgd29uJ3QgYmUgZnJl ZWQuCisgKi8KK2ludCBmZl9oMjY2X2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1Zl9p biwgdWludDhfdCAqKmJ1Zl9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc2l6 ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCk7CisKKy8qKgorICogV3JpdGVzIEguMjY2 L1ZWQyBleHRyYWRhdGEgKHBhcmFtZXRlciBzZXRzLCBkZWNsYXJhdGl2ZSBTRUkgTkFMIHVuaXRz KSB0bworICogdGhlIHByb3ZpZGVkIEFWSU9Db250ZXh0LgorICoKKyAqIElmIHRoZSBleHRyYWRh dGEgaXMgQW5uZXggQiBmb3JtYXQsIGl0IGdldHMgY29udmVydGVkIHRvIHZ2Y0MgZm9ybWF0IGJl Zm9yZQorICogd3JpdGluZy4KKyAqCisgKiBAcGFyYW0gcGIgYWRkcmVzcyBvZiB0aGUgQVZJT0Nv bnRleHQgd2hlcmUgdGhlIHZ2Y0Mgc2hhbGwgYmUgd3JpdHRlbgorICogQHBhcmFtIGRhdGEgYWRk cmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGRhdGEgbmVlZGVkIHRvIHdyaXRlIHRoZSB2 dmNDCisgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGRhdGEgYnVmZmVyCisg KiBAcGFyYW0gcHNfYXJyYXlfY29tcGxldGVuZXNzIHdoZXRoZXIgYWxsIHBhcmFtZXRlciBzZXRz IGFyZSBpbiB0aGUgdnZjQyAoMSkKKyAqICAgICAgICBvciB0aGVyZSBtYXkgYmUgYWRkaXRpb25h bCBwYXJhbWV0ZXIgc2V0cyBpbiB0aGUgYml0c3RyZWFtICgwKQorICogQHJldHVybiA+PTAgaW4g Y2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZF UlJPUgorICogICAgICAgICBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorICovCitpbnQgZmZfaXNv bV93cml0ZV92dmNjKEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAg ICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3MpOwor CisjZW5kaWYgLyogQVZGT1JNQVRfSDI2Nl9IICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9o MjY2ZGVjLmMgYi9saWJhdmZvcm1hdC9oMjY2ZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZGJkYTRiODY4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0 L2gyNjZkZWMuYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogUkFXIEguMjY2IC8gVlZDIHZpZGVv IGRlbXV4ZXIKKyAqIENvcHlyaWdodCAoYykgMjAyMCBOdW8gTWkgPG51b21pMjAyMUBnbWFpbC5j b20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJs aWJhdmNvZGVjL2gyNjYuaCIKKworI2luY2x1ZGUgImF2Zm9ybWF0LmgiCisjaW5jbHVkZSAicmF3 ZGVjLmgiCisKK3N0YXRpYyBpbnQgaDI2Nl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKK3sK KyAgICB1aW50MzJfdCBjb2RlID0gLTE7CisgICAgaW50IHNwcyA9IDAsIHBwcyA9IDAsIGlyYXAg PSAwOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHAtPmJ1Zl9zaXplIC0gMTsg aSsrKSB7CisgICAgICAgIGNvZGUgPSAoY29kZSA8PCA4KSArIHAtPmJ1ZltpXTsKKyAgICAgICAg aWYgKChjb2RlICYgMHhmZmZmZmYwMCkgPT0gMHgxMDApIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qg bmFsMiA9IHAtPmJ1ZltpICsgMV07CisgICAgICAgICAgICBpbnQgdHlwZSA9IChuYWwyICYgMHhG OCkgPj4gMzsKKworICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwKSAvLyBmb3JiaWRkZW5femVy b19iaXQKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKChuYWwy ICYgMHg3KSA9PSAwKSAvLyBudWhfdGVtcG9yYWxfaWRfcGx1czEKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKKworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNl IFZWQ19TUFNfTlVUOiAgICAgICBzcHMrKzsgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWVkNf UFBTX05VVDogICAgICAgcHBzKys7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVlZDX0lEUl9O X0xQOgorICAgICAgICAgICAgY2FzZSBWVkNfSURSX1dfUkFETDoKKyAgICAgICAgICAgIGNhc2Ug VlZDX0NSQV9OVVQ6CisgICAgICAgICAgICBjYXNlIFZWQ19HRFJfTlVUOiAgICAgICBpcmFwKys7 IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNwcyAm JiBwcHMgJiYgaXJhcCkKKyAgICAgICAgcmV0dXJuIEFWUFJPQkVfU0NPUkVfRVhURU5TSU9OICsg MTsgLy8gMSBtb3JlIHRoYW4gLm1wZworICAgIHJldHVybiAwOworfQorCitGRl9ERUZfUkFXVklE RU9fREVNVVhFUihoMjY2LCAicmF3IEguMjY2L1ZWQyB2aWRlbyIsIGgyNjZfcHJvYmUsICJoMjY2 LDI2Nix2dmMiLCBBVl9DT0RFQ19JRF9WVkMpCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QK ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGlu Zm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1h aWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2Ny aWJlIi4K