Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tyI4M-004l0i-KW for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Mar 2025 22:20:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tyI4L-0007Vv-C5 for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Mar 2025 22:20:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tyI4K-0007Ss-NX for pgsql-hackers@lists.postgresql.org; Fri, 28 Mar 2025 22:20:53 +0000 Received: from mail-qt1-x82b.google.com ([2607:f8b0:4864:20::82b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tyI4G-001mWo-2b for pgsql-hackers@lists.postgresql.org; Fri, 28 Mar 2025 22:20:51 +0000 Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-476b89782c3so29180181cf.1 for ; Fri, 28 Mar 2025 15:20:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1743200446; x=1743805246; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=nnzgeMZ/eEAUnG4D0WTicn0Th9ZC8yHdpuQsVRp5cQU=; b=jnie37osLot5i/RmQfHDzkLdSEW0VmGRpzsp9Sjp4P3lqBuavm3Z+uLCt8PKnbKmGA x9urGIcd5bqgc3bb5Vq9OYwmTq2rzjiQwRggZgi2I/mBJr4ctLzspN3PBxNjn0JIyzRO Tp125/QbauLECsh+t+1GjPFVGDv0CTgGUyrH6hwb4hErjRUfEN7uYjXQVqTctQoC6/dk gA+vkssZ02DF11MfLf5q7cFtAeQ9YwBQ0/gHu3Fu8v55gB2zuMkn8oSalqsiNKykmRxh N2CMTEuJzkAVtOxllkCjgVZRgsmYP7MXiv+JTmaceVEWIXy7i+EvvzejhZC3MzCKRIUG CPxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743200446; x=1743805246; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=nnzgeMZ/eEAUnG4D0WTicn0Th9ZC8yHdpuQsVRp5cQU=; b=mNavVBOkKsKKhkJKneAWjARoc3EbJV3+QKvmoJTUK3Lsq/fBn2gh/mK8bgL2zPx6ph 2IkYk1tzjI/apNK1enQlXc3TTFk/QPd3bom6qWG/o993nmEGc8PRatxWzl1B6qt4TG4p spebtzPhzsq8tEp/hkrqgouSvbrJd4p/qe1unxOTAO8jfxs1b3oKeU/beb+O+1vYJ9Tx HCMgAK391WCmPOZrXLtETYbqEOeIXGKAk9xBOObiBTwBOkphfmQB662i2kYtPG1h7JGy 09Qh7Cx+ZpzF7+6VX8HLw9QBOHO/tovzLQ15Mq0XDLJ8M3B469HyKnwipBagh39wCfrN rHDA== X-Forwarded-Encrypted: i=1; AJvYcCVCOjM4JkuFKmqXyTXe2ytZHPO5vaQjlXlZ7XClcMXmqlY3YU6eUc4dNr2tWAiRYC79lRUQF0+qkJ8y3Pbs@lists.postgresql.org X-Gm-Message-State: AOJu0YztKkQqn+lec5exGCRlvzan++lQuU5+sZ2GJ4aTs2m6fxEA+O93 2tv4HhgJGvYKSxJJiVZbYyqxyS0qKmNcNJ8Q82BX1S/OqVYY9nZ1HP0D+60SUxE= X-Gm-Gg: ASbGncvLM1Wh8KZuHx7sSqIvf0YWcNf30tkzpA6SNmxj/Kql32PfBeG0ojaOD2ah7K/ 4WnIG87DruJfBPnDsUGz0p58uAkhDPeajvOkJdIG+xqRFMgXkoxXaRy6v21i+K+BSGymPp3C3BI SW8DN7DI/0vFxy4S4LMWe2Pp+kgkWN/tesPqGlJ3A/C7ITnUJvWpRpIMBh/qqzrYZvMDarY64wI a8ftc9yMkO+GOGGYMueCdoUEHHmjZwaWtxQl4oDkdsc1J8QMErgudvEMrC1BUqeHVc0Wt+Vhp0Q MOA5DyKpmeQoT0MwRvnJ3oE9tc3dQ3fhu4sat5yeKmPh6okPxwEdgb8= X-Google-Smtp-Source: AGHT+IF+mLMrzhCLPkl0r2iduTXikoFs2ZvWiIe3n1dfzw3i2laDzNDkSCiW/Xc8vH1y3HWeI0VC/A== X-Received: by 2002:a05:622a:251:b0:476:c82a:9fe7 with SMTP id d75a77b69052e-477e4ae5357mr10613691cf.10.1743200445761; Fri, 28 Mar 2025 15:20:45 -0700 (PDT) Received: from ?IPV6:2605:a601:a681:6b00::1cb? ([2605:a601:a681:6b00::1cb]) by smtp.googlemail.com with ESMTPSA id d75a77b69052e-47782a49f86sm15954311cf.30.2025.03.28.15.20.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 28 Mar 2025 15:20:44 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------h38zyXccLdlz60yl0TtZ8kI0" Message-ID: <763d1c6e-9298-4bac-9bea-9331db78a154@dunslane.net> Date: Fri, 28 Mar 2025 18:20:42 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Non-text mode for pg_dumpall From: Andrew Dunstan To: Mahendra Singh Thalor Cc: jian he , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Srinath Reddy , pgsql-hackers@lists.postgresql.org References: <202503111705.xy7fddu36qae@alvherre.pgsql> <4ef51faa-993f-46ea-9e68-7baf736c07b8@dunslane.net> Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAmwQTAQgARQIbAwIX gAIZAQULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUC ZFlxxwUJGVGAbgAKCRCZ+n/LWfw7gXikB/9ZdcUy6CTBFIIuL/bVsc1eLEW/gJBjJBF6HxNY xgEkAgXAp4Lg4A5U+QB9GouFr7+GYxF0BU4hzoGhNPUWltxnHdMWP8nC/38LAqgMi8L/bbsm HW5YPBdWYaAZAPJQVfOAgjTbRUb26KSprpyrrJKW0ZmrZfjhNPcQ72jpWzoPLQqx2X6B0fru 1jq+cBh8lb6r1mJTim1T3JIn+F/v5VpdQS+EL8xqsHkfzKjIPsW3CIXpkypSk6saA55Rkkbl 26AW8ftPVB0Q6Lnn6FLt9CP0MGNixBQ55yq8r1K+nCBvCCjvQjM8RDm0UUum0WNl+ifQgTLO E8TWEnwVtkBf+3QWzsBNBE7KWFkBCADRnOM0FCzsYW6jtncg+dWIagjUZpvaClmqn/sJluLa Q3v1VXMQJzYs3eC1gh386W+XBwLRpDj3jzH81lX+p73Re3d3oJW7X+ffsxuzu5ZVdMUkqBYo nkAbKxr6gyJ12F/+JkUVzLcoTN+d/7YsQvUVi7NaKH8mJgjz112O4fUe3p9wfAaFa0RXHc5S GPzRTYRRlv/XZBIho4J2tkZOnteZJZ+GbxQVlINt6fd8P6al3MWOvpP/ExJPguEfjOsO6Njy xjo3WfpD4lHMOR/Oc3/8mScEF84rF2jXbsFgelWnbPWAvXY+pD0dXOFRkagGmC/viwBDqq5b 5tk76kKmUbZxABEBAAHCwHwEGAEIACYCGwwWIQTkPlhGHfx8v0RpFaWZ+n/LWfw7gQUCZFlx 5wUJGVGAjgAKCRCZ+n/LWfw7gf+iB/4g8CPY5jihf5r/8EsoIGe2H+dpVmpPF8YGBzTIvCz/ fQoOq8AX/pE76QEuFnFZWfjw+wgBXgCVmkox2Eflkk6z4ND3pcwGZ6CfCxTQCDk/dij+2DQ4 6bmDCy/sBgcbz9mTpoLC11HLoPae6YN9nBNQRZDcEFEu54OaVOqlIdbA6m+POIBCXZdHOFc0 WoDTgxHRzC1jgQNidyd6tKqcsVJs0dzF0oKTmFFmUAqTdJO12LBuNA1rlqrR3EtpYk8B/wtS 5dIMD7Q8hwQpL+4C6GNpb6ZKnPkLi47pDOLhz2qBrqN+rqUEsT3YnExYpzj5yOBi+FlmV1Hw 49QYe1sn2ZPs In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------h38zyXccLdlz60yl0TtZ8kI0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2025-03-27 Th 5:15 PM, Andrew Dunstan wrote: > > On 2025-03-19 We 2:41 AM, Mahendra Singh Thalor wrote: >> On Wed, 12 Mar 2025 at 21:18, Andrew Dunstan >> wrote: >>> >>> On 2025-03-12 We 3:03 AM, jian he wrote: >>>> On Wed, Mar 12, 2025 at 1:06 AM Álvaro Herrera >>>> wrote: >>>>> Hello, >>>>> >>>>> On 2025-Mar-11, Mahendra Singh Thalor wrote: >>>>> >>>>>> In map.dat file, I tried to fix this issue by adding number of >>>>>> characters >>>>>> in dbname but as per code comments, as of now, we are not >>>>>> supporting \n\r >>>>>> in dbnames so i removed handling. >>>>>> I will do some more study to fix this issue. >>>>> Yeah, I think this is saying that you should not consider the >>>>> contents >>>>> of map.dat as a shell string.  After all, you're not going to >>>>> _execute_ >>>>> that file via the shell. >>>>> >>>>> Maybe for map.dat you need to escape such characters somehow, so that >>>>> they don't appear as literal newlines/carriage returns. >>>>> >>>> I am confused. >>>> currently pg_dumpall plain format will abort when encountering dbname >>>> containing newline. >>>> the left dumped plain file does not contain all the cluster >>>> databases data. >>>> >>>> >>>> if pg_dumpall non-text format aborts earlier, >>>> it's aligned with pg_dumpall plain format? >>>> it's also an improvement since aborts earlier, nothing will be dumped? >>>> >>>> >>>> am i missing something? >>>> >>>> >>> I think we should fix that. >>> >>> But for the current proposal, Álvaro and I were talking this morning, >>> and we thought the simplest thing here would be to have the one line >>> format and escape NL/CRs in the database name. >>> >>> >>> cheers >>> >> Okay. As per discussions, we will keep one line entry for each >> database into map.file. >> >> Thanks all for feedback and review. >> >> Here, I am attaching updated patches for review and testing. These >> patches can be applied on commit a6524105d20b. > > > > I'm working through this patch set with a view to committing it. > Attached is some cleanup which is where I got to today, although there > is more to do. One thing I am wondering is why not put the > SimpleDatabaseOidList stuff in fe_utils/simle_list.{c,h} ? That's > where all the similar stuff belongs, and it feels strange to have this > inline in pg_restore.c. (I also don't like the name much - > SimpleOidStringList or maybe SimpleOidPlusStringList might be better). > > > OK, I have done that, so here is the result. The first two are you original patches. patch 3 adds the new list type to fe-utils, and patch 4 contains my cleanups and use of the new list type. Apart from some relatively minor cleanup, the one thing I would like to change is how dumps are named. If we are producing tar or custom format dumps, I think the file names should reflect that (oid.dmp and oid.tar rather than a bare oid as the filename), and pg_restore should look for those. I'm going to work on that tomorrow - I don't think it will be terribly difficult. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------h38zyXccLdlz60yl0TtZ8kI0 Content-Type: text/x-patch; charset=UTF-8; name="0001-move-common-code-related-to-connection-to-new-the-fi.patch" Content-Disposition: attachment; filename*0="0001-move-common-code-related-to-connection-to-new-the-fi.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3MTA1ZWQ0YTA4YjBjMmI0ZDMwZTdiM2VlZGI2Yzk0ODgyZWI3NDIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVu QGdtYWlsLmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMToxODo0NiArMDUzMApTdWJq ZWN0OiBbUEFUQ0ggMS80XSBtb3ZlIGNvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gY29ubmVjdGlv biB0byBuZXcgdGhlIGZpbGUKCkNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdf ZHVtcGFsbCwgcGdfcmVzdG9yZQphbmQgcGdfZHVtcCBzbyBtb3ZlIGNvbW1vbiBjb2RlIHRv IG5ldyBmaWxlLgoKbmV3IGZpbGUgbmFtZTogY29ubmVjdGRiLmMKLS0tCiBzcmMvYmluL3Bn X2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4vcGdfZHVtcC9j b25uZWN0ZGIuYyAgICAgICAgICB8IDI5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaCAgICAgICAgICB8ICAyNiArKysKIHNyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuYyB8ICAgNiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9k Yi5jICAgICAgIHwgIDc1ICstLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAg ICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyAgICAgICAg IHwgMjc4ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgMzUw IGluc2VydGlvbnMoKyksIDM0MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmlu L3BnX2R1bXAvY29ubmVjdGRiLmgKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFr ZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNWNhNzUuLmZh Nzk1ODgzZTlmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBAIE9CSlMgPSBcCiAJ Y29tcHJlc3NfbHo0Lm8gXAogCWNvbXByZXNzX25vbmUubyBcCiAJY29tcHJlc3NfenN0ZC5v IFwKKwljb25uZWN0ZGIubyBcCiAJZHVtcHV0aWxzLm8gXAogCWZpbHRlci5vIFwKIAlwYXJh bGxlbC5vIFwKQEAgLTUwLDggKzUxLDggQEAgcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5v IHBnX2R1bXBfc29ydC5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGcK IHBnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJt YWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBw Z19yZXN0b3JlLm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAt byAkQCQoWCkKIAotcGdfZHVtcGFsbDogcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRl ci5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0 aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQo TElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8gJChPQkpTKSB8IHN1 Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkk KENDKSAkKENGTEFHUykgcGdfZHVtcGFsbC5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxB R1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycwog CSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19kdW1wJChYKSAnJChERVNURElSKSQoYmluZGlyKScv cGdfZHVtcCQoWCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyBi L3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uM2UxZmJlOThjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmlu L3BnX2R1bXAvY29ubmVjdGRiLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIGNvbm5lY3RkYi5jCisgKiAgICBUaGlzIGlzIGEgY29tbW9uIGZp bGUgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UuCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICBzcmMv YmluL3BnX2R1bXAvY29ubmVjdGRiLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImNvbW1vbi9jb25u ZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCisjaW5jbHVkZSAiZHVtcHV0aWxz LmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCisKK3N0YXRpYyBjaGFy ICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAq KnZhbHVlcyk7CisKKy8qCisgKiBDb25uZWN0RGF0YWJhc2UKKyAqCisgKiBNYWtlIGEgZGF0 YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAqIGlu dGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiBy ZXF1aXJlZC4KKyAqCisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4g TlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQg cHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisgKgor ICogT24gc3VjY2VzcywgdGhlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0 cmluZyBjb250YWluaW5nCisgKiB0aGUgb3B0aW9ucyB1c2VkIGFuZCAnc2VydmVyX3ZlcnNp b24nIGlzIHNldCB0byB2ZXJzaW9uIHNvIHRoYXQgY2FsbGVyCisgKiBjYW4gdXNlIHRoZW0u CisgKi8KK1BHY29ubiAqCitDb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKKwkJCQljb25zdCBjaGFyICpwZ2hvc3Qs IGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCXRyaXZhbHVl IHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLCBjb25zdCBjaGFyICpwcm9n bmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbiwg Y2hhciAqcGFzc3dvcmQsCisJCQkJY2hhciAqb3ZlcnJpZGVfZGJuYW1lKQoreworCVBHY29u bgkgICAqY29ubjsKKwlib29sCQluZXdfcGFzczsKKwljb25zdCBjaGFyICpyZW1vdGV2ZXJz aW9uX3N0cjsKKwlpbnQJCQlteV92ZXJzaW9uOworCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9 IE5VTEw7CisJY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7CisJUFFjb25uaW5mb09wdGlv biAqY29ubl9vcHRzID0gTlVMTDsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJ aWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dv cmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBT dGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlm IHJlcXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWFy Z2NvdW50ID0gODsKKwkJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7CisJCWNoYXIJICAg KmVycl9tc2cgPSBOVUxMOworCQlpbnQJCQlpID0gMDsKKworCQlmcmVlKGtleXdvcmRzKTsK KwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCS8q CisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0g b2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNp dGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKKwkJICogY29ubmVjdGlvbiBz dHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQK KwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4K KwkJICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29ubl9vcHRzID0g UFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJCQlpZiAo Y29ubl9vcHRzID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisKKwkJ CWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7 IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBj b25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3 b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5 d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3Jkcykp OworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFs dWVzKSk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3 b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwg IT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNv bm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQl7CisJCQkJCWtleXdvcmRz W2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52 YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlrZXl3 b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7 CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1 ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImhv c3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3Bv cnQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVzW2ldID0gcGdw b3J0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdvcmRzW2ld ID0gInVzZXIiOworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJCWlm IChwYXNzd29yZCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFs dWVzW2ldID0gcGFzc3dvcmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJewor CQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJ CWkrKzsKKwkJfQorCQlpZiAob3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlrZXl3b3Jkc1tp XSA9ICJkYm5hbWUiOworCQkJdmFsdWVzW2krK10gPSBvdmVycmlkZV9kYm5hbWU7CisJCX0K KworCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFs dWVzW2ldID0gcHJvZ25hbWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQlj b25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJ aWYgKCFjb25uKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNl IFwiJXNcIiIsIGRibmFtZSk7CisKKwkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJ T05fQkFEICYmCisJCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkh cGFzc3dvcmQgJiYKKwkJCXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCisJCXsKKwkJCVBR ZmluaXNoKGNvbm4pOworCQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDog IiwgZmFsc2UpOworCQkJbmV3X3Bhc3MgPSB0cnVlOworCQl9CisJfSB3aGlsZSAobmV3X3Bh c3MpOworCisJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3 YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVD VElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9lcnJvcikKKwkJCXBnX2ZhdGFsKCIlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQorCQl7CisJCQlQUWZpbmlzaChjb25u KTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZhbHVlcyk7CisJCQlQUWNvbm5p bmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCS8q CisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIElmIHJlcXVlc3RlZCwgcmVtZW1i ZXIgdGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlCisJICogZm9ybSBvZiBhIGNvbm5lY3Rpb24g c3RyaW5nLgorCSAqLworCWlmIChjb25uc3RyKQorCQkqY29ubnN0ciA9IGNvbnN0cnVjdENv bm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVlKHZh bHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNp b24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJz ZXJ2ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBnX2ZhdGFs KCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisKKwlzZXJ2ZXJfdmVyc2lvbl90 ZW1wID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lvbl90ZW1w ID09IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIl c1wiIiwKKwkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOworCisJLyogSWYgcmVxdWVzdGVkLCB0 aGVuIGNvcHkgc2VydmVyIHZlcnNpb24gdG8gb3V0IHZhcmlhYmxlLiAqLworCWlmIChzZXJ2 ZXJfdmVyc2lvbikKKwkJKnNlcnZlcl92ZXJzaW9uID0gc2VydmVyX3ZlcnNpb25fdGVtcDsK KworCW15X3ZlcnNpb24gPSBQR19WRVJTSU9OX05VTTsKKworCS8qCisJICogV2UgYWxsb3cg dGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxl YXNlIG9mCisJICogb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNlZSBhbHNvIHZlcnNpb24g Y2hlY2sgaW4gcGdfZHVtcC5jLikKKwkgKi8KKwlpZiAobXlfdmVyc2lvbiAhPSBzZXJ2ZXJf dmVyc2lvbl90ZW1wCisJCSYmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wIDwgOTAyMDAgfHwKKwkJ CShzZXJ2ZXJfdmVyc2lvbl90ZW1wIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCisJ eworCQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24g bWlzbWF0Y2giKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVz OyAlcyB2ZXJzaW9uOiAlcyIsCisJCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1l LCBQR19WRVJTSU9OKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJUFFjbGVhcihleGVj dXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKKworCXJl dHVybiBjb25uOworfQorCisvKgorICogY29uc3RydWN0Q29ublN0cgorICoKKyAqIENvbnN0 cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUg cGFpcnMuIEl0IGlzCisgKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0 byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGFyYW1l dGVycyBhcmUgZXhjbHVkZWQ6CisgKglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVt cCBpbnZvY2F0aW9uCisgKglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEg cGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQorICoJZmFsbGJhY2tfYXBwbGljYXRpb25f bmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAorICovCitzdGF0aWMgY2hhciAqCitj b25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZh bHVlcykKK3sKKwlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNo YXIJICAgKmNvbm5zdHI7CisJaW50CQkJaTsKKwlib29sCQlmaXJzdGtleXdvcmQgPSB0cnVl OworCisJLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3RyaW5nIGluIGtleT0ndmFs dWUnIGZvcm1hdC4gKi8KKwlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAhPSBOVUxMOyBpKysp CisJeworCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0gMCB8fAorCQkJ c3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5 d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkKKwkJCWNvbnRp bnVlOworCisJCWlmICghZmlyc3RrZXl3b3JkKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFy KGJ1ZiwgJyAnKTsKKwkJZmlyc3RrZXl3b3JkID0gZmFsc2U7CisJCWFwcGVuZFBRRXhwQnVm ZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKKwkJYXBwZW5kQ29ublN0clZhbChidWYs IHZhbHVlc1tpXSk7CisJfQorCisJY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOwor CWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCXJldHVybiBjb25uc3RyOworfQorCisvKgor ICogZXhlY3V0ZVF1ZXJ5CisgKgorICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0 cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCisgKi8KK1BHcmVzdWx0ICoKK2V4ZWN1dGVR dWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0ICAg KnJlczsKKworCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7CisKKwlyZXMg PSBQUWV4ZWMoY29ubiwgcXVlcnkpOworCWlmICghcmVzIHx8CisJCVBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJxdWVyeSBm YWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlwZ19sb2dfZXJyb3JfZGV0 YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOworCQlQUWZpbmlzaChjb25uKTsKKwkJZXhp dF9uaWNlbHkoMSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9jb25uZWN0ZGIuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWUxZTdlZjMzZDAKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKQEAgLTAsMCAr MSwyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29ubmVjdGRiLmgKKyAq ICAgICAgQ29tbW9uIGhlYWRlciBmaWxlIGZvciBjb25uZWN0aW9uIHRvIHRoZSBkYXRhYmFz ZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog SURFTlRJRklDQVRJT04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIENPTk5FQ1REQl9ICisjZGVm aW5lIENPTk5FQ1REQl9ICisKKyNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKyNpbmNsdWRlICJw Z19iYWNrdXBfdXRpbHMuaCIKKworZXh0ZXJuIFBHY29ubiAqQ29ubmVjdERhdGFiYXNlKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0 IGNoYXIgKnBnaG9zdCwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNo YXIgKnBndXNlciwKKwkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wg ZmFpbF9vbl9lcnJvciwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwgY29uc3Qg Y2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24sCisJCQkJCQkJICAgY2hhciAq cGFzc3dvcmQsIGNoYXIgKm92ZXJyaWRlX2RibmFtZSk7CitleHRlcm4gIFBHcmVzdWx0ICpl eGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CisjZW5kaWYg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1REQl9IICovCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24u YnVpbGQKaW5kZXggNjAzYmE2Y2ZiZjAuLjkwMzE3MzdkMDEzIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkCkBAIC02LDYgKzYsNyBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmlsZXMoCiAg ICdjb21wcmVzc19sejQuYycsCiAgICdjb21wcmVzc19ub25lLmMnLAogICAnY29tcHJlc3Nf enN0ZC5jJywKKyAgJ2Nvbm5lY3RkYi5jJywKICAgJ2R1bXB1dGlscy5jJywKICAgJ2ZpbHRl ci5jJywKICAgJ3BhcmFsbGVsLmMnLApAQCAtNDgsNiArNDksNyBAQCBiaW5fdGFyZ2V0cyAr PSBwZ19kdW1wCiAKIAogcGdfZHVtcGFsbF9zb3VyY2VzID0gZmlsZXMoCisgICdjb25uZWN0 ZGIuYycsCiAgICdwZ19kdW1wYWxsLmMnLAogKQogCkBAIC02Nyw2ICs2OSw3IEBAIGJpbl90 YXJnZXRzICs9IHBnX2R1bXBhbGwKIAogCiBwZ19yZXN0b3JlX3NvdXJjZXMgPSBmaWxlcygK KyAgJ2Nvbm5lY3RkYi5jJywKICAgJ3BnX3Jlc3RvcmUuYycsCiApCiAKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaAppbmRleCA2NTg5ODZkZTZmOC4uYzY4YTIxMDI3ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw LmgKQEAgLTI5Myw3ICsyOTMsNyBAQCB0eXBlZGVmIHZvaWQgKCpTZXR1cFdvcmtlclB0clR5 cGUpIChBcmNoaXZlICpBSCk7CiAgKiBNYWluIGFyY2hpdmVyIGludGVyZmFjZS4KICAqLwog Ci1leHRlcm4gdm9pZCBDb25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYLAorZXh0ZXJuIHZv aWQgQ29ubmVjdERhdGFiYXNlQWh4KEFyY2hpdmUgKkFIWCwKIAkJCQkJCQljb25zdCBDb25u UGFyYW1zICpjcGFyYW1zLAogCQkJCQkJCWJvb2wgaXNSZWNvbm5lY3QpOwogZXh0ZXJuIHZv aWQgRGlzY29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCk7CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMKaW5kZXggODJkNTFjODlhYzYuLjNmZDI4MTgyMjNjIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC00MTQsNyArNDE0LDcgQEAg UmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCQlBSFgtPm1pblJlbW90ZVZlcnNpb24g PSAwOwogCQlBSFgtPm1heFJlbW90ZVZlcnNpb24gPSA5OTk5OTk5OwogCi0JCUNvbm5lY3RE YXRhYmFzZShBSFgsICZyb3B0LT5jcGFyYW1zLCBmYWxzZSk7CisJCUNvbm5lY3REYXRhYmFz ZUFoeChBSFgsICZyb3B0LT5jcGFyYW1zLCBmYWxzZSk7CiAKIAkJLyoKIAkJICogSWYgd2Un cmUgdGFsa2luZyB0byB0aGUgREIgZGlyZWN0bHksIGRvbid0IHNlbmQgY29tbWVudHMgc2lu Y2UgdGhleQpAQCAtNDQzNyw3ICs0NDM3LDcgQEAgcmVzdG9yZV90b2NfZW50cmllc19wb3N0 Zm9yayhBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnBlbmRpbmdfbGlzdCkKIAkvKgog CSAqIE5vdyByZWNvbm5lY3QgdGhlIHNpbmdsZSBwYXJlbnQgY29ubmVjdGlvbi4KIAkgKi8K LQlDb25uZWN0RGF0YWJhc2UoKEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVl KTsKKwlDb25uZWN0RGF0YWJhc2VBaHgoKEFyY2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1z LCB0cnVlKTsKIAogCS8qIHJlLWVzdGFibGlzaCBmaXhlZCBzdGF0ZSAqLwogCV9kb1NldEZp eGVkT3V0cHV0U3RhdGUoQUgpOwpAQCAtNTA1NCw3ICs1MDU0LDcgQEAgQ2xvbmVBcmNoaXZl KEFyY2hpdmVIYW5kbGUgKkFIKQogCSAqIENvbm5lY3Qgb3VyIG5ldyBjbG9uZSBvYmplY3Qg dG8gdGhlIGRhdGFiYXNlLCB1c2luZyB0aGUgc2FtZSBjb25uZWN0aW9uCiAJICogcGFyYW1l dGVycyB1c2VkIGZvciB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4KIAkgKi8KLQlDb25uZWN0 RGF0YWJhc2UoKEFyY2hpdmUgKikgY2xvbmUsICZjbG9uZS0+cHVibGljLnJvcHQtPmNwYXJh bXMsIHRydWUpOworCUNvbm5lY3REYXRhYmFzZUFoeCgoQXJjaGl2ZSAqKSBjbG9uZSwgJmNs b25lLT5wdWJsaWMucm9wdC0+Y3BhcmFtcywgdHJ1ZSk7CiAKIAkvKiByZS1lc3RhYmxpc2gg Zml4ZWQgc3RhdGUgKi8KIAlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVSZWFkKQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kYi5jCmluZGV4IDcxYzU1ZDI0NjZhLi4yMjdkZDk2Mzk4NCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfZGIuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiY29t bW9uL2Nvbm5lY3QuaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAi Y29ubmVjdGRiLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNr dXBfYXJjaGl2ZXIuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfZGIuaCIKQEAgLTg2LDkgKzg3 LDkgQEAgUmVjb25uZWN0VG9TZXJ2ZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmRibmFtZSkKIAkgKiBBcmNoaXZlSGFuZGxlJ3MgY29ubkNhbmNlbCwgYmVmb3JlIGNsb3Np bmcgb2xkIGNvbm5lY3Rpb24uICBPdGhlcndpc2UKIAkgKiBhbiBpbGwtdGltZWQgU0lHSU5U IGNvdWxkIHRyeSB0byBhY2Nlc3MgYSBkZWFkIGNvbm5lY3Rpb24uCiAJICovCi0JQUgtPmNv bm5lY3Rpb24gPSBOVUxMOwkJLyogZG9kZ2UgZXJyb3IgY2hlY2sgaW4gQ29ubmVjdERhdGFi YXNlICovCisJQUgtPmNvbm5lY3Rpb24gPSBOVUxMOwkJLyogZG9kZ2UgZXJyb3IgY2hlY2sg aW4gQ29ubmVjdERhdGFiYXNlQWh4ICovCiAKLQlDb25uZWN0RGF0YWJhc2UoKEFyY2hpdmUg KikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKKwlDb25uZWN0RGF0YWJhc2VBaHgoKEFy Y2hpdmUgKikgQUgsICZyb3B0LT5jcGFyYW1zLCB0cnVlKTsKIAogCVBRZmluaXNoKG9sZENv bm4pOwogfQpAQCAtMTA1LDE0ICsxMDYsMTMgQEAgUmVjb25uZWN0VG9TZXJ2ZXIoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmRibmFtZSkKICAqIHVzZXJuYW1lIG5ldmVyIGRv ZXMgY2hhbmdlLCBzbyBvbmUgc2F2ZWRQYXNzd29yZCBpcyBzdWZmaWNpZW50LgogICovCiB2 b2lkCi1Db25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYLAorQ29ubmVjdERhdGFiYXNlQWh4 KEFyY2hpdmUgKkFIWCwKIAkJCQljb25zdCBDb25uUGFyYW1zICpjcGFyYW1zLAogCQkJCWJv b2wgaXNSZWNvbm5lY3QpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRs ZSAqKSBBSFg7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkOwogCWNoYXIJICAgKnBhc3N3 b3JkOwotCWJvb2wJCW5ld19wYXNzOwogCiAJaWYgKEFILT5jb25uZWN0aW9uKQogCQlwZ19m YXRhbCgiYWxyZWFkeSBjb25uZWN0ZWQgdG8gYSBkYXRhYmFzZSIpOwpAQCAtMTI1LDY5ICsx MjUsMTAgQEAgQ29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCwKIAlpZiAocHJvbXB0X3Bh c3N3b3JkID09IFRSSV9ZRVMgJiYgcGFzc3dvcmQgPT0gTlVMTCkKIAkJcGFzc3dvcmQgPSBz aW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwogCi0JLyoKLQkgKiBTdGFydCB0 aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVl c3RlZCBieQotCSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7Ci0JCWNvbnN0IGNoYXIgKmtl eXdvcmRzWzhdOwotCQljb25zdCBjaGFyICp2YWx1ZXNbOF07Ci0JCWludAkJCWkgPSAwOwot Ci0JCS8qCi0JCSAqIElmIGRibmFtZSBpcyBhIGNvbm5zdHJpbmcsIGl0cyBlbnRyaWVzIGNh biBvdmVycmlkZSB0aGUgb3RoZXIKLQkJICogdmFsdWVzIG9idGFpbmVkIGZyb20gY3BhcmFt czsgYnV0IGluIHR1cm4sIG92ZXJyaWRlX2RibmFtZSBjYW4KLQkJICogb3ZlcnJpZGUgdGhl IGRibmFtZSBjb21wb25lbnQgb2YgaXQuCi0JCSAqLwotCQlrZXl3b3Jkc1tpXSA9ICJob3N0 IjsKLQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT5wZ2hvc3Q7Ci0JCWtleXdvcmRzW2ldID0g InBvcnQiOwotCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPnBncG9ydDsKLQkJa2V5d29yZHNb aV0gPSAidXNlciI7Ci0JCXZhbHVlc1tpKytdID0gY3BhcmFtcy0+dXNlcm5hbWU7Ci0JCWtl eXdvcmRzW2ldID0gInBhc3N3b3JkIjsKLQkJdmFsdWVzW2krK10gPSBwYXNzd29yZDsKLQkJ a2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKLQkJdmFsdWVzW2krK10gPSBjcGFyYW1zLT5kYm5h bWU7Ci0JCWlmIChjcGFyYW1zLT5vdmVycmlkZV9kYm5hbWUpCi0JCXsKLQkJCWtleXdvcmRz W2ldID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaSsrXSA9IGNwYXJhbXMtPm92ZXJyaWRlX2Ri bmFtZTsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1l IjsKLQkJdmFsdWVzW2krK10gPSBwcm9nbmFtZTsKLQkJa2V5d29yZHNbaV0gPSBOVUxMOwot CQl2YWx1ZXNbaSsrXSA9IE5VTEw7Ci0JCUFzc2VydChpIDw9IGxlbmd0aG9mKGtleXdvcmRz KSk7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxzZTsKLQkJQUgtPmNvbm5lY3Rpb24gPSBQUWNvbm5l Y3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlpZiAoIUFILT5jb25u ZWN0aW9uKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIik7 Ci0KLQkJaWYgKFBRc3RhdHVzKEFILT5jb25uZWN0aW9uKSA9PSBDT05ORUNUSU9OX0JBRCAm JgotCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChBSC0+Y29ubmVjdGlvbikgJiYKLQkJ CXBhc3N3b3JkID09IE5VTEwgJiYKLQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCi0J CXsKLQkJCVBRZmluaXNoKEFILT5jb25uZWN0aW9uKTsKLQkJCXBhc3N3b3JkID0gc2ltcGxl X3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQkJCW5ld19wYXNzID0gdHJ1ZTsKLQkJ fQotCX0gd2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBi YWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCi0JaWYgKFBRc3Rh dHVzKEFILT5jb25uZWN0aW9uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChpc1Jl Y29ubmVjdCkKLQkJCXBnX2ZhdGFsKCJyZWNvbm5lY3Rpb24gZmFpbGVkOiAlcyIsCi0JCQkJ CSBQUWVycm9yTWVzc2FnZShBSC0+Y29ubmVjdGlvbikpOwotCQllbHNlCi0JCQlwZ19mYXRh bCgiJXMiLAotCQkJCQkgUFFlcnJvck1lc3NhZ2UoQUgtPmNvbm5lY3Rpb24pKTsKLQl9CisJ QUgtPmNvbm5lY3Rpb24gPSBDb25uZWN0RGF0YWJhc2UoY3BhcmFtcy0+ZGJuYW1lLCBOVUxM LCBjcGFyYW1zLT5wZ2hvc3QsCisJCQljcGFyYW1zLT5wZ3BvcnQsIGNwYXJhbXMtPnVzZXJu YW1lLAorCQkJcHJvbXB0X3Bhc3N3b3JkLCB0cnVlLAorCQkJcHJvZ25hbWUsIE5VTEwsIE5V TEwsIHBhc3N3b3JkLCBjcGFyYW1zLT5vdmVycmlkZV9kYm5hbWUpOwogCiAJLyogU3RhcnQg c3RyaWN0OyBsYXRlciBwaGFzZXMgbWF5IG92ZXJyaWRlIHRoaXMuICovCiAJUFFjbGVhcihF eGVjdXRlU3FsUXVlcnlGb3JTaW5nbGVSb3coKEFyY2hpdmUgKikgQUgsCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YwppbmRleCBlNDFlNjQ1ZjY0OS4uMDE1YTQzNGZjMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAt OTY2LDcgKzk2Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIE9wZW4g dGhlIGRhdGFiYXNlIHVzaW5nIHRoZSBBcmNoaXZlciwgc28gaXQga25vd3MgYWJvdXQgaXQu IEVycm9ycyBtZWFuCiAJICogZGVhdGguCiAJICovCi0JQ29ubmVjdERhdGFiYXNlKGZvdXQs ICZkb3B0LmNwYXJhbXMsIGZhbHNlKTsKKwlDb25uZWN0RGF0YWJhc2VBaHgoZm91dCwgJmRv cHQuY3BhcmFtcywgZmFsc2UpOwogCXNldHVwX2Nvbm5lY3Rpb24oZm91dCwgZHVtcGVuY29k aW5nLCBkdW1wc25hcHNob3QsIHVzZV9yb2xlKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YwppbmRleCAyZWE1NzRiMGYwNi4uNTczYThiNjFhNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YwpAQCAtMjQsMTEgKzI0LDExIEBACiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJs ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0 cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5o IgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRl ci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCi0jaW5jbHVkZSAicGdfYmFja3VwLmgi CiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwog I2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19W RVJTSU9OICJcbiIKQEAgLTcxLDIxICs3MSwxNCBAQCBzdGF0aWMgdm9pZCBidWlsZFNoU2Vj TGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1l LCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNo YXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVyIGJ1ZmZlcik7Ci1zdGF0aWMgUEdj b25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLAotCQkJCQkJCSAgIGNv bnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCi0JCQkJ CQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJCQkJ ICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpOwotc3Rh dGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25z dCBjaGFyICoqdmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1h bmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBh bmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0 dGVybnMsCiAJCQkJCQkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2 b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVT dHJpbmdMaXN0ICpwYXR0ZXJuKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQ QVRIXTsKLXN0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsKIHN0YXRpYyBQUUV4cEJ1ZmZl ciBwZ2R1bXBvcHRzOwotc3RhdGljIGNoYXIgKmNvbm5zdHIgPSAiIjsKK3N0YXRpYyBjb25z dCBjaGFyICpjb25uc3RyID0gIiI7CiBzdGF0aWMgYm9vbCBvdXRwdXRfY2xlYW4gPSBmYWxz ZTsKIHN0YXRpYyBib29sIHNraXBfYWNscyA9IGZhbHNlOwogc3RhdGljIGJvb2wgdmVyYm9z ZSA9IGZhbHNlOwpAQCAtMTI5LDggKzEyMiw2IEBAIHN0YXRpYyBjaGFyICpmaWxlbmFtZSA9 IE5VTEw7CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRl cm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2Vf ZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAotI2RlZmluZSBleGl0X25pY2VseShj b2RlKSBleGl0KGNvZGUpCi0KIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog ewpAQCAtNDk5LDE5ICs0OTAsMjIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CSAqLwogCWlmIChwZ2RiKQogCXsKLQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShwZ2RiLCBj b25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNz d29yZCwgZmFsc2UpOworCQljb25uID0gQ29ubmVjdERhdGFiYXNlKHBnZGIsIGNvbm5zdHIs IHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBm YWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbiwg TlVMTCwgTlVMTCk7CiAKIAkJaWYgKCFjb25uKQogCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBj b25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIHBnZGIpOwogCX0KIAllbHNlCiAJewotCQlj b25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdw b3J0LCBwZ3VzZXIsCi0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCWNv bm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgY29ubnN0ciwgcGdob3N0LCBwZ3Bv cnQsIHBndXNlciwKKwkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlLAorCQkJCQkJ CSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uLCBOVUxMLCBOVUxMKTsK IAkJaWYgKCFjb25uKQotCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwg Y29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bh c3N3b3JkLCB0cnVlKTsKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIs IGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCisJCQkJCQkJCSAgIHByb21wdF9w YXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVy X3ZlcnNpb24sIE5VTEwsIE5VTEwpOwogCiAJCWlmICghY29ubikKIAkJewpAQCAtMTczOCwy NTYgKzE3MzIsNiBAQCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJZGVzdHJveVBRRXhwQnVmZmVyKHNx bCk7CiB9CiAKLS8qCi0gKiBNYWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBn aXZlbiBwYXJhbWV0ZXJzLiAgQW4KLSAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBp cyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJlZC4KLSAqCi0gKiBJZiBmYWlsX29u X2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBt ZXNzYWdlCi0gKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3 b3JkIGZvciB0aGUgbmV4dCB0cnkuCi0gKgotICogT24gc3VjY2VzcywgdGhlIGdsb2JhbCB2 YXJpYWJsZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVjdGlvbiBzdHJpbmcKLSAqIGNv bnRhaW5pbmcgdGhlIG9wdGlvbnMgdXNlZC4KLSAqLwotc3RhdGljIFBHY29ubiAqCi1jb25u ZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9u X3N0cmluZywKLQkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwg Y29uc3QgY2hhciAqcGd1c2VyLAotCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9v bCBmYWlsX29uX2Vycm9yKQotewotCVBHY29ubgkgICAqY29ubjsKLQlib29sCQluZXdfcGFz czsKLQljb25zdCBjaGFyICpyZW1vdGV2ZXJzaW9uX3N0cjsKLQlpbnQJCQlteV92ZXJzaW9u OwotCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9IE5VTEw7Ci0JY29uc3QgY2hhciAqKnZhbHVl cyA9IE5VTEw7Ci0JUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKLQlzdGF0 aWMgY2hhciAqcGFzc3dvcmQgPSBOVUxMOwotCi0JaWYgKHByb21wdF9wYXNzd29yZCA9PSBU UklfWUVTICYmICFwYXNzd29yZCkKLQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNz d29yZDogIiwgZmFsc2UpOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExv b3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQotCSAqIGJhY2tl bmQuCi0JICovCi0JZG8KLQl7Ci0JCWludAkJCWFyZ2NvdW50ID0gNjsKLQkJUFFjb25uaW5m b09wdGlvbiAqY29ubl9vcHQ7Ci0JCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOwotCQlpbnQJ CQlpID0gMDsKLQotCQlmcmVlKGtleXdvcmRzKTsKLQkJZnJlZSh2YWx1ZXMpOwotCQlQUWNv bm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JCS8qCi0JCSAqIE1lcmdlIHRoZSBjb25uZWN0 aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKLQkJ ICogYW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2 YWx1ZSBpbiB0aGUKLQkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25u ZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQKLQkJICogdGhhdCB2YWx1ZSBhcyBiZWlu ZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KLQkJICovCi0JCWlmIChjb25uZWN0aW9u X3N0cmluZykKLQkJewotCQkJY29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rp b25fc3RyaW5nLCAmZXJyX21zZyk7Ci0JCQlpZiAoY29ubl9vcHRzID09IE5VTEwpCi0JCQkJ cGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29w dHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJ aWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcg JiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKLQkJ CQkJYXJnY291bnQrKzsKLQkJCX0KLQotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdj b3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9j MCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0KLQkJCWZvciAoY29ubl9v cHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0Kysp Ci0JCQl7Ci0JCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFs WzBdICE9ICdcMCcgJiYKLQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1l IikgIT0gMCkKLQkJCQl7Ci0JCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7 Ci0JCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0J CQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2Nv dW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMgPSBwZ19tYWxsb2Mw KChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQkJfQotCi0JCWlmIChwZ2hv c3QpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImhvc3QiOwotCQkJdmFsdWVzW2ldID0gcGdo b3N0OwotCQkJaSsrOwotCQl9Ci0JCWlmIChwZ3BvcnQpCi0JCXsKLQkJCWtleXdvcmRzW2ld ID0gInBvcnQiOwotCQkJdmFsdWVzW2ldID0gcGdwb3J0OwotCQkJaSsrOwotCQl9Ci0JCWlm IChwZ3VzZXIpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInVzZXIiOwotCQkJdmFsdWVzW2ld ID0gcGd1c2VyOwotCQkJaSsrOwotCQl9Ci0JCWlmIChwYXNzd29yZCkKLQkJewotCQkJa2V5 d29yZHNbaV0gPSAicGFzc3dvcmQiOwotCQkJdmFsdWVzW2ldID0gcGFzc3dvcmQ7Ci0JCQlp Kys7Ci0JCX0KLQkJaWYgKGRibmFtZSkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1l IjsKLQkJCXZhbHVlc1tpXSA9IGRibmFtZTsKLQkJCWkrKzsKLQkJfQotCQlrZXl3b3Jkc1tp XSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJdmFsdWVzW2ldID0gcHJvZ25h bWU7Ci0JCWkrKzsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwotCQljb25uID0gUFFjb25uZWN0 ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJaWYgKCFjb25uKQotCQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFt ZSk7Ci0KLQkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCi0JCQlQ UWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCi0JCQkhcGFzc3dvcmQgJiYKLQkJ CXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4pOwot CQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJ bmV3X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGlsZSAobmV3X3Bhc3MpOwotCi0JLyogY2hl Y2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5 IG1hZGUgKi8KLQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCi0Jewot CQlpZiAoZmFpbF9vbl9lcnJvcikKLQkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdl KGNvbm4pKTsKLQkJZWxzZQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsKLQotCQkJZnJlZShr ZXl3b3Jkcyk7Ci0JCQlmcmVlKHZhbHVlcyk7Ci0JCQlQUWNvbm5pbmZvRnJlZShjb25uX29w dHMpOwotCi0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCS8qCi0JICogT2ssIGNvbm5l Y3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRoZSBvcHRpb25zIHVzZWQsIGluIHRoZSBm b3JtIG9mIGEKLQkgKiBjb25uZWN0aW9uIHN0cmluZy4KLQkgKi8KLQljb25uc3RyID0gY29u c3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVzKTsKLQotCWZyZWUoa2V5d29yZHMpOwot CWZyZWUodmFsdWVzKTsKLQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JLyogQ2hl Y2sgdmVyc2lvbiAqLwotCXJlbW90ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0ZXJTdGF0dXMo Y29ubiwgInNlcnZlcl92ZXJzaW9uIik7Ci0JaWYgKCFyZW1vdGV2ZXJzaW9uX3N0cikKLQkJ cGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsKLQlzZXJ2ZXJfdmVy c2lvbiA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKLQlpZiAoc2VydmVyX3ZlcnNpb24gPT0g MCkKLQkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiBcIiVzXCIi LAotCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7Ci0KLQlteV92ZXJzaW9uID0gUEdfVkVSU0lP Tl9OVU07Ci0KLQkvKgotCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5 LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBvZgotCSAqIG91ciBvd24gbWFqb3Ig dmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCi0JICov Ci0JaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb24KLQkJJiYgKHNlcnZlcl92ZXJz aW9uIDwgOTAyMDAgfHwKLQkJCShzZXJ2ZXJfdmVyc2lvbiAvIDEwMCkgPiAobXlfdmVyc2lv biAvIDEwMCkpKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNl cnZlciB2ZXJzaW9uIG1pc21hdGNoIik7Ci0JCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZl ciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAotCQkJCQkJCXJlbW90ZXZlcnNpb25f c3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQot CVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhf U1FMKSk7Ci0KLQlyZXR1cm4gY29ubjsKLX0KLQotLyogLS0tLS0tLS0tLQotICogQ29uc3Ry dWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBw YWlycy4gSXQgaXMKLSAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVjdGlvbiBvcHRpb25zIHRv IHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCi0gKgotICogVGhlIGZvbGxvd2luZyBwYXJhbWV0 ZXJzIGFyZSBleGNsdWRlZDoKLSAqCWRibmFtZQkJLSB2YXJpZXMgaW4gZWFjaCBwZ19kdW1w IGludm9jYXRpb24KLSAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJlIHRvIHBhc3MgYSBw YXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCi0gKglmYWxsYmFja19hcHBsaWNhdGlvbl9u YW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0Ci0gKiAtLS0tLS0tLS0tCi0gKi8KLXN0 YXRpYyBjaGFyICoKLWNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBj b25zdCBjaGFyICoqdmFsdWVzKQotewotCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7Ci0JY2hhcgkgICAqY29ubnN0cjsKLQlpbnQJCQlpOwotCWJvb2wJCWZpcnN0 a2V5d29yZCA9IHRydWU7Ci0KLQkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJp bmcgaW4ga2V5PSd2YWx1ZScgZm9ybWF0LiAqLwotCWZvciAoaSA9IDA7IGtleXdvcmRzW2ld ICE9IE5VTEw7IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUi KSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwK LQkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9 PSAwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFmaXJzdGtleXdvcmQpCi0JCQlhcHBlbmRQ UUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOwotCQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKLQkJ YXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNbaV0pOwotCQlhcHBlbmRD b25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKLQl9Ci0KLQljb25uc3RyID0gcGdfc3RyZHVw KGJ1Zi0+ZGF0YSk7Ci0JZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7Ci0JcmV0dXJuIGNvbm5z dHI7Ci19Ci0KLS8qCi0gKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0 IHByb2dyYW0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIFBHcmVzdWx0ICoKLWV4ZWN1dGVR dWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQotewotCVBHcmVzdWx0ICAg KnJlczsKLQotCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7Ci0KLQlyZXMg PSBQUWV4ZWMoY29ubiwgcXVlcnkpOwotCWlmICghcmVzIHx8Ci0JCVBRcmVzdWx0U3RhdHVz KHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJxdWVyeSBm YWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQlwZ19sb2dfZXJyb3JfZGV0 YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOwotCQlQUWZpbmlzaChjb25uKTsKLQkJZXhp dF9uaWNlbHkoMSk7Ci0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQogLyoKICAqIEFzIGFib3Zl IGZvciBhIFNRTCBjb21tYW5kICh3aGljaCByZXR1cm5zIG5vdGhpbmcpLgogICovCi0tIAoy LjM0LjEKCg== --------------h38zyXccLdlz60yl0TtZ8kI0 Content-Type: text/x-patch; charset=UTF-8; name="0002-pg_dumpall-with-directory-tar-custom-format-and-rest.patch" Content-Disposition: attachment; filename*0="0002-pg_dumpall-with-directory-tar-custom-format-and-rest.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlM2UzZDRmYzMxNmIyMjIwMmI3MzY5OTQ3ZTAwMzEyZTNhY2Q5MmUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVu QGdtYWlsLmNvbT4KRGF0ZTogV2VkLCAxOSBNYXIgMjAyNSAwMTozMDoxMiArMDUzMApTdWJq ZWN0OiBbUEFUQ0ggMi80XSBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20g Zm9ybWF0IGFuZCByZXN0b3JlCiBpdCBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBn X2R1bXBhbGw6Ci1GLCAtLWZvcm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBw bGFpbiB0ZXh0IChkZWZhdWx0KSkKCkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVj dG9yeSAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFy IC0tZmlsZT1kdW1wRGlyTmFtZQpFeDozIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20g LS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXBsYWluIC0t ZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFzOgpnbG9iYWwuZGF0IDo6OiBnbG9iYWwg c3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3JtYXQKbWFwLmRhdC4gICA6OjogZGJv aWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFzZXMgaW4gc2ltcGxlIHRleHQg Zm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRib2lkMSAgLT4gdG9jLmRh dCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBzdWJkaXIgICAgIGRi b2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAg ICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVkLCBy ZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9y ZSAtLWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2Vz LzUKICAgLS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8g Z2V0IGRib2lkLCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCm5ldyBvcHRpb25zIHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAg ICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNs dWRlLWRhdGFiYXNlPVBBVFRFUk4gICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0 Y2hlcyBwYXR0ZXJuCgpXaGVuIHdlIGdpdmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0 aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxzLCBubyBkYiByZXN0b3JpbmcuCgpEZXNpZ246Cldo ZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lmaWVkIGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0 IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNrCmZvciBnbG9iYWwuZGF0IHRvIHJlc3Rv cmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBmaWxlIGlzIGV4aXN0IGluIGRpcmVj dG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxzIGZyb20gZ2xvYmFsLmRhdCBh bmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9uZQpmcm9tIG1hcC5kYXQg bGlzdCAoaWYgZXhpc3QpCgpmb3IgLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBn X3Jlc3RvcmUKCmFzIG9mIG5vdywgU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2Nh dGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRFIHBnX2NhdGFsb2cuZGVmYXVsdAppZiBu byBkYiBjb25uZWN0aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5Cgpmb3Ig ZWFjaCBkYXRhYmFzZSwgd2UgYXJlIGNsZWFuaW5nIG9uX2V4aXRfbmljZWx5X2luZGV4IGxp c3QuCgphdCB0aGUgZW5kIG9mIHJlc3RvcmUsIHdlIGFyZSBnaXZpbmcgd2FybmluZyB3aXRo IHRvdGFsIG51bWJlciBvZiBlcnJvcnMgKGluY2x1ZGluZyBnbG9iYWwuZGF0LAphbmQgZWFj aCBkYXRhYmFzZSBlcnJvcnMpIGFuZCBmb3IgZWFjaCBkYXRhYmFzZSwgd2UgYXJlIHByaW50 aW5nIHdhcm5pbmcgd2l0aCBkYm5hbWUgYW5kIHRvdGFsCmVycm9ycy4KCnRocmVhZDoKaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBS1l0TkFwOXZPdHlk WEwzX3BuR0olMkJUZXRadE4lM0RGWVNuWlNNQ3FYY2VVM21rSFB4UGclNDBtYWlsLmdtYWls LmNvbSMwNjY0MzNjYjVhZTAwN2NiZTM1ZmVmZGRmNzk2ZDUyZgotLS0KIGRvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcGFsbC5zZ21sICAgICB8ICA3OCArKy0KIGRvYy9zcmMvc2dtbC9yZWYv cGdfcmVzdG9yZS5zZ21sICAgICB8ICA0MSArLQogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVs LmMgICAgICAgICAgIHwgIDExICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyB8 ICAyMCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwgICAzICst CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgfCAgIDIgKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyAgICB8ICAyMiArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF91dGlscy5oICAgIHwgICAzICstCiBzcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxs LmMgICAgICAgICB8IDI3OCArKysrKysrLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMgICAgICAgICB8IDg0NyArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4v cGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICB8ICAgOSArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDIgKwogMTQgZmlsZXMgY2hhbmdlZCwgMTI0NCBp bnNlcnRpb25zKCspLCA3NiBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAx MDA3NTUgc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbAppbmRleCA3NjViMzBhM2E2Ni4uODJlYTIwMjg0NjkgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsxNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAgIDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5h bWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhIHNjcmlwdCBmaWxlPC9yZWZw dXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVT UUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9uIHNwZWNpZmllZCBk dW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCiAgPHJlZnN5bm9w c2lzZGl2PgpAQCAtMTIxLDEwICsxMjEsODYgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQg ZmlsZS4gIElmIHRoaXMgaXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1 dCBpcyB1c2VkLgorICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gYmUgb21pdHRlZCBv bmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbgogICAgICAgIDwv cGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1w IGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAg ICB0aGVuIHBhc3MgdGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRh YmFzZXMgY2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBp biBhcmNoaXZlIGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBm b3JtYXQuCisKKyAgICAgICAgSWYgbm9uLXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGds b2JhbC5kYXQgKGdsb2JhbCBzcWwgY29tbWFuZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRi b2lkIGFuZCBkYm5hbWVzIGxpc3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwg YmUgY3JlYXRlZC4KKyAgICAgICAgQXBhcnQgZnJvbSB0aGVzZSBmaWxlcywgb25lIHN1YmRp cmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBuYW1lIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAg VW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGlyZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpbGVz IHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAgICAgICBkYXRhYmFzZSBhbmQgaWYgPG9w dGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3RvcnksIHRoZW4gdG9jLmRhdCBhbmQg b3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVuZGVyIGRib2lkIHN1YmRpcmVj dG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGRpcmVj dG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3Jl LiBVbmRlciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBjcmVh dGUgYSBkaXJlY3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UK KyAgICAgICAgICAgb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJs ZSBvZiBDb250ZW50cyBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBv YmplY3RzIGluIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNh biByZWFkLiBBIGRpcmVjdG9yeSBmb3JtYXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUg bWFuaXB1bGF0ZWQgd2l0aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmls ZXMgaW4gYW4KKyAgICAgICAgICAgdW5jb21wcmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXBy ZXNzZWQgd2l0aCB0aGUgZ3ppcCwgbHo0LCBvciB6c3RkIHRvb2xzLiBUaGlzCisgICAgICAg ICAgIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1bHQgdXNpbmcgZ3ppcCBhbmQgYWxz byBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAg PC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRl cmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBp bnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRp cmVjdG9yeSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1 dCBmb3JtYXQgaW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlv biBhbmQgcmVvcmRlcmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhp cyBmb3JtYXQgaXMgYWxzbworICAgICAgICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisg ICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48 bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRh cjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBh cmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBm b3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFyIGZvcm1hdCBpcworICAgICAgICAg ICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3JtYXQ6IGV4dHJhY3RpbmcgYSB0 YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAgICAgICAgICBkaXJlY3Rv cnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0IGRvZXMgbm90IHN1 cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4gdXNpbmcgdGFyIGZv cm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBjYW5ub3QgYmUg Y2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3Zhcmlh YmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRp b24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZpbGVuYW1lPC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGM4NDBhODA3YWU5Li5mMGEyNDEzNDU5NSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4LDkgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3JlZm5hbWU+CiAKICAg PHJlZnB1cnBvc2U+Ci0gICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3By b2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCi0gICBhcmNoaXZlIGZpbGUgY3JlYXRlZCBi eSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICByZXN0b3JlIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgorICAg YXJjaGl2ZSBmaWxlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0 aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8 L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0zNyw5ICszOCwxMCBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KIAog ICA8cGFyYT4KLSAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMg YSB1dGlsaXR5IGZvciByZXN0b3JpbmcgYQorICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8 L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZwogICAgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUK LSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBvbmUgb2Yg dGhlIG5vbi1wbGFpbi10ZXh0CisgICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1w Z2R1bXAiLz4gb3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1wYWxsIi8+IGluIG9u ZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3aWxsIGlzc3VlIHRo ZSBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCiAgICBkYXRhYmFzZSB0 byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gIFRoZQog ICAgYXJjaGl2ZSBmaWxlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9h cHBsaWNhdGlvbj4gdG8KQEAgLTE0MCw2ICsxNDIsOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KICAgICAgICAgY29tbWFuZHMgdGhhdCBtZW50aW9uIHRoaXMgZGF0YWJhc2UuCiAg ICAgICAgIEFjY2VzcyBwcml2aWxlZ2VzIGZvciB0aGUgZGF0YWJhc2UgaXRzZWxmIGFyZSBh bHNvIHJlc3RvcmVkLAogICAgICAgICB1bmxlc3MgPG9wdGlvbj4tLW5vLWFjbDwvb3B0aW9u PiBpcyBzcGVjaWZpZWQuCisgICAgICAgIDxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj4gaXMg cmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzCisgICAgICAgIGZy b20gZHVtcCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAg ICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJhPgpAQCAtMTY2LDYgKzE3MCwyNSBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlz dGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0t ZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVy bjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFt ZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0 ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBl eGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRl LWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlz CisgICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNh bWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRp b24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhy ZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBs ZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAor ICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2Fy ZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVk IHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJs aXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1lPC9vcHRpb24+PC90ZXJtPgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8L29wdGlvbj48L3Rlcm0+CkBAIC0z MTUsNiArMzM4LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0 aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0 aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJv bGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+Cisg ICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlz dGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5k ZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXgg MDg2YWRjZGM1MDIuLmEzNmQyYTViZjg0IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtMzI2LDEx ICszMjYsMTggQEAgZ2V0VGhyZWFkTG9jYWxQUUV4cEJ1ZmZlcih2b2lkKQogICogcGdfZHVt cCBhbmQgcGdfcmVzdG9yZSBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgdGhlIGNsZWFudXAgaGFu ZGxlcgogICogYXMgc29vbiBhcyB0aGV5J3ZlIGNyZWF0ZWQgdGhlIEFyY2hpdmVIYW5kbGUu CiAgKi8KLXZvaWQKK2ludAogb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkK IHsKIAlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKLQlvbl9leGl0X25pY2VseShhcmNoaXZl X2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKKwlyZXR1cm4gb25fZXhpdF9u aWNlbHkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7Cit9CisK K3ZvaWQKK3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCwgaW50 IGlkeCkKK3sKKwlzaHV0ZG93bl9pbmZvLkFIWCA9IEFIWDsKKwlzZXRfb25fZXhpdF9uaWNl bHlfZW50cnkoYXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbywgaWR4 KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRleCBjNjhhMjEwMjdmYS4uODk0NTlk ZWRjNGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTMxMSw3ICszMTEsNyBAQCBleHRlcm4g dm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQs IFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3Rv cmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUg Ki8KIGV4dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywg Y29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jCmluZGV4IDNmZDI4MTgyMjNjLi5lMjJhODgxMGI0NSAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgaW50CVJl c3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19i dWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2 b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUs Ci0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9z cGVjKTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpT YXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRw dXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQp OwogCkBAIC0zMzcsOSArMzM3LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMo QXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJs aWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlz IHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBk dW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1 bXBhbGwuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZl SGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAq cm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1Niw3ICs0NjEsNyBAQCBSZXN0b3JlQXJj aGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYg KHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9 IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUs IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVu YW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50 ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBA IC0xMjkyLDcgKzEyOTcsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQogCiAJ c2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRPdXRw dXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91 dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7 CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1Q X1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDAp CkBAIC0xNjcxLDcgKzE2NzYsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBj aGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVj aWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7 CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE2 OTEsNyArMTY5Nyw3IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hh ciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFI LT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9k ZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJ bW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5o CmluZGV4IGEyMDY0ZjQ3MWVkLi5hZTQzMzEzMjQzNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfYXJjaGl2ZXIuaApAQCAtMzg1LDcgKzM4NSw4IEBAIHN0cnVjdCBfdG9jRW50cnkK IH07CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVzdG9yZShBcmNoaXZlSGFuZGxlICpBSCwg VG9jRW50cnkgKnRlKTsKLWV4dGVybiB2b2lkIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNo aXZlICpBSFgpOworZXh0ZXJuIGludCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAq QUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hp dmUgKkFIWCwgaW50IGlkeCk7CiAKIGV4dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9ob3JyaWJs eShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmlidXRl X3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNi NDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgy Niw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZW ZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAw OwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hp dmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJj aGl2ZSAqKSBBSCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf dXRpbHMuYwppbmRleCA3OWFlYzVmNTE1OC4uNTllY2UyOTk5YTggMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX3V0aWxzLmMKQEAgLTYxLDE0ICs2MSwyNiBAQCBzZXRfZHVtcF9zZWN0aW9u KGNvbnN0IGNoYXIgKmFyZywgaW50ICpkdW1wU2VjdGlvbnMpCiAKIAogLyogUmVnaXN0ZXIg YSBjYWxsYmFjayB0byBiZSBydW4gd2hlbiBleGl0X25pY2VseSBpcyBpbnZva2VkLiAqLwot dm9pZAoraW50CiBvbl9leGl0X25pY2VseShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5j dGlvbiwgdm9pZCAqYXJnKQogewotCWlmIChvbl9leGl0X25pY2VseV9pbmRleCA+PSBNQVhf T05fRVhJVF9OSUNFTFkpCi0JCXBnX2ZhdGFsKCJvdXQgb2Ygb25fZXhpdF9uaWNlbHkgc2xv dHMiKTsKLQlvbl9leGl0X25pY2VseV9saXN0W29uX2V4aXRfbmljZWx5X2luZGV4XS5mdW5j dGlvbiA9IGZ1bmN0aW9uOwotCW9uX2V4aXRfbmljZWx5X2xpc3Rbb25fZXhpdF9uaWNlbHlf aW5kZXhdLmFyZyA9IGFyZzsKKwlzZXRfb25fZXhpdF9uaWNlbHlfZW50cnkoZnVuY3Rpb24s IGFyZywgb25fZXhpdF9uaWNlbHlfaW5kZXgpOwogCW9uX2V4aXRfbmljZWx5X2luZGV4Kys7 CisKKwlyZXR1cm4gKG9uX2V4aXRfbmljZWx5X2luZGV4IC0gMSk7Cit9CisKK3ZvaWQKK3Nl dF9vbl9leGl0X25pY2VseV9lbnRyeShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlv biwgdm9pZCAqYXJnLCBpbnQgaSkKK3sKKwlpZiAoaSA+PSBNQVhfT05fRVhJVF9OSUNFTFkp CisJCXBnX2ZhdGFsKCJvdXQgb2Ygb25fZXhpdF9uaWNlbHkgc2xvdHMiKTsKKworCWlmIChp ID4gb25fZXhpdF9uaWNlbHlfaW5kZXgpCisJCXBnX2ZhdGFsKCJubyBlbnRyeSBleGlzdHMg b24gJWQgaW5kZXggaW50byBvbl9leGl0X25pY2VseSBzbG90cyIsIGkpOworCisJb25fZXhp dF9uaWNlbHlfbGlzdFtpXS5mdW5jdGlvbiA9IGZ1bmN0aW9uOworCW9uX2V4aXRfbmljZWx5 X2xpc3RbaV0uYXJnID0gYXJnOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF91dGlscy5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGls cy5oCmluZGV4IGJhMDQyMDE2ODc5Li5iYmVmZGMxMTJmNSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfdXRpbHMuaApAQCAtMjgsNyArMjgsOCBAQCB0eXBlZGVmIHZvaWQgKCpvbl9leGl0 X25pY2VseV9jYWxsYmFjaykgKGludCBjb2RlLCB2b2lkICphcmcpOwogZXh0ZXJuIGNvbnN0 IGNoYXIgKnByb2duYW1lOwogCiBleHRlcm4gdm9pZCBzZXRfZHVtcF9zZWN0aW9uKGNvbnN0 IGNoYXIgKmFyZywgaW50ICpkdW1wU2VjdGlvbnMpOwotZXh0ZXJuIHZvaWQgb25fZXhpdF9u aWNlbHkob25fZXhpdF9uaWNlbHlfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZyk7Citl eHRlcm4gaW50IG9uX2V4aXRfbmljZWx5KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0 aW9uLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgc2V0X29uX2V4aXRfbmljZWx5X2VudHJ5 KG9uX2V4aXRfbmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcsIGludCBpZHgp OwogcGdfbm9yZXR1cm4gZXh0ZXJuIHZvaWQgZXhpdF9uaWNlbHkoaW50IGNvZGUpOwogCiAv KiBJbiBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwgdG8gY2FsbCBleGl0X25pY2VseSBp bnN0ZWFkIG9mIGV4aXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDAxNWE0MzRmYzBiLi42MDhi MDY5NmMwMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMjE5LDcgKzEyMTksNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWlu VGV4dCkKLQkJUmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQs IGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMK aW5kZXggNTczYThiNjFhNDUuLmEzZGNjNTg1YWNlIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMK QEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQu aD4KIApAQCAtNjQsOSArNjUsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxlc3BhY2VzKFBH Y29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25u KTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1 bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3Rh dGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQp Owogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGlj IGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVf b3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0 IGNoYXIgKmNyZWF0ZV9vcHRzLAorCQljaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJj aER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNv bm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAog CQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAt NzUsNiArNzcsOCBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVy bnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJCQkJCQkJ ICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1wYWxs X2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRl cm4pOworc3RhdGljIHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5h bWUpOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIg KmZvcm1hdCk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0 aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0czsKQEAgLTE0Niw2ICsxNTAsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVM TCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30s CiAJCXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0Iiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxv d2luZyBvcHRpb25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0 dGVyCkBAIC0xOTUsNiArMjAwLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAlj b25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1 bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwog CXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFf b25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOwpAQCAtMjQ0LDcg KzI1MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywg Jm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJn diwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0 aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjcyLDcgKzI3OSw5 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVt cG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9y bWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6 CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQyMSw2ICs0MzAs MjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsK IAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0g cGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBub24tcGxhaW4g Zm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdlIG11c3QgcHJvdmlkZSB0aGUKKwkgKiBmaWxl IG5hbWUgdG8gY3JlYXRlIG9uZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVu YW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbnMgLUYvLS1mb3Jt YXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSB3aXRoIG5vbi1lbXB0eSBzdHJp bmciKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3Jl IGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJ LyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVt cCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2Vm dWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ4Myw2ICs1 MDcsMzMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChzdGF0aXN0aWNz X29ubHkpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLS1zdGF0aXN0 aWNzLW9ubHkiKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWly ZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVh dGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xvYmFsLmRhdCBmaWxlLgorCSAqLworCWlmIChhcmNo RHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRI XTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5IGV4 aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1lKTsK KworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZp bGVuYW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZX1cpOworCQlp ZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6 ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCisJewor CQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJ CQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgogCSAq IElmIHRoZXJlIHdhcyBhIGRhdGFiYXNlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5l LCB1c2UgdGhhdCwKIAkgKiBvdGhlcndpc2UgdHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2Ug InBvc3RncmVzIiwgYW5kIGZhaWxpbmcgdGhhdApAQCAtNTIyLDE5ICs1NzMsNiBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25u LCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNs dWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWly ZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJ T1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJ CSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBT ZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02MzQsNyAr NjcyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xv YmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1w RGF0YWJhc2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0 KTsKIAogCVBRZmluaXNoKGNvbm4pOwogCkBAIC02NDcsNyArNjg1LDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSBy ZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykK KwkJaWYgKGRvc3luYyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZv aWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02NTgsMTIgKzY5 NiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVs cCh2b2lkKQogewotCXByaW50ZihfKCIlcyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJh c2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZS5cblxuIiksIHByb2duYW1lKTsK KwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIg YmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0LlxuXG4iKSwgcHJvZ25hbWUpOwogCXBy aW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiks IHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlw cmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5h bWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91 dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSAiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikp OwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBt b2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBv dXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8o IiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElN RU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNTcwLDEwICsxNjEwLDEzIEBAIGV4 cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBv ZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hE dW1wRm9ybWF0KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRi X3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlG SUxFICAgICAgICptYXBfZmlsZSA9IE5VTEw7CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2Vz IG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25u ZWN0CkBAIC0xNTg3LDcgKzE2MzAsNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikK IAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAtLWNsZWFuLgogCSAq LwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUg IgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9NIHBnX2Rh dGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGlt aXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScp LCBkYXRuYW1lIik7CkBAIC0xNTk1LDkgKzE2MzgsMzMgQEAgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICIt LVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rh ci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9y eQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1w IGZpbGUgc3ViZGlyZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJk aXJlY3RvcnkgaW4gYXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkg Ki8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9m aWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJl Y3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLwor CQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAwKQorCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjcmVhdGUgc3ViZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJ CXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxl bmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBk Ym5hbWUpICovCisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZ X1cpOworCQlpZiAoIW1hcF9maWxlKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG1h cCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJZm9yIChpID0gMDsgaSA8 IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZh bHVlKHJlcywgaSwgMCk7CisJCWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAx KTsKIAkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CiAJCWludAkJCXJldDsKIApAQCAtMTYx Miw2ICsxNjc5LDE4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJY29udGlu dWU7CiAJCX0KIAorCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vbi1wbGFpbiBkdW1wIGZvcm1h dCwgdGhlbiBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBm aWxlLgorCQkgKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJ CQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJf c3ViZGlyLCBvaWQpOworCisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFu ZCBkYm5hbWUgaW4gbWFwIGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNc biIsIG9pZCwgcGdfc3RyZHVwKGRibmFtZSkpOworCQl9CisKIAkJcGdfbG9nX2luZm8oImR1 bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsKIAogCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgZGJuYW1lKTsKQEAgLTE2MzAs OSArMTcwOSwxNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJCQljcmVhdGVf b3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKIAkJCWVsc2UKIAkJCXsKLQkJCQljcmVhdGVf b3B0cyA9ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0 IGNvbW1hbmQsIHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xu XG4iLCBkYm5hbWUpOworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CQl7CisJCQkJCWNyZWF0ZV9vcHRzID0gIiI7CisJCQkJCWZwcmludGYoT1BGLCAiXFxjb25u ZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8q IER1bXBpbmcgYWxsIGRhdGFiYXNlcyBzbyBhZGQgLS1jcmVhdGUgb3B0aW9uLiAqLworCQkJ CQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CisJCQkJfQogCQkJfQogCQl9CiAJCWVsc2UK QEAgLTE2NDEsMTkgKzE3MjgsMzAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJ CWlmIChmaWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChk Ym5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRl X29wdHMsIGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQog CQkJcGdfZmF0YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGlu ZyIsIGRibmFtZSk7CiAKIAkJaWYgKGZpbGVuYW1lKQogCQl7Ci0JCQlPUEYgPSBmb3Blbihm aWxlbmFtZSwgUEdfQklOQVJZX0EpOworCQkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOwor CisJCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCQkJc25wcmludGYodG9j X3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBmaWxlbmFtZSk7CisJCQllbHNl CisJCQkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgZmlsZW5hbWUpOwor CisJCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYp CiAJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZS1vcGVuIHRoZSBvdXRwdXQgZmlsZSBcIiVz XCI6ICVtIiwKLQkJCQkJCSBmaWxlbmFtZSk7CisJCQkJCQkgdG9jX3BhdGgpOwogCQl9CiAJ fQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJj aE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAg LTE2NjMsNyArMTc2MSw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVu IHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0 aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVh dGVfb3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNy ZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3Jt YXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRh IGNtZDsKQEAgLTE2NzIsMTcgKzE3NzEsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25u c3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZl cigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0 cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5h bWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9y bWF0LgorCSAqIElmIHRoaXMgaXMgbm9uLXBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVu ZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFu ZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9 IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAtZiAl cyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKKwor CQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJZWxzZSBpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9y bWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAi IC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMi LCBwZ19kdW1wX2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsK KworCQkvKgorCQkqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50 ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxl bmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNl CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgog CSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3Rl ZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE4MjcsMyArMTk0NSw5MSBAQCByZWFkX2R1bXBh bGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0 dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogY3JlYXRlX29y X29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkaXJlY3Rvcnkgd2l0 aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBzYW1lCisgKiBlbXB0eSBkaXJl Y3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX29y X29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IHN0YXQJCXN0Owor CWJvb2wJCQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVtcHR5IGV4 aXN0aW5nIGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAmJiBT X0lTRElSKHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihkaXJuYW1l KTsKKworCQlpZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlpc19l bXB0eSA9IHRydWU7CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIp KSkKKwkJCXsKKwkJCQlpZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNt cChkLT5kX25hbWUsICIuLiIpICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNl OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGly bmFtZSk7CisKKwkJCWlmIChjbG9zZWRpcihkaXIpKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisJCX0K KworCQlpZighaXNfZW1wdHkpCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwi JXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0eSIsIGRpcm5hbWUpOworCQkJcGdfbG9nX2Vy cm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAgZGF0YSBvbiB0aGlzIGRpcmVjdG9yeSwg ZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJICAidGhpcyBkaXJlY3RvcnkgXCIl c1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBhcmd1bWVudCBvdGhlciB0aGFu IFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUsIGRpcm5hbWUpOworCQkJ ZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIoZGlybmFtZSwgMDcw MCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICog VGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVG b3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2 ZUZvcm1hdAlhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwg ImMiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1h dCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikg PT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZm9ybWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi cCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAo Zm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVs c2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCBcIiVzXCI7IHBs ZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJCQlmb3Jt YXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK aW5kZXggNDdmN2IwZGQzYTEuLmU0MDkzNDI3ZTJmIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK QEAgLTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlz IGFuIHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwot ICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUg YXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAv cGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglw Z19yZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwzMCAr NDEsNzcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUu aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5j bHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5o IgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5o IgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91 dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUg ImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGFyYWxs ZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNpbmNsdWRlICJwZ19i YWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0OworCU9p ZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9uYW1lOworfSBTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFz ZU9pZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsK Kwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZv aWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVP cHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNv bnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0 b3JlT25lRGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlv bnMgKm9wdHMsCisJCQkJCQkJICBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwg aW50IG51bSk7CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1 ZiwgRklMRSAqcGZpbGUpOworc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJICAgU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50 IG51bVdvcmtlcnMpOworc3RhdGljIGludCBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQljb25z dCBjaGFyICpvdXRmaWxlKTsKK3N0YXRpYyB2b2lkIGNvcHlfb3JfcHJpbnRfZ2xvYmFsX2Zp bGUoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqcGZpbGUpOworc3RhdGljIGludCBnZXRf ZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQlTaW1wbGVEYXRhYmFz ZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNs dWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21m aWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29p ZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQs CisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9pZCBzaW1wbGVf c3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7CitzdGF0 aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VP aWRMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUo U2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsICpjZWxsLAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsICpwcmV2KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQlPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpk Ym5hbWUpOworc3RhdGljIHNpemVfdCBxdW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuKTsKK3N0YXRpYyBjaGFyICpxdW90ZV9s aXRlcmFsX2NzdHIoY29uc3QgY2hhciAqcmF3c3RyKTsKK3N0YXRpYyBpbnQgb25fZXhpdF9p bmRleCA9IDA7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJUmVz dG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJaW50 CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRG aWxlU3BlYzsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFfb25s eSA9IGZhbHNlOworCWludAkJCW5fZXJyb3JzID0gMDsKKwlib29sCQlnbG9iYWxzX29ubHkg PSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0CWRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVM TCwgTlVMTH07CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlzdGF0aWMg aW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwogCXN0YXRpYyBpbnQJaWZfZXhpc3RzID0g MDsKQEAgLTkwLDYgKzEzNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7 ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9LAog CQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwg TlVMTCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24t ZXJyb3IiLCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwg J04nfSwKQEAgLTE0NCw2ICsxOTIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJeyJ3aXRoLXN0YXRpc3RpY3MiLCBub19hcmd1bWVudCwgJndpdGhfc3RhdGlzdGljcywg MX0sCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29u bHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKKwkJ eyJleGNsdWRlLWRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAogCiAJ CXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CkBAIC0xNzIsNyArMjIxLDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9u ZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmg6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2 d1d4MSIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6 RjpnaDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRz LCBOVUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCkBAIC0xOTksMTEgKzI0OCwxNCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykg IT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJ CWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVzdG9yZSBvbmx5IGdsb2JhbC5kYXQg ZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJ YnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJ CQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVh azsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJ CWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJ CQkJICBQR19NQVhfSk9CUywKQEAgLTMxOCw2ICszNzAsMTAgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9 IHRydWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJLyogbGlzdCBvZiBkYXRhYmFz ZXMgcGF0dGVybnMgdGhvc2UgbmVlZHMgdG8gc2tpcCB3aGlsZSByZXN0b3JpbmcgKi8KKwkJ CQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRh cmcpOworCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFs cmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwpAQCAtMzQ1LDYgKzQwMSwxMyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYm ICFvcHRzLT5maWxlbmFtZSAmJiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9u ZSBvZiAtZC8tLWRibmFtZSBhbmQgLWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAK KwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5 KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIs IHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyogU2hvdWxkIGdldCBh dCBtb3N0IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlm IChvcHRzLT5jcGFyYW1zLmRibmFtZSkKIAl7CkBAIC00NTIsNiArNTE1LDEwOCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwogCX0K IAorCS8qCisJICogSWYgdG9jLmRhdCBmaWxlIGRvZXMgbm90IHByZXNlbnQgaW4gY3VycmVu dCBwYXRoLCB0aGVuIGNoZWNrIGZvcgorCSAqIGdsb2JhbC5kYXQuICBJZiBnbG9iYWwuZGF0 IGZpbGUgaXMgcHJlc2VudCwgdGhlbiByZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMg ZnJvbSBtYXAuZGF0KGlmIGV4aXN0KSBmaWxlIGxpc3QgYW5kIHNraXAgcmVzdG9yaW5nIGZv cgorCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KKwkgKi8KKwlpZiAoaW5wdXRG aWxlU3BlYyAhPSBOVUxMICYmICFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZpbGVT cGVjLCAidG9jLmRhdCIpICYmCisJCQlJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShpbnB1dEZp bGVTcGVjLCAiZ2xvYmFsLmRhdCIpKQorCXsKKwkJUEdjb25uICAqY29ubiA9IE5VTEw7IC8q IENvbm5lY3Rpb24gdG8gcmVzdG9yZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCisJCS8q CisJCSAqIFVzZXIgaXMgc3VnZ2VzdGVkIHRvIHVzZSBzaW5nbGUgZGF0YWJhc2UgZHVtcCBm b3IgLS1saXN0IG9wdGlvbi4KKwkJICovCisJCWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJ cGdfZmF0YWwoIm9wdGlvbiAtbC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3Jp bmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJ CS8qCisJCSAqIFRvIHJlc3RvcmUgbXVsdGlwbGUgZGF0YWJhc2VzLCAtQyAoY3JlYXRlIGRh dGFiYXNlKSBvcHRpb24gc2hvdWxkIGJlIHNwZWNpZmllZC4KKwkJICogRXZlbiB0aGVyZSBp cyBzaW5nbGUgZGF0YWJhc2UgaW4gZHVtcCwgcmVwb3J0IGVycm9yIGJlY2F1c2UgaXQgbWln aHQgYmUgcG9zc2libGUKKwkJICogdGhhdCBkYXRhYmFzZSBoYXNuJ3QgY3JlYXRlZCBzbyBi ZXR0ZXIgd2UgcmVwb3J0IGVycm9yLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYg b3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCItQy8tLWNyZWF0 ZSBvcHRpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBk YXRhYmFzZXMgYnkgYXJjaGl2ZSBvZiBwZ19kdW1wYWxsIik7CisJCQlwZ19sb2dfZXJyb3Jf aGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIGRiIGlzIGFscmVhZHkgY3JlYXRlZCBh bmQgZHVtcCBoYXMgc2luZ2xlIGRiIGR1bXAsIHRoZW4gdXNlIHBhcnRpY3VsYXIgZHVtcCBm aWxlLiIpOworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKworCQkvKgorCQkgKiBDb25uZWN0 IHRvIGRhdGFiYXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNxbCBjb21tYW5kcyBmcm9tIGdsb2Jh bC5kYXQgZmlsZS4KKwkJICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJewor CQkJY29ubiA9IENvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwg b3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRz LT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1l LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJaWYgKCFjb25uKQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFy YW1zLmRibmFtZSk7CisJCX0KKworCQkvKiBJZiBnbG9iYWxzLW9ubHksIHRoZW4gcmV0dXJu IGZyb20gaGVyZS4gKi8KKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJeworCQkJLyogT3BlbiBn bG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBj b21tYW5kcy4gKi8KKwkJCW5fZXJyb3JzID0gcHJvY2Vzc19nbG9iYWxfc3FsX2NvbW1hbmRz KGNvbm4sIGlucHV0RmlsZVNwZWMsCisJCQkJCW9wdHMtPmZpbGVuYW1lKTsKKworCQkJaWYg KGNvbm4pCisJCQkJUFFmaW5pc2goY29ubik7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFz ZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uIGlz IHNwZWNpZmllZCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTm93IHJlc3RvcmUgYWxs IHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0IGZpbGUuICovCisJCQluX2Vycm9ycyA9IHJl c3RvcmVBbGxEYXRhYmFzZXMoY29ubiwgaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0 ZXJucywKKwkJCQkJb3B0cywgbnVtV29ya2Vycyk7CisJCX0KKworCQkvKiBGcmVlIGRiIHBh dHRlcm4gbGlzdC4gKi8KKwkJc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKCZkYl9l eGNsdWRlX3BhdHRlcm5zKTsKKwl9CisJZWxzZSAvKiBwcm9jZXNzIGlmIGdsb2JhbC5kYXQg ZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8KKwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5z LmhlYWQgIT0gTlVMTCkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNl IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5 IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJCWlmIChnbG9iYWxzX29ubHkpCisJCQlw Z19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IGNhbiBiZSB1c2VkIG9ubHkgd2hl biByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFs bCIpOworCisJCW5fZXJyb3JzID0gcmVzdG9yZU9uZURhdGFiYXNlKGlucHV0RmlsZVNwZWMs IG9wdHMsIG51bVdvcmtlcnMsIGZhbHNlLCAwKTsKKwl9CisKKwlvbl9leGl0X2luZGV4ID0g MDsgLyogUmVzZXQgaW5kZXguICovCisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkgb2Yg aWdub3JlZCBlcnJvcnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsK KwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9l cnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJl c3RvcmVPbmVEYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFz ZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVy cm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlT25l RGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9w dHMsCisJCQkJICAgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBudW0p Cit7CisJQXJjaGl2ZQkJKkFIOworCWludAkJCW5fZXJyb3JzOworCiAJQUggPSBPcGVuQXJj aGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlv bnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDYwLDggKzYyNSwxNCBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQgYnV0 IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6 ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3 aGlsZQogCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBq dXN0IGJlIGEgbm8tb3AuCisJICogSWYgd2UgYXJlIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRh YmFzZXMsIHRoZW4gc2F2ZSBpbmRleCBvZiBleGl0X25pY2VseQorCSAqIHNvIHRoYXQgd2Ug Y2FuIHVzZSBzYW1lIHNsb3QgZm9yIGFsbCB0aGUgZGF0YWJhc2VzIGFzIHdlIGFscmVhZHkg Y2xvc2VkCisJICogdGhlIHByZXZpb3VzIGFyY2hpdmUgYnkgQ2xvc2VBcmNoaXZlLgogCSAq LwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0YSB8fCBu dW0gPT0gMCkKKwkJb25fZXhpdF9pbmRleCA9IG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7 CisJZWxzZQorCQlyZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCwgb25fZXhpdF9p bmRleCk7CiAKIAkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICov CiAJQUgtPnZlcmJvc2UgPSBvcHRzLT52ZXJib3NlOwpAQCAtNDgxLDI1ICs2NTIsMjIgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hp dmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9y ZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsKIAl9CiAKLQkvKiBkb25lLCBwcmludCBhIHN1 bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KLQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19s b2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJv cnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3JzOwogCiAJLyogQUggbWF5IGJlIGZyZWVk IGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUgPSBBSC0+bl9lcnJvcnMgPyAxIDog MDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4gZXhpdF9jb2RlOworCXJldHVy biBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2du YW1lKQogewotCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVTUUwgZGF0YWJhc2Ug ZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHByb2duYW1lKTsK KwlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20gYW4g YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG4iCisJCQkJIklmIGFyY2hpdmUgaXMgY3Jl YXRlZCBieSBwZ19kdW1wYWxsLCB0aGVuIHJlc3RvcmVzIG11bHRpcGxlIGRhdGFiYXNlcyBh bHNvLiBcblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJp bnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwogCkBAIC01 MTcsNiArNjg1LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8o IiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ug b2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1DLCAtLWNy ZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsK IAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJy b3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1n bG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8g ZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAg ICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9i cz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVz dG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAg dXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNTI5LDYg KzY5OCw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1T LCAtLXN1cGVydXNlcj1OQU1FICAgICAgICAgc3VwZXJ1c2VyIHVzZXIgbmFtZSB0byB1c2Ug Zm9yIGRpc2FibGluZyB0cmlnZ2Vyc1xuIikpOwogCXByaW50ZihfKCIgIC10LCAtLXRhYmxl PU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCByZWxhdGlvbiAodGFibGUsIHZpZXcs IGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVQsIC0tdHJpZ2dlcj1OQU1FICAgICAgICAg ICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIpKTsKKwlwcmludGYoXygiICAtLWV4Y2x1ZGUt ZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hl cyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygiICAteCwgLS1uby1wcml2aWxlZ2Vz ICAgICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNzIHByaXZpbGVnZXMgKGdyYW50 L3Jldm9rZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24g ICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygi ICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5n IGRhdGEtb25seSByZXN0b3JlXG4iKSk7CkBAIC01NjksOCArNzM5LDggQEAgdXNhZ2UoY29u c3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAg ICAgIGRvIFNFVCBST0xFIGJlZm9yZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4i Ci0JCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rp b24gY2FuIGJlIGNvbWJpbmVkIGFuZCBzcGVjaWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGlt ZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7CisJCQkgIlRoZSBvcHRpb25z IC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlvbiwgYW5kIC0tZXhjbHVkZS1kYXRh YmFzZSBjYW4gYmUgY29tYmluZWRcbiIKKwkJCSAiYW5kIHNwZWNpZmllZCBtdWx0aXBsZSB0 aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKIAlwcmludGYoXygiXG5J ZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRoZW4gc3RhbmRhcmQgaW5wdXQg aXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8JXM+LlxuIiks IFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4i KSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02NzUsMyArODQ1LDY0OCBAQCBy ZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlv bnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmls ZUV4aXN0c0luRGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIGZpbGUgZXhpc3Qg aW4gY3VycmVudCBkaXJlY3RvcnkuCisgKi8KK3N0YXRpYyBib29sCitJc0ZpbGVFeGlzdHNJ bkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorewor CXN0cnVjdCBzdGF0CQkJc3Q7CisJY2hhcgkJCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChz bnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFY UEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIs IGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5z dF9tb2RlKSk7Cit9CisKKy8qCisgKiBSZWFkT25lU3RhdGVtZW50CisgKgorICogVGhpcyB3 aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBwYXNzZWQgZmlsZSBwb2ludGVyIHVzaW5nIGZnZXRj IGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xvbihzcWwgc3RhdGVtZW50IHRlcm1pbmF0b3Ig Zm9yIGdsb2JhbC5kYXQgZmlsZSkKKyAqCisgKiBFT0YgaXMgcmV0dXJuZWQgaWYgZW5kLW9m LWZpbGUgaW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0IGRvd24uCisgKi8KKworc3RhdGlj IGludAorUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmlsZSkK K3sKKwlpbnQJCQljOyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAqLworCWludAkJ CW07CisKKwlTdHJpbmdJbmZvRGF0YQlxOworCWluaXRTdHJpbmdJbmZvKCZxKTsKKworCXJl c2V0U3RyaW5nSW5mbyhpbkJ1Zik7CisKKwkvKgorCSAqIFJlYWQgY2hhcmFjdGVycyB1bnRp bCBFT0Ygb3IgdGhlIGFwcHJvcHJpYXRlIGRlbGltaXRlciBpcyBzZWVuLgorCSAqLworCXdo aWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCXsKKwkJaWYgKGMgIT0gJ1wnJyAm JiBjICE9ICciJyAmJiBjICE9ICdcbicgJiYgYyAhPSAnOycpCisJCXsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgYyk7CisJCQl3aGlsZSAoKGMgPSBmZ2V0Yyhw ZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyInICYm IGMgIT0gJzsnICYmIGMgIT0gJ1xuJykKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5C dWYsIChjaGFyKSBjKTsKKwkJCQllbHNlCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJ aWYgKGMgPT0gJ1wnJyB8fCBjID09ICciJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoJnEsIChjaGFyKSBjKTsKKwkJCW0gPSBjOworCisJCQl3aGlsZSAoKGMgPSBmZ2V0Yyhw ZmlsZSkpICE9IEVPRikKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNo YXIpIGMpOworCisJCQkJaWYoYyA9PSBtKQorCQkJCXsKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhpbkJ1ZiwgcS5kYXRhKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZxKTsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGMgPT0gJzsnKQorCQl7CisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICc7Jyk7CisJCQlicmVhazsK KwkJfQorCisJCWlmIChjID09ICdcbicpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1 ZiwgKGNoYXIpICdcbicpOworCX0KKworCS8qIE5vIGlucHV0IGJlZm9yZSBFT0Ygc2lnbmFs IG1lYW5zIHRpbWUgdG8gcXVpdC4gKi8KKwlpZiAoYyA9PSBFT0YgJiYgaW5CdWYtPmxlbiA9 PSAwKQorCQlyZXR1cm4gRU9GOworCisJLyogQWRkICdcMCcgdG8gbWFrZSBpdCBsb29rIHRo ZSBzYW1lIGFzIG1lc3NhZ2UgY2FzZS4gKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1 ZiwgKGNoYXIpICdcMCcpOworCisJcmV0dXJuICdRJzsKK30KKworLyoKKyAqIGdldF9kYm5h bWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCByZW1vdmUgZW50cmllcyBm cm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0IHBhdHRlcm4gbWF0Y2hpbmcgYW55CisgKiBpbiB0 aGUgZGJfZXhjbHVkZV9wYXR0ZXJucyBsaXN0LiAgZGJuYW1lX29pZF9saXN0IG1heWJlIGlu cGxhY2UgbW9kaWZpZWQuCisgKgorICogcmV0dXJucywgbnVtYmVyIG9mIGRhdGFiYXNlIHdp bGwgYmUgcmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lc19saXN0 X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRi bmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5z KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwgPSBkYm5hbWVf b2lkX2xpc3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRwcmVj ZWxsID0gTlVMTDsKKwlpbnQJCQkJCQkJY291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1 ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKworCS8qIFJldHVybiAwIGlmIHRoZXJlIGlzIG5v IGRhdGFiYXNlIHRvIHJlc3RvcmUuICovCisJaWYgKGRib2lkX2NlbGwgPT0gTlVMTCkKKwkJ cmV0dXJuIDA7CisKKwlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlpZiAoIWNv bm4pCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5BTUUgZm9yIC0t ZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGIgY29ubmVjdGlvbiB3aGlsZSBkb2lu ZyBwZ19yZXN0b3JlLiIpOworCisJLyoKKwkgKiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRi bmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lwIHJlc3RvcmluZywgdGhlbgorCSAqIHJl bW92ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAqLworCXdoaWxlIChkYm9pZF9jZWxsICE9IE5V TEwpCisJeworCQlib29sCQkJCQkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHQgPSBkYm9pZF9jZWxsLT5uZXh0OworCisJCWZv ciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGxkYiA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMu aGVhZDsgY2VsbGRiOyBjZWxsZGIgPSBjZWxsZGItPm5leHQpCisJCXsKKwkJCS8qCisJCQkg KiB0aGUgY29uc3RydWN0IHBhdHRlcm4gbWF0Y2hpbmcgcXVlcnk6CisJCQkgKiBTRUxFQ1Qg MSBXSEVSRSBYWFggT1BFUkFUT1IocGdfY2F0YWxvZy5+KSAnXihQQVRURVJOKSQnIENPTExB VEUKKwkJCSAqIHBnX2NhdGFsb2cuZGVmYXVsdAorCQkJICoKKwkJCSAqIFhYWCByZXByZXNl bnRzIHRoZSBzdHJpbmcgbGl0ZXJhbCBkYXRhYmFzZSBuYW1lIGRlcml2ZWQgZnJvbSB0aGUK KwkJCSAqIGRibmFtZV9vaWRfbGlzdCwgd2hpY2ggaXMgaW5pdGlhbGx5IGV4dHJhY3RlZCBm cm9tIHRoZSBtYXAuZGF0CisJCQkgKiBmaWxlIGxvY2F0ZWQgaW4gdGhlIGJhY2t1cCBkaXJl Y3RvcnkuICB0aGF0J3Mgd2h5IHdlIG5lZWQKKwkJCSAqIHF1b3RlX2xpdGVyYWxfY3N0ci4K KwkJCSAqCisJCQkgKiBJZiBubyBkYiBjb25uZWN0aW9uLCB0aGVuIGNvbnNpZGVyIFBBVFRF Uk4gYXMgTkFNRS4KKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApCisJCQkgICBza2lwX2RiX3Jlc3RvcmUgPSB0 cnVlOworCQkJZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJZG90Y250OworCisJCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAiKTsKKwkJCQlwcm9jZXNz U1FMTmFtZVBhdHRlcm4oY29ubiwgcXVlcnksIGNlbGxkYi0+dmFsLCBmYWxzZSwKKwkJCQkJ CQkJCSAgZmFsc2UsIE5VTEwsIHF1b3RlX2xpdGVyYWxfY3N0cihkYm9pZF9jZWxsLT5kYl9u YW1lKSwKKwkJCQkJCQkJCSAgTlVMTCwgTlVMTCwgTlVMTCwgJmRvdGNudCk7CisKKwkJCQlp ZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigiaW1wcm9wZXIgcXVh bGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1lcyk6ICVzIiwKKwkJCQkJCQkJICBj ZWxsZGItPnZhbCk7CisJCQkJCVBRZmluaXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgx KTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEp OworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExFU19PSykg JiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVl OworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgXCIlc1wiIGlzIG1hdGNoaW5nIHdpdGgg ZXhjbHVkZSBwYXR0ZXJuOiBcIiVzXCIiLCBkYm9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGIt PnZhbCk7CisJCQkJfQorCisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJlc2V0UFFFeHBCdWZm ZXIocXVlcnkpOworCQkJfQorCisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJCWJyZWFr OworCQl9CisKKwkJLyogSW5jcmVtZW50IGNvdW50IGlmIGRhdGFiYXNlIG5lZWRzIHRvIGJl IHJlc3RvcmVkLiAqLworCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQl7CisJCQlwZ19sb2df aW5mbygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUp OworCQkJc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShkYm5hbWVfb2lkX2xpc3QsIGRib2lk X2NlbGwsIGRib2lkcHJlY2VsbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQljb3VudF9kYisr OworCQkJZGJvaWRwcmVjZWxsID0gZGJvaWRfY2VsbDsKKwkJfQorCisJCS8qIFByb2Nlc3Mg bmV4dCBkYm5hbWUgZnJvbSBkYm5hbWUgbGlzdC4gKi8KKwkJZGJvaWRfY2VsbCA9IG5leHQ7 CisJfQorCisJcmV0dXJuIGNvdW50X2RiOworfQorCisvKgorICogZ2V0X2RibmFtZV9vaWRf bGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGlu ZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCisgKiBuYW1l cyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICogUmV0dXJucywgdG90YWwgbnVt YmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KKyAqLworc3RhdGljIGlu dAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJw YXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCkKK3sKKwlGSUxF ICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwljaGFy ICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0gMDsKKworCS8qCisJICog SWYgdGhlcmUgaXMgb25seSBnbG9iYWwuZGF0IGZpbGUgaW4gZHVtcCwgdGhlbiByZXR1cm4g ZnJvbSBoZXJlIGFzIHRoZXJlCisJICogaXMgbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4KKwkg Ki8KKwlpZiAoIUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChkdW1wZGlycGF0 aCksICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5mbygiZGF0YWJhc2VzIHJlc3Rvcmlu ZyBpcyBza2lwcGVkIGFzIG1hcC5kYXQgZmlsZSBpcyBub3QgcHJlc2VudCBpbiBcIiVzXCIi LCBkdW1wZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxl X3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBP cGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBH X0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gbWFwLmRhdCBmaWxlOiBcIiVzXCIiLCBtYXBfZmlsZV9wYXRoKTsKKworCS8q IEFwcGVuZCBhbGwgdGhlIGRibmFtZSBhbmQgZGJfb2lkIHRvIHRoZSBsaXN0LiAqLworCXdo aWxlKChmZ2V0cyhsaW5lLCBNQVhQR1BBVEgsIHBmaWxlKSkgIT0gTlVMTCkKKwl7CisJCU9p ZCAgICAgICAgIGRiX29pZCA9IEludmFsaWRPaWQ7CisJCWNoYXIJCWRiX29pZF9zdHJbTUFY UEdQQVRIICsgMV0gPSB7J1wwJ307CisJCWNoYXIgICAgICAgIGRibmFtZVtNQVhQR1BBVEgg KyAxXSA9IHsnXDAnfTsKKworCQkvKiBFeHRyYWN0IGRib2lkLiAqLworCQlzc2NhbmYobGlu ZSwgIiV1IiAsICZkYl9vaWQpOworCQlzc2NhbmYobGluZSwgIiVzIiAsIGRiX29pZF9zdHIp OworCisJCS8qIE5vdyBjb3B5IGRibmFtZS4gKi8KKwkJc3RyY3B5KGRibmFtZSwgbGluZSAr IHN0cmxlbihkYl9vaWRfc3RyKSArIDEpOworCisJCS8qIFJlbW92ZSBcbiBmcm9tIGRiYW5t ZS4gKi8KKwkJZGJuYW1lW3N0cmxlbihkYm5hbWUpIC0gMV0gPSAnXDAnOworCisJCXBnX2xv Z19pbmZvKCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIG1hcC5kYXQgZmls ZSB3aGlsZSByZXN0b3JpbmcuIiwgZGJuYW1lLCBkYl9vaWQpOworCisJCS8qIFJlcG9ydCBl cnJvciBhbmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLwor CQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBzdHJsZW4oZGJuYW1lKSA9PSAwKQorCQkJ cGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gbWFwLmRhdCBmaWxlIGF0IGxpbmUgOiAlZCIs IGNvdW50ICsgMSk7CisKKwkJLyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBkYm5hbWUg aW50byBsaXN0LCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0byBz a2lwcGVkIGZvciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5n CisJCSAqIGEgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9k Yl9vaWRfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJ CWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShw ZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlQWxsRGF0YWJh c2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFy ZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBp bmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRhYmFzZXMgdGhh dCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICoK KyAqIHJldHVybnMsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAq Lworc3RhdGljIGludAorcmVzdG9yZUFsbERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVf cGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQlpbnQgbnVtV29ya2VycykK K3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3QJCQlkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwg TlVMTH07CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkJKmRib2lkX2NlbGw7CisJaW50 CQkJCQkJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJCQkJCQludW1fdG90YWxfZGI7 CisJaW50CQkJCQkJCQluX2Vycm9yc190b3RhbDsKKwlpbnQJCQkJCQkJCWNvdW50ID0gMDsK KworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShkdW1w ZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKgorCSAqIElmIG1hcC5kYXQgaGFz IG5vIGVudHJ5LCByZXR1cm4gZnJvbSBoZXJlIGFmdGVyIHByb2Nlc3NpbmcKKwkgKiBnbG9i YWwuZGF0IGZpbGUuCisJICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwp CisJCXJldHVybiBwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRpcnBh dGgsIG9wdHMtPmZpbGVuYW1lKTsKKworCXBnX2xvZ19pbmZvKCJmb3VuZCB0b3RhbCAlZCBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUiLCBudW1fdG90YWxfZGIpOworCisJaWYg KCFjb25uKQorCXsKKwkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFiYXNl IFwicG9zdGdyZXNcIiAgdG8gZHVtcCBpbnRvIG91dCBmaWxlIik7CisKKwkJY29ubiA9IENv bm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwK KwkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFt ZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMKTsKKworCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEuICovCisJCWlmICgh Y29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFiYXNl IFwidGVtcGxhdGUxXCIgYXMgZmFpbGVkIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCJwb3N0 Z3Jlc1wiIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJCQljb25uID0gQ29ubmVjdERh dGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJ CQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRS SV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpOworCQl9CisJfQorCisJLyoKKwkgKiBwcm9jZXNzaW5nIHBnX3JldHNvcmUg LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4vTkFNRSBpZiBubyBjb25uZWN0aW9uLgorCSAq LworCW51bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKGNvbm4s ICZkYm5hbWVfb2lkX2xpc3QsCisJCQlkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIE9w ZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBhbGwgdGhlIGdsb2JhbCBz cWwgY29tbWFuZHMuICovCisJbl9lcnJvcnNfdG90YWwgPSBwcm9jZXNzX2dsb2JhbF9zcWxf Y29tbWFuZHMoY29ubiwgZHVtcGRpcnBhdGgsIG9wdHMtPmZpbGVuYW1lKTsKKworCS8qIENs b3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQg cGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJCVBRZmluaXNoKGNvbm4pOworCisJLyogRXhp dCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9s aXN0LmhlYWQgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19pbmZvKCJubyBkYXRhYmFzZSBuZWVk cyB0byByZXN0b3JlIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpOworCQly ZXR1cm4gbl9lcnJvcnNfdG90YWw7CisJfQorCisJcGdfbG9nX2luZm8oIm5lZWRzIHRvIHJl c3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVzdG9y ZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogVGlsbCBub3csIHdlIG1hZGUgYSBsaXN0 IG9mIGRhdGFiYXNlcywgdGhvc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKwkgKiBhZnRlciBz a2lwcGluZyBuYW1lcyBvZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93IHdlIGNhbiBsYXVuY2gg cGFyYWxsZWwKKwkgKiB3b3JrZXJzIHRvIHJlc3RvcmUgdGhlc2UgZGF0YWJhc2VzLgorCSAq LworCWRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKworCXdoaWxlKGRib2lk X2NlbGwgIT0gTlVMTCkKKwl7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJ aW50CQkJbl9lcnJvcnM7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlk ZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZCBpbnRvCisJCSAqIGFs cmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24p CisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJ CXBmcmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJh bXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcnBh dGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9pZF9j ZWxsLT5kYl9vaWQpOworCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIl c1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisKKwkJLyogUmVzdG9yZSBzaW5nbGUgZGF0 YWJhc2UuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZU9uZURhdGFiYXNlKHN1YmRpcnBhdGgs IG9wdHMsIG51bVdvcmtlcnMsIHRydWUsIGNvdW50KTsKKworCQkvKiBQcmludCBhIHN1bW1h cnkgb2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3JlLiAq LworCQlpZiAobl9lcnJvcnMpCisJCXsKKwkJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3Jz OworCQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIGRhdGFiYXNlIFwiJXNc IiByZXN0b3JlOiAlZCIsIGRib2lkX2NlbGwtPmRiX25hbWUsIG5fZXJyb3JzKTsKKwkJfQor CisJCWRib2lkX2NlbGwgPSBkYm9pZF9jZWxsLT5uZXh0OworCQljb3VudCsrOworCX0KKwor CS8qIExvZyBudW1iZXIgb2YgcHJvY2Vzc2VkIGRhdGFiYXNlcy4qLworCXBnX2xvZ19pbmZv KCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGFyZSAlZCIsIG51bV9kYl9yZXN0b3Jl KTsKKworCS8qIEZyZWUgZGJuYW1lIGFuZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9kYl9v aWRfZnVsbF9saXN0X2RlbGV0ZSgmZGJuYW1lX29pZF9saXN0KTsKKworCXJldHVybiBuX2Vy cm9yc190b3RhbDsKK30KKworLyoKKyAqIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcwor ICoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgd2lsbCBleGVjdXRl IGFsbCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICogYnkgb25lIHN0YXRlbWVudC4KKyAq IFNlbWljb2xvbiBpcyBjb25zaWRlcmVkIGFzIHN0YXRlbWVudCB0ZXJtaW5hdG9yLiAgSWYg b3V0ZmlsZSBpcyBwYXNzZWQsIHRoZW4KKyAqIHRoaXMgd2lsbCBjb3B5IGFsbCBzcWwgY29t bWFuZHMgaW50byBvdXRmaWxlIHJhdGhlciB0aGVuIGV4ZWN1dGluZyB0aGVtLgorICoKKyAq IHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgcHJvY2Vzc2luZyBnbG9iYWwu ZGF0CisgKi8KK3N0YXRpYyBpbnQKK3Byb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBjb25zdCBjaGFyICpvdXRmaWxl KQoreworCWNoYXIgICAgICAgICAgICBnbG9iYWxfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJ UEdyZXN1bHQJCSpyZXN1bHQ7CisJU3RyaW5nSW5mb0RhdGEJc3Fsc3RhdGVtZW50OworCUZJ TEUJCQkqcGZpbGU7CisJaW50CQkJCW5fZXJyb3JzID0gMDsKKworCXNucHJpbnRmKGdsb2Jh bF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBkdW1wZGlycGF0aCk7 CisKKwkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKGdsb2Jh bF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIiLCBnbG9i YWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBq dXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgor CSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJY29weV9vcl9wcmludF9nbG9iYWxfZmlsZShv dXRmaWxlLCBwZmlsZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIEluaXQgc3Fsc3RhdGVt ZW50IHRvIGFwcGVuZCBjb21tYW5kcy4gKi8KKwlpbml0U3RyaW5nSW5mbygmc3Fsc3RhdGVt ZW50KTsKKworCS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBzcWwgc3Rh dGVtZW50cy4gKi8KKwl3aGlsZSAoUmVhZE9uZVN0YXRlbWVudCgmc3Fsc3RhdGVtZW50LCBw ZmlsZSkgIT0gRU9GKQorCXsKKwkJcGdfbG9nX2luZm8oImV4ZWN1dGluZyBxdWVyeTogJXMi LCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJCXJlc3VsdCA9IFBRZXhlYyhjb25uLCBzcWxzdGF0 ZW1lbnQuZGF0YSk7CisKKwkJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQorCQl7 CisJCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6CisJCQljYXNlIFBHUkVTX1RVUExFU19PSzoK KwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCW5fZXJyb3JzKys7CisJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBx dWVyeTogXCIlc1wiIFxuQ29tbWFuZCB3YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0K KworCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgZ2xvYmFs LmRhdC4gKi8KKwlpZiAobl9lcnJvcnMpCisJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdu b3JlZCBvbiBnbG9iYWwuZGF0IGZpbGUgcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisKKwlm Y2xvc2UocGZpbGUpOworCisJcmV0dXJuIG5fZXJyb3JzOworfQorCisvKgorICogY29weV9v cl9wcmludF9nbG9iYWxfZmlsZQorICoKKyAqIFRoaXMgd2lsbCBjb3B5IGdsb2JhbC5kYXQg ZmlsZSBpbnRvIG91dCBmaWxlLiAgSWYgIi0iIGlzIHVzZWQgYXMgb3V0ZmlsZSwKKyAqIHRo ZW4gcHJpbnQgY29tbWFuZHMgdG8gdGhlIHN0ZG91dC4KKyAqLworc3RhdGljIHZvaWQKK2Nv cHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUoY29uc3QgY2hhciAqb3V0ZmlsZSwgRklMRSAqcGZp bGUpCit7CisJY2hhcglvdXRfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJRklMRQkqT1BGOwor CWludAkJYzsKKworCS8qICItIiBpcyB1c2VkIGZvciBzdGRvdXQuICovCisJaWYgKHN0cmNt cChvdXRmaWxlLCAiLSIpID09IDApCisJCU9QRiA9IHN0ZG91dDsKKwllbHNlCisJeworCQlz bnByaW50ZihvdXRfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIG91dGZpbGUpOworCQlP UEYgPSBmb3BlbihvdXRfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisKKwkJaWYgKE9QRiA9 PSBOVUxMKQorCQl7CisJCQlmY2xvc2UocGZpbGUpOworCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBvcGVuIGZpbGU6IFwiJXNcIiIsIG91dGZpbGUpOworCQl9CisJfQorCisJLyogQXBwZW5k IGdsb2JhbC5kYXQgaW50byBvdXQgZmlsZSBvciBwcmludCB0byB0aGUgc3Rkb3V0LiAqLwor CXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBPUEYpOwor CisJZmNsb3NlKHBmaWxlKTsKKworCS8qIENsb3NlIG91dCBmaWxlLiAqLworCWlmIChzdHJj bXAob3V0ZmlsZSwgIi0iKSAhPSAwKQorCQlmY2xvc2UoT1BGKTsKK30KKworLyoKKyAqIHNp bXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBlbmRzIGEgbm9kZSB0byB0aGUg bGlzdCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9saXN0 X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJCWNv bnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxs OworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2Vs bCk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJ Y2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwp CisJCWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNl bGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2Z1 bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5k IGRib2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlz dF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KQoreworCVNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lk TGlzdENlbGwJKm5leHRjZWxsID0gTlVMTDsKKworCXdoaWxlIChjZWxsKQorCXsKKwkJbmV4 dGNlbGwgPSBjZWxsLT5uZXh0OworCQlwZnJlZSAoY2VsbCk7CisJCWNlbGwgPSBuZXh0Y2Vs bDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30K KworLyoKKyAqIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0 ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxl X3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpCit7CisJ U2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZVN0cmlu Z0xpc3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJ CWNlbGxuZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJCWNlbGwgPSBjZWxs bmV4dDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsK K30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUg Y2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3Np bXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAor CQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsICpwcmV2KQoreworCWlmIChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5o ZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXBy ZXYtPm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9Cit9CisKKy8qCisg KiBxdW90ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0YXRpYyBzaXplX3QKK3F1b3RlX2xp dGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4p Cit7CisJY29uc3QgY2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0ID0gZHN0OworCisJZm9y IChzID0gc3JjOyBzIDwgc3JjICsgbGVuOyBzKyspCisJeworCQlpZiAoKnMgPT0gJ1xcJykK KwkJeworCQkJKmRzdCsrID0gRVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQlicmVhazsKKwkJ fQorCX0KKworCSpkc3QrKyA9ICdcJyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJCWlm IChTUUxfU1RSX0RPVUJMRSgqc3JjLCB0cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJCSpk c3QrKyA9ICpzcmMrKzsKKwl9CisJKmRzdCsrID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBz YXZlZHN0OworfQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9jc3RyCisgKgorICoJICByZXR1 cm5zIGEgcHJvcGVybHkgcXVvdGVkIGxpdGVyYWwKKyAqIGNvcGllZCBmcm9tIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9xdW90ZS5jCisgKi8KK3N0YXRpYyBjaGFyICoKK3F1b3RlX2xpdGVy YWxfY3N0cihjb25zdCBjaGFyICpyYXdzdHIpCit7CisJY2hhcgkgICAqcmVzdWx0OworCWlu dAkJCWxlbjsKKwlpbnQJCQluZXdsZW47CisKKwlsZW4gPSBzdHJsZW4ocmF3c3RyKTsKKwor CS8qIFdlIG1ha2UgYSB3b3JzdC1jYXNlIHJlc3VsdCBhcmVhOyB3YXN0aW5nIGEgbGl0dGxl IHNwYWNlIGlzIE9LICovCisJcmVzdWx0ID0gcGdfbWFsbG9jKGxlbiAqIDIgKyAzICsgMSk7 CisKKwluZXdsZW4gPSBxdW90ZV9saXRlcmFsX2ludGVybmFsKHJlc3VsdCwgcmF3c3RyLCBs ZW4pOworCXJlc3VsdFtuZXdsZW5dID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpp bmRleCAzN2Q4OTNkNWU2YS4uMGJiY2RiZTg0YTcKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Qv MDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAt MjM3LDYgKzIzNywxMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9w dGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90 IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdf cmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5Jywg Jy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNs dWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFs cy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBh bHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRk IG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1 bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwK QEAgLTI0NCw0ICsyNDksOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6 IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0 aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdw Z19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJv cjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6 IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDNmYmY1YTRjMjEyLi5mMzk5OWVlM2Y5ZCAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI3MjYsNiArMjcyNiw4IEBAIFNo dXRkb3duTW9kZQogU2lnblRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBTaW1wbGVBY3Rp b25MaXN0Q2VsbAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsCiBTaW1wbGVFY29udGV4dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNpbXBs ZU9pZExpc3RDZWxsCi0tIAoyLjM0LjEKCg== --------------h38zyXccLdlz60yl0TtZ8kI0 Content-Type: text/x-patch; charset=UTF-8; name="0003-add-new-list-type-simple_oid_string_list-to-fe-utils.patch" Content-Disposition: attachment; filename*0="0003-add-new-list-type-simple_oid_string_list-to-fe-utils.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiZmM3YzM3Mjg0Y2YzOGVjYWQxOGI3OWM2ZTA4YTlmZGEwNjUxMmViIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogRnJpLCAyOCBNYXIgMjAyNSAxODoxMDoyNCAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggMy80XSBhZGQgbmV3IGxpc3QgdHlwZSBzaW1wbGVfb2lkX3N0cmluZ19saXN0IHRv CiBmZS11dGlscy9zaW1wbGVfbGlzdAoKLS0tCiBzcmMvZmVfdXRpbHMvc2ltcGxlX2xpc3Qu YyAgICAgICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9mZV91dGlscy9zaW1wbGVfbGlzdC5oIHwgMTYgKysrKysrKysrKysrCiAyIGZpbGVz IGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMv c2ltcGxlX2xpc3QuYyBiL3NyYy9mZV91dGlscy9zaW1wbGVfbGlzdC5jCmluZGV4IDQ4M2Q1 NDU1NTk0Li5iMDY4NmU1N2M0YSAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL3NpbXBsZV9s aXN0LmMKKysrIGIvc3JjL2ZlX3V0aWxzL3NpbXBsZV9saXN0LmMKQEAgLTE5MiwzICsxOTIs NDQgQEAgc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koU2ltcGxlUHRyTGlzdCAqbGlzdCkKIAkJ Y2VsbCA9IG5leHQ7CiAJfQogfQorCisvKgorICogQWRkIHRvIGFuIG9pZF9zdHJpbmcgbGlz dAorICovCit2b2lkCitzaW1wbGVfb2lkX3N0cmluZ19saXN0X2FwcGVuZChTaW1wbGVPaWRT dHJpbmdMaXN0ICpsaXN0LCBPaWQgb2lkLCBjb25zdCBjaGFyICpzdHIpCit7CisJU2ltcGxl T2lkU3RyaW5nTGlzdENlbGwgKmNlbGw7CisKKwljZWxsID0gKFNpbXBsZU9pZFN0cmluZ0xp c3RDZWxsICopCisJCXBnX21hbGxvYyhvZmZzZXRvZihTaW1wbGVPaWRTdHJpbmdMaXN0Q2Vs bCwgc3RyKSArIHN0cmxlbihzdHIpICsgMSk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwlj ZWxsLT5vaWQgPSBvaWQ7CisJc3RyY3B5KGNlbGwtPnN0ciwgc3RyKTsKKworCWlmIChsaXN0 LT50YWlsKQorCQlsaXN0LT50YWlsLT5uZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3QtPmhl YWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBjZWxsOworfQorCisvKgorICogRGVzdHJveSBh biBvaWRfc3RyaW5nIGxpc3QKKyAqLwordm9pZAorc2ltcGxlX29pZF9zdHJpbmdfbGlzdF9k ZXN0cm95KFNpbXBsZU9pZFN0cmluZ0xpc3QgKmxpc3QpCit7CisJU2ltcGxlT2lkU3RyaW5n TGlzdENlbGwgKmNlbGw7CisKKwljZWxsID0gbGlzdC0+aGVhZDsKKwl3aGlsZSAoY2VsbCAh PSBOVUxMKQorCXsKKwkJU2ltcGxlT2lkU3RyaW5nTGlzdENlbGwgKm5leHQ7CisKKwkJbmV4 dCA9IGNlbGwtPm5leHQ7CisJCXBnX2ZyZWUoY2VsbCk7CisJCWNlbGwgPSBuZXh0OworCX0K K30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL3NpbXBsZV9saXN0LmggYi9z cmMvaW5jbHVkZS9mZV91dGlscy9zaW1wbGVfbGlzdC5oCmluZGV4IDNiOGUzODQxNGVjLi5k NTQ5MjQwOGQ2YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZmVfdXRpbHMvc2ltcGxlX2xp c3QuaAorKysgYi9zcmMvaW5jbHVkZS9mZV91dGlscy9zaW1wbGVfbGlzdC5oCkBAIC01NSw2 ICs1NSwxOSBAQCB0eXBlZGVmIHN0cnVjdCBTaW1wbGVQdHJMaXN0CiAJU2ltcGxlUHRyTGlz dENlbGwgKnRhaWw7CiB9IFNpbXBsZVB0ckxpc3Q7CiAKK3R5cGVkZWYgc3RydWN0IFNpbXBs ZU9pZFN0cmluZ0xpc3RDZWxsCit7CisJc3RydWN0IFNpbXBsZU9pZFN0cmluZ0xpc3RDZWxs ICpuZXh0OworCU9pZAkJICAgIG9pZDsKKwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVN QkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBoZXJlICovCit9IFNpbXBsZU9pZFN0 cmluZ0xpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVPaWRTdHJpbmdMaXN0Cit7 CisJU2ltcGxlT2lkU3RyaW5nTGlzdENlbGwgKmhlYWQ7CisJU2ltcGxlT2lkU3RyaW5nTGlz dENlbGwgKnRhaWw7Cit9IFNpbXBsZU9pZFN0cmluZ0xpc3Q7CisKIGV4dGVybiB2b2lkIHNp bXBsZV9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlT2lkTGlzdCAqbGlzdCwgT2lkIHZhbCk7CiBl eHRlcm4gYm9vbCBzaW1wbGVfb2lkX2xpc3RfbWVtYmVyKFNpbXBsZU9pZExpc3QgKmxpc3Qs IE9pZCB2YWwpOwogZXh0ZXJuIHZvaWQgc2ltcGxlX29pZF9saXN0X2Rlc3Ryb3koU2ltcGxl T2lkTGlzdCAqbGlzdCk7CkBAIC02OCw0ICs4MSw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpz aW1wbGVfc3RyaW5nX2xpc3Rfbm90X3RvdWNoZWQoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7 CiBleHRlcm4gdm9pZCBzaW1wbGVfcHRyX2xpc3RfYXBwZW5kKFNpbXBsZVB0ckxpc3QgKmxp c3QsIHZvaWQgKnB0cik7CiBleHRlcm4gdm9pZCBzaW1wbGVfcHRyX2xpc3RfZGVzdHJveShT aW1wbGVQdHJMaXN0ICpsaXN0KTsKIAorZXh0ZXJuIHZvaWQgc2ltcGxlX29pZF9zdHJpbmdf bGlzdF9hcHBlbmQoU2ltcGxlT2lkU3RyaW5nTGlzdCAqbGlzdCwgT2lkIG9pZCwgY29uc3Qg Y2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIHNpbXBsZV9vaWRfc3RyaW5nX2xpc3RfZGVzdHJv eShTaW1wbGVPaWRTdHJpbmdMaXN0ICpsaXN0KTsKKwogI2VuZGlmCQkJCQkJCS8qIFNJTVBM RV9MSVNUX0ggKi8KLS0gCjIuMzQuMQoK --------------h38zyXccLdlz60yl0TtZ8kI0 Content-Type: text/x-patch; charset=UTF-8; name="0004-cleanups-and-use-new-simple-list-type.patch" Content-Disposition: attachment; filename="0004-cleanups-and-use-new-simple-list-type.patch" Content-Transfer-Encoding: base64 RnJvbSBiNTFkZjFmMjU4NGY5OWQ2NzM4MWEzNzAyY2VjODdjYjMyNjRlNGEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogRnJpLCAyOCBNYXIgMjAyNSAxODoxMDo1NyAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggNC80XSBjbGVhbnVwcyBhbmQgdXNlIG5ldyBzaW1wbGUgbGlzdCB0eXBlCgotLS0K IHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgfCAgMjggKystLS0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMgfCAyMDggKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTgwIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IGEzZGNjNTg1YWNlLi42YWFiMWJmZTgz MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC00MzQsMTMgKzQzNCwxMyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJYXJjaER1bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3Jt YXQoZm9ybWF0TmFtZSk7CiAKIAkvKgotCSAqIElmIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3Bl Y2lmaWVkIHRoZW4gd2UgbXVzdCBwcm92aWRlIHRoZQotCSAqIGZpbGUgbmFtZSB0byBjcmVh dGUgb25lIG1haW4gZGlyZWN0b3J5LgorCSAqIElmIGEgbm9uLXBsYWluIGZvcm1hdCBpcyBz cGVjaWZpZWQsIGEgZmlsZSBuYW1lIGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCisJICogcGF0 aCB0byB0aGUgbWFpbiBkaXJlY3RvcnkuCiAJICovCiAJaWYgKGFyY2hEdW1wRm9ybWF0ICE9 IGFyY2hOdWxsICYmCiAJCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09 IDApKQogCXsKLQkJcGdfbG9nX2Vycm9yKCJvcHRpb25zIC1GLy0tZm9ybWF0PWR8Y3x0IHJl cXVpcmVzIG9wdGlvbiAtZi8tLWZpbGUgd2l0aCBub24tZW1wdHkgc3RyaW5nIik7CisJCXBn X2xvZ19lcnJvcigib3B0aW9uIC1GLy0tZm9ybWF0PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAt Zi8tLWZpbGUiKTsKIAkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZv ciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKIAkJZXhpdF9uaWNlbHkoMSk7CiAJ fQpAQCAtNTEzLDE0ICs1MTMsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CSAqLwogCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKIAl7Ci0JCWNoYXIJdG9j X3BhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcglnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwogCiAJ CS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3Rpbmcg ZGlyZWN0b3J5LiAqLwogCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOwogCi0JCXNu cHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUp OworCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIs IGZpbGVuYW1lKTsKIAotCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZX1cpOwor CQlPUEYgPSBmb3BlbihnbG9iYWxfcGF0aCwgUEdfQklOQVJZX1cpOwogCQlpZiAoIU9QRikK IAkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwgc3Ry ZXJyb3IoZXJybm8pKTsKIAl9CkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIAkJfQogCiAJ CS8qCi0JCSAqIElmIHRoaXMgaXMgbm9uLXBsYWluIGR1bXAgZm9ybWF0LCB0aGVuIGFwcGVu ZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9y bWF0IGR1bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KIAkJICogdGhlIG1h cC5kYXQgZmlsZS4KIAkJICovCiAJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK QEAgLTE2ODgsNyArMTY4OCw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNo aXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFY UEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwgb2lkKTsKIAogCQkJLyogUHV0 IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGluIG1hcCBmaWxlLiAqLwot CQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIHBnX3N0cmR1cChkYm5hbWUp KTsKKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBkYm5hbWUpOwogCQl9 CiAKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1lKTsK QEAgLTE3MzQsMTcgKzE3MzQsMTcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFy Y2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiAKIAkJaWYgKGZpbGVuYW1lKQogCQl7Ci0J CQljaGFyCXRvY19wYXRoW01BWFBHUEFUSF07CisJCQljaGFyCWdsb2JhbF9wYXRoW01BWFBH UEFUSF07CiAKIAkJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKLQkJCQlzbnBy aW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsK KwkJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIs IGZpbGVuYW1lKTsKIAkJCWVsc2UKLQkJCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRI LCAiJXMiLCBmaWxlbmFtZSk7CisJCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFU SCwgIiVzIiwgZmlsZW5hbWUpOwogCi0JCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklO QVJZX0EpOworCQkJT1BGID0gZm9wZW4oZ2xvYmFsX3BhdGgsIFBHX0JJTkFSWV9BKTsKIAkJ CWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmUtb3BlbiB0aGUgb3V0cHV0 IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgdG9jX3BhdGgpOworCQkJCQkJIGdsb2JhbF9w YXRoKTsKIAkJfQogCX0KIApAQCAtMTc3Miw3ICsxNzcyLDcgQEAgcnVuUGdEdW1wKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSwK IAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKIAkvKgotCSAqIElmIHRoaXMgaXMgbm9uLXBs YWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBJ ZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5h bWUgYW5kIGR1bXAKIAkgKiBmb3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQg YXJjaGl2ZSBkdW1wLgogCSAqLwogCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IGU0MDkzNDI3ZTJmLi40NGEyNDc5MWE2ZSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8dGVybWlv cy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgotI2luY2x1ZGUg ImNvbXByZXNzX2lvLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgogI2luY2x1ZGUg ImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgpAQCAt NTUsNDcgKzUzLDI0IEBACiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0 X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgotI2luY2x1ZGUgInBnX2JhY2t1cF9h cmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGlscy5oIgogCi10eXBlZGVmIHN0 cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCi17Ci0Jc3RydWN0IFNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwJKm5leHQ7Ci0JT2lkCQkJCQkJCQkJZGJfb2lkOwotCWNvbnN0IGNo YXIJCQkJCQkJKmRiX25hbWU7Ci19IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGw7Ci0KLXR5 cGVkZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdAotewotCVNpbXBsZURhdGFiYXNl T2lkTGlzdENlbGwgKmhlYWQ7Ci0JU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqdGFpbDsK LX0gU2ltcGxlRGF0YWJhc2VPaWRMaXN0OwotCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBj aGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25z dCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOwotc3RhdGljIGJvb2wg SXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpm aWxlbmFtZSk7CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3Qg Y2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBzdGF0aWMgaW50IHJlc3RvcmVP bmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAq b3B0cywKIAkJCQkJCQkgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQg bnVtKTsKLXN0YXRpYyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBG SUxFICpwZmlsZSk7CitzdGF0aWMgaW50IHJlYWRfb25lX3N0YXRlbWVudChTdHJpbmdJbmZv IGluQnVmLCBGSUxFICpwZmlsZSk7CiBzdGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMo UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKIAkJCQkJCQkgICBTaW1w bGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRz LCBpbnQgbnVtV29ya2Vycyk7CiBzdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21t YW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAogCQkJCQkJCQkJ CWNvbnN0IGNoYXIgKm91dGZpbGUpOwogc3RhdGljIHZvaWQgY29weV9vcl9wcmludF9nbG9i YWxfZmlsZShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpwZmlsZSk7CiBzdGF0aWMgaW50 IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCi0JCVNpbXBsZURh dGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQlTaW1wbGVPaWRTdHJpbmdMaXN0 ICpkYm5hbWVfb2lkX2xpc3QsCiAJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0 ZXJucyk7CiBzdGF0aWMgaW50IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25z dCBjaGFyICpkdW1wZGlycGF0aCwKLQkJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqZGJuYW1lX29pZF9saXN0KTsKLXN0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9h cHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAotCQkJCQkJ CQkJICBjb25zdCBjaGFyICpkYm5hbWUpOwotc3RhdGljIHZvaWQgc2ltcGxlX3N0cmluZ19m dWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpOwotc3RhdGljIHZvaWQg c2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAq bGlzdCk7Ci1zdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURh dGFiYXNlT2lkTGlzdCAqbGlzdCwKLQkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbCAqY2VsbCwKLQkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJl dik7Ci1zdGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFi YXNlT2lkTGlzdCAqbGlzdCwKLQkJT2lkIGRiX29pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsK KwkJCQkJCQkJCQkgIFNpbXBsZU9pZFN0cmluZ0xpc3QgKmRibmFtZV9vaWRfbGlzdCk7CiBz dGF0aWMgc2l6ZV90IHF1b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBsZW4pOwogc3RhdGljIGNoYXIgKnF1b3RlX2xpdGVyYWxfY3N0 cihjb25zdCBjaGFyICpyYXdzdHIpOwogc3RhdGljIGludCBvbl9leGl0X2luZGV4ID0gMDsK QEAgLTUyMSw4ICs0OTYsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiBk YXRhYmFzZXMgZnJvbSBtYXAuZGF0KGlmIGV4aXN0KSBmaWxlIGxpc3QgYW5kIHNraXAgcmVz dG9yaW5nIGZvcgogCSAqIC0tZXhjbHVkZS1kYXRhYmFzZSBwYXR0ZXJucy4KIAkgKi8KLQlp ZiAoaW5wdXRGaWxlU3BlYyAhPSBOVUxMICYmICFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShp bnB1dEZpbGVTcGVjLCAidG9jLmRhdCIpICYmCi0JCQlJc0ZpbGVFeGlzdHNJbkRpcmVjdG9y eShpbnB1dEZpbGVTcGVjLCAiZ2xvYmFsLmRhdCIpKQorCWlmIChpbnB1dEZpbGVTcGVjICE9 IE5VTEwgJiYgIWZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9j LmRhdCIpICYmCisJCQlmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywg Imdsb2JhbC5kYXQiKSkKIAl7CiAJCVBHY29ubiAgKmNvbm4gPSBOVUxMOyAvKiBDb25uZWN0 aW9uIHRvIHJlc3RvcmUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KIApAQCAtNTc4LDcgKzU1 Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAKIAkJLyogRnJlZSBk YiBwYXR0ZXJuIGxpc3QuICovCi0JCXNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZSgm ZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZk Yl9leGNsdWRlX3BhdHRlcm5zKTsKIAl9CiAJZWxzZSAvKiBwcm9jZXNzIGlmIGdsb2JhbC5k YXQgZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8KIAl7CkBAIC04NDcsMTIgKzgyMiwxMiBAQCBy ZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlv bnMgKm9wdHMpCiB9CiAKIC8qCi0gKiBJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeQorICogZmls ZV9leGlzdHNfaW5fZGlyZWN0b3J5CiAgKgogICogUmV0dXJucyB0cnVlIGlmIGZpbGUgZXhp c3QgaW4gY3VycmVudCBkaXJlY3RvcnkuCiAgKi8KIHN0YXRpYyBib29sCi1Jc0ZpbGVFeGlz dHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQor ZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAq ZmlsZW5hbWUpCiB7CiAJc3RydWN0IHN0YXQJCQlzdDsKIAljaGFyCQkJCWJ1ZltNQVhQR1BB VEhdOwpAQCAtODY0LDcgKzgzOSw3IEBAIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0 IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB9CiAKIC8qCi0gKiBSZWFkT25l U3RhdGVtZW50CisgKiByZWFkX29uZV9zdGF0ZW1lbnQKICAqCiAgKiBUaGlzIHdpbGwgc3Rh cnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIgdXNpbmcgZmdldGMgYW5kIHJl YWQgdGlsbAogICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVybWluYXRvciBmb3IgZ2xv YmFsLmRhdCBmaWxlKQpAQCAtODczLDcgKzg0OCw3IEBAIElzRmlsZUV4aXN0c0luRGlyZWN0 b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAgKi8KIAogc3Rh dGljIGludAotUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmls ZSkKK3JlYWRfb25lX3N0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmlsZSkK IHsKIAlpbnQJCQljOyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAqLwogCWludAkJ CW07CkBAIC05NDEsMjcgKzkxNiwyMSBAQCBSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8g aW5CdWYsIEZJTEUgKnBmaWxlKQogLyoKICAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9y ZQogICoKLSAqIFRoaXMgd2lsbCByZW1vdmUgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlz dCB0aGF0IHBhdHRlcm4gbWF0Y2hpbmcgYW55Ci0gKiBpbiB0aGUgZGJfZXhjbHVkZV9wYXR0 ZXJucyBsaXN0LiAgZGJuYW1lX29pZF9saXN0IG1heWJlIGlucGxhY2UgbW9kaWZpZWQuCisg KiBUaGlzIHdpbGwgbWFyayBmb3Igc2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBkYm5hbWVf b2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1hdGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJfZXhj bHVkZV9wYXR0ZXJucyBsaXN0LgogICoKLSAqIHJldHVybnMsIG51bWJlciBvZiBkYXRhYmFz ZSB3aWxsIGJlIHJlc3RvcmVkLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNl IHRvIGJlIHJlc3RvcmVkLgogICoKICAqLwogc3RhdGljIGludAogZ2V0X2RibmFtZXNfbGlz dF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKLQkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpk Ym5hbWVfb2lkX2xpc3QsCisJCVNpbXBsZU9pZFN0cmluZ0xpc3QgKmRibmFtZV9vaWRfbGlz dCwKIAkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQogewotCVNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhl YWQ7Ci0JU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRwcmVjZWxsID0gTlVMTDsK IAlpbnQJCQkJCQkJY291bnRfZGIgPSAwOwogCVBRRXhwQnVmZmVyIHF1ZXJ5OwogCVBHcmVz dWx0ICAgKnJlczsKIAotCS8qIFJldHVybiAwIGlmIHRoZXJlIGlzIG5vIGRhdGFiYXNlIHRv IHJlc3RvcmUuICovCi0JaWYgKGRib2lkX2NlbGwgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0K IAlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAlpZiAoIWNvbm4pCkBAIC05NzEs MTIgKzk0MCwxMiBAQCBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpjb25u LAogCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1lcyBhbmQgaWYgc3BlY2lmaWVk IHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCiAJICogcmVtb3ZlIGRibmFtZSBmcm9tIGxpc3Qu CiAJICovCi0Jd2hpbGUgKGRib2lkX2NlbGwgIT0gTlVMTCkKKwlmb3IgKFNpbXBsZU9pZFN0 cmluZ0xpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCQkgZGJf Y2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCiAJewogCQlib29sCQkJCQkJc2tpcF9k Yl9yZXN0b3JlID0gZmFsc2U7Ci0JCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHQg PSBkYm9pZF9jZWxsLT5uZXh0OwogCi0JCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNl bGxkYiA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgY2VsbGRiOyBjZWxsZGIgPSBjZWxs ZGItPm5leHQpCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBhdF9jZWxsID0gZGJf ZXhjbHVkZV9wYXR0ZXJucy5oZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwgPSBwYXRfY2VsbC0+ bmV4dCkKIAkJewogCQkJLyoKIAkJCSAqIHRoZSBjb25zdHJ1Y3QgcGF0dGVybiBtYXRjaGlu ZyBxdWVyeToKQEAgLTk5MCwyMSArOTU5LDIxIEBAIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVz dG9yZShQR2Nvbm4gKmNvbm4sCiAJCQkgKgogCQkJICogSWYgbm8gZGIgY29ubmVjdGlvbiwg dGhlbiBjb25zaWRlciBQQVRURVJOIGFzIE5BTUUuCiAJCQkgKi8KLQkJCWlmIChwZ19zdHJj YXNlY21wKGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKSA9PSAwKQorCQkJaWYg KHBnX3N0cmNhc2VjbXAoZGJfY2VsbC0+c3RyLCBwYXRfY2VsbC0+dmFsKSA9PSAwKQogCQkJ ICAgc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKIAkJCWVsc2UgaWYgKGNvbm4pCiAJCQl7CiAJ CQkJaW50CWRvdGNudDsKIAogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiU0VM RUNUIDEgIik7Ci0JCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5LCBjZWxs ZGItPnZhbCwgZmFsc2UsCi0JCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBxdW90ZV9saXRlcmFs X2NzdHIoZGJvaWRfY2VsbC0+ZGJfbmFtZSksCisJCQkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJu KGNvbm4sIHF1ZXJ5LCBwYXRfY2VsbC0+dmFsLCBmYWxzZSwKKwkJCQkJCQkJCSAgZmFsc2Us IE5VTEwsIHF1b3RlX2xpdGVyYWxfY3N0cihkYl9jZWxsLT5zdHIpLAogCQkJCQkJCQkJICBO VUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKIAogCQkJCWlmIChkb3RjbnQgPiAwKQogCQkJ CXsKIAkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQgbmFtZSAodG9vIG1h bnkgZG90dGVkIG5hbWVzKTogJXMiLAotCQkJCQkJCQkgIGNlbGxkYi0+dmFsKTsKKwkJCQkJ CQkJICBkYl9jZWxsLT5zdHIpOwogCQkJCQlQUWZpbmlzaChjb25uKTsKIAkJCQkJZXhpdF9u aWNlbHkoMSk7CiAJCQkJfQpAQCAtMTAxNCw3ICs5ODMsNyBAQCBnZXRfZGJuYW1lc19saXN0 X3RvX3Jlc3RvcmUoUEdjb25uICpjb25uLAogCQkJCWlmICgoUFFyZXN1bHRTdGF0dXMocmVz KSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBRbnR1cGxlcyhyZXMpKQogCQkJCXsKIAkJCQkJ c2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKLQkJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIFwi JXNcIiBpcyBtYXRjaGluZyB3aXRoIGV4Y2x1ZGUgcGF0dGVybjogXCIlc1wiIiwgZGJvaWRf Y2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpOworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJh c2UgXCIlc1wiIG1hdGNoZXMgZXhjbHVkZSBwYXR0ZXJuOiBcIiVzXCIiLCBkYl9jZWxsLT5z dHIsIHBhdF9jZWxsLT52YWwpOwogCQkJCX0KIAogCQkJCVBRY2xlYXIocmVzKTsKQEAgLTEw MjgsMTcgKzk5NywxMyBAQCBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoUEdjb25uICpj b25uLAogCQkvKiBJbmNyZW1lbnQgY291bnQgaWYgZGF0YWJhc2UgbmVlZHMgdG8gYmUgcmVz dG9yZWQuICovCiAJCWlmIChza2lwX2RiX3Jlc3RvcmUpCiAJCXsKLQkJCXBnX2xvZ19pbmZv KCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7Ci0J CQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRfbGlzdCwgZGJvaWRfY2Vs bCwgZGJvaWRwcmVjZWxsKTsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2Ug XCIlc1wiIiwgZGJfY2VsbC0+c3RyKTsKKwkJCWRiX2NlbGwtPm9pZCA9IEludmFsaWRPaWQ7 CiAJCX0KIAkJZWxzZQogCQl7CiAJCQljb3VudF9kYisrOwotCQkJZGJvaWRwcmVjZWxsID0g ZGJvaWRfY2VsbDsKIAkJfQotCi0JCS8qIFByb2Nlc3MgbmV4dCBkYm5hbWUgZnJvbSBkYm5h bWUgbGlzdC4gKi8KLQkJZGJvaWRfY2VsbCA9IG5leHQ7CiAJfQogCiAJcmV0dXJuIGNvdW50 X2RiOwpAQCAtMTA1Myw3ICsxMDE4LDcgQEAgZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3Jl KFBHY29ubiAqY29ubiwKICAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSBu YW1lcyBpbiBtYXAuZGF0IGZpbGUuCiAgKi8KIHN0YXRpYyBpbnQKLWdldF9kYm5hbWVfb2lk X2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21f bWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZU9pZFN0cmluZ0xpc3QgKmRi bmFtZV9vaWRfbGlzdCkKIHsKIAlGSUxFICAgICpwZmlsZTsKIAljaGFyICAgIG1hcF9maWxl X3BhdGhbTUFYUEdQQVRIXTsKQEAgLTEwNjQsNyArMTAyOSw3IEBAIGdldF9kYm5hbWVfb2lk X2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpkCiAJICogSWYgdGhlcmUgaXMgb25seSBnbG9iYWwuZGF0IGZpbGUgaW4g ZHVtcCwgdGhlbiByZXR1cm4gZnJvbSBoZXJlIGFzIHRoZXJlCiAJICogaXMgbm8gZGF0YWJh c2UgdG8gcmVzdG9yZS4KIAkgKi8KLQlpZiAoIUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBn X3N0cmR1cChkdW1wZGlycGF0aCksICJtYXAuZGF0IikpCisJaWYgKCFmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCiAJewogCQlwZ19sb2dfaW5m bygiZGF0YWJhc2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIG1hcC5kYXQgZmlsZSBpcyBu b3QgcHJlc2VudCBpbiBcIiVzXCIiLCBkdW1wZGlycGF0aCk7CiAJCXJldHVybiAwOwpAQCAt MTA4Nyw3ICsxMDUyLDcgQEAgZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmQKIAogCQkvKiBF eHRyYWN0IGRib2lkLiAqLwogCQlzc2NhbmYobGluZSwgIiV1IiAsICZkYl9vaWQpOwotCQlz c2NhbmYobGluZSwgIiVzIiAsIGRiX29pZF9zdHIpOworCQlzc2NhbmYobGluZSwgIiUyMHMi ICwgZGJfb2lkX3N0cik7CiAKIAkJLyogTm93IGNvcHkgZGJuYW1lLiAqLwogCQlzdHJjcHko ZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIpICsgMSk7CkBAIC0xMTA2LDcgKzEw NzEsNyBAQCBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVt cGRpcnBhdGgsIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZAogCQkgKiBuZWVkcyB0byBza2lw cGVkIGZvciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5nCiAJ CSAqIGEgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KIAkJICovCi0JCXNpbXBsZV9kYl9v aWRfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCXNp bXBsZV9vaWRfc3RyaW5nX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJfb2lkLCBk Ym5hbWUpOwogCQljb3VudCsrOwogCX0KIApAQCAtMTEzMiw4ICsxMDk3LDcgQEAgcmVzdG9y ZUFsbERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAog CQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRp b25zICpvcHRzLAogCQkJCQlpbnQgbnVtV29ya2VycykKIHsKLQlTaW1wbGVEYXRhYmFzZU9p ZExpc3QJCQlkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07Ci0JU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAkJKmRib2lkX2NlbGw7CisJU2ltcGxlT2lkU3RyaW5nTGlzdAkJCSAg ICBkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CiAJaW50CQkJCQkJCQludW1fZGJf cmVzdG9yZSA9IDA7CiAJaW50CQkJCQkJCQludW1fdG90YWxfZGI7CiAJaW50CQkJCQkJCQlu X2Vycm9yc190b3RhbDsKQEAgLTExODMsNyArMTE0Nyw3IEBAIHJlc3RvcmVBbGxEYXRhYmFz ZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKIAkJUFFmaW5pc2go Y29ubik7CiAKIAkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLwot CWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCWlmIChkYm5hbWVfb2lkX2xp c3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDApCiAJewogCQlwZ19sb2df aW5mbygibm8gZGF0YWJhc2UgbmVlZHMgdG8gcmVzdG9yZSBvdXQgb2YgJWQgZGF0YWJhc2Vz IiwgbnVtX3RvdGFsX2RiKTsKIAkJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOwpAQCAtMTE5Niwx MyArMTE2MCwxNiBAQCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqZHVtcGRpcnBhdGgsCiAJICogYWZ0ZXIgc2tpcHBpbmcgbmFtZXMgb2YgZXhjbHVk ZS1kYXRhYmFzZS4gIE5vdyB3ZSBjYW4gbGF1bmNoIHBhcmFsbGVsCiAJICogd29ya2VycyB0 byByZXN0b3JlIHRoZXNlIGRhdGFiYXNlcy4KIAkgKi8KLQlkYm9pZF9jZWxsID0gZGJuYW1l X29pZF9saXN0LmhlYWQ7Ci0KLQl3aGlsZShkYm9pZF9jZWxsICE9IE5VTEwpCisJZm9yIChT aW1wbGVPaWRTdHJpbmdMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFk OworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCiAJewogCQljaGFyCQlz dWJkaXJwYXRoW01BWFBHUEFUSF07CiAJCWludAkJCW5fZXJyb3JzOwogCisJCS8qIGlnbm9y ZSBkYnMgbWFya2VkIGZvciBza2lwcGluZyAqLworCQlpZiAoZGJfY2VsbC0+b2lkID09IElu dmFsaWRPaWQpCisJCQljb250aW51ZTsKKwogCQkvKgogCQkgKiBXZSBuZWVkIHRvIHJlc2V0 IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkIGludG8K IAkJICogYWxyZWFkeSBjcmVhdGVkIGRhdGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1l IG9wdGlvbikKQEAgLTEyMTMsOSArMTE4MCw5IEBAIHJlc3RvcmVBbGxEYXRhYmFzZXMoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKIAkJCW9wdHMtPmNwYXJhbXMu b3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKIAkJfQogCi0JCXNucHJpbnRmKHN1YmRpcnBhdGgs IE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9pZF9jZWxs LT5kYl9vaWQpOworCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMvJXUiLCBkdW1wZGlycGF0aCwgZGJfY2VsbC0+b2lkKTsKIAotCQlwZ19sb2dfaW5m bygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUpOwor CQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiX2NlbGwtPnN0 cik7CiAKIAkJLyogUmVzdG9yZSBzaW5nbGUgZGF0YWJhc2UuICovCiAJCW5fZXJyb3JzID0g cmVzdG9yZU9uZURhdGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtlcnMsIHRydWUs IGNvdW50KTsKQEAgLTEyMjQsMTAgKzExOTEsOSBAQCByZXN0b3JlQWxsRGF0YWJhc2VzKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCiAJCWlmIChuX2Vycm9ycykK IAkJewogCQkJbl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7Ci0JCQlwZ19sb2dfd2Fybmlu ZygiZXJyb3JzIGlnbm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJv aWRfY2VsbC0+ZGJfbmFtZSwgbl9lcnJvcnMpOworCQkJcGdfbG9nX3dhcm5pbmcoImVycm9y cyBpZ25vcmVkIG9uIGRhdGFiYXNlIFwiJXNcIiByZXN0b3JlOiAlZCIsIGRiX2NlbGwtPnN0 ciwgbl9lcnJvcnMpOwogCQl9CiAKLQkJZGJvaWRfY2VsbCA9IGRib2lkX2NlbGwtPm5leHQ7 CiAJCWNvdW50Kys7CiAJfQogCkBAIC0xMjM1LDcgKzEyMDEsNyBAQCByZXN0b3JlQWxsRGF0 YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCiAJcGdfbG9n X2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBkYXRhYmFzZXMgYXJlICVkIiwgbnVtX2RiX3Jl c3RvcmUpOwogCiAJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCi0Jc2ltcGxl X2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCXNpbXBsZV9v aWRfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJuYW1lX29pZF9saXN0KTsKIAogCXJldHVybiBu X2Vycm9yc190b3RhbDsKIH0KQEAgLTEyODEsNyArMTI0Nyw3IEBAIHByb2Nlc3NfZ2xvYmFs X3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBj b25zdCBjaGFyICpvCiAJaW5pdFN0cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7CiAKIAkvKiBQ cm9jZXNzIGZpbGUgdGlsbCBFT0YgYW5kIGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMuICovCi0J d2hpbGUgKFJlYWRPbmVTdGF0ZW1lbnQoJnNxbHN0YXRlbWVudCwgcGZpbGUpICE9IEVPRikK Kwl3aGlsZSAocmVhZF9vbmVfc3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAhPSBF T0YpCiAJewogCQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nIHF1ZXJ5OiAlcyIsIHNxbHN0YXRl bWVudC5kYXRhKTsKIAkJcmVzdWx0ID0gUFFleGVjKGNvbm4sIHNxbHN0YXRlbWVudC5kYXRh KTsKQEAgLTEzNDcsOTYgKzEzMTMsNiBAQCBjb3B5X29yX3ByaW50X2dsb2JhbF9maWxlKGNv bnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKQogCQlmY2xvc2UoT1BGKTsKIH0KIAot LyoKLSAqIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKLSAqCi0gKiBhcHBlbmRzIGEgbm9k ZSB0byB0aGUgbGlzdCBpbiB0aGUgZW5kLgotICovCi1zdGF0aWMgdm9pZAotc2ltcGxlX2Ri X29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9v aWQsCi0JCWNvbnN0IGNoYXIgKmRibmFtZSkKLXsKLQlTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsICpjZWxsOwotCi0JY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbCk7Ci0KLQljZWxsLT5uZXh0ID0gTlVMTDsKLQljZWxsLT5kYl9vaWQgPSBk Yl9vaWQ7Ci0JY2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOwotCi0JaWYgKGxp c3QtPnRhaWwpCi0JCWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOwotCWVsc2UKLQkJbGlzdC0+ aGVhZCA9IGNlbGw7Ci0JbGlzdC0+dGFpbCA9IGNlbGw7Ci19Ci0KLS8qCi0gKiBzaW1wbGVf ZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUKLSAqCi0gKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBk Ym5hbWUgYW5kIGRib2lkIGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkCi1zaW1wbGVfZGJfb2lk X2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KQotewotCVNp bXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOwotCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwJKm5leHRjZWxsID0gTlVMTDsKLQotCXdoaWxlIChjZWxsKQot CXsKLQkJbmV4dGNlbGwgPSBjZWxsLT5uZXh0OwotCQlwZnJlZSAoY2VsbCk7Ci0JCWNlbGwg PSBuZXh0Y2VsbDsKLQl9Ci0KLQlsaXN0LT5oZWFkID0gTlVMTDsKLQlsaXN0LT50YWlsID0g TlVMTDsKLX0KLQotLyoKLSAqIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZQotICoK LSAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgotICovCi1zdGF0aWMgdm9p ZAotc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxp c3QpCi17Ci0JU2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOwotCVNp bXBsZVN0cmluZ0xpc3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7Ci0KLQl3aGlsZSAoY2Vs bCkKLQl7Ci0JCWNlbGxuZXh0ID0gY2VsbC0+bmV4dDsKLQkJcGZyZWUoY2VsbCk7Ci0JCWNl bGwgPSBjZWxsbmV4dDsKLQl9Ci0KLQlsaXN0LT5oZWFkID0gTlVMTDsKLQlsaXN0LT50YWls ID0gTlVMTDsKLX0KLQotLyoKLSAqIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKLSAqCi0g KiBkZWxldGUgY2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBvaWQgbGlzdC4KLSAqLwotc3RhdGlj IHZvaWQKLXNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0LAotCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAotCQlTaW1wbGVE YXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KQotewotCWlmIChwcmV2ID09IE5VTEwpCi0Jewot CQlsaXN0LT5oZWFkID0gY2VsbC0+bmV4dDsKLQkJcGZyZWUoY2VsbCk7Ci0JfQotCWVsc2UK LQl7Ci0JCXByZXYtPm5leHQgPSBjZWxsLT5uZXh0OwotCQlwZnJlZShjZWxsKTsKLQl9Ci19 Ci0KIC8qCiAgKiBxdW90ZV9saXRlcmFsX2ludGVybmFsCiAgKi8KLS0gCjIuMzQuMQoK --------------h38zyXccLdlz60yl0TtZ8kI0--