From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,NICE_REPLY_A,RCVD_IN_DNSWL_MED, T_PDS_PRO_TLD autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 14259 invoked from network); 8 Nov 2022 00:19:11 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 8 Nov 2022 00:19:11 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1667866752; b=Zba4vN7GXn8tAKrrob6jFjsK4nsJyrW4IBlZWSFuz1OSTE+fM0JI+U7qYbIsWhOCqmY9en+80i mfJuuH+lsPGPiuj9fL/UG7dE2ttQnVobYuJOZtpxZcDWfpzNYarxUl9U5Td+EPVyIpX/YGz0b4 Bf9MnJ8030egx4yTo+PZyD+Wb3s2t1k3/e5XEhveg1ueTBbQWujY6mM67sm3AbWdry+kXYuFpW yio3YG3umv4zyOrsx8KEOAfr5SfJol0BHDYhoxTKlUa96lSnNX6x8gE9gyq94/b9Ind2cRwi30 dYO0TH9hp2t/W2ylHpvpjYNBN2nAJGL9alSuNG2ME2CBaQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (iris.zentaur.org) smtp.remote-ip=198.58.127.206; dkim=pass header.d=zentaur.org header.s=dkim20200120 header.a=rsa-sha256; dmarc=pass header.from=zentaur.org; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1667866752; bh=n8Pxgtr6rRbwp4bpzp8gcMNf/ZastF4A/fzRovQpYvE=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:In-Reply-To:From:References:To:Subject:MIME-Version:Date: Message-ID:Content-Type:DKIM-Signature:DKIM-Signature; b=imtbIxnvj66IpK2bIGrhMeNvkEEsD9d3otMs8Z/j8C88vVet8IHy/FyfX7uGTQM2rHk30Cigwk bC4f2JO33GXfKeo1kIAc+a+2KOln1DW7tT34DuE3/1WUoH8Y8XPPOTPBd2n34IgSoyIBeWDazr N/IuxBuF7vYSCUTt6d4AvlCXobebrRI/U2UB+qCH6exdJdbTdnG2mp3JGD+CVzC1MKZGAekqRo XPL4Wri7OWS1F7nphm+bBUZOUJUmZDvMc11rR6jOEm3anXq189kXetnRlASGS3khGnk1kXWvUs P5s+RZdzV22QJgDbys4te1V1n3ZGAjZlLoRuVt+LriQI5A==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:In-Reply-To:From:References:To: Subject:MIME-Version:Date:Message-ID:Content-Type:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=n8Pxgtr6rRbwp4bpzp8gcMNf/ZastF4A/fzRovQpYvE=; b=dcBP+6wxGU5bUzhyW/msG4jvvO hQba5YtWgfYhcBN+OCw7lNgrs+iyqkgbMwuDhYELadnbIK5Avw1+9nNH4B1de3nXzjwfB3XDzQYhl UkLyygqk0TNulHK2DXYnNogIqYP2L1SXS1z8h5pctajByTNSsdnR+wwTUUHp9epeHFb4KOn54mQ3x Hr3AXPDXFIZg+ztkVhABWfAR5xvpdAhlbIz544R3880NyQp4GPdJhwvp0MjFAWKS+fvkOLsPVdKae Hbfl1UGpI2pTmc58XZZfqv/e/uBhEyqGfVytR/wOTFY4tcViIEPM/gDo/j1Jc7Lp8PBBdz3xAlE7k r8PcZTVA==; Received: by zero.zsh.org with local id 1osCKb-000Dpw-QX; Tue, 08 Nov 2022 00:19:09 +0000 Authentication-Results: zsh.org; iprev=pass (iris.zentaur.org) smtp.remote-ip=198.58.127.206; dkim=pass header.d=zentaur.org header.s=dkim20200120 header.a=rsa-sha256; dmarc=pass header.from=zentaur.org; arc=none Received: from iris.zentaur.org ([198.58.127.206]:60868) by zero.zsh.org with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) id 1osCJw-000DUQ-Ay; Tue, 08 Nov 2022 00:18:29 +0000 Received: from iris.zentaur.org (localhost [127.0.0.1]) by iris.zentaur.org (Postfix) with ESMTP id 4N5pbk5mHdz3wZj for ; Tue, 8 Nov 2022 00:18:26 +0000 (UTC) Authentication-Results: iris.zentaur.org (amavisd-new); dkim=pass (2048-bit key) reason="pass (just generated, assumed good)" header.d=zentaur.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=zentaur.org; h= in-reply-to:from:from:references:to:content-language:subject :subject:user-agent:mime-version:date:date:message-id :content-type:content-type; s=dkim20200120; t=1667866704; x= 1667870305; bh=n8Pxgtr6rRbwp4bpzp8gcMNf/ZastF4A/fzRovQpYvE=; b=p xetZsHSPi85jtuK0FUlWmcrZ2cSEtWEUf9nC76+sq3hIsMzvYz+d8z7RmtLpUGAn 1J6EslmhPFEIxYz8fY3/QrKrz0n7KAG+dT78jyR9mTQ+HglDKhSpfUI8vpWEZRxM +myTGGTiQf9hKb3YeUzhuJonzpN1e1Vo2GBknhFVJ8eTmwSlN6y66ib7ASrEK5Ga Vah38FYLdjSgQAuepy5b8JFJfDOy6/ROrIIGBrrxX3Ivuo3cw8Pl85Yx/JBYByuz 3XOzmgmrBNOHAD8pBOdmePSxCjspvuHHQxJjJ6QkHjEuCQSPvmuLg74Ex7uoDOxB e4GN8IukR5Zggg6XCKteg== X-Virus-Scanned: amavisd-new at iris.zentaur.org Received: from iris.zentaur.org ([127.0.0.1]) by iris.zentaur.org (iris.zentaur.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id g_WvHeSXKVDs for ; Tue, 8 Nov 2022 00:18:24 +0000 (UTC) Received: from [192.168.72.136] (unknown [136.50.213.220]) by iris.zentaur.org (Postfix) with ESMTPSA id 4N5pbh0J2Nz3wZb for ; Tue, 8 Nov 2022 00:18:23 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------BhXt5Ojyysa30XLpmXB0UXax" Message-ID: <6275a5ac-3a47-f591-7b3c-380ec4fed5ac@zentaur.org> Date: Mon, 7 Nov 2022 18:18:15 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.3 Subject: Re: [PATCH] zsh/random module [UPDATED] Content-Language: en-US To: zsh-workers@zsh.org References: <741b77be-b679-76cc-f8ec-49c9d89323c1@zentaur.org> <1e8ea669-7a25-b321-6024-72dbc43ac023@zentaur.org> <41205a86-8aad-4821-baa4-1d2ac9bf3c5d@app.fastmail.com> <1b2cafe6-b4b5-c59a-11f3-4dbc1e99e2bc@zentaur.org> From: Clinton Bunch In-Reply-To: <1b2cafe6-b4b5-c59a-11f3-4dbc1e99e2bc@zentaur.org> X-Antivirus: Avast (VPS 221107-0, 11/6/2022), Outbound message X-Antivirus-Status: Clean X-Seq: 50906 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: This is a multi-part message in MIME format. --------------BhXt5Ojyysa30XLpmXB0UXax Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Here's the updated patch taking into account the feedback I got from=20 Bart and dana. -l length has been converted to -c count -L is placed before -U in the documentation Documentation specifies that -r (raw) is for binary data. Range checking has been added to the -L and -U options Bug where -i overrode -L or -U has been fixed.=C2=A0 Bounds take preceden= ce=20 even if -i is redundantly specified. Default count has been changed to 1 if -i, -L, and/or -U has been=20 specified without -a dana's completion function has been updated with these changes and includ= ed A test file has been created (Not sure how useful it is, but it's there) --------------BhXt5Ojyysa30XLpmXB0UXax Content-Type: text/plain; charset=UTF-8; name="zsh-random.patch" Content-Disposition: attachment; filename="zsh-random.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL0NvbXBsZXRpb24vWnNoL0NvbW1hbmQvX2dldHJhbmRvbSBiL0NvbXBs ZXRpb24vWnNoL0NvbW1hbmQvX2dldHJhbmRvbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLmQ5N2UzNjkxOAotLS0gL2Rldi9udWxsCisrKyBiL0NvbXBsZXRpb24v WnNoL0NvbW1hbmQvX2dldHJhbmRvbQpAQCAtMCwwICsxLDE0IEBACisjY29tcGRlZiBnZXRy YW5kb20KKworI1RoYW5zIHRvIGRhbmEgZm9yIHByb3ZpZGluZyB0aGlzIGNvbXBsZXRpb24g ZnVuY3Rpb24KKworbG9jYWwgbG1pbj0wIGxtYXg9JCgoIDIgKiogMzIgLSAyICkpIHVtaW49 MSB1bWF4PSQoKCAyICoqIDMyIC0gMSApKQorCitfYXJndW1lbnRzIC1zIC1TIDogXAorICAn KC1yIC1zKS1hK1thc3NpZ24gcmVzdWx0IHRvIHNwZWNpZmllZCBhcnJheSBwYXJhbWV0ZXJd OmFycmF5IHBhcmFtZXRlcjpfcGFyYW1ldGVycyAtZyAiKmFycmF5Kn4qcmVhZG9ubHkqIicg XAorICAnKC1hKS1zK1thc3NpZ24gcmVzdWx0IHRvIHNwZWNpZmllZCBzY2FsYXIgcGFyYW1l dGVyXTpzY2FsYXIgcGFyYW1ldGVyOl9wYXJhbWV0ZXJzIC1nICIqKGludGVnZXJ8c2NhbGFy KSp+KnJlYWRvbmx5KiInIFwKKyAgJygtciktaVtwcm9kdWNlIHJhbmRvbSBkYXRhIGFzIDMy LWJpdCB1bnNpZ25lZCBpbnRlZ2Vyc10nIFwKKyAgJy1jK1tzcGVjaWZ5IGNvdW50IG9mIGRh dGFdOiA6X251bWJlcnMgLWQ4IC1sMSAtbTY0IC11ICJieXRlcyBvciBpbnRlZ2VyIGVsZW1l bnRzIiAiZGF0YSBsZW5ndGgiJyBcCisgICcoLWkgLUwgLVUpLXJbcHJvZHVjZSByYW5kb20g ZGF0YSBhcyByYXcgYmluYXJ5IGJ5dGVzXScgXAorICAnKC1yKS1MK1tzcGVjaWZ5IGludGVn ZXIgbG93ZXIgYm91bmQgKGltcGxpZXMgLWkpXTogOl9udW1iZXJzIC1kJGxtaW4gLWwkbG1p biAtbSRtYXggImludGVnZXIgbG93ZXIgYm91bmQiJyBcCisgICcoLXIpLVUrW3NwZWNpZnkg aW50ZWdlciB1cHBlciBib3VuZCAoaW1wbGllcyAtaSldOiA6X251bWJlcnMgLWQkdW1heCAt bCR1bWluIC1tJG1heCAiaW50ZWdlciB1cHBlciBib3VuZCInCmRpZmYgLS1naXQgYS9Eb2Mv TWFrZWZpbGUuaW4gYi9Eb2MvTWFrZWZpbGUuaW4KaW5kZXggMjNlNWZjN2UyLi5iYWNlZTdj MjcgMTAwNjQ0Ci0tLSBhL0RvYy9NYWtlZmlsZS5pbgorKysgYi9Eb2MvTWFrZWZpbGUuaW4K QEAgLTY2LDcgKzY2LDcgQEAgWnNoL21vZF9leGFtcGxlLnlvIFpzaC9tb2RfZmlsZXMueW8g WnNoL21vZF9sYW5naW5mby55byBcCiBac2gvbW9kX21hcGZpbGUueW8gWnNoL21vZF9tYXRo ZnVuYy55byBcCiBac2gvbW9kX25lYXJjb2xvci55byBac2gvbW9kX25ld3VzZXIueW8gXAog WnNoL21vZF9wYXJhbWV0ZXIueW8gWnNoL21vZF9wY3JlLnlvIFpzaC9tb2RfcHJpdmF0ZS55 byBcCi1ac2gvbW9kX3JlZ2V4LnlvIFpzaC9tb2Rfc2NoZWQueW8gWnNoL21vZF9zb2NrZXQu eW8gXAorWnNoL21vZF9yZWdleC55byBac2gvbW9kX3JhbmRvbS55byBac2gvbW9kX3NjaGVk LnlvIFpzaC9tb2Rfc29ja2V0LnlvIFwKIFpzaC9tb2Rfc3RhdC55byAgWnNoL21vZF9zeXN0 ZW0ueW8gWnNoL21vZF90Y3AueW8gXAogWnNoL21vZF90ZXJtY2FwLnlvIFpzaC9tb2RfdGVy bWluZm8ueW8gXAogWnNoL21vZF93YXRjaC55byBcCmRpZmYgLS1naXQgYS9Eb2MvWnNoL21v ZF9yYW5kb20ueW8gYi9Eb2MvWnNoL21vZF9yYW5kb20ueW8KbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwLi5hZjI1NWY5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mv WnNoL21vZF9yYW5kb20ueW8KQEAgLTAsMCArMSw2NyBAQAorQ09NTUVOVCghTU9EIXpzaC9y YW5kb20KK1NvbWUgSGlnaC1xdWFsaXR5IHJhbmRvbW5lc3MgY29tbWFuZHMsIHBhcmFtZXRl cnMsIGFuZCBmdW5jdGlvbnMuCishTU9EISkKK1RoZSB0dCh6c2gvcmFuZG9tKSBtb2R1bGUg Z2V0cyByYW5kb20gZGF0YSBmcm9tIHRoZSBrZXJuZWwgcmFuZG9tIHBvb2wuIElmIG5vCitr ZXJuZWwgcmFuZG9tIHBvb2wgY2FuIGJlIGZvdW5kLCB0aGUgbW9kdWxlIHdpbGwgbm90IGxv YWQuCisKKworc3Vic2VjdChCdWlsdGlucykKKworc3RhcnRpdGVtKCkKK2ZpbmRleChnZXRy YW5kb20pCitjaW5kZXgocmFuZG9tIGRhdGEsIHByaW50aW5nLCBhcnJheSkKK3hpdGVtKHR0 KGdldHJhbmRvbSkgWyB0dCgtYykgdmFyKGNvdW50KSBdIFsgdHQoLXIpIF0gWyB0dCgtcykg dmFyKHNjYWxhcikgXSBbdHQoLWkpIF0gWyB0dCgtYSkgdmFyKGFycmF5KSBdIFsgdHQoLUwp IHZhcihsb3dlcl9ib3VuZCkgXSBbIHR0KC1VKSB2YXIodXBwZXJfYm91bmQpIF0pCitOTCgp T3V0cHV0cyBhIHJhbmRvbSBoZXgtZW5jb2RlZCBzdHJpbmcgb2YgdmFyKGNvdW50KSBieXRl cyBieSBkZWZhdWx0LiBOTCgpCisKKworc3RhcnRpdGVtKCkKK2l0ZW0odHQoLWMpIHZhcihj b3VudCkpICgKK1NldHMgdGhlIG51bWJlciBvZiByZXR1cm5lZCByYW5kb20gZGF0YS4gRGVm YXVsdHMgdG8gOCwgdW5sZXNzIC1pLCAtTCwgb3IKKy1VIGlzIHNwZWNpZmllZCB3aXRob3V0 IC1hLCBpbiB3aGljaCBjYXNlIHRoZSBkZWZhdWx0IGlzIDEuIHZhcihjb3VudCkgbXVzdCBi ZQorYmV0d2VlbiAxIGFuZCA2NC4KKykKK2l0ZW0odHQoLXIpKSAoCitSZXR1cm5zIHRoZSBy YXcgYmluYXJ5IGJ5dGVzIHJhdGhlciB0aGFuIGEgaGV4LWVuY29kZWQgc3RyaW5nLgorKQor aXRlbSh0dCgtcykgdmFyKHNjYWxhcikpICgKK1NhdmVzIHRoZSByYW5kb20gZGF0YSBpbiB2 YXIoc2NhbGFyKSBpbnN0ZWFkIG9mIHByaW50aW5nIGl0LiBJdCBpcyBhbiBlcnJvciB0bwor dXNlIHRoaXMgd2l0aCAtaSwgLUwsIG9yIC1VIHdpdGggYSBjb3VudCBncmVhdGVyIHRoYW4g MS4KKykKK2l0ZW0odHQoLWEpIHZhcihhcnJheSkpICgKK1NhdmVzIHRoZSByYW5kb20gZGF0 YSBhcyBhbiBhcnJheSB2YXIoYXJyYXkpIG9mIHZhcihjb3VudCkgY29udGFpbmluZyBhCitk ZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VycyBMUEFSKCl0dCgtaSksIHR0 KC1MKSwgb3IgdHQoLVUpUlBBUigpCitvciBpbmRpdmlkdWFsIGJ5dGVzLgorKQoraXRlbSh0 dCgtaSkpICgKK1Byb2R1Y2VzIHZhcihjb3VudCkgMzItYml0IHVuc2lnbmVkIGludGVnZXJz LgorKQoraXRlbSh0dCgtTCkgdmFyKGxvd2VyX2JvdW5kKSkgKAorT3V0cHV0cyB2YXIoY291 bnQpIGludGVnZXJzIGJldHdlZW4gdmFyKGxvd2VyX2JvdW5kKSBhbmQgdmFyKHVwcGVyX2Jv dW5kKS4KK0RlZmF1bHRzIHRvIDAuICB2YXIobG93ZXJfYm91bmQpIGNhbiBub3QgYmUgbmVn YXRpdmUgYW5kIHRoZSBtYXhpbXVtIHZhbHVlIGlzCis0LDI5NCw5NjcsMjk0LgorKQoraXRl bSh0dCgtVSkgdmFyKHVwcGVyX2JvdW5kKSkgKAorT3V0cHV0cyB2YXIoY291bnQpIGludGVn ZXJzIGJldHdlZW4gdmFyKGxvd2VyX2JvdW5kKSBhbmQgdmFyKHVwcGVyX2JvdW5kKS4KK0Rl ZmF1bHRzIHRvIDQsMjk0LDk2NywyOTUuIFRoaXMgaXMgdGhlIG1heGltdW0gdmFsdWUgb2Yg dmFyKHVwcGVyX2JvdW5kKSBhbmQKK3RoZSBtaW5pbXVtIGlzIDEuCispCitlbmRpdGVtKCkK K2VuZGl0ZW0oKQorCitzdWJzZWN0KFBhcmFtZXRlcnMpCisKK3N0YXJ0aXRlbSgpCit2aW5k ZXgoU1JBTkRPTSkKK2l0ZW0odHQoU1JBTkRPTSkpICgKK0EgcmFuZG9tIHBvc2l0aXZlIDMy LWJpdCBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNCwyOTQsOTY3LDI5NS4gIFRoaXMgcGFyYW1l dGVyCitpcyByZWFkLW9ubHkuCispCitlbmRpdGVtKCkKKworc3Vic2VjdChNYXRoIEZ1bmN0 aW9ucykKKworc3RhcnRpdGVtKCkKK2l0ZW0odHQoenJhbmRvbStMUEFSKClSUEFSKCkpKSAo CitSZXR1cm5zIGEgcmFuZG9tIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5k IDEuCispCitlbmRpdGVtKCkKZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL3JhbmRvbS5jIGIv U3JjL01vZHVsZXMvcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwLi45ZGM5YTlhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9TcmMvTW9kdWxlcy9yYW5kb20u YwpAQCAtMCwwICsxLDY3NSBAQAorLyoKKyAqIHJhbmRvbS5jIC0gbW9kdWxlIHRvIGFjY2Vz cyBrZXJuZWwgcmFuZG9tIHNvdXJjZXMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg enNoLCB0aGUgWiBzaGVsbC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQ2xpbnRvbiBC dW5jaAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0Cisg KiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk aXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVk IHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSwgcHJvdmlk ZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwor ICogdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2Fy ZS4KKyAqCisgKiBJbiBubyBldmVudCBzaGFsbCBDbGludG9uIEJ1bmNoIG9yIHRoZSBac2gg RGV2ZWxvcG1lbnQgR3JvdXAgYmUgbGlhYmxlCisgKiB0byBhbnkgcGFydHkgZm9yIGRpcmVj dCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwKKyAq IGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBp dHMgZG9jdW1lbnRhdGlvbiwKKyAqIGV2ZW4gaWYgQ2xpbnRvbiBCdW5jaCBhbmQgdGhlIFpz aCBEZXZlbG9wbWVudCBHcm91cCBoYXZlIGJlZW4gYWR2aXNlZCBvZgorICogdGhlIHBvc3Np YmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorICoKKyAqIENsaW50b24gQnVuY2ggYW5kIHRoZSBa c2ggRGV2ZWxvcG1lbnQgR3JvdXAgc3BlY2lmaWNhbGx5IGRpc2NsYWltIGFueQorICogd2Fy cmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdh cnJhbnRpZXMgb2YKKyAqIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0 aWN1bGFyIHB1cnBvc2UuICBUaGUgc29mdHdhcmUKKyAqIHByb3ZpZGVkIGhlcmV1bmRlciBp cyBvbiBhbiAiYXMgaXMiIGJhc2lzLCBhbmQgQ2xpbnRvbiBCdW5jaCBhbmQgdGhlCisgKiBa c2ggRGV2ZWxvcG1lbnQgR3JvdXAgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgbWFp bnRlbmFuY2UsCisgKiBzdXBwb3J0LCB1cGRhdGVzLCBlbmhhbmNlbWVudHMsIG9yIG1vZGlm aWNhdGlvbnMuCisgKgorICovCisKKyNpbmNsdWRlICJyYW5kb20ubWRoIgorI2luY2x1ZGUg InJhbmRvbS5wcm8iCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2lmZGVmIEhBVkVf U1lTX1JBTkRPTV9ICisjaW5jbHVkZSA8c3lzL3JhbmRvbS5oPgorI2VuZGlmCisKKy8qIFNp bXBsaWZ5IHNlbGVjdCBVUkFORE9NIHNwZWNpZmljIGNvZGUgKi8KKyNpZiAhZGVmaW5lZChI QVZFX0FSQzRSQU5ET00pICYmICFkZWZpbmVkKEhBVkVfR0VUUkFORE9NKQorI2RlZmluZSBV U0VfVVJBTkRPTQorI2VuZGlmCisKKy8qIGJ1ZmZlciB0byBwcmUtbG9hZCBpbnRlZ2VycyBm b3IgU1JBTkRPTSB0byBsZXNzZW4gdGhlIGNvbnRleHQgc3dpdGNoZXMgKi8KK3VpbnQzMl90 IHJhbmRfYnVmZls4XTsKK3N0YXRpYyBpbnQgYnVmX2NudCA9IC0xOworCisjaWZkZWYgVVNF X1VSQU5ET00KKy8qIEZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi91cmFuZG9tICovCitpbnQg cmFuZGZkID0gLTE7CisjZW5kaWYgLyogVVNFX1VSQU5ET00gKi8KKworLyoKKyAqICBGdW5j dGlvbiB0YWtlcyBhbiBpbnB1dCBidWZmZXIgYW5kIGNvbnZlcnRzIHRoZSBjaGFyYWN0ZXJz IHRvIGhleCBhbmQKKyAqICBwbGFjZXMgdGhlbSBpbiBhbiBvdXRidXQgYnVmZmVyIHR3aWNl IHRoZSBzaXplLiBSZXR1cm5zIC0xIGlmIGl0IGNhbid0LgorICogIFJldHVybnMgdGhlIHNp emUgb2YgdGhlIG91dHB1dCBvdGhlcndpc2UuCisgKi8KKworLyoqLworc3RhdGljIGludAor enRyX3RvX2hleChjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sIHVpbnQ4X3QgKmlucHV0LCBz aXplX3QgaW5sZW4pCit7CisgICAgaW50IGkgPSAwLCBqID0gMDsKKworICAgIGlmIChvdXRs ZW4gPCAoaW5sZW4gKiAyICsgMSkpCisJcmV0dXJuIC0xOworCisgICAgZm9yKGkgPSAwLCBq ID0gMDsgaSA8IGlubGVuOyBpKyssIGorPTIpIHsKKwlpZiAoaiA8IG91dGxlbikgeworCSAg ICBzcHJpbnRmKChjaGFyICopKG91dCArIGopLCIlMDJYIixpbnB1dFtpXSk7CisJfSBlbHNl IHsKKwkgICAgcmV0dXJuIC0xOworCX0KKyAgICB9CisgICAgb3V0W2pdPSdcMCc7CisgICAg cmV0dXJuIGo7Cit9CisKKy8qKi8KK3N0YXRpYyBzc2l6ZV90CitnZXRyYW5kb21fYnVmZmVy KHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgICBzc2l6ZV90IHJldDsKKyAgICBzaXpl X3QgIHZhbCAgICAgPSAwOworICAgIHVpbnQ4X3QgKmJ1ZnB0ciA9IGJ1ZjsKKworICAgIGRv IHsKKyNpZmRlZiBIQVZFX0FSQzRSQU5ET00KKwkvKiBBcHBhcmVudGx5LCB0aGUgY3JlYXRl cnMgb2YgYXJjNHJhbmRvbSBkaWRuJ3QgYmVsaWV2ZSBpbiBlcnJvcnMgKi8KKwlhcmM0cmFu ZG9tX2J1ZihidWYsbGVuKTsKKwlyZXQgPSBsZW47CisjZWxpZiBkZWZpbmVkKEhBVkVfR0VU UkFORE9NKQorCXJldD1nZXRyYW5kb20oYnVmcHRyLChsZW4gLSB2YWwpLDApOworI2Vsc2UK KwlyZXQ9cmVhZChyYW5kZmQsYnVmcHRyLChsZW4gLSB2YWwpKTsKKyNlbmRpZgorCWlmIChy ZXQgPCAwKSB7CisJICAgIGlmIChlcnJubyAhPSBFSU5UUiB8fCBlcnJmbGFnIHx8IHJldGZs YWcgfHwgYnJlYWtzIHx8IGNvbnRmbGFnKSB7CisJCXp3YXJuKCJVbmFibGUgdG8gZ2V0IHJh bmRvbSBkYXRhOiAlZS4iLCBlcnJubyk7CisJCXJldHVybiAtMTsKKwkgICAgfQorCX0KKwli dWZwdHIgKz0gcmV0OworCXZhbCAgICArPSByZXQ7CisgICAgfSB3aGlsZSAocmV0IDwgbGVu KTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKgorICogSW1wbGVtZW50cyB0aGUgZ2V0cmFu ZG9tIGJ1aWx0aW4gdG8gcmV0dXJuIGEgc3RyaW5nIG9mIHJhbmRvbSBieXRlcyBvZgorICog dXNlci1zcGVjaWZpZWQgbGVuZ3RoLiAgSXQgZWl0aGVyIHByaW50cyB0aGVtIHRvIHN0ZG91 dCBvciByZXR1cm5zIHRoZW0KKyAqIGluIGEgcGFyYW1ldGVyIHBhc3NlZCBvbiB0aGUgY29t bWFuZCBsaW5lLgorICoKKyAqLworCisvKiovCitzdGF0aWMgaW50CitiaW5fZ2V0cmFuZG9t KGNoYXIgKm5hbWUsIGNoYXIgKiphcmd2LCBPcHRpb25zIG9wcywgaW50IGZ1bmMpCit7CisK KyAgICB6dWxvbmcgbGVuICAgICAgPSAxOworICAgIHNpemVfdCBieXRlX2xlbiA9IDAsIG91 dGxlbjsgLyogYnVmZmVyIGxlbmd0aHMgKi8KKyAgICBpbnQgICAgcGFkICAgICAgPSAwOwor CisgICAgYm9vbCBpbnRlZ2VyX291dCA9IGZhbHNlOwkgLyogIGJvb2xlYW4gKi8KKyAgICBp bnQgaSwgajsJCSAgICAgICAgIC8qIGxvb3AgY291bnRlcnMgKi8KKworICAgIC8qbWF4aW11 bSBzdHJpbmcgbGVuZ3RoIG9mIGEgMzItYml0IGludGVnZXIgKyBudWxsICovCisgICAgY2hh ciBpbnQyc3RyWzExXTsKKworICAgIHVpbnQ4X3QgICAqYnVmOworICAgIHVpbnQzMl90ICAq aW50X2J1ZiA9IE5VTEwsIGludF92YWwgPSAwOyAvKiBidWZmZXIgZm9yIGludGVnZXIgcmV0 dXJuICovCisKKyAgICBjaGFyICpzY2FsYXIgPSBOVUxMLCAqYXJybmFtZSA9IE5VTEw7ICAg LyogcGFyYW1ldGVyIG5hbWVzICovCisKKyAgICBjaGFyICpvdXRidWZmOyAgICAgICAgIC8q IGhleCBzdHJpbmcgb3IgbWV0YWZ5J2Qgb3V0cHV0ICovCisgICAgY2hhciAqKmFycmF5ID0g TlVMTDsgICAvKiBhcnJheSB2YWx1ZSBmb3IgLWEgKi8KKworICAgIC8qIFZhaWx1ZXMgZm9y IC1VICpuZCAtTCAqLworICAgIHp1bG9uZyAgIHVwcGVyID0gVUlOVDMyX01BWCwgbG93ZXIg PSAwOworICAgIHVpbnQzMl90IGRpZmYgID0gVUlOVDMyX01BWDsKKyAgICB1aW50MzJfdCBt aW4gICA9IDAsIHJlaiA9IDA7ICAvKiBSZWplY3QgYmVsb3cgbWluIGFuZCBjb3VudCAqLwor ICAgIGJvb2wgICAgIGJvdW5kID0gZmFsc2U7ICAgICAgIC8qIHNldCBpZiB1cHBlciBvciBs b3dlciBib3VuZCBzcGVjaWZpZWQgKi8KKyAgICAvKiBFbmQgb2YgdmFyaWFibGUgZGVjbGFy YXRpb25zICovCisKKworICAgIC8qIHN0b3JlIG91dCBwdXQgaW4gYSBzY2FsYXIgdmFyaWFi bGUgKi8KKyAgICBpZiAoT1BUX0lTU0VUKG9wcywgJ3MnKSkgeworCXNjYWxhciA9IE9QVF9B Ukcob3BzLCAncycpOworCWlmICghaXNpZGVudChzY2FsYXIpKSB7CisJICAgIHp3YXJubmFt KG5hbWUsICJhcmd1bWVudCB0byAtcyBub3QgYW4gaWRlbnRpZmllcjogJXMuIiwgc2NhbGFy KTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICAgIC8qIGNyZWF0ZSBhcnJheSBv ZiBkZXNjaW1hbCBudW1iZXJzICovCisgICAgaWYgKE9QVF9JU1NFVChvcHMsJ2EnKSkgewor CWFycm5hbWUgPSBPUFRfQVJHKG9wcywgJ2EnKTsKKwlpZiAoIWlzaWRlbnQoYXJybmFtZSkp IHsKKwkgICAgendhcm5uYW0obmFtZSwgImFyZ3VtZW50IHRvIC1hIG5vdCBhbiBpZGVudGlm aWVyOiAlcy4iLCBhcnJuYW1lKTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICAg IC8qIHNwZWNpZnkgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBvciBpbnRlZ2VycyB0byBvdXRw dXQgKi8KKyAgICBpZiAoT1BUX0lTU0VUKG9wcywgJ2MnKSkgeworCisJaWYgKHpzdHJ0b3Vs X3VuZGVyc2NvcmUoT1BUX0FSRyhvcHMsICdjJyksICZsZW4pKSB7CisJICAgIGlmIChsZW4g PiA2NCB8fCBsZW4gPD0gMCkgeworCQl6d2Fybm5hbShuYW1lLAorCQkJIkNvdW50IG11c3Qg YmUgYmV0d2VlbiAxIGFuZCA2NC4gIFlvdSBzcGVjaWZpZWQ6ICV6LiIsCisJCQkoemxvbmcp IGxlbik7CisJCXJldHVybiAxOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgendhcm5uYW0o bmFtZSwgIkNvdWxkbid0IGNvbnZlcnQgLWMgJXMgdG8gYSBudW1iZXIuIiwKKwkJICAgIE9Q VF9BUkcob3BzLCAnYycpKTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICAgIGlm IChPUFRfSVNTRVQob3BzLCAnVScpKSB7CisJaWYgKCF6c3RydG91bF91bmRlcnNjb3JlKE9Q VF9BUkcob3BzLCAnVScpLCAmdXBwZXIpKSB7CisJICAgIHp3YXJubmFtKG5hbWUsICJDb3Vs ZG4ndCBjb252ZXJ0IC1VICVzIHRvIGEgbnVtYmVyLiIsCisJCSAgICBPUFRfQVJHKG9wcywg J1UnKSk7CisJICAgIHJldHVybiAxOworCX0gZWxzZSBpZiAodXBwZXIgPiBVSU5UMzJfTUFY IHx8IHVwcGVyIDwgMSkgeworCSAgICB6d2Fybm5hbShuYW1lLAorCQkgICAgIlVwcGVyIGJv dW5kIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAleiB5b3Ugc3BlY2lmaWVkOiAlei4iLAorCQkg ICAgICh6bG9uZykgVUlOVDMyX01BWCwgKHpsb25nKSB1cHBlcik7CisJICAgIHJldHVybiAx OworCX0gZWxzZSB7CisJICAgIGJvdW5kID0gdHJ1ZTsKKwl9CisgICAgfQorCisgICAgaWYg KE9QVF9JU1NFVChvcHMsICdMJykpIHsKKwlpZiAoIXpzdHJ0b3VsX3VuZGVyc2NvcmUoT1BU X0FSRyhvcHMsICdMJyksICZsb3dlcikpIHsKKwkgICAgendhcm5uYW0obmFtZSwgIkNvdWxk bid0IGNvbnZlcnQgLUwgJXMgdG8gYSBwb3NpdGl2ZSBudW1iZXIuIiwKKwkJICAgIE9QVF9B Ukcob3BzLCAnTCcpKTsKKwkgICAgcmV0dXJuIDE7CisJfSBlbHNlIGlmIChsb3dlciA8IDAg fHwgbG93ZXIgPiBVSU5UMzJfTUFYLTEpIHsKKwkgICAgendhcm5uYW0obmFtZSwKKwkJICAg ICJMb3dlciBib3VuZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJXogeW91IHNwZWNpZmllZDog JXouIiwKKwkJICAgICh6bG9uZykgVUlOVDMyX01BWC0xLCAoemxvbmcpIGxvd2VyKTsKKwkg ICAgcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkgICAgYm91bmQgPSB0cnVlOworCX0KKyAgICB9 CisKKyAgICAvKiBpbnRlZ2VyIHJhdGhlciB0aGFuIGJ5dGUgb3V0cHV0IHRvIGFycmF5ICov CisgICAgaWYgKE9QVF9JU1NFVChvcHMsICdpJykpIHsKKwlpZiAoT1BUX0lTU0VUKG9wcywn cycpICYmIGxlbiA+IDEpIHsKKwkgICAgendhcm5uYW0obmFtZSwgIi1pIG9ubHkgbWFrZXMg c2Vuc2Ugd2l0aCAtcyB3aGVuIGNvdW50IGlzIDEuIik7CisJICAgIHJldHVybiAxOworCX0K KwlpbnRlZ2VyX291dCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGJvdW5kKSB7CisJaWYg KHNjYWxhciAmJiBsZW4gPiAxKSB7CisJICAgIHp3YXJubmFtKG5hbWUsICJCb3VuZHMgb25s eSBtYWtlIHNlbnNlIHdpdGggLXMgd2hlbiBjb3VudCBpcyAxLiIpOworCSAgICByZXR1cm4g MTsKKwl9CisKKwlpZiAobG93ZXIgPiB1cHBlcikgeworCSAgICB6d2Fybm5hbShuYW1lLCAi LVUgbXVzdCBiZSBsYXJnZXIgdGhhbiAtTC4iKTsKKwkgICAgcmV0dXJuIDE7CisJfQorCisJ ZGlmZiA9IHVwcGVyID09IFVJTlQzMl9NQVggJiYgbG93ZXIgPT0gMCA/IFVJTlQzMl9NQVgg OgorCQl1cHBlciAtIGxvd2VyICsgMTsKKworCWlmKCFkaWZmKSB7CisJICAgIHp3YXJubmFt KG5hbWUsICJVcHBlciBhbmQgTG93ZXIgYm91bmRzIGNhbm5vdCBiZSB0aGUgc2FtZS4iKTsK KwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworICAgIGlmKCFPUFRfSVNTRVQob3BzLCdj JykpCisJaWYgKCghYm91bmQgJiYgIWludGVnZXJfb3V0KSB8fCBhcnJuYW1lKQorCWxlbiA9 IDg7CisKKworICAgIGlmICghYnl0ZV9sZW4pCisJYnl0ZV9sZW4gPSBsZW47CisKKworICAg IGlmIChib3VuZCkgeworCXBhZCA9IGxlbiAvIDE2ICsgMTsKKwlieXRlX2xlbiA9IChsZW4g KyBwYWQpICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9IGVsc2UgaWYgKGludGVnZXJfb3V0 KQorCWJ5dGVfbGVuID0gbGVuICogc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIGlmIChieXRl X2xlbiA+IDI1NikKKwlieXRlX2xlbj0yNTY7CisKKyAgICBidWYgPSB6YWxsb2MoYnl0ZV9s ZW4pOworCisgICAgaWYgKGdldHJhbmRvbV9idWZmZXIoYnVmLCBieXRlX2xlbikgPCAwKSB7 CisJendhcm5uYW0obmFtZSwgIkNvdWxkbid0IGdldCByYW5kb20gZGF0YS4iKTsKKwlyZXR1 cm4gMTsKKyAgICB9CisKKyAgICAvKiBSYXcgb3V0cHV0IG9yIGhleCBzdHJpbmcgKi8KKyAg ICBpZiAoIWludGVnZXJfb3V0ICYmICFib3VuZCAmJiAhYXJybmFtZSkgeworCWlmIChPUFRf SVNTRVQob3BzLCAncicpKSB7CisJICAgIG91dGJ1ZmYgPSAoY2hhciAqKSBidWY7CisJICAg IG91dGxlbiAgPSBsZW47CisJfSBlbHNlIHsKKwkgICAgb3V0bGVuPWxlbioyOworCSAgICBv dXRidWZmID0gKGNoYXIqKSB6YWxsb2Mob3V0bGVuKzEpOworCSAgICB6dHJfdG9faGV4KG91 dGJ1ZmYsIG91dGxlbisxLCBidWYsIGxlbik7CisJfQorCisJaWYgKHNjYWxhcikgeworCSAg ICBzZXRzcGFyYW0oc2NhbGFyLCBtZXRhZnkob3V0YnVmZiwgb3V0bGVuLCBNRVRBX0RVUCkp OworCX0gZWxzZSB7CisJICAgIGZ3cml0ZShvdXRidWZmLDEsb3V0bGVuLHN0ZG91dCk7CisJ ICAgIGlmICghT1BUX0lTU0VUKG9wcywgJ3InKSkKKwkJcHJpbnRmKCJcbiIpOworCX0KKwlp ZiAob3V0YnVmZiAhPSAgKHZvaWQgKikgYnVmKSB7CisJICAgIHpmcmVlKG91dGJ1ZmYsb3V0 bGVuKzEpOworCX0KKwlyZXR1cm4gMDsKKyAgICB9IGVsc2UgeworCWlmIChPUFRfSVNTRVQo b3BzLCAncicpKSB7CisJICAgIHp3YXJubmFtKG5hbWUsICItciBjYW4ndCBiZSBzcGVjaWZp ZWQgd2l0aCBib3VuZHMgb3IgLWkgb3IgLWEuIik7CisJICAgIHJldHVybiAxOworCX0KKyAg ICB9CisKKyAgICBpZiAoYXJybmFtZSkgeworCWFycmF5ID0gKGNoYXIgKiopIHphbGxvYygo bGVuKzEpKnNpemVvZihjaGFyICopKTsKKwlhcnJheVtsZW5dID0gTlVMTDsKKyAgICB9CisK KyAgICBpZiAoaW50ZWdlcl9vdXQgfHwgYm91bmQpCisJaW50X2J1Zj0odWludDMyX3QgKili dWY7CisKKyAgICBtaW4gPSAtZGlmZiAlIGRpZmY7CisKKyAgICBqID0gMDsgcmVqID0gMDsK KyAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCWlmIChpbnRlZ2VyX291dCAmJiAh Ym91bmQpIHsKKwkgICAgaW50X3ZhbCA9IGludF9idWZbaV07CisJfSBlbHNlIGlmICghYm91 bmQpIHsKKwkgICAgaW50X3ZhbD1idWZbaV07CisJfSBlbHNlIHsKKwkgICAgd2hpbGUgKGlu dF9idWZbal0gPCBtaW4gKSB7IC8qUmVqZWN0ICovCisJCWorKzsgcmVqKys7CisJCWlmIChq ICogc2l6ZW9mKHVpbnQzMl90KSA+PSBieXRlX2xlbiApeworCQkgICAgaWYgKGdldHJhbmRv bV9idWZmZXIoYnVmLCBieXRlX2xlbikgPCAwKSB7CisJCQl6d2Fybm5hbShuYW1lLCAiQ2Fu J3QgZ2V0IGVub3VnaCByYW5kb20gZGF0YS4iKTsKKwkJCXJldHVybiAxOworCQkgICAgfQor CQkgICAgaiA9IDA7CisJCX0KKwkgICAgfQorCSAgICBpbnRfdmFsID0gaW50X2J1ZltqKytd ICUgZGlmZiArIGxvd2VyOworCX0KKwlzcHJpbnRmKGludDJzdHIsICIldSIsIGludF92YWwp OworCWlmIChhcnJuYW1lKSB7CisJICAgIGFycmF5W2ldPXp0cmR1cChpbnQyc3RyKTsKKwl9 IGVsc2UgaWYgKHNjYWxhciAmJiBsZW4gPT0gMSkgeworCSAgICBzZXRpcGFyYW0oc2NhbGFy LCBpbnRfdmFsKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIiVzICIsaW50MnN0cik7CisJ fQorICAgIH0KKyAgICBpZiAoYXJybmFtZSkgeworCXNldGFwYXJhbShhcnJuYW1lLGFycmF5 KTsKKyAgICB9IGVsc2UgaWYgKCFzY2FsYXIpIHsKKwlwcmludGYoIlxuIik7CisgICAgfQor CisKKyAgICB6ZnJlZShidWYsIGJ5dGVfbGVuKTsKKyAgICByZXR1cm4gMDsKK30KKworCisv KgorICogUHJvdmlkZXMgZm9yIHRoZSBTUkFORE9NIHBhcmFtZXRlciBhbmQgcmV0dXJucyBh biB1bnNpZ25lZCAzMi1iaXQgcmFuZG9tCisgKiBpbnRlZ2VyLgorICovCisKKy8qKi8KK3N0 YXRpYyB6bG9uZworZ2V0X3NyYW5kb20oVU5VU0VEKFBhcmFtIHBtKSkgeworCisgICAgaWYo YnVmX2NudCA8IDApIHsKKwlnZXRyYW5kb21fYnVmZmVyKCh2b2lkKikgcmFuZF9idWZmLHNp emVvZihyYW5kX2J1ZmYpKTsKKwlidWZfY250PTc7CisgICAgfQorICAgIHJldHVybiByYW5k X2J1ZmZbYnVmX2NudC0tXTsKK30KKworLyoKKyAqIEltcGxlbWVudHMgdGhlIG1hdGhmdW5j IHpyYW5kb20gYW5kIHJldHVybnMgYSByYW5kb20gZmxvYXRpbmctcG9pbnQKKyAqIG51bWJl ciBiZXR3ZWVuIDAgYW5kIDEuICBEb2VzIHRoaXMgYnkgZ2V0dGluZyBhIHJhbmRvbSAzMi1i dCBpbnRlZ2VyCisgKiBhbmQgZGl2aWRpbmcgaXQgYnkgVUlOVDMyX01BWC4KKyAqCisgKi8K KworLyoqLworc3RhdGljIG1udW1iZXIKK21hdGhfenJhbmRvbShVTlVTRUQoY2hhciAqbmFt ZSksIFVOVVNFRChpbnQgYXJnYyksIFVOVVNFRChtbnVtYmVyICphcmd2KSwKKwkgICAgIFVO VVNFRChpbnQgaWQpKQoreworICAgIG1udW1iZXIgcmV0OworICAgIGRvdWJsZSByOworCisg ICAgciA9IHJhbmRvbV9yZWFsKCk7CisgICAgaWYgKHIgPCAwKSB7CisJendhcm5uYW0obmFt ZSwgIkZhaWxlZCB0byBnZXQgc3VmZmljaWVudCByYW5kb20gZGF0YS4iKTsKKyAgICB9Cisg ICAgcmV0LnR5cGUgPSBNTl9GTE9BVDsKKyAgICByZXQudS5kID0gcjsKKworICAgIHJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnVpbHRpbiBiaW50YWJbXSA9IHsKKyAgICBC VUlMVElOKCJnZXRyYW5kb20iLCAwLCBiaW5fZ2V0cmFuZG9tLCAwLCA4LCAwLCAicmlhOnM6 YzpVOkw6IiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdzdV9pbnRlZ2Vy IHNyYW5kb21fZ3N1ID0KK3sgZ2V0X3NyYW5kb20sIG51bGxpbnRzZXRmbiwgc3RkdW5zZXRm biB9OworCitzdGF0aWMgc3RydWN0IHBhcmFtZGVmIHBhdGFiW10gPSB7CisgICAgeyJTUkFO RE9NIiwgUE1fSU5URUdFUiB8IFBNX1JFQURPTkxZX1NQRUNJQUwgfCBQTV9ISURFVkFMLCBO VUxMLAorCSAgICAmc3JhbmRvbV9nc3UsIE5VTEwsIE5VTEwsIE5VTEx9LAorfTsKKworc3Rh dGljIHN0cnVjdCBtYXRoZnVuYyBtZnRhYltdID0geworICAgIE5VTU1BVEhGVU5DKCJ6cmFu ZG9tIiwgbWF0aF96cmFuZG9tLCAwLCAwLCAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmVh dHVyZXMgbW9kdWxlX2ZlYXR1cmVzID0geworICAgIGJpbnRhYiwgc2l6ZW9mKGJpbnRhYikv c2l6ZW9mKCpiaW50YWIpLAorICAgIE5VTEwsIDAsCisgICAgbWZ0YWIsIHNpemVvZihtZnRh Yikvc2l6ZW9mKCptZnRhYiksCisgICAgcGF0YWIsIHNpemVvZihwYXRhYikvc2l6ZW9mKCpw YXRhYiksCisgICAgMAorfTsKKworLyoqLworaW50CitzZXR1cF8oVU5VU0VEKE1vZHVsZSBt KSkKK3sKKyNpZmRlZiBVU0VfVVJBTkRPTQorICAgIC8qIENoZWNrIGZvciB0aGUgZXhpc3Rl bmNlIG9mIC9kZXYvdXJhbmRvbSAqLworCisgICAgc3RydWN0IHN0YXQgc3Q7CisKKyAgICBp ZiAobHN0YXQoIi9kZXYvdXJhbmRvbSIsJnN0KSA8IDApIHsKKwl6d2FybigiTm8ga2VybmVs IHJhbmRvbSBwb29sIGZvdW5kLiIpOworCXJldHVybiAxOworICAgIH0KKworICAgIGlmICgh KFNfSVNDSFIoc3Quc3RfbW9kZSkpICkgeworCXp3YXJuKCJObyBrZXJuZWwgcmFuZG9tIHBv b2wgZm91bmQuIik7CisJcmV0dXJuIDE7CisgICAgfQorI2VuZGlmIC8qIFVTRV9VUkFORE9N ICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKi8KK2ludAorZmVhdHVyZXNfKE1vZHVsZSBt LCBjaGFyICoqKmZlYXR1cmVzKQoreworICAgICpmZWF0dXJlcyA9IGZlYXR1cmVzYXJyYXko bSwgJm1vZHVsZV9mZWF0dXJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKi8KK2ludAor ZW5hYmxlc18oTW9kdWxlIG0sIGludCAqKmVuYWJsZXMpCit7CisgICAgcmV0dXJuIGhhbmRs ZWZlYXR1cmVzKG0sICZtb2R1bGVfZmVhdHVyZXMsIGVuYWJsZXMpOworfQorCisvKiovCitp bnQKK2Jvb3RfKE1vZHVsZSBtKQoreworI2lmZGVmIFVTRV9VUkFORE9NCisgICAgLyoKKyAg ICAgKiBPcGVuIC9kZXYvdXJhbmRvbS4gIEhlcmUgYmVjYXVzZSBvZiBhIHdlaXJkIGlzc3Vl IG9uIEhQLVVYIDExLjMxCisgICAgICogV2hlbiBvcGVuaW5nIGluIHNldHVwXyBvcGVuIHJl dHVybmVkIDAuICBJbiBib290XywgaXQgcmV0dXJucworICAgICAqIGFuIHVudXNlZCBmaWxl IGRlc2NyaXB0b3IuIERlY2lkZWQgYWdhaW5zdCBpZmRlZiBIUFVYIGFzIGl0IHdvcmtzCisg ICAgICogaGVyZSBqdXN0IGFzIHdlbGwgZm9yIG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgKgor ICAgICAqLworCisgICAgaW50IHRtcGZkPS0xOworCisgICAgaWYgKCh0bXBmZCA9IG9wZW4o Ii9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPCAwKSB7CisJendhcm4oIkNvdWxkIG5vdCBh Y2Nlc3Mga2VybmVsIHJhbmRvbSBwb29sLiIpOworCXJldHVybiAxOworICAgIH0KKyAgICBy YW5kZmQgPSBtb3ZlZmQodG1wZmQpOworICAgIGFkZG1vZHVsZWZkKHJhbmRmZCxGRFRfTU9E VUxFKTsKKyAgICBpZiAocmFuZGZkIDwgMCkgeworCXp3YXJuKCJDb3VsZCBub3QgYWNjZXNz IGtlcm5lbCByYW5kb20gcG9vbC4iKTsKKwlyZXR1cm4gMTsKKyAgICB9CisjZW5kaWYgLyog VVNFX1VSQU5ET00gKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoqLworaW50CitjbGVhbnVw XyhNb2R1bGUgbSkKK3sKKyAgICByZXR1cm4gc2V0ZmVhdHVyZWVuYWJsZXMobSwgJm1vZHVs ZV9mZWF0dXJlcywgTlVMTCk7Cit9CisKKy8qKi8KK2ludAorZmluaXNoXyhVTlVTRUQoTW9k dWxlIG0pKQoreworI2lmZGVmIFVTRV9VUkFORE9NCisgICAgaWYgKHJhbmRmZCA+PSAwKQor CXpjbG9zZShyYW5kZmQpOworI2VuZGlmIC8qIFVTRV9VUkFORE9NICovCisgICAgcmV0dXJu IDA7Cit9CisKKworLyogQ291bnQgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zLCBob3Bl ZnVsbHkgaW4gZ2NjL2NsYW5nIGJ5IEhXCisgKiBpbnN0cnVjdGlvbiAqLworI2lmIGRlZmlu ZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19jbGFuZ19fKQorI2RlZmluZSBjbHo2NCh4KSBf X2J1aWx0aW5fY2x6bGwoeCkKKyNlbHNlCisjZGVmaW5lIGNsejY0KHgpIF96Y2x6NjQoeCkK KworLyoqLworaW50CitfemNsejY0KHVpbnQ2NF90IHgpIHsKKyAgICBpbnQgbiA9IDA7CisK KyAgICBpZiAoeCA9PSAwKQorCXJldHVybiA2NDsKKworICAgIGlmICghKHggJiAweEZGRkZG RkZGMDAwMDAwMDApKSB7CisJbis9MzI7CisJeDw8PTMyOworICAgIH0KKyAgICBpZiAoISh4 ICYgMHhGRkZGMDAwMDAwMDAwMDAwKSkgeworCW4rPTE2OworCXg8PD0xNjsKKyAgICB9Cisg ICAgaWYgKCEoeCAmIDB4RkYwMDAwMDAwMDAwMDAwMCkpIHsKKwluKz04OworCXg8PD04Owor ICAgIH0KKyAgICBpZiAoISh4ICYgMHhGMDAwMDAwMDAwMDAwMDAwKSkgeworCW4rPTQ7CisJ eDw8PTQ7CisgICAgfQorICAgIGlmICghKHggJiAweEMwMDAwMDAwMDAwMDAwMDApKSB7CisJ bis9MjsKKwl4PDw9MTsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4ODAwMDAwMDAwMDAwMDAw MCkpIHsKKwluKz0xOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKyNlbmRpZiAvKiBfX0dO VV9DX18gb3IgX19jbGFuZ19fICovCisKKy8qKi8KK3VpbnQ2NF90CityYW5kb202NCh2b2lk KSB7CisgICAgdWludDY0X3QgcjsKKworICAgIGlmKGdldHJhbmRvbV9idWZmZXIoJnIsc2l6 ZW9mKHIpKSA8IDApIHsKKwl6d2FybigienNoL3JhbmRvbTogQ2FuJ3QgZ2V0IHN1ZmZpY2ll bnQgcmFuZG9tIGRhdGEuIik7CisJcmV0dXJuIDE7IC8qIDAgd2lsbCBjYXVzZSBsb29wICov CisgICAgfQorCisgICAgcmV0dXJuIHI7Cit9CisKKy8qIEZvbGxvd2luZyBjb2RlIGlzIHVu ZGVyIHRoZSBiZWxvdyBjb3B5cmlnaHQsIGRlc3BpdGUgY2hhbmdlcyBmb3IgZXJyb3IKKyAq IGhhbmRsaW5nIGFuZCByZW1vdmluZyBHQ0Npc21zICovCisKKy8qLQorICogQ29weXJpZ2h0 IChjKSAyMDE0IFRheWxvciBSLiBDYW1wYmVsbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT VUNIIERBTUFHRS4KKyAqLworCisvKgorICogVW5pZm9ybSByYW5kb20gZmxvYXRzOiBIb3cg dG8gZ2VuZXJhdGUgYSBkb3VibGUtcHJlY2lzaW9uCisgKiBmbG9hdGluZy1wb2ludCBudW1i ZXJzIGluIFswLCAxXSB1bmlmb3JtbHkgYXQgcmFuZG9tIGdpdmVuIGEgdW5pZm9ybQorICog cmFuZG9tIHNvdXJjZSBvZiBiaXRzLgorICoKKyAqIFNlZSA8aHR0cDovL211bWJsZS5uZXQv fmNhbXBiZWxsLzIwMTQvMDQvMjgvdW5pZm9ybS1yYW5kb20tZmxvYXQ+CisgKiBmb3IgZXhw bGFuYXRpb24uCisgKgorICogVXBkYXRlZCAyMDE1LTAyLTIyIHRvIHJlcGxhY2UgbGRleHAo eCwgPGNvbnN0YW50PikgYnkgeCAqIGxkZXhwKDEsCisgKiA8Y29uc3RhbnQ+KSwgc2luY2Ug Z2xpYmMgYW5kIE5ldEJTRCBsaWJtIGJvdGggaGF2ZSBzbG93IHNvZnR3YXJlCisgKiBiaXQt dHdpZGRsaW5nIGltcGxlbWVudGF0aW9ucyBvZiBsZGV4cCwgYnV0IEdDQyBjYW4gY29uc3Rh bnQtZm9sZAorICogdGhlIGxhdHRlci4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lu Y2x1ZGUgPHN0ZGludC5oPgorCisvKgorICogcmFuZG9tX3JlYWw6IEdlbmVyYXRlIGEgc3Ry ZWFtIG9mIGJpdHMgdW5pZm9ybWx5IGF0IHJhbmRvbSBhbmQKKyAqIGludGVycHJldCBpdCBh cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBiaW5hcnkgZXhwYW5zaW9uIG9mIGEKKyAq IG51bWJlciBpbiBbMCwgMV0sIDAuMDAwMDEwMTAwMTExMTEwMTAxMDAuLi47IHRoZW4gcm91 bmQgaXQuCisgKi8KKworLyoqLworZG91YmxlCityYW5kb21fcmVhbCh2b2lkKQoreworCWlu dCBleHBvbmVudCA9IDA7CisJdWludDY0X3Qgc2lnbmlmaWNhbmQgPSAwOworCXVpbnQ2NF90 IHIgPSAwOworCXVuc2lnbmVkIHNoaWZ0OworCisJLyoKKwkgKiBSZWFkIHplcm9zIGludG8g dGhlIGV4cG9uZW50IHVudGlsIHdlIGhpdCBhIG9uZTsgdGhlIHJlc3QKKwkgKiB3aWxsIGdv IGludG8gdGhlIHNpZ25pZmljYW5kLgorCSAqLworCXdoaWxlIChzaWduaWZpY2FuZCA9PSAw KSB7CisJCWV4cG9uZW50IC09IDY0OworCisJCS8qIEdldCByYW5kb202NCBhbmQgY2hlY2sg Zm9yIGVycm9yICovCisJCWVycm5vID0gMDsKKwkJc2lnbmlmaWNhbmQgPSByYW5kb202NCgp OworCQlpZiAoZXJybm8pCisJCSAgICByZXR1cm4gLTE7CisJCS8qCisJCSAqIElmIHRoZSBl eHBvbmVudCBmYWxscyBiZWxvdyAtMTA3NCA9IGVtaW4gKyAxIC0gcCwKKwkJICogdGhlIGV4 cG9uZW50IG9mIHRoZSBzbWFsbGVzdCBzdWJub3JtYWwsIHdlIGFyZQorCQkgKiBndWFyYW50 ZWVkIHRoZSByZXN1bHQgd2lsbCBiZSByb3VuZGVkIHRvIHplcm8uICBUaGlzCisJCSAqIGNh c2UgaXMgc28gdW5saWtlbHkgaXQgd2lsbCBoYXBwZW4gaW4gcmVhbGlzdGljCisJCSAqIHRl cm1zIG9ubHkgaWYgcmFuZG9tNjQgaXMgYnJva2VuLgorCQkgKi8KKwkJaWYgKGV4cG9uZW50 IDwgLTEwNzQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgMSBz b21ld2hlcmUgaW4gc2lnbmlmaWNhbmQsIG5vdCBuZWNlc3NhcmlseSBpbgorCSAqIHRoZSBt b3N0IHNpZ25pZmljYW50IHBvc2l0aW9uLiAgSWYgdGhlcmUgYXJlIGxlYWRpbmcgemVyb3Ms CisJICogc2hpZnQgdGhlbSBpbnRvIHRoZSBleHBvbmVudCBhbmQgcmVmaWxsIHRoZSBsZXNz LXNpZ25pZmljYW50CisJICogYml0cyBvZiB0aGUgc2lnbmlmaWNhbmQuICBDYW4ndCBwcmVk aWN0IG9uZSB3YXkgb3IgYW5vdGhlcgorCSAqIHdoZXRoZXIgdGhlcmUgYXJlIGxlYWRpbmcg emVyb3M6IHRoZXJlJ3MgYSBmaWZ0eS1maWZ0eQorCSAqIGNoYW5jZSwgaWYgcmFuZG9tNjQg aXMgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkLgorCSAqLworCXNoaWZ0ID0gY2x6NjQoc2lnbmlm aWNhbmQpOworCWlmIChzaGlmdCAhPSAwKSB7CisKKwkJZXJybm8gPSAwOworCQlyID0gcmFu ZG9tNjQoKTsKKwkJaWYgKGVycm5vKQorCQkgICAgcmV0dXJuIC0xOworCisJCWV4cG9uZW50 IC09IHNoaWZ0OworCQlzaWduaWZpY2FuZCA8PD0gc2hpZnQ7CisJCXNpZ25pZmljYW5kIHw9 IChyID4+ICg2NCAtIHNoaWZ0KSk7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIHN0aWNreSBi aXQsIHNpbmNlIHRoZXJlIGlzIGFsbW9zdCBzdXJlbHkgYW5vdGhlciAxCisJICogaW4gdGhl IGJpdCBzdHJlYW0uICBPdGhlcndpc2UsIHdlIG1pZ2h0IHJvdW5kIHdoYXQgbG9va3MKKwkg KiBsaWtlIGEgdGllIHRvIGV2ZW4gd2hlbiwgYWxtb3N0IHN1cmVseSwgd2VyZSB3ZSB0byBs b29rCisJICogZnVydGhlciBpbiB0aGUgYml0IHN0cmVhbSwgdGhlcmUgd291bGQgYmUgYSAx IGJyZWFraW5nIHRoZQorCSAqIHRpZS4KKwkgKi8KKwlzaWduaWZpY2FuZCB8PSAxOworCisJ LyoKKwkgKiBGaW5hbGx5LCBjb252ZXJ0IHRvIGRvdWJsZSAocm91bmRpbmcpIGFuZCBzY2Fs ZSBieQorCSAqIDJeZXhwb25lbnQuCisJICovCisJcmV0dXJuIGxkZXhwKChkb3VibGUpc2ln bmlmaWNhbmQsIGV4cG9uZW50KTsKK30KZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL3JhbmRv bS5tZGQgYi9TcmMvTW9kdWxlcy9yYW5kb20ubWRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uMzgwM2E0NTMzCi0tLSAvZGV2L251bGwKKysrIGIvU3JjL01vZHVs ZXMvcmFuZG9tLm1kZApAQCAtMCwwICsxLDcgQEAKK25hbWU9enNoL3JhbmRvbQorbGluaz1l aXRoZXIKK2xvYWQ9eWVzCisKK2F1dG9mZWF0dXJlcz0iYjpnZXRyYW5kb20gcDpTUkFORE9N IGY6enJhbmRvbSIKKworb2JqZWN0cz0icmFuZG9tLm8iCmRpZmYgLS1naXQgYS9UZXN0L1Yx NXJhbmRvbS56dHN0IGIvVGVzdC9WMTVyYW5kb20uenRzdApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAuLjNmZjM0N2RiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rlc3Qv VjE1cmFuZG9tLnp0c3QKQEAgLTAsMCArMSw1MSBAQAorIyBUZXN0cyBmb3IgdGhlIHpzaC9y YW5kb20gbW9kdWxlCisldGVzdAorICBnZXRyYW5kb20gLVUgNTYKKzFmOkNoZWNraW5nIGlm IHN5c3RlbSBoYXMgYSBrZXJuZWwgcmFuZG9tIHNvdXJjZQorPyhldmFsKToxOiBObyBrZXJu ZWwgcmFuZG9tIHBvb2wgZm91bmQuCisKKyAgZ2V0cmFuZG9tIC1VIDY0CiswOkNoZWNraW5n IHVwcGVyIEJvdW5kIGlzIG9ic2VydmVkCisqPjwwLTY0PiAKKworICB0bXBtc2c9ImZhaWxl ZCIKKyAgZ2V0cmFuZG9tIC1MIDQgLVUgNSAtYyAxNiAtYSB0bXBhCisgIGZvciBpIGluICR7 dG1wYVtAXX0KKyAgZG8KKyAgICBpZiAoKCBpID09IDUgKSk7IHRoZW4KKyAgICAgIHRtcG1z Zz0ic3VjY2VzcyIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBlY2hvICR0bXBt c2cKKzA6Q2hlY2tpbmcgdGhhdCB1cHBlciBib3VuZCBpcyBpbmNsdXNpdmUKK0Y6VHJ5IHJ1 bm5pbmcgdGhlIHRlc3QgYWdhaW46IG1ha2UgVEVTVE5VTT1WMTUgY2hlY2sKKz5zdWNjZXNz CisKKyAgZ2V0cmFuZG9tIC1MIC0xMCAtVSA1CisxOkNoZWNraW5nIGVycm9yIG1lc3NhZ2Ug aWYgLUwgZ2l2ZW4gYSBuZWdhdGl2ZSBudW1iZXIKKz8oZXZhbCk6Z2V0cmFuZG9tOjE6IENv dWxkbid0IGNvbnZlcnQgLUwgLTEwIHRvIGEgcG9zaXRpdmUgbnVtYmVyLgorCisgIGdldHJh bmRvbSAtTCA1IC1VICQoKCAyKiozMiApKQorMTpDaGVja2luZyBlcnJvciBtZXNzYWdlIGlm IC1VIGlzIG91dCBvZiByYW5nZQorPyhldmFsKTpnZXRyYW5kb206MTogVXBwZXIgYm91bmQg bXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQyOTQ5NjcyOTUgeW91IHNwZWNpZmllZDogNDI5NDk2 NzI5Ni4KKworICBnZXRyYW5kb20gLWMgNjUKKzE6Q2hlY2tpbmcgZXJyb3Igd2hlbiBjb3Vu dCBpcyBvdXQgb2YgcmFuZ2UKKz8oZXZhbCk6Z2V0cmFuZG9tOjE6IENvdW50IG11c3QgYmUg YmV0d2VlbiAxIGFuZCA2NC4gIFlvdSBzcGVjaWZpZWQ6IDY1LgorCisgIGdldHJhbmRvbQor MDpDaGVja2luZyBpZiBkZWZhdWx0IG9wdGlvbnMgZ2l2ZSBhIHN0cmluZyBvZiAxNiBoZXgg ZGlnaXRzCisqPlswLTlBLUZdWzAtOUEtRl1bMC05QS1GXVswLTlBLUZdWzAtOUEtRl1bMC05 QS1GXVswLTlBLUZdWzAtOUEtRl1bMC05QS1GXVswLTlBLUZdWzAtOUEtRl1bMC05QS1GXVsw LTlBLUZdWzAtOUEtRl1bMC05QS1GXVswLTlBLUZdCisKKyAgZ2V0cmFuZG9tIC1pCiswOkNo ZWNraW5nIGlmIGdldHJhbmRvbSAtaSBwcm9kdWNlcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50 ZWdlcgorKj48MC00Mjk0OTY3Mjk1PiAKKworICBlY2hvICRTUkFORE9NCiswOkNoZWNraW5n IGlmIFNSQU5ET00gcHJvZHVjZXMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIKKyo+PDAt NDI5NDk2NzI5NT4KKworICBlY2hvICQoKCB6cmFuZG9tKCkgKSkKKzA6Q2hlY2tpbmcgaWYg enJhbmRvbSgpIHByb2R1Y2VzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBh bmQgMQorKj4wKHwuKVtbOmRpZ2l0Ol1dIwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIv Y29uZmlndXJlLmFjCmluZGV4IDA3NDE0MWQzOC4uZjFmYTAxMjc0IDEwMDY0NAotLS0gYS9j b25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC02NzUsNiArNjc1LDcgQEAgZmkK IEFDX0NIRUNLX0hFQURFUlMoc3lzL3RpbWUuaCBzeXMvdGltZXMuaCBzeXMvc2VsZWN0Lmgg dGVybWNhcC5oIHRlcm1pby5oIFwKIAkJIHRlcm1pb3MuaCBzeXMvcGFyYW0uaCBzeXMvZmls aW8uaCBzdHJpbmcuaCBtZW1vcnkuaCBcCiAJCSBsaW1pdHMuaCBmY250bC5oIGxpYmMuaCBz eXMvdXRzbmFtZS5oIHN5cy9yZXNvdXJjZS5oIFwKKyAgICAgICAgICAgICAgICAgc3lzL3Jh bmRvbS5oIFwKIAkJIGxvY2FsZS5oIGVycm5vLmggc3RkaW8uaCBzdGRhcmcuaCB2YXJhcmdz Lmggc3RkbGliLmggXAogCQkgdW5pc3RkLmggc3lzL2NhcGFiaWxpdHkuaCBcCiAJCSB1dG1w LmggdXRtcHguaCBzeXMvdHlwZXMuaCBwd2QuaCBncnAuaCBwb2xsLmggc3lzL21tYW4uaCBc CkBAIC0xMzM3LDYgKzEzMzgsNyBAQCBBQ19DSEVDS19GVU5DUyhzdHJmdGltZSBzdHJwdGlt ZSBta3RpbWUgdGltZWxvY2FsIFwKIAkgICAgICAgY3lnd2luX2NvbnZfcGF0aCBcCiAJICAg ICAgIG5hbm9zbGVlcCBcCiAJICAgICAgIHNyYW5kX2RldGVybWluaXN0aWMgXAorICAgICAg ICAgICAgICAgZ2V0cmFuZG9tIGFyYzRyYW5kb20gXAogCSAgICAgICBzZXR1dHhlbnQgZ2V0 dXR4ZW50IGVuZHV0eGVudCBnZXR1dGVudCkKIEFDX0ZVTkNfU1RSQ09MTAogCg== --------------BhXt5Ojyysa30XLpmXB0UXax--