From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1858EE77188 for ; Wed, 8 Jan 2025 23:46:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=LF37vZQzFwQ8WBuO5Q4C1NcX9d+VjdjPlgEjAjuUoOs=; b=y40DpeW8l86QQi e1dqfYMHhNPKx0aheoHZ0o74mIvgP0R+yCRXjHTMD4j0xvqe4Ov2aCdT6i65oDt2+yfNx2t4e3NtF gBVxwo+5Z5cb8A6s79BJE8D4shk63WqXfaxHXrS6R4ErGlcFD53AzHaFlK16xyZx6mNkvsGZVxsig WHvMLv4RtyFjMNAfNbmVbbku8lUXawY5O7oayBj9d+KgzeSST+ZZm0it3iYdNp34SOg90cIAMqUUQ ONTS0hoY0hr/08VtAuhYzoo+p9ABEuhbk3saYHzMm2Jou+CqPNmf5ZQBp3r3e/1kOaYveDyWodTQq ua0mIlrbtULrPQfcXoSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tVfkm-0000000ABUb-3iM5; Wed, 08 Jan 2025 23:46:24 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tVfkO-0000000ABIy-1ZF2 for linux-riscv@lists.infradead.org; Wed, 08 Jan 2025 23:46:02 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-216426b0865so4565375ad.0 for ; Wed, 08 Jan 2025 15:45:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1736379919; x=1736984719; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=n04hWB4Gk98hLfclBb+qe72ao+x7pfesVUwK71GCVrE=; b=U1XI+Q4x/WqSli549IW/sU5ZVqh5XTXEFlJcxTqL1zLfvxrItU0T/exV42MtjuZ2vM M41RvoSAxe3I28dz3SlRWnPXEtkwdQKSYmRDoc5GswgCYdlDLzAatgO1xwiIr5NwH/gP lx+/efupQU65ndQLp9ksPFrImg+h47vxpIrPlL64+2nVv1qhgWp9E0rEk9TzOsyS96Iz baH3xl0xQOQ7OS5ffD8rulMpwXxgEgwpjZh6/FX/yAWTFZzFSchvoLhCqfUMkemAGYgr Kmp+kqNLXZsTppTIbaD3eE3WhEJdqJt1x+6wMGOPa2e8c0XDv6PIxcjxd78dACZCBuXQ 96/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736379919; x=1736984719; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=n04hWB4Gk98hLfclBb+qe72ao+x7pfesVUwK71GCVrE=; b=iDkSyf9FAQFhq3vGFRVgCtyLQfFMpjYws7qJGRnyMA+k8O8amiviZCeoViwue1Lxcj aodAcWXSmM4yax+4tMwmo3UUvH0Wt25FflpRuaey/k2qHeGsW/+Q1FjAIEkJ25s3vCm+ Ta0Soz3+hwUe7IWLYF5Pg67p0KKyhc+DVkqq6yrnBkishfnAAbAHf7b9epHkFnuNFk9B LQ0f6jnYTfvFPSkaSNFAutOemOsGKqYm5jTKjavUKOA6kTY02aekZBoJpj4yFs++C5+x CXisscHvEsmWxprjValiJrjk0XfzapOXOf+JUhZge3zl5tl5hMtdWsd7dvjaK4ETywKS hNvQ== X-Forwarded-Encrypted: i=1; AJvYcCVf/5OSFpHJ/IriIqeFUNizVFVQYktD7rJ6c25JTMGb5e3KR9G/O8FsXWlisf0eAEOV3dfNUFOZTsa+vA==@lists.infradead.org X-Gm-Message-State: AOJu0YybCgoTWvGUXDpLbwr9qCuBtWOm6XBPuAOa4fC8CYLvmIoxZI4j gpzFUX3SDAZbCPx7idv8uTrQUGNipEQ+TkA4Ye+g6eHvuAvGgxPlMSZ5F1be1Lk= X-Gm-Gg: ASbGnctJFKR9ERTJwvjbOLTOln/cPcAu3MkQa9OWP5aITrXkdI1iKyrbNrqV/zFY5QN S6CMuVoYsX0zePdyhV1i5Ao10q++mlcDyLEtd95095EDqur1F0OUoA+HZqfF20K2AFbR5ukncBB Hb0QfHI3NR9PeCp5cnPvh+5kABmcGvu2Q6qOPMYx6hXU1ETGh/HFA8n/7QYjBKTNgCZuyK+FWXE RupHYrGMeX518w+TkhLtDc4y5qf8XDCJllVOuUTehCvAu0= X-Google-Smtp-Source: AGHT+IE4K86nZhxH67OFnzwzadVw/70Z5n3t9N6HCqVWIdc3NLjhYygvY3gsFAo6Y/YBoof3Iq6I2Q== X-Received: by 2002:a05:6a00:e8e:b0:725:460e:6bc0 with SMTP id d2e1a72fcca58-72d21df408dmr6550197b3a.0.1736379918960; Wed, 08 Jan 2025 15:45:18 -0800 (PST) Received: from ghost ([50.145.13.30]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72aad90c2e9sm37068310b3a.180.2025.01.08.15.45.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 15:45:18 -0800 (PST) Date: Wed, 8 Jan 2025 15:45:12 -0800 From: Charlie Jenkins To: Chunyan Zhang Cc: Paul Walmsley , Palmer Dabbelt , Albert Ou , Song Liu , Yu Kuai , linux-riscv@lists.infradead.org, linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, Chunyan Zhang Subject: Re: [RFC PATCH] raid6: Add RISC-V SIMD syndrome and recovery calculations Message-ID: References: <20241220114023.667347-1-zhangchunyan@iscas.ac.cn> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20241220114023.667347-1-zhangchunyan@iscas.ac.cn> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250108_154600_430548_243A4D6B X-CRM114-Status: GOOD ( 27.28 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gRnJpLCBEZWMgMjAsIDIwMjQgYXQgMDc6NDA6MjNQTSArMDgwMCwgQ2h1bnlhbiBaaGFuZyB3 cm90ZToKPiBUaGUgYXNzZW1ibHkgaXMgb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgQVJNIE5FT04g YW5kIGludC51YywgYnV0IHVzZXMKPiBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9ucyB0byBpbXBs ZW1lbnQgdGhlIFJBSUQ2IHN5bmRyb21lIGFuZAo+IHJlY292ZXJ5IGNhbGN1bGF0aW9ucy4KPiAK PiBUaGUgZnVuY3Rpb25zIGFyZSB0ZXN0ZWQgb24gUUVNVS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBD aHVueWFuIFpoYW5nIDx6aGFuZ2NodW55YW5AaXNjYXMuYWMuY24+Cj4gLS0tCj4gIGluY2x1ZGUv bGludXgvcmFpZC9wcS5oIHwgICA0ICsKPiAgbGliL3JhaWQ2L01ha2VmaWxlICAgICAgfCAgIDMg Kwo+ICBsaWIvcmFpZDYvYWxnb3MuYyAgICAgICB8ICAgOCArCj4gIGxpYi9yYWlkNi9yZWNvdl9y dnYuYyAgIHwgMjI5ICsrKysrKysrKysrKysKPiAgbGliL3JhaWQ2L3J2di5jICAgICAgICAgfCA3 MTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA1IGZpbGVzIGNo YW5nZWQsIDk1OSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcmFpZDYv cmVjb3ZfcnZ2LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9yYWlkNi9ydnYuYwo+IAo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9w cS5oCj4gaW5kZXggOTgwMzBhY2NmNjQxLi40YzIxZjA2YzY2MmEgMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS9saW51eC9yYWlkL3BxLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaAo+IEBA IC0xMDgsNiArMTA4LDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl92 cGVybXhvcjQ7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfdnBlcm14 b3I4Owo+ICBleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2xzeDsKPiAgZXh0 ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9sYXN4Owo+ICtleHRlcm4gY29uc3Qg c3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X3J2dngxOwo+ICtleHRlcm4gY29uc3Qgc3RydWN0IHJh aWQ2X2NhbGxzIHJhaWQ2X3J2dngyOwo+ICtleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxz IHJhaWQ2X3J2dng0Owo+ICAKPiAgc3RydWN0IHJhaWQ2X3JlY292X2NhbGxzIHsKPiAgCXZvaWQg KCpkYXRhMikoaW50LCBzaXplX3QsIGludCwgaW50LCB2b2lkICoqKTsKPiBAQCAtMTI1LDYgKzEy OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfcmVjb3ZfY2FsbHMgcmFpZDZfcmVjb3Zf czM5MHhjOwo+ICBleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X3JlY292X2NhbGxzIHJhaWQ2X3Jl Y292X25lb247Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfcmVjb3ZfY2FsbHMgcmFpZDZf cmVjb3ZfbHN4Owo+ICBleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X3JlY292X2NhbGxzIHJhaWQ2 X3JlY292X2xhc3g7Cj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfcmVjb3ZfY2FsbHMgcmFp ZDZfcmVjb3ZfcnZ2Owo+ICAKPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlk Nl9uZW9ueDE7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfbmVvbngy Owo+IGRpZmYgLS1naXQgYS9saWIvcmFpZDYvTWFrZWZpbGUgYi9saWIvcmFpZDYvTWFrZWZpbGUK PiBpbmRleCAyOTEyN2RkMDVkNjMuLmU2MmZiN2NkNzczZSAxMDA2NDQKPiAtLS0gYS9saWIvcmFp ZDYvTWFrZWZpbGUKPiArKysgYi9saWIvcmFpZDYvTWFrZWZpbGUKPiBAQCAtMTAsNiArMTAsOSBA QCByYWlkNl9wcS0kKENPTkZJR19BTFRJVkVDKSArPSBhbHRpdmVjMS5vIGFsdGl2ZWMyLm8gYWx0 aXZlYzQubyBhbHRpdmVjOC5vIFwKPiAgcmFpZDZfcHEtJChDT05GSUdfS0VSTkVMX01PREVfTkVP TikgKz0gbmVvbi5vIG5lb24xLm8gbmVvbjIubyBuZW9uNC5vIG5lb244Lm8gcmVjb3ZfbmVvbi5v IHJlY292X25lb25faW5uZXIubwo+ICByYWlkNl9wcS0kKENPTkZJR19TMzkwKSArPSBzMzkwdng4 Lm8gcmVjb3ZfczM5MHhjLm8KPiAgcmFpZDZfcHEtJChDT05GSUdfTE9PTkdBUkNIKSArPSBsb29u Z2FyY2hfc2ltZC5vIHJlY292X2xvb25nYXJjaF9zaW1kLm8KPiArcmFpZDZfcHEtJChDT05GSUdf UklTQ1ZfSVNBX1YpICs9IHJ2di5vIHJlY292X3J2di5vCj4gK0NGTEFHU19ydnYubyArPSAtbWFy Y2g9cnY2NGdjdgo+ICtDRkxBR1NfcmVjb3ZfcnZ2Lm8gKz0gLW1hcmNoPXJ2NjRnY3YKPiAgCj4g IGhvc3Rwcm9ncwkrPSBta3RhYmxlcwo+ICAKPiBkaWZmIC0tZ2l0IGEvbGliL3JhaWQ2L2FsZ29z LmMgYi9saWIvcmFpZDYvYWxnb3MuYwo+IGluZGV4IGNkMmU4OGVlMWYxNC4uMGEzODhhNjA1MTMx IDEwMDY0NAo+IC0tLSBhL2xpYi9yYWlkNi9hbGdvcy5jCj4gKysrIGIvbGliL3JhaWQ2L2FsZ29z LmMKPiBAQCAtODAsNiArODAsMTEgQEAgY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzICogY29uc3Qg cmFpZDZfYWxnb3NbXSA9IHsKPiAgI2lmZGVmIENPTkZJR19DUFVfSEFTX0xTWAo+ICAJJnJhaWQ2 X2xzeCwKPiAgI2VuZGlmCj4gKyNlbmRpZgo+ICsjaWZkZWYgQ09ORklHX1JJU0NWX0lTQV9WCj4g KwkmcmFpZDZfcnZ2eDEsCj4gKwkmcmFpZDZfcnZ2eDIsCj4gKwkmcmFpZDZfcnZ2eDQsCj4gICNl bmRpZgo+ICAJJnJhaWQ2X2ludHg4LAo+ICAJJnJhaWQ2X2ludHg0LAo+IEBAIC0xMTUsNiArMTIw LDkgQEAgY29uc3Qgc3RydWN0IHJhaWQ2X3JlY292X2NhbGxzICpjb25zdCByYWlkNl9yZWNvdl9h bGdvc1tdID0gewo+ICAjaWZkZWYgQ09ORklHX0NQVV9IQVNfTFNYCj4gIAkmcmFpZDZfcmVjb3Zf bHN4LAo+ICAjZW5kaWYKPiArI2VuZGlmCj4gKyNpZmRlZiBDT05GSUdfUklTQ1ZfSVNBX1YKPiAr CSZyYWlkNl9yZWNvdl9ydnYsCj4gICNlbmRpZgo+ICAJJnJhaWQ2X3JlY292X2ludHgxLAo+ICAJ TlVMTAo+IGRpZmYgLS1naXQgYS9saWIvcmFpZDYvcmVjb3ZfcnZ2LmMgYi9saWIvcmFpZDYvcmVj b3ZfcnZ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOGFl NzQ4MDNlYTdmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9yYWlkNi9yZWNvdl9ydnYuYwo+ IEBAIC0wLDAgKzEsMjI5IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMjQgSW5zdGl0dXRlIG9mIFNvZnR3YXJlLCBD QVMuCj4gKyAqIEF1dGhvcjogQ2h1bnlhbiBaaGFuZyA8emhhbmdjaHVueWFuQGlzY2FzLmFjLmNu Pgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxhc20vc2ltZC5oPgo+ICsjaW5jbHVkZSA8YXNtL3Zl Y3Rvci5oPgo+ICsjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3JhaWQvcHEuaD4KPiArCj4gK3N0YXRpYyB2b2lkIF9fcmFpZDZfMmRhdGFfcmVjb3Zf cnZ2KGludCBieXRlcywgdTggKnAsIHU4ICpxLCB1OCAqZHAsCj4gKwkJCSAgICAgIHU4ICpkcSwg Y29uc3QgdTggKnBibXVsLAo+ICsJCQkgICAgICBjb25zdCB1OCAqcW11bCkKPiArewo+ICsJYXNt IHZvbGF0aWxlICgKPiArCQkiLm9wdGlvbglwdXNoXG4iCj4gKwkJIi5vcHRpb24JYXJjaCwrdlxu Igo+ICsJCSJ2c2V0dmxpCXgwLCAlW2F2bF0sIGU4LCBtMSwgdGEsIG1hXG4iCj4gKwkJOiA6Cj4g KwkJW2F2bF0iciIoMTYpCj4gKwkpOwo+ICsKPiArCS8qCj4gKwkgKiB3aGlsZSAoIGJ5dGVzLS0g KSB7Cj4gKwkgKgl1aW50OF90IHB4LCBxeCwgZGI7Cj4gKwkgKgo+ICsJICoJcHgJICA9ICpwIF4g KmRwOwo+ICsJICoJcXgJICA9IHFtdWxbKnEgXiAqZHFdOwo+ICsJICoJKmRxKysgPSBkYiA9IHBi bXVsW3B4XSBeIHF4Owo+ICsJICoJKmRwKysgPSBkYiBeIHB4Owo+ICsJICoJcCsrOyBxKys7Cj4g KwkgKiB9Cj4gKwkgKi8KPiArCXdoaWxlIChieXRlcykgewo+ICsJCS8qCj4gKwkJICogdjA6cHgs IHYxOmRwLAo+ICsJCSAqIHYyOnF4LCB2MzpkcSwKPiArCQkgKiB2NDp2eCwgdjU6dnksCj4gKwkJ ICogdjY6cW0wLCB2NzpxbTEsCj4gKwkJICogdjg6cG0wLCB2OTpwbTEsCj4gKwkJICogdjE0OnAv cW1bdnhdLCB2MTU6cC9xbVt2eV0KPiArCQkgKi8KPiArCQlhc20gdm9sYXRpbGUgKAo+ICsJCQki dmxlOC52CQl2MCwgKCVbcHhdKVxuIgo+ICsJCQkidmxlOC52CQl2MSwgKCVbZHBdKVxuIgo+ICsJ CQkidnhvci52dgl2MCwgdjAsIHYxXG4iCj4gKwkJCSJ2bGU4LnYJCXYyLCAoJVtxeF0pXG4iCj4g KwkJCSJ2bGU4LnYJCXYzLCAoJVtkcV0pXG4iCj4gKwkJCSJ2eG9yLnZ2CXY0LCB2MiwgdjNcbiIK PiArCQkJInZzcmwudmkJdjUsIHY0LCA0XG4iCj4gKwkJCSJ2YW5kLnZpCXY0LCB2NCwgMHhmXG4i Cj4gKwkJCSJ2bGU4LnYJCXY2LCAoJVtxbTBdKVxuIgo+ICsJCQkidmxlOC52CQl2NywgKCVbcW0x XSlcbiIKPiArCQkJInZyZ2F0aGVyLnZ2CXYxNCwgdjYsIHY0XG4iIC8qIHYxNCA9IHFtW3Z4XSAq Lwo+ICsJCQkidnJnYXRoZXIudnYJdjE1LCB2NywgdjVcbiIgLyogdjE1ID0gcW1bdnldICovCj4g KwkJCSJ2eG9yLnZ2CXYyLCB2MTQsIHYxNVxuIiAvKiB2MiA9IHFtdWxbKnEgXiAqZHFdICovCj4g Kwo+ICsJCQkidnNybC52aQl2NSwgdjAsIDRcbiIKPiArCQkJInZhbmQudmkJdjQsIHYwLCAweGZc biIKPiArCQkJInZsZTgudgkJdjgsICglW3BtMF0pXG4iCj4gKwkJCSJ2bGU4LnYJCXY5LCAoJVtw bTFdKVxuIgo+ICsJCQkidnJnYXRoZXIudnYJdjE0LCB2OCwgdjRcbiIgLyogdjE0ID0gcG1bdnhd ICovCj4gKwkJCSJ2cmdhdGhlci52dgl2MTUsIHY5LCB2NVxuIiAvKiB2MTUgPSBwbVt2eV0gKi8K PiArCQkJInZ4b3IudnYJdjQsIHYxNCwgdjE1XG4iIC8qIHY0ID0gcGJtdWxbcHhdICovCj4gKwkJ CSJ2eG9yLnZ2CXYzLCB2NCwgdjJcbiIgLyogdjMgPSBkYiA9IHBibXVsW3B4XSBeIHF4ICovCj4g KwkJCSJ2eG9yLnZ2CXYxLCB2MywgdjBcbiIgLyogdjEgPSBkYiBeIHB4OyAqLwo+ICsJCQkidnNl OC52CQl2MywgKCVbZHFdKVxuIgo+ICsJCQkidnNlOC52CQl2MSwgKCVbZHBdKVxuIgo+ICsJCQk6 IDoKPiArCQkJW3B4XSJyIihwKSwKPiArCQkJW2RwXSJyIihkcCksCj4gKwkJCVtxeF0iciIocSks Cj4gKwkJCVtkcV0iciIoZHEpLAo+ICsJCQlbcW0wXSJyIihxbXVsKSwKPiArCQkJW3FtMV0iciIo cW11bCArIDE2KSwKPiArCQkJW3BtMF0iciIocGJtdWwpLAo+ICsJCQlbcG0xXSJyIihwYm11bCAr IDE2KQo+ICsJCQk6KTsKPiArCj4gKwkJYnl0ZXMgLT0gMTY7Cj4gKwkJcCArPSAxNjsKPiArCQlx ICs9IDE2Owo+ICsJCWRwICs9IDE2Owo+ICsJCWRxICs9IDE2Owo+ICsJfQo+ICsKPiArCWFzbSB2 b2xhdGlsZSAoIi5vcHRpb24gcG9wXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19yYWlk Nl9kYXRhcF9yZWNvdl9ydnYoaW50IGJ5dGVzLCB1aW50OF90ICpwLCB1aW50OF90ICpxLCB1aW50 OF90ICpkcSwKPiArCQkJICAgICAgY29uc3QgdWludDhfdCAqcW11bCkKPiArewo+ICsJYXNtIHZv bGF0aWxlICgKPiArCQkiLm9wdGlvbglwdXNoXG4iCj4gKwkJIi5vcHRpb24JYXJjaCwrdlxuIgo+ ICsJCSJ2c2V0dmxpCXgwLCAlW2F2bF0sIGU4LCBtMSwgdGEsIG1hXG4iCj4gKwkJOiA6Cj4gKwkJ W2F2bF0iciIoMTYpCj4gKwkpOwo+ICsKPiArCS8qCj4gKwkgKiB3aGlsZSAoYnl0ZXMtLSkgewo+ ICsJICogICpwKysgXj0gKmRxID0gcW11bFsqcSBeICpkcV07Cj4gKwkgKiAgcSsrOyBkcSsrOwo+ ICsJICogfQo+ICsJICovCj4gKwl3aGlsZSAoYnl0ZXMpIHsKPiArCQkvKgo+ICsJCSAqIHYwOnZ4 LCB2MTp2eSwKPiArCQkgKiB2MjpkcSwgdjM6cCwKPiArCQkgKiB2NDpxbTAsIHY1OnFtMSwKPiAr CQkgKiB2MTA6bVt2eF0sIHYxMTptW3Z5XQo+ICsJCSAqLwo+ICsJCWFzbSB2b2xhdGlsZSAoCj4g KwkJCSJ2bGU4LnYJCXYwLCAoJVt2eF0pXG4iCj4gKwkJCSJ2bGU4LnYJCXYyLCAoJVtkcV0pXG4i Cj4gKwkJCSJ2eG9yLnZ2CXYwLCB2MCwgdjJcbiIKPiArCQkJInZzcmwudmkJdjEsIHYwLCA0XG4i Cj4gKwkJCSJ2YW5kLnZpCXYwLCB2MCwgMHhmXG4iCj4gKwkJCSJ2bGU4LnYJCXY0LCAoJVtxbTBd KVxuIgo+ICsJCQkidmxlOC52CQl2NSwgKCVbcW0xXSlcbiIKPiArCQkJInZyZ2F0aGVyLnZ2CXYx MCwgdjQsIHYwXG4iCj4gKwkJCSJ2cmdhdGhlci52dgl2MTEsIHY1LCB2MVxuIgo+ICsJCQkidnhv ci52dgl2MCwgdjEwLCB2MTFcbiIKPiArCQkJInZsZTgudgkJdjEsICglW3Z5XSlcbiIKPiArCQkJ InZ4b3IudnYJdjEsIHYwLCB2MVxuIgo+ICsJCQkidnNlOC52CQl2MCwgKCVbZHFdKVxuIgo+ICsJ CQkidnNlOC52CQl2MSwgKCVbdnldKVxuIgo+ICsJCQk6IDoKPiArCQkJW3Z4XSJyIihxKSwKPiAr CQkJW3Z5XSJyIihwKSwKPiArCQkJW2RxXSJyIihkcSksCj4gKwkJCVtxbTBdInIiKHFtdWwpLAo+ ICsJCQlbcW0xXSJyIihxbXVsICsgMTYpCj4gKwkJCTopOwo+ICsKPiArCQlieXRlcyAtPSAxNjsK PiArCQlwICs9IDE2Owo+ICsJCXEgKz0gMTY7Cj4gKwkJZHEgKz0gMTY7Cj4gKwl9Cj4gKwo+ICsJ YXNtIHZvbGF0aWxlICgiLm9wdGlvbiBwb3BcbiIpOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZv aWQgcmFpZDZfMmRhdGFfcmVjb3ZfcnZ2KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFp bGEsCj4gKwkJaW50IGZhaWxiLCB2b2lkICoqcHRycykKPiArewo+ICsJdTggKnAsICpxLCAqZHAs ICpkcTsKPiArCWNvbnN0IHU4ICpwYm11bDsJLyogUCBtdWx0aXBsaWVyIHRhYmxlIGZvciBCIGRh dGEgKi8KPiArCWNvbnN0IHU4ICpxbXVsOwkJLyogUSBtdWx0aXBsaWVyIHRhYmxlIChmb3IgYm90 aCkgKi8KPiArCj4gKwlwID0gKHU4ICopcHRyc1tkaXNrcyAtIDJdOwo+ICsJcSA9ICh1OCAqKXB0 cnNbZGlza3MgLSAxXTsKPiArCj4gKwkvKgo+ICsJICogQ29tcHV0ZSBzeW5kcm9tZSB3aXRoIHpl cm8gZm9yIHRoZSBtaXNzaW5nIGRhdGEgcGFnZXMKPiArCSAqIFVzZSB0aGUgZGVhZCBkYXRhIHBh Z2VzIGFzIHRlbXBvcmFyeSBzdG9yYWdlIGZvcgo+ICsJICogZGVsdGEgcCBhbmQgZGVsdGEgcQo+ ICsJICovCj4gKwlkcCA9ICh1OCAqKXB0cnNbZmFpbGFdOwo+ICsJcHRyc1tmYWlsYV0gPSAodm9p ZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKPiArCXB0cnNbZGlza3MgLSAyXSA9IGRwOwo+ICsJ ZHEgPSAodTggKilwdHJzW2ZhaWxiXTsKPiArCXB0cnNbZmFpbGJdID0gKHZvaWQgKilyYWlkNl9l bXB0eV96ZXJvX3BhZ2U7Cj4gKwlwdHJzW2Rpc2tzIC0gMV0gPSBkcTsKPiArCj4gKwlyYWlkNl9j YWxsLmdlbl9zeW5kcm9tZShkaXNrcywgYnl0ZXMsIHB0cnMpOwo+ICsKPiArCS8qIFJlc3RvcmUg cG9pbnRlciB0YWJsZSAqLwo+ICsJcHRyc1tmYWlsYV0gICAgID0gZHA7Cj4gKwlwdHJzW2ZhaWxi XSAgICAgPSBkcTsKPiArCXB0cnNbZGlza3MgLSAyXSA9IHA7Cj4gKwlwdHJzW2Rpc2tzIC0gMV0g PSBxOwo+ICsKPiArCS8qIE5vdywgcGljayB0aGUgcHJvcGVyIGRhdGEgdGFibGVzICovCj4gKwlw Ym11bCA9IHJhaWQ2X3ZnZm11bFtyYWlkNl9nZmV4aVtmYWlsYi1mYWlsYV1dOwo+ICsJcW11bCAg PSByYWlkNl92Z2ZtdWxbcmFpZDZfZ2ZpbnZbcmFpZDZfZ2ZleHBbZmFpbGFdIF4KPiArCQkJCQkg cmFpZDZfZ2ZleHBbZmFpbGJdXV07Cj4gKwo+ICsJaWYgKGNyeXB0b19zaW1kX3VzYWJsZSgpKSB7 CgpUaGVyZSBzaG91bGQgYmUgYW4gYWx0ZXJuYXRlIHJlY292ZXJ5IG1lY2hhbmlzbSBpZiBpdCdz IG5vdCBjdXJyZW50bHkKdXNhYmxlIHJpZ2h0PyBJIGRvbid0IGtub3cgd2hhdCBjYXNlIGNvdWxk IGhhcHBlbiB3aGVuIHRoaXMgZnVuY3Rpb24gaXMKY2FsbGVkIGJ1dCBjcnlwdG9fc2ltZF91c2Fi bGUoKSByZXR1cm5zIGZhbHNlLgoKPiArCQlrZXJuZWxfdmVjdG9yX2JlZ2luKCk7Cj4gKwkJX19y YWlkNl8yZGF0YV9yZWNvdl9ydnYoYnl0ZXMsIHAsIHEsIGRwLCBkcSwgcGJtdWwsIHFtdWwpOwo+ ICsJCWtlcm5lbF92ZWN0b3JfZW5kKCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJh aWQ2X2RhdGFwX3JlY292X3J2dihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLAo+ ICsJCXZvaWQgKipwdHJzKQo+ICt7Cj4gKwl1OCAqcCwgKnEsICpkcTsKPiArCWNvbnN0IHU4ICpx bXVsOwkJLyogUSBtdWx0aXBsaWVyIHRhYmxlICovCj4gKwo+ICsJcCA9ICh1OCAqKXB0cnNbZGlz a3MgLSAyXTsKPiArCXEgPSAodTggKilwdHJzW2Rpc2tzIC0gMV07Cj4gKwo+ICsJLyoKPiArCSAq IENvbXB1dGUgc3luZHJvbWUgd2l0aCB6ZXJvIGZvciB0aGUgbWlzc2luZyBkYXRhIHBhZ2UKPiAr CSAqIFVzZSB0aGUgZGVhZCBkYXRhIHBhZ2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGRlbHRh IHEKPiArCSAqLwo+ICsJZHEgPSAodTggKilwdHJzW2ZhaWxhXTsKPiArCXB0cnNbZmFpbGFdID0g KHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7Cj4gKwlwdHJzW2Rpc2tzIC0gMV0gPSBkcTsK PiArCj4gKwlyYWlkNl9jYWxsLmdlbl9zeW5kcm9tZShkaXNrcywgYnl0ZXMsIHB0cnMpOwo+ICsK PiArCS8qIFJlc3RvcmUgcG9pbnRlciB0YWJsZSAqLwo+ICsJcHRyc1tmYWlsYV0gICAgID0gZHE7 Cj4gKwlwdHJzW2Rpc2tzIC0gMV0gPSBxOwo+ICsKPiArCS8qIE5vdywgcGljayB0aGUgcHJvcGVy IGRhdGEgdGFibGVzICovCj4gKwlxbXVsID0gcmFpZDZfdmdmbXVsW3JhaWQ2X2dmaW52W3JhaWQ2 X2dmZXhwW2ZhaWxhXV1dOwo+ICsKPiArCWlmIChjcnlwdG9fc2ltZF91c2FibGUoKSkgewoKU2Ft ZSBoZXJlCgo+ICsJCWtlcm5lbF92ZWN0b3JfYmVnaW4oKTsKPiArCQlfX3JhaWQ2X2RhdGFwX3Jl Y292X3J2dihieXRlcywgcCwgcSwgZHEsIHFtdWwpOwo+ICsJCWtlcm5lbF92ZWN0b3JfZW5kKCk7 Cj4gKwl9Cj4gK30KPiArCj4gK2NvbnN0IHN0cnVjdCByYWlkNl9yZWNvdl9jYWxscyByYWlkNl9y ZWNvdl9ydnYgPSB7Cj4gKwkuZGF0YTIJCT0gcmFpZDZfMmRhdGFfcmVjb3ZfcnZ2LAo+ICsJLmRh dGFwCQk9IHJhaWQ2X2RhdGFwX3JlY292X3J2diwKPiArCS52YWxpZAkJPSBOVUxMLAoKVGhlc2Ug ZnVuY3Rpb25zIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB2ZWN0b3IgaXMgZW5hYmxlZCwgc28g dGhpcwp2YWxpZCBiaXQgc2hvdWxkIGNhbGwgaGFzX3ZlY3RvcigpLiBoYXNfdmVjdG9yKCkgcmV0 dXJucyBhIGJvb2wgYW5kCnZhbGlkIGV4cGVjdHMgYW4gaW50IHNvIHlvdSBjYW4gd3JhcCBpdCBp biBzb21ldGhpbmcgbGlrZToKCnN0YXRpYyBpbnQgY2hlY2tfdmVjdG9yKHZvaWQpCnsKCXJldHVy biBoYXNfdmVjdG9yKCk7Cn0KCkp1c3QgY2FzdGluZyBoYXNfdmVjdG9yIHRvIGludCAoKikodm9p ZCkgZG9lc24ndCB3b3JrLCBJIGdldDoKCndhcm5pbmc6IGNhc3QgYmV0d2VlbiBpbmNvbXBhdGli bGUgZnVuY3Rpb24gdHlwZXMgZnJvbSDigJhib29sICgqKSh2b2lkKeKAmSB7YWthIOKAmF9Cb29s ICgqKSh2b2lkKeKAmX0gdG8g4oCYaW50ICgqKSh2b2lkKeKAmSBbLVdjYXN0LWZ1bmN0aW9uLXR5 cGVdCgoKPiArCS5uYW1lCQk9ICJydnYiLAo+ICsJLnByaW9yaXR5CT0gMSwKPiArfTsKPiBkaWZm IC0tZ2l0IGEvbGliL3JhaWQ2L3J2di5jIGIvbGliL3JhaWQ2L3J2di5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjIxZjU0MzI1MDZkYQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9saWIvcmFpZDYvcnZ2LmMKPiBAQCAtMCwwICsxLDcxNSBAQAo+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+ICsvKgo+ICsgKiBSQUlELTYg c3luZHJvbWUgY2FsY3VsYXRpb24gdXNpbmcgUklTQ1YgdmVjdG9yIGluc3RydWN0aW9ucwo+ICsg Kgo+ICsgKiBDb3B5cmlnaHQgMjAyNCBJbnN0aXR1dGUgb2YgU29mdHdhcmUsIENBUy4KPiArICog QXV0aG9yOiBDaHVueWFuIFpoYW5nIDx6aGFuZ2NodW55YW5AaXNjYXMuYWMuY24+Cj4gKyAqCj4g KyAqIEJhc2VkIG9uIG5lb24udWM6Cj4gKyAqCUNvcHlyaWdodCAyMDAyLTIwMDQgSC4gUGV0ZXIg QW52aW4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8YXNtL3NpbWQuaD4KPiArI2luY2x1ZGUgPGFz bS92ZWN0b3IuaD4KPiArI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9zaW1kLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9yYWlkL3BxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiAr I2RlZmluZSBOU0laRQkocmlzY3Zfdl92c2l6ZSAvIDMyKSAvKiBOU0laRSA9IHZsZW5iICovCj4g Kwo+ICtzdGF0aWMgdm9pZCByYWlkNl9ydnYxX2dlbl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywg dW5zaWduZWQgbG9uZyBieXRlcywgdm9pZCAqKnB0cnMpCj4gK3sKPiArCXU4ICoqZHB0ciA9ICh1 OCAqKilwdHJzOwo+ICsJaW50IGQsIHosIHowOwo+ICsJdTggKnAsICpxOwo+ICsKPiArCXowID0g ZGlza3MgLSAzOwkJLyogSGlnaGVzdCBkYXRhIGRpc2sgKi8KPiArCXAgPSBkcHRyW3owKzFdOwkJ LyogWE9SIHBhcml0eSAqLwo+ICsJcSA9IGRwdHJbejArMl07CQkvKiBSUyBzeW5kcm9tZSAqLwo+ ICsKPiArCWFzbSB2b2xhdGlsZSAoCj4gKwkJIi5vcHRpb24JcHVzaFxuIgo+ICsJCSIub3B0aW9u CWFyY2gsK3ZcbiIKPiArCQkidnNldHZsaQl0MCwgeDAsIGU4LCBtMSwgdGEsIG1hXG4iCj4gKwkp Owo+ICsKPiArCSAvKiB2MDp3cDAsIHYxOndxMCwgdjI6d2QwL3cyMCwgdjM6dzEwICovCj4gKwlm b3IgKGQgPSAwIDsgZCA8IGJ5dGVzIDsgZCArPSBOU0laRSoxKSB7Cj4gKwkJLyogd3EkJCA9IHdw JCQgPSAqKHVuYXRpdmVfdCAqKSZkcHRyW3owXVtkKyQkKk5TSVpFXTsgKi8KPiArCQlhc20gdm9s YXRpbGUgKAo+ICsJCQkidmxlOC52CXYwLCAoJVt3cDBdKVxuIgo+ICsJCQkidmxlOC52CXYxLCAo JVt3cDBdKVxuIgo+ICsJCQk6IDoKPiArCQkJW3dwMF0iciIoJmRwdHJbejBdW2QrMCpOU0laRV0p Cj4gKwkJKTsKPiArCj4gKwkJZm9yICh6ID0gejAtMSA7IHogPj0gMCA7IHotLSkgewo+ICsJCQkv Kgo+ICsJCQkgKiB3MiQkID0gTUFTSyh3cSQkKTsKPiArCQkJICogdzEkJCA9IFNITEJZVEUod3Ek JCk7Cj4gKwkJCSAqIHcyJCQgJj0gTkJZVEVTKDB4MWQpOwo+ICsJCQkgKiB3MSQkIF49IHcyJCQ7 Cj4gKwkJCSAqIHdkJCQgPSAqKHVuYXRpdmVfdCAqKSZkcHRyW3pdW2QrJCQqTlNJWkVdOwo+ICsJ CQkgKiB3cSQkID0gdzEkJCBeIHdkJCQ7Cj4gKwkJCSAqIHdwJCQgXj0gd2QkJDsKPiArCQkJICov Cj4gKwkJCWFzbSB2b2xhdGlsZSAoCj4gKwkJCQkidnNyYS52aQl2MiwgdjEsIDdcbiIKPiArCQkJ CSJ2c2xsLnZpCXYzLCB2MSwgMVxuIgo+ICsJCQkJInZhbmQudngJdjIsIHYyLCAlW3gxZF1cbiIK PiArCQkJCSJ2eG9yLnZ2CXYzLCB2MywgdjJcbiIKPiArCQkJCSJ2bGU4LnYJCXYyLCAoJVt3ZDBd KVxuIgo+ICsJCQkJInZ4b3IudnYJdjEsIHYzLCB2MlxuIgo+ICsJCQkJInZ4b3IudnYJdjAsIHYw LCB2MlxuIgo+ICsJCQkJOiA6Cj4gKwkJCQlbd2QwXSJyIigmZHB0clt6XVtkKzAqTlNJWkVdKSwK PiArCQkJCVt4MWRdInIiKDB4MWQpCj4gKwkJCSk7Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAq ICoodW5hdGl2ZV90ICopJnBbZCtOU0laRSokJF0gPSB3cCQkOwo+ICsJCSAqICoodW5hdGl2ZV90 ICopJnFbZCtOU0laRSokJF0gPSB3cSQkOwo+ICsJCSAqLwo+ICsJCWFzbSB2b2xhdGlsZSAoCj4g KwkJCSJ2c2U4LnYJCXYwLCAoJVt3cDBdKVxuIgo+ICsJCQkidnNlOC52CQl2MSwgKCVbd3EwXSlc biIKPiArCQkJOiA6Cj4gKwkJCVt3cDBdInIiKCZwW2QrTlNJWkUqMF0pLAo+ICsJCQlbd3EwXSJy IigmcVtkK05TSVpFKjBdKQo+ICsJCSk7Cj4gKwl9Cj4gKwo+ICsJYXNtIHZvbGF0aWxlICgiLm9w dGlvbiBwb3BcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByYWlkNl9ydnYxX3hvcl9zeW5k cm9tZV9yZWFsKGludCBkaXNrcywgaW50IHN0YXJ0LCBpbnQgc3RvcCwKPiArCQkJCSAgICB1bnNp Z25lZCBsb25nIGJ5dGVzLCB2b2lkICoqcHRycykKPiArewo+ICsJdTggKipkcHRyID0gKHU4ICoq KXB0cnM7Cj4gKwl1OCAqcCwgKnE7Cj4gKwlpbnQgZCwgeiwgejA7Cj4gKwo+ICsJejAgPSBzdG9w OwkJLyogUC9RIHJpZ2h0IHNpZGUgb3B0aW1pemF0aW9uICovCj4gKwlwID0gZHB0cltkaXNrcy0y XTsJLyogWE9SIHBhcml0eSAqLwo+ICsJcSA9IGRwdHJbZGlza3MtMV07CS8qIFJTIHN5bmRyb21l ICovCj4gKwo+ICsJYXNtIHZvbGF0aWxlICgKPiArCQkiLm9wdGlvbiBwdXNoXG4iCj4gKwkJIi5v cHRpb24gYXJjaCwrdlxuIgo+ICsJCSJ2c2V0dmxpCXQwLCB4MCwgZTgsIG0xLCB0YSwgbWFcbiIK PiArCSk7Cj4gKwo+ICsJLyogdjA6d3AwLCB2MTp3cTAsIHYyOndkMC93MjAsIHYzOncxMCAqLwo+ ICsJZm9yIChkID0gMCA7IGQgPCBieXRlcyA7IGQgKz0gTlNJWkUqMSkgewo+ICsJCS8qIHdxJCQg PSB3cCQkID0gKih1bmF0aXZlX3QgKikmZHB0clt6MF1bZCskJCpOU0laRV07ICovCj4gKwkJYXNt IHZvbGF0aWxlICgKPiArCQkJInZsZTgudgl2MCwgKCVbd3AwXSlcbiIKPiArCQkJInZsZTgudgl2 MSwgKCVbd3AwXSlcbiIKPiArCQkJOiA6Cj4gKwkJCVt3cDBdInIiKCZkcHRyW3owXVtkKzAqTlNJ WkVdKQo+ICsJCSk7Cj4gKwo+ICsJCS8qIFAvUSBkYXRhIHBhZ2VzICovCj4gKwkJZm9yICh6ID0g ejAtMSA7IHogPj0gc3RhcnQgOyB6LS0pIHsKPiArCQkJLyoKPiArCQkJICogdzIkJCA9IE1BU0so d3EkJCk7Cj4gKwkJCSAqIHcxJCQgPSBTSExCWVRFKHdxJCQpOwo+ICsJCQkgKiB3MiQkICY9IE5C WVRFUygweDFkKTsKPiArCQkJICogdzEkJCBePSB3MiQkOwo+ICsJCQkgKiB3ZCQkID0gKih1bmF0 aXZlX3QgKikmZHB0clt6XVtkKyQkKk5TSVpFXTsKPiArCQkJICogd3EkJCA9IHcxJCQgXiB3ZCQk Owo+ICsJCQkgKiB3cCQkIF49IHdkJCQ7Cj4gKwkJCSAqLwo+ICsJCQlhc20gdm9sYXRpbGUgKAo+ ICsJCQkJInZzcmEudmkJdjIsIHYxLCA3XG4iCj4gKwkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIK PiArCQkJCSJ2YW5kLnZ4CXYyLCB2MiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MywgdjMs IHYyXG4iCj4gKwkJCQkidmxlOC52CQl2MiwgKCVbd2QwXSlcbiIKPiArCQkJCSJ2eG9yLnZ2CXYx LCB2MywgdjJcbiIKPiArCQkJCSJ2eG9yLnZ2CXYwLCB2MCwgdjJcbiIKPiArCQkJCTogOgo+ICsJ CQkJW3dkMF0iciIoJmRwdHJbel1bZCswKk5TSVpFXSksCj4gKwkJCQlbeDFkXSJyIigweDFkKQo+ ICsJCQkpOwo+ICsJCX0KPiArCj4gKwkJLyogUC9RIGxlZnQgc2lkZSBvcHRpbWl6YXRpb24gKi8K PiArCQlmb3IgKHogPSBzdGFydC0xIDsgeiA+PSAwIDsgei0tKSB7Cj4gKwkJCS8qCj4gKwkJCSAq IHcyJCQgPSBNQVNLKHdxJCQpOwo+ICsJCQkgKiB3MSQkID0gU0hMQllURSh3cSQkKTsKPiArCQkJ ICogdzIkJCAmPSBOQllURVMoMHgxZCk7Cj4gKwkJCSAqIHdxJCQgPSB3MSQkIF4gdzIkJDsKPiAr CQkJICovCj4gKwkJCWFzbSB2b2xhdGlsZSAoCj4gKwkJCQkidnNyYS52aQl2MiwgdjEsIDdcbiIK PiArCQkJCSJ2c2xsLnZpCXYzLCB2MSwgMVxuIgo+ICsJCQkJInZhbmQudngJdjIsIHYyLCAlW3gx ZF1cbiIKPiArCQkJCSJ2eG9yLnZ2CXYxLCB2MywgdjJcbiIKPiArCQkJCTogOgo+ICsJCQkJW3gx ZF0iciIoMHgxZCkKPiArCQkJKTsKPiArCQl9Cj4gKwo+ICsJCS8qCj4gKwkJICogKih1bmF0aXZl X3QgKikmcFtkK05TSVpFKiQkXSBePSB3cCQkOwo+ICsJCSAqICoodW5hdGl2ZV90ICopJnFbZCtO U0laRSokJF0gXj0gd3EkJDsKPiArCQkgKiB2MDp3cDAsIHYxOndxMCwgdjI6cDAsIHYzOnEwCj4g KwkJICovCj4gKwkJYXNtIHZvbGF0aWxlICgKPiArCQkJInZsZTgudgkJdjIsICglW3dwMF0pXG4i Cj4gKwkJCSJ2bGU4LnYJCXYzLCAoJVt3cTBdKVxuIgo+ICsJCQkidnhvci52dgl2MiwgdjIsIHYw XG4iCj4gKwkJCSJ2eG9yLnZ2CXYzLCB2MywgdjFcbiIKPiArCQkJInZzZTgudgkJdjIsICglW3dw MF0pXG4iCj4gKwkJCSJ2c2U4LnYJCXYzLCAoJVt3cTBdKVxuIgo+ICsJCQk6IDoKPiArCQkJW3dw MF0iciIoJnBbZCtOU0laRSowXSksCj4gKwkJCVt3cTBdInIiKCZxW2QrTlNJWkUqMF0pCj4gKwkJ KTsKPiArCX0KPiArCj4gKwlhc20gdm9sYXRpbGUgKCIub3B0aW9uIHBvcFxuIik7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHJhaWQ2X3J2djJfZ2VuX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1 bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqcHRycykKPiArewo+ICsJdTggKipkcHRyID0gKHU4 ICoqKXB0cnM7Cj4gKwlpbnQgZCwgeiwgejA7Cj4gKwl1OCAqcCwgKnE7Cj4gKwo+ICsJejAgPSBk aXNrcyAtIDM7CQkvKiBIaWdoZXN0IGRhdGEgZGlzayAqLwo+ICsJcCA9IGRwdHJbejArMV07CQkv KiBYT1IgcGFyaXR5ICovCj4gKwlxID0gZHB0clt6MCsyXTsJCS8qIFJTIHN5bmRyb21lICovCj4g Kwo+ICsJYXNtIHZvbGF0aWxlICgKPiArCQkiLm9wdGlvbglwdXNoXG4iCj4gKwkJIi5vcHRpb24J YXJjaCwrdlxuIgo+ICsJCSJ2c2V0dmxpCXQwLCB4MCwgZTgsIG0xLCB0YSwgbWFcbiIKPiArCSk7 Cj4gKwo+ICsJLyoKPiArCSAqIHYwOndwMCwgdjE6d3EwLCB2Mjp3ZDAvdzIwLCB2Mzp3MTAKPiAr CSAqIHY0OndwMSwgdjU6d3ExLCB2Njp3ZDEvdzIxLCB2Nzp3MTEKPiArCSAqLwo+ICsJZm9yIChk ID0gMCA7IGQgPCBieXRlcyA7IGQgKz0gTlNJWkUqMikgewo+ICsJCS8qIHdxJCQgPSB3cCQkID0g Kih1bmF0aXZlX3QgKikmZHB0clt6MF1bZCskJCpOU0laRV07ICovCj4gKwkJYXNtIHZvbGF0aWxl ICgKPiArCQkJInZsZTgudgl2MCwgKCVbd3AwXSlcbiIKPiArCQkJInZsZTgudgl2MSwgKCVbd3Aw XSlcbiIKPiArCQkJInZsZTgudgl2NCwgKCVbd3AxXSlcbiIKPiArCQkJInZsZTgudgl2NSwgKCVb d3AxXSlcbiIKPiArCQkJOiA6Cj4gKwkJCVt3cDBdInIiKCZkcHRyW3owXVtkKzAqTlNJWkVdKSwK PiArCQkJW3dwMV0iciIoJmRwdHJbejBdW2QrMSpOU0laRV0pCj4gKwkJKTsKPiArCj4gKwkJZm9y ICh6ID0gejAtMSA7IHogPj0gMCA7IHotLSkgewo+ICsJCQkvKgo+ICsJCQkgKiB3MiQkID0gTUFT Syh3cSQkKTsKPiArCQkJICogdzEkJCA9IFNITEJZVEUod3EkJCk7Cj4gKwkJCSAqIHcyJCQgJj0g TkJZVEVTKDB4MWQpOwo+ICsJCQkgKiB3MSQkIF49IHcyJCQ7Cj4gKwkJCSAqIHdkJCQgPSAqKHVu YXRpdmVfdCAqKSZkcHRyW3pdW2QrJCQqTlNJWkVdOwo+ICsJCQkgKiB3cSQkID0gdzEkJCBeIHdk JCQ7Cj4gKwkJCSAqIHdwJCQgXj0gd2QkJDsKPiArCQkJICovCj4gKwkJCWFzbSB2b2xhdGlsZSAo Cj4gKwkJCQkidnNyYS52aQl2MiwgdjEsIDdcbiIKPiArCQkJCSJ2c2xsLnZpCXYzLCB2MSwgMVxu Igo+ICsJCQkJInZhbmQudngJdjIsIHYyLCAlW3gxZF1cbiIKPiArCQkJCSJ2eG9yLnZ2CXYzLCB2 MywgdjJcbiIKPiArCQkJCSJ2bGU4LnYJCXYyLCAoJVt3ZDBdKVxuIgo+ICsJCQkJInZ4b3IudnYJ djEsIHYzLCB2MlxuIgo+ICsJCQkJInZ4b3IudnYJdjAsIHYwLCB2MlxuIgo+ICsKPiArCQkJCSJ2 c3JhLnZpCXY2LCB2NSwgN1xuIgo+ICsJCQkJInZzbGwudmkJdjcsIHY1LCAxXG4iCj4gKwkJCQki dmFuZC52eAl2NiwgdjYsICVbeDFkXVxuIgo+ICsJCQkJInZ4b3IudnYJdjcsIHY3LCB2NlxuIgo+ ICsJCQkJInZsZTgudgkJdjYsICglW3dkMV0pXG4iCj4gKwkJCQkidnhvci52dgl2NSwgdjcsIHY2 XG4iCj4gKwkJCQkidnhvci52dgl2NCwgdjQsIHY2XG4iCj4gKwkJCQk6IDoKPiArCQkJCVt3ZDBd InIiKCZkcHRyW3pdW2QrMCpOU0laRV0pLAo+ICsJCQkJW3dkMV0iciIoJmRwdHJbel1bZCsxKk5T SVpFXSksCj4gKwkJCQlbeDFkXSJyIigweDFkKQo+ICsJCQkpOwo+ICsJCX0KPiArCj4gKwkJLyoK PiArCQkgKiAqKHVuYXRpdmVfdCAqKSZwW2QrTlNJWkUqJCRdID0gd3AkJDsKPiArCQkgKiAqKHVu YXRpdmVfdCAqKSZxW2QrTlNJWkUqJCRdID0gd3EkJDsKPiArCQkgKi8KPiArCQlhc20gdm9sYXRp bGUgKAo+ICsJCQkidnNlOC52CQl2MCwgKCVbd3AwXSlcbiIKPiArCQkJInZzZTgudgkJdjEsICgl W3dxMF0pXG4iCj4gKwkJCSJ2c2U4LnYJCXY0LCAoJVt3cDFdKVxuIgo+ICsJCQkidnNlOC52CQl2 NSwgKCVbd3ExXSlcbiIKPiArCQkJOiA6Cj4gKwkJCVt3cDBdInIiKCZwW2QrTlNJWkUqMF0pLAo+ ICsJCQlbd3EwXSJyIigmcVtkK05TSVpFKjBdKSwKPiArCQkJW3dwMV0iciIoJnBbZCtOU0laRSox XSksCj4gKwkJCVt3cTFdInIiKCZxW2QrTlNJWkUqMV0pCj4gKwkJKTsKPiArCX0KPiArCj4gKwlh c20gdm9sYXRpbGUgKCIub3B0aW9uIHBvcFxuIik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJh aWQ2X3J2djJfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBpbnQgc3RhcnQsIGludCBzdG9w LAo+ICsJCQkJCSB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqcHRycykKPiArewo+ICsJdTgg KipkcHRyID0gKHU4ICoqKXB0cnM7Cj4gKwl1OCAqcCwgKnE7Cj4gKwlpbnQgZCwgeiwgejA7Cj4g Kwo+ICsJejAgPSBzdG9wOwkJLyogUC9RIHJpZ2h0IHNpZGUgb3B0aW1pemF0aW9uICovCj4gKwlw ID0gZHB0cltkaXNrcy0yXTsJLyogWE9SIHBhcml0eSAqLwo+ICsJcSA9IGRwdHJbZGlza3MtMV07 CS8qIFJTIHN5bmRyb21lICovCj4gKwo+ICsJYXNtIHZvbGF0aWxlICgKPiArCQkiLm9wdGlvbiBw dXNoXG4iCj4gKwkJIi5vcHRpb24gYXJjaCwrdlxuIgo+ICsJCSJ2c2V0dmxpCXQwLCB4MCwgZTgs IG0xLCB0YSwgbWFcbiIKPiArCSk7Cj4gKwo+ICsJLyoKPiArCSAqIHYwOndwMCwgdjE6d3EwLCB2 Mjp3ZDAvdzIwLCB2Mzp3MTAKPiArCSAqIHY0OndwMSwgdjU6d3ExLCB2Njp3ZDEvdzIxLCB2Nzp3 MTEKPiArCSAqLwo+ICsJZm9yIChkID0gMCA7IGQgPCBieXRlcyA7IGQgKz0gTlNJWkUqMikgewo+ ICsJCSAvKiB3cSQkID0gd3AkJCA9ICoodW5hdGl2ZV90ICopJmRwdHJbejBdW2QrJCQqTlNJWkVd OyAqLwo+ICsJCWFzbSB2b2xhdGlsZSAoCj4gKwkJCSJ2bGU4LnYJdjAsICglW3dwMF0pXG4iCj4g KwkJCSJ2bGU4LnYJdjEsICglW3dwMF0pXG4iCj4gKwkJCSJ2bGU4LnYJdjQsICglW3dwMV0pXG4i Cj4gKwkJCSJ2bGU4LnYJdjUsICglW3dwMV0pXG4iCj4gKwkJCTogOgo+ICsJCQlbd3AwXSJyIigm ZHB0clt6MF1bZCswKk5TSVpFXSksCj4gKwkJCVt3cDFdInIiKCZkcHRyW3owXVtkKzEqTlNJWkVd KQo+ICsJCSk7Cj4gKwo+ICsJCS8qIFAvUSBkYXRhIHBhZ2VzICovCj4gKwkJZm9yICh6ID0gejAt MSA7IHogPj0gc3RhcnQgOyB6LS0pIHsKPiArCQkJLyoKPiArCQkJICogdzIkJCA9IE1BU0sod3Ek JCk7Cj4gKwkJCSAqIHcxJCQgPSBTSExCWVRFKHdxJCQpOwo+ICsJCQkgKiB3MiQkICY9IE5CWVRF UygweDFkKTsKPiArCQkJICogdzEkJCBePSB3MiQkOwo+ICsJCQkgKiB3ZCQkID0gKih1bmF0aXZl X3QgKikmZHB0clt6XVtkKyQkKk5TSVpFXTsKPiArCQkJICogd3EkJCA9IHcxJCQgXiB3ZCQkOwo+ ICsJCQkgKiB3cCQkIF49IHdkJCQ7Cj4gKwkJCSAqLwo+ICsJCQlhc20gdm9sYXRpbGUgKAo+ICsJ CQkJInZzcmEudmkJdjIsIHYxLCA3XG4iCj4gKwkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKPiAr CQkJCSJ2YW5kLnZ4CXYyLCB2MiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MywgdjMsIHYy XG4iCj4gKwkJCQkidmxlOC52CQl2MiwgKCVbd2QwXSlcbiIKPiArCQkJCSJ2eG9yLnZ2CXYxLCB2 MywgdjJcbiIKPiArCQkJCSJ2eG9yLnZ2CXYwLCB2MCwgdjJcbiIKPiArCj4gKwkJCQkidnNyYS52 aQl2NiwgdjUsIDdcbiIKPiArCQkJCSJ2c2xsLnZpCXY3LCB2NSwgMVxuIgo+ICsJCQkJInZhbmQu dngJdjYsIHY2LCAlW3gxZF1cbiIKPiArCQkJCSJ2eG9yLnZ2CXY3LCB2NywgdjZcbiIKPiArCQkJ CSJ2bGU4LnYJCXY2LCAoJVt3ZDFdKVxuIgo+ICsJCQkJInZ4b3IudnYJdjUsIHY3LCB2NlxuIgo+ ICsJCQkJInZ4b3IudnYJdjQsIHY0LCB2NlxuIgo+ICsJCQkJOiA6Cj4gKwkJCQlbd2QwXSJyIigm ZHB0clt6XVtkKzAqTlNJWkVdKSwKPiArCQkJCVt3ZDFdInIiKCZkcHRyW3pdW2QrMSpOU0laRV0p LAo+ICsJCQkJW3gxZF0iciIoMHgxZCkKPiArCQkJKTsKPiArCQl9Cj4gKwo+ICsJCS8qIFAvUSBs ZWZ0IHNpZGUgb3B0aW1pemF0aW9uICovCj4gKwkJZm9yICh6ID0gc3RhcnQtMSA7IHogPj0gMCA7 IHotLSkgewo+ICsJCQkvKgo+ICsJCQkgKiB3MiQkID0gTUFTSyh3cSQkKTsKPiArCQkJICogdzEk JCA9IFNITEJZVEUod3EkJCk7Cj4gKwkJCSAqIHcyJCQgJj0gTkJZVEVTKDB4MWQpOwo+ICsJCQkg KiB3cSQkID0gdzEkJCBeIHcyJCQ7Cj4gKwkJCSAqLwo+ICsJCQlhc20gdm9sYXRpbGUgKAo+ICsJ CQkJInZzcmEudmkJdjIsIHYxLCA3XG4iCj4gKwkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKPiAr CQkJCSJ2YW5kLnZ4CXYyLCB2MiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MSwgdjMsIHYy XG4iCj4gKwo+ICsJCQkJInZzcmEudmkJdjYsIHY1LCA3XG4iCj4gKwkJCQkidnNsbC52aQl2Nywg djUsIDFcbiIKPiArCQkJCSJ2YW5kLnZ4CXY2LCB2NiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52 dgl2NSwgdjcsIHY2XG4iCj4gKwkJCQk6IDoKPiArCQkJCVt4MWRdInIiKDB4MWQpCj4gKwkJCSk7 Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAqICoodW5hdGl2ZV90ICopJnBbZCtOU0laRSokJF0g Xj0gd3AkJDsKPiArCQkgKiAqKHVuYXRpdmVfdCAqKSZxW2QrTlNJWkUqJCRdIF49IHdxJCQ7Cj4g KwkJICogdjA6d3AwLCB2MTp3cTAsIHYyOnAwLCB2MzpxMAo+ICsJCSAqIHY0OndwMSwgdjU6d3Ex LCB2NjpwMSwgdjc6cTEKPiArCQkgKi8KPiArCQlhc20gdm9sYXRpbGUgKAo+ICsJCQkidmxlOC52 CQl2MiwgKCVbd3AwXSlcbiIKPiArCQkJInZsZTgudgkJdjMsICglW3dxMF0pXG4iCj4gKwkJCSJ2 eG9yLnZ2CXYyLCB2MiwgdjBcbiIKPiArCQkJInZ4b3IudnYJdjMsIHYzLCB2MVxuIgo+ICsJCQki dnNlOC52CQl2MiwgKCVbd3AwXSlcbiIKPiArCQkJInZzZTgudgkJdjMsICglW3dxMF0pXG4iCj4g Kwo+ICsJCQkidmxlOC52CQl2NiwgKCVbd3AxXSlcbiIKPiArCQkJInZsZTgudgkJdjcsICglW3dx MV0pXG4iCj4gKwkJCSJ2eG9yLnZ2CXY2LCB2NiwgdjRcbiIKPiArCQkJInZ4b3IudnYJdjcsIHY3 LCB2NVxuIgo+ICsJCQkidnNlOC52CQl2NiwgKCVbd3AxXSlcbiIKPiArCQkJInZzZTgudgkJdjcs ICglW3dxMV0pXG4iCj4gKwkJCTogOgo+ICsJCQlbd3AwXSJyIigmcFtkK05TSVpFKjBdKSwKPiAr CQkJW3dxMF0iciIoJnFbZCtOU0laRSowXSksCj4gKwkJCVt3cDFdInIiKCZwW2QrTlNJWkUqMV0p LAo+ICsJCQlbd3ExXSJyIigmcVtkK05TSVpFKjFdKQo+ICsJCSk7Cj4gKwl9Cj4gKwo+ICsJYXNt IHZvbGF0aWxlICgiLm9wdGlvbiBwb3BcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByYWlk Nl9ydnY0X2dlbl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgdW5zaWduZWQgbG9uZyBieXRlcywg dm9pZCAqKnB0cnMpCj4gK3sKPiArCXU4ICoqZHB0ciA9ICh1OCAqKilwdHJzOwo+ICsJaW50IGQs IHosIHowOwo+ICsJdTggKnAsICpxOwo+ICsKPiArCXowID0gZGlza3MgLSAzOwkvKiBIaWdoZXN0 IGRhdGEgZGlzayAqLwo+ICsJcCA9IGRwdHJbejArMV07CS8qIFhPUiBwYXJpdHkgKi8KPiArCXEg PSBkcHRyW3owKzJdOwkvKiBSUyBzeW5kcm9tZSAqLwo+ICsKPiArCWFzbSB2b2xhdGlsZSAoCj4g KwkJIi5vcHRpb24JcHVzaFxuIgo+ICsJCSIub3B0aW9uCWFyY2gsK3ZcbiIKPiArCQkidnNldHZs aQl0MCwgeDAsIGU4LCBtMSwgdGEsIG1hXG4iCj4gKwkpOwo+ICsKPiArCS8qCj4gKwkgKiB2MDp3 cDAsIHYxOndxMCwgdjI6d2QwL3cyMCwgdjM6dzEwCj4gKwkgKiB2NDp3cDEsIHY1OndxMSwgdjY6 d2QxL3cyMSwgdjc6dzExCj4gKwkgKiB2ODp3cDIsIHY5OndxMiwgdjEwOndkMi93MjIsIHYxMTp3 MTIKPiArCSAqIHYxMjp3cDMsIHYxMzp3cTMsIHYxNDp3ZDMvdzIzLCB2MTU6dzEzCj4gKwkgKi8K PiArCWZvciAoZCA9IDAgOyBkIDwgYnl0ZXMgOyBkICs9IE5TSVpFKjQpIHsKPiArCQkvKiB3cSQk ID0gd3AkJCA9ICoodW5hdGl2ZV90ICopJmRwdHJbejBdW2QrJCQqTlNJWkVdOyAqLwo+ICsJCWFz bSB2b2xhdGlsZSAoCj4gKwkJCSJ2bGU4LnYgdjAsICglW3dwMF0pXG4iCj4gKwkJCSJ2bGU4LnYg djEsICglW3dwMF0pXG4iCj4gKwkJCSJ2bGU4LnYgdjQsICglW3dwMV0pXG4iCj4gKwkJCSJ2bGU4 LnYgdjUsICglW3dwMV0pXG4iCj4gKwkJCSJ2bGU4LnYgdjgsICglW3dwMl0pXG4iCj4gKwkJCSJ2 bGU4LnYgdjksICglW3dwMl0pXG4iCj4gKwkJCSJ2bGU4LnYgdjEyLCAoJVt3cDNdKVxuIgo+ICsJ CQkidmxlOC52IHYxMywgKCVbd3AzXSlcbiIKPiArCQkJOiA6Cj4gKwkJCVt3cDBdInIiKCZkcHRy W3owXVtkKzAqTlNJWkVdKSwKPiArCQkJW3dwMV0iciIoJmRwdHJbejBdW2QrMSpOU0laRV0pLAo+ ICsJCQlbd3AyXSJyIigmZHB0clt6MF1bZCsyKk5TSVpFXSksCj4gKwkJCVt3cDNdInIiKCZkcHRy W3owXVtkKzMqTlNJWkVdKQo+ICsJCSk7Cj4gKwo+ICsJCWZvciAoeiA9IHowLTEgOyB6ID49IDAg OyB6LS0pIHsKPiArCQkJLyoKPiArCQkJICogdzIkJCA9IE1BU0sod3EkJCk7Cj4gKwkJCSAqIHcx JCQgPSBTSExCWVRFKHdxJCQpOwo+ICsJCQkgKiB3MiQkICY9IE5CWVRFUygweDFkKTsKPiArCQkJ ICogdzEkJCBePSB3MiQkOwo+ICsJCQkgKiB3ZCQkID0gKih1bmF0aXZlX3QgKikmZHB0clt6XVtk KyQkKk5TSVpFXTsKPiArCQkJICogd3EkJCA9IHcxJCQgXiB3ZCQkOwo+ICsJCQkgKiB3cCQkIF49 IHdkJCQ7Cj4gKwkJCSAqLwo+ICsJCQlhc20gdm9sYXRpbGUgKAo+ICsJCQkJInZzcmEudmkJdjIs IHYxLCA3XG4iCj4gKwkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKPiArCQkJCSJ2YW5kLnZ4CXYy LCB2MiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MywgdjMsIHYyXG4iCj4gKwkJCQkidmxl OC52CQl2MiwgKCVbd2QwXSlcbiIKPiArCQkJCSJ2eG9yLnZ2CXYxLCB2MywgdjJcbiIKPiArCQkJ CSJ2eG9yLnZ2CXYwLCB2MCwgdjJcbiIKPiArCj4gKwkJCQkidnNyYS52aQl2NiwgdjUsIDdcbiIK PiArCQkJCSJ2c2xsLnZpCXY3LCB2NSwgMVxuIgo+ICsJCQkJInZhbmQudngJdjYsIHY2LCAlW3gx ZF1cbiIKPiArCQkJCSJ2eG9yLnZ2CXY3LCB2NywgdjZcbiIKPiArCQkJCSJ2bGU4LnYJCXY2LCAo JVt3ZDFdKVxuIgo+ICsJCQkJInZ4b3IudnYJdjUsIHY3LCB2NlxuIgo+ICsJCQkJInZ4b3IudnYJ djQsIHY0LCB2NlxuIgo+ICsKPiArCQkJCSJ2c3JhLnZpCXYxMCwgdjksIDdcbiIKPiArCQkJCSJ2 c2xsLnZpCXYxMSwgdjksIDFcbiIKPiArCQkJCSJ2YW5kLnZ4CXYxMCwgdjEwLCAlW3gxZF1cbiIK PiArCQkJCSJ2eG9yLnZ2CXYxMSwgdjExLCB2MTBcbiIKPiArCQkJCSJ2bGU4LnYJCXYxMCwgKCVb d2QyXSlcbiIKPiArCQkJCSJ2eG9yLnZ2CXY5LCB2MTEsIHYxMFxuIgo+ICsJCQkJInZ4b3IudnYJ djgsIHY4LCB2MTBcbiIKPiArCj4gKwkJCQkidnNyYS52aQl2MTQsIHYxMywgN1xuIgo+ICsJCQkJ InZzbGwudmkJdjE1LCB2MTMsIDFcbiIKPiArCQkJCSJ2YW5kLnZ4CXYxNCwgdjE0LCAlW3gxZF1c biIKPiArCQkJCSJ2eG9yLnZ2CXYxNSwgdjE1LCB2MTRcbiIKPiArCQkJCSJ2bGU4LnYJCXYxNCwg KCVbd2QzXSlcbiIKPiArCQkJCSJ2eG9yLnZ2CXYxMywgdjE1LCB2MTRcbiIKPiArCQkJCSJ2eG9y LnZ2CXYxMiwgdjEyLCB2MTRcbiIKPiArCQkJCTogOgo+ICsJCQkJW3dkMF0iciIoJmRwdHJbel1b ZCswKk5TSVpFXSksCj4gKwkJCQlbd2QxXSJyIigmZHB0clt6XVtkKzEqTlNJWkVdKSwKPiArCQkJ CVt3ZDJdInIiKCZkcHRyW3pdW2QrMipOU0laRV0pLAo+ICsJCQkJW3dkM10iciIoJmRwdHJbel1b ZCszKk5TSVpFXSksCj4gKwkJCQlbeDFkXSJyIigweDFkKQo+ICsJCQkpOwo+ICsJCX0KPiArCj4g KwkJLyoKPiArCQkgKiAqKHVuYXRpdmVfdCAqKSZwW2QrTlNJWkUqJCRdID0gd3AkJDsKPiArCQkg KiAqKHVuYXRpdmVfdCAqKSZxW2QrTlNJWkUqJCRdID0gd3EkJDsKPiArCQkgKi8KPiArCQlhc20g dm9sYXRpbGUgKAo+ICsJCQkidnNlOC52CXYwLCAoJVt3cDBdKVxuIgo+ICsJCQkidnNlOC52CXYx LCAoJVt3cTBdKVxuIgo+ICsJCQkidnNlOC52CXY0LCAoJVt3cDFdKVxuIgo+ICsJCQkidnNlOC52 CXY1LCAoJVt3cTFdKVxuIgo+ICsJCQkidnNlOC52CXY4LCAoJVt3cDJdKVxuIgo+ICsJCQkidnNl OC52CXY5LCAoJVt3cTJdKVxuIgo+ICsJCQkidnNlOC52CXYxMiwgKCVbd3AzXSlcbiIKPiArCQkJ InZzZTgudgl2MTMsICglW3dxM10pXG4iCj4gKwkJCTogOgo+ICsJCQlbd3AwXSJyIigmcFtkK05T SVpFKjBdKSwKPiArCQkJW3dxMF0iciIoJnFbZCtOU0laRSowXSksCj4gKwkJCVt3cDFdInIiKCZw W2QrTlNJWkUqMV0pLAo+ICsJCQlbd3ExXSJyIigmcVtkK05TSVpFKjFdKSwKPiArCQkJW3dwMl0i ciIoJnBbZCtOU0laRSoyXSksCj4gKwkJCVt3cTJdInIiKCZxW2QrTlNJWkUqMl0pLAo+ICsJCQlb d3AzXSJyIigmcFtkK05TSVpFKjNdKSwKPiArCQkJW3dxM10iciIoJnFbZCtOU0laRSozXSkKPiAr CQkpOwo+ICsJfQo+ICsKPiArCWFzbSB2b2xhdGlsZSAoIi5vcHRpb24gcG9wXG4iKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgcmFpZDZfcnZ2NF94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3Ms IGludCBzdGFydCwgaW50IHN0b3AsCj4gKwkJCQkJdW5zaWduZWQgbG9uZyBieXRlcywgdm9pZCAq KnB0cnMpCj4gK3sKPiArCXU4ICoqZHB0ciA9ICh1OCAqKilwdHJzOwo+ICsJdTggKnAsICpxOwo+ ICsJaW50IGQsIHosIHowOwo+ICsKPiArCXowID0gc3RvcDsJCS8qIFAvUSByaWdodCBzaWRlIG9w dGltaXphdGlvbiAqLwo+ICsJcCA9IGRwdHJbZGlza3MtMl07CS8qIFhPUiBwYXJpdHkgKi8KPiAr CXEgPSBkcHRyW2Rpc2tzLTFdOwkvKiBSUyBzeW5kcm9tZSAqLwo+ICsKPiArCWFzbSB2b2xhdGls ZSAoCj4gKwkJIi5vcHRpb24gcHVzaFxuIgo+ICsJCSIub3B0aW9uIGFyY2gsK3ZcbiIKPiArCQki dnNldHZsaQl0MCwgeDAsIGU4LCBtMSwgdGEsIG1hXG4iCj4gKwkpOwo+ICsKPiArCS8qCj4gKwkg KiB2MDp3cDAsIHYxOndxMCwgdjI6d2QwL3cyMCwgdjM6dzEwCj4gKwkgKiB2NDp3cDEsIHY1Ondx MSwgdjY6d2QxL3cyMSwgdjc6dzExCj4gKwkgKiB2ODp3cDIsIHY5OndxMiwgdjEwOndkMi93MjIs IHYxMTp3MTIKPiArCSAqIHYxMjp3cDMsIHYxMzp3cTMsIHYxNDp3ZDMvdzIzLCB2MTU6dzEzCj4g KwkgKi8KPiArCWZvciAoZCA9IDAgOyBkIDwgYnl0ZXMgOyBkICs9IE5TSVpFKjQpIHsKPiArCQkg Lyogd3EkJCA9IHdwJCQgPSAqKHVuYXRpdmVfdCAqKSZkcHRyW3owXVtkKyQkKk5TSVpFXTsgKi8K PiArCQlhc20gdm9sYXRpbGUgKAo+ICsJCQkidmxlOC52IHYwLCAoJVt3cDBdKVxuIgo+ICsJCQki dmxlOC52IHYxLCAoJVt3cDBdKVxuIgo+ICsJCQkidmxlOC52IHY0LCAoJVt3cDFdKVxuIgo+ICsJ CQkidmxlOC52IHY1LCAoJVt3cDFdKVxuIgo+ICsJCQkidmxlOC52IHY4LCAoJVt3cDJdKVxuIgo+ ICsJCQkidmxlOC52IHY5LCAoJVt3cDJdKVxuIgo+ICsJCQkidmxlOC52IHYxMiwgKCVbd3AzXSlc biIKPiArCQkJInZsZTgudiB2MTMsICglW3dwM10pXG4iCj4gKwkJCTogOgo+ICsJCQlbd3AwXSJy IigmZHB0clt6MF1bZCswKk5TSVpFXSksCj4gKwkJCVt3cDFdInIiKCZkcHRyW3owXVtkKzEqTlNJ WkVdKSwKPiArCQkJW3dwMl0iciIoJmRwdHJbejBdW2QrMipOU0laRV0pLAo+ICsJCQlbd3AzXSJy IigmZHB0clt6MF1bZCszKk5TSVpFXSkKPiArCQkpOwo+ICsKPiArCQkvKiBQL1EgZGF0YSBwYWdl cyAqLwo+ICsJCWZvciAoeiA9IHowLTEgOyB6ID49IHN0YXJ0IDsgei0tKSB7Cj4gKwkJCS8qCj4g KwkJCSAqIHcyJCQgPSBNQVNLKHdxJCQpOwo+ICsJCQkgKiB3MSQkID0gU0hMQllURSh3cSQkKTsK PiArCQkJICogdzIkJCAmPSBOQllURVMoMHgxZCk7Cj4gKwkJCSAqIHcxJCQgXj0gdzIkJDsKPiAr CQkJICogd2QkJCA9ICoodW5hdGl2ZV90ICopJmRwdHJbel1bZCskJCpOU0laRV07Cj4gKwkJCSAq IHdxJCQgPSB3MSQkIF4gd2QkJDsKPiArCQkJICogd3AkJCBePSB3ZCQkOwo+ICsJCQkgKi8KPiAr CQkJYXNtIHZvbGF0aWxlICgKPiArCQkJCSJ2c3JhLnZpCXYyLCB2MSwgN1xuIgo+ICsJCQkJInZz bGwudmkJdjMsIHYxLCAxXG4iCj4gKwkJCQkidmFuZC52eAl2MiwgdjIsICVbeDFkXVxuIgo+ICsJ CQkJInZ4b3IudnYJdjMsIHYzLCB2MlxuIgo+ICsJCQkJInZsZTgudgkJdjIsICglW3dkMF0pXG4i Cj4gKwkJCQkidnhvci52dgl2MSwgdjMsIHYyXG4iCj4gKwkJCQkidnhvci52dgl2MCwgdjAsIHYy XG4iCj4gKwo+ICsJCQkJInZzcmEudmkJdjYsIHY1LCA3XG4iCj4gKwkJCQkidnNsbC52aQl2Nywg djUsIDFcbiIKPiArCQkJCSJ2YW5kLnZ4CXY2LCB2NiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52 dgl2NywgdjcsIHY2XG4iCj4gKwkJCQkidmxlOC52CQl2NiwgKCVbd2QxXSlcbiIKPiArCQkJCSJ2 eG9yLnZ2CXY1LCB2NywgdjZcbiIKPiArCQkJCSJ2eG9yLnZ2CXY0LCB2NCwgdjZcbiIKPiArCj4g KwkJCQkidnNyYS52aQl2MTAsIHY5LCA3XG4iCj4gKwkJCQkidnNsbC52aQl2MTEsIHY5LCAxXG4i Cj4gKwkJCQkidmFuZC52eAl2MTAsIHYxMCwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MTEs IHYxMSwgdjEwXG4iCj4gKwkJCQkidmxlOC52CQl2MTAsICglW3dkMl0pXG4iCj4gKwkJCQkidnhv ci52dgl2OSwgdjExLCB2MTBcbiIKPiArCQkJCSJ2eG9yLnZ2CXY4LCB2OCwgdjEwXG4iCj4gKwo+ ICsJCQkJInZzcmEudmkJdjE0LCB2MTMsIDdcbiIKPiArCQkJCSJ2c2xsLnZpCXYxNSwgdjEzLCAx XG4iCj4gKwkJCQkidmFuZC52eAl2MTQsIHYxNCwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2 MTUsIHYxNSwgdjE0XG4iCj4gKwkJCQkidmxlOC52CQl2MTQsICglW3dkM10pXG4iCj4gKwkJCQki dnhvci52dgl2MTMsIHYxNSwgdjE0XG4iCj4gKwkJCQkidnhvci52dgl2MTIsIHYxMiwgdjE0XG4i Cj4gKwkJCQk6IDoKPiArCQkJCVt3ZDBdInIiKCZkcHRyW3pdW2QrMCpOU0laRV0pLAo+ICsJCQkJ W3dkMV0iciIoJmRwdHJbel1bZCsxKk5TSVpFXSksCj4gKwkJCQlbd2QyXSJyIigmZHB0clt6XVtk KzIqTlNJWkVdKSwKPiArCQkJCVt3ZDNdInIiKCZkcHRyW3pdW2QrMypOU0laRV0pLAo+ICsJCQkJ W3gxZF0iciIoMHgxZCkKPiArCQkJKTsKPiArCQl9Cj4gKwo+ICsJCS8qIFAvUSBsZWZ0IHNpZGUg b3B0aW1pemF0aW9uICovCj4gKwkJZm9yICh6ID0gc3RhcnQtMSA7IHogPj0gMCA7IHotLSkgewo+ ICsJCQkvKgo+ICsJCQkgKiB3MiQkID0gTUFTSyh3cSQkKTsKPiArCQkJICogdzEkJCA9IFNITEJZ VEUod3EkJCk7Cj4gKwkJCSAqIHcyJCQgJj0gTkJZVEVTKDB4MWQpOwo+ICsJCQkgKiB3cSQkID0g dzEkJCBeIHcyJCQ7Cj4gKwkJCSAqLwo+ICsJCQlhc20gdm9sYXRpbGUgKAo+ICsJCQkJInZzcmEu dmkJdjIsIHYxLCA3XG4iCj4gKwkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKPiArCQkJCSJ2YW5k LnZ4CXYyLCB2MiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MSwgdjMsIHYyXG4iCj4gKwo+ ICsJCQkJInZzcmEudmkJdjYsIHY1LCA3XG4iCj4gKwkJCQkidnNsbC52aQl2NywgdjUsIDFcbiIK PiArCQkJCSJ2YW5kLnZ4CXY2LCB2NiwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2NSwgdjcs IHY2XG4iCj4gKwo+ICsJCQkJInZzcmEudmkJdjEwLCB2OSwgN1xuIgo+ICsJCQkJInZzbGwudmkJ djExLCB2OSwgMVxuIgo+ICsJCQkJInZhbmQudngJdjEwLCB2MTAsICVbeDFkXVxuIgo+ICsJCQkJ InZ4b3IudnYJdjksIHYxMSwgdjEwXG4iCj4gKwo+ICsJCQkJInZzcmEudmkJdjE0LCB2MTMsIDdc biIKPiArCQkJCSJ2c2xsLnZpCXYxNSwgdjEzLCAxXG4iCj4gKwkJCQkidmFuZC52eAl2MTQsIHYx NCwgJVt4MWRdXG4iCj4gKwkJCQkidnhvci52dgl2MTMsIHYxNSwgdjE0XG4iCj4gKwkJCQk6IDoK PiArCQkJCVt4MWRdInIiKDB4MWQpCj4gKwkJCSk7Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAq ICoodW5hdGl2ZV90ICopJnBbZCtOU0laRSokJF0gXj0gd3AkJDsKPiArCQkgKiAqKHVuYXRpdmVf dCAqKSZxW2QrTlNJWkUqJCRdIF49IHdxJCQ7Cj4gKwkJICogdjA6d3AwLCB2MTp3cTAsIHYyOnAw LCB2MzpxMAo+ICsJCSAqIHY0OndwMSwgdjU6d3ExLCB2NjpwMSwgdjc6cTEKPiArCQkgKiB2ODp3 cDIsIHY5OndxMiwgdjEwOnAyLCB2MTE6cTIKPiArCQkgKiB2MTI6d3AzLCB2MTM6d3EzLCB2MTQ6 cDMsIHYxNTpxMwo+ICsJCSAqLwo+ICsJCWFzbSB2b2xhdGlsZSAoCj4gKwkJCSJ2bGU4LnYJCXYy LCAoJVt3cDBdKVxuIgo+ICsJCQkidmxlOC52CQl2MywgKCVbd3EwXSlcbiIKPiArCQkJInZ4b3Iu dnYJdjIsIHYyLCB2MFxuIgo+ICsJCQkidnhvci52dgl2MywgdjMsIHYxXG4iCj4gKwkJCSJ2c2U4 LnYJCXYyLCAoJVt3cDBdKVxuIgo+ICsJCQkidnNlOC52CQl2MywgKCVbd3EwXSlcbiIKPiArCj4g KwkJCSJ2bGU4LnYJCXY2LCAoJVt3cDFdKVxuIgo+ICsJCQkidmxlOC52CQl2NywgKCVbd3ExXSlc biIKPiArCQkJInZ4b3IudnYJdjYsIHY2LCB2NFxuIgo+ICsJCQkidnhvci52dgl2NywgdjcsIHY1 XG4iCj4gKwkJCSJ2c2U4LnYJCXY2LCAoJVt3cDFdKVxuIgo+ICsJCQkidnNlOC52CQl2NywgKCVb d3ExXSlcbiIKPiArCj4gKwkJCSJ2bGU4LnYJCXYxMCwgKCVbd3AyXSlcbiIKPiArCQkJInZsZTgu dgkJdjExLCAoJVt3cTJdKVxuIgo+ICsJCQkidnhvci52dgl2MTAsIHYxMCwgdjhcbiIKPiArCQkJ InZ4b3IudnYJdjExLCB2MTEsIHY5XG4iCj4gKwkJCSJ2c2U4LnYJCXYxMCwgKCVbd3AyXSlcbiIK PiArCQkJInZzZTgudgkJdjExLCAoJVt3cTJdKVxuIgo+ICsKPiArCQkJInZsZTgudgkJdjE0LCAo JVt3cDNdKVxuIgo+ICsJCQkidmxlOC52CQl2MTUsICglW3dxM10pXG4iCj4gKwkJCSJ2eG9yLnZ2 CXYxNCwgdjE0LCB2MTJcbiIKPiArCQkJInZ4b3IudnYJdjE1LCB2MTUsIHYxM1xuIgo+ICsJCQki dnNlOC52CQl2MTQsICglW3dwM10pXG4iCj4gKwkJCSJ2c2U4LnYJCXYxNSwgKCVbd3EzXSlcbiIK PiArCQkJOiA6Cj4gKwkJCVt3cDBdInIiKCZwW2QrTlNJWkUqMF0pLAo+ICsJCQlbd3EwXSJyIigm cVtkK05TSVpFKjBdKSwKPiArCQkJW3dwMV0iciIoJnBbZCtOU0laRSoxXSksCj4gKwkJCVt3cTFd InIiKCZxW2QrTlNJWkUqMV0pLAo+ICsJCQlbd3AyXSJyIigmcFtkK05TSVpFKjJdKSwKPiArCQkJ W3dxMl0iciIoJnFbZCtOU0laRSoyXSksCj4gKwkJCVt3cDNdInIiKCZwW2QrTlNJWkUqM10pLAo+ ICsJCQlbd3EzXSJyIigmcVtkK05TSVpFKjNdKQo+ICsJCSk7Cj4gKwl9Cj4gKwo+ICsJYXNtIHZv bGF0aWxlICgiLm9wdGlvbiBwb3BcbiIpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFJBSUQ2X1JWVl9X UkFQUEVSKF9uKQkJCQkJCVwKPiArCXN0YXRpYyB2b2lkIHJhaWQ2X3J2diAjIyBfbiAjIyBfZ2Vu X3N5bmRyb21lKGludCBkaXNrcywJCVwKPiArCQkJCQlzaXplX3QgYnl0ZXMsIHZvaWQgKipwdHJz KQlcCj4gKwl7CQkJCQkJCQlcCj4gKwkJdm9pZCByYWlkNl9ydnYgIyMgX24gICMjIF9nZW5fc3lu ZHJvbWVfcmVhbChpbnQsCVwKPiArCQkJCQkJdW5zaWduZWQgbG9uZywgdm9pZCoqKTsJXAo+ICsJ CWlmIChjcnlwdG9fc2ltZF91c2FibGUoKSkgewkJCQlcCgpTYW1lIG5vdGUgYWJvdXQgY3J5cHRv X3NpbWRfdXNhYmxlIGFzIGFib3ZlCgo+ICsJCQlrZXJuZWxfdmVjdG9yX2JlZ2luKCk7CQkJCVwK PiArCQkJcmFpZDZfcnZ2ICMjIF9uICMjIF9nZW5fc3luZHJvbWVfcmVhbChkaXNrcywJXAo+ICsJ CQkJCSh1bnNpZ25lZCBsb25nKWJ5dGVzLCBwdHJzKTsJXAo+ICsJCQlrZXJuZWxfdmVjdG9yX2Vu ZCgpOwkJCQlcCj4gKwkJfQkJCQkJCQlcCj4gKwl9CQkJCQkJCQlcCj4gKwlzdGF0aWMgdm9pZCBy YWlkNl9ydnYgIyMgX24gIyMgX3hvcl9zeW5kcm9tZShpbnQgZGlza3MsCQlcCj4gKwkJCQkJaW50 IHN0YXJ0LCBpbnQgc3RvcCwJCVwKPiArCQkJCQlzaXplX3QgYnl0ZXMsIHZvaWQgKipwdHJzKQlc Cj4gKwl7CQkJCQkJCQlcCj4gKwkJdm9pZCByYWlkNl9ydnYgIyMgX24gICMjIF94b3Jfc3luZHJv bWVfcmVhbChpbnQsCVwKPiArCQkJCWludCwgaW50LCB1bnNpZ25lZCBsb25nLCB2b2lkKiopOwlc Cj4gKwkJaWYgKGNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CQkJCVwKCi4uLiBhbmQgaGVyZQoKPiAr CQkJa2VybmVsX3ZlY3Rvcl9iZWdpbigpOwkJCQlcCj4gKwkJcmFpZDZfcnZ2ICMjIF9uICMjIF94 b3Jfc3luZHJvbWVfcmVhbChkaXNrcywJCVwKPiArCQkJc3RhcnQsIHN0b3AsICh1bnNpZ25lZCBs b25nKWJ5dGVzLCBwdHJzKTsJXAo+ICsJCQlrZXJuZWxfdmVjdG9yX2VuZCgpOwkJCQlcCj4gKwkJ fQkJCQkJCQlcCj4gKwl9CQkJCQkJCQlcCj4gKwlzdHJ1Y3QgcmFpZDZfY2FsbHMgY29uc3QgcmFp ZDZfcnZ2eCAjIyBfbiA9IHsJCQlcCj4gKwkJcmFpZDZfcnZ2ICMjIF9uICMjIF9nZW5fc3luZHJv bWUsCQkJXAo+ICsJCXJhaWQ2X3J2diAjIyBfbiAjIyBfeG9yX3N5bmRyb21lLAkJCVwKPiArCQlO VUxMLAkJCQkJCQlcCgpTYW1lIG5vdGUgYWJvdXQgY2FsbGluZyBoYXNfdmVjdG9yIGhlcmUuCgo+ ICsJCSJydnZ4IiAjX24sCQkJCQkJXAo+ICsJCTAJCQkJCQkJXAo+ICsJfQo+ICsKPiArUkFJRDZf UlZWX1dSQVBQRVIoMSk7Cj4gK1JBSUQ2X1JWVl9XUkFQUEVSKDIpOwo+ICtSQUlENl9SVlZfV1JB UFBFUig0KTsKPiAtLSAKPiAyLjM0LjEKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IGxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdAo+IGxpbnV4 LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2CgpTb21lIGludGVyZXN0aW5nIHJlc3VsdHMsIG9u IFFFTVUgKHZsZW49MjU2KSB0aGVzZSB2ZWN0b3JpemVkIHZlcnNpb25zCmFyZSBhcm91bmQgNngg ZmFzdGVyIG9uIG15IENQVS4gVmVjdG9yIGluIFFFTVUgaXMgbm90IG9wdGltaXplZCBzbyBJIGFt CnN1cnByaXNlZCB0aGF0IHRoZXJlIGlzIHRoaXMgbXVjaCBzcGVlZHVwLgoKIyBtb2Rwcm9iZSBy YWlkNl9wcQpbICAgMzYuMjM4Mzc3XSByYWlkNjogcnZ2eDEgICAgZ2VuKCkgIDI2NjggTUIvcwpb ICAgMzYuMzA2MzgxXSByYWlkNjogcnZ2eDIgICAgZ2VuKCkgIDMwOTcgTUIvcwpbICAgMzYuMzc0 Mzc2XSByYWlkNjogcnZ2eDQgICAgZ2VuKCkgIDMzNjYgTUIvcwpbICAgMzYuNDQyMzg1XSByYWlk NjogaW50NjR4OCAgZ2VuKCkgICA1NDggTUIvcwpbICAgMzYuNTEwMzk3XSByYWlkNjogaW50NjR4 NCAgZ2VuKCkgICA2MDAgTUIvcwpbICAgMzYuNTc4Mzg4XSByYWlkNjogaW50NjR4MiAgZ2VuKCkg ICA1ODUgTUIvcwpbICAgMzYuNjQ2Mzg0XSByYWlkNjogaW50NjR4MSAgZ2VuKCkgICA1MTggTUIv cwpbICAgMzYuNjQ2Mzk1XSByYWlkNjogdXNpbmcgYWxnb3JpdGhtIHJ2dng0IGdlbigpIDMzNjYg TUIvcwpbICAgMzYuNzE0Mzc3XSByYWlkNjogLi4uLiB4b3IoKSAxOTQyIE1CL3MsIHJtdyBlbmFi bGVkClsgICAzNi43MTQzODddIHJhaWQ2OiB1c2luZyBydnYgcmVjb3ZlcnkgYWxnb3JpdGhtCgpJ IGFsc28gcmFuIHRoZSByYWlkNnRlc3RzOgoKcmFpZDZ0ZXN0OiBjb21wbGV0ZSAoMjQyOSB0ZXN0 cywgMCBmYWlsdXJlcykKCkkgYW0gbm90IGZhbWlsaWFyIHdpdGggdGhpcyBhbGdvcml0aG0sIGJ1 dCBzaW5jZSBpdCBwYXNzZWQgYWxsIG9mIHRoZQp0ZXN0IGNhc2VzIGFuZCBzaG93cyBhIHJlbWFy a2FibGUgc3BlZWR1cCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ3JlYXQKaW1wcm92ZW1lbnQu CgpBcyBKZXNzaWNhIHBvaW50ZWQgb3V0LCBwbGVhc2UgcHV0IHRoZSB2ZWN0b3IgcG9wL3B1c2gg aW4gdGhlIHNhbWUgYmxvY2sKYXMgeW91ciB2ZWN0b3IgaW5zdHJ1Y3Rpb25zLiBXaGlsZSB0ZXN0 aW5nIHRoaXMgY29kZSwgSSB0aHJldyB0b2dldGhlciBhCnBhdGNoIGZvciB0aGlzIHRoYXQgeW91 IGNhbiBzcXVhc2g6CgpGcm9tIDMyMTE3YzBhNWIyYmJiYTc0MzlhZjM3ZTU1NjMxZTBlMzhiNjNh N2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IENoYXJsaWUgSmVua2lucyA8Y2hhcmxp ZUByaXZvc2luYy5jb20+CkRhdGU6IFdlZCwgOCBKYW4gMjAyNSAxNDozMjoyNiAtMDgwMApTdWJq ZWN0OiBbUEFUQ0hdIEZpeHVwIHZlY3RvciBvcHRpb25zCgpTaWduZWQtb2ZmLWJ5OiBDaGFybGll IEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMuY29tPgotLS0KIGxpYi9yYWlkNi9NYWtlZmlsZSAg ICB8ICAyIC0tCiBsaWIvcmFpZDYvcmVjb3ZfcnZ2LmMgfCAxMiArKysrLS0tCiBsaWIvcmFpZDYv cnZ2LmMgICAgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tCiAzIGZpbGVzIGNoYW5nZWQsIDc3IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2xpYi9yYWlkNi9NYWtlZmlsZSBiL2xpYi9yYWlkNi9NYWtlZmlsZQppbmRl eCBlNjJmYjdjZDc3M2UuLjViZTBhNGU2MGFiMSAxMDA2NDQKLS0tIGEvbGliL3JhaWQ2L01ha2Vm aWxlCisrKyBiL2xpYi9yYWlkNi9NYWtlZmlsZQpAQCAtMTEsOCArMTEsNiBAQCByYWlkNl9wcS0k KENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSArPSBuZW9uLm8gbmVvbjEubyBuZW9uMi5vIG5lb240 Lm8gbmVvbjgubyByZQogcmFpZDZfcHEtJChDT05GSUdfUzM5MCkgKz0gczM5MHZ4OC5vIHJlY292 X3MzOTB4Yy5vCiByYWlkNl9wcS0kKENPTkZJR19MT09OR0FSQ0gpICs9IGxvb25nYXJjaF9zaW1k Lm8gcmVjb3ZfbG9vbmdhcmNoX3NpbWQubwogcmFpZDZfcHEtJChDT05GSUdfUklTQ1ZfSVNBX1Yp ICs9IHJ2di5vIHJlY292X3J2di5vCi1DRkxBR1NfcnZ2Lm8gKz0gLW1hcmNoPXJ2NjRnY3YKLUNG TEFHU19yZWNvdl9ydnYubyArPSAtbWFyY2g9cnY2NGdjdgogCiBob3N0cHJvZ3MJKz0gbWt0YWJs ZXMKIApkaWZmIC0tZ2l0IGEvbGliL3JhaWQ2L3JlY292X3J2di5jIGIvbGliL3JhaWQ2L3JlY292 X3J2di5jCmluZGV4IDhhZTc0ODAzZWE3Zi4uMDJiOTdkODg1NTEwIDEwMDY0NAotLS0gYS9saWIv cmFpZDYvcmVjb3ZfcnZ2LmMKKysrIGIvbGliL3JhaWQ2L3JlY292X3J2di5jCkBAIC0xNyw2ICsx Nyw3IEBAIHN0YXRpYyB2b2lkIF9fcmFpZDZfMmRhdGFfcmVjb3ZfcnZ2KGludCBieXRlcywgdTgg KnAsIHU4ICpxLCB1OCAqZHAsCiAJCSIub3B0aW9uCXB1c2hcbiIKIAkJIi5vcHRpb24JYXJjaCwr dlxuIgogCQkidnNldHZsaQl4MCwgJVthdmxdLCBlOCwgbTEsIHRhLCBtYVxuIgorCQkiLm9wdGlv bglwb3BcbiIKIAkJOiA6CiAJCVthdmxdInIiKDE2KQogCSk7CkBAIC00Miw2ICs0Myw4IEBAIHN0 YXRpYyB2b2lkIF9fcmFpZDZfMmRhdGFfcmVjb3ZfcnZ2KGludCBieXRlcywgdTggKnAsIHU4ICpx LCB1OCAqZHAsCiAJCSAqIHYxNDpwL3FtW3Z4XSwgdjE1OnAvcW1bdnldCiAJCSAqLwogCQlhc20g dm9sYXRpbGUgKAorCQkJIi5vcHRpb24JcHVzaFxuIgorCQkJIi5vcHRpb24JYXJjaCwrdlxuIgog CQkJInZsZTgudgkJdjAsICglW3B4XSlcbiIKIAkJCSJ2bGU4LnYJCXYxLCAoJVtkcF0pXG4iCiAJ CQkidnhvci52dgl2MCwgdjAsIHYxXG4iCkBAIC02Nyw2ICs3MCw3IEBAIHN0YXRpYyB2b2lkIF9f cmFpZDZfMmRhdGFfcmVjb3ZfcnZ2KGludCBieXRlcywgdTggKnAsIHU4ICpxLCB1OCAqZHAsCiAJ CQkidnhvci52dgl2MSwgdjMsIHYwXG4iIC8qIHYxID0gZGIgXiBweDsgKi8KIAkJCSJ2c2U4LnYJ CXYzLCAoJVtkcV0pXG4iCiAJCQkidnNlOC52CQl2MSwgKCVbZHBdKVxuIgorCQkJIi5vcHRpb24J cG9wXG4iCiAJCQk6IDoKIAkJCVtweF0iciIocCksCiAJCQlbZHBdInIiKGRwKSwKQEAgLTg0LDgg Kzg4LDYgQEAgc3RhdGljIHZvaWQgX19yYWlkNl8yZGF0YV9yZWNvdl9ydnYoaW50IGJ5dGVzLCB1 OCAqcCwgdTggKnEsIHU4ICpkcCwKIAkJZHAgKz0gMTY7CiAJCWRxICs9IDE2OwogCX0KLQotCWFz bSB2b2xhdGlsZSAoIi5vcHRpb24gcG9wXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19yYWlkNl9k YXRhcF9yZWNvdl9ydnYoaW50IGJ5dGVzLCB1aW50OF90ICpwLCB1aW50OF90ICpxLCB1aW50OF90 ICpkcSwKQEAgLTk1LDYgKzk3LDcgQEAgc3RhdGljIHZvaWQgX19yYWlkNl9kYXRhcF9yZWNvdl9y dnYoaW50IGJ5dGVzLCB1aW50OF90ICpwLCB1aW50OF90ICpxLCB1aW50OF90ICoKIAkJIi5vcHRp b24JcHVzaFxuIgogCQkiLm9wdGlvbglhcmNoLCt2XG4iCiAJCSJ2c2V0dmxpCXgwLCAlW2F2bF0s IGU4LCBtMSwgdGEsIG1hXG4iCisJCSIub3B0aW9uCXBvcFxuIgogCQk6IDoKIAkJW2F2bF0iciIo MTYpCiAJKTsKQEAgLTExMyw2ICsxMTYsOCBAQCBzdGF0aWMgdm9pZCBfX3JhaWQ2X2RhdGFwX3Jl Y292X3J2dihpbnQgYnl0ZXMsIHVpbnQ4X3QgKnAsIHVpbnQ4X3QgKnEsIHVpbnQ4X3QgKgogCQkg KiB2MTA6bVt2eF0sIHYxMTptW3Z5XQogCQkgKi8KIAkJYXNtIHZvbGF0aWxlICgKKwkJCSIub3B0 aW9uCXB1c2hcbiIKKwkJCSIub3B0aW9uCWFyY2gsK3ZcbiIKIAkJCSJ2bGU4LnYJCXYwLCAoJVt2 eF0pXG4iCiAJCQkidmxlOC52CQl2MiwgKCVbZHFdKVxuIgogCQkJInZ4b3IudnYJdjAsIHYwLCB2 MlxuIgpAQCAtMTI3LDYgKzEzMiw3IEBAIHN0YXRpYyB2b2lkIF9fcmFpZDZfZGF0YXBfcmVjb3Zf cnZ2KGludCBieXRlcywgdWludDhfdCAqcCwgdWludDhfdCAqcSwgdWludDhfdCAqCiAJCQkidnhv ci52dgl2MSwgdjAsIHYxXG4iCiAJCQkidnNlOC52CQl2MCwgKCVbZHFdKVxuIgogCQkJInZzZTgu dgkJdjEsICglW3Z5XSlcbiIKKwkJCSIub3B0aW9uCXBvcFxuIgogCQkJOiA6CiAJCQlbdnhdInIi KHEpLAogCQkJW3Z5XSJyIihwKSwKQEAgLTE0MCw4ICsxNDYsNiBAQCBzdGF0aWMgdm9pZCBfX3Jh aWQ2X2RhdGFwX3JlY292X3J2dihpbnQgYnl0ZXMsIHVpbnQ4X3QgKnAsIHVpbnQ4X3QgKnEsIHVp bnQ4X3QgKgogCQlxICs9IDE2OwogCQlkcSArPSAxNjsKIAl9Ci0KLQlhc20gdm9sYXRpbGUgKCIu b3B0aW9uIHBvcFxuIik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbGliL3JhaWQ2L3J2di5jIGIvbGli L3JhaWQ2L3J2di5jCmluZGV4IDIxZjU0MzI1MDZkYS4uODFiMzhkY2FmZWI2IDEwMDY0NAotLS0g YS9saWIvcmFpZDYvcnZ2LmMKKysrIGIvbGliL3JhaWQ2L3J2di5jCkBAIC0zMSwxNCArMzEsMTgg QEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2MV9nZW5fc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIHVu c2lnbmVkIGxvbmcgYnl0ZXMsIHZvaWQgKioKIAkJIi5vcHRpb24JcHVzaFxuIgogCQkiLm9wdGlv bglhcmNoLCt2XG4iCiAJCSJ2c2V0dmxpCXQwLCB4MCwgZTgsIG0xLCB0YSwgbWFcbiIKKwkJIi5v cHRpb24JcG9wXG4iCiAJKTsKIAogCSAvKiB2MDp3cDAsIHYxOndxMCwgdjI6d2QwL3cyMCwgdjM6 dzEwICovCiAJZm9yIChkID0gMCA7IGQgPCBieXRlcyA7IGQgKz0gTlNJWkUqMSkgewogCQkvKiB3 cSQkID0gd3AkJCA9ICoodW5hdGl2ZV90ICopJmRwdHJbejBdW2QrJCQqTlNJWkVdOyAqLwogCQlh c20gdm9sYXRpbGUgKAorCQkJIi5vcHRpb24JcHVzaFxuIgorCQkJIi5vcHRpb24JYXJjaCwrdlxu IgogCQkJInZsZTgudgl2MCwgKCVbd3AwXSlcbiIKIAkJCSJ2bGU4LnYJdjEsICglW3dwMF0pXG4i CisJCQkiLm9wdGlvbglwb3BcbiIKIAkJCTogOgogCQkJW3dwMF0iciIoJmRwdHJbejBdW2QrMCpO U0laRV0pCiAJCSk7CkBAIC01NCw2ICs1OCw4IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djFfZ2Vu X3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJ CQkgKiB3cCQkIF49IHdkJCQ7CiAJCQkgKi8KIAkJCWFzbSB2b2xhdGlsZSAoCisJCQkJIi5vcHRp b24JcHVzaFxuIgorCQkJCSIub3B0aW9uCWFyY2gsK3ZcbiIKIAkJCQkidnNyYS52aQl2MiwgdjEs IDdcbiIKIAkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKIAkJCQkidmFuZC52eAl2MiwgdjIsICVb eDFkXVxuIgpAQCAtNjEsNiArNjcsNyBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnYxX2dlbl9zeW5k cm9tZV9yZWFsKGludCBkaXNrcywgdW5zaWduZWQgbG9uZyBieXRlcywgdm9pZCAqKgogCQkJCSJ2 bGU4LnYJCXYyLCAoJVt3ZDBdKVxuIgogCQkJCSJ2eG9yLnZ2CXYxLCB2MywgdjJcbiIKIAkJCQki dnhvci52dgl2MCwgdjAsIHYyXG4iCisJCQkJIi5vcHRpb24JcG9wXG4iCiAJCQkJOiA6CiAJCQkJ W3dkMF0iciIoJmRwdHJbel1bZCswKk5TSVpFXSksCiAJCQkJW3gxZF0iciIoMHgxZCkKQEAgLTcy LDE1ICs3OSwxNiBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnYxX2dlbl9zeW5kcm9tZV9yZWFsKGlu dCBkaXNrcywgdW5zaWduZWQgbG9uZyBieXRlcywgdm9pZCAqKgogCQkgKiAqKHVuYXRpdmVfdCAq KSZxW2QrTlNJWkUqJCRdID0gd3EkJDsKIAkJICovCiAJCWFzbSB2b2xhdGlsZSAoCisJCQkiLm9w dGlvbglwdXNoXG4iCisJCQkiLm9wdGlvbglhcmNoLCt2XG4iCiAJCQkidnNlOC52CQl2MCwgKCVb d3AwXSlcbiIKIAkJCSJ2c2U4LnYJCXYxLCAoJVt3cTBdKVxuIgorCQkJIi5vcHRpb24JcG9wXG4i CiAJCQk6IDoKIAkJCVt3cDBdInIiKCZwW2QrTlNJWkUqMF0pLAogCQkJW3dxMF0iciIoJnFbZCtO U0laRSowXSkKIAkJKTsKIAl9Ci0KLQlhc20gdm9sYXRpbGUgKCIub3B0aW9uIHBvcFxuIik7CiB9 CiAKIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djFfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBp bnQgc3RhcnQsIGludCBzdG9wLApAQCAtOTgsMTQgKzEwNiwxOCBAQCBzdGF0aWMgdm9pZCByYWlk Nl9ydnYxX3hvcl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgaW50IHN0YXJ0LCBpbnQgc3RvcCwK IAkJIi5vcHRpb24gcHVzaFxuIgogCQkiLm9wdGlvbiBhcmNoLCt2XG4iCiAJCSJ2c2V0dmxpCXQw LCB4MCwgZTgsIG0xLCB0YSwgbWFcbiIKKwkJIi5vcHRpb24JcG9wXG4iCiAJKTsKIAogCS8qIHYw OndwMCwgdjE6d3EwLCB2Mjp3ZDAvdzIwLCB2Mzp3MTAgKi8KIAlmb3IgKGQgPSAwIDsgZCA8IGJ5 dGVzIDsgZCArPSBOU0laRSoxKSB7CiAJCS8qIHdxJCQgPSB3cCQkID0gKih1bmF0aXZlX3QgKikm ZHB0clt6MF1bZCskJCpOU0laRV07ICovCiAJCWFzbSB2b2xhdGlsZSAoCisJCQkiLm9wdGlvbglw dXNoXG4iCisJCQkiLm9wdGlvbglhcmNoLCt2XG4iCiAJCQkidmxlOC52CXYwLCAoJVt3cDBdKVxu IgogCQkJInZsZTgudgl2MSwgKCVbd3AwXSlcbiIKKwkJCSIub3B0aW9uCXBvcFxuIgogCQkJOiA6 CiAJCQlbd3AwXSJyIigmZHB0clt6MF1bZCswKk5TSVpFXSkKIAkJKTsKQEAgLTEyMiw2ICsxMzQs OCBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnYxX3hvcl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywg aW50IHN0YXJ0LCBpbnQgc3RvcCwKIAkJCSAqIHdwJCQgXj0gd2QkJDsKIAkJCSAqLwogCQkJYXNt IHZvbGF0aWxlICgKKwkJCQkiLm9wdGlvbglwdXNoXG4iCisJCQkJIi5vcHRpb24JYXJjaCwrdlxu IgogCQkJCSJ2c3JhLnZpCXYyLCB2MSwgN1xuIgogCQkJCSJ2c2xsLnZpCXYzLCB2MSwgMVxuIgog CQkJCSJ2YW5kLnZ4CXYyLCB2MiwgJVt4MWRdXG4iCkBAIC0xMjksNiArMTQzLDcgQEAgc3RhdGlj IHZvaWQgcmFpZDZfcnZ2MV94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIGludCBzdGFydCwg aW50IHN0b3AsCiAJCQkJInZsZTgudgkJdjIsICglW3dkMF0pXG4iCiAJCQkJInZ4b3IudnYJdjEs IHYzLCB2MlxuIgogCQkJCSJ2eG9yLnZ2CXYwLCB2MCwgdjJcbiIKKwkJCQkiLm9wdGlvbglwb3Bc biIKIAkJCQk6IDoKIAkJCQlbd2QwXSJyIigmZHB0clt6XVtkKzAqTlNJWkVdKSwKIAkJCQlbeDFk XSJyIigweDFkKQpAQCAtMTQ0LDEwICsxNTksMTMgQEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2MV94 b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIGludCBzdGFydCwgaW50IHN0b3AsCiAJCQkgKiB3 cSQkID0gdzEkJCBeIHcyJCQ7CiAJCQkgKi8KIAkJCWFzbSB2b2xhdGlsZSAoCisJCQkJIi5vcHRp b24JcHVzaFxuIgorCQkJCSIub3B0aW9uCWFyY2gsK3ZcbiIKIAkJCQkidnNyYS52aQl2MiwgdjEs IDdcbiIKIAkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKIAkJCQkidmFuZC52eAl2MiwgdjIsICVb eDFkXVxuIgogCQkJCSJ2eG9yLnZ2CXYxLCB2MywgdjJcbiIKKwkJCQkiLm9wdGlvbglwb3BcbiIK IAkJCQk6IDoKIAkJCQlbeDFkXSJyIigweDFkKQogCQkJKTsKQEAgLTE1OSwxOSArMTc3LDIwIEBA IHN0YXRpYyB2b2lkIHJhaWQ2X3J2djFfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBpbnQg c3RhcnQsIGludCBzdG9wLAogCQkgKiB2MDp3cDAsIHYxOndxMCwgdjI6cDAsIHYzOnEwCiAJCSAq LwogCQlhc20gdm9sYXRpbGUgKAorCQkJIi5vcHRpb24JcHVzaFxuIgorCQkJIi5vcHRpb24JYXJj aCwrdlxuIgogCQkJInZsZTgudgkJdjIsICglW3dwMF0pXG4iCiAJCQkidmxlOC52CQl2MywgKCVb d3EwXSlcbiIKIAkJCSJ2eG9yLnZ2CXYyLCB2MiwgdjBcbiIKIAkJCSJ2eG9yLnZ2CXYzLCB2Mywg djFcbiIKIAkJCSJ2c2U4LnYJCXYyLCAoJVt3cDBdKVxuIgogCQkJInZzZTgudgkJdjMsICglW3dx MF0pXG4iCisJCQkiLm9wdGlvbglwb3BcbiIKIAkJCTogOgogCQkJW3dwMF0iciIoJnBbZCtOU0la RSowXSksCiAJCQlbd3EwXSJyIigmcVtkK05TSVpFKjBdKQogCQkpOwogCX0KLQotCWFzbSB2b2xh dGlsZSAoIi5vcHRpb24gcG9wXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcmFpZDZfcnZ2Ml9nZW5f c3luZHJvbWVfcmVhbChpbnQgZGlza3MsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHZvaWQgKipwdHJz KQpAQCAtMTg4LDYgKzIwNyw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djJfZ2VuX3N5bmRyb21l X3JlYWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJCSIub3B0aW9u CXB1c2hcbiIKIAkJIi5vcHRpb24JYXJjaCwrdlxuIgogCQkidnNldHZsaQl0MCwgeDAsIGU4LCBt MSwgdGEsIG1hXG4iCisJCSIub3B0aW9uCXBvcFxuIgogCSk7CiAKIAkvKgpAQCAtMTk3LDEwICsy MTcsMTMgQEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2Ml9nZW5fc3luZHJvbWVfcmVhbChpbnQgZGlz a3MsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHZvaWQgKioKIAlmb3IgKGQgPSAwIDsgZCA8IGJ5dGVz IDsgZCArPSBOU0laRSoyKSB7CiAJCS8qIHdxJCQgPSB3cCQkID0gKih1bmF0aXZlX3QgKikmZHB0 clt6MF1bZCskJCpOU0laRV07ICovCiAJCWFzbSB2b2xhdGlsZSAoCisJCQkiLm9wdGlvbglwdXNo XG4iCisJCQkiLm9wdGlvbglhcmNoLCt2XG4iCiAJCQkidmxlOC52CXYwLCAoJVt3cDBdKVxuIgog CQkJInZsZTgudgl2MSwgKCVbd3AwXSlcbiIKIAkJCSJ2bGU4LnYJdjQsICglW3dwMV0pXG4iCiAJ CQkidmxlOC52CXY1LCAoJVt3cDFdKVxuIgorCQkJIi5vcHRpb24JcG9wXG4iCiAJCQk6IDoKIAkJ CVt3cDBdInIiKCZkcHRyW3owXVtkKzAqTlNJWkVdKSwKIAkJCVt3cDFdInIiKCZkcHRyW3owXVtk KzEqTlNJWkVdKQpAQCAtMjE3LDYgKzI0MCw4IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djJfZ2Vu X3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJ CQkgKiB3cCQkIF49IHdkJCQ7CiAJCQkgKi8KIAkJCWFzbSB2b2xhdGlsZSAoCisJCQkJIi5vcHRp b24JcHVzaFxuIgorCQkJCSIub3B0aW9uCWFyY2gsK3ZcbiIKIAkJCQkidnNyYS52aQl2MiwgdjEs IDdcbiIKIAkJCQkidnNsbC52aQl2MywgdjEsIDFcbiIKIAkJCQkidmFuZC52eAl2MiwgdjIsICVb eDFkXVxuIgpAQCAtMjMyLDYgKzI1Nyw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djJfZ2VuX3N5 bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJCQkJ InZsZTgudgkJdjYsICglW3dkMV0pXG4iCiAJCQkJInZ4b3IudnYJdjUsIHY3LCB2NlxuIgogCQkJ CSJ2eG9yLnZ2CXY0LCB2NCwgdjZcbiIKKwkJCQkiLm9wdGlvbglwb3BcbiIKIAkJCQk6IDoKIAkJ CQlbd2QwXSJyIigmZHB0clt6XVtkKzAqTlNJWkVdKSwKIAkJCQlbd2QxXSJyIigmZHB0clt6XVtk KzEqTlNJWkVdKSwKQEAgLTI0NCwxMCArMjcwLDEzIEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djJf Z2VuX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoq CiAJCSAqICoodW5hdGl2ZV90ICopJnFbZCtOU0laRSokJF0gPSB3cSQkOwogCQkgKi8KIAkJYXNt IHZvbGF0aWxlICgKKwkJCSIub3B0aW9uCXB1c2hcbiIKKwkJCSIub3B0aW9uCWFyY2gsK3ZcbiIK IAkJCSJ2c2U4LnYJCXYwLCAoJVt3cDBdKVxuIgogCQkJInZzZTgudgkJdjEsICglW3dxMF0pXG4i CiAJCQkidnNlOC52CQl2NCwgKCVbd3AxXSlcbiIKIAkJCSJ2c2U4LnYJCXY1LCAoJVt3cTFdKVxu IgorCQkJIi5vcHRpb24JcG9wXG4iCiAJCQk6IDoKIAkJCVt3cDBdInIiKCZwW2QrTlNJWkUqMF0p LAogCQkJW3dxMF0iciIoJnFbZCtOU0laRSowXSksCkBAIC0yNTUsOCArMjg0LDYgQEAgc3RhdGlj IHZvaWQgcmFpZDZfcnZ2Ml9nZW5fc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIHVuc2lnbmVkIGxv bmcgYnl0ZXMsIHZvaWQgKioKIAkJCVt3cTFdInIiKCZxW2QrTlNJWkUqMV0pCiAJCSk7CiAJfQot Ci0JYXNtIHZvbGF0aWxlICgiLm9wdGlvbiBwb3BcbiIpOwogfQogCiBzdGF0aWMgdm9pZCByYWlk Nl9ydnYyX3hvcl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgaW50IHN0YXJ0LCBpbnQgc3RvcCwK QEAgLTI3NCw2ICszMDEsNyBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnYyX3hvcl9zeW5kcm9tZV9y ZWFsKGludCBkaXNrcywgaW50IHN0YXJ0LCBpbnQgc3RvcCwKIAkJIi5vcHRpb24gcHVzaFxuIgog CQkiLm9wdGlvbiBhcmNoLCt2XG4iCiAJCSJ2c2V0dmxpCXQwLCB4MCwgZTgsIG0xLCB0YSwgbWFc biIKKwkJIi5vcHRpb24JcG9wXG4iCiAJKTsKIAogCS8qCkBAIC0yODMsMTAgKzMxMSwxMyBAQCBz dGF0aWMgdm9pZCByYWlkNl9ydnYyX3hvcl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgaW50IHN0 YXJ0LCBpbnQgc3RvcCwKIAlmb3IgKGQgPSAwIDsgZCA8IGJ5dGVzIDsgZCArPSBOU0laRSoyKSB7 CiAJCSAvKiB3cSQkID0gd3AkJCA9ICoodW5hdGl2ZV90ICopJmRwdHJbejBdW2QrJCQqTlNJWkVd OyAqLwogCQlhc20gdm9sYXRpbGUgKAorCQkJIi5vcHRpb24JcHVzaFxuIgorCQkJIi5vcHRpb24J YXJjaCwrdlxuIgogCQkJInZsZTgudgl2MCwgKCVbd3AwXSlcbiIKIAkJCSJ2bGU4LnYJdjEsICgl W3dwMF0pXG4iCiAJCQkidmxlOC52CXY0LCAoJVt3cDFdKVxuIgogCQkJInZsZTgudgl2NSwgKCVb d3AxXSlcbiIKKwkJCSIub3B0aW9uCXBvcFxuIgogCQkJOiA6CiAJCQlbd3AwXSJyIigmZHB0clt6 MF1bZCswKk5TSVpFXSksCiAJCQlbd3AxXSJyIigmZHB0clt6MF1bZCsxKk5TSVpFXSkKQEAgLTMw NCw2ICszMzUsOCBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnYyX3hvcl9zeW5kcm9tZV9yZWFsKGlu dCBkaXNrcywgaW50IHN0YXJ0LCBpbnQgc3RvcCwKIAkJCSAqIHdwJCQgXj0gd2QkJDsKIAkJCSAq LwogCQkJYXNtIHZvbGF0aWxlICgKKwkJCQkiLm9wdGlvbiBwdXNoXG4iCisJCQkJIi5vcHRpb24g YXJjaCwrdlxuIgogCQkJCSJ2c3JhLnZpCXYyLCB2MSwgN1xuIgogCQkJCSJ2c2xsLnZpCXYzLCB2 MSwgMVxuIgogCQkJCSJ2YW5kLnZ4CXYyLCB2MiwgJVt4MWRdXG4iCkBAIC0zMTksNiArMzUyLDcg QEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2Ml94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIGlu dCBzdGFydCwgaW50IHN0b3AsCiAJCQkJInZsZTgudgkJdjYsICglW3dkMV0pXG4iCiAJCQkJInZ4 b3IudnYJdjUsIHY3LCB2NlxuIgogCQkJCSJ2eG9yLnZ2CXY0LCB2NCwgdjZcbiIKKwkJCQkiLm9w dGlvbglwb3BcbiIKIAkJCQk6IDoKIAkJCQlbd2QwXSJyIigmZHB0clt6XVtkKzAqTlNJWkVdKSwK IAkJCQlbd2QxXSJyIigmZHB0clt6XVtkKzEqTlNJWkVdKSwKQEAgLTMzNSw2ICszNjksOCBAQCBz dGF0aWMgdm9pZCByYWlkNl9ydnYyX3hvcl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgaW50IHN0 YXJ0LCBpbnQgc3RvcCwKIAkJCSAqIHdxJCQgPSB3MSQkIF4gdzIkJDsKIAkJCSAqLwogCQkJYXNt IHZvbGF0aWxlICgKKwkJCQkiLm9wdGlvbiBwdXNoXG4iCisJCQkJIi5vcHRpb24gYXJjaCwrdlxu IgogCQkJCSJ2c3JhLnZpCXYyLCB2MSwgN1xuIgogCQkJCSJ2c2xsLnZpCXYzLCB2MSwgMVxuIgog CQkJCSJ2YW5kLnZ4CXYyLCB2MiwgJVt4MWRdXG4iCkBAIC0zNDQsNiArMzgwLDcgQEAgc3RhdGlj IHZvaWQgcmFpZDZfcnZ2Ml94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIGludCBzdGFydCwg aW50IHN0b3AsCiAJCQkJInZzbGwudmkJdjcsIHY1LCAxXG4iCiAJCQkJInZhbmQudngJdjYsIHY2 LCAlW3gxZF1cbiIKIAkJCQkidnhvci52dgl2NSwgdjcsIHY2XG4iCisJCQkJIi5vcHRpb24JcG9w XG4iCiAJCQkJOiA6CiAJCQkJW3gxZF0iciIoMHgxZCkKIAkJCSk7CkBAIC0zNTYsNiArMzkzLDgg QEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2Ml94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIGlu dCBzdGFydCwgaW50IHN0b3AsCiAJCSAqIHY0OndwMSwgdjU6d3ExLCB2NjpwMSwgdjc6cTEKIAkJ ICovCiAJCWFzbSB2b2xhdGlsZSAoCisJCQkiLm9wdGlvbiBwdXNoXG4iCisJCQkiLm9wdGlvbiBh cmNoLCt2XG4iCiAJCQkidmxlOC52CQl2MiwgKCVbd3AwXSlcbiIKIAkJCSJ2bGU4LnYJCXYzLCAo JVt3cTBdKVxuIgogCQkJInZ4b3IudnYJdjIsIHYyLCB2MFxuIgpAQCAtMzY5LDYgKzQwOCw3IEBA IHN0YXRpYyB2b2lkIHJhaWQ2X3J2djJfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBpbnQg c3RhcnQsIGludCBzdG9wLAogCQkJInZ4b3IudnYJdjcsIHY3LCB2NVxuIgogCQkJInZzZTgudgkJ djYsICglW3dwMV0pXG4iCiAJCQkidnNlOC52CQl2NywgKCVbd3ExXSlcbiIKKwkJCSIub3B0aW9u CXBvcFxuIgogCQkJOiA6CiAJCQlbd3AwXSJyIigmcFtkK05TSVpFKjBdKSwKIAkJCVt3cTBdInIi KCZxW2QrTlNJWkUqMF0pLApAQCAtMzc2LDggKzQxNiw2IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2 djJfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBpbnQgc3RhcnQsIGludCBzdG9wLAogCQkJ W3dxMV0iciIoJnFbZCtOU0laRSoxXSkKIAkJKTsKIAl9Ci0KLQlhc20gdm9sYXRpbGUgKCIub3B0 aW9uIHBvcFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfZ2VuX3N5bmRyb21lX3Jl YWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqcHRycykKQEAgLTM5NCw2 ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnY0X2dlbl9zeW5kcm9tZV9yZWFsKGludCBk aXNrcywgdW5zaWduZWQgbG9uZyBieXRlcywgdm9pZCAqKgogCQkiLm9wdGlvbglwdXNoXG4iCiAJ CSIub3B0aW9uCWFyY2gsK3ZcbiIKIAkJInZzZXR2bGkJdDAsIHgwLCBlOCwgbTEsIHRhLCBtYVxu IgorCQkiLm9wdGlvbglwb3BcbiIKIAkpOwogCiAJLyoKQEAgLTQwNSw2ICs0NDQsOCBAQCBzdGF0 aWMgdm9pZCByYWlkNl9ydnY0X2dlbl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgdW5zaWduZWQg bG9uZyBieXRlcywgdm9pZCAqKgogCWZvciAoZCA9IDAgOyBkIDwgYnl0ZXMgOyBkICs9IE5TSVpF KjQpIHsKIAkJLyogd3EkJCA9IHdwJCQgPSAqKHVuYXRpdmVfdCAqKSZkcHRyW3owXVtkKyQkKk5T SVpFXTsgKi8KIAkJYXNtIHZvbGF0aWxlICgKKwkJCSIub3B0aW9uIHB1c2hcbiIKKwkJCSIub3B0 aW9uIGFyY2gsK3ZcbiIKIAkJCSJ2bGU4LnYgdjAsICglW3dwMF0pXG4iCiAJCQkidmxlOC52IHYx LCAoJVt3cDBdKVxuIgogCQkJInZsZTgudiB2NCwgKCVbd3AxXSlcbiIKQEAgLTQxMyw2ICs0NTQs NyBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnY0X2dlbl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywg dW5zaWduZWQgbG9uZyBieXRlcywgdm9pZCAqKgogCQkJInZsZTgudiB2OSwgKCVbd3AyXSlcbiIK IAkJCSJ2bGU4LnYgdjEyLCAoJVt3cDNdKVxuIgogCQkJInZsZTgudiB2MTMsICglW3dwM10pXG4i CisJCQkiLm9wdGlvbglwb3BcbiIKIAkJCTogOgogCQkJW3dwMF0iciIoJmRwdHJbejBdW2QrMCpO U0laRV0pLAogCQkJW3dwMV0iciIoJmRwdHJbejBdW2QrMSpOU0laRV0pLApAQCAtNDMxLDYgKzQ3 Myw4IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfZ2VuX3N5bmRyb21lX3JlYWwoaW50IGRpc2tz LCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJCQkgKiB3cCQkIF49IHdkJCQ7CiAJCQkg Ki8KIAkJCWFzbSB2b2xhdGlsZSAoCisJCQkJIi5vcHRpb24gcHVzaFxuIgorCQkJCSIub3B0aW9u IGFyY2gsK3ZcbiIKIAkJCQkidnNyYS52aQl2MiwgdjEsIDdcbiIKIAkJCQkidnNsbC52aQl2Mywg djEsIDFcbiIKIAkJCQkidmFuZC52eAl2MiwgdjIsICVbeDFkXVxuIgpAQCAtNDYyLDYgKzUwNiw3 IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfZ2VuX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1 bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJCQkJInZsZTgudgkJdjE0LCAoJVt3ZDNdKVxu IgogCQkJCSJ2eG9yLnZ2CXYxMywgdjE1LCB2MTRcbiIKIAkJCQkidnhvci52dgl2MTIsIHYxMiwg djE0XG4iCisJCQkJIi5vcHRpb24JcG9wXG4iCiAJCQkJOiA6CiAJCQkJW3dkMF0iciIoJmRwdHJb el1bZCswKk5TSVpFXSksCiAJCQkJW3dkMV0iciIoJmRwdHJbel1bZCsxKk5TSVpFXSksCkBAIC00 NzYsNiArNTIxLDggQEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2NF9nZW5fc3luZHJvbWVfcmVhbChp bnQgZGlza3MsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHZvaWQgKioKIAkJICogKih1bmF0aXZlX3Qg KikmcVtkK05TSVpFKiQkXSA9IHdxJCQ7CiAJCSAqLwogCQlhc20gdm9sYXRpbGUgKAorCQkJIi5v cHRpb24gcHVzaFxuIgorCQkJIi5vcHRpb24gYXJjaCwrdlxuIgogCQkJInZzZTgudgl2MCwgKCVb d3AwXSlcbiIKIAkJCSJ2c2U4LnYJdjEsICglW3dxMF0pXG4iCiAJCQkidnNlOC52CXY0LCAoJVt3 cDFdKVxuIgpAQCAtNDg0LDYgKzUzMSw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfZ2VuX3N5 bmRyb21lX3JlYWwoaW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJCQki dnNlOC52CXY5LCAoJVt3cTJdKVxuIgogCQkJInZzZTgudgl2MTIsICglW3dwM10pXG4iCiAJCQki dnNlOC52CXYxMywgKCVbd3EzXSlcbiIKKwkJCSIub3B0aW9uCXBvcFxuIgogCQkJOiA6CiAJCQlb d3AwXSJyIigmcFtkK05TSVpFKjBdKSwKIAkJCVt3cTBdInIiKCZxW2QrTlNJWkUqMF0pLApAQCAt NDk1LDggKzU0Myw2IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfZ2VuX3N5bmRyb21lX3JlYWwo aW50IGRpc2tzLCB1bnNpZ25lZCBsb25nIGJ5dGVzLCB2b2lkICoqCiAJCQlbd3EzXSJyIigmcVtk K05TSVpFKjNdKQogCQkpOwogCX0KLQotCWFzbSB2b2xhdGlsZSAoIi5vcHRpb24gcG9wXG4iKTsK IH0KIAogc3RhdGljIHZvaWQgcmFpZDZfcnZ2NF94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3Ms IGludCBzdGFydCwgaW50IHN0b3AsCkBAIC01MTQsNiArNTYwLDcgQEAgc3RhdGljIHZvaWQgcmFp ZDZfcnZ2NF94b3Jfc3luZHJvbWVfcmVhbChpbnQgZGlza3MsIGludCBzdGFydCwgaW50IHN0b3As CiAJCSIub3B0aW9uIHB1c2hcbiIKIAkJIi5vcHRpb24gYXJjaCwrdlxuIgogCQkidnNldHZsaQl0 MCwgeDAsIGU4LCBtMSwgdGEsIG1hXG4iCisJCSIub3B0aW9uCXBvcFxuIgogCSk7CiAKIAkvKgpA QCAtNTI1LDYgKzU3Miw4IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfeG9yX3N5bmRyb21lX3Jl YWwoaW50IGRpc2tzLCBpbnQgc3RhcnQsIGludCBzdG9wLAogCWZvciAoZCA9IDAgOyBkIDwgYnl0 ZXMgOyBkICs9IE5TSVpFKjQpIHsKIAkJIC8qIHdxJCQgPSB3cCQkID0gKih1bmF0aXZlX3QgKikm ZHB0clt6MF1bZCskJCpOU0laRV07ICovCiAJCWFzbSB2b2xhdGlsZSAoCisJCQkiLm9wdGlvbiBw dXNoXG4iCisJCQkiLm9wdGlvbiBhcmNoLCt2XG4iCiAJCQkidmxlOC52IHYwLCAoJVt3cDBdKVxu IgogCQkJInZsZTgudiB2MSwgKCVbd3AwXSlcbiIKIAkJCSJ2bGU4LnYgdjQsICglW3dwMV0pXG4i CkBAIC01MzMsNiArNTgyLDcgQEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2NF94b3Jfc3luZHJvbWVf cmVhbChpbnQgZGlza3MsIGludCBzdGFydCwgaW50IHN0b3AsCiAJCQkidmxlOC52IHY5LCAoJVt3 cDJdKVxuIgogCQkJInZsZTgudiB2MTIsICglW3dwM10pXG4iCiAJCQkidmxlOC52IHYxMywgKCVb d3AzXSlcbiIKKwkJCSIub3B0aW9uCXBvcFxuIgogCQkJOiA6CiAJCQlbd3AwXSJyIigmZHB0clt6 MF1bZCswKk5TSVpFXSksCiAJCQlbd3AxXSJyIigmZHB0clt6MF1bZCsxKk5TSVpFXSksCkBAIC01 NTIsNiArNjAyLDggQEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2NF94b3Jfc3luZHJvbWVfcmVhbChp bnQgZGlza3MsIGludCBzdGFydCwgaW50IHN0b3AsCiAJCQkgKiB3cCQkIF49IHdkJCQ7CiAJCQkg Ki8KIAkJCWFzbSB2b2xhdGlsZSAoCisJCQkJIi5vcHRpb24gcHVzaFxuIgorCQkJCSIub3B0aW9u IGFyY2gsK3ZcbiIKIAkJCQkidnNyYS52aQl2MiwgdjEsIDdcbiIKIAkJCQkidnNsbC52aQl2Mywg djEsIDFcbiIKIAkJCQkidmFuZC52eAl2MiwgdjIsICVbeDFkXVxuIgpAQCAtNTgzLDYgKzYzNSw3 IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBp bnQgc3RhcnQsIGludCBzdG9wLAogCQkJCSJ2bGU4LnYJCXYxNCwgKCVbd2QzXSlcbiIKIAkJCQki dnhvci52dgl2MTMsIHYxNSwgdjE0XG4iCiAJCQkJInZ4b3IudnYJdjEyLCB2MTIsIHYxNFxuIgor CQkJCSIub3B0aW9uCXBvcFxuIgogCQkJCTogOgogCQkJCVt3ZDBdInIiKCZkcHRyW3pdW2QrMCpO U0laRV0pLAogCQkJCVt3ZDFdInIiKCZkcHRyW3pdW2QrMSpOU0laRV0pLApAQCAtNjAxLDYgKzY1 NCw4IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tz LCBpbnQgc3RhcnQsIGludCBzdG9wLAogCQkJICogd3EkJCA9IHcxJCQgXiB3MiQkOwogCQkJICov CiAJCQlhc20gdm9sYXRpbGUgKAorCQkJCSIub3B0aW9uIHB1c2hcbiIKKwkJCQkiLm9wdGlvbiBh cmNoLCt2XG4iCiAJCQkJInZzcmEudmkJdjIsIHYxLCA3XG4iCiAJCQkJInZzbGwudmkJdjMsIHYx LCAxXG4iCiAJCQkJInZhbmQudngJdjIsIHYyLCAlW3gxZF1cbiIKQEAgLTYyMCw2ICs2NzUsNyBA QCBzdGF0aWMgdm9pZCByYWlkNl9ydnY0X3hvcl9zeW5kcm9tZV9yZWFsKGludCBkaXNrcywgaW50 IHN0YXJ0LCBpbnQgc3RvcCwKIAkJCQkidnNsbC52aQl2MTUsIHYxMywgMVxuIgogCQkJCSJ2YW5k LnZ4CXYxNCwgdjE0LCAlW3gxZF1cbiIKIAkJCQkidnhvci52dgl2MTMsIHYxNSwgdjE0XG4iCisJ CQkJIi5vcHRpb24JcG9wXG4iCiAJCQkJOiA6CiAJCQkJW3gxZF0iciIoMHgxZCkKIAkJCSk7CkBA IC02MzQsNiArNjkwLDggQEAgc3RhdGljIHZvaWQgcmFpZDZfcnZ2NF94b3Jfc3luZHJvbWVfcmVh bChpbnQgZGlza3MsIGludCBzdGFydCwgaW50IHN0b3AsCiAJCSAqIHYxMjp3cDMsIHYxMzp3cTMs IHYxNDpwMywgdjE1OnEzCiAJCSAqLwogCQlhc20gdm9sYXRpbGUgKAorCQkJIi5vcHRpb24gcHVz aFxuIgorCQkJIi5vcHRpb24gYXJjaCwrdlxuIgogCQkJInZsZTgudgkJdjIsICglW3dwMF0pXG4i CiAJCQkidmxlOC52CQl2MywgKCVbd3EwXSlcbiIKIAkJCSJ2eG9yLnZ2CXYyLCB2MiwgdjBcbiIK QEAgLTY2MSw2ICs3MTksNyBAQCBzdGF0aWMgdm9pZCByYWlkNl9ydnY0X3hvcl9zeW5kcm9tZV9y ZWFsKGludCBkaXNrcywgaW50IHN0YXJ0LCBpbnQgc3RvcCwKIAkJCSJ2eG9yLnZ2CXYxNSwgdjE1 LCB2MTNcbiIKIAkJCSJ2c2U4LnYJCXYxNCwgKCVbd3AzXSlcbiIKIAkJCSJ2c2U4LnYJCXYxNSwg KCVbd3EzXSlcbiIKKwkJCSIub3B0aW9uCXBvcFxuIgogCQkJOiA6CiAJCQlbd3AwXSJyIigmcFtk K05TSVpFKjBdKSwKIAkJCVt3cTBdInIiKCZxW2QrTlNJWkUqMF0pLApAQCAtNjcyLDggKzczMSw2 IEBAIHN0YXRpYyB2b2lkIHJhaWQ2X3J2djRfeG9yX3N5bmRyb21lX3JlYWwoaW50IGRpc2tzLCBp bnQgc3RhcnQsIGludCBzdG9wLAogCQkJW3dxM10iciIoJnFbZCtOU0laRSozXSkKIAkJKTsKIAl9 Ci0KLQlhc20gdm9sYXRpbGUgKCIub3B0aW9uIHBvcFxuIik7CiB9CiAKICNkZWZpbmUgUkFJRDZf UlZWX1dSQVBQRVIoX24pCQkJCQkJXAotLSAKMi4zNC4xCgoKLSBDaGFybGllCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGlu ZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=