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.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,T_PDS_PRO_TLD autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 9298 invoked from network); 27 Feb 2023 04:33:54 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 27 Feb 2023 04:33:54 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1677472434; b=OsCBVQ6d3wJ2VHiINMe5S7HNjDqLyAk13lBjXOsoqk5LutZQEHr/zEC8c14m4DrZPopLyfevoo VxRTrTgvIrFlZUrCnFfFoX3IIq65kKLZUxMqWE3a7pYnUn9m6Pg3w+6LHk/4efiZ1rWJ1dQ9js 6QiN82u8OdUHk/5004w8GwT1Owf6B7IOHkbMc7k6mviLOCn2PVe0r7Pb/Rekiii9fSw+bUn4NK deiKVUqYXGdgRVi1HvyVxF5U1/0X9o565t6mSuoPHUGhpqA9ULqeW5cn3FRLyjqGdYp3THYk1C yCN+wQrrjcAOhmt6E8guz4DdImV+slcDRxmhNJzh/9qy2Q==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ed1-f44.google.com) smtp.remote-ip=209.85.208.44; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1677472434; bh=QJNsbMdjIU9lnYmRtHH7wYPReIKZusjQokb51OGv+LA=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=U+MyLcglQhXpw+amrsaOToq9NIAyCB/PqAuw/fO0F7tdhCwDODPozpScu4jmXdva4+QZR/Jn2D PQovu/HvTwZ2PCr37/ieue35kPCXVZFAgKHjqm6I8VnoK4RJk0Bgio8i0CIKjFQbIbzkewpVew qInQ3NFcWPh77SSn15fP6CuYSTrVtzT3afRpPNfaZpOtis2C30LXSUlNMAEfDCg84dE7VKQBrC nu2dhkSj8ran+PmR24N5EWolxK9mB/94RoeqOnU20GRCC+tiQcvKNy40DuHor0UuY1HrSeAHFg 5QvzkvejrnuX9rE+zA97dErFW6b5OR/yNMCyVkgLu+yDyQ==; 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:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=J4jVUxRu2Jc29GeCB3axv1PgSNOuTrl7xEqXNd1cD+w=; b=Kf5HGFzdmq/zwaTC1IIKiSnxL4 0uN1Nqca2prEnkjwjb/q66txVJW3dYkI+tEWsk5g72Ov8bz3iBFu4KIX822WmW+cS16iLRbygICwh jY+RlYpKfrBoqgJBM0HrEFDLwgRXM06faCFjpRhhE+LmjxfMmay5PrAf0EIwoZBNTF/bb7kT5avb1 lPcwfSSi3gK/26kIf/joJGZmNO+GHehLYbr4Va7PiAA6QP4l8RDmd5G3+lhWPnSADLnJfCEtVgimh 83Alo+KnLQ4LfYDy/IOMvKLjA8rKUP0m+aayh3YI0Zjcgs2TzihtyNogwykQdvdQ99YhsWMbJV58+ a9irZRLA==; Received: by zero.zsh.org with local id 1pWVCz-00082K-EX; Mon, 27 Feb 2023 04:33:53 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ed1-f44.google.com) smtp.remote-ip=209.85.208.44; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ed1-f44.google.com ([209.85.208.44]:45889) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1pWVCi-0007jB-Af; Mon, 27 Feb 2023 04:33:38 +0000 Received: by mail-ed1-f44.google.com with SMTP id eg37so20417636edb.12 for ; Sun, 26 Feb 2023 20:33:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20210112.gappssmtp.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=J4jVUxRu2Jc29GeCB3axv1PgSNOuTrl7xEqXNd1cD+w=; b=bN6Z97A4hqU2hgzlXid2ZuDcYxPuM5OQKG2/96aBq35jv0Z8Lhd+Fw/Rd2lRSLjm2F lIMNbxR4kFl/uOMCIzmxRG1b0B4WlgOd79CEE7rAWTwZEYNOLKwhrJuBM+LGh30g0Gti tS/b3Ivh40+dZ9gL3KgxdmDEcM+R2GfAFKqyEKUKCFDimDJ9lfOwKQFGiR923CNWwmYq V2PfyhSc/XmN5sn3tkb1DuHEnuxoXVCuidIlVwQq1TVNNa2pTdGXGBd6i9beN0/y4SS+ ktpZjsUbFVNaw9boFTn0nW4UyPAYNRrch6iALZEiRsgzapYP6OPFIfJCmO/jMXFmwn3w OQ9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=J4jVUxRu2Jc29GeCB3axv1PgSNOuTrl7xEqXNd1cD+w=; b=i34XCIuS/RUFucK0+SWfmdX2zxlMtCj8xlXCI431yvsdv4FrlekrpePPqubociHjRU OZ1eSbBdBrnDPOJd1vcXe/lxXbPEFBia9UGAPEg7/4lqGKy0kzSPC8UMYbp8l91NvX2S WnwBwGJoScVP2mpk2GPAfjvLKxz+7DmgqP+Gc8jpOOX3aRexRBTNAE3ooG4xsfuu7jnd 1DdM9YuMFpO7MxuNqG34AReCIdzmvgP5NB/kguIeMrJ2ijyWUsKJuhjX5FOkCtVMKUub tZI/Q2uebtCVjevTLHwYha34NZX01NObaH0FxqqaZIqkp9V8dTDg4yRPfTe6LWvg75Wi 6iOw== X-Gm-Message-State: AO0yUKXHLdLjUEiSHMOSY10HTOBM6krqxgQxMdWR/ujnVHMusqAqCztI 8G545Blf9pTC25Sdl9jltOnSkB1++R7KXRq+L5lUsXcQtyP4JeGb X-Google-Smtp-Source: AK7set+WBcKTTJ/gE7TKsW+B2Nt1+vLoVOlhA6U+We0NNVjRqOARcKBj/e3jbzNFZoZW7FoSM3MLy4SXhJ7Ok0t4+r4= X-Received: by 2002:a17:907:2b09:b0:8b1:cd2e:177a with SMTP id gc9-20020a1709072b0900b008b1cd2e177amr15409116ejc.6.1677472415910; Sun, 26 Feb 2023 20:33:35 -0800 (PST) MIME-Version: 1.0 From: Bart Schaefer Date: Sun, 26 Feb 2023 20:33:24 -0800 Message-ID: Subject: [PATCH 3/3] The zsh/ksh93 module To: Zsh hackers list Content-Type: multipart/mixed; boundary="00000000000078ce7605f5a6fb0c" X-Seq: 51485 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: --00000000000078ce7605f5a6fb0c Content-Type: text/plain; charset="UTF-8" This module adds the "nameref" builtin command and implements most of the predefined parameters in the "sh" namespace, for example ${.sh.lineno} and ${.sh.version}. The previous patch to implement PM_SPECIAL named references is required. Where possible, these parameters are named references to the corresponding zsh parameters, so ${.sh.version} is another name for ${ZSH_PATCHLEVEL}, etc. Many of the remaining parameters are enabled only in ksh emulation (as described in the documentation for the module), to avoid function wrapper overhead in native mode. I've included a documentation section describing some related features that are NOT implemented, such as parameter discipline functions. The ${.sh.name} and ${.sh.value} parameters are instead supplied for use in user-defined widgets when "vared" is invoked. There's a small change to utils.c to explicitly allow namespace parameter syntax in ksh emulation mode. We should perhaps reconsider whether POSIX_IDENTIFIERS is really appropriate to be on by default in ksh mode. --00000000000078ce7605f5a6fb0c Content-Type: text/plain; charset="US-ASCII"; name="ksh93-module.txt" Content-Disposition: attachment; filename="ksh93-module.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lemavzlq0 ZGlmZiAtLWdpdCBhL0RvYy9NYWtlZmlsZS5pbiBiL0RvYy9NYWtlZmlsZS5pbgppbmRleCAyM2U1 ZmM3ZTIuLjEzNmIwODBkNiAxMDA2NDQKLS0tIGEvRG9jL01ha2VmaWxlLmluCisrKyBiL0RvYy9N YWtlZmlsZS5pbgpAQCAtNjMsNyArNjMsNyBAQCBac2gvbW9kX2NvbXBjdGwueW8gWnNoL21vZF9j b21wbGV0ZS55byBac2gvbW9kX2NvbXBsaXN0LnlvIFwKIFpzaC9tb2RfY29tcHV0aWwueW8gWnNo L21vZF9jdXJzZXMueW8gXAogWnNoL21vZF9kYXRldGltZS55byBac2gvbW9kX2RiX2dkYm0ueW8g WnNoL21vZF9kZWx0b2NoYXIueW8gXAogWnNoL21vZF9leGFtcGxlLnlvIFpzaC9tb2RfZmlsZXMu eW8gWnNoL21vZF9sYW5naW5mby55byBcCi1ac2gvbW9kX21hcGZpbGUueW8gWnNoL21vZF9tYXRo ZnVuYy55byBcCitac2gvbW9kX2tzaDkzLnlvIFpzaC9tb2RfbWFwZmlsZS55byBac2gvbW9kX21h dGhmdW5jLnlvIFwKIFpzaC9tb2RfbmVhcmNvbG9yLnlvIFpzaC9tb2RfbmV3dXNlci55byBcCiBa c2gvbW9kX3BhcmFtZXRlci55byBac2gvbW9kX3BjcmUueW8gWnNoL21vZF9wcml2YXRlLnlvIFwK IFpzaC9tb2RfcmVnZXgueW8gWnNoL21vZF9zY2hlZC55byBac2gvbW9kX3NvY2tldC55byBcCmRp ZmYgLS1naXQgYS9Eb2MvWnNoL21vZF9rc2g5My55byBiL0RvYy9ac2gvbW9kX2tzaDkzLnlvCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uM2FlNjQ0YmQxCi0tLSAvZGV2L251 bGwKKysrIGIvRG9jL1pzaC9tb2Rfa3NoOTMueW8KQEAgLTAsMCArMSwyMTEgQEAKK0NPTU1FTlQo IU1PRCF6c2gva3NoOTMKK0V4dGVuZGVkIGtzaDkzIGNvbXBhdGliaWxpdHkgZm9yICJlbXVsYXRl IGtzaCIKKyFNT0QhKQorY2luZGV4KGtzaDkzKQorVGhlIHR0KHpzaC9rc2g5MykgbW9kdWxlIHBy b3ZpZGVzIG9uZSBidWlsdGluIGFuZCBzZXZlcmFsIHBhcmFtZXRlcnMgdG8KK2ltcHJvdmUgY29t cGF0aWJpbGl0eSB3aXRoIGtzaDkzLiAgQXMgb2YgdGhpcyB3cml0aW5nLCBzZXZlcmFsIGtzaDkz CitmZWF0dXJlcyBhcmUgc3RpbGwgbWlzc2luZy4KKworc3Vic2VjdChLc2ggQnVpbHRpbnMpCitU aGUgc2luZ2xlIGJ1aWx0aW4gcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgaXM6CisKK3N0YXJ0aXRl bSgpCitmaW5kZXgobmFtZXJlZikKK2NpbmRleChuYW1lZCByZWZlcmVuY2VzLCBjcmVhdGluZykK K2l0ZW0odHQobmFtZXJlZikgWyB0dCgtcikgXSB2YXIocG5hbWUpW3R0KD0pdmFyKHJuYW1lKV0p KAorRXF1aXZhbGVudCB0byB0dCh0eXBlc2V0IC1uICl2YXIocG5hbWUpdHQoPSl2YXIocm5hbWUp CisKK0hvd2V2ZXIsIHR0KG5hbWVyZWYpIGlzIGEgYnVpbHRpbiBjb21tYW5kIHJhdGhlciB0aGFu IGEgcmVzZXJ2ZWQgd29yZCwKK3NvIHdoZW4gdmFyKHJuYW1lKSB1c2VzIHN1YnNjcmlwdCBzeW50 YXggaXQgbXVzdCBiZSBxdW90ZWQgYWdhaW5zdAorZ2xvYmJpbmcuICBTdWJzY3JpcHRzIGluIHJl ZmVyZW5jZWQgcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBpbgora3NoOTMsIHNvIHRoaXMg aXMgbm90IGEgc2lnbmlmaWNhbnQgY29tcGF0aWJpbGl0eSBpc3N1ZS4KKykKK2VuZGl0ZW0oKQor CitzdWJzZWN0KEtzaCBQYXJhbWV0ZXJzKQorY2luZGV4KHBhcmFtZXRlcnMsIGtzaCkKK1BhcmFt ZXRlcnMgc3VwcGxpZWQgYnkgdGhpcyBtb2R1bGUgdGhhdCBhcmUgbWFya2VkIHdpdGggYDxLPicg YmVsb3cgYXJlCithdmFpbGFibGUgb25seSBpbiBrc2ggZW11bGF0aW9uLgorCitzdGFydGl0ZW0o KQordmluZGV4KC5zaC5jb21tYW5kKQoraXRlbSh0dCguc2guY29tbWFuZCkpKAorQSBuYW1lZCBy ZWZlcmVuY2UgdG8gYHR0KFpTSF9ERUJVR19DTUQpJworKQordmluZGV4KC5zaC5lZGNoYXIpCitp dGVtKHR0KC5zaC5lZGNoYXIpIDxLPikoCitJbiBhIFpMRSB3aWRnZXQsIGVxdWl2YWxlbnQgdG8g dGhlIGB0dChLRVlTKScgc3BlY2lhbCBwYXJhbWV0ZXIuICBJbiBhCitmdXR1cmUgcmVsZWFzZSwg YXNzaWdubWVudHMgdG8gdGhpcyBwYXJhbWV0ZXIgd2lsbCBhZmZlY3QgdGhlIGlucHV0CitzdHJl YW0gc2VlbiBieSBaTEUuCispCit2aW5kZXgoLnNoLmVkY29sKQoraXRlbSh0dCguc2guZWRjb2wp KSgKK0EgbmFtZWQgcmVmZXJlbmNlIHRvIHRoZSBaTEUgc3BlY2lhbCBwYXJhbWV0ZXIgYHR0KENV UlNPUiknLgorKQordmluZGV4KC5zaC5lZG1vZGUpCitpdGVtKHR0KC5zaC5lZG1vZGUpIDxLPiko CitJbiBhIFpMRSB3aWRnZXQsIHRoaXMgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgdHQoRVNDKSAo dHQoJCdcZScpKSBpZiB0aGUKK2B0dChtYWluKScga2V5bWFwIGlzIHNlbGVjdGVkLCBhbmQgdGhl IGVtcHR5IHN0cmluZyBvdGhlcndpc2UuICBUaGlzIGlzCitpbnRlbmRlZCBmb3IgdXNlIHdpdGgg dmktbW9kZSBrZXkgYmluZGluZ3MgKGB0dChiaW5ka2V5IC12KScpLiAgSW4gYQorZnV0dXJlIHJl dmlzaW9uLCBhc3NpZ25pbmcgYHR0KC5zaC5lZGNoYXI9JHsuc2guZWRtb2RlfSknIGlzIGV4cGVj dGVkCit0byBpbml0aWF0ZSBgdHQodmljbWQpJyBtb2RlIHdoZW4gYHR0KHZpaW5zKScgaXMgYWN0 aXZlLCBhbmQgZG8KK25vdGhpbmcgd2hlbiBgdHQodmljbWQpJyBpcyBhbHJlYWR5IGFjdGl2ZS4K KykKK3ZpbmRleCguc2guZWR0ZXh0KQoraXRlbSh0dCguc2guZWR0ZXh0KSkoCitBIG5hbWVkIHJl ZmVyZW5jZSB0byB0aGUgYHR0KEJVRkZFUiknIHNwZWNpYWwgWkxFIHBhcmFtZXRlci4KKykKK3Zp bmRleCguc2guZmlsZSkKK2l0ZW0odHQoLnNoLmZpbGUpKSgKK0EgbmFtZWQgcmVmZXJlbmNlIHRv IHRoZSBgdHQoWlNIX1NDUklQVCknIHBhcmFtZXRlci4KKykKK3ZpbmRleCguc2guZnVuKQoraXRl bSh0dCguc2guZnVuKSA8Sz4pKAorSW4gYSBzaGVsbCBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uJ3Mg bmFtZS4gIFVzdWFsbHkgdGhlIHNhbWUgYXMgYHR0KCQwKScsCitidXQgbm90IGFmZmVjdGVkIGJ5 IHR0KFBPU0lYX0FSR1pFUk8pIG9yIHR0KEZVTkNUSU9OX0FSR1pFUk8pIG9wdGlvbnMuCispCit2 aW5kZXgoLnNoLmxldmVsKQoraXRlbSh0dCguc2gubGV2ZWwpIDxLPikoCitJbiBhIHNoZWxsIGZ1 bmN0aW9uLCBpbml0aWFsbHkgc2V0IHRvIHRoZSBkZXB0aCBvZiB0aGUgY2FsbCBzdGFjay4gVGhp cworbWF5IGJlIGFzc2lnbmVkIHRvIGNoYW5nZSB0aGUgYXBwYXJlbnQgZGVwdGguICBIb3dldmVy LCBzdWNoIGFzc2lnbm1lbnQKK2RvZXMgbm90IGFmZmVjdCB0aGUgc2NvcGUgb2YgbG9jYWwgcGFy YW1ldGVycy4KKykKK3ZpbmRleCguc2gubGluZW5vKQoraXRlbSh0dCguc2gubGluZW5vKSkoCitB IG5hbWVkIHJlZmVyZW5jZSB0byB0aGUgYHR0KExJTkVOTyknIHNwZWNpYWwgcGFyYW1ldGVyLgor KQordmluZGV4KC5zaC5tYXRjaCkKK2l0ZW0odHQoLnNoLm1hdGNoKSkoCitBbiBhcnJheSBlcXVp dmFsZW50IHRvIHRoZSBgdHQobWF0Y2gpJyBwYXJhbWV0ZXIgYXMgYXNzaWduZWQgYnkgdGhlCitg dHQoTFBBUigpI2IpdHQoUlBBUigpKScgZXh0ZW5kZWQgZ2xvYmJpbmcgZmxhZy4gIFdoZW4gdGhl Cit0dChLU0hfQVJSQVlTKSBvcHRpb24gaXMgc2V0LCBgdHQoJHsuc2gubWF0Y2hbMF19KScgZ2l2 ZXMgdGhlIHZhbHVlIG9mCit0aGUgYHR0KE1BVENIKScgcGFyYW1ldGVyIGFzIHNldCBieSB0aGUg YHR0KExQQVIoKSNtKXR0KFJQQVIoKSknIGV4dGVuZGVkCitnbG9iYmluZyBmbGFnLiAgQ3VycmVu dGx5LCB0aGUgdHQoRVhURU5ERURfR0xPQikgb3B0aW9uIG11c3QgYmUgZW5hYmxlZAorYW5kIHRo b3NlIGZsYWdzIG11c3QgYmUgZXhwbGljaXRseSB1c2VkIGluIGEgcGF0dGVybiBpbiBvcmRlciBm b3IgdGhlc2UKK3ZhbHVlcyBvZiBgdHQoLnNoLm1hdGNoKScgdG8gYmUgc2V0LgorKQordmluZGV4 KC5zaC5uYW1lKQoraXRlbSh0dCguc2gubmFtZSkgPEs+KSgKK1doZW4gdGhlIGB0dCh2YXJlZCkn IGNvbW1hbmQgaXMgdXNlZCwgdGhpcyBwYXJhbWV0ZXIgbWF5IGJlIHVzZWQgaW4KK3VzZXItZGVm aW5lZCBaTEUgd2lkZ2V0cyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGJlaW5nIGVk aXRlZC4KK0EgZnV0dXJlIHJlbGVhc2UgaXMgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgcGFyYW1ldGVy IGluIHRoZSBpbXBsZW1lbnRhdGlvbgorb2YgImRpc2NpcGxpbmUgZnVuY3Rpb25zIi4KKykKK3Zp bmRleCguc2guc3Vic2NyaXB0KQoraXRlbSh0dCguc2guc3Vic2NyaXB0KSA8Sz4pKAorV2hlbiBg dHQodmFyZWQpJyBoYXMgYmVlbiB1c2VkIG9uIGFuIGFycmF5IGVsZW1lbnQsIHRoaXMgcGFyYW1l dGVyIGhvbGRzCit0aGUgYXJyYXkgaW5kZXggKGVpdGhlciBhIG51bWJlciwgb3IgYW4gYXNzb2Np YXRpdmUgYXJyYXkga2V5KS4KKykKK3ZpbmRleCguc2guc3Vic2hlbGwpCitpdGVtKHR0KC5zaC5z dWJzaGVsbCkpKAorQSBuYW1lZCByZWZlcmVuY2UgdG8gdGhlIGB0dChaU0hfU1VCU0hFTEwpJyBw YXJhbWV0ZXIuCispCit2aW5kZXgoLnNoLnZhbHVlKQoraXRlbSh0dCguc2gudmFsdWUpIDxLPiko CitJbiBgdHQodmFyZWQpJyB0aGlzIGlzIGEgbmFtZWQgcmVmZXJlbmNlIHRvIHRoZSBaTEUgc3Bl Y2lhbCBgdHQoQlVGRkVSKScuCitBIGZ1dHVyZSByZWxlYXNlIGlzIGV4cGVjdGVkIHRvIHVzZSB0 aGlzIHBhcmFtZXRlciBpbiB0aGUgaW1wbGVtZW50YXRpb24KK29mICJkaXNjaXBsaW5lIGZ1bmN0 aW9ucyIuCispCit2aW5kZXgoLnNoLnZlcnNpb24pCitpdGVtKHR0KC5zaC52ZXJzaW9uKSkoCitB IG5hbWVkIHJlZmVyZW5jZSB0byBgdHQoWlNIX1BBVENITEVWRUwpJy4KKykKK2VuZGl0ZW0oKQor CitzdWJzZWN0KEZ1dHVyZSBDb21wYXRpYmlsaXR5KQorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVz IG9mIGtzaDkzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBidXQgbWF5IGJlCithdmFpbGFi bGUgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKworc3RhcnRpdGVtKCkKK2l0ZW0odmFyKHBhdGhkaXIp dHQoLy5wYXRocykpKAorRWFjaCBkaXJlY3RvcnkgdmFyKHBhdGhkaXIpIGluIHRoZSB0dChQQVRI KSBwYXJhbWV0ZXIgbWF5IGNvbnRhaW4gYQordGV4dCBmaWxlIGB0dCgucGF0aHMpJyB3aGljaCBt YXkgZGVmaW5lIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgdG8KK2JlIHNlYXJjaGVkIGZvciBmdW5j dGlvbiBkZWZpbml0aW9ucyAodHQoRlBBVEgpKSwgZXh0ZXJuYWwgZXhlY3V0YWJsZXMKKyh0dChQ QVRIKSksIGFuZCBwbHVnaW4gZmlsZXMgKHNpbWlsYXIgdG8gdHQoTU9EVUxFX1BBVEgpKS4KKwor ZW0oVEhJUyBGRUFUVVJFIElTIFVOTElLRUxZIEVWRVIgVE8gQkUgSU1QTEVNRU5URUQuKQorKQor aXRlbSh0dChidWlsdGluIC1mICl2YXIoZmlsZSkpKAorSW5zdGFsbHMgYSBuZXcgc2hlbGwgYnVp bHRpbiBjb21tYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBmcm9tIHZhcihmaWxlKSwKK3doZXJlIHZh cihmaWxlKSBpcyBmb3VuZCBieSBhIHBhdGggc2VhcmNoIGFuZCB0aGUgYmFzZSBuYW1lIG9mIHRo ZSBmaWxlCitpcyB0aGUgbmFtZSBvZiB0aGUgYnVpbHRpbiB0byBiZSBhZGRlZC4KKworU2ltaWxh ciB0byBgdHQoem1vZGxvYWQgLUYgenNoLyl2YXIoZmlsZSl0dCggK2I6KXZhcihmaWxlKScuCisK K2VtKFRISVMgRkVBVFVSRSBJUyBVTkxJS0VMWSBFVkVSIFRPIEJFIElNUExFTUVOVEVELikKKykK K2l0ZW0odHQobmFtZXNwYWNlICl2YXIoaWRlbnQpdHQoIHsgKXZhcihsaXN0KXR0KCB9KSkoCitU aGlzIHJlc2VydmVkIHdvcmQgZXhlY3V0ZXMgdGhlIGN1cnJlbnQgc2hlbGwgY29tcG91bmQgY29t bWFuZAordHQoeyApdmFyKGxpc3QpdHQoIH0pLCB3aXRoIHRoZSBzcGVjaWFsIGJlaGF2aW9yIHRo YXQgYWxsIGZ1bmN0aW9ucworYW5kIHBhcmFtZXRlcnMgYHZhcihuYW1lKScgZGVjbGFyZWQgd2l0 aGluIHZhcihsaXN0KSBhcmUgaW1wbGljaXRseQorcHJlZml4ZWQgdG8gYmVjb21lIGB0dCguKXZh cihpZGVudCl0dCguKXZhcihuYW1lKScsIGFuZCBzaW1pbGFybHkgYW55CityZWZlcmVuY2UgdG8g YSBmdW5jdGlvbiBvciBwYXJhbWV0ZXIgYHZhcihuYW1lKScgaXMgc2VhcmNoZWQgZm9yIGFzCitg dHQoLil2YXIoaWRlbnQpdHQoLil2YXIobmFtZSknIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYHZh cihuYW1lKScuCisKK2VtKFRISVMgRkVBVFVSRSBJUyBOT1QgWUVUIElNUExFTUVOVEVELikKKykK K2l0ZW0odHQoLnNoLm1hdGgpIDxLPikoCitUaGlzIHBhcmFtZXRlciBpcyBtb3JlIGFjY3VyYXRl bHkgY29uc2lkZXJlZCBhIG5hbWVzcGFjZS4gIEEgZnVuY3Rpb24KK2RlZmludGlvbiBvZiB0aGUg Zm9ybQoraWZ6bWFuKCkKK2luZGVudCh0dChmdW5jdGlvbiAuc2gubWF0aC4pdmFyKG5hbWUpdHQo ICl2YXIoaWRlbnQpdHQoIC4uLiB7ICl2YXIobGlzdCl0dCggfSkpCisKK2lzIGVxdWl2YWxlbnQg dG8gdGhlIG5hdGl2ZSB6c2ggZGVmaW5pdGlvbgoraWZ6bWFuKCkKK2V4YW1wbGUodHQoZnVuY3Rp b24gKXZhcihuYW1lKXR0KCB7KQordHQoICBsb2NhbCApdmFyKGlkZW50KXR0KD0kMSAuLi4pCit0 dCggICl2YXIobGlzdCkKK3R0KH0pCit0dChmdW5jdGlvbnMgLU0gKXZhcihuYW1lKXR0KCAxIDMp KQoraWZ6bWFuKCkKK1VwIHRvIDMgdmFyKGlkZW50KSBhcmd1bWVudHMsIGludGVycHJldGVkIGFz IGZsb2F0aW5nIHBvaW50IG51bWJlcnMsCittYXkgYmUgcHJvdmlkZWQgZm9yIGEgZnVuY3Rpb24g ZGVmaW5lZCB3aXRoIHR0KC5zaC5tYXRoKSBpbiB0aGlzIHdheS4KK1RoZSBuYW1lcyAoYnV0IG5v dCBkZWZpbml0aW9ucykgb2YgYWxsIHN1Y2ggZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUKK3ZpYSB0 dCgkey5zaC5tYXRoW0BdfSkuCisKK2VtKFRISVMgRkVBVFVSRSBJUyBOT1QgWUVUIElNUExFTUVO VEVELikKKykKK2l0ZW0odHQodmFyKG5hbWUpdHQoLmdldCkpKSgKK0Egc2hlbGwgZnVuY3Rpb24g aGF2aW5nIHRoaXMgbmFtZSwgaWYgZGVmaW5lZCwgaXMgaW52b2tlZCB3aGVuZXZlciB0aGUKK3Bh cmFtZXRlciB0dCgkeyl2YXIobmFtZSl0dCh9KSBpcyByZWZlcmVuY2VkLCBpbmNsdWRpbmcgYnkg Y29tbWFuZHMKK3N1Y2ggYXMgYHR0KHR5cGVzZXQgLXApJy4gIElmIHRoZSBzcGVjaWFsIHZhcmlh YmxlIGB0dCguc2gudmFsdWUpJyBpcworYXNzaWduZWQgYnkgdGhlIGZ1bmN0aW9uLCB0aGF0IHZh bHVlIGlzIHN1YnN0aXR1dGVkIGluc3RlYWQgb2YgdGhlCit0cnVlIHZhbHVlIG9mIHZhcihuYW1l KS4gIFRoaXMgZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB2YXIobmFtZSksCitidXQgdGhl cmUgaXMgbm8gd2F5IHRvIGFjY2VzcyB0aGUgYWN0dWFsIHZhbHVlIHdpdGhvdXQgZmlyc3QgcmVt b3ZpbmcKK3RoZSBmdW5jdGlvbi4KKworQWRkaXRpb25hbGx5LCBhbiBleHBsaWNpdCByZWZlcmVu Y2UgdG8gdHQoJHspdmFyKG5hbWUpdHQoLmdldH0pCitjYWxscyB0aGUgZnVuY3Rpb24gdmFyKG5h bWUpdHQoLmdldCkgZXZlbiBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIKK2B2YXIobmFtZSknIGFu ZCBzdWJzdGl0dXRlcyB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbi4KKworZW0o VEhJUyBGRUFUVVJFIElTIE5PVCBZRVQgSU1QTEVNRU5URUQuKQorKQoreGl0ZW0odHQodmFyKG5h bWUpdHQoLnNldCkpKQoraXRlbSh0dCh2YXIobmFtZSl0dCguYXBwZW5kKSkpKAorU2hlbGwgZnVu Y3Rpb25zIGhhdmluZyB0aGVzZSBuYW1lcyBhcmUgaW52b2tlZCB3aGVuIHRoZSBwYXJhbWV0ZXIK K3ZhcihuYW1lKSBpcyBhc3NpZ25lZCBvciAoZm9yIGFycmF5IHR5cGVzKSBoYXMgYSBuZXcgZmll bGQgYXBwZW5kZWQuCitUaGUgZnVuY3Rpb24gbWF5IGNoYW5nZSB0aGUgcmVzdWx0IG9mIHRoZSBv cGVyYXRpb24gYnkgYXNzaWduaW5nIHRvCit0aGUgYHR0KC5zaC52YWx1ZSknIHNwZWNpYWwgcGFy YW1ldGVyLCBvciBibG9jayB0aGUgY2hhbmdlIGJ5Cit1bnNldHRpbmcgYHR0KC5zaC52YWx1ZSkn LgorCitFeHBsaWNpdCByZWZlcmVuY2UgdG8gdHQoJHspdmFyKG5hbWUpdHQoLnNldH0pIG9yIHR0 KCR7KXZhcihuYW1lKXR0KC5hcHBlbmR9KQorc3Vic3RpdHV0ZXMgdGhlIHN0YW5kYXJkIG91dHB1 dCBvZiB0aGUgZnVuY3Rpb24uCisKK2VtKFRISVMgRkVBVFVSRSBJUyBOT1QgWUVUIElNUExFTUVO VEVELikKKykKK2l0ZW0odHQodmFyKG5hbWUpdHQoLnVuc2V0KSkpKAorV2hlbiBhIGZ1bmN0aW9u IG9mIHRoaXMgbmFtZSBpcyBkZWZpbmVkLCBpdCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlCitwYXJh bWV0ZXIgdmFyKG5hbWUpIHdvdWxkIGJlIHVuc2V0LiAgVGhlIGZ1bmN0aW9uIG11c3QgZXhwbGlj aXRseQorYHR0KHVuc2V0ICl2YXIobmFtZSknLCBvdGhlcndpc2UgdGhlIHZhcmlhYmxlIHJlbWFp bnMgc2V0LgorCitlbShUSElTIEZFQVRVUkUgSVMgTk9UIFlFVCBJTVBMRU1FTlRFRC4pCispCitp dGVtKHR0KCR7ICl2YXIobGlzdCl0dCg7fSkpKAorTm90ZSB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG9w ZW5pbmcgYnJhY2UgKHR0KHspKS4gVGhpcyBleGVjdXRlcyB2YXIobGlzdCkKK2luIHRoZSBjdXJy ZW50IHNoZWxsIGFuZCBzdWJzdGl0dXRlcyBpdHMgc3RhbmRhcmQgb3V0cHV0IGluIHRoZSBtYW5u ZXIKK29mIGB0dCgkTFBBUigpKXZhcihsaXN0KXR0KFJQQVIoKSknIGJ1dCB3aXRob3V0IGZvcmtp bmcuCisKK2VtKFRISVMgRkVBVFVSRSBJUyBOT1QgWUVUIElNUExFTUVOVEVELikKKykKK2VuZGl0 ZW0oKQpkaWZmIC0tZ2l0IGEvU3JjL01vZHVsZXMva3NoOTMuYyBiL1NyYy9Nb2R1bGVzL2tzaDkz LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi45ZGM3NWM5M2MKLS0tIC9k ZXYvbnVsbAorKysgYi9TcmMvTW9kdWxlcy9rc2g5My5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgor ICoga3NoOTMuYyAtIHN1cHBvcnQgZm9yIG1vcmUga3NoOTMgZmVhdHVyZXMKKyAqCisgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiB6c2gsIHRoZSBaIHNoZWxsLgorICoKKyAqIENvcHlyaWdodCAoYykg MjAyMiBCYXJ0b24gRS4gU2NoYWVmZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBh bmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgdG8gZGlzdHJpYnV0ZSBt b2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UsIHBy b3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcK KyAqIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUu CisgKgorICogSW4gbm8gZXZlbnQgc2hhbGwgQmFydG9uIEUuIFNjaGFlZmVyIG9yIHRoZSBac2gg RGV2ZWxvcG1lbnQKKyAqIEdyb3VwIGJlIGxpYWJsZSB0byBhbnkgcGFydHkgZm9yIGRpcmVjdCwg aW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yCisgKiBjb25zZXF1ZW50aWFsIGRhbWFn ZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRv Y3VtZW50YXRpb24sIGV2ZW4gaWYgQmFydG9uIEUuIFNjaGFlZmVyIGFuZCB0aGUgWnNoCisgKiBE ZXZlbG9wbWVudCBHcm91cCBoYXZlIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Yg c3VjaCBkYW1hZ2UuCisgKgorICogQmFydG9uIEUuIFNjaGFlZmVyIGFuZCB0aGUgWnNoIERldmVs b3BtZW50IEdyb3VwCisgKiBzcGVjaWZpY2FsbHkgZGlzY2xhaW0gYW55IHdhcnJhbnRpZXMsIGlu Y2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUKKyAqIGltcGxpZWQgd2FycmFudGllcyBv ZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLgor ICogVGhlIHNvZnR3YXJlIHByb3ZpZGVkIGhlcmV1bmRlciBpcyBvbiBhbiAiYXMgaXMiIGJhc2lz LCBhbmQKKyAqIEJhcnRvbiBFLiBTY2hhZWZlciBhbmQgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91 cCBoYXZlIG5vCisgKiBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgbWFpbnRlbmFuY2UsIHN1cHBvcnQs IHVwZGF0ZXMsIGVuaGFuY2VtZW50cywgb3IKKyAqIG1vZGlmaWNhdGlvbnMuCisgKgorICovCisK KyNpbmNsdWRlICJrc2g5My5tZGgiCisjaW5jbHVkZSAia3NoOTMucHJvIgorCisvKiBJbXBsZW1l bnRpbmcgIm5hbWVzcGFjZSIgcmVxdWlyZXMgY3JlYXRpbmcgYSBuZXcga2V3b3JkLiAgSHJtLiAq LworCisvKgorICogU3RhbmRhcmQgbW9kdWxlIGNvbmZpZ3VyYXRpb24vbGlua2FnZQorICovCisK K3N0YXRpYyBzdHJ1Y3QgYnVpbHRpbiBiaW50YWJbXSA9IHsKKyAgICBCVUlMVElOKCJuYW1lcmVm IiwgQklORl9BU1NJR04sIChIYW5kbGVyRnVuYyliaW5fdHlwZXNldCwgMCwgLTEsIDAsICJnciIs ICJuIikKK307CisKKyNpbmNsdWRlICJ6c2gubWRoIgorCitzdGF0aWMgdm9pZAorZWRjaGFyc2V0 Zm4oUGFyYW0gcG0sIGNoYXIgKngpCit7CisgICAgLyoKKyAgICAgKiBUbyBtYWtlIHRoaXMgd29y ayBsaWtlIGtzaCwgd2UgbXVzdCBpbnRlcmNlcHQgJEtFWVMgYmVmb3JlIHRoZSB3aWRnZXQKKyAg ICAgKiBpcyBsb29rZWQgdXAsIHNvIHRoYXQgY2hhbmdpbmcgdGhlIGtleSBzZXF1ZW5jZSBjYXVz ZXMgYSBkaWZmZXJlbnQKKyAgICAgKiB3aWRnZXQgdG8gYmUgc3Vic3RpdHV0ZWQuICBTb21ld2hh dCBzaW1pbGFyIHRvICJiaW5ka2V5IC1zIi4KKyAgICAgKgorICAgICAqIEtzaDkzIGFkZHMgU0lH S0VZQkQgdG8gdGhlIHRyYXAgbGlzdCBmb3IgdGhpcyBwdXJwb3NlLgorICAgICAqLworICAgIDsK K30KKworc3RhdGljIGNoYXIgKioKK21hdGNoZ2V0Zm4oUGFyYW0gcG0pCit7CisgICAgY2hhciAq KnpzaF9tYXRjaCA9IGdldGFwYXJhbSgibWF0Y2giKTsKKworICAgIC8qIEZvciB0aGlzIHRvIHdv cmsgYWNjdXJhdGVseSwga3NoIGVtdWxhdGlvbiBzaG91bGQgYWx3YXlzIGltcGx5CisgICAgICog dGhhdCB0aGUgKCNtKSBhbmQgKCNiKSBleHRlbmRlZGdsb2Igb3BlcmF0b3JzIGFyZSBlbmFibGVk LgorICAgICAqCisgICAgICogV2hlbiB3ZSBoYXZlIGEgMHRoIGVsZW1lbnQgKGtzaGFycmF5cyks IGl0IGlzICRNQVRDSC4gIEVsZW1lbnRzCisgICAgICogMXN0IGFuZCBsYXJnZXIgbWlycm9yIHRo ZSAkbWF0Y2ggYXJyYXkuCisgICAgICovCisKKyAgICBpZiAocG0tPnUuYXJyKQorCWZyZWVhcnJh eShwbS0+dS5hcnIpOworICAgIGlmICh6c2hfbWF0Y2ggJiYgKnpzaF9tYXRjaCkgeworCWlmIChp c3NldChLU0hBUlJBWVMpKSB7CisJICAgIGNoYXIgKiphcCA9CisJCShjaGFyICoqKSB6YWxsb2Mo c2l6ZW9mKGNoYXIgKikgKiAoYXJybGVuKHpzaF9tYXRjaCkrMSkpOworCSAgICBwbS0+dS5hcnIg PSBhcDsKKwkgICAgKmFwKysgPSB6dHJkdXAoZ2V0c3BhcmFtKCJNQVRDSCIpKTsKKwkgICAgd2hp bGUgKCp6c2hfbWF0Y2gpCisJCSphcCA9IHp0cmR1cCgqenNoX21hdGNoKyspOworCX0gZWxzZQor CSAgICBwbS0+dS5hcnIgPSB6YXJyZHVwKHpzaF9tYXRjaCk7CisgICAgfSBlbHNlIGlmIChpc3Nl dChLU0hBUlJBWVMpKSB7CisJcG0tPnUuYXJyID0gbWthcnJheSh6dHJkdXAoZ2V0c3BhcmFtKCJN QVRDSCIpKSk7CisgICAgfSBlbHNlCisJcG0tPnUuYXJyID0gTlVMTDsKKworICAgIHJldHVybiBh cnJnZXRmbihwbSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3N1X3NjYWxhciBjb25zdGFu dF9nc3UgPQorICAgIHsgc3RyZ2V0Zm4sIE5VTEwsIG51bGx1bnNldGZuIH07CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZ3N1X3NjYWxhciBzaF9lZGNoYXJfZ3N1ID0KKyAgICB7IHN0cnZhcmdldGZu LCBlZGNoYXJzZXRmbiwgbnVsbHVuc2V0Zm4gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3N1X3Nj YWxhciBzaF9lZG1vZGVfZ3N1ID0KKyAgICB7IHN0cmdldGZuLCBudWxsc3Ryc2V0Zm4sIG51bGx1 bnNldGZuIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IGdzdV9hcnJheSBzaF9tYXRjaF9nc3UgPQor ICAgIHsgbWF0Y2hnZXRmbiwgYXJyc2V0Zm4sIHN0ZHVuc2V0Zm4gfTsKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZ3N1X3NjYWxhciBzaF9uYW1lX2dzdSA9CisgICAgeyBzdHJ2YXJnZXRmbiwgbnVsbHN0 cnNldGZuLCBudWxsdW5zZXRmbiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBnc3Vfc2NhbGFyIHNo X3N1YnNjcmlwdF9nc3UgPQorICAgIHsgc3RydmFyZ2V0Zm4sIG51bGxzdHJzZXRmbiwgbnVsbHVu c2V0Zm4gfTsKKworc3RhdGljIGNoYXIgKnNoX25hbWU7CitzdGF0aWMgY2hhciAqc2hfc3Vic2Ny aXB0Oworc3RhdGljIGNoYXIgKnNoX2VkY2hhcjsKK3N0YXRpYyBjaGFyIHNoX2VkbW9kZVsyXTsK KworLyoKKyAqIFNvbWUgcGFyYW1ldGVycyBsaXN0ZWQgaGVyZSBkbyBub3QgYXBwZWFyIGluIGtz aDkzLm1kZCBhdXRvZmVhdHVyZXMKKyAqIGJlY2F1c2UgdGhleSBhcmUgb25seSBpbnN0YW50aWF0 ZWQgYnkga3NoOTNfd3JhcHBlcigpIGJlbG93LiAgVGhpcworICogb2J2aW91c2x5IGluY2x1ZGVz IHRob3NlIGNvbW1lbnRlZCBvdXQgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBwYXJhbWRlZiBw YXJ0YWJbXSA9IHsKKyAgICBQQVJBTURFRigiLnNoLmNvbW1hbmQiLCBQTV9OQU1FUkVGfFBNX1JF QURPTkxZLCAiWlNIX0RFQlVHX0NNRCIsICZjb25zdGFudF9nc3UpLAorICAgIFBBUkFNREVGKCIu c2guZWRjaGFyIiwgUE1fU0NBTEFSfFBNX1NQRUNJQUwsICZzaF9lZGNoYXIsICZzaF9lZGNoYXJf Z3N1KSwKKyAgICBQQVJBTURFRigiLnNoLmVkY29sIiwgUE1fTkFNRVJFRnxQTV9SRUFET05MWSwg IkNVUlNPUiIsICZjb25zdGFudF9nc3UpLAorICAgIFBBUkFNREVGKCIuc2guZWRtb2RlIiwgUE1f U0NBTEFSfFBNX1JFQURPTkxZfFBNX1NQRUNJQUwsICZzaF9lZG1vZGUsICZzaF9lZG1vZGVfZ3N1 KSwKKyAgICBQQVJBTURFRigiLnNoLmVkdGV4dCIsIFBNX05BTUVSRUZ8UE1fUkVBRE9OTFksICJC VUZGRVIiLCAmY29uc3RhbnRfZ3N1KSwKKyAgICBQQVJBTURFRigiLnNoLmZpbGUiLCBQTV9OQU1F UkVGfFBNX1JFQURPTkxZLCAiWlNIX1NDUklQVCIsICZjb25zdGFudF9nc3UpLAorICAgIC8qIFBB UkFNREVGKCIuc2guZnVuIiwgUE1fU0NBTEFSfFBNX1VOU0VULCBOVUxMLCAmY29uc3RhbnRfZ3N1 KSwgKi8KKyAgICAvKiBQQVJBTURFRigiLnNoLmxldmVsIiwgUE1fSU5URUdFUnxQTV9VTlNFVCwg TlVMTCwgJmNvbnN0YW50X2dzdSksICovCisgICAgUEFSQU1ERUYoIi5zaC5saW5lbm8iLCBQTV9O QU1FUkVGfFBNX1JFQURPTkxZLCAiTElORU5PIiwgJmNvbnN0YW50X2dzdSksCisgICAgUEFSQU1E RUYoIi5zaC5tYXRjaCIsIFBNX0FSUkFZfFBNX1JFQURPTkxZLCBOVUxMLCAmc2hfbWF0Y2hfZ3N1 KSwKKyAgICBQQVJBTURFRigiLnNoLm5hbWUiLCBQTV9TQ0FMQVJ8UE1fUkVBRE9OTFl8UE1fU1BF Q0lBTCwgJnNoX25hbWUsICZzaF9uYW1lX2dzdSksCisgICAgUEFSQU1ERUYoIi5zaC5zdWJzY3Jp cHQiLCBQTV9TQ0FMQVJ8UE1fUkVBRE9OTFl8UE1fU1BFQ0lBTCwgJnNoX3N1YnNjcmlwdCwgJnNo X3N1YnNjcmlwdF9nc3UpLAorICAgIFBBUkFNREVGKCIuc2guc3Vic2hlbGwiLCBQTV9OQU1FUkVG fFBNX1JFQURPTkxZLCAiWlNIX1NVQlNIRUxMIiwgJmNvbnN0YW50X2dzdSksCisgICAgLyogU1BF Q0lBTFBNREVGKCIuc2gudmFsdWUiLCAwLCBOVUxMLCBOVUxMLCBOVUxMKSwgKi8KKyAgICBQQVJB TURFRigiLnNoLnZlcnNpb24iLCBQTV9OQU1FUkVGfFBNX1JFQURPTkxZLCAiWlNIX1BBVENITEVW RUwiLCAmY29uc3RhbnRfZ3N1KQorfTsKKworc3RhdGljIHN0cnVjdCBmZWF0dXJlcyBtb2R1bGVf ZmVhdHVyZXMgPSB7CisgICAgYmludGFiLCBzaXplb2YoYmludGFiKS9zaXplb2YoKmJpbnRhYiks CisgICAgTlVMTCwgMCwKKyAgICBOVUxMLCAwLAorICAgIHBhcnRhYiwgc2l6ZW9mKHBhcnRhYikv c2l6ZW9mKCpwYXJ0YWIpLAorICAgIDAKK307CisKKy8qKi8KK3N0YXRpYyBpbnQKK2tzaDkzX3dy YXBwZXIoRXByb2cgcHJvZywgRnVuY1dyYXAgdywgY2hhciAqbmFtZSkKK3sKKyAgICBGdW5jc3Rh Y2sgZjsKKyAgICBQYXJhbSBwbTsKKyAgICB6bG9uZyBudW0gPSBmdW5jc3RhY2stPnByZXYgPyBn ZXRpcGFyYW0oIi5zaC5sZXZlbCIpIDogMDsKKworICAgIGlmICghRU1VTEFUSU9OKEVNVUxBVEVf S1NIKSkKKwlyZXR1cm4gMTsKKworICAgIGlmIChudW0gPT0gMCkKKwlmb3IgKGYgPSBmdW5jc3Rh Y2s7IGY7IGYgPSBmLT5wcmV2LCBudW0rKyk7CisgICAgZWxzZQorCW51bSsrOworCisgICAgcXVl dWVfc2lnbmFscygpOworICAgICsrbG9jYWxsZXZlbDsJCS8qIE1ha2UgdGhlc2UgbG9jYWwgKi8K KyAgICBpZiAoKHBtID0gY3JlYXRlcGFyYW0oIi5zaC5sZXZlbCIsIFBNX0xPQ0FMfFBNX1VOU0VU KSkpIHsKKwlwbS0+bGV2ZWwgPSBsb2NhbGxldmVsOwkvKiBXaHkgaXMgdGhpcyBuZWNlc3Nhcnk/ ICovCisJc2V0aXBhcmFtKCIuc2gubGV2ZWwiLCBudW0pOworICAgIH0KKyAgICBpZiAoKHBtID0g Y3JlYXRlcGFyYW0oIi5zaC5mdW4iLCBQTV9MT0NBTHxQTV9VTlNFVCkpKSB7CisJcG0tPmxldmVs ID0gbG9jYWxsZXZlbDsKKwlzZXRzcGFyYW0oIi5zaC5mdW4iLCB6dHJkdXAobmFtZSkpOworCXBt LT5ub2RlLmZsYWdzIHw9IFBNX1JFQURPTkxZOworICAgIH0KKyAgICBpZiAoemxlYWN0aXZlKSB7 CisJZXh0ZXJuIG1vZF9pbXBvcnRfdmFyaWFibGUgY2hhciAqY3Vya2V5bWFwbmFtZTsJLyogWFhY ICovCisJZXh0ZXJuIG1vZF9pbXBvcnRfdmFyaWFibGUgY2hhciAqdmFyZWRhcmc7CS8qIFhYWCAq LworCS8qIEhvdyB0byBkaXN0aW5ndWlzaCBlbWFjcyBiaW5kaW5ncz8gKi8KKwlpZiAoY3Vya2V5 bWFwbmFtZSAmJiBzdHJjbXAoY3Vya2V5bWFwbmFtZSwgIm1haW4iKSA9PSAwKQorCSAgICBzdHJj cHkoc2hfZWRtb2RlLCAiXGUiKTsKKwllbHNlCisJICAgIHN0cmNweShzaF9lZG1vZGUsICIiKTsK KwlpZiAoIXNoX2VkY2hhcikKKwkgICAgc2hfZWRjaGFyID0gZHVwc3RyaW5nKGdldHNwYXJhbSgi S0VZUyIpKTsKKwlpZiAodmFyZWRhcmcpIHsKKwkgICAgY2hhciAqaWUgPSBpdHlwZV9lbmQoKHNo X25hbWUgPSBkdXBzdHJpbmcodmFyZWRhcmcpKSwgSU5BTUVTUEMsIDApOworCSAgICBpZiAoaWUg JiYgKmllKSB7CisJCSppZSsrID0gJ1wwJzsKKwkJLyogQXNzdW1lIGJpbl92YXJlZCBoYXMgdmFs aWRhdGVkIHN1YnNjcmlwdCAqLworCQlzaF9zdWJzY3JpcHQgPSBkdXBzdHJpbmcoaWUpOworCQlp ZSA9IHNoX3N1YnNjcmlwdCArIHN0cmxlbihzaF9zdWJzY3JpcHQpOworCQkqLS1pZSA9ICdcMCc7 CisJICAgIH0gZWxzZQorCQlzaF9zdWJzY3JpcHQgPSBOVUxMOworCSAgICBpZiAoKHBtID0gY3Jl YXRlcGFyYW0oIi5zaC52YWx1ZSIsIFBNX0xPQ0FMfFBNX05BTUVSRUZ8UE1fVU5TRVQpKSkgewor CQlwbS0+bGV2ZWwgPSBsb2NhbGxldmVsOworCQlzZXRsb29wdmFyKCIuc2gudmFsdWUiLCAiQlVG RkVSIik7CS8qIEhhY2sgKi8KKwkgICAgfQorCX0gZWxzZQorCSAgICBzaF9uYW1lID0gc2hfc3Vi c2NyaXB0ID0gTlVMTDsKKyAgICB9IGVsc2UgeworCXNoX2VkY2hhciA9IHNoX25hbWUgPSBzaF9z dWJzY3JpcHQgPSBOVUxMOworCXN0cmNweShzaF9lZG1vZGUsICIiKTsKKwkvKiBUT0RPOgorCSAq IC0gZGlzY2lwbGluZXMKKwkgKiAtIHNwZWNpYWwgaGFuZGxpbmcgb2YgLnNoLnZhbHVlIGluIG1h dGgKKwkgKi8KKyAgICB9CisgICAgLS1sb2NhbGxldmVsOworICAgIHVucXVldWVfc2lnbmFscygp OworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnVuY3dyYXAgd3JhcHBlcltd ID0geworICAgIFdSQVBERUYoa3NoOTNfd3JhcHBlciksCit9OworCisvKiovCitpbnQKK3NldHVw XyhVTlVTRUQoTW9kdWxlIG0pKQoreworICAgIHJldHVybiAwOworfQorCisvKiovCitpbnQKK2Zl YXR1cmVzXyhNb2R1bGUgbSwgY2hhciAqKipmZWF0dXJlcykKK3sKKyAgICAqZmVhdHVyZXMgPSBm ZWF0dXJlc2FycmF5KG0sICZtb2R1bGVfZmVhdHVyZXMpOworICAgIHJldHVybiAwOworfQorCisv KiovCitpbnQKK2VuYWJsZXNfKE1vZHVsZSBtLCBpbnQgKiplbmFibGVzKQoreworICAgIHJldHVy biBoYW5kbGVmZWF0dXJlcyhtLCAmbW9kdWxlX2ZlYXR1cmVzLCBlbmFibGVzKTsKK30KKworLyoq LworaW50Citib290XyhNb2R1bGUgbSkKK3sKKyAgICByZXR1cm4gYWRkd3JhcHBlcihtLCB3cmFw cGVyKTsKK30KKworLyoqLworaW50CitjbGVhbnVwXyhNb2R1bGUgbSkKK3sKKyAgICBzdHJ1Y3Qg cGFyYW1kZWYgKnA7CisKKyAgICBkZWxldGV3cmFwcGVyKG0sIHdyYXBwZXIpOworCisgICAgLyog Q2xlYW4gdXAgbmFtZXJlZnMsIG90aGVyd2lzZSBkZWxldGVwYXJhbWRlZigpIGlzIGNvbmZ1c2Vk ICovCisgICAgZm9yIChwID0gcGFydGFiOyBwIDwgcGFydGFiICsgc2l6ZW9mKHBhcnRhYikvc2l6 ZW9mKCpwYXJ0YWIpOyArK3ApIHsKKwlpZiAocC0+ZmxhZ3MgJiBQTV9OQU1FUkVGKSB7CisJICAg IEhhc2hOb2RlIGhuID0gZ2V0aGFzaG5vZGUyKHBhcmFtdGFiLCBwLT5uYW1lKTsKKwkgICAgaWYg KGhuKQorCQkoKFBhcmFtKWhuKS0+bm9kZS5mbGFncyAmPSB+UE1fTkFNRVJFRjsKKwl9CisgICAg fQorICAgIHJldHVybiBzZXRmZWF0dXJlZW5hYmxlcyhtLCAmbW9kdWxlX2ZlYXR1cmVzLCBOVUxM KTsKK30KKworLyoqLworaW50CitmaW5pc2hfKFVOVVNFRChNb2R1bGUgbSkpCit7CisgICAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9TcmMvTW9kdWxlcy9rc2g5My5tZGQgYi9TcmMvTW9kdWxl cy9rc2g5My5tZGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4yNzU5ODg0 YTAKLS0tIC9kZXYvbnVsbAorKysgYi9TcmMvTW9kdWxlcy9rc2g5My5tZGQKQEAgLTAsMCArMSw4 IEBACituYW1lPXpzaC9rc2g5MworbGluaz1laXRoZXIKK2xvYWQ9eWVzCisKK2F1dG9mZWF0dXJl cz0iYjpuYW1lcmVmIgorYXV0b2ZlYXR1cmVzX2VtdT0iYjpuYW1lcmVmIHA6LnNoLmNvbW1hbmQg cDouc2guZWRjb2wgcDouc2guZWR0ZXh0IHA6LnNoLmZpbGUgcDouc2gubGluZW5vIHA6LnNoLm1h dGNoIHA6LnNoLnN1YnNoZWxsIHA6LnNoLnZlcnNpb24iCisKK29iamVjdHM9ImtzaDkzLm8iCmRp ZmYgLS1naXQgYS9TcmMvdXRpbHMuYyBiL1NyYy91dGlscy5jCmluZGV4IDEzOTNlY2IxMy4uOGNl OWExNzVkIDEwMDY0NAotLS0gYS9TcmMvdXRpbHMuYworKysgYi9TcmMvdXRpbHMuYwpAQCAtNDMx OSw3ICs0MzE5LDcgQEAgaXR5cGVfZW5kKGNvbnN0IGNoYXIgKnB0ciwgaW50IGl0eXBlLCBpbnQg b25jZSkKIHsKICAgICBpZiAoaXR5cGUgPT0gSU5BTUVTUEMpIHsKIAlpdHlwZSA9IElJREVOVDsK LQlpZiAob25jZSA9PSAwICYmICFpc3NldChQT1NJWElERU5USUZJRVJTKSkgeworCWlmIChvbmNl ID09IDAgJiYgKCFpc3NldChQT1NJWElERU5USUZJRVJTKSB8fCBFTVVMQVRJT04oRU1VTEFURV9L U0gpKSkgewogCSAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIG5hbWVzIGNvbnRhaW5pbmcgIi4iLCBr c2g5MyBuYW1lc3BhY2VzICovCiAJICAgIGNoYXIgKnQgPSBpdHlwZV9lbmQocHRyICsgKCpwdHIg PT0gJy4nKSwgaXR5cGUsIDApOwogCSAgICBpZiAodCA+IHB0cisxKSB7Cgo= --00000000000078ce7605f5a6fb0c--