From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id E149B3858D20; Tue, 1 Mar 2022 15:34:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E149B3858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.90,146,1643702400"; d="diff'?scan'208";a="75128092" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 01 Mar 2022 07:34:35 -0800 IronPort-SDR: rMkNi9gNFoPyrCMn5wDnXC9VXj9UGtAIVMKGAjn7PP896ISlWaEGDqHBhLW9GeNvtdVYpSO1BO L/ZEaC0TMcCx9jlYFGbPmQ2z4aMlqajmTEmWzfn6T6XVm3bIFqQOw0RrSeTil1rKW96KFujgfr kNZkeeg93QzuV8ukQt8En+yX5dbd6gY8P44oZTQ95+MzEHNkYekp7prm9lCRJ2oYH/6/dartsc IC7pv2dg+VMqlGmwVngw6TqrbpHdAlnmuCxPwRZ/wBhZjLAqoSOAdxLk3ql1nC2IB3/NF4ZQt9 35E= Content-Type: multipart/mixed; boundary="------------oH3woNa1I1dFVWSQRr6MpMEB" Message-ID: Date: Tue, 1 Mar 2022 16:34:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch][Stage 1] Fortran/OpenMP: Support mapping of DT with allocatable components X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-07.mgc.mentorg.com (139.181.222.7) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, KAM_STOCKGEN, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Mar 2022 15:34:42 -0000 --------------oH3woNa1I1dFVWSQRr6MpMEB Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Hi all, this patch adds support for mapping something like type t type(t2), allocatable :: a, b(:) integer, allocatable :: c, c(:) end type t type(t), allocatable :: var, var2(:,:) !$omp target enter data map(var, var) which does a deep walk of the components at runtime. On the ME side, the static addr/size/kinds arrays are replaced (only if need) by allocatable arrays =E2=80=93 which are then filled by trans-openmp.c. All deep-mapping handling happens via the hooks called late in omp-low.c such that removing mappings or implicitly added one are handled. In principle, there is also code to handle polymorphic variables (new callback function in vtable + two on-the-fly generated functions to be used for walking the vtable). Issues: None known, but I am sure with experimenting, more can be found - especially with arrays/array sections and polymorphism, I expect issues. I did find some on the way and fixed them - but (see PR refs in testcase -7.f90), I also found unrelated bugs, which I did not fix ;-) Comments? OK for mainline (GCC 13)? Tobias PS: I will commit this patch to OG11 for further testing. PPS: Previously discussed at https://gcc.gnu.org/pipermail/gcc-patches/2021-December/586237.html ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------oH3woNa1I1dFVWSQRr6MpMEB Content-Type: text/x-patch; charset="UTF-8"; name="deepmap-map-v17.diff" Content-Disposition: attachment; filename="deepmap-map-v17.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IFN1cHBvcnQgbWFwcGluZyBvZiBEVCB3aXRoIGFsbG9jYXRhYmxl IGNvbXBvbmVudHMKCmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCgkqIGNsYXNzLmNjIChmaW5h bGl6YXRpb25fc2NhbGFyaXplcik6IE1hcmsgc3ltcyBhcyBhcnRpZmljaWFsLgoJKGdlbmVy YXRlX2NhbGxiYWNrX3dyYXBwZXIpOiBOZXcuCgkoZ2ZjX2ZpbmRfZGVyaXZlZF92dGFiKTog Q2FsbCBpdCwgYWRkIF9jYWxsYmFjayBjb21wLgoJKiBmOTUtbGFuZy5jYyAoTEFOR19IT09L U19PTVBfREVFUF9NQVBQSU5HLAoJTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HX1AsCglM QU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkdfQ05UKTogUmVkZWluZmUKCSogZ2ZvcnRyYW4u aCAoZ2ZjX2ltcG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSwKCUdGQ19DTEFTU19DQUxMQkFD S19ERUZBVUxUX0ZMQUcsIEdGQ19DTEFTU19DQUxMQkFDS19WVEFCTEVfRkxBRywKCUdGQ19D TEFTU19DQl9BTExPQ0FUQUJMRSwgR0ZDX0NMQVNTX0NCX1BPSU5URVIsCglHRkNfQ0xBU1Nf Q0JfUFJPQ19QT0lOVEVSLCBHRkNfQ0xBU1NfQ0JfVlRBQkxFLAoJR0ZDX0NMQVNTX0NCX1ZQ VFIpOiBOZXcuCgkqIG1hdGNoLmNjIChzZWxlY3RfdHlwZV9zZXRfdG1wKTogUHJvcGFnYXRl IGFsbG9jYXRhYmxlIHByb3BlcnR5LgoJKiBtb2R1bGUuY2MgKE1PRF9WRVJTSU9OKTogQnVt cCBkdWUgdG8gdnRhYiBjaGFuZ2UuCgkoaW1wb3J0X2lzb19jX2JpbmRpbmdfbW9kdWxlKTog TmV3IGltcG9ydF9hbGwgYXJnLgoJKGdmY19pbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUp OiBOZXcuCgkoZ2ZjX3VzZV9tb2R1bGUpOiBVcGRhdGUgY2FsbC4KCSogb3Blbm1wLmNjIChy ZXNvbHZlX29tcF9jbGF1c2VzKTogQWNjZXB0IERUIHdpdGggYWxsb2MgY29tcHMuCgkqIHJl c29sdmUuY2MgKGdmY19yZXNvbHZlX2Zvcm1hbF9hcmdsaXN0LCBnZmNfcmVzb2x2ZV9pbnRy aW5zaWMsCglyZXNvbHZlX2ZsX3Byb2NlZHVyZSwgcmVzb2x2ZV90eXBlcyk6IFBlcm1pdCBz b21lIHZpb2xhdGlvbnMKCWZvciBpbnRlcm5hbCBjb2RlLgoJKiB0cmFucy1hcnJheS5jYyAo Z2ZjX2NvbnZfZGVzY3JpcHRvcl9zdHJpZGVfZ2V0LAoJZ2ZjX3RyZWVfYXJyYXlfc2l6ZSwg Z2ZjX2Z1bGxfYXJyYXlfc2l6ZSk6IFVwZGF0ZQogCWZvciBHRkNfVFlQRV9BUlJBWV9BS0lO RCBjaGFuZ2UuCgkoZ2ZjX2NvbnZfZXhwcl9kZXNjcmlwdG9yKTogTGlrZXdpc2U7IHBlcm1p dCBjYWxsaW5nIHdpdGggdHJlZSBjb2RlLgoJKiB0cmFucy1leHByLmNjIChWVEFCTEVfQ0FM TEJBQ0tfRklFTEQpOiBBZGQuCgkoVlRBQl9HRVRfRklFTERfR0VOKTogVXNlIGl0LgoJKFZU QUJMRV9ERUFMTE9DQVRFX0ZJRUxEKTogVW5kZWYgYXQgdGhlIGVuZC4KCShnZmNfY29udl9l eHByX3JlZmVyZW5jZSk6IEZpeGVzOyBhdm9pZCB1bm5lY2Nlc3NhcnkgdGVtcCB2YXIuCgkq IHRyYW5zLWludHJpbnNpYy5jYyAoZ2ZjX2NvbnZfaW50cmluc2ljX3NpemVvZiwKCWdmY19j b252X2Fzc29jaWF0ZWQpOiBGaXggY2xhc3MgYW5kIGNvbXAtcmVmIGhhbmRsaW5nLgoJKGNv bnZfaXNvY2JpbmRpbmdfZnVuY3Rpb24pOiBSZW1vdmUgYnVnZ3kgY29kZS4KCSogdHJhbnMt b3Blbm1wLmNjIChnZmNfaGFzX2FsbG9jX2NvbXBzKTogQWRkIHB0cl9vayBhcmcuCgkoZ2Zj X29tcF9wcml2YXRlX291dGVyX3JlZiwgZ2ZjX3dhbGtfYWxsb2NfY29tcHMsCglnZmNfb21w X2NsYXVzZV9kZWZhdWx0X2N0b3IsIGdmY19vbXBfY2xhdXNlX2NvcHlfY3RvciwKCWdmY19v bXBfY2xhdXNlX2Fzc2lnbl9vcCwgZ2ZjX29tcF9jbGF1c2VfZHRvciwKCShnZmNfb21wX2Zp bmlzaF9jbGF1c2UpOiBVcGRhdGUgY2FsbC4KCShHRkNfTUFQX1RPS0VOX0RBVEEsIEdGQ19N QVBfVE9LRU5fU0laRVMsIEdGQ19NQVBfVE9LRU5fS0lORFMsCglHRkNfTUFQX1RPS0VOX0RB VEFfT0ZGU0VULCBHRkNfTUFQX1RPS0VOX09GRlNFVCwKCUdGQ19NQVBfVE9LRU5fRkxBR1Ms IEdGQ19NQVBfVE9LRU5fREVUQUNIKTogRGVmaW5lLgoJKGdmY19vbXBfZ2V0X3Rva2VuX2Rh dGEsIGdmY19vbXBfZ2V0X3Rva2VuX3NpemVzLAoJZ2ZjX29tcF9nZXRfdG9rZW5fa2luZHMs IGdmY19vbXBfZ2V0X3Rva2VuX29mZnNldF9kYXRhLAoJZ2ZjX29tcF9nZXRfdG9rZW5fb2Zm c2V0LCBnZmNfb21wX2dldF90b2tlbl9mbGFncywKCWdmY19vbXBfZ2V0X3Rva2VuX2RldGFj aCwgZ2ZjX29tcF9nZXRfbWFwX3Rva2VuX3R5cGUsCglnZmNfb21wX2dldF9jYl90eXBlLCBn ZmNfb21wX2dlbl9kZWVwX21hcF9mbiwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX21hcCwgZ2Zj X29tcF9kZWVwX21hcHBpbmdfaXRlbSwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX2NvbXBzLCBn ZmNfb21wX2dlbl9zaW1wbGVfbG9vcCwKCWdmY19vbXBfZ2V0X2FycmF5X3NpemUsIGdmY19v bXBfZWxtZW50YWxfbG9vcCwKCWdmY19vbXBfZGVlcF9tYXBfa2luZF9wLCBnZmNfb21wX2Rl ZXBfbWFwcGluZ19pbnRfcCwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX3AsIGdmY19vbXBfZGVl cF9tYXBwaW5nX2RvKSwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX2NudCwgZ2ZjX29tcF9kZWVw X21hcHBpbmcpOiBOZXcuCgkoZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uKTogU2F2ZSBj bGF1c2UgZGVjbCB0byBzdXJ2aXZlIGdpbXBsaWZ5aW5nLiAKCShnZmNfdHJhbnNfb21wX2Ns YXVzZXMpOiBMaWtld2lzZTsgZml4ZXMuCgkqIHRyYW5zLXR5cGVzLmNjIChnZmNfYnVpbGRf YXJyYXlfdHlwZSwgZ2ZjX2dldF9kZXJpdmVkX3R5cGUsCglnZmNfZ2V0X2FycmF5X2Rlc2Ny X2luZm8pOiBVcGRhdGUgYXJyYXkga2luZCB0byBkaXN0aW5ndWlzaAoJZGlmZmVyZW50IGFz c3VtZWQtcmFuayBhcnJheXMuCgkqIHRyYW5zLmggKGdmY19jbGFzc192dGFiX2NhbGxiYWNr X2dldCwgZ2ZjX29tcF9kZWVwX21hcHBpbmdfcCwKCWdmY19vbXBfZGVlcF9tYXBwaW5nX2Nu dCwgZ2ZjX29tcF9kZWVwX21hcHBpbmcpOiBOZXcgcHJvdG90eXBlcy4KCShlbnVtIGdmY19h cnJheV9raW5kKTogQWRkaXRpb25hbCBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LXyogZW50cmll cy4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBsYW5naG9va3MtZGVmLmggKGxoZF9vbXBfZGVlcF9t YXBwaW5nX3AsCglsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQsIGxoZF9vbXBfZGVlcF9tYXBw aW5nKTogTmV3LgoJKExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElOR19QLCBMQU5HX0hPT0tT X09NUF9ERUVQX01BUFBJTkdfQ05ULAoJTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HKTog RGVmaW5lLgoJKExBTkdfSE9PS1NfREVDTFMpOiBVc2UgaXQuCgkqIGxhbmdob29rcy5jYyAo bGhkX29tcF9kZWVwX21hcHBpbmdfcCwgbGhkX29tcF9kZWVwX21hcHBpbmdfY250LAoJbGhk X29tcF9kZWVwX21hcHBpbmcpOiBOZXcgc3R1YnMuCgkqIGxhbmdob29rcy5oIChzdHJ1Y3Qg bGFuZ19ob29rc19mb3JfZGVjbHMpOiBBZGQgbmV3IGhvb2tzCgkqIG9tcC1leHBhbmQuY2Mg KGV4cGFuZF9vbXBfdGFyZ2V0KTogSGFuZGxlIGR5bmFtaWMtc2l6ZQoJYWRkci9zaXplcy9r aW5kcyBhcnJheXMuCgkqIG9tcC1sb3cuY2MgKGJ1aWxkX3NlbmRlcl9yZWYsIGZpeHVwX2No aWxkX3JlY29yZF90eXBlLAoJc2Nhbl9zaGFyaW5nX2NsYXVzZXMsIGxvd2VyX29tcF90YXJn ZXQpOiBVcGRhdGUgdG8gaGFuZGxlCgluZXcgaG9va3MgYW5kIGR5bmFtaWMtc2l6ZSBhZGRy L3NpemVzL2tpbmRzIGFycmF5cy4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogdGVzdHN1aXRl L2xpYmdvbXAub2FjYy1mb3J0cmFuL2hvc3RfZGF0YS01LkY5MDogVXBkYXRlIGRnLW5vdGUu CgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vYWxsb2NhdGFibGUtY29tcC5mOTA6IE5l dyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTMu ZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2Mt Y29tcC00LmY5MDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFw LWFsbG9jLWNvbXAtNS5mOTA6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL21hcC1hbGxvYy1jb21wLTYuZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC03LmY5MDogTmV3IHRlc3QuCgpnY2MvdGVzdHN1 aXRlL0NoYW5nZUxvZzoKCgkqIGdmb3J0cmFuLmRnL2NfbG9jX3Rlc3RfMjIuZjkwOiBVcGRh dGUgc2Nhbi10cmVlLgoJKiBnZm9ydHJhbi5kZy9maW5hbGl6ZV8yMS5mOTA6IExpa2V3aXNl LgoJKiBnZm9ydHJhbi5kZy9nb2FjYy9hcnJheS13aXRoLWR0LTEuZjkwOiBSZW1vdmUgZGct d2FybmluZy4KCSogZ2ZvcnRyYW4uZGcvZ29hY2MvcHI5MzQ2NC5mOTA6IFJlbW92ZSBkZy13 YXJuaW5nLgoJKiBnZm9ydHJhbi5kZy9nb21wL21hcC1hbGxvYy1jb21wLTEuZjkwOiBSZW1v dmUgc29ycnkgZGctZXJyb3IuCgogZ2NjL2ZvcnRyYW4vY2xhc3MuY2MgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgNTIzICsrKysrKy0KIGdjYy9mb3J0cmFuL2Y5NS1sYW5n LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnY2MvZm9ydHJhbi9n Zm9ydHJhbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwogZ2NjL2Zv cnRyYW4vbWF0Y2guY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsK IGdjYy9mb3J0cmFuL21vZHVsZS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyOCArLQogZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICA3IC0KIGdjYy9mb3J0cmFuL3Jlc29sdmUuY2MgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAxMSArLQogZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4ICstCiBnY2MvZm9ydHJhbi90cmFucy1leHBy LmNjICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KIGdjYy9mb3J0cmFuL3Ry YW5zLWludHJpbnNpYy5jYyAgICAgICAgICAgICAgICAgICAgIHwgICAzMyArLQogZ2NjL2Zv cnRyYW4vdHJhbnMtb3Blbm1wLmNjICAgICAgICAgICAgICAgICAgICAgICAgfCAxNTIxICsr KysrKysrKysrKysrKysrKystCiBnY2MvZm9ydHJhbi90cmFucy10eXBlcy5jYyAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNTAgKy0KIGdjYy9mb3J0cmFuL3RyYW5zLmggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArCiBnY2MvbGFuZ2hvb2tzLWRlZi5o ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogZ2NjL2xhbmdob29r cy5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI0ICsKIGdjYy9s YW5naG9va3MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSAr CiBnY2Mvb21wLWV4cGFuZC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMTggKy0KIGdjYy9vbXAtbG93LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDIyNCArKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY19sb2NfdGVz dF8yMi5mOTAgICAgICAgIHwgICAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9m aW5hbGl6ZV8yMS5mOTAgICAgICAgICAgfCAgICAyICstCiAuLi4vZ2ZvcnRyYW4uZGcvZ29h Y2MvYXJyYXktd2l0aC1kdC0xLmY5MCAgICAgICAgICB8ICAgIDMgLQogZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9nb2FjYy9wcjkzNDY0LmY5MCAgICAgICAgfCAgICAzIC0KIC4uLi9n Zm9ydHJhbi5kZy9nb21wL21hcC1hbGxvYy1jb21wLTEuZjkwICAgICAgICAgIHwgICAgMiAr LQogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vYWxsb2NhdGFibGUtY29tcC5mOTAg fCAgIDUzICsKIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21w LTMuZjkwIHwgIDEyMSArKwogLi4uL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFs bG9jLWNvbXAtNC5mOTAgfCAgMTI0ICsrCiAuLi4vdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJh bi9tYXAtYWxsb2MtY29tcC01LmY5MCB8ICAgNTMgKwogLi4uL3Rlc3RzdWl0ZS9saWJnb21w LmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNi5mOTAgfCAgMzA4ICsrKysKIC4uLi90ZXN0c3Vp dGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTcuZjkwIHwgIDY3MiArKysrKysr KysKIC4uLi90ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vaG9zdF9kYXRhLTUuRjkw IHwgICAgNCArCiAzMCBmaWxlcyBjaGFuZ2VkLCAzNzQ1IGluc2VydGlvbnMoKyksIDE0OSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9jbGFzcy5jYyBiL2djYy9m b3J0cmFuL2NsYXNzLmNjCmluZGV4IDczMWU5YjBmZTZhLi4yMDZiYTYzZTc1NiAxMDA2NDQK LS0tIGEvZ2NjL2ZvcnRyYW4vY2xhc3MuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vY2xhc3MuY2MK QEAgLTUxLDYgKzUxLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4gIElmIG5vdCBzZWUKIAkJIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMgYW5kIGNhbGxzIEZJ TkFMIHN1YnJvdXRpbmVzLgogICAgICogX2RlYWxsb2NhdGU6IEEgcHJvY2VkdXJlIHBvaW50 ZXIgdG8gYSBkZWFsbG9jYXRpb24gcHJvY2VkdXJlOyBub25udWxsCiAJCSBvbmx5IGZvciBh IHJlY3Vyc2l2ZSBkZXJpdmVkIHR5cGUuCisgICAgKiBfY2FsbGJhY2s6IEEgcHJvY2VkdXJl IHBvaW50ZXIsIHRha2luZyBhIGNhbGxiYWNrIHByb2MgcG9pbnRlciBhbmQKKwkJIGNhbGxp bmcgdGhhdCBvbmUgZm9yIHRoZSBEVCBhbmQgdGhlIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMu CiAKICAgIEFmdGVyIHRoZXNlIGZvbGxvdyBwcm9jZWR1cmUgcG9pbnRlciBjb21wb25lbnRz IGZvciB0aGUgc3BlY2lmaWMKICAgIHR5cGUtYm91bmQgcHJvY2VkdXJlcy4gICovCkBAIC0x MTE1LDYgKzExMTcsNyBAQCBmaW5hbGl6YXRpb25fc2NhbGFyaXplciAoZ2ZjX3N5bWJvbCAq YXJyYXksIGdmY19zeW1ib2wgKnB0ciwKICAgLyogQ19GX1BPSU5URVIoKS4gICovCiAgIGJs b2NrID0gZ2ZjX2dldF9jb2RlIChFWEVDX0NBTEwpOwogICBnZmNfZ2V0X3N5bV90cmVlICgi Y19mX3BvaW50ZXIiLCBzdWJfbnMsICZibG9jay0+c3ltdHJlZSwgdHJ1ZSk7CisgIGJsb2Nr LT5zeW10cmVlLT5uLnN5bS0+YXR0ci5hcnRpZmljaWFsID0gMTsKICAgYmxvY2stPnJlc29s dmVkX3N5bSA9IGJsb2NrLT5zeW10cmVlLT5uLnN5bTsKICAgYmxvY2stPnJlc29sdmVkX3N5 bS0+YXR0ci5mbGF2b3IgPSBGTF9QUk9DRURVUkU7CiAgIGJsb2NrLT5yZXNvbHZlZF9zeW0t PmF0dHIuaW50cmluc2ljID0gMTsKQEAgLTExMzcsNiArMTE0MCw3IEBAIGZpbmFsaXphdGlv bl9zY2FsYXJpemVyIChnZmNfc3ltYm9sICphcnJheSwgZ2ZjX3N5bWJvbCAqcHRyLAogICBl eHByID0gZ2ZjX2dldF9leHByICgpOwogICBleHByLT5leHByX3R5cGUgPSBFWFBSX0ZVTkNU SU9OOwogICBnZmNfZ2V0X3N5bV90cmVlICgiY19sb2MiLCBzdWJfbnMsICZleHByLT5zeW10 cmVlLCBmYWxzZSk7CisgIGV4cHItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmFydGlmaWNpYWwg PSAxOwogICBleHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5mbGF2b3IgPSBGTF9QUk9DRURV UkU7CiAgIGV4cHItPnN5bXRyZWUtPm4uc3ltLT5pbnRtb2Rfc3ltX2lkID0gSVNPQ0JJTkRJ TkdfTE9DOwogICBleHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5pbnRyaW5zaWMgPSAxOwpA QCAtMjI0MSw2ICsyMjQ1LDUwOSBAQCBnZW5lcmF0ZV9maW5hbGl6YXRpb25fd3JhcHBlciAo Z2ZjX3N5bWJvbCAqZGVyaXZlZCwgZ2ZjX25hbWVzcGFjZSAqbnMsCiAgIGZyZWUgKG5hbWUp OwogfQogCisvKiBHZW5lcmF0ZTogIF9fY2FsbGJhY2sgKGNiLCB0b2tlbiwgdGhpcykKKyAg IHdpdGggICBzaXplX3QgKCpjYikgKGNiX3Rva2VuLCBjYl9hZGRyLCBjYl9sZW4sIGNiX2Zs YWcsIGNiX2ZuKQorCSAgdm9pZCAqdG9rZW4KKwkgIHZvaWQgKnRoaXNfcHRyIC0gZmxhZz1H RkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUc6CisJCQkgICAgIHNjYWxhciBwb2ludGVy IHRvIHRoaXMgRFQgLT4gJ3NjYWxhcicKKwkJCSAgIGZsYWcgZmxhZz1HRkNfQ0xBU1NfQ0FM TEJBQ0tfREVGQVVMVF9GTEFHOgorCQkJICAgICB2YXIncyBfdnRhYiBjb21wb25lbnQKKwkJ QXNzdW1lZCB0byBiZSAhPSBOVUxMLgorCSAgZmxhZyAtIEdGQ19DTEFTU19DQUxMQkFDS19E RUZBVUxUX0ZMQUc6CisJCSAgIG1hcCBhbGxvY2F0YWJsZS9wb2ludGVyIGNvbXBvbmVudHMK KwkJIEdGQ19DTEFTU19DQUxMQkFDS19WVEFCTEVfRkxBRzoKKwkJICAgbWFwIHZ0YWJsZSBv ZiB0aGlzIHR5cGUgYW5kIHJldHVybgorCSAgY2JfZmxhZzogR0ZDX0NMQVNTX0NCX0FMTE9D QVRBQkxFLCBHRkNfQ0xBU1NfQ0JfUE9JTlRFUiwKKwkJICAgR0ZDX0NMQVNTX0NCX1ZUQUJM RSwgR0ZDX0NMQVNTX0NCX1ZQVFIKKyAgIENhbGxzICdjYicgd2l0aDoKKyAgICAgY2JfdG9r ZW4gOj0gdG9rZW4KKyAgICAgaWYgZmxhZyA9PSBHRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxF X0ZMQUc6CisgICAgICAgY2JfdmFyIDo9IHRoaXNfcHRyOyBzaXplID0gY19zaXplb2YgKHZ0 YWJsZSk7IGNiX2ZsYWc9R0ZDX0NMQVNTX0NCX1ZUQUJMRQorICAgICBlbHNlIChmbGFnID0g R0ZDX0NMQVNTX0NBTExCQUNLX0RFRkFVTFRfRkxBRykKKyAgICAgICBjYWxsIGNfZl9wb2lu dGVyICh0aGlzX3B0ciwgc2NhbGFyKQorICAgICAgIGZvciBlYWNoIGNvbXBvbmVudDoKKwkg aWYgcG9pbnRlciAmJiBhc3NvY2lhdGVkCisJICAgW2NsYXNzIG9ubHldIGNiX3ZhciA9IHNj YWxhci5jb21wLl92cHRyLCBzaXplID09IDAsCisJCQljYl9mbGFnID0gR0ZDX0NMQVNTX0NC X1ZQVFIKKwkgICBjYl92YXIgPSBzY2FsYXIuY29tcC4oX2RhdGEpLCBzaXplID09IDAsIGNi X2ZsYWc9R0ZDX0NMQVNTX0NCX1BPSU5URVIKKwkgICBpZiBhbGxvY2F0YWJsZSAmJiBhbGxv Y2F0YXRlZAorCSAgICAgW2NsYXNzIG9ubHldCisJICAgICAgIHNjYWxhci5jb21wLl92cHRy LT5jYWxsYmFjayhjYiwgdG9rZW4sIHNjYWxhci5jb21wLl92cHRyLAorCQkJCQkgICBmbGFn PUdGQ19DTEFTU19DQUxMQkFDS19WVEFCTEVfRkxBRykKKwkgICAgIGNiX3ZhciA9IHNjYWxh ci5jb21wLl92cHRyLCBzaXplID09IGNfc2l6ZW9mKHNjYWxhci5jb21wLihfZGF0YSksCisJ CSAgICBjYl9mbGFnID0gR0ZDX0NMQVNTX0NCX0FMTE9DQVRBQkxFCisJICAgaWYgKGFsbG9j YXRhYmxlIGNvbXAgfHwgY2xhc3MpCisJICAgICBbY2xhc3Mgb25seV0KKwkgICAgICAgc2Nh bGFyLmNvbXAuX3ZwdHItPmNhbGxiYWNrKGNiLCB0b2tlbiwgc2NhbGFyLmNvbXAuX3ZwdHIs CisJCQkJCSAgIGZsYWc9R0ZDX0NMQVNTX0NBTExCQUNLX1ZUQUJMRV9GTEFHKQorCSAgICAg Ly8gTm90ZTogY2FsbGJhY2sgaXMgZWxlbWVudGFsLCBpLmUuIG9uZSBjYWxsIHBlciBhcnJh eSBlbGVtCisJICAgICBzY2FsYXIuY29tcC5fdnB0ci0+Y2FsbGJhY2soY2IsIHRva2VuLCBz Y2FsYXIuY29tcC4oX2RhdGEpLAorCQkJCQkgZmxhZz1HRkNfQ0xBU1NfQ0FMTEJBQ0tfREVG QVVMVF9GTEFHKQorKi8KKworc3RhdGljIHZvaWQKK2dlbmVyYXRlX2NhbGxiYWNrX3dyYXBw ZXIgKGdmY19zeW1ib2wgKnZ0YWIsIGdmY19zeW1ib2wgKmRlcml2ZWQsCisJCQkgICBnZmNf bmFtZXNwYWNlICpucywgY29uc3QgY2hhciAqdG5hbWUsCisJCQkgICBnZmNfY29tcG9uZW50 ICp2dGFiX2NiKQoreworICBnZmNfbmFtZXNwYWNlICpzdWJfbnM7CisgIGdmY19jb2RlICps YXN0X2NvZGUsICpibG9jazsKKyAgZ2ZjX3N5bWJvbCAqY2FsbGJhY2ssICpjYiwgKnRva2Vu LCAqdGhpc19wdHIsICpzY2FsYXIsICpmbGFnLCAqcmVzdWx0OworICBnZmNfc3ltYm9sICpj X3B0ciwgKmNfZnVucHRyLCAqY19udWxsX2Z1bnB0ciwgKmNfc2hvcnQ7CisgIGdmY19leHBy ICpzaXplOworICBpbnQgY19zaG9ydF9raW5kOworICBjaGFyICpuYW1lOworCisgIC8qIFNl dCB1cCB0aGUgbmFtZXNwYWNlLiAgKi8KKyAgc3ViX25zID0gZ2ZjX2dldF9uYW1lc3BhY2Ug KG5zLCAwKTsKKyAgc3ViX25zLT5zaWJsaW5nID0gbnMtPmNvbnRhaW5lZDsKKyAgbnMtPmNv bnRhaW5lZCA9IHN1Yl9uczsKKyAgc3ViX25zLT5yZXNvbHZlZCA9IDE7CisKKyAgZ2ZjX25h bWVzcGFjZSAqc2F2ZWRfbnMgPSBnZmNfY3VycmVudF9uczsKKyAgZ2ZjX2N1cnJlbnRfbnMg PSBzdWJfbnM7CisgIGdmY19pbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKCk7CisgIGdm Y19jdXJyZW50X25zID0gc2F2ZWRfbnM7CisgIGdmY19maW5kX3N5bWJvbCAoImNfcHRyIiwg c3ViX25zLCAwLCAmY19wdHIpOworICBnZmNfZmluZF9zeW1ib2wgKCJjX2Z1bnB0ciIsIHN1 Yl9ucywgMCwgJmNfZnVucHRyKTsKKyAgZ2ZjX2ZpbmRfc3ltYm9sICgiY19udWxsX2Z1bnB0 ciIsIHN1Yl9ucywgMCwgJmNfbnVsbF9mdW5wdHIpOworICBnZmNfZmluZF9zeW1ib2wgKCJj X3Nob3J0Iiwgc3ViX25zLCAwLCAmY19zaG9ydCk7CisgIGNfc2hvcnRfa2luZCA9IG1wel9n ZXRfc2kgKGNfc2hvcnQtPnZhbHVlLT52YWx1ZS5pbnRlZ2VyKTsKKworICAvKiBTZXQgdXAg dGhlIHByb2NlZHVyZSBzeW1ib2wuICAqLworICBuYW1lID0geGFzcHJpbnRmICgiX19jYWxs YmFja18lcyIsIHRuYW1lKTsKKyAgZ2ZjX2dldF9zeW1ib2wgKG5hbWUsIHN1Yl9ucywgJmNh bGxiYWNrKTsKKyAgZnJlZSAobmFtZSk7CisgIHN1Yl9ucy0+cHJvY19uYW1lID0gY2FsbGJh Y2s7CisgIGNhbGxiYWNrLT5hdHRyLmZsYXZvciA9IEZMX1BST0NFRFVSRTsKKyAgY2FsbGJh Y2stPmF0dHIuZnVuY3Rpb24gPSAxOworICBjYWxsYmFjay0+YXR0ci5wdXJlID0gMDsKKyAg Y2FsbGJhY2stPmF0dHIucmVjdXJzaXZlID0gMTsKKyAgY2FsbGJhY2stPmF0dHIuZWxlbWVu dGFsID0gMTsKKyAgY2FsbGJhY2stPnJlc3VsdCA9IGNhbGxiYWNrOworICBjYWxsYmFjay0+ dHMudHlwZSA9IEJUX0lOVEVHRVI7CisgIGNhbGxiYWNrLT50cy5raW5kID0gZ2ZjX2luZGV4 X2ludGVnZXJfa2luZDsKKyAgY2FsbGJhY2stPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CisgIGNh bGxiYWNrLT5hdHRyLmFsd2F5c19leHBsaWNpdCA9IDE7CisgIGNhbGxiYWNrLT5hdHRyLmlm X3NvdXJjZSA9IElGU1JDX0RFQ0w7CisgIGlmIChucy0+cHJvY19uYW1lICYmIG5zLT5wcm9j X25hbWUtPmF0dHIuZmxhdm9yID09IEZMX01PRFVMRSkKKyAgICBjYWxsYmFjay0+bW9kdWxl ID0gbnMtPnByb2NfbmFtZS0+bmFtZTsKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAoY2Fs bGJhY2spOworCisgIC8qIFNldCB1cCBmb3JtYWwgYXJndW1lbnQuICAqLworICBnZmNfZ2V0 X3N5bWJvbCAoImNiIiwgc3ViX25zLCAmY2IpOworICBjYi0+YXR0ci5mbGF2b3IgPSBGTF9Q Uk9DRURVUkU7CisgIGNiLT5hdHRyLmFydGlmaWNpYWwgPSAxOworICBjYi0+YXR0ci5kdW1t eSA9IDE7CisgIGNiLT5hdHRyLmVsZW1lbnRhbCA9IDE7ICAvLyBGSVhNRSAtIHRoYXQncyBu b3QgcXVpdGUgcmlnaHQuCisgIGNiLT5hdHRyLmZ1bmN0aW9uID0gMTsKKyAgY2ItPmF0dHIu aW50ZW50ID0gSU5URU5UX0lOOworICBjYi0+cmVzdWx0ID0gY2I7CisgIGNiLT50cy50eXBl ID0gQlRfSU5URUdFUjsKKyAgY2ItPnRzLmtpbmQgPSBnZmNfaW5kZXhfaW50ZWdlcl9raW5k OworICBjYi0+YXR0ci5pZl9zb3VyY2UgPSBJRlNSQ19JRkJPRFk7CisgIGdmY19zZXRfc3lt X3JlZmVyZW5jZWQgKGNiKTsKKyAgY2FsbGJhY2stPmZvcm1hbCA9IGdmY19nZXRfZm9ybWFs X2FyZ2xpc3QgKCk7CisgIGNhbGxiYWNrLT5mb3JtYWwtPnN5bSA9IGNiOworICBjYi0+Zm9y bWFsX25zID0gZ2ZjX2dldF9uYW1lc3BhY2UgKHN1Yl9ucywgMCk7CisgIGNiLT5mb3JtYWxf bnMtPnByb2NfbmFtZSA9IGNiOworICAvKiBjYl90b2tlbi4gKi8KKyAgZ2ZjX2dldF9zeW1i b2wgKCJjYl90b2tlbiIsIGNiLT5mb3JtYWxfbnMsICZ0b2tlbik7CisgIHRva2VuLT50cy50 eXBlID0gQlRfREVSSVZFRDsKKyAgdG9rZW4tPnRzLnUuZGVyaXZlZCA9IGNfcHRyOworICB0 b2tlbi0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsKKyAgdG9rZW4tPmF0dHIuZHVtbXkg PSAxOworICB0b2tlbi0+YXR0ci52YWx1ZSA9IDE7CisgIHRva2VuLT5hdHRyLmFydGlmaWNp YWwgPSAxOworICB0b2tlbi0+YXR0ci5pbnRlbnQgPSBJTlRFTlRfSU47CisgIGdmY19zZXRf c3ltX3JlZmVyZW5jZWQgKHRva2VuKTsKKyAgY2ItPmZvcm1hbCA9IGdmY19nZXRfZm9ybWFs X2FyZ2xpc3QgKCk7CisgIGNiLT5mb3JtYWwtPnN5bSA9IHRva2VuOworICAvKiBjYl92YXIg Ki8KKyAgZ2ZjX2dldF9zeW1ib2wgKCJjYl92YXIiLCBjYi0+Zm9ybWFsX25zLCAmdG9rZW4p OworICB0b2tlbi0+dHMudHlwZSA9IEJUX0RFUklWRUQ7CisgIHRva2VuLT50cy51LmRlcml2 ZWQgPSBjX3B0cjsKKyAgdG9rZW4tPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgIHRv a2VuLT5hdHRyLmR1bW15ID0gMTsKKyAgdG9rZW4tPmF0dHIuYXJ0aWZpY2lhbCA9IDE7Cisg IHRva2VuLT5hdHRyLmludGVudCA9IElOVEVOVF9JTjsKKyAgZ2ZjX3NldF9zeW1fcmVmZXJl bmNlZCAodG9rZW4pOworICBjYi0+Zm9ybWFsLT5uZXh0ID0gZ2ZjX2dldF9mb3JtYWxfYXJn bGlzdCAoKTsKKyAgY2ItPmZvcm1hbC0+bmV4dC0+c3ltID0gdG9rZW47CisgIC8qIGNiX2xl biAqLworICBnZmNfZ2V0X3N5bWJvbCAoImNiX2xlbiIsIGNiLT5mb3JtYWxfbnMsICZ0b2tl bik7CisgIHRva2VuLT50cy50eXBlID0gQlRfSU5URUdFUjsKKyAgdG9rZW4tPnRzLmtpbmQg PSBnZmNfaW5kZXhfaW50ZWdlcl9raW5kOworICB0b2tlbi0+YXR0ci5mbGF2b3IgPSBGTF9W QVJJQUJMRTsKKyAgdG9rZW4tPmF0dHIuZHVtbXkgPSAxOworICB0b2tlbi0+YXR0ci52YWx1 ZSA9IDE7CisgIHRva2VuLT5hdHRyLmFydGlmaWNpYWwgPSAxOworICB0b2tlbi0+YXR0ci5p bnRlbnQgPSBJTlRFTlRfSU47CisgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHRva2VuKTsK KyAgY2ItPmZvcm1hbC0+bmV4dC0+bmV4dCA9IGdmY19nZXRfZm9ybWFsX2FyZ2xpc3QgKCk7 CisgIGNiLT5mb3JtYWwtPm5leHQtPm5leHQtPnN5bSA9IHRva2VuOworICAvKiBjYl9mbGFn ICovCisgIGdmY19nZXRfc3ltYm9sICgiY2JfZmxhZyIsIGNiLT5mb3JtYWxfbnMsICZ0b2tl bik7CisgIHRva2VuLT50cy50eXBlID0gQlRfSU5URUdFUjsKKyAgdG9rZW4tPnRzLmtpbmQg PSBjX3Nob3J0X2tpbmQ7CisgIHRva2VuLT5hdHRyLmZsYXZvciA9IEZMX1ZBUklBQkxFOwor ICB0b2tlbi0+YXR0ci5kdW1teSA9IDE7CisgIHRva2VuLT5hdHRyLnZhbHVlID0gMTsKKyAg dG9rZW4tPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CisgIHRva2VuLT5hdHRyLmludGVudCA9IElO VEVOVF9JTjsKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAodG9rZW4pOworICBjYi0+Zm9y bWFsLT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9mb3JtYWxfYXJnbGlzdCAoKTsKKyAgY2ItPmZv cm1hbC0+bmV4dC0+bmV4dC0+c3ltID0gdG9rZW47CisgIC8qIGNiX2ZuICovCisgIGdmY19n ZXRfc3ltYm9sICgiY2JfZm4iLCBjYi0+Zm9ybWFsX25zLCAmdG9rZW4pOworICB0b2tlbi0+ dHMudHlwZSA9IEJUX0RFUklWRUQ7CisgIHRva2VuLT50cy51LmRlcml2ZWQgPSBjX2Z1bnB0 cjsKKyAgdG9rZW4tPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgIHRva2VuLT5hdHRy LmR1bW15ID0gMTsKKyAgdG9rZW4tPmF0dHIuZWxlbWVudGFsID0gMTsKKyAgdG9rZW4tPmF0 dHIudmFsdWUgPSAxOworICB0b2tlbi0+YXR0ci5hcnRpZmljaWFsID0gMTsKKyAgdG9rZW4t PmF0dHIuaW50ZW50ID0gSU5URU5UX0lOOworICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkICh0 b2tlbik7CisgIGNiLT5mb3JtYWwtPm5leHQtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2Zvcm1h bF9hcmdsaXN0ICgpOworICBjYi0+Zm9ybWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5zeW0gPSB0 b2tlbjsKKworICAvKiBDb24ndCBfX2NhbGxiYWNrXyVzICBhcmdzLiAgKi8KKyAgZ2ZjX2dl dF9zeW1ib2wgKCJ0b2tlbiIsIHN1Yl9ucywgJnRva2VuKTsKKyAgdG9rZW4tPnRzLnR5cGUg PSBCVF9ERVJJVkVEOworICB0b2tlbi0+dHMudS5kZXJpdmVkID0gY19wdHI7CisgIHRva2Vu LT5hdHRyLmZsYXZvciA9IEZMX1ZBUklBQkxFOworICB0b2tlbi0+YXR0ci5kdW1teSA9IDE7 CisgIHRva2VuLT5hdHRyLnZhbHVlID0gMTsKKyAgdG9rZW4tPmF0dHIuYXJ0aWZpY2lhbCA9 IDE7CisgIHRva2VuLT5hdHRyLmludGVudCA9IElOVEVOVF9JTjsKKyAgZ2ZjX3NldF9zeW1f cmVmZXJlbmNlZCAodG9rZW4pOworICBjYWxsYmFjay0+Zm9ybWFsLT5uZXh0ID0gZ2ZjX2dl dF9mb3JtYWxfYXJnbGlzdCAoKTsKKyAgY2FsbGJhY2stPmZvcm1hbC0+bmV4dC0+c3ltID0g dG9rZW47CisKKyAgZ2ZjX2dldF9zeW1ib2wgKCJ0aGlzX3B0ciIsIHN1Yl9ucywgJnRoaXNf cHRyKTsKKyAgdGhpc19wdHItPnRzLnR5cGUgPSBCVF9ERVJJVkVEOworICB0aGlzX3B0ci0+ dHMudS5kZXJpdmVkID0gY19wdHI7CisgIHRoaXNfcHRyLT5hdHRyLmZsYXZvciA9IEZMX1ZB UklBQkxFOworICB0aGlzX3B0ci0+YXR0ci5kdW1teSA9IDE7CisgIHRoaXNfcHRyLT5hdHRy LnZhbHVlID0gMTsKKyAgdGhpc19wdHItPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CisgIHRoaXNf cHRyLT5hdHRyLmludGVudCA9IElOVEVOVF9JTjsKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNl ZCAodGhpc19wdHIpOworICBjYWxsYmFjay0+Zm9ybWFsLT5uZXh0LT5uZXh0ID0gZ2ZjX2dl dF9mb3JtYWxfYXJnbGlzdCAoKTsKKyAgY2FsbGJhY2stPmZvcm1hbC0+bmV4dC0+bmV4dC0+ c3ltID0gdGhpc19wdHI7CisKKyAgZ2ZjX2dldF9zeW1ib2wgKCJmbGFnIiwgc3ViX25zLCAm ZmxhZyk7CisgIGZsYWctPnRzLnR5cGUgPSBCVF9JTlRFR0VSOworICBmbGFnLT50cy5raW5k ID0gY19zaG9ydF9raW5kOworICBmbGFnLT5hdHRyLmZsYXZvciA9IEZMX1ZBUklBQkxFOwor ICBmbGFnLT5hdHRyLmR1bW15ID0gMTsKKyAgZmxhZy0+YXR0ci5jb250aWd1b3VzID0gMTsK KyAgZmxhZy0+YXR0ci5hcnRpZmljaWFsID0gMTsKKyAgZmxhZy0+YXR0ci52YWx1ZSA9IDE7 CisgIGZsYWctPmF0dHIuaW50ZW50ID0gSU5URU5UX0lOOworICBnZmNfc2V0X3N5bV9yZWZl cmVuY2VkIChmbGFnKTsKKyAgY2FsbGJhY2stPmZvcm1hbC0+bmV4dC0+bmV4dC0+bmV4dCA9 IGdmY19nZXRfZm9ybWFsX2FyZ2xpc3QgKCk7CisgIGNhbGxiYWNrLT5mb3JtYWwtPm5leHQt Pm5leHQtPm5leHQtPnN5bSA9IGZsYWc7CisKKyAgLyogTG9jYWwgdmFyLiAqLworICBnZmNf Z2V0X3N5bWJvbCAoInJlc3VsdCIsIHN1Yl9ucywgJnJlc3VsdCk7CisgIHJlc3VsdC0+dHMg PSBjYWxsYmFjay0+dHM7CisgIHJlc3VsdC0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsK KyAgcmVzdWx0LT5hdHRyLnJlc3VsdCA9IDE7CisgIGNhbGxiYWNrLT5yZXN1bHQgPSByZXN1 bHQ7CisgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHJlc3VsdCk7CisKKyAgZ2ZjX2dldF9z eW1ib2wgKCJzY2FsYXIiLCBzdWJfbnMsICZzY2FsYXIpOworICBzY2FsYXItPnRzLnR5cGUg PSBCVF9ERVJJVkVEOworICBzY2FsYXItPnRzLnUuZGVyaXZlZCA9IGRlcml2ZWQ7CisgIHNj YWxhci0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsKKyAgc2NhbGFyLT5hdHRyLnBvaW50 ZXIgPSAxOworICBzY2FsYXItPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CisgIGdmY19zZXRfc3lt X3JlZmVyZW5jZWQgKHNjYWxhcik7CisKKyAgLyogU2V0IHJldHVybiB2YWx1ZSB0byAwLiAg Ki8KKyAgbGFzdF9jb2RlID0gZ2ZjX2dldF9jb2RlIChFWEVDX0FTU0lHTik7CisgIGxhc3Rf Y29kZS0+ZXhwcjEgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChyZXN1bHQpOworICBsYXN0 X2NvZGUtPmV4cHIyID0gZ2ZjX2dldF9pbnRfZXhwciAoZ2ZjX2luZGV4X2ludGVnZXJfa2lu ZCwgTlVMTCwgMCk7CisgIHN1Yl9ucy0+Y29kZSA9IGxhc3RfY29kZTsKKworICAvKiBpZiAo ZmxhZyA9PSBHRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUcpCisgICAgICAgcmV0dXJu IGNiICh0b2tlbiwgc2NhbGFyLnZ0YWIsIGNfc2l6ZW9mICh2dGFiKSwKKwkJICBHRkNfQ0xB U1NfQ0JfVlRBQkxFLCBOVUxMKSAqLworICBsYXN0X2NvZGUtPm5leHQgPSBnZmNfZ2V0X2Nv ZGUgKEVYRUNfSUYpOworICBsYXN0X2NvZGUgPSBsYXN0X2NvZGUtPm5leHQ7CisgIGxhc3Rf Y29kZS0+YmxvY2sgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfSUYpOworICBibG9jayA9IGxhc3Rf Y29kZS0+YmxvY2s7CisgIGJsb2NrLT5leHByMSA9IGdmY19nZXRfZXhwciAoKTsKKyAgYmxv Y2stPmV4cHIxLT5leHByX3R5cGUgPSBFWFBSX09QOworICBibG9jay0+ZXhwcjEtPndoZXJl ID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgIGJsb2NrLT5leHByMS0+dHMudHlwZSA9IEJUX0xP R0lDQUw7CisgIGJsb2NrLT5leHByMS0+dHMua2luZCA9IDE7CisgIGJsb2NrLT5leHByMS0+ dmFsdWUub3Aub3AgPSBJTlRSSU5TSUNfRVE7CisgIGJsb2NrLT5leHByMS0+dmFsdWUub3Au b3AxID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAoZmxhZyk7CisgIGJsb2NrLT5leHByMS0+ dmFsdWUub3Aub3AyCisgICAgPSBnZmNfZ2V0X2ludF9leHByIChmbGFnLT50cy5raW5kLCBO VUxMLCBHRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUcpOworICBzaXplID0gZ2ZjX2dl dF9leHByICgpOworICBzaXplLT5leHByX3R5cGUgPSBFWFBSX0ZVTkNUSU9OOworICBzaXpl LT52YWx1ZS5mdW5jdGlvbi5pc3ltID0gZ2ZjX2ludHJpbnNpY19mdW5jdGlvbl9ieV9pZCAo R0ZDX0lTWU1fU0laRU9GKTsKKyAgc2l6ZS0+dmFsdWUuZnVuY3Rpb24ubmFtZSA9IHNpemUt PnZhbHVlLmZ1bmN0aW9uLmlzeW0tPm5hbWU7CisgIHNpemUtPnZhbHVlLmZ1bmN0aW9uLmVz eW0gPSBOVUxMOworICBzaXplLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2Fj dHVhbF9hcmdsaXN0ICgpOworICBzaXplLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHIg PSBnZmNfbHZhbF9leHByX2Zyb21fc3ltICh2dGFiKTsKKyAgc2l6ZS0+d2hlcmUgPSBnZmNf Y3VycmVudF9sb2N1czsKKyAgYmxvY2stPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfQVNT SUdOKTsKKyAgYmxvY2sgPSBibG9jay0+bmV4dDsKKyAgYmxvY2stPmV4cHIxID0gZ2ZjX2x2 YWxfZXhwcl9mcm9tX3N5bSAocmVzdWx0KTsKKyAgYmxvY2stPmV4cHIyID0gZ2ZjX2dldF9l eHByICgpOworICBibG9jay0+ZXhwcjItPmV4cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047Cisg IGJsb2NrLT5leHByMi0+dHMgPSBjYi0+dHM7CisgIGJsb2NrLT5leHByMi0+d2hlcmUgPSBn ZmNfY3VycmVudF9sb2N1czsKKyAgYmxvY2stPmV4cHIyLT5zeW10cmVlID0gZ2ZjX2ZpbmRf c3ltdHJlZSAoc3ViX25zLT5zeW1fcm9vdCwgY2ItPm5hbWUpOworICBibG9jay0+ZXhwcjIt PnZhbHVlLmZ1bmN0aW9uLmVzeW0gPSBjYjsKKyAgYmxvY2stPmV4cHIyLT52YWx1ZS5mdW5j dGlvbi5lc3ltLT5uYW1lID0gY2ItPm5hbWU7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVu Y3Rpb24uYWN0dWFsID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgYmxvY2stPmV4 cHIyLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21f c3ltICh0b2tlbik7CisgIGJsb2NrLT5leHByMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5u ZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgYmxvY2stPmV4cHIyLT52YWx1 ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPmV4cHIKKyAgICA9IGdmY19sdmFsX2V4cHJfZnJv bV9zeW0gKHRoaXNfcHRyKTsKKyAgYmxvY2stPmV4cHIyLT52YWx1ZS5mdW5jdGlvbi5hY3R1 YWwtPm5leHQtPm5leHQKKyAgICA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgIGJs b2NrLT5leHByMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5leHByID0g c2l6ZTsKKyAgYmxvY2stPmV4cHIyLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5l eHQtPm5leHQKKyAgICA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgIGJsb2NrLT5l eHByMi0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5leHByCisg ICAgPSBnZmNfZ2V0X2ludF9leHByIChjX3Nob3J0X2tpbmQsIE5VTEwsIEdGQ19DTEFTU19D Ql9WVEFCTEUpOworICBibG9jay0+ZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4 dC0+bmV4dC0+bmV4dC0+bmV4dAorICAgID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsK KyAgYmxvY2stPmV4cHIyLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPm5leHQtPm5l eHQtPm5leHQtPmV4cHIKKyAgICA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKGNfbnVsbF9m dW5wdHIpOworCisgIGJsb2NrLT5uZXh0ID0gZ2ZjX2dldF9jb2RlIChFWEVDX1JFVFVSTik7 CisKKyAgLyogY2FsbCBjX2ZfcG9pbnRlciAodGhpc19wdHIsIHNjYWxhcikgKi8KKyAgbGFz dF9jb2RlLT5uZXh0ID0gZ2ZjX2dldF9jb2RlIChFWEVDX0NBTEwpOworICBsYXN0X2NvZGUg PSBsYXN0X2NvZGUtPm5leHQ7CisgIGdmY19nZXRfc3ltX3RyZWUgKCJjX2ZfcG9pbnRlciIs IHN1Yl9ucywgJmxhc3RfY29kZS0+c3ltdHJlZSwgZmFsc2UpOworICBsYXN0X2NvZGUtPnJl c29sdmVkX3N5bSA9IGxhc3RfY29kZS0+c3ltdHJlZS0+bi5zeW07CisgIGxhc3RfY29kZS0+ cmVzb2x2ZWRfaXN5bQorICAgID0gZ2ZjX2ludHJpbnNpY19zdWJyb3V0aW5lX2J5X2lkIChH RkNfSVNZTV9DX0ZfUE9JTlRFUik7CisgIGxhc3RfY29kZS0+ZXh0LmFjdHVhbCA9IGdmY19n ZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgIGxhc3RfY29kZS0+ZXh0LmFjdHVhbC0+ZXhwciA9 IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHRoaXNfcHRyKTsKKyAgbGFzdF9jb2RlLT5leHQu YWN0dWFsLT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgbGFzdF9jb2Rl LT5leHQuYWN0dWFsLT5uZXh0LT5leHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAoc2Nh bGFyKTsKKworICAvKiBDYWxsIG5vdyBmb3IgcG9pbnRlcjoKKyAgICAgICBbY2xhc3Mgb25s eTpdIGNiICh0b2tlbiwgY29tcC0+X3ZwdHIsIDMsIE5VTEwpOworICAgICAgIGNiICh0b2tl biwgY29tcCgtPl9kYXRhKSwgMCwgTlVMTCk7CisgICAgIGZvciBhbGxvY2F0YWJsZToKKyAg ICAgICBbY2xhc3Mgb25seTpdIGNvbXAtPl92cHRyLT5jYWxsYmFjayAoY2IsIHRva2VuLCBj b21wLT52YXJfdnB0ciwgMSkKKyAgICAgICBjYiAodG9rZW4sIGNvbXAtPnZhciguZGF0YSks IHNpemUsIDEsIE5VTEwpOworICAgICBhbmQgdGhlbiBmb3IgYWxsb2NhdGFibGUgb2YgZWl0 aGVyIGNsYXNzIHR5cGUgb3Igd2l0aCBhbGxvY2F0YWJsZSBjb21wcworICAgICAgIGZvciBl YWNoIGFycmF5IGVsZW1lbnQKKwkgY2IgKHRva2VuLCBjb21wLT52YXIoLmRhdGEpLCBzaXpl LCAwLCB2YXIncyBjYiBmbik7ICAqLworICBmb3IgKGdmY19jb21wb25lbnQgKmNvbXAgPSBk ZXJpdmVkLT5jb21wb25lbnRzOyBjb21wOyBjb21wID0gY29tcC0+bmV4dCkKKyAgICB7Cisg ICAgICBib29sIHBvaW50ZXIgPSAoY29tcC0+dHMudHlwZSA9PSBCVF9DTEFTUworCQkgICAg ICA/IENMQVNTX0RBVEEgKGNvbXApLT5hdHRyLnBvaW50ZXIgOiBjb21wLT5hdHRyLnBvaW50 ZXIpOworICAgICAgYm9vbCBwcm9jX3B0ciA9IGNvbXAtPmF0dHIucHJvY19wb2ludGVyOwor ICAgICAgaWYgKCFwb2ludGVyICYmICFwcm9jX3B0ciAmJiBjb21wLT50cy50eXBlICE9IEJU X0NMQVNTCisJICAmJiAhY29tcC0+YXR0ci5hbGxvY2F0YWJsZSkKKwljb250aW51ZTsKKwor ICAgICAgZ2ZjX2V4cHIgKmV4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChzY2FsYXIp OworICAgICAgZXhwci0+cmVmID0gZ2ZjX2dldF9yZWYgKCk7CisgICAgICBleHByLT5yZWYt PnR5cGUgPSBSRUZfQ09NUE9ORU5UOworICAgICAgZXhwci0+cmVmLT51LmMuc3ltID0gZGVy aXZlZDsKKyAgICAgIGV4cHItPnJlZi0+dS5jLmNvbXBvbmVudCA9IGNvbXA7CisgICAgICBl eHByLT50cyA9IGNvbXAtPnRzOworCisgICAgICBpZiAoIXByb2NfcHRyICYmIGNvbXAtPnRz LnR5cGUgIT0gQlRfQ0xBU1MgJiYgY29tcC0+YXR0ci5kaW1lbnNpb24pCisJeworCSAgZ2Zj X3JlZiAqcmVmID0gZXhwci0+cmVmOworCSAgcmVmLT5uZXh0ID0gZ2ZjX2dldF9yZWYgKCk7 CisJICByZWYgPSByZWYtPm5leHQ7CisJICByZWYtPnR5cGUgPSBSRUZfQVJSQVk7CisJICBy ZWYtPnUuYXIudHlwZSA9IEFSX0ZVTEw7CisJICByZWYtPnUuYXIuYXMgPSBjb21wLT5hczsK KwkgIGV4cHItPnJhbmsgPSBjb21wLT5hcy0+cmFuazsKKwl9CisKKyAgICAgIGlmIChwb2lu dGVyIHx8IHByb2NfcHRyKQorCXNpemUgPSBnZmNfZ2V0X2ludF9leHByIChnZmNfaW5kZXhf aW50ZWdlcl9raW5kLCBOVUxMLCAwKTsKKyAgICAgIGVsc2UKKwl7CisJICBzaXplID0gZ2Zj X2dldF9leHByICgpOworCSAgc2l6ZS0+ZXhwcl90eXBlID0gRVhQUl9GVU5DVElPTjsKKwkg IHNpemUtPnZhbHVlLmZ1bmN0aW9uLmlzeW0KKwkgICAgPSBnZmNfaW50cmluc2ljX2Z1bmN0 aW9uX2J5X2lkIChHRkNfSVNZTV9TSVpFT0YpOworCSAgc2l6ZS0+dmFsdWUuZnVuY3Rpb24u bmFtZSA9IHNpemUtPnZhbHVlLmZ1bmN0aW9uLmlzeW0tPm5hbWU7CisJICBzaXplLT52YWx1 ZS5mdW5jdGlvbi5lc3ltID0gTlVMTDsKKwkgIHNpemUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVh bCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisJICBzaXplLT52YWx1ZS5mdW5jdGlv bi5hY3R1YWwtPmV4cHIgPSBnZmNfY29weV9leHByIChleHByKTsKKwkgIHNpemUtPndoZXJl ID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisJfQorCisgICAgICBpZiAoIXByb2NfcHRyICYmIGNv bXAtPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCisJeworCSAgZ2ZjX2FkZF9kYXRhX2NvbXBvbmVu dCAoZXhwcik7CisJICBpZiAoY29tcC0+YXR0ci5kaW1lbnNpb24pCisJICAgIHsKKwkgICAg ICBnZmNfcmVmICpyZWYgPSBleHByLT5yZWYtPm5leHQ7CisJICAgICAgcmVmLT5uZXh0ID0g Z2ZjX2dldF9yZWYgKCk7CisJICAgICAgcmVmID0gcmVmLT5uZXh0OworCSAgICAgIHJlZi0+ dHlwZSA9IFJFRl9BUlJBWTsKKwkgICAgICByZWYtPnUuYXIudHlwZSA9IEFSX0ZVTEw7CisJ ICAgICAgcmVmLT51LmFyLmFzID0gY29tcC0+YXM7CisJICAgICAgZXhwci0+cmFuayA9IGNv bXAtPmFzLT5yYW5rOworCSAgICB9CisJfQorCisgICAgICAvKiBpZiAoYWxsb2NhdGVkL2Fz c29jaWF0ZWQoY29tcCkgKi8KKyAgICAgIGxhc3RfY29kZS0+bmV4dCA9IGdmY19nZXRfY29k ZSAoRVhFQ19JRik7CisgICAgICBsYXN0X2NvZGUgPSBsYXN0X2NvZGUtPm5leHQ7CisgICAg ICBsYXN0X2NvZGUtPmJsb2NrID0gZ2ZjX2dldF9jb2RlIChFWEVDX0lGKTsKKyAgICAgIGJs b2NrID0gbGFzdF9jb2RlLT5ibG9jazsKKyAgICAgIGJsb2NrLT5leHByMSA9IGdmY19nZXRf ZXhwciAoKTsKKyAgICAgIGJsb2NrLT5leHByMS0+ZXhwcl90eXBlID0gRVhQUl9GVU5DVElP TjsKKyAgICAgIGJsb2NrLT5leHByMS0+dHMudHlwZSA9IEJUX0xPR0lDQUw7CisgICAgICBi bG9jay0+ZXhwcjEtPnRzLmtpbmQgPSAxOworICAgICAgYmxvY2stPmV4cHIxLT52YWx1ZS5m dW5jdGlvbi5pc3ltCisJPSBnZmNfaW50cmluc2ljX2Z1bmN0aW9uX2J5X2lkIChwb2ludGVy IHx8IHByb2NfcHRyCisJCQkJCT8gR0ZDX0lTWU1fQVNTT0NJQVRFRAorCQkJCQk6IEdGQ19J U1lNX0FMTE9DQVRFRCk7CisgICAgICBibG9jay0+ZXhwcjEtPnZhbHVlLmZ1bmN0aW9uLm5h bWUKKwk9IGJsb2NrLT5leHByMS0+dmFsdWUuZnVuY3Rpb24uaXN5bS0+bmFtZTsKKyAgICAg IGJsb2NrLT5leHByMS0+dmFsdWUuZnVuY3Rpb24uZXN5bSA9IE5VTEw7CisgICAgICBibG9j ay0+ZXhwcjEtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xp c3QgKCk7CisgICAgICBibG9jay0+ZXhwcjEtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ZXhw ciA9IGdmY19jb3B5X2V4cHIgKGV4cHIpOworICAgICAgaWYgKHBvaW50ZXIgfHwgcHJvY19w dHIpCisJYmxvY2stPmV4cHIxLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQgPSBnZmNf Z2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgYmxvY2stPmV4cHIxLT53aGVyZSA9IGdm Y19jdXJyZW50X2xvY3VzOworCisgICAgICAvKiBuICs9IGNiICh0b2tlbiwgJnNjYWxhci0+ Y29tcCguX2RhdGEpLCBzaXplLCBwb2ludGVyID8gMSA6IDAsIE5VTEwpICovCisKKyAgICAg IC8qIGNfbG9jIChzY2FsYXIlY29tcCkgKi8KKyAgICAgIGdmY19leHByICpsb2NfZXhwciA9 IGdmY19nZXRfZXhwciAoKTsKKyAgICAgIGxvY19leHByLT5leHByX3R5cGUgPSBFWFBSX0ZV TkNUSU9OOworICAgICAgZ2ZjX2dldF9zeW1fdHJlZSAoImNfbG9jIiwgc3ViX25zLCAmbG9j X2V4cHItPnN5bXRyZWUsIGZhbHNlKTsKKyAgICAgIGxvY19leHByLT5zeW10cmVlLT5uLnN5 bS0+YXR0ci5mbGF2b3IgPSBGTF9QUk9DRURVUkU7CisgICAgICBsb2NfZXhwci0+c3ltdHJl ZS0+bi5zeW0tPmludG1vZF9zeW1faWQgPSBJU09DQklORElOR19MT0M7CisgICAgICBsb2Nf ZXhwci0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuaW50cmluc2ljID0gMTsKKyAgICAgIGxvY19l eHByLT5zeW10cmVlLT5uLnN5bS0+ZnJvbV9pbnRtb2QgPSBJTlRNT0RfSVNPX0NfQklORElO RzsKKyAgICAgIGxvY19leHByLT52YWx1ZS5mdW5jdGlvbi5pc3ltID0gZ2ZjX2ludHJpbnNp Y19mdW5jdGlvbl9ieV9pZCAoR0ZDX0lTWU1fQ19MT0MpOworICAgICAgbG9jX2V4cHItPnZh bHVlLmZ1bmN0aW9uLmFjdHVhbCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAg ICBsb2NfZXhwci0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0gZXhwcjsKKyAgICAg IGxvY19leHByLT5zeW10cmVlLT5uLnN5bS0+cmVzdWx0ID0gZXhwci0+c3ltdHJlZS0+bi5z eW07CisgICAgICBsb2NfZXhwci0+dHMudHlwZSA9IEJUX0lOVEVHRVI7CisgICAgICBsb2Nf ZXhwci0+dHMua2luZCA9IGdmY19pbmRleF9pbnRlZ2VyX2tpbmQ7CisgICAgICBsb2NfZXhw ci0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKworICAgICAgLyogQ2FsbCBDQiBwcm9j ZWR1cmUgZm9yIHB0ciBhc3NpZ25tZW50IG9yIGFsbG9jYXRhYmxlIGNvcHlpbmcuICAqLwor ICAgICAgYmxvY2stPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfQVNTSUdOKTsKKyAgICAg IGJsb2NrID0gYmxvY2stPm5leHQ7CisgICAgICBibG9jay0+ZXhwcjEgPSBnZmNfbHZhbF9l eHByX2Zyb21fc3ltIChyZXN1bHQpOworICAgICAgYmxvY2stPmV4cHIyID0gZ2ZjX2dldF9l eHByICgpOworICAgICAgYmxvY2stPmV4cHIyLT50cyA9IHJlc3VsdC0+dHM7CisgICAgICBi bG9jay0+ZXhwcjItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgICAgICBibG9jay0+ ZXhwcjItPmV4cHJfdHlwZSA9IEVYUFJfT1A7CisgICAgICBibG9jay0+ZXhwcjItPnZhbHVl Lm9wLm9wID0gSU5UUklOU0lDX1BMVVM7CisgICAgICBibG9jay0+ZXhwcjItPnZhbHVlLm9w Lm9wMSA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHJlc3VsdCk7CisgICAgICBibG9jay0+ ZXhwcjItPnZhbHVlLm9wLm9wMiA9IGdmY19nZXRfZXhwciAoKTsKKworICAgICAgZ2ZjX2V4 cHIgKmUgPSBibG9jay0+ZXhwcjItPnZhbHVlLm9wLm9wMjsKKyAgICAgIGUtPmV4cHJfdHlw ZSA9IEVYUFJfRlVOQ1RJT047CisgICAgICBlLT50cyA9IGNiLT50czsKKyAgICAgIGUtPndo ZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgICAgICBlLT5zeW10cmVlID0gZ2ZjX2ZpbmRf c3ltdHJlZSAoc3ViX25zLT5zeW1fcm9vdCwgY2ItPm5hbWUpOworICAgICAgZS0+dmFsdWUu ZnVuY3Rpb24uZXN5bSA9IGNiOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uZXN5bS0+bmFt ZSA9IGNiLT5uYW1lOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsID0gZ2ZjX2dl dF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ ZXhwciA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHRva2VuKTsKKyAgICAgIGUtPnZhbHVl LmZ1bmN0aW9uLmFjdHVhbC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7Cisg ICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5leHQtPmV4cHIgPSBsb2NfZXhwcjsK KyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+bmV4dCA9IGdmY19nZXRf YWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPm5l eHQtPm5leHQtPmV4cHIgPSBzaXplOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFs LT5uZXh0LT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgICAg IGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+bmV4dC0+bmV4dC0+ZXhwcgorCT0g Z2ZjX2dldF9pbnRfZXhwciAoY19zaG9ydF9raW5kLCBOVUxMLAorCQkJICAgIHByb2NfcHRy ID8gR0ZDX0NMQVNTX0NCX1BST0NfUE9JTlRFUgorCQkJCSAgICAgOiAocG9pbnRlciA/IEdG Q19DTEFTU19DQl9QT0lOVEVSCisJCQkJCQk6IEdGQ19DTEFTU19DQl9BTExPQ0FUQUJMRSkp OworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5u ZXh0CisJPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICAgICAgZS0+dmFsdWUuZnVu Y3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0LT5leHByCisJPSBnZmNfbHZh bF9leHByX2Zyb21fc3ltIChjX251bGxfZnVucHRyKTsKKworICAgICAgLyogQ2FsbCBmb3Ig ZWFjaCBlbGVtZW50IGNiIHdoZW4gY29tcCBjYW4gaGF2ZSBhbGxvY2F0YWJsZSBjb21wcy4g Ki8KKyAgICAgIGlmICgoKGNvbXAtPnRzLnR5cGUgIT0gQlRfREVSSVZFRCB8fCAhY29tcC0+ dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXApCisJICAgICYmIGNvbXAtPnRzLnR5cGUg IT0gQlRfQ0xBU1MpCisJICB8fCBwb2ludGVyIHx8IHByb2NfcHRyKQorCWNvbnRpbnVlOwor CisgICAgICBnZmNfZXhwciAqdnRhYl9jYl9leHByOworICAgICAgaWYgKGNvbXAtPnRzLnR5 cGUgPT0gQlRfREVSSVZFRCkKKwl2dGFiX2NiX2V4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21f c3ltIChnZmNfZmluZF92dGFiICgmY29tcC0+dHMpKTsKKyAgICAgIGVsc2UKKwl7CisJICB2 dGFiX2NiX2V4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChzY2FsYXIpOworCSAgdnRh Yl9jYl9leHByLT5yZWYgPSBnZmNfZ2V0X3JlZiAoKTsKKwkgIHZ0YWJfY2JfZXhwci0+cmVm LT50eXBlID0gUkVGX0NPTVBPTkVOVDsKKwkgIHZ0YWJfY2JfZXhwci0+cmVmLT51LmMuc3lt ID0gZGVyaXZlZDsKKwkgIHZ0YWJfY2JfZXhwci0+cmVmLT51LmMuY29tcG9uZW50ID0gY29t cDsKKwkgIGdmY19hZGRfdnB0cl9jb21wb25lbnQgKHZ0YWJfY2JfZXhwcik7CisJfQorICAg ICAgZ2ZjX2FkZF9jb21wb25lbnRfcmVmICh2dGFiX2NiX2V4cHIsICJfY2FsbGJhY2siKTsK KworICAgICAgYmxvY2stPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfQVNTSUdOKTsKKyAg ICAgIGJsb2NrID0gYmxvY2stPm5leHQ7CisgICAgICBibG9jay0+ZXhwcjEgPSBnZmNfbHZh bF9leHByX2Zyb21fc3ltIChyZXN1bHQpOworICAgICAgYmxvY2stPmV4cHIyID0gZ2ZjX2dl dF9leHByICgpOworICAgICAgYmxvY2stPmV4cHIyLT50cyA9IHJlc3VsdC0+dHM7CisgICAg ICBibG9jay0+ZXhwcjItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgICAgICBibG9j ay0+ZXhwcjItPmV4cHJfdHlwZSA9IEVYUFJfT1A7CisgICAgICBibG9jay0+ZXhwcjItPnZh bHVlLm9wLm9wID0gSU5UUklOU0lDX1BMVVM7CisgICAgICBibG9jay0+ZXhwcjItPnZhbHVl Lm9wLm9wMSA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHJlc3VsdCk7CisgICAgICBibG9j ay0+ZXhwcjItPnZhbHVlLm9wLm9wMiA9IGdmY19nZXRfZXhwciAoKTsKKyAgICAgIGUgPSBi bG9jay0+ZXhwcjItPnZhbHVlLm9wLm9wMjsKKworICAgICAgaWYgKGNvbXAtPmF0dHIuZGlt ZW5zaW9uKQorCXsKKwkgIGUtPmV4cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047CisJICBlLT50 cyA9IGNiLT50czsKKwkgIGUtPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisJICBlLT52 YWx1ZS5mdW5jdGlvbi5pc3ltID0gZ2ZjX2ludHJpbnNpY19mdW5jdGlvbl9ieV9pZCAoR0ZD X0lTWU1fU1VNKTsKKwkgIGUtPnZhbHVlLmZ1bmN0aW9uLm5hbWUgPSBlLT52YWx1ZS5mdW5j dGlvbi5pc3ltLT5uYW1lOworCSAgZS0+dmFsdWUuZnVuY3Rpb24uZXN5bSA9IE5VTEw7CisJ ICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgp OworCSAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxf YXJnbGlzdCAoKTsKKwkgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+bmV4dCA9 IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisJICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1 YWwtPmV4cHIgPSBnZmNfZ2V0X2V4cHIgKCk7CisJICBlID0gZS0+dmFsdWUuZnVuY3Rpb24u YWN0dWFsLT5leHByOworCX0KKworICAgICAgZS0+ZXhwcl90eXBlID0gRVhQUl9GVU5DVElP TjsKKyAgICAgIGUtPnRzID0gY2ItPnRzOworICAgICAgZS0+d2hlcmUgPSBnZmNfY3VycmVu dF9sb2N1czsKKyAgICAgIGUtPnN5bXRyZWUgPSBnZmNfZmluZF9zeW10cmVlIChzdWJfbnMt PnN5bV9yb290LCBjYi0+bmFtZSk7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5lc3ltID0g Y2I7CisgICAgICBlLT52YWx1ZS5mdW5jdGlvbi5lc3ltLT5uYW1lID0gY2ItPm5hbWU7Cisg ICAgICBlLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0 ICgpOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5leHByID0gZ2ZjX2x2YWxf ZXhwcl9mcm9tX3N5bSAodG9rZW4pOworICAgICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFs LT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1 bmN0aW9uLmFjdHVhbC0+bmV4dC0+ZXhwciA9IGdmY19jb3B5X2V4cHIgKGV4cHIpOworICAg ICAgZS0+dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9hY3R1 YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dC0+ZXhwcgorCT0gZ2ZjX2dldF9pbnRfZXhwciAoZ2ZjX2luZGV4X2ludGVnZXJfa2lu ZCwgTlVMTCwKKwkJCSAgICBHRkNfQ0xBU1NfQ0JfQUxMT0NBVEFCTEUpOworICAgICAgZS0+ dmFsdWUuZnVuY3Rpb24uYWN0dWFsLT5uZXh0LT5uZXh0LT5uZXh0ID0gZ2ZjX2dldF9hY3R1 YWxfYXJnbGlzdCAoKTsKKyAgICAgIGUtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+bmV4dC0+ bmV4dC0+bmV4dC0+ZXhwciA9IHZ0YWJfY2JfZXhwcjsKKyAgICB9CisKKyAgdnRhYl9jYi0+ aW5pdGlhbGl6ZXIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChjYWxsYmFjayk7CisgIHZ0 YWJfY2ItPnRzLmludGVyZmFjZSA9IGNhbGxiYWNrOworICBnZmNfY29tbWl0X3N5bWJvbHMg KCk7Cit9CiAKIC8qIEFkZCBwcm9jZWR1cmUgcG9pbnRlcnMgZm9yIGFsbCB0eXBlLWJvdW5k IHByb2NlZHVyZXMgdG8gYSB2dGFiLiAgKi8KIApAQCAtMjQyMyw2ICsyOTMwLDggQEAgZ2Zj X2ZpbmRfZGVyaXZlZF92dGFiIChnZmNfc3ltYm9sICpkZXJpdmVkKQogCQkgIGMtPmluaXRp YWxpemVyID0gZ2ZjX2dldF9udWxsX2V4cHIgKE5VTEwpOwogCQl9CiAKKwkgICAgICB2dGFi LT50cy51LmRlcml2ZWQgPSB2dHlwZTsKKwogCSAgICAgIGlmICghZGVyaXZlZC0+YXR0ci51 bmxpbWl0ZWRfcG9seW1vcnBoaWMKIAkJICAmJiBkZXJpdmVkLT5jb21wb25lbnRzID09IE5V TEwKIAkJICAmJiAhZGVyaXZlZC0+YXR0ci56ZXJvX2NvbXApCkBAIC0yNTk4LDEzICszMTA3 LDI1IEBAIGdmY19maW5kX2Rlcml2ZWRfdnRhYiAoZ2ZjX3N5bWJvbCAqZGVyaXZlZCkKIAkJ ICBjLT50cy5pbnRlcmZhY2UgPSBkZWFsbG9jOwogCQl9CiAKKwkgICAgICAvKiBBZGQgY29t cG9uZW50IF9jYWxsYmFjay4gICovCisJICAgICAgaWYgKCFnZmNfYWRkX2NvbXBvbmVudCAo dnR5cGUsICJfY2FsbGJhY2siLCAmYykpCisJCWdvdG8gY2xlYW51cDsKKwkgICAgICBjLT5h dHRyLnByb2NfcG9pbnRlciA9IDE7CisJICAgICAgYy0+YXR0ci5hY2Nlc3MgPSBBQ0NFU1Nf UFJJVkFURTsKKwkgICAgICBjLT50YiA9IFhDTkVXIChnZmNfdHlwZWJvdW5kX3Byb2MpOwor CSAgICAgIGMtPnRiLT5wcGMgPSAxOworCSAgICAgIGlmIChkZXJpdmVkLT5hdHRyLnVubGlt aXRlZF9wb2x5bW9ycGhpYworCQkgIHx8IGRlcml2ZWQtPmF0dHIuYWJzdHJhY3QpCisJCWMt PmluaXRpYWxpemVyID0gZ2ZjX2dldF9udWxsX2V4cHIgKE5VTEwpOworCSAgICAgIGVsc2UK KwkJZ2VuZXJhdGVfY2FsbGJhY2tfd3JhcHBlciAodnRhYiwgZGVyaXZlZCwgbnMsIHRuYW1l LCBjKTsKKwogCSAgICAgIC8qIEFkZCBwcm9jZWR1cmUgcG9pbnRlcnMgZm9yIHR5cGUtYm91 bmQgcHJvY2VkdXJlcy4gICovCiAJICAgICAgaWYgKCFkZXJpdmVkLT5hdHRyLnVubGltaXRl ZF9wb2x5bW9ycGhpYykKIAkJYWRkX3Byb2NzX3RvX2RlY2xhcmVkX3Z0YWIgKGRlcml2ZWQs IHZ0eXBlKTsKIAkgIH0KIAogaGF2ZV92dHlwZToKLQkgIHZ0YWItPnRzLnUuZGVyaXZlZCA9 IHZ0eXBlOwogCSAgdnRhYi0+dmFsdWUgPSBnZmNfZGVmYXVsdF9pbml0aWFsaXplciAoJnZ0 YWItPnRzKTsKIAl9CiAgICAgICBmcmVlIChuYW1lKTsKZGlmZiAtLWdpdCBhL2djYy9mb3J0 cmFuL2Y5NS1sYW5nLmNjIGIvZ2NjL2ZvcnRyYW4vZjk1LWxhbmcuY2MKaW5kZXggMWE4OTVh MjUxMzIuLjljYWVkMGUxOTJmIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9mOTUtbGFuZy5j YworKysgYi9nY2MvZm9ydHJhbi9mOTUtbGFuZy5jYwpAQCAtMTI2LDYgKzEyNiw5IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgZ2ZjX2F0dHJpYnV0ZV90YWJsZVtd ID0KICN1bmRlZiBMQU5HX0hPT0tTX09NUF9DTEFVU0VfTElORUFSX0NUT1IKICN1bmRlZiBM QU5HX0hPT0tTX09NUF9DTEFVU0VfRFRPUgogI3VuZGVmIExBTkdfSE9PS1NfT01QX0ZJTklT SF9DTEFVU0UKKyN1bmRlZiBMQU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkcKKyN1bmRlZiBM QU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkdfUAorI3VuZGVmIExBTkdfSE9PS1NfT01QX0RF RVBfTUFQUElOR19DTlQKICN1bmRlZiBMQU5HX0hPT0tTX09NUF9BTExPQ0FUQUJMRV9QCiAj dW5kZWYgTEFOR19IT09LU19PTVBfU0NBTEFSX1RBUkdFVF9QCiAjdW5kZWYgTEFOR19IT09L U19PTVBfU0NBTEFSX1AKQEAgLTE2NCw2ICsxNjcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGF0dHJpYnV0ZV9zcGVjIGdmY19hdHRyaWJ1dGVfdGFibGVbXSA9CiAjZGVmaW5lIExBTkdf SE9PS1NfT01QX0NMQVVTRV9MSU5FQVJfQ1RPUglnZmNfb21wX2NsYXVzZV9saW5lYXJfY3Rv cgogI2RlZmluZSBMQU5HX0hPT0tTX09NUF9DTEFVU0VfRFRPUgkJZ2ZjX29tcF9jbGF1c2Vf ZHRvcgogI2RlZmluZSBMQU5HX0hPT0tTX09NUF9GSU5JU0hfQ0xBVVNFCQlnZmNfb21wX2Zp bmlzaF9jbGF1c2UKKyNkZWZpbmUgTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HCQlnZmNf b21wX2RlZXBfbWFwcGluZworI2RlZmluZSBMQU5HX0hPT0tTX09NUF9ERUVQX01BUFBJTkdf UAkJZ2ZjX29tcF9kZWVwX21hcHBpbmdfcAorI2RlZmluZSBMQU5HX0hPT0tTX09NUF9ERUVQ X01BUFBJTkdfQ05UCQlnZmNfb21wX2RlZXBfbWFwcGluZ19jbnQKICNkZWZpbmUgTEFOR19I T09LU19PTVBfQUxMT0NBVEFCTEVfUAkJZ2ZjX29tcF9hbGxvY2F0YWJsZV9wCiAjZGVmaW5l IExBTkdfSE9PS1NfT01QX1NDQUxBUl9QCQkJZ2ZjX29tcF9zY2FsYXJfcAogI2RlZmluZSBM QU5HX0hPT0tTX09NUF9TQ0FMQVJfVEFSR0VUX1AJCWdmY19vbXBfc2NhbGFyX3RhcmdldF9w CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oIGIvZ2NjL2ZvcnRyYW4vZ2Zv cnRyYW4uaAppbmRleCBmOGZkMWJhOGI5NS4uNWY2YzlkYzFjYWUgMTAwNjQ0Ci0tLSBhL2dj Yy9mb3J0cmFuL2dmb3J0cmFuLmgKKysrIGIvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaApAQCAt Mzc5NSw2ICszNzk1LDcgQEAgdm9pZCBnZmNfZnJlZV93YWl0IChnZmNfd2FpdCAqKTsKIGJv b2wgZ2ZjX3Jlc29sdmVfd2FpdCAoZ2ZjX3dhaXQgKik7CiAKIC8qIG1vZHVsZS5jYyAqLwor dm9pZCBnZmNfaW1wb3J0X2lzb19jX2JpbmRpbmdfbW9kdWxlICh2b2lkKTsKIHZvaWQgZ2Zj X21vZHVsZV9pbml0XzIgKHZvaWQpOwogdm9pZCBnZmNfbW9kdWxlX2RvbmVfMiAodm9pZCk7 CiB2b2lkIGdmY19kdW1wX21vZHVsZSAoY29uc3QgY2hhciAqLCBpbnQpOwpAQCAtMzg1Niw2 ICszODU3LDEzIEBAIGJvb2wgZ2ZjX2ludmFsaWRfbnVsbF9hcmcgKGdmY19leHByICopOwog CiAKIC8qIGNsYXNzLmNjICovCisjZGVmaW5lIEdGQ19DTEFTU19DQUxMQkFDS19ERUZBVUxU X0ZMQUcgMAorI2RlZmluZSBHRkNfQ0xBU1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUcgMQorI2Rl ZmluZSBHRkNfQ0xBU1NfQ0JfQUxMT0NBVEFCTEUgMAorI2RlZmluZSBHRkNfQ0xBU1NfQ0Jf UE9JTlRFUiAxCisjZGVmaW5lIEdGQ19DTEFTU19DQl9QUk9DX1BPSU5URVIgMgorI2RlZmlu ZSBHRkNfQ0xBU1NfQ0JfVlRBQkxFIDMKKyNkZWZpbmUgR0ZDX0NMQVNTX0NCX1ZQVFIgNAog dm9pZCBnZmNfZml4X2NsYXNzX3JlZnMgKGdmY19leHByICplKTsKIHZvaWQgZ2ZjX2FkZF9j b21wb25lbnRfcmVmIChnZmNfZXhwciAqLCBjb25zdCBjaGFyICopOwogdm9pZCBnZmNfYWRk X2NsYXNzX2FycmF5X3JlZiAoZ2ZjX2V4cHIgKik7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJh bi9tYXRjaC5jYyBiL2djYy9mb3J0cmFuL21hdGNoLmNjCmluZGV4IDcxNWE3NGViYTUxLi5l YzIxNDgwNzRiOSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MKKysrIGIvZ2Nj L2ZvcnRyYW4vbWF0Y2guY2MKQEAgLTY0MTAsNiArNjQxMCw4IEBAIHNlbGVjdF90eXBlX3Nl dF90bXAgKGdmY190eXBlc3BlYyAqdHMpCiAJewogCSAgc3ltLT5hdHRyLnBvaW50ZXIKIAkJ PSBDTEFTU19EQVRBIChzZWxlY3RvciktPmF0dHIuY2xhc3NfcG9pbnRlcjsKKwkgIHN5bS0+ YXR0ci5hbGxvY2F0YWJsZQorCQk9IENMQVNTX0RBVEEgKHNlbGVjdG9yKS0+YXR0ci5hbGxv Y2F0YWJsZTsKIAogCSAgLyogQ29weSBhY3Jvc3MgdGhlIGFycmF5IHNwZWMgdG8gdGhlIHNl bGVjdG9yLiAgKi8KIAkgIGlmIChDTEFTU19EQVRBIChzZWxlY3RvciktPmF0dHIuZGltZW5z aW9uCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9tb2R1bGUuY2MgYi9nY2MvZm9ydHJhbi9t b2R1bGUuY2MKaW5kZXggMjgxYjFiMTdmYmYuLjFiNjM1MzgxNjhjIDEwMDY0NAotLS0gYS9n Y2MvZm9ydHJhbi9tb2R1bGUuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vbW9kdWxlLmNjCkBAIC04 NCw3ICs4NCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAKIC8qIERvbid0IHB1dCBhbnkgc2luZ2xlIHF1b3RlICgnKSBpbiBNT0Rf VkVSU0lPTiwgaWYgeW91IHdhbnQgaXQgdG8gYmUKICAgIHJlY29nbml6ZWQuICAqLwotI2Rl ZmluZSBNT0RfVkVSU0lPTiAiMTUiCisjZGVmaW5lIE1PRF9WRVJTSU9OICIxNiIKIAogCiAv KiBTdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSBwb3NpdGlvbiB3aXRoaW4gYSBtb2R1bGUg ZmlsZS4gICovCkBAIC02NjMzLDcgKzY2MzMsNyBAQCBjcmVhdGVfaW50cmluc2ljX2Z1bmN0 aW9uIChjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCiAgICBsaXN0IHdhcyBwcm92aWRlZC4g ICovCiAKIHN0YXRpYyB2b2lkCi1pbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKHZvaWQp CitpbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKGJvb2wgaW1wb3J0X2FsbCkKIHsKICAg Z2ZjX3N5bWJvbCAqbW9kX3N5bSA9IE5VTEwsICpyZXR1cm5fdHlwZTsKICAgZ2ZjX3N5bXRy ZWUgKm1vZF9zeW10cmVlID0gTlVMTCwgKnRtcF9zeW10cmVlOwpAQCAtNjcwNCwxNiArNjcw NCwxNyBAQCBpbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKHZvaWQpCiAJfQogICAgIH0K IAotICBpZiAoKHdhbnRfY19wdHIgfHwgIW9ubHlfZmxhZykgJiYgIWNfcHRyKQorICBpZiAo KHdhbnRfY19wdHIgfHwgIW9ubHlfZmxhZyB8fCBpbXBvcnRfYWxsKSAmJiAhY19wdHIpCiAg ICAgY19wdHIgPSBnZW5lcmF0ZV9pc29jYmluZGluZ19zeW1ib2wgKGlzb19jX21vZHVsZV9u YW1lLAogCQkJCQkgKGlzb19jX2JpbmRpbmdfc3ltYm9sKQogCQkJCQkJCUlTT0NCSU5ESU5H X1BUUiwKLQkJCQkJIE5VTEwsIE5VTEwsIG9ubHlfZmxhZyk7Ci0gIGlmICgod2FudF9jX2Z1 bnB0ciB8fCAhb25seV9mbGFnKSAmJiAhY19mdW5wdHIpCisJCQkJCSBOVUxMLCBOVUxMLCBv bmx5X2ZsYWcgJiYgIWltcG9ydF9hbGwpOworICBpZiAoKHdhbnRfY19mdW5wdHIgfHwgIW9u bHlfZmxhZyB8fCBpbXBvcnRfYWxsKSAmJiAhY19mdW5wdHIpCiAgICAgY19mdW5wdHIgPSBn ZW5lcmF0ZV9pc29jYmluZGluZ19zeW1ib2wgKGlzb19jX21vZHVsZV9uYW1lLAogCQkJCQkg ICAgKGlzb19jX2JpbmRpbmdfc3ltYm9sKQogCQkJCQkJCUlTT0NCSU5ESU5HX0ZVTlBUUiwK LQkJCQkJICAgIE5VTEwsIE5VTEwsIG9ubHlfZmxhZyk7CisJCQkJCSAgICBOVUxMLCBOVUxM LAorCQkJCQkgICAgb25seV9mbGFnICYmICFpbXBvcnRfYWxsKTsKIAogICAvKiBHZW5lcmF0 ZSB0aGUgc3ltYm9scyBmb3IgdGhlIG5hbWVkIGNvbnN0YW50cyByZXByZXNlbnRpbmcKICAg ICAgdGhlIGtpbmRzIGZvciBpbnRyaW5zaWMgZGF0YSB0eXBlcy4gICovCkBAIC02ODEyLDcg KzY4MTMsNyBAQCBpbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKHZvaWQpCiAJICAgICAg fQogCSAgfQogCi0gICAgICBpZiAoIWZvdW5kICYmICFvbmx5X2ZsYWcpCisgICAgICBpZiAo IWZvdW5kICYmICFvbmx5X2ZsYWcgJiYgIWltcG9ydF9hbGwpCiAJewogCSAgLyogU2tpcCwg aWYgdGhlIHN5bWJvbCBpcyBub3QgaW4gdGhlIGVuYWJsZWQgc3RhbmRhcmQuICAqLwogCSAg c3dpdGNoIChpKQpAQCAtNjg0Niw3ICs2ODQ3LDkgQEAgaW1wb3J0X2lzb19jX2JpbmRpbmdf bW9kdWxlICh2b2lkKQogCSAgICAgIGRlZmF1bHQ6CiAJCTsgLyogTm90IEdGQ19TVERfKiB2 ZXJzaW9uZWQuICAqLwogCSAgICB9Ci0KKwl9CisgICAgICBpZiAoIWZvdW5kICYmICghb25s eV9mbGFnIHx8IGltcG9ydF9hbGwpKQorCXsKIAkgIHN3aXRjaCAoaSkKIAkgICAgewogI2Rl ZmluZSBOQU1FRF9GVU5DVElPTihhLGIsYyxkKSBcCkBAIC02ODk2LDYgKzY4OTksMTMgQEAg aW1wb3J0X2lzb19jX2JpbmRpbmdfbW9kdWxlICh2b2lkKQogICAgICB9CiB9CiAKK3ZvaWQK K2dmY19pbXBvcnRfaXNvX2NfYmluZGluZ19tb2R1bGUgKHZvaWQpCit7CisgIGdjY19hc3Nl cnQgKGdmY19yZW5hbWVfbGlzdCA9PSBOVUxMKTsKKyAgaW1wb3J0X2lzb19jX2JpbmRpbmdf bW9kdWxlICh0cnVlKTsKK30KKwogCiAvKiBBZGQgYW4gaW50ZWdlciBuYW1lZCBjb25zdGFu dCBmcm9tIGEgZ2l2ZW4gbW9kdWxlLiAgKi8KIApAQCAtNzMwNSw3ICs3MzE1LDcgQEAgZ2Zj X3VzZV9tb2R1bGUgKGdmY191c2VfbGlzdCAqbW9kdWxlKQogICAgICAgaWYgKHN0cmNtcCAo bW9kdWxlX25hbWUsICJpc29fY19iaW5kaW5nIikgPT0gMAogCSAgJiYgZ2ZjX25vdGlmeV9z dGQgKEdGQ19TVERfRjIwMDMsICJJU09fQ19CSU5ESU5HIG1vZHVsZSBhdCAlQyIpKQogCXsK LQkgIGltcG9ydF9pc29fY19iaW5kaW5nX21vZHVsZSgpOworCSAgaW1wb3J0X2lzb19jX2Jp bmRpbmdfbW9kdWxlIChmYWxzZSk7CiAJICBmcmVlX3JlbmFtZSAobW9kdWxlLT5yZW5hbWUp OwogCSAgbW9kdWxlLT5yZW5hbWUgPSBOVUxMOwogCSAgZ2ZjX2N1cnJlbnRfbG9jdXMgPSBv bGRfbG9jdXM7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9vcGVubXAuY2MgYi9nY2MvZm9y dHJhbi9vcGVubXAuY2MKaW5kZXggMTkxNDJjNGQ4ZDAuLjQzMzdiY2JmZTI1IDEwMDY0NAot LS0gYS9nY2MvZm9ydHJhbi9vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNj CkBAIC03MDQxLDEzICs3MDQxLDYgQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2ZjX2NvZGUg KmNvZGUsIGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJCQkgJiYgbi0+c3ltLT5h cy0+dHlwZSA9PSBBU19BU1NVTUVEX1NJWkUpCiAJCSAgZ2ZjX2Vycm9yICgiQXNzdW1lZCBz aXplIGFycmF5ICVxcyBpbiAlcyBjbGF1c2UgYXQgJUwiLAogCQkJICAgICBuLT5zeW0tPm5h bWUsIG5hbWUsICZuLT53aGVyZSk7Ci0JCWlmICghb3BlbmFjYwotCQkgICAgJiYgbGlzdCA9 PSBPTVBfTElTVF9NQVAKLQkJICAgICYmIG4tPnN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVE Ci0JCSAgICAmJiBuLT5zeW0tPnRzLnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wKQotCQkg IGdmY19lcnJvciAoIkxpc3QgaXRlbSAlcXMgd2l0aCBhbGxvY2F0YWJsZSBjb21wb25lbnRz IGlzIG5vdCAiCi0JCQkgICAgICJwZXJtaXR0ZWQgaW4gbWFwIGNsYXVzZSBhdCAlTCIsIG4t PnN5bS0+bmFtZSwKLQkJCSAgICAgJm4tPndoZXJlKTsKIAkJaWYgKGxpc3QgPT0gT01QX0xJ U1RfTUFQICYmICFvcGVuYWNjKQogCQkgIHN3aXRjaCAoY29kZS0+b3ApCiAJCSAgICB7CmRp ZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjIGIvZ2NjL2ZvcnRyYW4vcmVzb2x2 ZS5jYwppbmRleCA3NTNhYTI3ZTIzZi4uNWU4OWM1MmVjMDYgMTAwNjQ0Ci0tLSBhL2djYy9m b3J0cmFuL3Jlc29sdmUuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYwpAQCAtNDg4 LDcgKzQ4OCw4IEBAIGdmY19yZXNvbHZlX2Zvcm1hbF9hcmdsaXN0IChnZmNfc3ltYm9sICpw cm9jKQogCSAgICAgIGNvbnRpbnVlOwogCSAgICB9CiAKLQkgIGlmIChzeW0tPmF0dHIuZmxh dm9yID09IEZMX1BST0NFRFVSRSkKKwkgIGlmIChzeW0tPmF0dHIuZmxhdm9yID09IEZMX1BS T0NFRFVSRQorCSAgICAgICYmICFwcm9jLT5hdHRyLmFydGlmaWNpYWwgJiYgIXN5bS0+YXR0 ci5hcnRpZmljaWFsKQogCSAgICB7CiAJICAgICAgZ2ZjX2Vycm9yICgiRHVtbXkgcHJvY2Vk dXJlICVxcyBub3QgYWxsb3dlZCBpbiBlbGVtZW50YWwgIgogCQkJICJwcm9jZWR1cmUgJXFz IGF0ICVMIiwgc3ltLT5uYW1lLCBwcm9jLT5uYW1lLApAQCAtMTg3NSw3ICsxODc2LDggQEAg Z2ZjX3Jlc29sdmVfaW50cmluc2ljIChnZmNfc3ltYm9sICpzeW0sIGxvY3VzICpsb2MpCiAg IHN5bS0+YXR0ci5lbGVtZW50YWwgPSBpc3ltLT5lbGVtZW50YWw7CiAKICAgLyogQ2hlY2sg aXQgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGluIHRoZSBzdGFuZGFyZCBzZXR0aW5ncy4gICov Ci0gIGlmICghZ2ZjX2NoZWNrX2ludHJpbnNpY19zdGFuZGFyZCAoaXN5bSwgJnN5bXN0ZCwg ZmFsc2UsIHN5bS0+ZGVjbGFyZWRfYXQpKQorICBpZiAoKCFzeW0tPm5zLT5wcm9jX25hbWUg fHwgIXN5bS0+bnMtPnByb2NfbmFtZS0+YXR0ci5hcnRpZmljaWFsKQorICAgICAgJiYgIWdm Y19jaGVja19pbnRyaW5zaWNfc3RhbmRhcmQgKGlzeW0sICZzeW1zdGQsIGZhbHNlLCBzeW0t PmRlY2xhcmVkX2F0KSkKICAgICB7CiAgICAgICBnZmNfZXJyb3IgKCJUaGUgaW50cmluc2lj ICVxcyBkZWNsYXJlZCBJTlRSSU5TSUMgYXQgJUwgaXMgbm90ICIKIAkJICJhdmFpbGFibGUg aW4gdGhlIGN1cnJlbnQgc3RhbmRhcmQgc2V0dGluZ3MgYnV0ICVzLiBVc2UgIgpAQCAtMTMz ODEsNyArMTMzODMsNyBAQCByZXNvbHZlX2ZsX3Byb2NlZHVyZSAoZ2ZjX3N5bWJvbCAqc3lt LCBpbnQgbXBfZmxhZykKIAkJICAgICBuYW1lLCAmc3ltLT5kZWNsYXJlZF9hdCk7CiAJICBy ZXR1cm4gZmFsc2U7CiAJfQotICAgICAgaWYgKHN5bS0+YXR0ci5kdW1teSkKKyAgICAgIGlm IChzeW0tPmF0dHIuZHVtbXkgJiYgIXN5bS0+YXR0ci5hcnRpZmljaWFsKQogCXsKIAkgIGdm Y19lcnJvciAoIkR1bW15IHByb2NlZHVyZSAlcXMgYXQgJUwgc2hhbGwgbm90IGJlIGVsZW1l bnRhbCIsCiAJCSAgICAgc3ltLT5uYW1lLCAmc3ltLT5kZWNsYXJlZF9hdCk7CkBAIC0xNzQ2 OCw3ICsxNzQ3MCw4IEBAIHJlc29sdmVfdHlwZXMgKGdmY19uYW1lc3BhY2UgKm5zKQogCiAg IGZvciAobiA9IG5zLT5jb250YWluZWQ7IG47IG4gPSBuLT5zaWJsaW5nKQogICAgIHsKLSAg ICAgIGlmIChnZmNfcHVyZSAobnMtPnByb2NfbmFtZSkgJiYgIWdmY19wdXJlIChuLT5wcm9j X25hbWUpKQorICAgICAgaWYgKGdmY19wdXJlIChucy0+cHJvY19uYW1lKSAmJiAhZ2ZjX3B1 cmUgKG4tPnByb2NfbmFtZSkKKwkgICYmICghbi0+cHJvY19uYW1lIHx8ICFuLT5wcm9jX25h bWUtPmF0dHIuYXJ0aWZpY2lhbCkpCiAJZ2ZjX2Vycm9yICgiQ29udGFpbmVkIHByb2NlZHVy ZSAlcXMgYXQgJUwgb2YgYSBQVVJFIHByb2NlZHVyZSBtdXN0ICIKIAkJICAgImFsc28gYmUg UFVSRSIsIG4tPnByb2NfbmFtZS0+bmFtZSwKIAkJICAgJm4tPnByb2NfbmFtZS0+ZGVjbGFy ZWRfYXQpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MgYi9nY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5jYwppbmRleCBjZmI2ZWFjMTFjNy4uN2NkNGVmZGVlNWQg MTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjCisrKyBiL2djYy9mb3J0 cmFuL3RyYW5zLWFycmF5LmNjCkBAIC00NjUsOSArNDY1LDExIEBAIGdmY19jb252X2Rlc2Ny aXB0b3Jfc3RyaWRlX2dldCAodHJlZSBkZXNjLCB0cmVlIGRpbSkKICAgZ2NjX2Fzc2VydCAo R0ZDX0RFU0NSSVBUT1JfVFlQRV9QICh0eXBlKSk7CiAgIGlmIChpbnRlZ2VyX3plcm9wIChk aW0pCiAgICAgICAmJiAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJB WV9BTExPQ0FUQUJMRQotCSAgfHxHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZD X0FSUkFZX0FTU1VNRURfU0hBUEVfQ09OVAotCSAgfHxHRkNfVFlQRV9BUlJBWV9BS0lORCAo dHlwZSkgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19DT05UCi0JICB8fEdGQ19UWVBFX0FS UkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRFUl9DT05UKSkKKwkgIHx8IEdG Q19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9TSEFQRV9D T05UCisJICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FT U1VNRURfUkFOS19DT05UCisJICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0g R0ZDX0FSUkFZX0FTU1VNRURfUkFOS19BTExPQ0FUQUJMRQorCSAgfHwgR0ZDX1RZUEVfQVJS QVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfUE9JTlRFUl9DT05U CisJICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX1BPSU5U RVJfQ09OVCkpCiAgICAgcmV0dXJuIGdmY19pbmRleF9vbmVfbm9kZTsKIAogICByZXR1cm4g Z2ZjX2NvbnZfZGVzY3JpcHRvcl9zdHJpZGUgKGRlc2MsIGRpbSk7CkBAIC04MDUxLDcgKzgw NTMsOCBAQCBnZmNfY29udl9leHByX2Rlc2NyaXB0b3IgKGdmY19zZSAqc2UsIGdmY19leHBy ICpleHByKQogCiAKIC8qIENhbGN1bGF0ZSB0aGUgYXJyYXkgc2l6ZSAobnVtYmVyIG9mIGVs ZW1lbnRzKTsgaWYgZGltICE9IE5VTExfVFJFRSwKLSAgIHJldHVybiBzaXplIGZvciB0aGF0 IGRpbSAoZGltPTAuLnJhbmstMTsgb25seSBmb3IgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QKS4g ICovCisgICByZXR1cm4gc2l6ZSBmb3IgdGhhdCBkaW0gKGRpbT0wLi5yYW5rLTE7IG9ubHkg Zm9yIEdGQ19ERVNDUklQVE9SX1RZUEVfUCkuCisgICBJZiAhZXhwciAmJiBkZXNjcmlwdG9y IGFycmF5LCB0aGUgcmFuayBpcyB0YWtlbiBmcm9tIHRoZSBkZXNjcmlwdG9yLiAgKi8KIHRy ZWUKIGdmY190cmVlX2FycmF5X3NpemUgKHN0bXRibG9ja190ICpibG9jaywgdHJlZSBkZXNj LCBnZmNfZXhwciAqZXhwciwgdHJlZSBkaW0pCiB7CkBAIC04MDYxLDIwICs4MDY0LDIxIEBA IGdmY190cmVlX2FycmF5X3NpemUgKHN0bXRibG9ja190ICpibG9jaywgdHJlZSBkZXNjLCBn ZmNfZXhwciAqZXhwciwgdHJlZSBkaW0pCiAgICAgICByZXR1cm4gR0ZDX1RZUEVfQVJSQVlf U0laRSAoVFJFRV9UWVBFIChkZXNjKSk7CiAgICAgfQogICB0cmVlIHNpemUsIHRtcCwgcmFu ayA9IE5VTExfVFJFRSwgY29uZCA9IE5VTExfVFJFRTsKLSAgc3ltYm9sX2F0dHJpYnV0ZSBh dHRyID0gZ2ZjX2V4cHJfYXR0ciAoZXhwcik7Ci0gIGdmY19hcnJheV9zcGVjICphcyA9IGdm Y19nZXRfZnVsbF9hcnJheXNwZWNfZnJvbV9leHByIChleHByKTsKICAgZ2NjX2Fzc2VydCAo R0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGRlc2MpKSk7Ci0gIGlmICgoIWF0 dHIucG9pbnRlciAmJiAhYXR0ci5hbGxvY2F0YWJsZSAmJiBhcyAmJiBhcy0+dHlwZSA9PSBB U19BU1NVTUVEX1JBTkspCi0gICAgICAgfHwgIWRpbSkKLSAgICB7Ci0gICAgICBpZiAoZXhw ci0+cmFuayA8IDApCi0JcmFuayA9IGZvbGRfY29udmVydCAoc2lnbmVkX2NoYXJfdHlwZV9u b2RlLAotCQkJICAgICBnZmNfY29udl9kZXNjcmlwdG9yX3JhbmsgKGRlc2MpKTsKLSAgICAg IGVsc2UKLQlyYW5rID0gYnVpbGRfaW50X2NzdCAoc2lnbmVkX2NoYXJfdHlwZV9ub2RlLCBl eHByLT5yYW5rKTsKLSAgICB9CisgIC8qIE5vbmFsbG9jYXRhYmxlLCBub25wb2ludGVyIGFz c3VtZWQtcmFuayBhcnJheS4gICovCisgIGVudW0gZ2ZjX2FycmF5X2tpbmQgYWtpbmQgPSBH RkNfVFlQRV9BUlJBWV9BS0lORCAoVFJFRV9UWVBFIChkZXNjKSk7CisgIGJvb2wgYXNzdW1l ZF9yYW5rID0gKGFraW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQ09OVAorCQkgICAg ICAgfHwgYWtpbmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOSworCQkgICAgICAgfHwgYWtp bmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19BTExPQ0FUQUJMRQorCQkgICAgICAgfHwg YWtpbmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVSCisJCSAgICAgICB8fCBh a2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX1BPSU5URVJfQ09OVCk7CisgIGlmIChl eHByID09IE5VTEwgfHwgZXhwci0+cmFuayA8IDApCisgICAgcmFuayA9IGZvbGRfY29udmVy dCAoc2lnbmVkX2NoYXJfdHlwZV9ub2RlLAorCQkJIGdmY19jb252X2Rlc2NyaXB0b3JfcmFu ayAoZGVzYykpOworICBlbHNlCisgICAgcmFuayA9IGJ1aWxkX2ludF9jc3QgKHNpZ25lZF9j aGFyX3R5cGVfbm9kZSwgZXhwci0+cmFuayk7CiAKLSAgaWYgKGRpbSB8fCBleHByLT5yYW5r ID09IDEpCisgIGlmIChkaW0gfHwgKGV4cHIgJiYgZXhwci0+cmFuayA9PSAxKSkKICAgICB7 CiAgICAgICBpZiAoIWRpbSkKIAlkaW0gPSBnZmNfaW5kZXhfemVyb19ub2RlOwpAQCAtODA5 MSw4ICs4MDk1LDggQEAgZ2ZjX3RyZWVfYXJyYXlfc2l6ZSAoc3RtdGJsb2NrX3QgKmJsb2Nr LCB0cmVlIGRlc2MsIGdmY19leHByICpleHByLCB0cmVlIGRpbSkKIAkgICBzaXplID0gbWF4 ICgwLCBzaXplKTsgICovCiAgICAgICBzaXplID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9s b2NhdGlvbiwgTUFYX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLAogCQkJICAgICAgc2l6 ZSwgZ2ZjX2luZGV4X3plcm9fbm9kZSk7Ci0gICAgICBpZiAoIWF0dHIucG9pbnRlciAmJiAh YXR0ci5hbGxvY2F0YWJsZQotCSAgJiYgYXMgJiYgYXMtPnR5cGUgPT0gQVNfQVNTVU1FRF9S QU5LKQorICAgICAgaWYgKGFzc3VtZWRfcmFuayAmJiAoYWtpbmQgPT0gR0ZDX0FSUkFZX0FT U1VNRURfUkFOS19DT05UCisJCQkgICB8fCBha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9S QU5LKSkKIAl7CiAJICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBN SU5VU19FWFBSLCBzaWduZWRfY2hhcl90eXBlX25vZGUsCiAJCQkJIHJhbmssIGJ1aWxkX2lu dF9jc3QgKHNpZ25lZF9jaGFyX3R5cGVfbm9kZSwgMSkpOwpAQCAtODEzMyw3ICs4MTM3LDgg QEAgZ2ZjX3RyZWVfYXJyYXlfc2l6ZSAoc3RtdGJsb2NrX3QgKmJsb2NrLCB0cmVlIGRlc2Ms IGdmY19leHByICpleHByLCB0cmVlIGRpbSkKIAkgICBleHRlbnQgPSAwCiAgICAgICBzaXpl ICo9IGV4dGVudC4gICovCiAgIGNvbmQgPSBOVUxMX1RSRUU7Ci0gIGlmICghYXR0ci5wb2lu dGVyICYmICFhdHRyLmFsbG9jYXRhYmxlICYmIGFzICYmIGFzLT50eXBlID09IEFTX0FTU1VN RURfUkFOSykKKyAgaWYgKGFzc3VtZWRfcmFuayAmJiAoYWtpbmQgPT0gR0ZDX0FSUkFZX0FT U1VNRURfUkFOS19DT05UCisJCSAgICAgICB8fCBha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1F RF9SQU5LKSkKICAgICB7CiAgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xv Y2F0aW9uLCBNSU5VU19FWFBSLCBzaWduZWRfY2hhcl90eXBlX25vZGUsCiAJCQkgICAgIHJh bmssIGJ1aWxkX2ludF9jc3QgKHNpZ25lZF9jaGFyX3R5cGVfbm9kZSwgMSkpOwpAQCAtODYy NSw3ICs4NjMwLDEwIEBAIGdmY19mdWxsX2FycmF5X3NpemUgKHN0bXRibG9ja190ICpibG9j aywgdHJlZSBkZWNsLCBpbnQgcmFuaykKICAgdHJlZSBpZHg7CiAgIHRyZWUgbmVsZW1zOwog ICB0cmVlIHRtcDsKLSAgaWR4ID0gZ2ZjX3JhbmtfY3N0W3JhbmsgLSAxXTsKKyAgaWYgKHJh bmsgPCAwKQorICAgIGlkeCA9IGdmY19jb252X2Rlc2NyaXB0b3JfcmFuayAoZGVjbCk7Cisg IGVsc2UKKyAgICBpZHggPSBnZmNfcmFua19jc3RbcmFuayAtIDFdOwogICBuZWxlbXMgPSBn ZmNfY29udl9kZXNjcmlwdG9yX3Vib3VuZF9nZXQgKGRlY2wsIGlkeCk7CiAgIHRtcCA9IGdm Y19jb252X2Rlc2NyaXB0b3JfbGJvdW5kX2dldCAoZGVjbCwgaWR4KTsKICAgdG1wID0gZm9s ZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTUlOVVNfRVhQUiwgZ2ZjX2FycmF5X2lu ZGV4X3R5cGUsCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjIGIvZ2Nj L2ZvcnRyYW4vdHJhbnMtZXhwci5jYwppbmRleCBlYjZhNzhjM2E2Mi4uOTZkYzQ4YzRlMDgg MTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MKKysrIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtZXhwci5jYwpAQCAtMjA0LDYgKzIwNCw3IEBAIGdmY19nZXRfdWx0aW1hdGVf YWxsb2NfcHRyX2NvbXBzX2NhZl90b2tlbiAoZ2ZjX3NlICpvdXRlcnNlLCBnZmNfZXhwciAq ZXhwcikKICNkZWZpbmUgVlRBQkxFX0NPUFlfRklFTEQgNAogI2RlZmluZSBWVEFCTEVfRklO QUxfRklFTEQgNQogI2RlZmluZSBWVEFCTEVfREVBTExPQ0FURV9GSUVMRCA2CisjZGVmaW5l IFZUQUJMRV9DQUxMQkFDS19GSUVMRCA3CiAKIAogdHJlZQpAQCAtMzgzLDYgKzM4NCw3IEBA IFZUQUJfR0VUX0ZJRUxEX0dFTiAoZGVmX2luaXQsIFZUQUJMRV9ERUZfSU5JVF9GSUVMRCkK IFZUQUJfR0VUX0ZJRUxEX0dFTiAoY29weSwgVlRBQkxFX0NPUFlfRklFTEQpCiBWVEFCX0dF VF9GSUVMRF9HRU4gKGZpbmFsLCBWVEFCTEVfRklOQUxfRklFTEQpCiBWVEFCX0dFVF9GSUVM RF9HRU4gKGRlYWxsb2NhdGUsIFZUQUJMRV9ERUFMTE9DQVRFX0ZJRUxEKQorVlRBQl9HRVRf RklFTERfR0VOIChjYWxsYmFjaywgVlRBQkxFX0NBTExCQUNLX0ZJRUxEKQogI3VuZGVmIFZU QUJfR0VUX0ZJRUxEX0dFTgogCiAvKiBUaGUgc2l6ZSBmaWVsZCBpcyByZXR1cm5lZCBhcyBh biBhcnJheSBpbmRleCB0eXBlLiAgVGhlcmVmb3JlIHRyZWF0CkBAIC00MjAsNiArNDIyLDkg QEAgZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHRyZWUgdnB0cikKICN1bmRlZiBWVEFCTEVfREVGX0lO SVRfRklFTEQKICN1bmRlZiBWVEFCTEVfQ09QWV9GSUVMRAogI3VuZGVmIFZUQUJMRV9GSU5B TF9GSUVMRAorI3VuZGVmIFZUQUJMRV9ERUFMTE9DQVRFX0ZJRUxECisjdW5kZWYgVlRBQkxF X0NBTExCQUNLX0ZJRUxECisKIAogCiAvKiBJRiB0cyBpcyBudWxsIChkZWZhdWx0KSwgc2Vh cmNoIGZvciB0aGUgbGFzdCBfY2xhc3MgcmVmIGluIHRoZSBjaGFpbgpAQCAtOTQ5Niw3ICs5 NTAxLDggQEAgZ2ZjX2NvbnZfZXhwcl9yZWZlcmVuY2UgKGdmY19zZSAqIHNlLCBnZmNfZXhw ciAqIGV4cHIsIGJvb2wgYWRkX2Nsb2JiZXIpCiAgIGlmIChleHByLT50cy50eXBlID09IEJU X0NIQVJBQ1RFUikKICAgICB7CiAgICAgICBnZmNfY29udl9leHByIChzZSwgZXhwcik7Ci0g ICAgICBnZmNfY29udl9zdHJpbmdfcGFyYW1ldGVyIChzZSk7CisgICAgICBpZiAoZXhwci0+ ZXhwcl90eXBlICE9IEVYUFJfVkFSSUFCTEUgfHwgIWdmY19leHByX2F0dHIgKGV4cHIpLnBy b2NfcG9pbnRlcikKKwlnZmNfY29udl9zdHJpbmdfcGFyYW1ldGVyIChzZSk7CiAgICAgICBy ZXR1cm47CiAgICAgfQogCkBAIC05NTU0LDYgKzk1NjAsOSBAQCBnZmNfY29udl9leHByX3Jl ZmVyZW5jZSAoZ2ZjX3NlICogc2UsIGdmY19leHByICogZXhwciwgYm9vbCBhZGRfY2xvYmJl cikKICAgICAgIFRSRUVfU1RBVElDICh2YXIpID0gMTsKICAgICAgIHB1c2hkZWNsICh2YXIp OwogICAgIH0KKyAgZWxzZSBpZiAoZXhwci0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUK KwkgICAmJiAoREVDTF9QIChzZS0+ZXhwcikgfHwgVFJFRV9DT0RFIChzZS0+ZXhwcikgPT0g Q09NUE9ORU5UX1JFRikpCisgICAgdmFyID0gc2UtPmV4cHI7CiAgIGVsc2UKICAgICB7CiAg ICAgICB2YXIgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFIChzZS0+ZXhwciksIE5VTEwp OwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmNjIGIvZ2NjL2Zv cnRyYW4vdHJhbnMtaW50cmluc2ljLmNjCmluZGV4IGU2ODBkZTFkYmQxLi4yZDVkMDllOWQ2 OSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmNjCisrKyBiL2dj Yy9mb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jYwpAQCAtODA5OSwxMiArODA5OSwxOCBAQCBn ZmNfY29udl9pbnRyaW5zaWNfc2l6ZW9mIChnZmNfc2UgKnNlLCBnZmNfZXhwciAqZXhwcikK IAkgY2xhc3Mgb2JqZWN0LiAgVGhlIGNsYXNzIG9iamVjdCBtYXkgYmUgYSBub24tcG9pbnRl ciBvYmplY3QsIGUuZy4KIAkgbG9jYXRlZCBvbiB0aGUgc3RhY2ssIG9yIGEgbWVtb3J5IGxv Y2F0aW9uIHBvaW50ZWQgdG8sIGUuZy4gYQogCSBwYXJhbWV0ZXIsIGkuZS4sIGFuIGluZGly ZWN0X3JlZi4gICovCi0gICAgICBpZiAoYXJnLT5yYW5rIDwgMAotCSAgfHwgKGFyZy0+cmFu ayA+IDAgJiYgIVZBUl9QIChhcmdzZS5leHByKQotCSAgICAgICYmICgoSU5ESVJFQ1RfUkVG X1AgKFRSRUVfT1BFUkFORCAoYXJnc2UuZXhwciwgMCkpCi0JCSAgICYmIEdGQ19ERUNMX0NM QVNTIChUUkVFX09QRVJBTkQgKAotCQkJCQlUUkVFX09QRVJBTkQgKGFyZ3NlLmV4cHIsIDAp LCAwKSkpCi0JCSAgfHwgR0ZDX0RFQ0xfQ0xBU1MgKFRSRUVfT1BFUkFORCAoYXJnc2UuZXhw ciwgMCkpKSkpCisgICAgICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoYXJnc2Uu ZXhwcikpCisJICAmJiBHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAo YXJnc2UuZXhwcikpKSkKKwlieXRlX3NpemUKKwkgID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9n ZXQgKGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChhcmdzZS5leHByKSk7CisgICAgICBlbHNl IGlmIChHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKGFyZ3NlLmV4cHIpKSkKKwlieXRl X3NpemUgPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoYXJnc2UuZXhwcik7CisgICAgICBl bHNlIGlmIChhcmctPnJhbmsgPCAwCisJICAgICAgIHx8IChhcmctPnJhbmsgPiAwICYmICFW QVJfUCAoYXJnc2UuZXhwcikKKwkJICAgJiYgKChJTkRJUkVDVF9SRUZfUCAoVFJFRV9PUEVS QU5EIChhcmdzZS5leHByLCAwKSkKKwkJCSYmIEdGQ19ERUNMX0NMQVNTIChUUkVFX09QRVJB TkQgKAorCQkJCQkgICAgIFRSRUVfT1BFUkFORCAoYXJnc2UuZXhwciwgMCksIDApKSkKKwkJ ICAgICAgIHx8IEdGQ19ERUNMX0NMQVNTIChUUkVFX09QRVJBTkQgKGFyZ3NlLmV4cHIsIDAp KSkpKQogCWJ5dGVfc2l6ZSA9IGdmY19jbGFzc192dGFiX3NpemVfZ2V0IChUUkVFX09QRVJB TkQgKGFyZ3NlLmV4cHIsIDApKTsKICAgICAgIGVsc2UgaWYgKGFyZy0+cmFuayA+IDAKIAkg ICAgICAgfHwgKGFyZy0+cmFuayA9PSAwCkBAIC04MTE0LDcgKzgxMjAsNyBAQCBnZmNfY29u dl9pbnRyaW5zaWNfc2l6ZW9mIChnZmNfc2UgKnNlLCBnZmNfZXhwciAqZXhwcikKIAlieXRl X3NpemUgPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoCiAJICAgICAgR0ZDX0RFQ0xfU0FW RURfREVTQ1JJUFRPUiAoYXJnLT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9kZWNsKSk7CiAg ICAgICBlbHNlCi0JYnl0ZV9zaXplID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKGFyZ3Nl LmV4cHIpOworCWdjY191bnJlYWNoYWJsZSAoKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBA IC04ODk5LDEzICs4OTA1LDEzIEBAIGdmY19jb252X2Fzc29jaWF0ZWQgKGdmY19zZSAqc2Us IGdmY19leHByICpleHByKQogICAgICAgaWYgKHNjYWxhcikKICAgICAgICAgewogCSAgLyog QSBwb2ludGVyIHRvIGEgc2NhbGFyLiAgKi8KKwkgIHN5bWJvbF9hdHRyaWJ1dGUgYXR0ciA9 IGdmY19leHByX2F0dHIgKGFyZzEtPmV4cHIpOwogCSAgYXJnMXNlLndhbnRfcG9pbnRlciA9 IDE7CiAJICBnZmNfY29udl9leHByICgmYXJnMXNlLCBhcmcxLT5leHByKTsKLQkgIGlmIChh cmcxLT5leHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5wcm9jX3BvaW50ZXIKLQkgICAgICAm JiBhcmcxLT5leHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5kdW1teSkKKwkgIGlmIChhdHRy LnByb2NfcG9pbnRlciAmJiBhdHRyLmR1bW15KQogCSAgICBhcmcxc2UuZXhwciA9IGJ1aWxk X2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sCiAJCQkJCQkgICAgICAg YXJnMXNlLmV4cHIpOwotICAJICBpZiAoYXJnMS0+ZXhwci0+dHMudHlwZSA9PSBCVF9DTEFT UykKKwkgIGlmICghYXR0ci5wcm9jX3BvaW50ZXIgJiYgYXJnMS0+ZXhwci0+dHMudHlwZSA9 PSBCVF9DTEFTUykKIAkgICAgewogCSAgICAgIHRtcDIgPSBnZmNfY2xhc3NfZGF0YV9nZXQg KGFyZzFzZS5leHByKTsKIAkgICAgICBpZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVF X1RZUEUgKHRtcDIpKSkKQEAgLTk1MjUsMTMgKzk1MzEsNiBAQCBjb252X2lzb2NiaW5kaW5n X2Z1bmN0aW9uIChnZmNfc2UgKnNlLCBnZmNfZXhwciAqZXhwcikKIAkgIGdmY19jb252X2V4 cHJfZGVzY3JpcHRvciAoc2UsIGFyZy0+ZXhwcik7CiAJICBzZS0+ZXhwciA9IGdmY19jb252 X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKHNlLT5leHByKTsKIAl9Ci0KLSAgICAgIC8qIFRPRE8g LS0gdGhlIGZvbGxvd2luZyB0d28gbGluZXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0 IGlmCi0JIHRoZXkncmUgcmVtb3ZlZCwgYSBidWcgaXMgZXhwb3NlZCBsYXRlciBpbiB0aGUg Y29kZSBwYXRoLgotCSBUaGlzIHdvcmthcm91bmQgd2FzIHRodXMgaW50cm9kdWNlZCwgYnV0 IHdpbGwgaGF2ZSB0byBiZQotCSByZW1vdmVkOyBwbGVhc2Ugc2VlIFBSIDM1MTUwIGZvciBk ZXRhaWxzIGFib3V0IHRoZSBpc3N1ZS4gICovCi0gICAgICBzZS0+ZXhwciA9IGNvbnZlcnQg KHB2b2lkX3R5cGVfbm9kZSwgc2UtPmV4cHIpOwotICAgICAgc2UtPmV4cHIgPSBnZmNfZXZh bHVhdGVfbm93IChzZS0+ZXhwciwgJnNlLT5wcmUpOwogICAgIH0KICAgZWxzZSBpZiAoZXhw ci0+dmFsdWUuZnVuY3Rpb24uaXN5bS0+aWQgPT0gR0ZDX0lTWU1fQ19GVU5MT0MpCiAgICAg Z2ZjX2NvbnZfZXhwcl9yZWZlcmVuY2UgKHNlLCBhcmctPmV4cHIpOwpkaWZmIC0tZ2l0IGEv Z2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmNjCmluZGV4IDRkNTZhNzcxMzQ5Li4xOWMwZTAzODBmYiAxMDA2NDQKLS0tIGEvZ2NjL2Zv cnRyYW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5j YwpAQCAtMjUsOSArMjUsMTUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAidHJl ZS5oIgogI2luY2x1ZGUgImdmb3J0cmFuLmgiCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIK KyNpbmNsdWRlICJ0cmVlLXNzYS5oIgorI2luY2x1ZGUgInRyZWUtcGFzcy5oIiAgLyogZm9y IFBST1BfZ2ltcGxlX2FueSAqLworI2luY2x1ZGUgImZ1bmN0aW9uLmgiCisjaW5jbHVkZSAi Z2ltcGxlLmgiCiAjaW5jbHVkZSAiZ2ltcGxlLWV4cHIuaCIKICNpbmNsdWRlICJ0cmFucy5o IgogI2luY2x1ZGUgInN0cmluZ3Bvb2wuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKICNpbmNs dWRlICJmb2xkLWNvbnN0LmgiCiAjaW5jbHVkZSAiZ2ltcGxpZnkuaCIJLyogRm9yIGNyZWF0 ZV90bXBfdmFyX3Jhdy4gICovCiAjaW5jbHVkZSAidHJhbnMtc3RtdC5oIgpAQCAtNDAsNiAr NDYsOSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQogI2luY2x1ZGUgIm9tcC1nZW5lcmFsLmgiCiAjaW5jbHVkZSAib21wLWxvdy5oIgog I2luY2x1ZGUgIm1lbW1vZGVsLmgiICAvKiBGb3IgTUVNTU9ERUxfIGVudW1zLiAgKi8KKyNp bmNsdWRlICJzdG9yLWxheW91dC5oIgorI2luY2x1ZGUgImdpbXBsZS1pdGVyYXRvci5oIgor I2luY2x1ZGUgImdpbXBsaWZ5LW1lLmgiCiAKICN1bmRlZiBHQ0NfRElBR19TVFlMRQogI2Rl ZmluZSBHQ0NfRElBR19TVFlMRSBfX2djY190ZGlhZ19fCkBAIC0zMjMsMjIgKzMzMiwyNSBA QCBnZmNfb21wX3JlcG9ydF9kZWNsICh0cmVlIGRlY2wpCiAgIHJldHVybiBkZWNsOwogfQog Ci0vKiBSZXR1cm4gdHJ1ZSBpZiBUWVBFIGhhcyBhbnkgYWxsb2NhdGFibGUgY29tcG9uZW50 cy4gICovCisvKiBSZXR1cm4gdHJ1ZSBpZiBUWVBFIGhhcyBhbnkgYWxsb2NhdGFibGUgY29t cG9uZW50czsKKyAgIGlmIHB0cl9vaywgdGhlIGRlY2wgaXRzZWxmIGlzIHBlcm1pdHRlZCB0 byBoYXZlIHRoZSBQT0lOVEVSIGF0dHJpYnV0ZS4gICovCiAKIHN0YXRpYyBib29sCi1nZmNf aGFzX2FsbG9jX2NvbXBzICh0cmVlIHR5cGUsIHRyZWUgZGVjbCkKK2dmY19oYXNfYWxsb2Nf Y29tcHMgKHRyZWUgdHlwZSwgdHJlZSBkZWNsLCBib29sIHB0cl9vaykKIHsKICAgdHJlZSBm aWVsZCwgZnR5cGU7CiAKICAgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKSkKICAgICB7Ci0g ICAgICBpZiAoR0ZDX0RFQ0xfR0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoZGVjbCkpCisgICAg ICBpZiAoR0ZDX0RFQ0xfR0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoZGVjbCkKKwkgIHx8IChw dHJfb2sgJiYgR0ZDX0RFQ0xfR0VUX1NDQUxBUl9QT0lOVEVSIChkZWNsKSkpCiAJdHlwZSA9 IFRSRUVfVFlQRSAodHlwZSk7CiAgICAgICBlbHNlIGlmIChHRkNfREVDTF9HRVRfU0NBTEFS X1BPSU5URVIgKGRlY2wpKQogCXJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgaWYgKEdGQ19E RVNDUklQVE9SX1RZUEVfUCAodHlwZSkKKyAgaWYgKCFwdHJfb2sKKyAgICAgICYmIEdGQ19E RVNDUklQVE9SX1RZUEVfUCAodHlwZSkKICAgICAgICYmIChHRkNfVFlQRV9BUlJBWV9BS0lO RCAodHlwZSkgPT0gR0ZDX0FSUkFZX1BPSU5URVIKIAkgIHx8IEdGQ19UWVBFX0FSUkFZX0FL SU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRFUl9DT05UKSkKICAgICByZXR1cm4gZmFs c2U7CkBAIC0zNTcsNyArMzY5LDcgQEAgZ2ZjX2hhc19hbGxvY19jb21wcyAodHJlZSB0eXBl LCB0cmVlIGRlY2wpCiAgICAgICBpZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChmdHlwZSkK IAkgICYmIEdGQ19UWVBFX0FSUkFZX0FLSU5EIChmdHlwZSkgPT0gR0ZDX0FSUkFZX0FMTE9D QVRBQkxFKQogCXJldHVybiB0cnVlOwotICAgICAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMg KGZ0eXBlLCBmaWVsZCkpCisgICAgICBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAoZnR5cGUs IGZpZWxkLCBmYWxzZSkpCiAJcmV0dXJuIHRydWU7CiAgICAgfQogICByZXR1cm4gZmFsc2U7 CkBAIC00MzUsNyArNDQ3LDcgQEAgZ2ZjX29tcF9wcml2YXRlX291dGVyX3JlZiAodHJlZSBk ZWNsKQogICBpZiAoR0ZDX0RFQ0xfR0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoZGVjbCkpCiAg ICAgcmV0dXJuIHRydWU7CiAKLSAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIGRl Y2wpKQorICBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgZGVjbCwgZmFsc2UpKQog ICAgIHJldHVybiB0cnVlOwogCiAgIHJldHVybiBmYWxzZTsKQEAgLTU3NSw3ICs1ODcsNyBA QCBnZmNfd2Fsa19hbGxvY19jb21wcyAodHJlZSBkZWNsLCB0cmVlIGRlc3QsIHRyZWUgdmFy LAogICAgIHsKICAgICAgIHRyZWUgZnR5cGUgPSBUUkVFX1RZUEUgKGZpZWxkKTsKICAgICAg IHRyZWUgZGVjbGYsIGRlc3RmID0gTlVMTF9UUkVFOwotICAgICAgYm9vbCBoYXNfYWxsb2Nf Y29tcHMgPSBnZmNfaGFzX2FsbG9jX2NvbXBzIChmdHlwZSwgZmllbGQpOworICAgICAgYm9v bCBoYXNfYWxsb2NfY29tcHMgPSBnZmNfaGFzX2FsbG9jX2NvbXBzIChmdHlwZSwgZmllbGQs IGZhbHNlKTsKICAgICAgIGlmICgoIUdGQ19ERVNDUklQVE9SX1RZUEVfUCAoZnR5cGUpCiAJ ICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKGZ0eXBlKSAhPSBHRkNfQVJSQVlfQUxMT0NB VEFCTEUpCiAJICAmJiAhR0ZDX0RFQ0xfR0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoZmllbGQp CkBAIC02OTksNyArNzExLDcgQEAgZ2ZjX29tcF9jbGF1c2VfZGVmYXVsdF9jdG9yICh0cmVl IGNsYXVzZSwgdHJlZSBkZWNsLCB0cmVlIG91dGVyKQogICAgICAgJiYgKCFHRkNfREVDTF9H RVRfU0NBTEFSX0FMTE9DQVRBQkxFIChPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpCiAJICB8 fCAhUE9JTlRFUl9UWVBFX1AgKHR5cGUpKSkKICAgICB7Ci0gICAgICBpZiAoZ2ZjX2hhc19h bGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKSkKKyAgICAgIGlm IChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSks IGZhbHNlKSkKIAl7CiAJICBnY2NfYXNzZXJ0IChvdXRlcik7CiAJICBnZmNfc3RhcnRfYmxv Y2sgKCZibG9jayk7CkBAIC03NTIsNyArNzY0LDcgQEAgZ2ZjX29tcF9jbGF1c2VfZGVmYXVs dF9jdG9yICh0cmVlIGNsYXVzZSwgdHJlZSBkZWNsLCB0cmVlIG91dGVyKQogICBlbHNlCiAg ICAgZ2ZjX2FkZF9tb2RpZnkgKCZjb25kX2Jsb2NrLCB1bnNoYXJlX2V4cHIgKGRlY2wpLAog CQkgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGRlY2wpLCBwdHIpKTsKLSAgaWYgKGdm Y19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSkpCisg IGlmIChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVz ZSksIGZhbHNlKSkKICAgICB7CiAgICAgICB0cmVlIHRlbSA9IGdmY193YWxrX2FsbG9jX2Nv bXBzIChvdXRlciwgZGVjbCwKIAkJCQkgICAgICAgT01QX0NMQVVTRV9ERUNMIChjbGF1c2Up LApAQCAtODg4LDcgKzkwMCw3IEBAIGdmY19vbXBfY2xhdXNlX2NvcHlfY3RvciAodHJlZSBj bGF1c2UsIHRyZWUgZGVzdCwgdHJlZSBzcmMpCiAgICAgICAmJiAoIUdGQ19ERUNMX0dFVF9T Q0FMQVJfQUxMT0NBVEFCTEUgKE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSkKIAkgIHx8ICFQ T0lOVEVSX1RZUEVfUCAodHlwZSkpKQogICAgIHsKLSAgICAgIGlmIChnZmNfaGFzX2FsbG9j X2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpKQorICAgICAgaWYgKGdm Y19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSwgZmFs c2UpKQogCXsKIAkgIGdmY19zdGFydF9ibG9jayAoJmJsb2NrKTsKIAkgIGdmY19hZGRfbW9k aWZ5ICgmYmxvY2ssIGRlc3QsIHNyYyk7CkBAIC05NDcsNyArOTU5LDcgQEAgZ2ZjX29tcF9j bGF1c2VfY29weV9jdG9yICh0cmVlIGNsYXVzZSwgdHJlZSBkZXN0LCB0cmVlIHNyYykKIAkJ CSAgICAgIGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fTUVNQ1BZKSwgMywgcHRy LAogCQkJICAgICAgc3JjcHRyLCBzaXplKTsKICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm Y29uZF9ibG9jaywgZm9sZF9jb252ZXJ0ICh2b2lkX3R5cGVfbm9kZSwgY2FsbCkpOwotICBp ZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2Up KSkKKyAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAo Y2xhdXNlKSwgZmFsc2UpKQogICAgIHsKICAgICAgIHRyZWUgdGVtID0gZ2ZjX3dhbGtfYWxs b2NfY29tcHMgKHNyYywgZGVzdCwKIAkJCQkgICAgICAgT01QX0NMQVVTRV9ERUNMIChjbGF1 c2UpLApAQCAtOTkyLDcgKzEwMDQsNyBAQCBnZmNfb21wX2NsYXVzZV9hc3NpZ25fb3AgKHRy ZWUgY2xhdXNlLCB0cmVlIGRlc3QsIHRyZWUgc3JjKQogICAgICAgJiYgKCFHRkNfREVDTF9H RVRfU0NBTEFSX0FMTE9DQVRBQkxFIChPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSkpCiAJICB8 fCAhUE9JTlRFUl9UWVBFX1AgKHR5cGUpKSkKICAgICB7Ci0gICAgICBpZiAoZ2ZjX2hhc19h bGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKSkKKyAgICAgIGlm IChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSks IGZhbHNlKSkKIAl7CiAJICBnZmNfc3RhcnRfYmxvY2sgKCZibG9jayk7CiAJICAvKiBGaXJz dCBkZWFsbG9jIGFueSBhbGxvY2F0YWJsZSBjb21wb25lbnRzIGluIERFU1QuICAqLwpAQCAt MTAxNCw3ICsxMDI2LDcgQEAgZ2ZjX29tcF9jbGF1c2VfYXNzaWduX29wICh0cmVlIGNsYXVz ZSwgdHJlZSBkZXN0LCB0cmVlIHNyYykKIAogICBnZmNfc3RhcnRfYmxvY2sgKCZibG9jayk7 CiAKLSAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAo Y2xhdXNlKSkpCisgIGlmIChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNF X0RFQ0wgKGNsYXVzZSksIGZhbHNlKSkKICAgICB7CiAgICAgICB0aGVuX2IgPSBnZmNfd2Fs a19hbGxvY19jb21wcyAoZGVzdCwgTlVMTF9UUkVFLCBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVz ZSksCiAJCQkJICAgICBXQUxLX0FMTE9DX0NPTVBTX0RUT1IpOwpAQCAtMTEyOSw3ICsxMTQx LDcgQEAgZ2ZjX29tcF9jbGF1c2VfYXNzaWduX29wICh0cmVlIGNsYXVzZSwgdHJlZSBkZXN0 LCB0cmVlIHNyYykKIAkJCSAgICAgIGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5f TUVNQ1BZKSwgMywgcHRyLAogCQkJICAgICAgc3JjcHRyLCBzaXplKTsKICAgZ2ZjX2FkZF9l eHByX3RvX2Jsb2NrICgmY29uZF9ibG9jaywgZm9sZF9jb252ZXJ0ICh2b2lkX3R5cGVfbm9k ZSwgY2FsbCkpOwotICBpZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVT RV9ERUNMIChjbGF1c2UpKSkKKyAgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9N UF9DTEFVU0VfREVDTCAoY2xhdXNlKSwgZmFsc2UpKQogICAgIHsKICAgICAgIHRyZWUgdGVt ID0gZ2ZjX3dhbGtfYWxsb2NfY29tcHMgKHNyYywgZGVzdCwKIAkJCQkgICAgICAgT01QX0NM QVVTRV9ERUNMIChjbGF1c2UpLApAQCAtMTM3Niw3ICsxMzg4LDcgQEAgZ2ZjX29tcF9jbGF1 c2VfZHRvciAodHJlZSBjbGF1c2UsIHRyZWUgZGVjbCkKICAgICAgICYmICghR0ZDX0RFQ0xf R0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpKQogCSAg fHwgIVBPSU5URVJfVFlQRV9QICh0eXBlKSkpCiAgICAgewotICAgICAgaWYgKGdmY19oYXNf YWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKSkpCisgICAgICBp ZiAoZ2ZjX2hhc19hbGxvY19jb21wcyAodHlwZSwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2Up LCBmYWxzZSkpCiAJcmV0dXJuIGdmY193YWxrX2FsbG9jX2NvbXBzIChkZWNsLCBOVUxMX1RS RUUsCiAJCQkJICAgICBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSksCiAJCQkJICAgICBXQUxL X0FMTE9DX0NPTVBTX0RUT1IpOwpAQCAtMTM5Niw3ICsxNDA4LDcgQEAgZ2ZjX29tcF9jbGF1 c2VfZHRvciAodHJlZSBjbGF1c2UsIHRyZWUgZGVjbCkKICAgICB0ZW0gPSBnZmNfY2FsbF9m cmVlIChkZWNsKTsKICAgdGVtID0gZ2ZjX29tcF91bnNoYXJlX2V4cHIgKHRlbSk7CiAKLSAg aWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIE9NUF9DTEFVU0VfREVDTCAoY2xhdXNl KSkpCisgIGlmIChnZmNfaGFzX2FsbG9jX2NvbXBzICh0eXBlLCBPTVBfQ0xBVVNFX0RFQ0wg KGNsYXVzZSksIGZhbHNlKSkKICAgICB7CiAgICAgICBzdG10YmxvY2tfdCBibG9jazsKICAg ICAgIHRyZWUgdGhlbl9iOwpAQCAtMTQ5Myw2ICsxNTA1LDcgQEAgZ2ZjX29tcF9maW5pc2hf Y2xhdXNlICh0cmVlIGMsIGdpbXBsZV9zZXEgKnByZV9wLCBib29sIG9wZW5hY2MpCiAKICAg dHJlZSBjMiA9IE5VTExfVFJFRSwgYzMgPSBOVUxMX1RSRUUsIGM0ID0gTlVMTF9UUkVFOwog ICB0cmVlIHByZXNlbnQgPSBnZmNfb21wX2NoZWNrX29wdGlvbmFsX2FyZ3VtZW50IChkZWNs LCB0cnVlKTsKKyAgdHJlZSBvcmlnX2RlY2wgPSBOVUxMX1RSRUU7CiAgIGlmIChQT0lOVEVS X1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCiAgICAgewogICAgICAgaWYgKCFnZmNfb21w X3ByaXZhdGl6ZV9ieV9yZWZlcmVuY2UgKGRlY2wpCkBAIC0xNTAxLDcgKzE1MTQsNyBAQCBn ZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wg b3BlbmFjYykKIAkgICYmICFHRkNfREVDTF9DUkFZX1BPSU5URUUgKGRlY2wpCiAJICAmJiAh R0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAoZGVjbCkpKSkK IAlyZXR1cm47Ci0gICAgICB0cmVlIG9yaWdfZGVjbCA9IGRlY2w7CisgICAgICBvcmlnX2Rl Y2wgPSBkZWNsOwogCiAgICAgICBjNCA9IGJ1aWxkX29tcF9jbGF1c2UgKE9NUF9DTEFVU0Vf TE9DQVRJT04gKGMpLCBPTVBfQ0xBVVNFX01BUCk7CiAgICAgICBPTVBfQ0xBVVNFX1NFVF9N QVBfS0lORCAoYzQsIEdPTVBfTUFQX1BPSU5URVIpOwpAQCAtMTUxNCwxNCArMTUyNywxNCBA QCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3AsIGJv b2wgb3BlbmFjYykKIAl7CiAJICBjMiA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0 aW9uLCBPTVBfQ0xBVVNFX01BUCk7CiAJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYzIs IEdPTVBfTUFQX1BPSU5URVIpOwotCSAgT01QX0NMQVVTRV9ERUNMIChjMikgPSBkZWNsOwor CSAgT01QX0NMQVVTRV9ERUNMIChjMikgPSB1bnNoYXJlX2V4cHIgKGRlY2wpOwogCSAgT01Q X0NMQVVTRV9TSVpFIChjMikgPSBzaXplX2ludCAoMCk7CiAKIAkgIHN0bXRibG9ja190IGJs b2NrOwogCSAgZ2ZjX3N0YXJ0X2Jsb2NrICgmYmxvY2spOwotCSAgdHJlZSBwdHIgPSBkZWNs OwotCSAgcHRyID0gZ2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4cHIgKCZibG9jaywgcHJlc2Vu dCwgZGVjbCwKLQkJCQkJICAgIG51bGxfcG9pbnRlcl9ub2RlKTsKKwkgIHRyZWUgcHRyID0g Z2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4cHIgKCZibG9jaywgcHJlc2VudCwKKwkJCQkJCSB1 bnNoYXJlX2V4cHIgKGRlY2wpLAorCQkJCQkJIG51bGxfcG9pbnRlcl9ub2RlKTsKIAkgIGdp bXBsaWZ5X2FuZF9hZGQgKGdmY19maW5pc2hfYmxvY2sgKCZibG9jayksIHByZV9wKTsKIAkg IHB0ciA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChwdHIpOwogCSAgT01QX0NMQVVTRV9E RUNMIChjKSA9IHB0cjsKQEAgLTE1MzgsMTAgKzE1NTEsMTAgQEAgZ2ZjX29tcF9maW5pc2hf Y2xhdXNlICh0cmVlIGMsIGdpbXBsZV9zZXEgKnByZV9wLCBib29sIG9wZW5hY2MpCiAJewog CSAgYzMgPSBidWlsZF9vbXBfY2xhdXNlIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwgT01Q X0NMQVVTRV9NQVApOwogCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMzLCBHT01QX01B UF9QT0lOVEVSKTsKLQkgIE9NUF9DTEFVU0VfREVDTCAoYzMpID0gdW5zaGFyZV9leHByIChk ZWNsKTsKKwkgIE9NUF9DTEFVU0VfREVDTCAoYzMpID0gZGVjbDsKIAkgIE9NUF9DTEFVU0Vf U0laRSAoYzMpID0gc2l6ZV9pbnQgKDApOwogCSAgZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJl Y3RfcmVmIChkZWNsKTsKLQkgIE9NUF9DTEFVU0VfREVDTCAoYykgPSBkZWNsOworCSAgT01Q X0NMQVVTRV9ERUNMIChjKSA9IHVuc2hhcmVfZXhwciAoZGVjbCk7CiAJfQogICAgIH0KICAg aWYgKEdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCkBAIC0xNTg0 LDcgKzE1OTcsNyBAQCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3Nl cSAqcHJlX3AsIGJvb2wgb3BlbmFjYykKIAkJCQkJCSAgIDogR09NUF9NQVBfUE9JTlRFUik7 CiAgICAgICBpZiAocHJlc2VudCkKIAl7Ci0JICBwdHIgPSBnZmNfY29udl9kZXNjcmlwdG9y X2RhdGFfZ2V0IChkZWNsKTsKKwkgIHB0ciA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9n ZXQgKHVuc2hhcmVfZXhwciAoZGVjbCkpOwogCSAgcHRyID0gZ2ZjX2J1aWxkX2FkZHJfZXhw ciAoTlVMTCwgcHRyKTsKIAkgIHB0ciA9IGdmY19idWlsZF9jb25kX2Fzc2lnbl9leHByICgm YmxvY2ssIHByZXNlbnQsCiAJCQkJCSAgICBwdHIsIG51bGxfcG9pbnRlcl9ub2RlKTsKQEAg LTE1OTcsMTUgKzE2MTAsMzMgQEAgZ2ZjX29tcF9maW5pc2hfY2xhdXNlICh0cmVlIGMsIGdp bXBsZV9zZXEgKnByZV9wLCBib29sIG9wZW5hY2MpCiAgICAgICB0cmVlIHNpemUgPSBjcmVh dGVfdG1wX3ZhciAoZ2ZjX2FycmF5X2luZGV4X3R5cGUpOwogICAgICAgdHJlZSBlbGVtc3og PSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKTsKICAgICAg IGVsZW1zeiA9IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7 Ci0gICAgICBpZiAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9Q T0lOVEVSCi0JICB8fCBHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZ X1BPSU5URVJfQ09OVCkKKyAgICAgIGlmIChvcmlnX2RlY2wgPT0gTlVMTF9UUkVFKQorCW9y aWdfZGVjbCA9IGRlY2w7CisgICAgICBpZiAoIW9wZW5hY2MKKwkgICYmIGdmY19oYXNfYWxs b2NfY29tcHMgKHR5cGUsIG9yaWdfZGVjbCwgdHJ1ZSkpCisJeworCSAgLyogU2F2ZSBhcnJh eSBkZXNjcmlwdG9yIGZvciB1c2UgaW4gZ2ZjX29tcF9kZWVwX21hcHBpbmd7LF9wLF9jbnR9 OworCSAgICAgZm9yY2UgZXZhbHVhdGUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgbm90IGdpbXBs aWZpZWQgKyBpcyBhIGRlY2wuICAqLworCSAgZ2ZjX2FsbG9jYXRlX2xhbmdfZGVjbCAoc2l6 ZSk7CisJICBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChzaXplKSA9IG9yaWdfZGVjbDsK Kwl9CisgICAgICBlbnVtIGdmY19hcnJheV9raW5kIGFraW5kID0gR0ZDX1RZUEVfQVJSQVlf QUtJTkQgKHR5cGUpOworICAgICAgaWYgKGFraW5kID09IEdGQ19BUlJBWV9BTExPQ0FUQUJM RQorCSAgfHwgYWtpbmQgPT0gR0ZDX0FSUkFZX1BPSU5URVIKKwkgIHx8IGFraW5kID09IEdG Q19BUlJBWV9QT0lOVEVSX0NPTlQKKwkgIHx8IGFraW5kID09IEdGQ19BUlJBWV9BU1NVTUVE X1JBTktfQUxMT0NBVEFCTEUKKwkgIHx8IGFraW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JB TktfUE9JTlRFUgorCSAgfHwgYWtpbmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lO VEVSX0NPTlQpCiAJewogCSAgc3RtdGJsb2NrX3QgY29uZF9ibG9jazsKIAkgIHRyZWUgdGVt LCB0aGVuX2IsIGVsc2VfYiwgemVybywgY29uZDsKIAorCSAgaW50IHJhbmsgPSAoKGFraW5k ID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQUxMT0NBVEFCTEUKKwkJICAgICAgIHx8IGFr aW5kID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfUE9JTlRFUgorCQkgICAgICAgfHwgYWtp bmQgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOS19QT0lOVEVSX0NPTlQpCisJCSAgICAgID8g LTEgOiBHRkNfVFlQRV9BUlJBWV9SQU5LICh0eXBlKSk7CiAJICBnZmNfaW5pdF9ibG9jayAo JmNvbmRfYmxvY2spOwotCSAgdGVtID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAoJmNvbmRfYmxv Y2ssIGRlY2wsCi0JCQkJICAgICBHRkNfVFlQRV9BUlJBWV9SQU5LICh0eXBlKSk7CisJICB0 ZW0gPSBnZmNfZnVsbF9hcnJheV9zaXplICgmY29uZF9ibG9jaywgdW5zaGFyZV9leHByIChk ZWNsKSwgcmFuayk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmNvbmRfYmxvY2ssIHNpemUsIHRl bSk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmNvbmRfYmxvY2ssIHNpemUsCiAJCQkgIGZvbGRf YnVpbGQyIChNVUxUX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLApAQCAtMTYxNSw3ICsx NjQ2LDcgQEAgZ2ZjX29tcF9maW5pc2hfY2xhdXNlICh0cmVlIGMsIGdpbXBsZV9zZXEgKnBy ZV9wLCBib29sIG9wZW5hY2MpCiAJICB6ZXJvID0gYnVpbGRfaW50X2NzdCAoZ2ZjX2FycmF5 X2luZGV4X3R5cGUsIDApOwogCSAgZ2ZjX2FkZF9tb2RpZnkgKCZjb25kX2Jsb2NrLCBzaXpl LCB6ZXJvKTsKIAkgIGVsc2VfYiA9IGdmY19maW5pc2hfYmxvY2sgKCZjb25kX2Jsb2NrKTsK LQkgIHRlbSA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlY2wpOworCSAgdGVt ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAodW5zaGFyZV9leHByIChkZWNsKSk7 CiAJICB0ZW0gPSBmb2xkX2NvbnZlcnQgKHB2b2lkX3R5cGVfbm9kZSwgdGVtKTsKIAkgIGNv bmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLAogCQkJCSAg Ym9vbGVhbl90eXBlX25vZGUsIHRlbSwgbnVsbF9wb2ludGVyX25vZGUpOwpAQCAtMTYzMiwx MSArMTY2MywxMyBAQCBnZmNfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3Nl cSAqcHJlX3AsIGJvb2wgb3BlbmFjYykKIAl7CiAJICBzdG10YmxvY2tfdCBjb25kX2Jsb2Nr OwogCSAgdHJlZSB0aGVuX2I7Ci0KKwkgIGludCByYW5rID0gKChha2luZCA9PSBHRkNfQVJS QVlfQVNTVU1FRF9SQU5LCisJCSAgICAgICB8fCBha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1F RF9SQU5LX0NPTlQpCisJCSAgICAgID8gLTEgOiBHRkNfVFlQRV9BUlJBWV9SQU5LICh0eXBl KSk7CiAJICBnZmNfaW5pdF9ibG9jayAoJmNvbmRfYmxvY2spOwogCSAgZ2ZjX2FkZF9tb2Rp ZnkgKCZjb25kX2Jsb2NrLCBzaXplLAotCQkJICBnZmNfZnVsbF9hcnJheV9zaXplICgmY29u ZF9ibG9jaywgZGVjbCwKLQkJCQkJICAgICAgIEdGQ19UWVBFX0FSUkFZX1JBTksgKHR5cGUp KSk7CisJCQkgIGdmY19mdWxsX2FycmF5X3NpemUgKCZjb25kX2Jsb2NrLCB1bnNoYXJlX2V4 cHIgKGRlY2wpLAorCQkJCQkgICAgICAgcmFuaykpOwogCSAgZ2ZjX2FkZF9tb2RpZnkgKCZj b25kX2Jsb2NrLCBzaXplLAogCQkJICBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBnZmNfYXJy YXlfaW5kZXhfdHlwZSwKIAkJCQkgICAgICAgc2l6ZSwgZWxlbXN6KSk7CkBAIC0xNjQ3LDkg KzE2ODAsMTIgQEAgZ2ZjX29tcF9maW5pc2hfY2xhdXNlICh0cmVlIGMsIGdpbXBsZV9zZXEg KnByZV9wLCBib29sIG9wZW5hY2MpCiAJfQogICAgICAgZWxzZQogCXsKKwkgIGludCByYW5r ID0gKChha2luZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LCisJCSAgICAgICB8fCBha2lu ZCA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX0NPTlQpCisJCSAgICAgID8gLTEgOiBHRkNf VFlQRV9BUlJBWV9SQU5LICh0eXBlKSk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmJsb2NrLCBz aXplLAotCQkJICBnZmNfZnVsbF9hcnJheV9zaXplICgmYmxvY2ssIGRlY2wsCi0JCQkJCSAg ICAgICBHRkNfVFlQRV9BUlJBWV9SQU5LICh0eXBlKSkpOworCQkJICBnZmNfZnVsbF9hcnJh eV9zaXplICgmYmxvY2ssIHVuc2hhcmVfZXhwciAoZGVjbCksCisJCQkJCSAgICAgICByYW5r KSk7CiAJICBnZmNfYWRkX21vZGlmeSAoJmJsb2NrLCBzaXplLAogCQkJICBmb2xkX2J1aWxk MiAoTVVMVF9FWFBSLCBnZmNfYXJyYXlfaW5kZXhfdHlwZSwKIAkJCQkgICAgICAgc2l6ZSwg ZWxlbXN6KSk7CkBAIC0xNjU4LDExICsxNjk0LDMwIEBAIGdmY19vbXBfZmluaXNoX2NsYXVz ZSAodHJlZSBjLCBnaW1wbGVfc2VxICpwcmVfcCwgYm9vbCBvcGVuYWNjKQogICAgICAgdHJl ZSBzdG10ID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmJsb2NrKTsKICAgICAgIGdpbXBsaWZ5X2Fu ZF9hZGQgKHN0bXQsIHByZV9wKTsKICAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo T01QX0NMQVVTRV9TSVpFIChjKSA9PSBOVUxMX1RSRUUpCisJT01QX0NMQVVTRV9TSVpFIChj KQorCSAgPSBERUNMX1AgKGRlY2wpID8gREVDTF9TSVpFX1VOSVQgKGRlY2wpCisJCQkgIDog VFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoZGVjbCkpOworCisgICAgICB0cmVlIHR5cGUg PSBUUkVFX1RZUEUgKGRlY2wpOworICAgICAgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKSAm JiBQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFICh0eXBlKSkpCisJdHlwZSA9IFRSRUVfVFlQ RSAodHlwZSk7CisgICAgICBpZiAoIW9wZW5hY2MKKwkgICYmIG9yaWdfZGVjbCAhPSBOVUxM X1RSRUUKKwkgICYmIGdmY19oYXNfYWxsb2NfY29tcHMgKHR5cGUsIG9yaWdfZGVjbCwgdHJ1 ZSkpCisJeworCSAgLyogU2F2ZSBhcnJheSBkZXNjcmlwdG9yIGZvciB1c2UgaW4gZ2ZjX29t cF9kZWVwX21hcHBpbmd7LF9wLF9jbnR9OworCSAgICAgZm9yY2UgZXZhbHVhdGUgdG8gZW5z dXJlIHRoYXQgaXQgaXMgbm90IGdpbXBsaWZpZWQgKyBpcyBhIGRlY2wuICAqLworCSAgdHJl ZSBzaXplID0gY3JlYXRlX3RtcF92YXIgKFRSRUVfVFlQRSAoT01QX0NMQVVTRV9TSVpFIChj KSkpOworCSAgZ2ZjX2FsbG9jYXRlX2xhbmdfZGVjbCAoc2l6ZSk7CisJICBHRkNfREVDTF9T QVZFRF9ERVNDUklQVE9SIChzaXplKSA9IG9yaWdfZGVjbDsKKwkgIGdpbXBsaWZ5X2Fzc2ln biAoc2l6ZSwgT01QX0NMQVVTRV9TSVpFIChjKSwgcHJlX3ApOworCSAgT01QX0NMQVVTRV9T SVpFIChjKSA9IHNpemU7CisJfQorICAgIH0KICAgdHJlZSBsYXN0ID0gYzsKLSAgaWYgKE9N UF9DTEFVU0VfU0laRSAoYykgPT0gTlVMTF9UUkVFKQotICAgIE9NUF9DTEFVU0VfU0laRSAo YykKLSAgICAgID0gREVDTF9QIChkZWNsKSA/IERFQ0xfU0laRV9VTklUIChkZWNsKQotCQkg ICAgICA6IFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKGRlY2wpKTsKICAgaWYgKGdpbXBs aWZ5X2V4cHIgKCZPTVBfQ0xBVVNFX1NJWkUgKGMpLCBwcmVfcCwKIAkJICAgICBOVUxMLCBp c19naW1wbGVfdmFsLCBmYl9ydmFsdWUpID09IEdTX0VSUk9SKQogICAgIE9NUF9DTEFVU0Vf U0laRSAoYykgPSBzaXplX2ludCAoMCk7CkBAIC0xNjg1LDYgKzE3NDAsMTI4OSBAQCBnZmNf b21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUgYywgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wgb3Bl bmFjYykKICAgICB9CiB9CiAKKyNkZWZpbmUgR0ZDX01BUF9UT0tFTl9EQVRBIDAKKyNkZWZp bmUgR0ZDX01BUF9UT0tFTl9TSVpFUyAxCisjZGVmaW5lIEdGQ19NQVBfVE9LRU5fS0lORFMg MgorI2RlZmluZSBHRkNfTUFQX1RPS0VOX0RBVEFfT0ZGU0VUIDMKKyNkZWZpbmUgR0ZDX01B UF9UT0tFTl9PRkZTRVQgNAorI2RlZmluZSBHRkNfTUFQX1RPS0VOX0ZMQUdTIDUKKyNkZWZp bmUgR0ZDX01BUF9UT0tFTl9ERVRBQ0ggNgorCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9nZXRf dG9rZW5fZGF0YSAodHJlZSB0b2tlbikKK3sKKyAgdG9rZW4gPSBUWVBFX0ZJRUxEUyAoVFJF RV9UWVBFICh0b2tlbikpOworICByZXR1cm4gZ2ZjX2FkdmFuY2VfY2hhaW4gKHRva2VuLCBH RkNfTUFQX1RPS0VOX0RBVEEpOworfQorCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9nZXRfdG9r ZW5fc2l6ZXMgKHRyZWUgdG9rZW4pCit7CisgIHRva2VuID0gVFlQRV9GSUVMRFMgKFRSRUVf VFlQRSAodG9rZW4pKTsKKyAgcmV0dXJuIGdmY19hZHZhbmNlX2NoYWluICh0b2tlbiwgR0ZD X01BUF9UT0tFTl9TSVpFUyk7Cit9CisKK3N0YXRpYyB0cmVlCitnZmNfb21wX2dldF90b2tl bl9raW5kcyAodHJlZSB0b2tlbikKK3sKKyAgdG9rZW4gPSBUWVBFX0ZJRUxEUyAoVFJFRV9U WVBFICh0b2tlbikpOworICByZXR1cm4gZ2ZjX2FkdmFuY2VfY2hhaW4gKHRva2VuLCBHRkNf TUFQX1RPS0VOX0tJTkRTKTsKK30KKworc3RhdGljIHRyZWUKK2dmY19vbXBfZ2V0X3Rva2Vu X29mZnNldF9kYXRhICh0cmVlIHRva2VuKQoreworICB0b2tlbiA9IFRZUEVfRklFTERTIChU UkVFX1RZUEUgKHRva2VuKSk7CisgIHJldHVybiBnZmNfYWR2YW5jZV9jaGFpbiAodG9rZW4s IEdGQ19NQVBfVE9LRU5fREFUQV9PRkZTRVQpOworfQorCitzdGF0aWMgdHJlZQorZ2ZjX29t cF9nZXRfdG9rZW5fb2Zmc2V0ICh0cmVlIHRva2VuKQoreworICB0b2tlbiA9IFRZUEVfRklF TERTIChUUkVFX1RZUEUgKHRva2VuKSk7CisgIHJldHVybiBnZmNfYWR2YW5jZV9jaGFpbiAo dG9rZW4sIEdGQ19NQVBfVE9LRU5fT0ZGU0VUKTsKK30KKworc3RhdGljIHRyZWUKK2dmY19v bXBfZ2V0X3Rva2VuX2ZsYWdzICh0cmVlIHRva2VuKQoreworICB0b2tlbiA9IFRZUEVfRklF TERTIChUUkVFX1RZUEUgKHRva2VuKSk7CisgIHJldHVybiBnZmNfYWR2YW5jZV9jaGFpbiAo dG9rZW4sIEdGQ19NQVBfVE9LRU5fRkxBR1MpOworfQorCitzdGF0aWMgdHJlZQorZ2ZjX29t cF9nZXRfdG9rZW5fZGV0YWNoICh0cmVlIHRva2VuKQoreworICB0b2tlbiA9IFRZUEVfRklF TERTIChUUkVFX1RZUEUgKHRva2VuKSk7CisgIHJldHVybiBnZmNfYWR2YW5jZV9jaGFpbiAo dG9rZW4sIEdGQ19NQVBfVE9LRU5fREVUQUNIKTsKK30KKworI3VuZGVmIEdGQ19NQVBfVE9L RU5fREFUQQorI3VuZGVmIEdGQ19NQVBfVE9LRU5fU0laRVMKKyN1bmRlZiBHRkNfTUFQX1RP S0VOX0tJTkRTCisjdW5kZWYgR0ZDX01BUF9UT0tFTl9PRkZTRVRfREFUQQorI3VuZGVmIEdG Q19NQVBfVE9LRU5fT0ZGU0VUCisjdW5kZWYgR0ZDX01BUF9UT0tFTl9GTEFHUworI3VuZGVm IEdGQ19NQVBfVE9LRU5fREVUQUNICisKKy8qIFJldHVybnMgYSByZWNvcmQgdHlwZSB0byBz dG9yZSB0aGUgYXJyYXlzIHVzZWQgZm9yIG1hcHBpbmcuICAqLworc3RhdGljIHRyZWUKK2dm Y19vbXBfZ2V0X21hcF90b2tlbl90eXBlIChib29sIHBvaW50ZXIpCit7CisgIHN0YXRpYyB0 cmVlIGRlY2wgPSBOVUxMX1RSRUU7CisgIGlmIChkZWNsICE9IE5VTExfVFJFRSkKKyAgICBy ZXR1cm4gcG9pbnRlciA/IGJ1aWxkX3BvaW50ZXJfdHlwZSAoZGVjbCkgOiBkZWNsOworICBk ZWNsID0gbWFrZV9ub2RlIChSRUNPUkRfVFlQRSk7CisgIFRZUEVfTkFNRSAoZGVjbCkgPSBn ZXRfaWRlbnRpZmllciAoIm1hcF90b2tlbl90Iik7CisgIFRZUEVfTkFNRUxFU1MgKGRlY2wp ID0gMTsKKworICB0cmVlIHR5cGUgPSBwdHJfdHlwZV9ub2RlOworICB0eXBlID0gYnVpbGRf cG9pbnRlcl90eXBlIChwdHJfdHlwZV9ub2RlKTsKKyAgdHJlZSBmaWVsZCA9IGJ1aWxkX2Rl Y2wgKFVOS05PV05fTE9DQVRJT04sIEZJRUxEX0RFQ0wsCisJCQkgICBnZXRfaWRlbnRpZmll ciAoImRhdGEiKSwgdHlwZSk7CisgIFRZUEVfRklFTERTIChkZWNsKSA9IGZpZWxkOworICBE RUNMX0NPTlRFWFQgKGZpZWxkKSA9IGRlY2w7CisgIHN1cHByZXNzX3dhcm5pbmcgKGZpZWxk KTsKKworICB0eXBlID0gYnVpbGRfcG9pbnRlcl90eXBlIChzaXplX3R5cGVfbm9kZSk7Cisg IHRyZWUgZmllbGQyID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgRklFTERfREVD TCwKKwkJCSAgICBnZXRfaWRlbnRpZmllciAoInNpemVzIiksIHR5cGUpOworICBERUNMX0NI QUlOIChmaWVsZCkgPSBmaWVsZDI7CisgIERFQ0xfQ09OVEVYVCAoZmllbGQyKSA9IGRlY2w7 CisgIHN1cHByZXNzX3dhcm5pbmcgKGZpZWxkMik7CisKKyAgdHlwZSA9IGJ1aWxkX3BvaW50 ZXJfdHlwZSAoc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlKTsKKyAgZmllbGQgPSBidWlsZF9k ZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9ERUNMLAorCQkgICAgICBnZXRfaWRlbnRp ZmllciAoImtpbmRzIiksIHR5cGUpOworICBERUNMX0NIQUlOIChmaWVsZDIpID0gZmllbGQ7 CisgIERFQ0xfQ09OVEVYVCAoZmllbGQpID0gZGVjbDsKKyAgc3VwcHJlc3Nfd2FybmluZyAo ZmllbGQpOworCisgIGZpZWxkMiA9IGJ1aWxkX2RlY2wgKFVOS05PV05fTE9DQVRJT04sIEZJ RUxEX0RFQ0wsCisJCSAgICAgIGdldF9pZGVudGlmaWVyICgib2Zmc2V0X2RhdGEiKSwgc2l6 ZV90eXBlX25vZGUpOworICBERUNMX0NIQUlOIChmaWVsZCkgPSBmaWVsZDI7CisgIERFQ0xf Q09OVEVYVCAoZmllbGQyKSA9IGRlY2w7CisgIHN1cHByZXNzX3dhcm5pbmcgKGZpZWxkMik7 CisKKyAgZmllbGQgPSBidWlsZF9kZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBGSUVMRF9ERUNM LAorCQkgICAgICBnZXRfaWRlbnRpZmllciAoIm9mZnNldCIpLCBzaXplX3R5cGVfbm9kZSk7 CisgIERFQ0xfQ0hBSU4gKGZpZWxkMikgPSBmaWVsZDsKKyAgREVDTF9DT05URVhUIChmaWVs ZCkgPSBkZWNsOworICBzdXBwcmVzc193YXJuaW5nIChmaWVsZCk7CisKKyAgZmllbGQyID0g YnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgRklFTERfREVDTCwKKwkJICAgICAgIGdl dF9pZGVudGlmaWVyICgiZmxhZ3MiKSwgc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlKTsKKyAg REVDTF9DSEFJTiAoZmllbGQpID0gZmllbGQyOworICBERUNMX0NPTlRFWFQgKGZpZWxkMikg PSBkZWNsOworICBzdXBwcmVzc193YXJuaW5nIChmaWVsZDIpOworCisgIGZpZWxkID0gYnVp bGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwgRklFTERfREVDTCwKKwkJICAgICAgIGdldF9p ZGVudGlmaWVyICgiZGV0YWNoIiksIGJvb2xlYW5fdHlwZV9ub2RlKTsKKyAgREVDTF9DSEFJ TiAoZmllbGQyKSA9IGZpZWxkOworICBERUNMX0NPTlRFWFQgKGZpZWxkKSA9IGRlY2w7Cisg IHN1cHByZXNzX3dhcm5pbmcgKGZpZWxkKTsKKworICBsYXlvdXRfdHlwZSAoZGVjbCk7CisK KyAgcmV0dXJuIHBvaW50ZXIgPyBidWlsZF9wb2ludGVyX3R5cGUgKGRlY2wpIDogZGVjbDsK K30KKworCisvKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBGb3J0cmFuIF9fY2FsbGJhY2tf PGRlcml2ZWQtdHlwZT4gZnVuY3Rpb24uICAqLworc3RhdGljIHRyZWUKK2dmY19vbXBfZ2V0 X2NiX3R5cGUgKCkKK3sKKyAgdHJlZSB0eXBlOworICB0eXBlID0gYnVpbGRfZnVuY3Rpb25f dHlwZV9saXN0IChzaXplX3R5cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwgTlVMTF9UUkVFKTsK KyAgdHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZSAodHlwZSk7CisgIHR5cGUgPSBidWlsZF9m dW5jdGlvbl90eXBlX2xpc3QgKHNpemVfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2RlLCBwdHJf dHlwZV9ub2RlLAorCQkJCSAgIHNpemVfdHlwZV9ub2RlLCB0eXBlLCBOVUxMX1RSRUUpOwor ICB0eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChzaXplX3R5cGVfbm9kZSwgdHlw ZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkgICBwdHJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOwor ICByZXR1cm4gdHlwZTsKK30KKworLyogR2VuZXJhdGUgY2FsbCBiYWNrIGZ1bmN0aW9uLCBl aXRoZXIgb25lIHdoaWNoIGNvdW50cyBhbGxvYyBjb21wcworICAgb3Igb25lIHdoaWNoIG1h cHMuICovCisKK3N0YXRpYyB0cmVlCitnZmNfb21wX2dlbl9kZWVwX21hcF9mbiAoYm9vbCBj b3VudF9mbikKK3sKKyAgdHJlZSBvbGRfY29udGV4dCA9IGN1cnJlbnRfZnVuY3Rpb25fZGVj bDsKKyAgdHJlZSBkZWNsLCB0eXBlLCB0bXAsIGNiX2ZuLCB0b2tlbiwgZGF0YSwgc2l6ZSwg ZmxhZzsKKyAgbG9jYXRpb25fdCBsb2MgPSBVTktOT1dOX0xPQ0FUSU9OOworCisgIGlmIChv bGRfY29udGV4dCkKKyAgICB7CisgICAgICBwdXNoX2Z1bmN0aW9uX2NvbnRleHQgKCk7Cisg ICAgICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBOVUxMX1RSRUU7CisgICAgfQorCisgIHR5 cGUgPSBnZmNfb21wX2dldF9jYl90eXBlICgpOworICB0eXBlID0gYnVpbGRfcG9pbnRlcl90 eXBlICh0eXBlKTsKKyAgdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAoc2l6ZV90 eXBlX25vZGUsCisJCQkJICAgY291bnRfZm4gPyBwdHJfdHlwZV9ub2RlCisJCQkJCSAgICA6 IGdmY19vbXBfZ2V0X21hcF90b2tlbl90eXBlICh0cnVlKSwKKwkJCQkgICBidWlsZF9wb2lu dGVyX3R5cGUgKHB0cl90eXBlX25vZGUpLAorCQkJCSAgIHNpemVfdHlwZV9ub2RlLCBzaG9y dF9pbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkgICB0eXBlLCBOVUxMX1RSRUUpOworICBkZWNs ID0gYnVpbGRfZGVjbCAobG9jLCBGVU5DVElPTl9ERUNMLAorCQkgICAgIGdldF9pZGVudGlm aWVyIChjb3VudF9mbiA/IEdGQ19QUkVGSVggKCJvbXBfY291bnQiKQorCQkJCQkgICAgICA6 IEdGQ19QUkVGSVggKCJvbXBfbWFwIikpLCB0eXBlKTsKKyAgVFJFRV9TVEFUSUMgKGRlY2wp ID0gMTsKKyAgVFJFRV9VU0VEIChkZWNsKSA9IDE7CisgIERFQ0xfQVJUSUZJQ0lBTCAoZGVj bCkgPSAxOworICBERUNMX0lHTk9SRURfUCAoZGVjbCkgPSAwOworICBERUNMX1VOSU5MSU5B QkxFIChkZWNsKSA9IDE7CisgIFRSRUVfUFVCTElDIChkZWNsKSA9IDA7CisgIERFQ0xfRVhU RVJOQUwgKGRlY2wpID0gMDsKKyAgREVDTF9JTklUSUFMIChkZWNsKSA9IG1ha2Vfbm9kZSAo QkxPQ0spOworICBCTE9DS19TVVBFUkNPTlRFWFQgKERFQ0xfSU5JVElBTCAoZGVjbCkpID0g ZGVjbDsKKworICB0bXAgPSBidWlsZF9kZWNsIChsb2MsIFJFU1VMVF9ERUNMLCBOVUxMX1RS RUUsIHNpemVfdHlwZV9ub2RlKTsKKyAgREVDTF9BUlRJRklDSUFMICh0bXApID0gMTsKKyAg REVDTF9JR05PUkVEX1AgKHRtcCkgPSAxOworICBERUNMX0NPTlRFWFQgKHRtcCkgPSBkZWNs OworICBERUNMX1JFU1VMVCAoZGVjbCkgPSB0bXA7CisKKyAgLyogRGVjbGFyZSBpdHMgYXJn cy4gICovCisgIHRyZWUgYXJnbGlzdCA9IE5VTExfVFJFRTsKKyAgdHJlZSB0eXBlbGlzdCA9 IFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKGRlY2wpKTsKKyAgdG1wID0gVFJFRV9WQUxV RSAodHlwZWxpc3QpOworICB0b2tlbiA9IGJ1aWxkX2RlY2wgKGxvYywgUEFSTV9ERUNMLCBn ZXRfaWRlbnRpZmllciAoInRva2VuIiksIHRtcCk7CisgIERFQ0xfQ09OVEVYVCAodG9rZW4p ID0gZGVjbDsKKyAgREVDTF9BUkdfVFlQRSAodG9rZW4pID0gVFJFRV9WQUxVRSAodHlwZWxp c3QpOworICBUUkVFX1JFQURPTkxZICh0b2tlbikgPSAxOworICBhcmdsaXN0ID0gY2hhaW5v biAoYXJnbGlzdCwgdG9rZW4pOworCisgIHR5cGVsaXN0ID0gVFJFRV9DSEFJTiAodHlwZWxp c3QpOworICB0bXAgPSBUUkVFX1ZBTFVFICh0eXBlbGlzdCk7CisgIGRhdGEgPSBidWlsZF9k ZWNsIChsb2MsIFBBUk1fREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJkYXRhIiksIHRtcCk7Cisg IERFQ0xfQ09OVEVYVCAoZGF0YSkgPSBkZWNsOworICBERUNMX0FSR19UWVBFIChkYXRhKSA9 IFRSRUVfVkFMVUUgKHR5cGVsaXN0KTsKKyAgVFJFRV9SRUFET05MWSAoZGF0YSkgPSAxOwor ICBhcmdsaXN0ID0gY2hhaW5vbiAoYXJnbGlzdCwgZGF0YSk7CisKKyAgdHlwZWxpc3QgPSBU UkVFX0NIQUlOICh0eXBlbGlzdCk7CisgIHRtcCA9IFRSRUVfVkFMVUUgKHR5cGVsaXN0KTsK KyAgc2l6ZSA9IGJ1aWxkX2RlY2wgKGxvYywgUEFSTV9ERUNMLCBnZXRfaWRlbnRpZmllciAo InNpemUiKSwgdG1wKTsKKyAgREVDTF9DT05URVhUIChzaXplKSA9IGRlY2w7CisgIERFQ0xf QVJHX1RZUEUgKHNpemUpID0gVFJFRV9WQUxVRSAodHlwZWxpc3QpOworICBUUkVFX1JFQURP TkxZIChzaXplKSA9IDE7CisgIGFyZ2xpc3QgPSBjaGFpbm9uIChhcmdsaXN0LCBzaXplKTsK KworICB0eXBlbGlzdCA9IFRSRUVfQ0hBSU4gKHR5cGVsaXN0KTsKKyAgdG1wID0gVFJFRV9W QUxVRSAodHlwZWxpc3QpOworICBmbGFnID0gYnVpbGRfZGVjbCAobG9jLCBQQVJNX0RFQ0ws IGdldF9pZGVudGlmaWVyICgiZmxhZyIpLCB0bXApOworICBERUNMX0NPTlRFWFQgKGZsYWcp ID0gZGVjbDsKKyAgREVDTF9BUkdfVFlQRSAoZmxhZykgPSBUUkVFX1ZBTFVFICh0eXBlbGlz dCk7CisgIFRSRUVfUkVBRE9OTFkgKGZsYWcpID0gMTsKKyAgYXJnbGlzdCA9IGNoYWlub24g KGFyZ2xpc3QsIGZsYWcpOworCisgIHR5cGVsaXN0ID0gVFJFRV9DSEFJTiAodHlwZWxpc3Qp OworICB0bXAgPSBUUkVFX1ZBTFVFICh0eXBlbGlzdCk7CisgIGNiX2ZuID0gYnVpbGRfZGVj bCAobG9jLCBQQVJNX0RFQ0wsIGdldF9pZGVudGlmaWVyICgiY2JfZm4iKSwgdG1wKTsKKyAg REVDTF9DT05URVhUIChjYl9mbikgPSBkZWNsOworICBERUNMX0FSR19UWVBFIChjYl9mbikg PSBUUkVFX1ZBTFVFICh0eXBlbGlzdCk7CisgIFRSRUVfUkVBRE9OTFkgKGNiX2ZuKSA9IDE7 CisgIGFyZ2xpc3QgPSBjaGFpbm9uIChhcmdsaXN0LCBjYl9mbik7CisKKyAgREVDTF9BUkdV TUVOVFMgKGRlY2wpID0gYXJnbGlzdDsKKyAgcHVzaF9zdHJ1Y3RfZnVuY3Rpb24gKGRlY2wp OworICBwdXNoX2dpbXBsaWZ5X2NvbnRleHQgKHRydWUpOworICBpbml0X3RyZWVfc3NhIChj ZnVuKTsKKworICAvKiBCb2R5LiAqLworICBnaW1wbGVfc2VxIHNlcSA9IE5VTEw7CisKKyAg LyogbiA9IDAgKi8KKyAgaWYgKGNvdW50X2ZuKQorICAgIHsKKyAgICAgIC8qIEZvciBhbGxv Y2F0YWJsZXMgKyB2dGFibGU6CisJIGlmICgoZmxhZyA9PSBHRkNfQ0xBU1NfQ0JfQUxMT0NB VEFCTEUgfHwgZmxhZyA9PSBHRkNfQ0xBU1NfQ0JfVlRBQkxFKQorCSAgICAgJiYgc2l6ZSAh PSAwKQorCSAgIG4gPSAxOworCSBpZiAoKGZsYWcgPT0gR0ZDX0NMQVNTX0NCX0FMTE9DQVRB QkxFIHx8IGZsYWcgPT0gR0ZDX0NMQVNTX0NCX1ZUQUJMRSkKKwkgICAgICYmIHNpemUgIT0g MCAmJiBjYl9mbikKKwkgICBuID0gbiArIGNiX2ZuICguLi4pCisJIHJldHVybiBuOyAqLwor ICAgICAgdHJlZSBudW0gPSBidWlsZF9kZWNsIChsb2MsIFZBUl9ERUNMLCBjcmVhdGVfdG1w X3Zhcl9uYW1lICgibiIpLAorCQkJICAgICBzaXplX3R5cGVfbm9kZSk7CisgICAgICB0bXAg PSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgTU9ESUZZX0VYUFIsIHNpemVfdHlwZV9ub2RlLCBu dW0sCisJCQkgICAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLAorCQkJCQkgICAg R0ZDX0NMQVNTX0NCX0FMTE9DQVRBQkxFKSk7CisgICAgICBnaW1wbGlmeV9hbmRfYWRkICh0 bXAsICZzZXEpOworCisgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgRVFfRVhQ UiwgYm9vbGVhbl90eXBlX25vZGUsIGZsYWcsCisJCQkgICAgIGJ1aWxkX3plcm9fY3N0IChz aG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSkpOworICAgICAgdHJlZSBjb25kID0gZm9sZF9idWls ZDJfbG9jIChsb2MsIEVRX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBmbGFnLAorCQkJCSAg IGJ1aWxkX2ludF9jc3QgKHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLAorCQkJCQkJICBHRkNf Q0xBU1NfQ0JfVlRBQkxFKSk7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywg VFJVVEhfT1JfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIHRtcCwgY29uZCk7CisgICAgICBj b25kID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2Rl LCBzaXplLAorCQkJICAgICAgYnVpbGRfemVyb19jc3QgKHNpemVfdHlwZV9ub2RlKSk7Cisg ICAgICBjb25kID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIFRSVVRIX0FORF9FWFBSLCBib29s ZWFuX3R5cGVfbm9kZSwKKwkJCSAgICAgIHRtcCwgY29uZCk7CisgICAgICB0bXAgPSBidWls ZDMgKENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIGNvbmQsCisJCSAgICBmb2xkX2J1aWxk Ml9sb2MgKGxvYywgTU9ESUZZX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJCSAgICAgbnVt LCBidWlsZF9pbnRfY3N0IChzaXplX3R5cGVfbm9kZSwgMSkpLAorCQkgICAgYnVpbGRfZW1w dHlfc3RtdCAobG9jKSk7CisgICAgICBnaW1wbGlmeV9hbmRfYWRkICh0bXAsICZzZXEpOwor CisgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgTkVfRVhQUiwgYm9vbGVhbl90 eXBlX25vZGUsCisJCQkgICAgIGNiX2ZuLCBudWxsX3BvaW50ZXJfbm9kZSk7CisgICAgICBj b25kID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIFRSVVRIX0FORF9FWFBSLCBib29sZWFuX3R5 cGVfbm9kZSwKKwkJCSAgICAgIGNvbmQsIHRtcCk7CisgICAgICB0bXAgPSBidWlsZF9jYWxs X2V4cHJfbG9jIChsb2MsIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCBjYl9m biksCisJCQkJIDQsIGJ1aWxkX2ZvbGRfYWRkcl9leHByIChkZWNsKSwgdG9rZW4sCisJCQkJ IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCBkYXRhKSwKKwkJCQkgYnVpbGRf aW50X2NzdCAoc2hvcnRfaW50ZWdlcl90eXBlX25vZGUsCisJCQkJCQlHRkNfQ0xBU1NfQ0FM TEJBQ0tfREVGQVVMVF9GTEFHKSk7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxv YywgUExVU19FWFBSLCBzaXplX3R5cGVfbm9kZSwgbnVtLCB0bXApOworICAgICAgdG1wID0g YnVpbGQzIChDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBjb25kLAorCQkgICAgZm9sZF9i dWlsZDJfbG9jIChsb2MsIE1PRElGWV9FWFBSLCBzaXplX3R5cGVfbm9kZSwKKwkJCQkgICAg IG51bSwgdG1wKSwgYnVpbGRfZW1wdHlfc3RtdCAobG9jKSk7CisgICAgICBnaW1wbGlmeV9h bmRfYWRkICh0bXAsICZzZXEpOworCisgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxv YywgTU9ESUZZX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJICAgICBERUNMX1JFU1VMVCAo ZGVjbCksIG51bSk7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkMV9sb2MgKGxvYywgUkVUVVJO X0VYUFIsIHZvaWRfdHlwZV9ub2RlLCB0bXApOworICAgICAgZ2ltcGxpZnlfYW5kX2FkZCAo dG1wLCAmc2VxKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBNYXAgYWxsb2Nh dGFibGVzIGFuZCB0aGUgdnRhYmxlCisJIGlmIChmbGFnICE9IDAgJiYgZmxhZyAhPSAyKSB8 fCBzaXplID09IDApCisJICAgZ290byByZXR1cm5fbGFiZWwKKwkgbWFwKDxmbGFnPjogPCp0 b2tlbi5kYXRhPiBbbGVuOiA8c2l6ZT5dKQorCSBtYXAoKHRva2VuLmRldGFjaCA/IGRldGFj aCA6IGF0dGFjaCk6CisJICAgICA8dG9rZW4uZGF0YT4gW3BvaW50ZXIgYXNzaWduLCBiaWFz OiAwXSkKKwkgaWYgKCFjYl9mbikKKwkgICBnb3RvIHJldHVybl9sYWJlbAorCSBjYl9mbiAo Li4uKQorCSByZXR1cm5fbGFiZWw6CisJIHJldHVybiAwICovCisKKyAgICAgIHRyZWUgcmV0 dXJuX2xhYmVsID0gY3JlYXRlX2FydGlmaWNpYWxfbGFiZWwgKGxvYyk7CisgICAgICB0cmVl IGNvbnRfbGFiZWwgPSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jKTsKKyAgICAgIHRt cCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBORV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwg ZmxhZywKKwkJCSAgICAgYnVpbGRfaW50X2NzdCAoc2hvcnRfaW50ZWdlcl90eXBlX25vZGUs CisJCQkJCSAgICBHRkNfQ0xBU1NfQ0JfQUxMT0NBVEFCTEUpKTsKKyAgICAgIHRyZWUgY29u ZCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBORV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwg ZmxhZywKKwkJCQkgICBidWlsZF9pbnRfY3N0IChzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwK KwkJCQkJCSAgR0ZDX0NMQVNTX0NCX1ZUQUJMRSkpOworICAgICAgdG1wID0gZm9sZF9idWls ZDJfbG9jIChsb2MsIFRSVVRIX0FORF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgdG1wLCBj b25kKTsKKyAgICAgIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgRVFfRVhQUiwgYm9v bGVhbl90eXBlX25vZGUsIHNpemUsCisJCQkgICAgICBidWlsZF96ZXJvX2NzdCAoc2l6ZV90 eXBlX25vZGUpKTsKKyAgICAgIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgVFJVVEhf T1JfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCisJCQkgICAgICB0bXAsIGNvbmQpOworICAg ICAgdG1wID0gYnVpbGQzIChDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBjb25kLAorCQkg ICAgZm9sZF9idWlsZDFfbG9jIChsb2MsIEdPVE9fRVhQUiwgdm9pZF90eXBlX25vZGUsCisJ CQkJICAgICByZXR1cm5fbGFiZWwpLCBidWlsZF9lbXB0eV9zdG10IChsb2MpKTsKKyAgICAg IGdpbXBsaWZ5X2FuZF9hZGQgKHRtcCwgJnNlcSk7CisKKyAgICAgIGdpbXBsZV9zZXFfYWRk X3N0bXQgKCZzZXEsCisJCQkgICBnaW1wbGVfYnVpbGRfY29uZCAoRVFfRVhQUiwgc2l6ZSwg c2l6ZV96ZXJvX25vZGUsCisJCQkJCSAgICAgIHJldHVybl9sYWJlbCwgY29udF9sYWJlbCkp OworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJnNlcSwgZ2ltcGxlX2J1aWxkX2xhYmVs IChjb250X2xhYmVsKSk7CisKKyAgICAgIC8qIGRhdGFbb2Zmc2V0X2RhdGFdID0gKnRva2Vu LmRhdGE7ICovCisgICAgICB0b2tlbiA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAo bG9jLCB0b2tlbik7CisgICAgICB0cmVlIG9uZSA9IGJ1aWxkX2ludF9jc3QgKHNpemVfdHlw ZV9ub2RlLCAxKTsKKyAgICAgIHRyZWUgZmllbGQgPSBnZmNfb21wX2dldF90b2tlbl9kYXRh ICh0b2tlbik7CisgICAgICB0cmVlIG9mZnNldF9maWVsZCA9IGdmY19vbXBfZ2V0X3Rva2Vu X29mZnNldF9kYXRhICh0b2tlbik7CisgICAgICB0cmVlIG9mZnNldCA9IGZvbGRfYnVpbGQz X2xvYyAobG9jLCBDT01QT05FTlRfUkVGLAorCQkJCSAgICAgVFJFRV9UWVBFIChvZmZzZXRf ZmllbGQpLCB0b2tlbiwKKwkJCQkgICAgIG9mZnNldF9maWVsZCwgTlVMTF9UUkVFKTsKKyAg ICAgIHRyZWUgdG1wID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRS RUVfVFlQRSAoZmllbGQpLAorCQkJCSAgdG9rZW4sIGZpZWxkLCBOVUxMX1RSRUUpOworICAg ICAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQT0lOVEVSX1BMVVNfRVhQUiwgVFJFRV9UWVBF ICh0bXApLCB0bXAsCisJCQlidWlsZDJfbG9jIChsb2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBl X25vZGUsCisJCQlUWVBFX1NJWkVfVU5JVCAocHRyX3R5cGVfbm9kZSksIG9mZnNldCkpOwor ICAgICAgZ2ltcGxlX3NlcSBzZXEyID0gTlVMTDsKKyAgICAgIHRtcCA9IGZvcmNlX2dpbXBs ZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVlLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxl X3NlcV9hZGRfc2VxICgmc2VxLCBzZXEyKTsKKyAgICAgIHRtcCA9IGJ1aWxkX2ZvbGRfaW5k aXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOworICAgICAgZ2ltcGxpZnlfYXNzaWduICh0bXAs IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCBkYXRhKSwgJnNlcSk7CisKKyAg ICAgIC8qIHRva2VuLm9mZnNldF9kYXRhKysgKi8KKyAgICAgIHRtcCA9IGJ1aWxkMl9sb2Mg KGxvYywgUExVU19FWFBSLCBzaXplX3R5cGVfbm9kZSwgb2Zmc2V0LAorCQkJb25lKTsKKyAg ICAgIGdpbXBsaWZ5X2Fzc2lnbiAob2Zmc2V0LCB0bXAsICZzZXEpOworCisgICAgICAvKiBk YXRhW29mZnNldF9kYXRhXSA9IGRhdGEuICAqLworICAgICAgdG1wID0gZm9sZF9idWlsZDNf bG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLAorCQkJICAgICB0 b2tlbiwgZmllbGQsIE5VTExfVFJFRSk7CisgICAgICB0bXAgPSBidWlsZDJfbG9jIChsb2Ms IFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKHRtcCksIHRtcCwKKwkJCWJ1aWxkMl9s b2MgKGxvYywgTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwKKwkJCVRZUEVfU0laRV9VTklU IChwdHJfdHlwZV9ub2RlKSwgb2Zmc2V0KSk7CisgICAgICBzZXEyID0gTlVMTDsKKyAgICAg IHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVlLCBOVUxMX1RS RUUpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc2VxICgmc2VxLCBzZXEyKTsKKyAgICAgIHRt cCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOworICAgICAgZ2lt cGxpZnlfYXNzaWduICh0bXAsIGRhdGEsICZzZXEpOworCisgICAgICAvKiB0b2tlbi5vZmZz ZXRfZGF0YSsrICovCisgICAgICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIFBMVVNfRVhQUiwg c2l6ZV90eXBlX25vZGUsIG9mZnNldCwKKwkJCW9uZSk7CisgICAgICBnaW1wbGlmeV9hc3Np Z24gKHVuc2hhcmVfZXhwciAob2Zmc2V0KSwgdG1wLCAmc2VxKTsKKworICAgICAgLyogc2l6 ZXNbb2Zmc2V0XSA9IHNpemUuICovCisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2Vu X3NpemVzICh0b2tlbik7CisgICAgICBvZmZzZXRfZmllbGQgPSBnZmNfb21wX2dldF90b2tl bl9vZmZzZXQgKHRva2VuKTsKKyAgICAgIG9mZnNldCA9IGZvbGRfYnVpbGQzX2xvYyAobG9j LCBDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKG9mZnNldF9maWVsZCksCisJCQkJdG9rZW4s IG9mZnNldF9maWVsZCwgTlVMTF9UUkVFKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xv YyAobG9jLCBDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxkKSwKKwkJCSAgICAgdG9r ZW4sIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQ T0lOVEVSX1BMVVNfRVhQUiwgVFJFRV9UWVBFICh0bXApLCB0bXAsCisJCQlidWlsZDJfbG9j IChsb2MsIE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQlUWVBFX1NJWkVfVU5JVCAo cHRyX3R5cGVfbm9kZSksIG9mZnNldCkpOworICAgICAgc2VxMiA9IE5VTEw7CisgICAgICB0 bXAgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAodG1wLCAmc2VxMiwgdHJ1ZSwgTlVMTF9UUkVF KTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoJnNlcSwgc2VxMik7CisgICAgICB0bXAg PSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvYywgdG1wKTsKKyAgICAgIGdpbXBs aWZ5X2Fzc2lnbiAodG1wLCBzaXplLCAmc2VxKTsKKworICAgICAgLyogRklYTUU6IHRraW5k IHw9IHRhbGlnbiA8PCB0YWxpZ25fc2hpZnQ7ICovCisgICAgICAvKiBraW5kc1tvZmZzZXRd ID0gKGZsYWcgPT0gMikgPyAndG8nIDogdGtpbmQuICovCisgICAgICBmaWVsZCA9IGdmY19v bXBfZ2V0X3Rva2VuX2tpbmRzICh0b2tlbik7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19s b2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksCisJCQkgICAgIHRv a2VuLCBmaWVsZCwgTlVMTF9UUkVFKTsKKyAgICAgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywg UE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVfVFlQRSAodG1wKSwgdG1wLAorCQkJYnVpbGQyX2xv YyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJCSAgICBUWVBFX1NJWkVf VU5JVCAoc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlKSwKKwkJCQkJCSAgICBvZmZzZXQpKTsK KyAgICAgIHNlcTIgPSBOVUxMOworICAgICAgdG1wID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQg KHRtcCwgJnNlcTIsIHRydWUsIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9z ZXEgKCZzZXEsIHNlcTIpOworICAgICAgY29uZCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBF UV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgZmxhZywKKwkJCQkgICBidWlsZF9pbnRfY3N0 IChzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJCSAgR0ZDX0NMQVNTX0NCX1ZUQUJM RSkpOworICAgICAgdHJlZSB0bXAyID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVO VF9SRUYsCisJCQkJICAgVFJFRV9UWVBFIChERUNMX0NIQUlOIChvZmZzZXRfZmllbGQpKSwg dG9rZW4sCisJCQkJICAgREVDTF9DSEFJTiAob2Zmc2V0X2ZpZWxkKSwgTlVMTF9UUkVFKTsK KyAgICAgIHRtcDIgPSBidWlsZDMgKENPTkRfRVhQUiwgc2hvcnRfdW5zaWduZWRfdHlwZV9u b2RlLCBjb25kLAorCQkgICAgIGJ1aWxkX2ludF9jc3QgKHNob3J0X3Vuc2lnbmVkX3R5cGVf bm9kZSwgR09NUF9NQVBfVE8pLAorCQkgICAgIHRtcDIpOworICAgICAgdG1wID0gYnVpbGRf Zm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIHRtcCk7CisgICAgICBnaW1wbGlmeV9hc3Np Z24gKHRtcCwgdG1wMiwgJnNlcSk7CisKKyAgICAgIC8qIHRva2VuLm9mZnNldCsrICovCisg ICAgICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIFBMVVNfRVhQUiwgc2l6ZV90eXBlX25vZGUs IG9mZnNldCwKKwkJCW9uZSk7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKG9mZnNldCwgdG1w LCAmc2VxKTsKKworICAgICAgLyogc2l6ZXNbb2Zmc2V0XSA9IDAgKD0gYmlhcykuICAqLwor ICAgICAgZmllbGQgPSBnZmNfb21wX2dldF90b2tlbl9zaXplcyAodG9rZW4pOworICAgICAg dG1wID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAo ZmllbGQpLAorCQkJICAgICB0b2tlbiwgZmllbGQsIE5VTExfVFJFRSk7CisgICAgICB0bXAg PSBidWlsZDJfbG9jIChsb2MsIFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKHRtcCks IHRtcCwKKwkJCWJ1aWxkMl9sb2MgKGxvYywgTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwK KwkJCVRZUEVfU0laRV9VTklUIChwdHJfdHlwZV9ub2RlKSwKKwkJCWZvbGRfYnVpbGQzX2xv YyAobG9jLCBDT01QT05FTlRfUkVGLAorCQkJCQkgVFJFRV9UWVBFIChvZmZzZXRfZmllbGQp LCB0b2tlbiwKKwkJCQkJIG9mZnNldF9maWVsZCwgTlVMTF9UUkVFKSkpOworICAgICAgc2Vx MiA9IE5VTEw7CisgICAgICB0bXAgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAodG1wLCAmc2Vx MiwgdHJ1ZSwgTlVMTF9UUkVFKTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoJnNlcSwg c2VxMik7CisgICAgICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvYywg dG1wKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodG1wLCBidWlsZF96ZXJvX2NzdCAoc2l6 ZV90eXBlX25vZGUpLCAmc2VxKTsKKworICAgICAgLyoga2luZFtvZmZzZXRdID0gKHRva2Vu LmRldGFjaCA/IEdPTVBfTUFQX0RFVEFDSCA6IEdPTVBfTUFQX0FUVEFDSC4gKi8KKyAgICAg IGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fZGV0YWNoICh0b2tlbik7CisgICAgICB0bXAy ID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmll bGQpLCB0b2tlbiwKKwkJCSAgICAgIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgdG1wMiA9 IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBORV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwKKwkJ CSAgICAgIHRtcDIsIGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHRtcDIpKSk7CisgICAg ICB0bXAyID0gYnVpbGQzIChDT05EX0VYUFIsIHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZSwg dG1wMiwKKwkJICAgICBidWlsZF9pbnRfY3N0IChzaG9ydF91bnNpZ25lZF90eXBlX25vZGUs IEdPTVBfTUFQX0RFVEFDSCksCisJCSAgICAgYnVpbGRfaW50X2NzdCAoc2hvcnRfdW5zaWdu ZWRfdHlwZV9ub2RlLCBHT01QX01BUF9BVFRBQ0gpKTsKKworICAgICAgZmllbGQgPSBnZmNf b21wX2dldF90b2tlbl9raW5kcyAodG9rZW4pOworICAgICAgdG1wID0gZm9sZF9idWlsZDNf bG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLAorCQkJICAgICB0 b2tlbiwgZmllbGQsIE5VTExfVFJFRSk7CisgICAgICB0bXAgPSBidWlsZDJfbG9jIChsb2Ms IFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKHRtcCksIHRtcCwKKwkJCWJ1aWxkMl9s b2MgKGxvYywgTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwKKwkJCVRZUEVfU0laRV9VTklU IChzaG9ydF91bnNpZ25lZF90eXBlX25vZGUpLAorCQkJZm9sZF9idWlsZDNfbG9jIChsb2Ms IENPTVBPTkVOVF9SRUYsCisJCQkJCSBUUkVFX1RZUEUgKG9mZnNldF9maWVsZCksIHRva2Vu LAorCQkJCQkgb2Zmc2V0X2ZpZWxkLCBOVUxMX1RSRUUpKSk7CisgICAgICBzZXEyID0gTlVM TDsKKyAgICAgIHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVl LCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc2VxICgmc2VxLCBzZXEyKTsK KyAgICAgIHRtcCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOwor ICAgICAgZ2ltcGxpZnlfYXNzaWduICh0bXAsIHRtcDIsICZzZXEpOworCisgICAgICAvKiB0 b2tlbi5vZmZzZXQrKyAqLworICAgICAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBQTFVTX0VY UFIsIHNpemVfdHlwZV9ub2RlLCBvZmZzZXQsIG9uZSk7CisgICAgICBnaW1wbGlmeV9hc3Np Z24gKHVuc2hhcmVfZXhwciAob2Zmc2V0KSwgdG1wLCAmc2VxKTsKKworICAgICAgLyogaWYg KGNiX2ZuKQorCSAgIGdvdG8gcmV0dXJuX2xhYmVsCisJIGNiX2ZuICguLi4pICovCisKKyAg ICAgIGNvbnRfbGFiZWwgPSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jKTsKKyAgICAg IGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZzZXEsCisJCQkgICBnaW1wbGVfYnVpbGRfY29uZCAo RVFfRVhQUiwgY2JfZm4sIG51bGxfcG9pbnRlcl9ub2RlLAorCQkJCQkgICAgICByZXR1cm5f bGFiZWwsIGNvbnRfbGFiZWwpKTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZzZXEs IGdpbXBsZV9idWlsZF9sYWJlbCAoY29udF9sYWJlbCkpOworICAgICAgdG1wID0gYnVpbGRf Y2FsbF9leHByX2xvYyAobG9jLCBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvYywg Y2JfZm4pLAorCQkJCSA0LCBidWlsZF9mb2xkX2FkZHJfZXhwciAoZGVjbCksCisJCQkJIFRS RUVfT1BFUkFORCAodG9rZW4sIDApLAorCQkJCSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9s b2MgKGxvYywgZGF0YSksCisJCQkJIGJ1aWxkX2ludF9jc3QgKHNob3J0X2ludGVnZXJfdHlw ZV9ub2RlLAorCQkJCQkJR0ZDX0NMQVNTX0NBTExCQUNLX0RFRkFVTFRfRkxBRykpOworICAg ICAgZ2ltcGxpZnlfYW5kX2FkZCAodG1wLCAmc2VxKTsKKworICAgICAgLyogcmV0dXJuX2xh YmVsOgorCSByZXR1cm4gMCAqLworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJnNlcSwg Z2ltcGxlX2J1aWxkX2xhYmVsIChyZXR1cm5fbGFiZWwpKTsKKyAgICAgIHRtcCA9IGZvbGRf YnVpbGQyX2xvYyAobG9jLCBNT0RJRllfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkgICAg IERFQ0xfUkVTVUxUIChkZWNsKSwKKwkJCSAgICAgYnVpbGRfemVyb19jc3QgKHNpemVfdHlw ZV9ub2RlKSk7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkMV9sb2MgKGxvYywgUkVUVVJOX0VY UFIsIHZvaWRfdHlwZV9ub2RlLCB0bXApOworICAgICAgZ2ltcGxpZnlfYW5kX2FkZCAodG1w LCAmc2VxKTsKKyAgICB9CisKKyAgcG9wX2dpbXBsaWZ5X2NvbnRleHQgKE5VTEwpOworICBn aW1wbGVfc2V0X2JvZHkgKGRlY2wsIGdpbXBsZV9idWlsZF9iaW5kIChOVUxMX1RSRUUsIHNl cSwgTlVMTCkpOworICBjZnVuLT5mdW5jdGlvbl9lbmRfbG9jdXMgPSBsb2M7CisgIGNmdW4t PmN1cnJfcHJvcGVydGllcyB8PSBQUk9QX2dpbXBsZV9hbnk7CisgIHBvcF9jZnVuICgpOwor ICBjZ3JhcGhfbm9kZTo6YWRkX25ld19mdW5jdGlvbiAoZGVjbCwgdHJ1ZSk7CisKKyAgaWYg KG9sZF9jb250ZXh0KQorICAgIHBvcF9mdW5jdGlvbl9jb250ZXh0ICgpOworICBjdXJyZW50 X2Z1bmN0aW9uX2RlY2wgPSBvbGRfY29udGV4dDsKKyAgcmV0dXJuIGRlY2w7Cit9CisKKy8q IG1hcCg8ZmxhZz46IGRhdGEgW2xlbjogPHNpemU+XSkKKyAgIG1hcChhdHRhY2g6ICZkYXRh IFtiaWFzOiA8Ymlhcz5dKQorICAgb2Zmc2V0ICs9IDI7IG9mZnNldF9kYXRhICs9IDIgKi8K K3N0YXRpYyB2b2lkCitnZmNfb21wX2RlZXBfbWFwcGluZ19tYXAgKHRyZWUgZGF0YSwgdHJl ZSBzaXplLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHRraW5kLAorCQkJICBsb2NhdGlvbl90 IGxvYywgdHJlZSBkYXRhX2FycmF5LCB0cmVlIHNpemVzX2FycmF5LAorCQkJICB0cmVlIGtp bmRzX2FycmF5LCB0cmVlIG9mZnNldF9kYXRhLCB0cmVlIG9mZnNldCwKKwkJCSAgZ2ltcGxl X3NlcSAqc2VxLCBjb25zdCBnaW1wbGUgKmN0eCkKK3sKKyAgdHJlZSBvbmUgPSBidWlsZF9p bnRfY3N0IChzaXplX3R5cGVfbm9kZSwgMSk7CisKKyAgU1RSSVBfTk9QUyAoZGF0YSk7Cisg IGlmICghUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGF0YSkpKQorICAgIHsKKyAgICAg IGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoZGF0YSkgPT0gSU5ESVJFQ1RfUkVGKTsKKyAgICAg IGRhdGEgPSBUUkVFX09QRVJBTkQgKGRhdGEsIDApOworICAgIH0KKworICAvKiBkYXRhX2Fy cmF5W29mZnNldF9kYXRhXSA9IGRhdGE7ICovCisgIHRyZWUgdG1wID0gYnVpbGQ0IChBUlJB WV9SRUYsIFRSRUVfVFlQRSAoVFJFRV9UWVBFIChkYXRhX2FycmF5KSksCisJCSAgICAgdW5z aGFyZV9leHByIChkYXRhX2FycmF5KSwgb2Zmc2V0X2RhdGEsCisJCSAgICAgTlVMTF9UUkVF LCBOVUxMX1RSRUUpOworICBnaW1wbGlmeV9hc3NpZ24gKHRtcCwgZGF0YSwgc2VxKTsKKwor ICAvKiBvZmZzZXRfZGF0YSsrICovCisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUExVU19F WFBSLCBzaXplX3R5cGVfbm9kZSwgb2Zmc2V0X2RhdGEsIG9uZSk7CisgIGdpbXBsaWZ5X2Fz c2lnbiAob2Zmc2V0X2RhdGEsIHRtcCwgc2VxKTsKKworICAvKiBkYXRhX2FycmF5W29mZnNl dF9kYXRhXSA9ICZkYXRhOyAqLworICB0bXAgPSBidWlsZDQgKEFSUkFZX1JFRiwgVFJFRV9U WVBFIChUUkVFX1RZUEUgKGRhdGFfYXJyYXkpKSwKKwkJdW5zaGFyZV9leHByIChkYXRhX2Fy cmF5KSwKKwkJb2Zmc2V0X2RhdGEsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAgZ2ltcGxp ZnlfYXNzaWduICh0bXAsIGJ1aWxkX2ZvbGRfYWRkcl9leHByIChkYXRhKSwgc2VxKTsKKwor ICAvKiBvZmZzZXRfZGF0YSsrICovCisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUExVU19F WFBSLCBzaXplX3R5cGVfbm9kZSwgb2Zmc2V0X2RhdGEsIG9uZSk7CisgIGdpbXBsaWZ5X2Fz c2lnbiAob2Zmc2V0X2RhdGEsIHRtcCwgc2VxKTsKKworICAvKiBzaXplc19hcnJheVtvZmZz ZXRdID0gc2l6ZSAqLworICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIE1VTFRfRVhQUiwgc2l6 ZV90eXBlX25vZGUsCisJCSAgICBUWVBFX1NJWkVfVU5JVCAoc2l6ZV90eXBlX25vZGUpLCBv ZmZzZXQpOworICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIFBPSU5URVJfUExVU19FWFBSLCBU UkVFX1RZUEUgKHNpemVzX2FycmF5KSwKKwkJICAgIHNpemVzX2FycmF5LCB0bXApOworICBn aW1wbGVfc2VxIHNlcTIgPSBOVUxMOworICB0bXAgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAo dG1wLCAmc2VxMiwgdHJ1ZSwgTlVMTF9UUkVFKTsKKyAgZ2ltcGxlX3NlcV9hZGRfc2VxIChz ZXEsIHNlcTIpOworICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvYywg dG1wKTsKKyAgZ2ltcGxpZnlfYXNzaWduICh0bXAsIHNpemUsIHNlcSk7CisKKyAgLyogRklY TUU6IHRraW5kIHw9IHRhbGlnbiA8PCB0YWxpZ25fc2hpZnQ7ICovCisgIC8qIGtpbmRzX2Fy cmF5W29mZnNldF0gPSB0a2luZC4gKi8KKyAgdG1wID0gYnVpbGQyX2xvYyAobG9jLCBNVUxU X0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkgICAgVFlQRV9TSVpFX1VOSVQgKHNob3J0X3Vu c2lnbmVkX3R5cGVfbm9kZSksIG9mZnNldCk7CisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywg UE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVfVFlQRSAoa2luZHNfYXJyYXkpLAorCQkgICAga2lu ZHNfYXJyYXksIHRtcCk7CisgIHNlcTIgPSBOVUxMOworICB0bXAgPSBmb3JjZV9naW1wbGVf b3BlcmFuZCAodG1wLCAmc2VxMiwgdHJ1ZSwgTlVMTF9UUkVFKTsKKyAgZ2ltcGxlX3NlcV9h ZGRfc2VxIChzZXEsIHNlcTIpOworICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9s b2MgKGxvYywgdG1wKTsKKyAgZ2ltcGxpZnlfYXNzaWduICh0bXAsIGJ1aWxkX2ludF9jc3Qg KHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZSwgdGtpbmQpLCBzZXEpOworCisgIC8qIG9mZnNl dCsrICovCisgIHRtcCA9IGJ1aWxkMl9sb2MgKGxvYywgUExVU19FWFBSLCBzaXplX3R5cGVf bm9kZSwgb2Zmc2V0LCBvbmUpOworICBnaW1wbGlmeV9hc3NpZ24gKG9mZnNldCwgdG1wLCBz ZXEpOworCisgIC8qIHNpemVzX2FycmF5W29mZnNldF0gPSBiaWFzICg9IDApLiAgKi8KKyAg dG1wID0gYnVpbGQyX2xvYyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkg ICAgVFlQRV9TSVpFX1VOSVQgKHNpemVfdHlwZV9ub2RlKSwgb2Zmc2V0KTsKKyAgdG1wID0g YnVpbGQyX2xvYyAobG9jLCBQT0lOVEVSX1BMVVNfRVhQUiwgVFJFRV9UWVBFIChzaXplc19h cnJheSksCisJCSAgICBzaXplc19hcnJheSwgdG1wKTsKKyAgc2VxMiA9IE5VTEw7CisgIHRt cCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVlLCBOVUxMX1RSRUUp OworICBnaW1wbGVfc2VxX2FkZF9zZXEgKHNlcSwgc2VxMik7CisgIHRtcCA9IGJ1aWxkX2Zv bGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOworICBnaW1wbGlmeV9hc3NpZ24gKHRt cCwgYnVpbGRfemVyb19jc3QgKHNpemVfdHlwZV9ub2RlKSwgc2VxKTsKKworICBnY2NfYXNz ZXJ0IChnaW1wbGVfY29kZSAoY3R4KSA9PSBHSU1QTEVfT01QX1RBUkdFVCk7CisgIHRraW5k ID0gKGdpbXBsZV9vbXBfdGFyZ2V0X2tpbmQgKGN0eCkgPT0gR0ZfT01QX1RBUkdFVF9LSU5E X0VYSVRfREFUQQorCSAgID8gR09NUF9NQVBfREVUQUNIIDogR09NUF9NQVBfQVRUQUNIKTsK KworICAvKiBraW5kc19hcnJheVtvZmZzZXRdID0gdGtpbmQuICovCisgIHRtcCA9IGJ1aWxk Ml9sb2MgKGxvYywgTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwKKwkJICAgIFRZUEVfU0la RV9VTklUIChzaG9ydF91bnNpZ25lZF90eXBlX25vZGUpLCBvZmZzZXQpOworICB0bXAgPSBi dWlsZDJfbG9jIChsb2MsIFBPSU5URVJfUExVU19FWFBSLCBUUkVFX1RZUEUgKGtpbmRzX2Fy cmF5KSwKKwkJICAgIGtpbmRzX2FycmF5LCB0bXApOworICBzZXEyID0gTlVMTDsKKyAgdG1w ID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKHRtcCwgJnNlcTIsIHRydWUsIE5VTExfVFJFRSk7 CisgIGdpbXBsZV9zZXFfYWRkX3NlcSAoc2VxLCBzZXEyKTsKKyAgdG1wID0gYnVpbGRfZm9s ZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIHRtcCk7CisgIGdpbXBsaWZ5X2Fzc2lnbiAodG1w LCBidWlsZF9pbnRfY3N0IChzaG9ydF91bnNpZ25lZF90eXBlX25vZGUsIHRraW5kKSwgc2Vx KTsKKworICAvKiBvZmZzZXQrKyAqLworICB0bXAgPSBidWlsZDJfbG9jIChsb2MsIFBMVVNf RVhQUiwgc2l6ZV90eXBlX25vZGUsIG9mZnNldCwgb25lKTsKKyAgZ2ltcGxpZnlfYXNzaWdu IChvZmZzZXQsIHRtcCwgc2VxKTsKK30KKworc3RhdGljIHZvaWQgZ2ZjX29tcF9kZWVwX21h cHBpbmdfaXRlbSAoYm9vbCwgYm9vbCwgYm9vbCwgbG9jYXRpb25fdCwgdHJlZSwKKwkJCQkg ICAgICAgdHJlZSAqLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCB0cmVlLAorCQkJCSAgICAg ICB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJCSAgICAgICBnaW1wbGVfc2Vx ICosIGNvbnN0IGdpbXBsZSAqKTsKKworLyogTWFwIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMu ICAqLworc3RhdGljIHZvaWQKK2dmY19vbXBfZGVlcF9tYXBwaW5nX2NvbXBzIChib29sIGlz X2NudCwgbG9jYXRpb25fdCBsb2MsIHRyZWUgZGVjbCwKKwkJCSAgICB0cmVlICp0b2tlbiwg dW5zaWduZWQgSE9TVF9XSURFX0lOVCB0a2luZCwKKwkJCSAgICB0cmVlIGRhdGFfYXJyYXks IHRyZWUgc2l6ZXNfYXJyYXksIHRyZWUga2luZHNfYXJyYXksCisJCQkgICAgdHJlZSBvZmZz ZXRfZGF0YSwgdHJlZSBvZmZzZXQsIHRyZWUgbnVtLAorCQkJICAgIGdpbXBsZV9zZXEgKnNl cSwgY29uc3QgZ2ltcGxlICpjdHgpCit7CisgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoZGVj bCk7CisgIGlmIChUUkVFX0NPREUgKHR5cGUpICE9IFJFQ09SRF9UWVBFKQorICAgIHJldHVy bjsKKyAgZm9yICh0cmVlIGZpZWxkID0gVFlQRV9GSUVMRFMgKHR5cGUpOyBmaWVsZDsgZmll bGQgPSBERUNMX0NIQUlOIChmaWVsZCkpCisgICAgeworICAgICAgdHlwZSA9IFRSRUVfVFlQ RSAoZmllbGQpOworICAgICAgaWYgKGdmY19pc19wb2x5bW9ycGhpY19ub25wdHIgKHR5cGUp CisJICB8fCBHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFIChmaWVsZCkKKwkgIHx8 IChHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKHR5cGUpCisJICAgICAgJiYgR0ZDX1RZUEVfQVJS QVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BTExPQ0FUQUJMRSkpCisJeworCSAgdHJl ZSB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBF IChmaWVsZCksCisJCQkJICAgICAgZGVjbCwgZmllbGQsIE5VTExfVFJFRSk7CisJICBnZmNf b21wX2RlZXBfbWFwcGluZ19pdGVtIChpc19jbnQsIHRydWUsIHRydWUsIGxvYywgdG1wLCB0 b2tlbiwKKwkJCQkgICAgIHRraW5kLCBkYXRhX2FycmF5LCBzaXplc19hcnJheSwKKwkJCQkg ICAgIGtpbmRzX2FycmF5LCBvZmZzZXRfZGF0YSwgb2Zmc2V0LCBudW0sCisJCQkJICAgICBz ZXEsIGN0eCk7CisJfQorICAgICAgZWxzZSBpZiAoR0ZDX0RFQ0xfR0VUX1NDQUxBUl9QT0lO VEVSIChmaWVsZCkKKwkgICAgICAgfHwgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QICh0eXBlKSkK Kwljb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKGdmY19oYXNfYWxsb2NfY29tcHMgKFRSRUVf VFlQRSAoZmllbGQpLCBmaWVsZCwgZmFsc2UpKQorCXsKKwkgIHRyZWUgdG1wID0gZm9sZF9i dWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLAorCQkJ CSAgICAgIGRlY2wsIGZpZWxkLCBOVUxMX1RSRUUpOworCSAgaWYgKFRSRUVfQ09ERSAoVFJF RV9UWVBFICh0bXApKSA9PSBBUlJBWV9UWVBFKQorCSAgICBnZmNfb21wX2RlZXBfbWFwcGlu Z19pdGVtIChpc19jbnQsIGZhbHNlLCBmYWxzZSwgbG9jLCB0bXAsCisJCQkJICAgICAgIHRv a2VuLCB0a2luZCwgZGF0YV9hcnJheSwgc2l6ZXNfYXJyYXksCisJCQkJICAgICAgIGtpbmRz X2FycmF5LCBvZmZzZXRfZGF0YSwgb2Zmc2V0LCBudW0sCisJCQkJICAgICAgIHNlcSwgY3R4 KTsKKwkgIGVsc2UKKwkgICAgZ2ZjX29tcF9kZWVwX21hcHBpbmdfY29tcHMgKGlzX2NudCwg bG9jLCB0bXAsIHRva2VuLCB0a2luZCwKKwkJCQkJZGF0YV9hcnJheSwgc2l6ZXNfYXJyYXks IGtpbmRzX2FycmF5LAorCQkJCQlvZmZzZXRfZGF0YSwgb2Zmc2V0LCBudW0sIHNlcSwgY3R4 KTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZ2ZjX29tcF9nZW5fc2ltcGxlX2xv b3AgKHRyZWUgdmFyLCB0cmVlIGJlZ2luLCB0cmVlIGVuZCwgZW51bSB0cmVlX2NvZGUgY29u ZCwKKwkJCSB0cmVlIHN0ZXAsIGxvY2F0aW9uX3QgbG9jLCBnaW1wbGVfc2VxICpzZXExLAor CQkJIGdpbXBsZV9zZXEgKnNlcTIpCit7CisgIHRyZWUgdG1wOworCisgIC8qIHZhciA9IGJl Z2luLiAqLworICBnaW1wbGlmeV9hc3NpZ24gKHZhciwgYmVnaW4sIHNlcTEpOworCisgIC8q IExvb3A6IGZvciAodmFyID0gYmVnaW47IHZhciA8Y29uZD4gZW5kOyB2YXIgKz0gc3RlcCku ICAqLworICB0cmVlIGxhYmVsX2xvb3AgPSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9j KTsKKyAgdHJlZSBsYWJlbF9jb25kID0gY3JlYXRlX2FydGlmaWNpYWxfbGFiZWwgKGxvYyk7 CisKKyAgZ2ltcGxpZnlfYW5kX2FkZCAoZm9sZF9idWlsZDFfbG9jIChsb2MsIEdPVE9fRVhQ Uiwgdm9pZF90eXBlX25vZGUsCisJCQkJICAgICBsYWJlbF9jb25kKSwgc2VxMSk7CisgIGdp bXBsZV9zZXFfYWRkX3N0bXQgKHNlcTEsIGdpbXBsZV9idWlsZF9sYWJlbCAobGFiZWxfbG9v cCkpOworCisgIC8qIEV2ZXJ5dGhpbmcgYWJvdmUgaXMgc2VxMTsgcGxhY2UgbG9vcCBib2R5 IGhlcmUuICAqLworCisgIC8qIEVuZCBvZiBsb29wIGJvZHkgLT4gcHV0IGludG8gc2VxMi4g ICovCisgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBQTFVTX0VYUFIsIFRSRUVfVFlQ RSAodmFyKSwgdmFyLCBzdGVwKTsKKyAgZ2ltcGxpZnlfYXNzaWduICh2YXIsIHRtcCwgc2Vx Mik7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKHNlcTIsIGdpbXBsZV9idWlsZF9sYWJlbCAo bGFiZWxfY29uZCkpOworICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgY29uZCwgYm9v bGVhbl90eXBlX25vZGUsIHZhciwgZW5kKTsKKyAgdG1wID0gYnVpbGQzX3YgKENPTkRfRVhQ UiwgdG1wLCBidWlsZDFfdiAoR09UT19FWFBSLCBsYWJlbF9sb29wKSwKKwkJICBidWlsZF9l bXB0eV9zdG10IChsb2MpKTsKKyAgZ2ltcGxpZnlfYW5kX2FkZCAodG1wLCBzZXEyKTsKK30K KworLyogUmV0dXJuIHNpemUgdmFyaWFibGUgd2l0aCB0aGUgc2l6ZSBvZiBhbiBhcnJheS4g ICovCitzdGF0aWMgdHJlZQorZ2ZjX29tcF9nZXRfYXJyYXlfc2l6ZSAobG9jYXRpb25fdCBs b2MsIHRyZWUgZGVzYywgZ2ltcGxlX3NlcSAqc2VxKQoreworICB0cmVlIHRtcDsKKyAgZ2lt cGxlX3NlcSBzZXExID0gTlVMTCwgc2VxMiA9IE5VTEw7CisgIHRyZWUgc2l6ZSA9IGJ1aWxk X2RlY2wgKGxvYywgVkFSX0RFQ0wsIGNyZWF0ZV90bXBfdmFyX25hbWUgKCJzaXplIiksCisJ CQkgIHNpemVfdHlwZV9ub2RlKTsKKyAgdHJlZSBleHRlbnQgPSBidWlsZF9kZWNsIChsb2Ms IFZBUl9ERUNMLCBjcmVhdGVfdG1wX3Zhcl9uYW1lICgiZXh0ZW50IiksCisJCQkgICAgZ2Zj X2FycmF5X2luZGV4X3R5cGUpOworICB0cmVlIGlkeCA9IGJ1aWxkX2RlY2wgKGxvYywgVkFS X0RFQ0wsIGNyZWF0ZV90bXBfdmFyX25hbWUgKCJpZHgiKSwKKwkJCSBzaWduZWRfY2hhcl90 eXBlX25vZGUpOworCisgIHRyZWUgYmVnaW4gPSBidWlsZF96ZXJvX2NzdCAoc2lnbmVkX2No YXJfdHlwZV9ub2RlKTsKKyAgdHJlZSBlbmQ7CisgIGlmIChHRkNfVFlQRV9BUlJBWV9BS0lO RCAoVFJFRV9UWVBFIChkZXNjKSkgPT0gR0ZDX0FSUkFZX0FTU1VNRURfU0hBUEVfQ09OVAor ICAgICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKFRSRUVfVFlQRSAoZGVzYykpID09IEdG Q19BUlJBWV9BU1NVTUVEX1NIQVBFKQorICAgIGVuZCA9IGdmY19jb252X2Rlc2NyaXB0b3Jf cmFuayAoZGVzYyk7CisgIGVsc2UKKyAgICBlbmQgPSBidWlsZF9pbnRfY3N0IChzaWduZWRf Y2hhcl90eXBlX25vZGUsCisJCQkgR0ZDX1RZUEVfQVJSQVlfUkFOSyAoVFJFRV9UWVBFIChk ZXNjKSkpOworICB0cmVlIHN0ZXAgPSBidWlsZF9pbnRfY3N0IChzaWduZWRfY2hhcl90eXBl X25vZGUsIDEpOworCisgIC8qIHNpemUgPSAwCisgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwg cmFuazsgaWR4KyspCisgICAgICAgZXh0ZW50ID0gZ2ZjLT5kaW1baV0udWJvdW5kIC0gZ2Zj LT5kaW1baV0ubGJvdW5kICsgMQorICAgICAgIGlmIChleHRlbnQgPCAwKSBleHRlbnQgPSAw CisJIHNpemUgKj0gZXh0ZW50LiAgKi8KKyAgZ2ltcGxpZnlfYXNzaWduIChzaXplLCBidWls ZF9pbnRfY3N0IChzaXplX3R5cGVfbm9kZSwgMSksIHNlcSk7CisKKyAgZ2ZjX29tcF9nZW5f c2ltcGxlX2xvb3AgKGlkeCwgYmVnaW4sIGVuZCwgTFRfRVhQUiwgc3RlcCwgbG9jLCAmc2Vx MSwgJnNlcTIpOworICBnaW1wbGVfc2VxX2FkZF9zZXEgKHNlcSwgc2VxMSk7CisKKyAgdG1w ID0gZm9sZF9idWlsZDJfbG9jIChsb2MsIE1JTlVTX0VYUFIsIGdmY19hcnJheV9pbmRleF90 eXBlLAorCQkJIGdmY19jb252X2Rlc2NyaXB0b3JfdWJvdW5kX2dldCAoZGVzYywgaWR4KSwK KwkJCSBnZmNfY29udl9kZXNjcmlwdG9yX2xib3VuZF9nZXQgKGRlc2MsIGlkeCkpOworICB0 bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgUExVU19FWFBSLCBnZmNfYXJyYXlfaW5kZXhf dHlwZSwKKwkJCSB0bXAsIGdmY19pbmRleF9vbmVfbm9kZSk7CisgIGdpbXBsaWZ5X2Fzc2ln biAoZXh0ZW50LCB0bXAsIHNlcSk7CisgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAobG9jLCBM VF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwKKwkJCSBleHRlbnQsIGdmY19pbmRleF96ZXJv X25vZGUpOworICB0bXAgPSBidWlsZDNfdiAoQ09ORF9FWFBSLCB0bXAsCisJCSAgZm9sZF9i dWlsZDJfbG9jIChsb2MsIE1PRElGWV9FWFBSLAorCQkJCSAgIGdmY19hcnJheV9pbmRleF90 eXBlLAorCQkJCSAgIGV4dGVudCwgZ2ZjX2luZGV4X3plcm9fbm9kZSksCisJCSAgYnVpbGRf ZW1wdHlfc3RtdCAobG9jKSk7CisgIGdpbXBsaWZ5X2FuZF9hZGQgKHRtcCwgc2VxKTsKKyAg Lyogc2l6ZSAqPSBleHRlbnQuICAqLworICBnaW1wbGlmeV9hc3NpZ24gKHNpemUsIGZvbGRf YnVpbGQyX2xvYyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLCBzaXplLAorCQkJ CQkgIGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25vZGUsCisJCQkJCQkJZXh0ZW50KSksIHNl cSk7CisgIGdpbXBsZV9zZXFfYWRkX3NlcSAoc2VxLCBzZXEyKTsKKyAgcmV0dXJuIHNpemU7 Cit9CisKKy8qIEdlbmVyYXRlIGxvb3AgdG8gYWNjZXNzIGV2ZXJ5IGFycmF5IGVsZW1lbnQ7 IHRha2VzIGFkZHIgb2YgZmlyc3QgZWxlbWVudAorICAgKGRlY2wncyBkYXRhIGNvbXApOyBy ZXR1cm5zIGxvb3AgY29kZSBpbiBzZXExICsgc2VxMgorICAgYW5kIHRoZSBwb2ludGVyIHRv IHRoZSBlbGVtZW50IGFzIHJldHVybiB2YWx1ZS4gICovCitzdGF0aWMgdHJlZQorZ2ZjX29t cF9lbG1lbnRhbF9sb29wIChsb2NhdGlvbl90IGxvYywgdHJlZSBkZWNsLCB0cmVlIHNpemUs IHRyZWUgZWxlbV9sZW4sCisJCSAgICAgICBnaW1wbGVfc2VxICpzZXExLCBnaW1wbGVfc2Vx ICpzZXEyKQoreworICB0cmVlIGlkeCA9IGJ1aWxkX2RlY2wgKGxvYywgVkFSX0RFQ0wsIGNy ZWF0ZV90bXBfdmFyX25hbWUgKCJpZHgiKSwKKwkJCSBzaXplX3R5cGVfbm9kZSk7CisgIHRy ZWUgYmVnaW4gPSBidWlsZF96ZXJvX2NzdCAoc2l6ZV90eXBlX25vZGUpOworICB0cmVlIGVu ZCA9IHNpemU7CisgIHRyZWUgc3RlcCA9IGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2Rl LCAxKTsKKyAgdHJlZSBwdHI7CisKKyAgZ2ZjX29tcF9nZW5fc2ltcGxlX2xvb3AgKGlkeCwg YmVnaW4sIGVuZCwgTFRfRVhQUiwgc3RlcCwgbG9jLCBzZXExLCBzZXEyKTsKKworICB0cmVl IHR5cGUgPSBUUkVFX1RZUEUgKGRlY2wpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUp KQorICAgIHsKKyAgICAgIHR5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICAgICAgZ2NjX2Fz c2VydCAoVFJFRV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFKTsKKyAgICAgIGRlY2wgPSBm b2xkX2NvbnZlcnQgKGJ1aWxkX3BvaW50ZXJfdHlwZSAoVFJFRV9UWVBFICh0eXBlKSksIGRl Y2wpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjY19hc3NlcnQgKFRSRUVfQ09E RSAodHlwZSkgPT0gQVJSQVlfVFlQRSk7CisgICAgICBkZWNsID0gYnVpbGRfZm9sZF9hZGRy X2V4cHJfbG9jIChsb2MsIGRlY2wpOworICAgIH0KKyAgZGVjbCA9IGZvbGRfY29udmVydCAo YnVpbGRfcG9pbnRlcl90eXBlIChUUkVFX1RZUEUgKHR5cGUpKSwgZGVjbCk7CisgIHRyZWUg dG1wID0gYnVpbGQyX2xvYyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLCBpZHgs IGVsZW1fbGVuKTsKKyAgcHRyID0gYnVpbGQyX2xvYyAobG9jLCBQT0lOVEVSX1BMVVNfRVhQ UiwgVFJFRV9UWVBFIChkZWNsKSwgZGVjbCwgdG1wKTsKKyAgZ2ltcGxlX3NlcSBzZXEzID0g TlVMTDsKKyAgcHRyID0gZm9yY2VfZ2ltcGxlX29wZXJhbmQgKHB0ciwgJnNlcTMsIHRydWUs IE5VTExfVFJFRSk7CisgIGdpbXBsZV9zZXFfYWRkX3NlcSAoc2VxMSwgc2VxMyk7CisKKyAg cmV0dXJuIHB0cjsKK30KKworCisvKiBJZiBkb19jb3B5LCBjb3B5IGRhdGEgcG9pbnRlciBh bmQgdnB0ciAoaWYgYXBwbGljYWJsZSkgYXMgd2VsbC4KKyAgIE90aGVyd2lzZSwgb25seSBo YW5kbGUgYWxsb2NhdGFibGUgY29tcG9uZW50cy4KKyAgIGRvX2NvcHkgPT0gZmFsc2UgY2Fu IGhhcHBlbiBvbmx5IHdpdGggbm9ucG9seW1vcnBoaWMgYXJndW1lbnRzCisgICB0byBhIGNv cHkgY2xhdXNlLgorICAgaWYgKGlzX2NudCkgdG9rZW4gLi4uIG9mZnNldCBpcyBpZ25vcmVk IGFuZCBudW0gaXMgdXNlZCwgb3RoZXJ3aXNlCisgICBudW0gaXMgTlVMTF9UUkVFIGFuZCB1 bnVzZWQuICAqLworCitzdGF0aWMgdm9pZAorZ2ZjX29tcF9kZWVwX21hcHBpbmdfaXRlbSAo Ym9vbCBpc19jbnQsIGJvb2wgZG9fY29weSwgYm9vbCBkb19hbGxvY19jaGVjaywKKwkJCSAg IGxvY2F0aW9uX3QgbG9jLCB0cmVlIGRlY2wsIHRyZWUgKnRva2VuLAorCQkJICAgdW5zaWdu ZWQgSE9TVF9XSURFX0lOVCB0a2luZCwgdHJlZSBkYXRhX2FycmF5LAorCQkJICAgdHJlZSBz aXplc19hcnJheSwgdHJlZSBraW5kc19hcnJheSwgdHJlZSBvZmZzZXRfZGF0YSwKKwkJCSAg IHRyZWUgb2Zmc2V0LCB0cmVlIG51bSwgZ2ltcGxlX3NlcSAqc2VxLAorCQkJICAgY29uc3Qg Z2ltcGxlICpjdHgpCit7CisgIHN0YXRpYyB0cmVlIG1hcF9mbiA9IE5VTExfVFJFRTsKKyAg c3RhdGljIHRyZWUgY250X2ZuID0gTlVMTF9UUkVFOworICB0cmVlIHRtcDsKKyAgdHJlZSB0 eXBlID0gVFJFRV9UWVBFIChkZWNsKTsKKyAgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKSkK KyAgICB0eXBlID0gVFJFRV9UWVBFICh0eXBlKTsKKyAgYm9vbCBwb2x5ID0gZ2ZjX2lzX3Bv bHltb3JwaGljX25vbnB0ciAodHlwZSk7CisgIHRyZWUgZW5kX2xhYmVsID0gTlVMTF9UUkVF OworICB0cmVlIHNpemUgPSBOVUxMX1RSRUUsIGVsZW1fbGVuID0gTlVMTF9UUkVFOworCisg IGlmIChkb19hbGxvY19jaGVjaykKKyAgICB7CisgICAgICB0cmVlIHRoZW5fbGFiZWwgPSBj cmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jKTsKKyAgICAgIGVuZF9sYWJlbCA9IGNyZWF0 ZV9hcnRpZmljaWFsX2xhYmVsIChsb2MpOworICAgICAgdG1wID0gZGVjbDsKKyAgICAgIGlm IChUUkVFX0NPREUgKFRSRUVfVFlQRSAodG1wKSkgPT0gUkVGRVJFTkNFX1RZUEUKKwkgIHx8 IChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFICh0bXApKQorCSAgICAgICYmIChQT0lOVEVS X1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKHRtcCkpKQorCQkgIHx8IEdGQ19ERVND UklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKHRtcCkpKSkpKQorCXRtcCA9 IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jLCB0bXApOworICAgICAgaWYgKHBv bHkpCisJdG1wID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0ICh0bXApOworICAgICAgaWYgKEdGQ19E RVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFICh0bXApKSkKKwl0bXAgPSBnZmNfY29udl9k ZXNjcmlwdG9yX2RhdGFfZ2V0ICh0bXApOworICAgICAgZ2ltcGxlX3NlcSBzZXEyID0gTlVM TDsKKyAgICAgIHRtcCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0bXAsICZzZXEyLCB0cnVl LCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc2VxIChzZXEsIHNlcTIpOwor CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10IChzZXEsCisJCQkgICBnaW1wbGVfYnVpbGRf Y29uZCAoTkVfRVhQUiwgdG1wLCBudWxsX3BvaW50ZXJfbm9kZSwKKwkJCQkJICAgICAgdGhl bl9sYWJlbCwgZW5kX2xhYmVsKSk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10IChzZXEs IGdpbXBsZV9idWlsZF9sYWJlbCAodGhlbl9sYWJlbCkpOworICAgIH0KKyAgaWYgKFBPSU5U RVJfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKSkKKyAgICB7CisgICAgICBkZWNsID0gYnVp bGRfZm9sZF9pbmRpcmVjdF9yZWYgKGRlY2wpOworICAgICAgdHlwZSA9IFRSRUVfVFlQRSAo ZGVjbCk7CisgICAgfQorCisgIGlmICghaXNfY250ICYmIHBvbHkgJiYgKnRva2VuID09IE5V TExfVFJFRSkKKyAgICB7CisgICAgICAqdG9rZW4gPSBidWlsZF9kZWNsIChpbnB1dF9sb2Nh dGlvbiwgVkFSX0RFQ0wsCisJCQkgICBjcmVhdGVfdG1wX3Zhcl9uYW1lICgibWFwX3Rva2Vu IiksCisJCQkgICBnZmNfb21wX2dldF9tYXBfdG9rZW5fdHlwZSAoZmFsc2UpKTsKKyAgICAg IGdpbXBsZV9hZGRfdG1wX3ZhciAoKnRva2VuKTsKKworICAgICAgLyogdG9rZW4uZGF0YSA9 ICZkYXRhX2FycmF5WzBdICovCisgICAgICB0cmVlIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9r ZW5fZGF0YSAoKnRva2VuKTsKKyAgICAgIHRtcCA9IGJ1aWxkNCAoQVJSQVlfUkVGLCBUUkVF X1RZUEUgKGZpZWxkKSwgZGF0YV9hcnJheSwKKwkJICAgIGJ1aWxkX3plcm9fY3N0IChzaXpl X3R5cGVfbm9kZSksIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAgICAgIGdpbXBsaWZ5X2Fz c2lnbiAoZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAo ZmllbGQpLAorCQkJCQkqdG9rZW4sIGZpZWxkLCBOVUxMX1RSRUUpLAorCQkgICAgICAgYnVp bGRfZm9sZF9hZGRyX2V4cHJfbG9jIChsb2MsIHRtcCksIHNlcSk7CisgICAgICAvKiB0b2tl bi5zaXplcyA9IHNpemVzICovCisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX3Np emVzICgqdG9rZW4pOworICAgICAgZ2ltcGxpZnlfYXNzaWduIChmb2xkX2J1aWxkM19sb2Mg KGxvYywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksCisJCQkJCSp0b2tlbiwg ZmllbGQsIE5VTExfVFJFRSksIHNpemVzX2FycmF5LAorCQkJCQlzZXEpOworICAgICAgLyog dG9rZW4ua2luZHMgPSBraW5kc19hcnJheSAqLworICAgICAgZmllbGQgPSBnZmNfb21wX2dl dF90b2tlbl9raW5kcyAoKnRva2VuKTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAoZm9sZF9i dWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLAorCQkJ CQkqdG9rZW4sIGZpZWxkLCBOVUxMX1RSRUUpLCBraW5kc19hcnJheSwKKwkJCQkJc2VxKTsK KyAgICAgIC8qIHRva2VuLmZsYWdzID0gdGtpbmQgKi8KKyAgICAgIGZpZWxkID0gZ2ZjX29t cF9nZXRfdG9rZW5fZmxhZ3MgKCp0b2tlbik7CisgICAgICB0bXAgPSBidWlsZF9pbnRfY3N0 dSAoc2hvcnRfdW5zaWduZWRfdHlwZV9ub2RlLCB0a2luZCk7CisgICAgICBnaW1wbGlmeV9h c3NpZ24gKGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUg KGZpZWxkKSwKKwkJCQkJKnRva2VuLCBmaWVsZCwgTlVMTF9UUkVFKSwgdG1wLCBzZXEpOwor ICAgICAgLyogdG9rZW4uZGV0YWNoID0gKGN0eCA9PSBFWElUX0RBVEEpICAqLworICAgICAg ZmllbGQgPSBnZmNfb21wX2dldF90b2tlbl9kZXRhY2ggKCp0b2tlbik7CisgICAgICBnaW1w bGlmeV9hc3NpZ24gKGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBUUkVF X1RZUEUgKGZpZWxkKSwKKwkJCQkJKnRva2VuLCBmaWVsZCwgTlVMTF9UUkVFKSwKKwkJICAg ICAgIChnaW1wbGVfb21wX3RhcmdldF9raW5kIChjdHgpCisJCQk9PSBHRl9PTVBfVEFSR0VU X0tJTkRfRVhJVF9EQVRBKSA/IGJvb2xlYW5fdHJ1ZV9ub2RlCisJCQkJCQkJIDogYm9vbGVh bl9mYWxzZV9ub2RlLAorCQkgICAgICAgc2VxKTsKKyAgICB9CisKKyAgaWYgKHBvbHkgJiYg IW1hcF9mbikKKyAgICB7CisgICAgICBjbnRfZm4gPSBidWlsZF9mb2xkX2FkZHJfZXhwciAo Z2ZjX29tcF9nZW5fZGVlcF9tYXBfZm4gKHRydWUpKTsKKyAgICAgIG1hcF9mbiA9IGJ1aWxk X2ZvbGRfYWRkcl9leHByIChnZmNfb21wX2dlbl9kZWVwX21hcF9mbiAoZmFsc2UpKTsKKyAg ICB9CisKKyAgaWYgKGlzX2NudCAmJiBkb19jb3B5KQorICAgIHsKKyAgICAgIHRyZWUgdG1w ID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLCBzaXplX3R5 cGVfbm9kZSwKKwkJCQkgIG51bSwgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBlX25vZGUsIDEp KTsKKyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAobnVtLCB0bXAsIHNlcSk7CisgICAgfQorICBl bHNlIGlmIChwb2x5ICYmIGRvX2NvcHkpCisgICAgeworICAgICAgLyogdG9rZW4ub2Zmc2V0 X2RhdGEgPSBvZmZzZXRfZGF0YSAqLworICAgICAgdHJlZSBmaWVsZCA9IGdmY19vbXBfZ2V0 X3Rva2VuX29mZnNldF9kYXRhICgqdG9rZW4pOworICAgICAgdG1wID0gZm9sZF9idWlsZDNf bG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLCAqdG9rZW4sCisJ CQkgICAgIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxpZnlfYXNzaWduICh0bXAs IG9mZnNldF9kYXRhLCBzZXEpOworICAgICAgLyogdG9rZW4ub2Zmc2V0ID0gb2Zmc2V0ICov CisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX29mZnNldCAoKnRva2VuKTsKKyAg ICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBUUkVFX1RZ UEUgKGZpZWxkKSwgKnRva2VuLAorCQkJICAgICBmaWVsZCwgTlVMTF9UUkVFKTsKKyAgICAg IGdpbXBsaWZ5X2Fzc2lnbiAodG1wLCBvZmZzZXRfZGF0YSwgc2VxKTsKKworICAgICAgLyog Y29weSB2cHRyICsgZGF0YSBwb2ludGVyICAqLworICAgICAgLyogZGVjbC0+dnB0ci0+Y2Fs bGJhY2sgKG9tcF9tYXAsIHRva2VuLCAmZGVjbC0+dnB0ciwKKwkJCSAgICAgICBHRkNfQ0xB U1NfQ0FMTEJBQ0tfVlRBQkxFX0ZMQUcpICovCisgICAgICB0cmVlIGNiID0gYnVpbGRfZm9s ZF9pbmRpcmVjdF9yZWYgKGdmY19jbGFzc192dGFiX2NhbGxiYWNrX2dldCAoZGVjbCkpOwor ICAgICAgdG1wID0gYnVpbGRfZm9sZF9hZGRyX2V4cHIgKGdmY19jbGFzc192cHRyX2dldCAo ZGVjbCkpOworICAgICAgdG1wCisJPSBidWlsZF9jYWxsX2V4cHJfbG9jIChsb2MsIGNiLCA0 LCBtYXBfZm4sCisJCQkgICAgICAgYnVpbGRfZm9sZF9hZGRyX2V4cHIgKCp0b2tlbiksIHRt cCwKKwkJCSAgICAgICBidWlsZF9pbnRfY3N0IChzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZSwK KwkJCQkJICAgICAgR0ZDX0NMQVNTX0NBTExCQUNLX1ZUQUJMRV9GTEFHKSk7CisgICAgICBn aW1wbGlmeV9hbmRfYWRkICh0bXAsIHNlcSk7CisKKyAgICAgIC8qIG9mZnNldF9kYXRhID0g dG9rZW4ub2Zmc2V0X2RhdGEgKi8KKyAgICAgIGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5f b2Zmc2V0X2RhdGEgKCp0b2tlbik7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxv YywgQ09NUE9ORU5UX1JFRiwgVFJFRV9UWVBFIChmaWVsZCksICp0b2tlbiwKKwkJCSAgICAg ZmllbGQsIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKHRtcCwgb2Zmc2V0 X2RhdGEsIHNlcSk7CisgICAgICAvKiBvZmZzZXQgPSB0b2tlbi5vZmZzZXQgKi8KKyAgICAg IGZpZWxkID0gZ2ZjX29tcF9nZXRfdG9rZW5fb2Zmc2V0ICgqdG9rZW4pOworICAgICAgdG1w ID0gZm9sZF9idWlsZDNfbG9jIChsb2MsIENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmll bGQpLCAqdG9rZW4sCisJCQkgICAgIGZpZWxkLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxp ZnlfYXNzaWduICh0bXAsIG9mZnNldF9kYXRhLCBzZXEpOworCisgICAgICB0cmVlIGJ5dGVz aXplID0gZm9sZF9jb252ZXJ0IChzaXplX3R5cGVfbm9kZSwKKwkJCQkgICAgZ2ZjX2NsYXNz X3Z0YWJfc2l6ZV9nZXQgKGRlY2wpKTsKKyAgICAgIHRtcCA9IGdmY19jbGFzc19kYXRhX2dl dCAoZGVjbCk7CisgICAgICBpZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUg KHRtcCkpKQorCXsKKwkgIGVsZW1fbGVuID0gYnl0ZXNpemU7CisJICBzaXplID0gZ2ZjX29t cF9nZXRfYXJyYXlfc2l6ZSAobG9jLCB0bXAsIHNlcSk7CisJICBieXRlc2l6ZSA9IGZvbGRf YnVpbGQyX2xvYyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJCSAgICAg IHNpemUsIGVsZW1fbGVuKTsKKwkgIHRtcCA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9n ZXQgKHRtcCk7CisJfQorCisgICAgICBnZmNfb21wX2RlZXBfbWFwcGluZ19tYXAgKHRtcCwg Ynl0ZXNpemUsIHRraW5kLCBsb2MsIGRhdGFfYXJyYXksCisJCQkJc2l6ZXNfYXJyYXksIGtp bmRzX2FycmF5LCBvZmZzZXRfZGF0YSwKKwkJCQlvZmZzZXQsIHNlcSwgY3R4KTsKKyAgICB9 CisgIGVsc2UgaWYgKGRvX2NvcHkpCisgICAgeworICAgICAgLyogY29weSBkYXRhIHBvaW50 ZXIgICovCisgICAgICB0cmVlIGJ5dGVzaXplOworICAgICAgaWYgKEdGQ19ERVNDUklQVE9S X1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCisJeworCSAgLyogVE9ETzogT3B0aW1pemF0 aW9uOiBTaG91bGRuJ3QgdGhpcyBiZSBhbiBleHByLiBjb25zdCwgZXhjZXB0IGZvcgorCSAg ICAgZGVmZXJyZWQtbGVuZ3RoIHN0cmluZ3MuIChDZi4gYWxzbyBiZWxvdykuICAqLworCSAg ZWxlbV9sZW4gPSBnZmNfY29udl9kZXNjcmlwdG9yX2VsZW1fbGVuIChkZWNsKTsKKwkgIHRt cCA9IChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkKKwkJID8gYnVpbGRfZm9s ZF9pbmRpcmVjdF9yZWYgKGRlY2wpIDogZGVjbCk7CisJICBzaXplID0gZ2ZjX29tcF9nZXRf YXJyYXlfc2l6ZSAobG9jLCB0bXAsIHNlcSk7CisJICBieXRlc2l6ZSA9IGZvbGRfYnVpbGQy X2xvYyAobG9jLCBNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJCSAgICAgIHNpemUs IGVsZW1fbGVuKTsKKwkgIHRtcCA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRl Y2wpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB0bXAgPSBkZWNsOworCSAgYnl0ZXNpemUg PSBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChkZWNsKSk7CisJfQorICAgICAgZ2ZjX29t cF9kZWVwX21hcHBpbmdfbWFwICh0bXAsIGJ5dGVzaXplLCB0a2luZCwgbG9jLCBkYXRhX2Fy cmF5LAorCQkJCXNpemVzX2FycmF5LCBraW5kc19hcnJheSwgb2Zmc2V0X2RhdGEsCisJCQkJ b2Zmc2V0LCBzZXEsIGN0eCk7CisgICAgfQorCisgIC8qIEhhbmRsZSBhbGxvY2F0YWJsZSBj b21wb25lbnRzLiAqLworICBpZiAoIWlzX2NudCAmJiBwb2x5KQorICAgIHsKKyAgICAgIC8q IHRva2VuLm9mZnNldF9kYXRhID0gb2Zmc2V0X2RhdGEgKi8KKyAgICAgIHRyZWUgZmllbGQg PSBnZmNfb21wX2dldF90b2tlbl9vZmZzZXRfZGF0YSAoKnRva2VuKTsKKyAgICAgIHRtcCA9 IGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxk KSwgKnRva2VuLAorCQkJICAgICBmaWVsZCwgTlVMTF9UUkVFKTsKKyAgICAgIGdpbXBsaWZ5 X2Fzc2lnbiAodG1wLCBvZmZzZXRfZGF0YSwgc2VxKTsKKyAgICAgIC8qIHRva2VuLm9mZnNl dCA9IG9mZnNldCAqLworICAgICAgZmllbGQgPSBnZmNfb21wX2dldF90b2tlbl9vZmZzZXQg KCp0b2tlbik7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGxvYywgQ09NUE9ORU5U X1JFRiwgVFJFRV9UWVBFIChmaWVsZCksICp0b2tlbiwKKwkJCSAgICAgZmllbGQsIE5VTExf VFJFRSk7CisgICAgICBnaW1wbGlmeV9hc3NpZ24gKHVuc2hhcmVfZXhwciAodG1wKSwgb2Zm c2V0X2RhdGEsIHNlcSk7CisgICAgfQorICBpZiAocG9seSkKKyAgICB7CisgICAgICB0cmVl IGNiID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKGdmY19jbGFzc192dGFiX2NhbGxiYWNr X2dldCAoZGVjbCkpOworICAgICAgdG1wID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChkZWNsKTsK KyAgICAgIGdpbXBsZV9zZXEgc2VxMiA9IE5VTEw7CisgICAgICBpZiAoR0ZDX0RFU0NSSVBU T1JfVFlQRV9QIChUUkVFX1RZUEUgKHRtcCkpKQorCXsKKwkgIGlmIChlbGVtX2xlbiA9PSBO VUxMX1RSRUUpCisJICAgIHsKKwkgICAgICBlbGVtX2xlbiA9IGZvbGRfY29udmVydCAoc2l6 ZV90eXBlX25vZGUsCisJCQkJICAgICAgIGdmY19jbGFzc192dGFiX3NpemVfZ2V0IChkZWNs KSk7CisJICAgICAgc2l6ZSA9IGdmY19vbXBfZ2V0X2FycmF5X3NpemUgKGxvYywgdG1wLCBz ZXEpOworCSAgICB9CisJICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0ICh0 bXApOworCSAgdG1wID0gZ2ZjX29tcF9lbG1lbnRhbF9sb29wIChsb2MsIHRtcCwgc2l6ZSwg ZWxlbV9sZW4sIHNlcSwgJnNlcTIpOworCX0KKyAgICAgIHRyZWUgZmxhZyA9IGJ1aWxkX2lu dF9jc3QgKHNob3J0X2ludGVnZXJfdHlwZV9ub2RlLAorCQkJCSBHRkNfQ0xBU1NfQ0FMTEJB Q0tfREVGQVVMVF9GTEFHKTsKKyAgICAgIHRtcCA9IGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGxv YywgY2IsIDQsIGlzX2NudCA/IGNudF9mbiA6IG1hcF9mbiwKKwkJCQkgaXNfY250ID8gbnVs bF9wb2ludGVyX25vZGUKKwkJCQkJOiBidWlsZF9mb2xkX2FkZHJfZXhwciAoKnRva2VuKSwK KwkJCQkgdG1wLCBmbGFnKTsKKyAgICAgIGdpbXBsaWZ5X2FuZF9hZGQgKHRtcCwgc2VxKTsK KyAgICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoc2VxLCBzZXEyKTsKKyAgICB9CisgIGlmICgh aXNfY250ICYmIHBvbHkpCisgICAgeworICAgICAgLyogb2Zmc2V0X2RhdGEgPSB0b2tlbi5v ZmZzZXRfZGF0YSAqLworICAgICAgdHJlZSBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX29m ZnNldF9kYXRhICgqdG9rZW4pOworICAgICAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChsb2Ms IENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQpLCAqdG9rZW4sCisJCQkgICAgIGZp ZWxkLCBOVUxMX1RSRUUpOworICAgICAgZ2ltcGxpZnlfYXNzaWduICh1bnNoYXJlX2V4cHIg KG9mZnNldF9kYXRhKSwgdG1wLCBzZXEpOworICAgICAgLyogb2Zmc2V0ID0gdG9rZW4ub2Zm c2V0ICovCisgICAgICBmaWVsZCA9IGdmY19vbXBfZ2V0X3Rva2VuX29mZnNldCAoKnRva2Vu KTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAobG9jLCBDT01QT05FTlRfUkVGLCBU UkVFX1RZUEUgKGZpZWxkKSwgKnRva2VuLAorCQkJICAgICBmaWVsZCwgTlVMTF9UUkVFKTsK KyAgICAgIGdpbXBsaWZ5X2Fzc2lnbiAodW5zaGFyZV9leHByIChvZmZzZXRfZGF0YSksIHRt cCwgc2VxKTsKKyAgICB9CisKKyAgLyogR2V0IGZpZWxkIGRlY2wuICAqLworICBpZiAoIXBv bHkpCisgICAgeworICAgICAgdG1wID0gZGVjbDsKKyAgICAgIGlmIChQT0lOVEVSX1RZUEVf UCAoVFJFRV9UWVBFIChkZWNsKSkpCisJd2hpbGUgKFRSRUVfQ09ERSAodG1wKSA9PSBDT01Q T05FTlRfUkVGIHx8IFRSRUVfQ09ERSAodG1wKSA9PSBBUlJBWV9SRUYpCisJICB0bXAgPSBU UkVFX09QRVJBTkQgKHRtcCwgVFJFRV9DT0RFICh0bXApID09IENPTVBPTkVOVF9SRUYgPyAx IDogMCk7CisgICAgfQorICBpZiAoIXBvbHkgJiYgZ2ZjX2hhc19hbGxvY19jb21wcyAodHlw ZSwgdG1wLCB0cnVlKSkKKyAgICB7CisgICAgICBnaW1wbGVfc2VxIHNlcTIgPSBOVUxMOwor ICAgICAgaWYgKEdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCisJ eworCSAgaWYgKGVsZW1fbGVuID09IE5VTExfVFJFRSkKKwkgICAgeworCSAgICAgIGVsZW1f bGVuID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9lbGVtX2xlbiAoZGVjbCk7CisJICAgICAgc2l6 ZSA9IGdmY19vbXBfZ2V0X2FycmF5X3NpemUgKGxvYywgZGVjbCwgc2VxKTsKKwkgICAgfQor CSAgZGVjbCA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlY2wpOworCSAgZGVj bCA9IGdmY19vbXBfZWxtZW50YWxfbG9vcCAobG9jLCBkZWNsLCBzaXplLCBlbGVtX2xlbiwg c2VxLCAmc2VxMik7CisJICBkZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChs b2MsIGRlY2wpOworCX0KKyAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFICh0 bXApKSA9PSBBUlJBWV9UWVBFKQorCXsKKwkgIHR5cGUgPSBUUkVFX1RZUEUgKHRtcCk7CisJ ICAvKiBGSVhNRTogUFI5NTg2OCAtIGZvciB2YXIlc3RyIG9mIGRlZmVycmVkIGxlbmd0aCwg ZWxlbV9sZW4gPT0gMDsKKwkgICAgIGxlbiBpcyBzdG9yZWQgYXMgdmFyJV9zdHJfbGVuZ3Ro LCBidXQgbm90IGluIEdGQ19ERUNMX1NUUklOR19MRU4KKwkgICAgIG5vciBpbiBUWVBFX1NJ WkVfVU5JVCBhcyBleHByZXNzaW9uLiAqLworCSAgZWxlbV9sZW4gPSBUWVBFX1NJWkVfVU5J VCAoVFJFRV9UWVBFICh0eXBlKSk7CisJICBzaXplID0gZm9sZF9jb252ZXJ0IChzaXplX3R5 cGVfbm9kZSwgR0ZDX1RZUEVfQVJSQVlfU0laRSAodHlwZSkpOworCSAgZGVjbCA9IGdmY19v bXBfZWxtZW50YWxfbG9vcCAobG9jLCBkZWNsLCBzaXplLCBlbGVtX2xlbiwgc2VxLCAmc2Vx Mik7CisJICBkZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChsb2MsIGRlY2wp OworCX0KKyAgICAgIGVsc2UgaWYgKFBPSU5URVJfVFlQRV9QIChkZWNsKSkKKwlkZWNsID0g YnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKGRlY2wpOworICAgICAgZ2ZjX29tcF9kZWVwX21h cHBpbmdfY29tcHMgKGlzX2NudCwgbG9jLCBkZWNsLCB0b2tlbiwgdGtpbmQsCisJCQkJICBk YXRhX2FycmF5LCBzaXplc19hcnJheSwga2luZHNfYXJyYXksCisJCQkJICBvZmZzZXRfZGF0 YSwgb2Zmc2V0LCBudW0sIHNlcSwgY3R4KTsKKyAgICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAo c2VxLCBzZXEyKTsKKyAgICB9CisgIGlmIChlbmRfbGFiZWwpCisgICAgZ2ltcGxlX3NlcV9h ZGRfc3RtdCAoc2VxLCBnaW1wbGVfYnVpbGRfbGFiZWwgKGVuZF9sYWJlbCkpOworfQorCisK Ky8qIFdoaWNoIG1hcCB0eXBlcyB0byBjaGVjay9oYW5kbGUgZm9yIGRlZXAgbWFwcGluZy4g ICovCitzdGF0aWMgYm9vbAorZ2ZjX29tcF9kZWVwX21hcF9raW5kX3AgKHRyZWUgY2xhdXNl KQoreworICBzd2l0Y2ggKE9NUF9DTEFVU0VfQ09ERSAoY2xhdXNlKSkKKyAgICB7CisgICAg Y2FzZSBPTVBfQ0xBVVNFX01BUDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT01QX0NMQVVT RV9GSVJTVFBSSVZBVEU6CisgICAgY2FzZSBPTVBfQ0xBVVNFX1RPOgorICAgIGNhc2UgT01Q X0NMQVVTRV9GUk9NOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg IGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgc3dpdGNoIChPTVBfQ0xBVVNFX01B UF9LSU5EIChjbGF1c2UpKQorICAgIHsKKyAgICBjYXNlIEdPTVBfTUFQX1RPOgorICAgIGNh c2UgR09NUF9NQVBfRlJPTToKKyAgICBjYXNlIEdPTVBfTUFQX1RPRlJPTToKKyAgICBjYXNl IEdPTVBfTUFQX0FMV0FZU19UTzoKKyAgICBjYXNlIEdPTVBfTUFQX0FMV0FZU19GUk9NOgor ICAgIGNhc2UgR09NUF9NQVBfQUxXQVlTX1RPRlJPTToKKyAgICBjYXNlIEdPTVBfTUFQX0ZJ UlNUUFJJVkFURToKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgR09NUF9NQVBfQUxM T0M6CisgICAgY2FzZSBHT01QX01BUF9QT0lOVEVSOgorICAgIGNhc2UgR09NUF9NQVBfVE9f UFNFVDoKKyAgICBjYXNlIEdPTVBfTUFQX0ZPUkNFX1BSRVNFTlQ6CisgICAgY2FzZSBHT01Q X01BUF9ERUxFVEU6CisgICAgY2FzZSBHT01QX01BUF9GT1JDRV9ERVZJQ0VQVFI6CisgICAg Y2FzZSBHT01QX01BUF9ERVZJQ0VfUkVTSURFTlQ6CisgICAgY2FzZSBHT01QX01BUF9MSU5L OgorICAgIGNhc2UgR09NUF9NQVBfSUZfUFJFU0VOVDoKKyAgICBjYXNlIEdPTVBfTUFQX0ZJ UlNUUFJJVkFURV9JTlQ6CisgICAgY2FzZSBHT01QX01BUF9VU0VfREVWSUNFX1BUUjoKKyAg ICBjYXNlIEdPTVBfTUFQX1pFUk9fTEVOX0FSUkFZX1NFQ1RJT046CisgICAgY2FzZSBHT01Q X01BUF9GT1JDRV9BTExPQzoKKyAgICBjYXNlIEdPTVBfTUFQX0ZPUkNFX1RPOgorICAgIGNh c2UgR09NUF9NQVBfRk9SQ0VfRlJPTToKKyAgICBjYXNlIEdPTVBfTUFQX0ZPUkNFX1RPRlJP TToKKyAgICBjYXNlIEdPTVBfTUFQX1VTRV9ERVZJQ0VfUFRSX0lGX1BSRVNFTlQ6CisgICAg Y2FzZSBHT01QX01BUF9TVFJVQ1Q6CisgICAgY2FzZSBHT01QX01BUF9BTFdBWVNfUE9JTlRF UjoKKyAgICBjYXNlIEdPTVBfTUFQX1BPSU5URVJfVE9fWkVST19MRU5HVEhfQVJSQVlfU0VD VElPTjoKKyAgICBjYXNlIEdPTVBfTUFQX0RFTEVURV9aRVJPX0xFTl9BUlJBWV9TRUNUSU9O OgorICAgIGNhc2UgR09NUF9NQVBfUkVMRUFTRToKKyAgICBjYXNlIEdPTVBfTUFQX0FUVEFD SDoKKyAgICBjYXNlIEdPTVBfTUFQX0RFVEFDSDoKKyAgICBjYXNlIEdPTVBfTUFQX0ZPUkNF X0RFVEFDSDoKKyAgICBjYXNlIEdPTVBfTUFQX0FUVEFDSF9aRVJPX0xFTkdUSF9BUlJBWV9T RUNUSU9OOgorICAgIGNhc2UgR09NUF9NQVBfRklSU1RQUklWQVRFX1BPSU5URVI6CisgICAg Y2FzZSBHT01QX01BUF9GSVJTVFBSSVZBVEVfUkVGRVJFTkNFOgorICAgIGNhc2UgR09NUF9N QVBfQVRUQUNIX0RFVEFDSDoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRo cmVlIE9wZW5NUCBkZWVwLW1hcHBpbmcgbGFuZyBob29rczogZ2ZjX29tcF9kZWVwX21hcHBp bmd7X3AsX2NudCx9LiAgKi8KKworLyogQ29tbW9uIGNoZWNrIGZvciBnZmNfb21wX2RlZXBf bWFwcGluZ19wIGFuZCBnZmNfb21wX2RlZXBfbWFwcGluZ19kby4gKi8KKworc3RhdGljIHRy ZWUKK2dmY19vbXBfZGVlcF9tYXBwaW5nX2ludF9wIChjb25zdCBnaW1wbGUgKmN0eCwgdHJl ZSBjbGF1c2UpCit7CisgIGlmIChpc19naW1wbGVfb21wX29hY2MgKGN0eCkgfHwgIWdmY19v bXBfZGVlcF9tYXBfa2luZF9wIChjbGF1c2UpKQorICAgIHJldHVybiBOVUxMX1RSRUU7Cisg IHRyZWUgZGVjbCA9IE9NUF9DTEFVU0VfREVDTCAoY2xhdXNlKTsKKyAgaWYgKE9NUF9DTEFV U0VfU0laRSAoY2xhdXNlKSAhPSBOVUxMX1RSRUUKKyAgICAgICYmIERFQ0xfUCAoT01QX0NM QVVTRV9TSVpFIChjbGF1c2UpKQorICAgICAgJiYgREVDTF9MQU5HX1NQRUNJRklDIChPTVBf Q0xBVVNFX1NJWkUgKGNsYXVzZSkpCisgICAgICAmJiBHRkNfREVDTF9TQVZFRF9ERVNDUklQ VE9SIChPTVBfQ0xBVVNFX1NJWkUgKGNsYXVzZSkpKQorICAgIC8qIFNhdmVkIGRlY2wuICov CisgICAgZGVjbCA9IEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKE9NUF9DTEFVU0VfU0la RSAoY2xhdXNlKSk7CisgIGVsc2UgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gTUVNX1JFRiB8 fCBUUkVFX0NPREUgKGRlY2wpID09IElORElSRUNUX1JFRikKKyAgICAvKiBUaGUgZm9sbG93 aW5nIGNhbiBoYXBwZW4gZm9yLCBlLmcuLCBjbGFzcyh0KSA6OiB2YXIoLi4pICAqLworICAg IGRlY2wgPSBUUkVFX09QRVJBTkQgKGRlY2wsIDApOworICBpZiAoVFJFRV9DT0RFIChkZWNs KSA9PSBJTkRJUkVDVF9SRUYpCisgICAgLyogVGhlIGZvbGxvd2luZyBjYW4gaGFwcGVuIGZv ciwgZS5nLiwgY2xhc3ModCkgOjogdmFyKC4uKSAgKi8KKyAgICBkZWNsID0gVFJFRV9PUEVS QU5EIChkZWNsLCAwKTsKKyAgaWYgKERFQ0xfUCAoZGVjbCkKKyAgICAgICYmIERFQ0xfTEFO R19TUEVDSUZJQyAoZGVjbCkKKyAgICAgICYmIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1Ig KGRlY2wpKQorICAgIGRlY2wgPSBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChkZWNsKTsK KyAgLyogSGFuZGxlIG1hcCh0bzogdmFyLmRlc2MpIG1hcChbdG8vZnJvbS90b2Zyb206XSB2 YXIuZGVzYy5kYXRhKQorICAgICB0byBnZXQgcHJvcGVyIG1hcCBraW5kIGJ5IHNraXBwaW5n IHRvIHRoZSBuZXh0IGl0ZW0uICovCisgIHRyZWUgdG1wID0gT01QX0NMQVVTRV9DSEFJTiAo Y2xhdXNlKTsKKyAgaWYgKHRtcCAhPSBOVUxMX1RSRUUKKyAgICAgICYmIE9NUF9DTEFVU0Vf Q09ERSAodG1wKSA9PSBPTVBfQ0xBVVNFX0NPREUgKGNsYXVzZSkKKyAgICAgICYmIE9NUF9D TEFVU0VfU0laRSAodG1wKSAhPSBOVUxMX1RSRUUKKyAgICAgICYmIERFQ0xfUCAoT01QX0NM QVVTRV9TSVpFICh0bXApKQorICAgICAgJiYgREVDTF9MQU5HX1NQRUNJRklDIChPTVBfQ0xB VVNFX1NJWkUgKHRtcCkpCisgICAgICAmJiBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChP TVBfQ0xBVVNFX1NJWkUgKHRtcCkpID09IGRlY2wpCisgICAgcmV0dXJuIE5VTExfVFJFRTsK KyAgaWYgKERFQ0xfUCAoZGVjbCkKKyAgICAgICYmIERFQ0xfTEFOR19TUEVDSUZJQyAoZGVj bCkKKyAgICAgICYmIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKGRlY2wpKQorICAgIGRl Y2wgPSBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChkZWNsKTsKKyAgdHJlZSB0eXBlID0g VFJFRV9UWVBFIChkZWNsKTsKKyAgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKSkKKyAgICB0 eXBlID0gVFJFRV9UWVBFICh0eXBlKTsKKyAgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKSkK KyAgICB0eXBlID0gVFJFRV9UWVBFICh0eXBlKTsKKyAgdG1wID0gZGVjbDsKKyAgd2hpbGUg KFRSRUVfQ09ERSAodG1wKSA9PSBDT01QT05FTlRfUkVGIHx8IFRSRUVfQ09ERSAodG1wKSA9 PSBBUlJBWV9SRUYpCisgICAgdG1wID0gVFJFRV9PUEVSQU5EICh0bXAsIFRSRUVfQ09ERSAo dG1wKSA9PSBDT01QT05FTlRfUkVGID8gMSA6IDApOworICBpZiAoIWdmY19pc19wb2x5bW9y cGhpY19ub25wdHIgKHR5cGUpCisgICAgICAmJiAhZ2ZjX2hhc19hbGxvY19jb21wcyAodHlw ZSwgdG1wLCB0cnVlKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICByZXR1cm4gZGVjbDsK K30KKworLyogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgZGVlcCBtYXBwaW5nLCBldmVuIGlm IHRoZSBudW1iZXIgb2YgbWFwcGluZyBpcyBrbm93bgorICAgYXQgY29tcGlsZSB0aW1lLiAq LworYm9vbAorZ2ZjX29tcF9kZWVwX21hcHBpbmdfcCAoY29uc3QgZ2ltcGxlICpjdHgsIHRy ZWUgY2xhdXNlKQoreworICB0cmVlIGRlY2wgPSBnZmNfb21wX2RlZXBfbWFwcGluZ19pbnRf cCAoY3R4LCBjbGF1c2UpOworICBpZiAoZGVjbCA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJu IGZhbHNlOworICByZXR1cm4gdHJ1ZTsKK30KKworLyogSGFuZGxlIGdmY19vbXBfZGVlcF9t YXBwaW5neyxfY250fSAqLworc3RhdGljIHRyZWUKK2dmY19vbXBfZGVlcF9tYXBwaW5nX2Rv IChib29sIGlzX2NudCwgY29uc3QgZ2ltcGxlICpjdHgsIHRyZWUgY2xhdXNlLAorCQkJIHVu c2lnbmVkIEhPU1RfV0lERV9JTlQgdGtpbmQsIHRyZWUgZGF0YSwgdHJlZSBzaXplcywKKwkJ CSB0cmVlIGtpbmRzLCB0cmVlIG9mZnNldF9kYXRhLCB0cmVlIG9mZnNldCwKKwkJCSBnaW1w bGVfc2VxICpzZXEpCit7CisgIHRyZWUgbnVtID0gTlVMTF9UUkVFOworICBsb2NhdGlvbl90 IGxvYyA9IE9NUF9DTEFVU0VfTE9DQVRJT04gKGNsYXVzZSk7CisgIHRyZWUgZGVjbCA9IGdm Y19vbXBfZGVlcF9tYXBwaW5nX2ludF9wIChjdHgsIGNsYXVzZSk7CisgIGlmIChkZWNsID09 IE5VTExfVFJFRSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICB0cmVlIHR5cGUgPSBUUkVF X1RZUEUgKGRlY2wpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQorICAgIHR5cGUg PSBUUkVFX1RZUEUgKHR5cGUpOworICBpZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQorICAg IHR5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICBib29sIHBvbHkgPSBnZmNfaXNfcG9seW1v cnBoaWNfbm9ucHRyICh0eXBlKTsKKworICBpZiAoaXNfY250KQorICAgIHsKKyAgICAgIG51 bSA9IGJ1aWxkX2RlY2wgKGlucHV0X2xvY2F0aW9uLCBWQVJfREVDTCwKKwkJCWNyZWF0ZV90 bXBfdmFyX25hbWUgKCJuX2RlZXBtYXAiKSwgc2l6ZV90eXBlX25vZGUpOworICAgICAgdHJl ZSB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGxvYywgTU9ESUZZX0VYUFIsIHNpemVfdHlwZV9u b2RlLCBudW0sCisJCQkJICBidWlsZF9pbnRfY3N0IChzaXplX3R5cGVfbm9kZSwgMCkpOwor ICAgICAgZ2ltcGxlX2FkZF90bXBfdmFyIChudW0pOworICAgICAgZ2ltcGxpZnlfYW5kX2Fk ZCAodG1wLCBzZXEpOworICAgIH0KKyAgZWxzZQorICAgIGdjY19hc3NlcnQgKHNob3J0X3Vu c2lnbmVkX3R5cGVfbm9kZSA9PSBUUkVFX1RZUEUgKFRSRUVfVFlQRSAoa2luZHMpKSk7CisK KyAgYm9vbCBkb19jb3B5ID0gcG9seTsKKyAgYm9vbCBkb19hbGxvY19jaGVjayA9IGZhbHNl OworICB0cmVlIHRva2VuID0gTlVMTF9UUkVFOworICB0cmVlIHRtcCA9IGRlY2w7CisgIGlm IChwb2x5KQorICAgIHsKKyAgICAgIHRtcCA9IFRZUEVfRklFTERTICh0eXBlKTsKKyAgICAg IHR5cGUgPSBUUkVFX1RZUEUgKHRtcCk7CisgICAgfQorICBlbHNlCisgICAgd2hpbGUgKFRS RUVfQ09ERSAodG1wKSA9PSBDT01QT05FTlRfUkVGIHx8IFRSRUVfQ09ERSAodG1wKSA9PSBB UlJBWV9SRUYpCisgICAgICB0bXAgPSBUUkVFX09QRVJBTkQgKHRtcCwgVFJFRV9DT0RFICh0 bXApID09IENPTVBPTkVOVF9SRUYgPyAxIDogMCk7CisgIC8qIElmIHRoZSBjbGF1c2UgYXJn dW1lbnQgaXMgbm9uYWxsb2NhdGFibGUsIHNraXAgaXMtYWxsb2NhdGUgY2hlY2suICovCisg IGlmIChHRkNfREVDTF9HRVRfU0NBTEFSX0FMTE9DQVRBQkxFICh0bXApCisgICAgICB8fCBH RkNfREVDTF9HRVRfU0NBTEFSX1BPSU5URVIgKHRtcCkKKyAgICAgIHx8IChHRkNfREVTQ1JJ UFRPUl9UWVBFX1AgKHR5cGUpCisJICAmJiAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUp ID09IEdGQ19BUlJBWV9BTExPQ0FUQUJMRQorCSAgICAgIHx8IEdGQ19UWVBFX0FSUkFZX0FL SU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRFUgorCSAgICAgIHx8IEdGQ19UWVBFX0FS UkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRFUl9DT05UKSkpCisgICAgZG9f YWxsb2NfY2hlY2sgPSB0cnVlOworCisgIC8qIFRPRE86IEZvciBtYXAoYSg6KSksIHdlIGtu b3cgaXQgaXMgcHJlc2VudCAmIGFsbG9jYXRlZC4gICovCisKKyAgdHJlZSBwcmVzZW50ID0g KERFQ0xfUCAoZGVjbCkgPyBnZmNfb21wX2NoZWNrX29wdGlvbmFsX2FyZ3VtZW50IChkZWNs LCB0cnVlKQorCQkJCTogTlVMTF9UUkVFKTsKKyAgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGRlY2wpKQorICAgICAgJiYgUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoVFJF RV9UWVBFIChkZWNsKSkpKQorICAgIGRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAo ZGVjbCk7CisgIGlmIChwcmVzZW50KQorICAgIHsKKyAgICAgIHRyZWUgdGhlbl9sYWJlbCA9 IGNyZWF0ZV9hcnRpZmljaWFsX2xhYmVsIChsb2MpOworICAgICAgdHJlZSBlbmRfbGFiZWwg PSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jKTsKKyAgICAgIGdpbXBsZV9zZXEgc2Vx MiA9IE5VTEw7CisgICAgICB0bXAgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAocHJlc2VudCwg JnNlcTIsIHRydWUsIE5VTExfVFJFRSk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zZXEgKHNl cSwgc2VxMik7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10IChzZXEsCisJCQkgICBnaW1w bGVfYnVpbGRfY29uZF9mcm9tX3RyZWUgKHByZXNlbnQsCisJCQkJCQkJdGhlbl9sYWJlbCwg ZW5kX2xhYmVsKSk7CisgICAgICBnaW1wbGVfc2VxX2FkZF9zdG10IChzZXEsIGdpbXBsZV9i dWlsZF9sYWJlbCAodGhlbl9sYWJlbCkpOworICAgICAgZ2ZjX29tcF9kZWVwX21hcHBpbmdf aXRlbSAoaXNfY250LCBkb19jb3B5LCBkb19hbGxvY19jaGVjaywgbG9jLCBkZWNsLAorCQkJ CSAmdG9rZW4sIHRraW5kLCBkYXRhLCBzaXplcywga2luZHMsCisJCQkJIG9mZnNldF9kYXRh LCBvZmZzZXQsIG51bSwgc2VxLCBjdHgpOworICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAo c2VxLCBnaW1wbGVfYnVpbGRfbGFiZWwgKGVuZF9sYWJlbCkpOworICAgIH0KKyAgZWxzZQor ICAgIGdmY19vbXBfZGVlcF9tYXBwaW5nX2l0ZW0gKGlzX2NudCwgZG9fY29weSwgZG9fYWxs b2NfY2hlY2ssIGxvYywgZGVjbCwKKwkJCSAgICAgICAmdG9rZW4sIHRraW5kLCBkYXRhLCBz aXplcywga2luZHMsIG9mZnNldF9kYXRhLAorCQkJICAgICAgIG9mZnNldCwgbnVtLCBzZXEs IGN0eCk7CisgIC8qIERvdWJsZTogTWFwICsgcG9pbnRlciBhc3NpZ24uICAqLworICBpZiAo aXNfY250KQorICAgIGdpbXBsaWZ5X2Fzc2lnbiAobnVtLAorCQkgICAgIGZvbGRfYnVpbGQy X2xvYyAoaW5wdXRfbG9jYXRpb24sIE1VTFRfRVhQUiwKKwkJCQkgICAgICBzaXplX3R5cGVf bm9kZSwgbnVtLAorCQkJCSAgICAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCAy KSksIHNlcSk7CisgIHJldHVybiBudW07Cit9CisKKy8qIFJldHVybiB0cmVlIHdpdGggYSB2 YXJpYWJsZSB3aGljaCBjb250YWlucyB0aGUgY291bnQgb2YgZGVlcC1tYXBweWluZ3MKKyAg ICh2YWx1ZSBkZXBlbmRzLCBlLmcuLCBvbiBhbGxvY2F0aW9uIHN0YXR1cykgICovCit0cmVl CitnZmNfb21wX2RlZXBfbWFwcGluZ19jbnQgKGNvbnN0IGdpbXBsZSAqY3R4LCB0cmVlIGNs YXVzZSwgZ2ltcGxlX3NlcSAqc2VxKQoreworICByZXR1cm4gZ2ZjX29tcF9kZWVwX21hcHBp bmdfZG8gKHRydWUsIGN0eCwgY2xhdXNlLCAwLCBOVUxMX1RSRUUsIE5VTExfVFJFRSwKKwkJ CQkgIE5VTExfVFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsIHNlcSk7Cit9CisKKy8qIERv ZXMgdGhlIGFjdHVhbCBkZWVwIG1hcHBpbmcuICovCit2b2lkCitnZmNfb21wX2RlZXBfbWFw cGluZyAoY29uc3QgZ2ltcGxlICpjdHgsIHRyZWUgY2xhdXNlLAorCQkgICAgICB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UIHRraW5kLCB0cmVlIGRhdGEsCisJCSAgICAgIHRyZWUgc2l6ZXMs IHRyZWUga2luZHMsIHRyZWUgb2Zmc2V0X2RhdGEsIHRyZWUgb2Zmc2V0LAorCQkgICAgICBn aW1wbGVfc2VxICpzZXEpCit7CisgICh2b2lkKSBnZmNfb21wX2RlZXBfbWFwcGluZ19kbyAo ZmFsc2UsIGN0eCwgY2xhdXNlLCB0a2luZCwgZGF0YSwgc2l6ZXMsIGtpbmRzLAorCQkJCSAg b2Zmc2V0X2RhdGEsIG9mZnNldCwgc2VxKTsKK30KIAogLyogUmV0dXJuIHRydWUgaWYgREVD TCBpcyBhIHNjYWxhciB2YXJpYWJsZSAoZm9yIHRoZSBwdXJwb3NlIG9mCiAgICBpbXBsaWNp dCBmaXJzdHByaXZhdGl6YXRpb24vbWFwcGluZykuIE9ubHkgaWYgJ3B0cl9hbGxvY19vay4n CkBAIC0yMzg5LDYgKzM3MjcsMTggQEAgZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChz dG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfbmFtZWxpc3QgKm4sCiAgICAgICBlbGVtc3og PSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRleF90eXBlLCBlbGVtc3opOwogICAgICAg T01QX0NMQVVTRV9TSVpFIChub2RlKSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIGdmY19h cnJheV9pbmRleF90eXBlLAogCQkJCQkgICAgT01QX0NMQVVTRV9TSVpFIChub2RlKSwgZWxl bXN6KTsKKyAgICAgIGlmIChuLT5leHByLT50cy50eXBlID09IEJUX0RFUklWRUQKKwkgICYm IG4tPmV4cHItPnRzLnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wKQorCXsKKwkgIC8qIFNh dmUgYXJyYXkgZGVzY3JpcHRvciBmb3IgdXNlIGluIGdmY19vbXBfZGVlcF9tYXBwaW5neyxf cCxfY250fTsKKwkgICAgIGZvcmNlIGV2YWx1YXRlIHRvIGVuc3VyZSB0aGF0IGl0IGlzIG5v dCBnaW1wbGlmaWVkICsgaXMgYSBkZWNsLiAgKi8KKwkgIHRyZWUgdG1wID0gT01QX0NMQVVT RV9TSVpFIChub2RlKTsKKwkgIHRyZWUgdmFyID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVfVFlQ RSAodG1wKSwgTlVMTCk7CisJICBnZmNfYWRkX21vZGlmeV9sb2MgKGlucHV0X2xvY2F0aW9u LCBibG9jaywgdmFyLCB0bXApOworCSAgT01QX0NMQVVTRV9TSVpFIChub2RlKSA9IHZhcjsK KwkgIGdmY19hbGxvY2F0ZV9sYW5nX2RlY2wgKHZhcik7CisJICBHRkNfREVDTF9TQVZFRF9E RVNDUklQVE9SICh2YXIpID0gc2UuZXhwcjsKKwl9CiAgICAgfQogICBnY2NfYXNzZXJ0IChz ZS5wb3N0LmhlYWQgPT0gTlVMTF9UUkVFKTsKICAgZ2NjX2Fzc2VydCAoUE9JTlRFUl9UWVBF X1AgKFRSRUVfVFlQRSAocHRyKSkpOwpAQCAtMzIwOCw3ICs0NTU4LDggQEAgZ2ZjX3RyYW5z X29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xh dXNlcywKIAogCQkgICAgICAvKiBXZSBoYXZlIHRvIGNoZWNrIGZvciBuLT5zeW0tPmF0dHIu ZGltZW5zaW9uIGJlY2F1c2UKIAkJCSBvZiBzY2FsYXIgY29hcnJheXMuICAqLwotCQkgICAg ICBpZiAobi0+c3ltLT5hdHRyLnBvaW50ZXIgJiYgbi0+c3ltLT5hdHRyLmRpbWVuc2lvbikK KwkJICAgICAgaWYgKChuLT5zeW0tPmF0dHIucG9pbnRlciB8fCBuLT5zeW0tPmF0dHIuYWxs b2NhdGFibGUpCisJCQkgICYmIG4tPnN5bS0+YXR0ci5kaW1lbnNpb24pCiAJCQl7CiAJCQkg IHN0bXRibG9ja190IGNvbmRfYmxvY2s7CiAJCQkgIHRyZWUgc2l6ZQpAQCAtMzI4NCwxMyAr NDYzNSw0MCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywg Z2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgewogCQkgICAgICAvKiBBIHNpbmds ZSBpbmRpcmVjdHJlZiBpcyBoYW5kbGVkIGJ5IHRoZSBtaWRkbGUgZW5kLiAgKi8KIAkJICAg ICAgZ2NjX2Fzc2VydCAoIVBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKSk7Ci0J CSAgICAgIGRlY2wgPSBUUkVFX09QRVJBTkQgKGRlY2wsIDApOwotCQkgICAgICBkZWNsID0g Z2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4cHIgKGJsb2NrLCBwcmVzZW50LCBkZWNsLAorCQkg ICAgICB0cmVlIHRtcCA9IFRSRUVfT1BFUkFORCAoZGVjbCwgMCk7CisJCSAgICAgIHRtcCA9 IGdmY19idWlsZF9jb25kX2Fzc2lnbl9leHByIChibG9jaywgcHJlc2VudCwgdG1wLAogCQkJ CQkJCSBudWxsX3BvaW50ZXJfbm9kZSk7Ci0JCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobm9k ZSkgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAoZGVjbCk7CisJCSAgICAgIE9NUF9DTEFV U0VfREVDTCAobm9kZSkgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZiAodG1wKTsKIAkJICAg IH0KIAkJICBlbHNlCiAJCSAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUpID0gZGVjbDsKKwkJ ICBpZiAoKFRSRUVfQ09ERSAoZGVjbCkgIT0gUEFSTV9ERUNMCisJCSAgICAgICB8fCBERUNM X0FSVElGSUNJQUwgKE9NUF9DTEFVU0VfREVDTCAobm9kZSkpKQorCQkgICAgICAmJiBuLT5z eW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCQkgICAgICAmJiBuLT5zeW0tPnRzLnUuZGVy aXZlZC0+YXR0ci5hbGxvY19jb21wKQorCQkgICAgeworCQkgICAgICAvKiBTYXZlIGFycmF5 IGRlc2NyaXB0b3IgZm9yIHVzZSBpbgorCQkJIGdmY19vbXBfZGVlcF9tYXBwaW5neyxfcCxf Y250fTsgZm9yY2UgZXZhbHVhdGUKKwkJCSB0byBlbnN1cmUgdGhhdCBpdCBpcyBub3QgZ2lt cGxpZmllZCArIGlzIGEgZGVjbC4gICovCisJCSAgICAgIHRyZWUgdG1wID0gT01QX0NMQVVT RV9TSVpFIChub2RlKTsKKwkJICAgICAgaWYgKHRtcCA9PSBOVUxMX1RSRUUpCisJCQl0bXAg PSBERUNMX1AgKGRlY2wpID8gREVDTF9TSVpFX1VOSVQgKGRlY2wpCisJCQkJCSAgICA6IFRZ UEVfU0laRV9VTklUIChUUkVFX1RZUEUgKGRlY2wpKTsKKwkJICAgICAgdHJlZSB2YXIgPSBn ZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFICh0bXApLCBOVUxMKTsKKwkJICAgICAgZ2ZjX2Fk ZF9tb2RpZnlfbG9jIChpbnB1dF9sb2NhdGlvbiwgYmxvY2ssIHZhciwgdG1wKTsKKwkJICAg ICAgT01QX0NMQVVTRV9TSVpFIChub2RlKSA9IHZhcjsKKwkJICAgICAgZ2ZjX2FsbG9jYXRl X2xhbmdfZGVjbCAodmFyKTsKKwkJICAgICAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gSU5E SVJFQ1RfUkVGKQorCQkJZGVjbCA9IFRSRUVfT1BFUkFORCAoZGVjbCwgMCk7CisJCSAgICAg IGlmIChUUkVFX0NPREUgKGRlY2wpID09IElORElSRUNUX1JFRikKKwkJCWRlY2wgPSBUUkVF X09QRVJBTkQgKGRlY2wsIDApOworCQkgICAgICBpZiAoREVDTF9MQU5HX1NQRUNJRklDIChk ZWNsKQorCQkJICAmJiBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChkZWNsKSkKKwkJCUdG Q19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKHZhcikKKwkJCSAgPSBHRkNfREVDTF9TQVZFRF9E RVNDUklQVE9SIChkZWNsKTsKKwkJICAgICAgZWxzZQorCQkJR0ZDX0RFQ0xfU0FWRURfREVT Q1JJUFRPUiAodmFyKSA9IGRlY2w7CisJCSAgICB9CiAJCX0KIAkgICAgICBlbHNlIGlmIChu LT5leHByCiAJCSAgICAgICAmJiBuLT5leHByLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJM RQpAQCAtMzM1Niw2ICs0NzM0LDMxIEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJs b2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCQkgIE9NUF9DTEFV U0VfU0laRSAobm9kZTMpCiAJCQkgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2NoYXJsZW5f dHlwZV9ub2RlKTsKIAkJCX0KKwkJICAgICAgaWYgKCFvcGVuYWNjCisJCQkgICYmIG4tPmV4 cHItPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCQkJICAmJiBuLT5leHByLT50cy51LmRlcml2 ZWQtPmF0dHIuYWxsb2NfY29tcCkKKwkJCXsKKwkJCSAgLyogU2F2ZSBhcnJheSBkZXNjcmlw dG9yIGZvciB1c2UgaW4KKwkJCSAgICAgZ2ZjX29tcF9kZWVwX21hcHBpbmd7LF9wLF9jbnR9 OyBmb3JjZSBldmFsdWF0ZQorCQkJICAgICB0byBlbnN1cmUgdGhhdCBpdCBpcyBub3QgZ2lt cGxpZmllZCArIGlzIGEgZGVjbC4gICovCisJCQkgIHRyZWUgdG1wID0gT01QX0NMQVVTRV9T SVpFIChub2RlKTsKKwkJCSAgaWYgKHRtcCA9PSBOVUxMX1RSRUUpCisJCQkgICAgdG1wID0g KERFQ0xfUCAoc2UuZXhwcikKKwkJCQkgICA/IERFQ0xfU0laRV9VTklUIChzZS5leHByKQor CQkJCSAgIDogVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoc2UuZXhwcikpKTsKKwkJCSAg dHJlZSB2YXIgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFICh0bXApLCBOVUxMKTsKKwkJ CSAgZ2ZjX2FkZF9tb2RpZnlfbG9jIChpbnB1dF9sb2NhdGlvbiwgYmxvY2ssIHZhciwgdG1w KTsKKwkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlKSA9IHZhcjsKKwkJCSAgZ2ZjX2FsbG9j YXRlX2xhbmdfZGVjbCAodmFyKTsKKwkJCSAgaWYgKFRSRUVfQ09ERSAoc2UuZXhwcikgPT0g SU5ESVJFQ1RfUkVGKQorCQkJICAgIHNlLmV4cHIgPSBUUkVFX09QRVJBTkQgKHNlLmV4cHIs IDApOworCQkJICBpZiAoREVDTF9MQU5HX1NQRUNJRklDIChzZS5leHByKQorCQkJICAgICAg JiYgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAoc2UuZXhwcikpCisJCQkgICAgR0ZDX0RF Q0xfU0FWRURfREVTQ1JJUFRPUiAodmFyKQorCQkJICAgICAgPSBHRkNfREVDTF9TQVZFRF9E RVNDUklQVE9SIChzZS5leHByKTsKKwkJCSAgZWxzZQorCQkJICAgIEdGQ19ERUNMX1NBVkVE X0RFU0NSSVBUT1IgKHZhcikgPSBzZS5leHByOworCQkJfQogCQkgICAgfQogCQl9CiAJICAg ICAgZWxzZSBpZiAobi0+ZXhwcgpAQCAtMzM5NCw3ICs0Nzk3LDcgQEAgZ2ZjX3RyYW5zX29t cF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNl cywKIAkJICAgICAgJiYgKGxhc3RyZWYtPnUuYy5jb21wb25lbnQtPnRzLnR5cGUgPT0gQlRf REVSSVZFRAogCQkJICB8fCBsYXN0cmVmLT51LmMuY29tcG9uZW50LT50cy50eXBlID09IEJU X0NMQVNTKSkKIAkJICAgIHsKLQkJICAgICAgaWYgKHBvaW50ZXIgfHwgKG9wZW5hY2MgJiYg YWxsb2NhdGFibGUpKQorCQkgICAgICBpZiAocG9pbnRlciB8fCBhbGxvY2F0YWJsZSkKIAkJ CXsKIAkJCSAgdHJlZSBkYXRhLCBzaXplOwogCkBAIC0zNDI4LDYgKzQ4MzEsMjIgQEAgZ2Zj X3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNl cyAqY2xhdXNlcywKIAkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlKQogCQkJICAgID0gVFlQ RV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoaW5uZXIpKTsKIAkJCX0KKwkJICAgICAgaWYgKCFv cGVuYWNjCisJCQkgICYmIG4tPmV4cHItPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCQkJICAm JiBuLT5leHByLT50cy51LmRlcml2ZWQtPmF0dHIuYWxsb2NfY29tcCkKKwkJCXsKKwkJCSAg LyogU2F2ZSBhcnJheSBkZXNjcmlwdG9yIGZvciB1c2UgaW4KKwkJCSAgICAgZ2ZjX29tcF9k ZWVwX21hcHBpbmd7LF9wLF9jbnR9OyBmb3JjZSBldmFsdWF0ZQorCQkJICAgICB0byBlbnN1 cmUgdGhhdCBpdCBpcyBub3QgZ2ltcGxpZmllZCArIGlzIGEgZGVjbC4gICovCisJCQkgIHRy ZWUgdG1wID0gT01QX0NMQVVTRV9TSVpFIChub2RlKTsKKwkJCSAgdHJlZSB2YXIgPSBnZmNf Y3JlYXRlX3ZhciAoVFJFRV9UWVBFICh0bXApLCBOVUxMKTsKKwkJCSAgZ2ZjX2FkZF9tb2Rp ZnlfbG9jIChpbnB1dF9sb2NhdGlvbiwgYmxvY2ssIHZhciwgdG1wKTsKKwkJCSAgT01QX0NM QVVTRV9TSVpFIChub2RlKSA9IHZhcjsKKwkJCSAgZ2ZjX2FsbG9jYXRlX2xhbmdfZGVjbCAo dmFyKTsKKwkJCSAgaWYgKFRSRUVfQ09ERSAoaW5uZXIpID09IElORElSRUNUX1JFRikKKwkJ CSAgICBpbm5lciA9IFRSRUVfT1BFUkFORCAoaW5uZXIsIDApOworCQkJICBHRkNfREVDTF9T QVZFRF9ERVNDUklQVE9SICh2YXIpID0gaW5uZXI7CisJCQl9CiAJCSAgICB9CiAJCSAgZWxz ZSBpZiAobGFzdHJlZi0+dHlwZSA9PSBSRUZfQVJSQVkKIAkJCSAgICYmIGxhc3RyZWYtPnUu YXIudHlwZSA9PSBBUl9GVUxMKQpAQCAtMzQ5OSw2ICs0OTE4LDIyIEBAIGdmY190cmFuc19v bXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVz ZXMsCiAJCQkgICAgewogCQkJICAgICAgbm9kZTIgPSBub2RlOwogCQkJICAgICAgbm9kZSA9 IGRlc2Nfbm9kZTsgIC8qIFB1dCBmaXJzdC4gICovCisJCQkgICAgICBpZiAobi0+ZXhwci0+ dHMudHlwZSA9PSBCVF9ERVJJVkVECisJCQkJICAmJiBuLT5leHByLT50cy51LmRlcml2ZWQt PmF0dHIuYWxsb2NfY29tcCkKKwkJCQl7CisJCQkJICAvKiBTYXZlIGFycmF5IGRlc2NyaXB0 b3IgZm9yIHVzZQorCQkJCSAgICAgaW4gZ2ZjX29tcF9kZWVwX21hcHBpbmd7LF9wLF9jbnR9 OyBmb3JjZQorCQkJCSAgICAgZXZhbHVhdGUgdG8gZW5zdXJlIHRoYXQgaXQgaXMKKwkJCQkg ICAgIG5vdCBnaW1wbGlmaWVkICsgaXMgYSBkZWNsLiAgKi8KKwkJCQkgIHRyZWUgdG1wID0g T01QX0NMQVVTRV9TSVpFIChub2RlMik7CisJCQkJICB0cmVlIHZhciA9IGdmY19jcmVhdGVf dmFyIChUUkVFX1RZUEUgKHRtcCksCisJCQkJCQkJICAgICBOVUxMKTsKKwkJCQkgIGdmY19h ZGRfbW9kaWZ5X2xvYyAoaW5wdXRfbG9jYXRpb24sIGJsb2NrLAorCQkJCQkJICAgICAgdmFy LCB0bXApOworCQkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlMikgPSB2YXI7CisJCQkJICBn ZmNfYWxsb2NhdGVfbGFuZ19kZWNsICh2YXIpOworCQkJCSAgR0ZDX0RFQ0xfU0FWRURfREVT Q1JJUFRPUiAodmFyKSA9IGlubmVyOworCQkJCX0KIAkJCSAgICB9CiAJCQkgIG5vZGUzID0g YnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sCiAJCQkJCQkgICAgT01QX0NMQVVT RV9NQVApOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuY2MgYi9nY2Mv Zm9ydHJhbi90cmFucy10eXBlcy5jYwppbmRleCAzY2RjNTI5ZWIyOC4uNjI5MzViMWM5MTgg MTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLXR5cGVzLmNjCisrKyBiL2djYy9mb3J0 cmFuL3RyYW5zLXR5cGVzLmNjCkBAIC0xNDQ5LDggKzE0NDksMTYgQEAgZ2ZjX2J1aWxkX2Fy cmF5X3R5cGUgKHRyZWUgdHlwZSwgZ2ZjX2FycmF5X3NwZWMgKiBhcywKICAgICBha2luZCA9 IGNvbnRpZ3VvdXMgPyBHRkNfQVJSQVlfQVNTVU1FRF9TSEFQRV9DT05UCiAJCSAgICAgICA6 IEdGQ19BUlJBWV9BU1NVTUVEX1NIQVBFOwogICBlbHNlIGlmIChhcy0+dHlwZSA9PSBBU19B U1NVTUVEX1JBTkspCi0gICAgYWtpbmQgPSBjb250aWd1b3VzID8gR0ZDX0FSUkFZX0FTU1VN RURfUkFOS19DT05UCi0JCSAgICAgICA6IEdGQ19BUlJBWV9BU1NVTUVEX1JBTks7CisgICAg eworICAgICAgaWYgKGFraW5kID09IEdGQ19BUlJBWV9BTExPQ0FUQUJMRSkKKwlha2luZCA9 IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQUxMT0NBVEFCTEU7CisgICAgICBlbHNlIGlmIChh a2luZCA9PSBHRkNfQVJSQVlfUE9JTlRFUiB8fCBha2luZCA9PSBHRkNfQVJSQVlfUE9JTlRF Ul9DT05UKQorCWFraW5kID0gY29udGlndW91cyA/IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktf UE9JTlRFUl9DT05UCisJCQkgICA6IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfUE9JTlRFUjsK KyAgICAgIGVsc2UKKwlha2luZCA9IGNvbnRpZ3VvdXMgPyBHRkNfQVJSQVlfQVNTVU1FRF9S QU5LX0NPTlQKKwkJCSAgIDogR0ZDX0FSUkFZX0FTU1VNRURfUkFOSzsKKyAgICB9CiAgIHJl dHVybiBnZmNfZ2V0X2FycmF5X3R5cGVfYm91bmRzICh0eXBlLCBhcy0+cmFuayA9PSAtMQog CQkJCQkgID8gR0ZDX01BWF9ESU1FTlNJT05TIDogYXMtPnJhbmssCiAJCQkJICAgIGNvcmFu aywgbGJvdW5kLCB1Ym91bmQsIDAsIGFraW5kLApAQCAtMjcxMSw5ICsyNzE5LDEwIEBAIGdm Y19nZXRfZGVyaXZlZF90eXBlIChnZmNfc3ltYm9sICogZGVyaXZlZCwgaW50IGNvZGltZW4p CiAgICAgfQogCiAgIGlmIChkZXJpdmVkLT5jb21wb25lbnRzCi0JJiYgZGVyaXZlZC0+Y29t cG9uZW50cy0+dHMudHlwZSA9PSBCVF9ERVJJVkVECi0JJiYgc3RyY21wIChkZXJpdmVkLT5j b21wb25lbnRzLT5uYW1lLCAiX2RhdGEiKSA9PSAwCi0JJiYgZGVyaXZlZC0+Y29tcG9uZW50 cy0+dHMudS5kZXJpdmVkLT5hdHRyLnVubGltaXRlZF9wb2x5bW9ycGhpYykKKyAgICAgICYm IGRlcml2ZWQtPmNvbXBvbmVudHMtPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorICAgICAgJiYg c3RhcnRzd2l0aCAoZGVyaXZlZC0+bmFtZSwgIl9fY2xhc3MiKQorICAgICAgJiYgc3RyY21w IChkZXJpdmVkLT5jb21wb25lbnRzLT5uYW1lLCAiX2RhdGEiKSA9PSAwCisgICAgICAmJiBk ZXJpdmVkLT5jb21wb25lbnRzLT50cy51LmRlcml2ZWQtPmF0dHIudW5saW1pdGVkX3BvbHlt b3JwaGljKQogICAgIHVubGltaXRlZF9lbnRpdHkgPSB0cnVlOwogCiAgIC8qIEdvIHRocm91 Z2ggdGhlIGRlcml2ZWQgdHlwZSBjb21wb25lbnRzLCBidWlsZGluZyB0aGVtIGFzCkBAIC0y ODEyLDE2ICsyODIxLDI2IEBAIGdmY19nZXRfZGVyaXZlZF90eXBlIChnZmNfc3ltYm9sICog ZGVyaXZlZCwgaW50IGNvZGltZW4pCiAJICBpZiAoYy0+YXR0ci5wb2ludGVyIHx8IGMtPmF0 dHIuYWxsb2NhdGFibGUgfHwgYy0+YXR0ci5wZHRfYXJyYXkpCiAJICAgIHsKIAkgICAgICBl bnVtIGdmY19hcnJheV9raW5kIGFraW5kOwotCSAgICAgIGlmIChjLT5hdHRyLnBvaW50ZXIp CisJICAgICAgYm9vbCBpc19wdHIgPSAoKGMgPT0gZGVyaXZlZC0+Y29tcG9uZW50cworCQkJ ICAgICAgJiYgZGVyaXZlZC0+Y29tcG9uZW50cy0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisJ CQkgICAgICAmJiBzdGFydHN3aXRoIChkZXJpdmVkLT5uYW1lLCAiX19jbGFzcyIpCisJCQkg ICAgICAmJiAoc3RyY21wIChkZXJpdmVkLT5jb21wb25lbnRzLT5uYW1lLCAiX2RhdGEiKQor CQkJCSAgPT0gMCkpCisJCQkgICAgID8gYy0+YXR0ci5jbGFzc19wb2ludGVyIDogYy0+YXR0 ci5wb2ludGVyKTsKKwkgICAgICBpZiAoaXNfcHRyKQogCQlha2luZCA9IGMtPmF0dHIuY29u dGlndW91cyA/IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQKIAkJCQkJICAgOiBHRkNfQVJSQVlf UE9JTlRFUjsKLQkgICAgICBlbHNlCisJICAgICAgZWxzZSBpZiAoYy0+YXR0ci5hbGxvY2F0 YWJsZSkKIAkJYWtpbmQgPSBHRkNfQVJSQVlfQUxMT0NBVEFCTEU7CisJICAgICAgZWxzZSBp ZiAoYy0+YXMtPnR5cGUgPT0gQVNfQVNTVU1FRF9SQU5LKQorCQlha2luZCA9IEdGQ19BUlJB WV9BU1NVTUVEX1JBTks7CisJICAgICAgZWxzZQorCQkvKiBGSVhNRSDigJMgc2VlIFBSIGZv cnRyYW4vMTA0NjUxLiAgKi8KKwkJYWtpbmQgPSBHRkNfQVJSQVlfQVNTVU1FRF9TSEFQRTsK IAkgICAgICAvKiBQb2ludGVycyB0byBhcnJheXMgYXJlbid0IGFjdHVhbGx5IHBvaW50ZXIg dHlwZXMuICBUaGUKIAkgICAgICAgICBkZXNjcmlwdG9ycyBhcmUgc2VwYXJhdGUsIGJ1dCB0 aGUgZGF0YSBpcyBjb21tb24uICAqLwogCSAgICAgIGZpZWxkX3R5cGUgPSBnZmNfYnVpbGRf YXJyYXlfdHlwZSAoZmllbGRfdHlwZSwgYy0+YXMsIGFraW5kLAotCQkJCQkJICFjLT5hdHRy LnRhcmdldAotCQkJCQkJICYmICFjLT5hdHRyLnBvaW50ZXIsCisJCQkJCQkgIWMtPmF0dHIu dGFyZ2V0ICYmICFpc19wdHIsCiAJCQkJCQkgYy0+YXR0ci5jb250aWd1b3VzLAogCQkJCQkJ IGNvZGltZW4pOwogCSAgICB9CkBAIC0zNDcyLDE1ICszNDkxLDIyIEBAIGdmY19nZXRfYXJy YXlfZGVzY3JfaW5mbyAoY29uc3RfdHJlZSB0eXBlLCBzdHJ1Y3QgYXJyYXlfZGVzY3JfaW5m byAqaW5mbykKICAgICB0ID0gZm9sZF9idWlsZF9wb2ludGVyX3BsdXMgKHQsIGRhdGFfb2Zm KTsKICAgdCA9IGJ1aWxkMSAoTk9QX0VYUFIsIGJ1aWxkX3BvaW50ZXJfdHlwZSAocHRyX3R5 cGVfbm9kZSksIHQpOwogICBpbmZvLT5kYXRhX2xvY2F0aW9uID0gYnVpbGQxIChJTkRJUkVD VF9SRUYsIHB0cl90eXBlX25vZGUsIHQpOwotICBpZiAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQg KHR5cGUpID09IEdGQ19BUlJBWV9BTExPQ0FUQUJMRSkKKyAgaWYgKEdGQ19UWVBFX0FSUkFZ X0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfQUxMT0NBVEFCTEUKKyAgICAgIHx8IEdGQ19U WVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX0FMTE9D QVRBQkxFKQogICAgIGluZm8tPmFsbG9jYXRlZCA9IGJ1aWxkMiAoTkVfRVhQUiwgbG9naWNh bF90eXBlX25vZGUsCiAJCQkgICAgICBpbmZvLT5kYXRhX2xvY2F0aW9uLCBudWxsX3BvaW50 ZXJfbm9kZSk7CiAgIGVsc2UgaWYgKEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBH RkNfQVJSQVlfUE9JTlRFUgotCSAgIHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9 PSBHRkNfQVJSQVlfUE9JTlRFUl9DT05UKQorCSAgIHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5E ICh0eXBlKSA9PSBHRkNfQVJSQVlfUE9JTlRFUl9DT05UCisJICAgfHwgR0ZDX1RZUEVfQVJS QVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfUE9JTlRFUgorCSAg IHx8IChHRkNfVFlQRV9BUlJBWV9BS0lORCAodHlwZSkKKwkgICAgICAgPT0gR0ZDX0FSUkFZ X0FTU1VNRURfUkFOS19QT0lOVEVSX0NPTlQpKQogICAgIGluZm8tPmFzc29jaWF0ZWQgPSBi dWlsZDIgKE5FX0VYUFIsIGxvZ2ljYWxfdHlwZV9ub2RlLAogCQkJICAgICAgIGluZm8tPmRh dGFfbG9jYXRpb24sIG51bGxfcG9pbnRlcl9ub2RlKTsKICAgaWYgKChHRkNfVFlQRV9BUlJB WV9BS0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX0FTU1VNRURfUkFOSwotICAgICAgIHx8IEdG Q19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX0NP TlQpCisgICAgICAgfHwgR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJB WV9BU1NVTUVEX1JBTktfQ09OVAorICAgICAgIHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0 eXBlKSA9PSBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LX0FMTE9DQVRBQkxFCisgICAgICAgfHwg R0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktf UE9JTlRFUgorICAgICAgIHx8IEdGQ19UWVBFX0FSUkFZX0FLSU5EICh0eXBlKSA9PSBHRkNf QVJSQVlfQVNTVU1FRF9SQU5LX1BPSU5URVJfQ09OVCkKICAgICAgICYmIGR3YXJmX3ZlcnNp b24gPj0gNSkKICAgICB7CiAgICAgICByYW5rID0gMTsKZGlmZiAtLWdpdCBhL2djYy9mb3J0 cmFuL3RyYW5zLmggYi9nY2MvZm9ydHJhbi90cmFucy5oCmluZGV4IDczOGM3NDg3YTU2Li4y Y2I3MzdjOTUwNCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMuaAorKysgYi9nY2Mv Zm9ydHJhbi90cmFucy5oCkBAIC00MzUsNiArNDM1LDcgQEAgdHJlZSBnZmNfY2xhc3NfdnRh Yl9zaXplX2dldCAodHJlZSk7CiB0cmVlIGdmY19jbGFzc192dGFiX2RlZl9pbml0X2dldCAo dHJlZSk7CiB0cmVlIGdmY19jbGFzc192dGFiX2NvcHlfZ2V0ICh0cmVlKTsKIHRyZWUgZ2Zj X2NsYXNzX3Z0YWJfZmluYWxfZ2V0ICh0cmVlKTsKK3RyZWUgZ2ZjX2NsYXNzX3Z0YWJfY2Fs bGJhY2tfZ2V0ICh0cmVlKTsKIC8qIEdldCBhbiBhY2Nlc3NvciB0byB0aGUgdnRhYidzICog ZmllbGQsIHdoZW4gYSB2cHRyIGhhbmRsZSBpcyBwcmVzZW50LiAgKi8KIHRyZWUgZ2ZjX3Zw dHJfaGFzaF9nZXQgKHRyZWUpOwogdHJlZSBnZmNfdnB0cl9zaXplX2dldCAodHJlZSk7CkBA IC04MTYsNiArODE3LDEwIEBAIHRyZWUgZ2ZjX29tcF9jbGF1c2VfYXNzaWduX29wICh0cmVl LCB0cmVlLCB0cmVlKTsKIHRyZWUgZ2ZjX29tcF9jbGF1c2VfbGluZWFyX2N0b3IgKHRyZWUs IHRyZWUsIHRyZWUsIHRyZWUpOwogdHJlZSBnZmNfb21wX2NsYXVzZV9kdG9yICh0cmVlLCB0 cmVlKTsKIHZvaWQgZ2ZjX29tcF9maW5pc2hfY2xhdXNlICh0cmVlLCBnaW1wbGVfc2VxICos IGJvb2wpOworYm9vbCBnZmNfb21wX2RlZXBfbWFwcGluZ19wIChjb25zdCBnaW1wbGUgKiwg dHJlZSk7Cit0cmVlIGdmY19vbXBfZGVlcF9tYXBwaW5nX2NudCAoY29uc3QgZ2ltcGxlICos IHRyZWUsIGdpbXBsZV9zZXEgKik7Cit2b2lkIGdmY19vbXBfZGVlcF9tYXBwaW5nIChjb25z dCBnaW1wbGUgKiwgdHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwgdHJlZSwKKwkJCSAg IHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIGdpbXBsZV9zZXEgKik7CiBib29sIGdmY19vbXBf YWxsb2NhdGFibGVfcCAodHJlZSk7CiBib29sIGdmY19vbXBfc2NhbGFyX3AgKHRyZWUsIGJv b2wpOwogYm9vbCBnZmNfb21wX3NjYWxhcl90YXJnZXRfcCAodHJlZSk7CkBAIC05ODYsNiAr OTkxLDkgQEAgZW51bSBnZmNfYXJyYXlfa2luZAogICBHRkNfQVJSQVlfQVNTVU1FRF9TSEFQ RV9DT05ULAogICBHRkNfQVJSQVlfQVNTVU1FRF9SQU5LLAogICBHRkNfQVJSQVlfQVNTVU1F RF9SQU5LX0NPTlQsCisgIEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfQUxMT0NBVEFCTEUsCisg IEdGQ19BUlJBWV9BU1NVTUVEX1JBTktfUE9JTlRFUiwKKyAgR0ZDX0FSUkFZX0FTU1VNRURf UkFOS19QT0lOVEVSX0NPTlQsCiAgIEdGQ19BUlJBWV9BTExPQ0FUQUJMRSwKICAgR0ZDX0FS UkFZX1BPSU5URVIsCiAgIEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQKZGlmZiAtLWdpdCBhL2dj Yy9sYW5naG9va3MtZGVmLmggYi9nY2MvbGFuZ2hvb2tzLWRlZi5oCmluZGV4IDQ5YzhmNTgy MGNmLi5jMzVkMzAxZTQ4YiAxMDA2NDQKLS0tIGEvZ2NjL2xhbmdob29rcy1kZWYuaAorKysg Yi9nY2MvbGFuZ2hvb2tzLWRlZi5oCkBAIC04NCw2ICs4NCwxMCBAQCBleHRlcm4gZW51bSBv bXBfY2xhdXNlX2RlZmF1bHRfa2luZCBsaGRfb21wX3ByZWRldGVybWluZWRfc2hhcmluZyAo dHJlZSk7CiBleHRlcm4gZW51bSBvbXBfY2xhdXNlX2RlZmF1bHRtYXBfa2luZCBsaGRfb21w X3ByZWRldGVybWluZWRfbWFwcGluZyAodHJlZSk7CiBleHRlcm4gdHJlZSBsaGRfb21wX2Fz c2lnbm1lbnQgKHRyZWUsIHRyZWUsIHRyZWUpOwogZXh0ZXJuIHZvaWQgbGhkX29tcF9maW5p c2hfY2xhdXNlICh0cmVlLCBnaW1wbGVfc2VxICosIGJvb2wpOworZXh0ZXJuIGJvb2wgbGhk X29tcF9kZWVwX21hcHBpbmdfcCAoY29uc3QgZ2ltcGxlICosIHRyZWUpOworZXh0ZXJuIHRy ZWUgbGhkX29tcF9kZWVwX21hcHBpbmdfY250IChjb25zdCBnaW1wbGUgKiwgdHJlZSwgZ2lt cGxlX3NlcSAqKTsKK2V4dGVybiB2b2lkIGxoZF9vbXBfZGVlcF9tYXBwaW5nIChjb25zdCBn aW1wbGUgKiwgdHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwKKwkJCQkgIHRyZWUsIHRy ZWUsIHRyZWUsIHRyZWUsIHRyZWUsIGdpbXBsZV9zZXEgKik7CiBzdHJ1Y3QgZ2ltcGxpZnlf b21wX2N0eDsKIGV4dGVybiB2b2lkIGxoZF9vbXBfZmlyc3Rwcml2YXRpemVfdHlwZV9zaXpl cyAoc3RydWN0IGdpbXBsaWZ5X29tcF9jdHggKiwKIAkJCQkJICAgICAgIHRyZWUpOwpAQCAt MjcwLDYgKzI3NCw5IEBAIGV4dGVybiB0cmVlIGxoZF91bml0X3NpemVfd2l0aG91dF9yZXVz YWJsZV9wYWRkaW5nICh0cmVlKTsKICNkZWZpbmUgTEFOR19IT09LU19PTVBfQ0xBVVNFX0xJ TkVBUl9DVE9SIE5VTEwKICNkZWZpbmUgTEFOR19IT09LU19PTVBfQ0xBVVNFX0RUT1IgaG9v a190cmVlX3RyZWVfdHJlZV9udWxsCiAjZGVmaW5lIExBTkdfSE9PS1NfT01QX0ZJTklTSF9D TEFVU0UgbGhkX29tcF9maW5pc2hfY2xhdXNlCisjZGVmaW5lIExBTkdfSE9PS1NfT01QX0RF RVBfTUFQUElOR19QIGxoZF9vbXBfZGVlcF9tYXBwaW5nX3AKKyNkZWZpbmUgTEFOR19IT09L U19PTVBfREVFUF9NQVBQSU5HX0NOVCBsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQKKyNkZWZp bmUgTEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HIGxoZF9vbXBfZGVlcF9tYXBwaW5nCiAj ZGVmaW5lIExBTkdfSE9PS1NfT01QX0FMTE9DQVRBQkxFX1AgaG9va19ib29sX3RyZWVfZmFs c2UKICNkZWZpbmUgTEFOR19IT09LU19PTVBfU0NBTEFSX1AgbGhkX29tcF9zY2FsYXJfcAog I2RlZmluZSBMQU5HX0hPT0tTX09NUF9TQ0FMQVJfVEFSR0VUX1AgaG9va19ib29sX3RyZWVf ZmFsc2UKQEAgLTMwMyw2ICszMTAsOSBAQCBleHRlcm4gdHJlZSBsaGRfdW5pdF9zaXplX3dp dGhvdXRfcmV1c2FibGVfcGFkZGluZyAodHJlZSk7CiAgIExBTkdfSE9PS1NfT01QX0NMQVVT RV9MSU5FQVJfQ1RPUiwgXAogICBMQU5HX0hPT0tTX09NUF9DTEFVU0VfRFRPUiwgXAogICBM QU5HX0hPT0tTX09NUF9GSU5JU0hfQ0xBVVNFLCBcCisgIExBTkdfSE9PS1NfT01QX0RFRVBf TUFQUElOR19QLCBcCisgIExBTkdfSE9PS1NfT01QX0RFRVBfTUFQUElOR19DTlQsIFwKKyAg TEFOR19IT09LU19PTVBfREVFUF9NQVBQSU5HLCBcCiAgIExBTkdfSE9PS1NfT01QX0FMTE9D QVRBQkxFX1AsIFwKICAgTEFOR19IT09LU19PTVBfU0NBTEFSX1AsIFwKICAgTEFOR19IT09L U19PTVBfU0NBTEFSX1RBUkdFVF9QLCBcCmRpZmYgLS1naXQgYS9nY2MvbGFuZ2hvb2tzLmNj IGIvZ2NjL2xhbmdob29rcy5jYwppbmRleCBkZjk3MDY3OGEwOC4uMzhmYzMyYmZhY2MgMTAw NjQ0Ci0tLSBhL2djYy9sYW5naG9va3MuY2MKKysrIGIvZ2NjL2xhbmdob29rcy5jYwpAQCAt NjM0LDYgKzYzNCwzMCBAQCBsaGRfb21wX2ZpbmlzaF9jbGF1c2UgKHRyZWUsIGdpbXBsZV9z ZXEgKiwgYm9vbCkKIHsKIH0KIAorLyogUmV0dXJucyB0cnVlIHdoZW4gYWRkaXRpb25hbCBt YXBwaW5ncyBmb3IgYSBkZWNsIGFyZSBuZWVkZWQuICAqLworCitib29sCitsaGRfb21wX2Rl ZXBfbWFwcGluZ19wIChjb25zdCBnaW1wbGUgKiwgdHJlZSkKK3sKKyAgcmV0dXJuIGZhbHNl OworfQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBhZGRpdGlvbmFsIG1hcHBpbmdzIGZvciBh IGRlY2wuICAqLworCit0cmVlCitsaGRfb21wX2RlZXBfbWFwcGluZ19jbnQgKGNvbnN0IGdp bXBsZSAqLCB0cmVlLCBnaW1wbGVfc2VxICopCit7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9 CisKKy8qIERvIHRoZSBhZGRpdGlvbmFsIG1hcHBpbmdzLiAgKi8KKwordm9pZAorbGhkX29t cF9kZWVwX21hcHBpbmcgKGNvbnN0IGdpbXBsZSAqLCB0cmVlLCB1bnNpZ25lZCBIT1NUX1dJ REVfSU5ULCB0cmVlLCB0cmVlLAorCQkgICAgICB0cmVlLCB0cmVlLCB0cmVlLCBnaW1wbGVf c2VxICopCit7Cit9CisKIC8qIFJldHVybiB0cnVlIGlmIERFQ0wgaXMgYSBzY2FsYXIgdmFy aWFibGUgKGZvciB0aGUgcHVycG9zZSBvZgogICAgaW1wbGljaXQgZmlyc3Rwcml2YXRpemF0 aW9uICYgbWFwcGluZykuIE9ubHkgaWYgYWxsb2NfcHRyX29rCiAgICBhcmUgYWxsb2NhdGFi bGVzIGFuZCBwb2ludGVycyBhY2NlcHRlZC4gKi8KZGlmZiAtLWdpdCBhL2djYy9sYW5naG9v a3MuaCBiL2djYy9sYW5naG9va3MuaAppbmRleCAwZWVjMWIwZjdhZC4uYmU3MDA4YThhNDkg MTAwNjQ0Ci0tLSBhL2djYy9sYW5naG9va3MuaAorKysgYi9nY2MvbGFuZ2hvb2tzLmgKQEAg LTMwNiw2ICszMDYsMjEgQEAgc3RydWN0IGxhbmdfaG9va3NfZm9yX2RlY2xzCiAgIC8qIERv IGxhbmd1YWdlIHNwZWNpZmljIGNoZWNraW5nIG9uIGFuIGltcGxpY2l0bHkgZGV0ZXJtaW5l ZCBjbGF1c2UuICAqLwogICB2b2lkICgqb21wX2ZpbmlzaF9jbGF1c2UpICh0cmVlIGNsYXVz ZSwgZ2ltcGxlX3NlcSAqcHJlX3AsIGJvb2wpOwogCisgIC8qIEFkZGl0aW9uYWwgbGFuZ3Vh Z2Utc3BlY2lmaWMgbWFwcGluZ3MgZm9yIGEgZGVjbDsgcmV0dXJucyB0cnVlCisgICAgIGlm IHRob3NlIG1heSBvY2N1ci4gICovCisgIGJvb2wgKCpvbXBfZGVlcF9tYXBwaW5nX3ApIChj b25zdCBnaW1wbGUgKmN0eF9zdG10LCB0cmVlIGNsYXVzZSk7CisKKyAgLyogQWRkaXRpb25h bCBsYW5ndWFnZS1zcGVjaWZpYyBtYXBwaW5ncyBmb3IgYSBkZWNsOyByZXR1cm5zIHRoZQor ICAgICBudW1iZXIgb2YgYWRkaXRpb25hbCBtYXBwaW5ncyBuZWVkZWQuICAqLworICB0cmVl ICgqb21wX2RlZXBfbWFwcGluZ19jbnQpIChjb25zdCBnaW1wbGUgKmN0eF9zdG10LCB0cmVl IGNsYXVzZSwKKwkJCQlnaW1wbGVfc2VxICpzZXEpOworCisgIC8qIERvIHRoZSBhY3R1YWwg YWRkaXRpb25hbCBsYW5ndWFnZS1zcGVjaWZpYyBtYXBwaW5ncyBmb3IgYSBkZWNsLiAqLwor ICB2b2lkICgqb21wX2RlZXBfbWFwcGluZykgKGNvbnN0IGdpbXBsZSAqc3RtdCwgdHJlZSBj bGF1c2UsCisJCQkgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCB0a2luZCwKKwkJCSAgICB0 cmVlIGRhdGEsIHRyZWUgc2l6ZXMsIHRyZWUga2luZHMsCisJCQkgICAgdHJlZSBvZmZzZXRf ZGF0YSwgdHJlZSBvZmZzZXQsIGdpbXBsZV9zZXEgKnNlcSk7CisKICAgLyogUmV0dXJuIHRy dWUgaWYgREVDTCBpcyBhbiBhbGxvY2F0YWJsZSB2YXJpYWJsZSAoZm9yIHRoZSBwdXJwb3Nl IG9mCiAgICAgIGltcGxpY2l0IG1hcHBpbmcpLiAgKi8KICAgYm9vbCAoKm9tcF9hbGxvY2F0 YWJsZV9wKSAodHJlZSBkZWNsKTsKZGlmZiAtLWdpdCBhL2djYy9vbXAtZXhwYW5kLmNjIGIv Z2NjL29tcC1leHBhbmQuY2MKaW5kZXggZWU3MDgzMTQ3OTMuLjFlZjE5YTdkZTg0IDEwMDY0 NAotLS0gYS9nY2Mvb21wLWV4cGFuZC5jYworKysgYi9nY2Mvb21wLWV4cGFuZC5jYwpAQCAt OTc4Niw4ICs5Nzg2LDkgQEAgZXhwYW5kX29tcF90YXJnZXQgKHN0cnVjdCBvbXBfcmVnaW9u ICpyZWdpb24pCiAJCSAgLyogV2UncmUgaWdub3JpbmcgdGhlIHN1YmNvZGUgYmVjYXVzZSB3 ZSdyZQogCQkgICAgIGVmZmVjdGl2ZWx5IGRvaW5nIGEgU1RSSVBfTk9QUy4gICovCiAKLQkJ ICBpZiAoVFJFRV9DT0RFIChhcmcpID09IEFERFJfRVhQUgotCQkgICAgICAmJiBUUkVFX09Q RVJBTkQgKGFyZywgMCkgPT0gc2VuZGVyKQorCQkgIGlmICgoVFJFRV9DT0RFIChhcmcpID09 IEFERFJfRVhQUgorCQkgICAgICAgJiYgVFJFRV9PUEVSQU5EIChhcmcsIDApID09IHNlbmRl cikKKwkJICAgICAgfHwgYXJnID09IHNlbmRlcikKIAkJICAgIHsKIAkJICAgICAgdGd0Y29w eV9zdG10ID0gc3RtdDsKIAkJICAgICAgYnJlYWs7CkBAIC0xMDEwNSw3ICsxMDEwNiw3IEBA IGV4cGFuZF9vbXBfdGFyZ2V0IChzdHJ1Y3Qgb21wX3JlZ2lvbiAqcmVnaW9uKQogICAgICAg dDMgPSB0MjsKICAgICAgIHQ0ID0gdDI7CiAgICAgfQotICBlbHNlCisgIGVsc2UgaWYgKFRS RUVfVkVDX0xFTkdUSCAodCkgPT0gMykKICAgICB7CiAgICAgICB0MSA9IFRZUEVfTUFYX1ZB TFVFIChUWVBFX0RPTUFJTiAoVFJFRV9UWVBFIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSkpOwog ICAgICAgdDEgPSBzaXplX2Jpbm9wIChQTFVTX0VYUFIsIHQxLCBzaXplX2ludCAoMSkpOwpA QCAtMTAxMTMsNiArMTAxMTQsMTcgQEAgZXhwYW5kX29tcF90YXJnZXQgKHN0cnVjdCBvbXBf cmVnaW9uICpyZWdpb24pCiAgICAgICB0MyA9IGJ1aWxkX2ZvbGRfYWRkcl9leHByIChUUkVF X1ZFQ19FTFQgKHQsIDEpKTsKICAgICAgIHQ0ID0gYnVpbGRfZm9sZF9hZGRyX2V4cHIgKFRS RUVfVkVDX0VMVCAodCwgMikpOwogICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHQxID0g Zm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpICgmZ3NpLCBUUkVFX1ZFQ19FTFQgKHQsIDMpLCB0 cnVlLCBOVUxMX1RSRUUsCisJCQkJICAgICB0cnVlLCBHU0lfU0FNRV9TVE1UKTsKKyAgICAg IHQyID0gZm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpICgmZ3NpLCBUUkVFX1ZFQ19FTFQgKHQs IDApLCB0cnVlLCBOVUxMX1RSRUUsCisJCQkJICAgICB0cnVlLCBHU0lfU0FNRV9TVE1UKTsK KyAgICAgIHQzID0gZm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpICgmZ3NpLCBUUkVFX1ZFQ19F TFQgKHQsIDEpLCB0cnVlLCBOVUxMX1RSRUUsCisJCQkJICAgICB0cnVlLCBHU0lfU0FNRV9T VE1UKTsKKyAgICAgIHQ0ID0gZm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpICgmZ3NpLCBUUkVF X1ZFQ19FTFQgKHQsIDIpLCB0cnVlLCBOVUxMX1RSRUUsCisJCQkJICAgICB0cnVlLCBHU0lf U0FNRV9TVE1UKTsKKyAgICB9CiAKICAgZ2ltcGxlICpnOwogICBib29sIHRhZ2dpbmcgPSBm YWxzZTsKZGlmZiAtLWdpdCBhL2djYy9vbXAtbG93LmNjIGIvZ2NjL29tcC1sb3cuY2MKaW5k ZXggMjI5NDQ1NmIyN2QuLjdmODZkMmEzNzNlIDEwMDY0NAotLS0gYS9nY2Mvb21wLWxvdy5j YworKysgYi9nY2Mvb21wLWxvdy5jYwpAQCAtNzY0LDcgKzc2NCwxMCBAQCBzdGF0aWMgdHJl ZQogYnVpbGRfc2VuZGVyX3JlZiAoc3BsYXlfdHJlZV9rZXkga2V5LCBvbXBfY29udGV4dCAq Y3R4KQogewogICB0cmVlIGZpZWxkID0gbG9va3VwX3NmaWVsZCAoa2V5LCBjdHgpOwotICBy ZXR1cm4gb21wX2J1aWxkX2NvbXBvbmVudF9yZWYgKGN0eC0+c2VuZGVyX2RlY2wsIGZpZWxk KTsKKyAgdHJlZSB0bXAgPSBjdHgtPnNlbmRlcl9kZWNsOworICBpZiAoUE9JTlRFUl9UWVBF X1AgKFRSRUVfVFlQRSAodG1wKSkpCisgICAgdG1wID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9y ZWYgKHRtcCk7CisgIHJldHVybiBvbXBfYnVpbGRfY29tcG9uZW50X3JlZiAodG1wLCBmaWVs ZCk7CiB9CiAKIHN0YXRpYyB0cmVlCkBAIC0xMTM1LDcgKzExMzgsOSBAQCBmaXh1cF9jaGls ZF9yZWNvcmRfdHlwZSAob21wX2NvbnRleHQgKmN0eCkKICAgICB0eXBlID0gYnVpbGRfcXVh bGlmaWVkX3R5cGUgKHR5cGUsIFRZUEVfUVVBTF9DT05TVCk7CiAKICAgVFJFRV9UWVBFIChj dHgtPnJlY2VpdmVyX2RlY2wpCi0gICAgPSBidWlsZF9xdWFsaWZpZWRfdHlwZSAoYnVpbGRf cmVmZXJlbmNlX3R5cGUgKHR5cGUpLCBUWVBFX1FVQUxfUkVTVFJJQ1QpOworICAgID0gYnVp bGRfcXVhbGlmaWVkX3R5cGUgKGZsZXhpYmxlX2FycmF5X3R5cGVfcCAodHlwZSkKKwkJCSAg ICA/IGJ1aWxkX3BvaW50ZXJfdHlwZSAodHlwZSkKKwkJCSAgICA6IGJ1aWxkX3JlZmVyZW5j ZV90eXBlICh0eXBlKSwgVFlQRV9RVUFMX1JFU1RSSUNUKTsKIH0KIAogLyogSW5zdGFudGlh dGUgZGVjbHMgYXMgbmVjZXNzYXJ5IGluIENUWCB0byBzYXRpc2Z5IHRoZSBkYXRhIHNoYXJp bmcKQEAgLTExNDYsNiArMTE1MSw3IEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNs YXVzZXMsIG9tcF9jb250ZXh0ICpjdHgpCiB7CiAgIHRyZWUgYywgZGVjbDsKICAgYm9vbCBz Y2FuX2FycmF5X3JlZHVjdGlvbnMgPSBmYWxzZTsKKyAgYm9vbCBmbGV4X2FycmF5X3B0ciA9 IGZhbHNlOwogCiAgIGZvciAoYyA9IGNsYXVzZXM7IGM7IGMgPSBPTVBfQ0xBVVNFX0NIQUlO IChjKSkKICAgICBpZiAoT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX0FMTE9D QVRFCkBAIC0xNTI2LDYgKzE1MzIsOCBAQCBzY2FuX3NoYXJpbmdfY2xhdXNlcyAodHJlZSBj bGF1c2VzLCBvbXBfY29udGV4dCAqY3R4KQogCQkgICYmICFPTVBfQ0xBVVNFX01BUF9aRVJP X0JJQVNfQVJSQVlfU0VDVElPTiAoYykpCiAJCWJyZWFrOwogCSAgICB9CisJICBpZiAoIWZs ZXhfYXJyYXlfcHRyKQorCSAgICBmbGV4X2FycmF5X3B0ciA9IGxhbmdfaG9va3MuZGVjbHMu b21wX2RlZXBfbWFwcGluZ19wIChjdHgtPnN0bXQsIGMpOwogCSAgaWYgKE9NUF9DTEFVU0Vf Q09ERSAoYykgPT0gT01QX0NMQVVTRV9NQVAKIAkgICAgICAmJiBERUNMX1AgKGRlY2wpCiAJ ICAgICAgJiYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBfTUFQX0FUVEFDSApA QCAtMTkzMCw2ICsxOTM4LDE4IEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNsYXVz ZXMsIG9tcF9jb250ZXh0ICpjdHgpCiAJCSAmJiBPTVBfQ0xBVVNFX0xJTkVBUl9HSU1QTEVf U0VRIChjKSkKIAkgIHNjYW5fb21wICgmT01QX0NMQVVTRV9MSU5FQVJfR0lNUExFX1NFUSAo YyksIGN0eCk7CiAgICAgfQorICBpZiAoZmxleF9hcnJheV9wdHIpCisgICAgeworICAgICAg dHJlZSBmaWVsZCA9IGJ1aWxkX3JhbmdlX3R5cGUgKHNpemVfdHlwZV9ub2RlLAorCQkJCSAg ICAgYnVpbGRfaW50X2NzdHUgKHNpemVfdHlwZV9ub2RlLCAwKSwKKwkJCQkgICAgIE5VTExf VFJFRSk7CisgICAgICBmaWVsZCA9IGJ1aWxkX2FycmF5X3R5cGUgKHB0cl90eXBlX25vZGUs IGZpZWxkKTsKKyAgICAgIGZpZWxkID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwg RklFTERfREVDTCwgTlVMTF9UUkVFLCBmaWVsZCk7CisgICAgICBTRVRfREVDTF9BTElHTiAo ZmllbGQsIFRZUEVfQUxJR04gKHB0cl90eXBlX25vZGUpKTsKKyAgICAgIERFQ0xfQ09OVEVY VCAoZmllbGQpID0gY3R4LT5yZWNvcmRfdHlwZTsKKyAgICAgIERFQ0xfQ0hBSU4gKGZpZWxk KSA9IFRZUEVfRklFTERTIChjdHgtPnJlY29yZF90eXBlKTsKKyAgICAgIFRZUEVfRklFTERT IChjdHgtPnJlY29yZF90eXBlKSA9IGZpZWxkOworICAgIH0KIH0KIAogLyogQ3JlYXRlIGEg bmV3IG5hbWUgZm9yIG9tcCBjaGlsZCBmdW5jdGlvbi4gIFJldHVybnMgYW4gaWRlbnRpZmll ci4gKi8KQEAgLTEyNTQwLDYgKzEyNTYwLDExIEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBs ZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKICAgdW5zaWduZWQg aW50IG1hcF9jbnQgPSAwOwogICB0cmVlIGluX3JlZHVjdGlvbl9jbGF1c2VzID0gTlVMTF9U UkVFOwogCisgIHRyZWUgZGVlcF9tYXBfY250ID0gTlVMTF9UUkVFOworICB0cmVlIGRlZXBf bWFwX2RhdGEgPSBOVUxMX1RSRUU7CisgIHRyZWUgZGVlcF9tYXBfb2Zmc2V0X2RhdGEgPSBO VUxMX1RSRUU7CisgIHRyZWUgZGVlcF9tYXBfb2Zmc2V0ID0gTlVMTF9UUkVFOworCiAgIG9m ZmxvYWRlZCA9IGlzX2dpbXBsZV9vbXBfb2ZmbG9hZGVkIChzdG10KTsKICAgc3dpdGNoIChn aW1wbGVfb21wX3RhcmdldF9raW5kIChzdG10KSkKICAgICB7CkBAIC0xMjYxMyw2ICsxMjYz OCw4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwg b21wX2NvbnRleHQgKmN0eCkKICAgcHVzaF9naW1wbGlmeV9jb250ZXh0ICgpOwogICBmcGxp c3QgPSBOVUxMOwogCisgIGlsaXN0ID0gTlVMTDsKKyAgb2xpc3QgPSBOVUxMOwogICBmb3Ig KGMgPSBjbGF1c2VzOyBjIDsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQogICAgIHN3aXRj aCAoT01QX0NMQVVTRV9DT0RFIChjKSkKICAgICAgIHsKQEAgLTEyNjY2LDYgKzEyNjkzLDE2 IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21w X2NvbnRleHQgKmN0eCkKICAgICAgIGNhc2UgT01QX0NMQVVTRV9GUk9NOgogICAgICAgb2Fj Y19maXJzdHByaXZhdGU6CiAJdmFyID0gT01QX0NMQVVTRV9ERUNMIChjKTsKKwl7CisJICB0 cmVlIGV4dHJhID0gbGFuZ19ob29rcy5kZWNscy5vbXBfZGVlcF9tYXBwaW5nX2NudCAoc3Rt dCwgYywgJmlsaXN0KTsKKwkgIGlmIChleHRyYSAhPSBOVUxMX1RSRUUgJiYgZGVlcF9tYXBf Y250ICE9IE5VTExfVFJFRSkKKwkgICAgZGVlcF9tYXBfY250ID0gZm9sZF9idWlsZDJfbG9j IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwgUExVU19FWFBSLAorCQkJCQkgICAgc2l6ZV90 eXBlX25vZGUsIGRlZXBfbWFwX2NudCwKKwkJCQkJICAgIGV4dHJhKTsKKwkgIGVsc2UgaWYg KGV4dHJhICE9IE5VTExfVFJFRSkKKwkgICAgZGVlcF9tYXBfY250ID0gZXh0cmE7CisJfQor CiAJaWYgKCFERUNMX1AgKHZhcikpCiAJICB7CiAJICAgIGlmIChPTVBfQ0xBVVNFX0NPREUg KGMpICE9IE9NUF9DTEFVU0VfTUFQCkBAIC0xMjg5MywxOCArMTI5MzAsMzEgQEAgbG93ZXJf b21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAq Y3R4KQogICAgICAgcmVjb3JkX3ZhcnNfaW50byAoZ2ltcGxlX2JpbmRfdmFycyAodGd0X2Jp bmQpLCBjaGlsZF9mbik7CiAgICAgfQogCi0gIG9saXN0ID0gTlVMTDsKLSAgaWxpc3QgPSBO VUxMOwogICBpZiAoY3R4LT5yZWNvcmRfdHlwZSkKICAgICB7CisgICAgICBpZiAoZGVlcF9t YXBfY250ICYmIFRSRUVfQ09ERSAoZGVlcF9tYXBfY250KSA9PSBJTlRFR0VSX0NTVCkKKwkv KiBtYXBfY250ID0gbWFwX2NudCArIHRyZWVfdG9faHdpIChkZWVwX21hcF9jbnQpOyAqLwor CS8qIGRlZXBfbWFwX2NudCA9IE5VTExfVFJFRTsgKi8KKwlnY2NfdW5yZWFjaGFibGUgKCk7 CisgICAgICBlbHNlIGlmIChkZWVwX21hcF9jbnQpCisJeworCSAgZ2NjX2Fzc2VydCAoZmxl eGlibGVfYXJyYXlfdHlwZV9wIChjdHgtPnJlY29yZF90eXBlKSk7CisJICB0cmVlIG4gPSBj cmVhdGVfdG1wX3Zhcl9yYXcgKHNpemVfdHlwZV9ub2RlLCAibm5fbWFwIik7CisJICBnaW1w bGVfYWRkX3RtcF92YXIgKG4pOworCSAgZ2ltcGxpZnlfYXNzaWduIChuLCBkZWVwX21hcF9j bnQsICZpbGlzdCk7CisJICBkZWVwX21hcF9jbnQgPSBuOworCX0KICAgICAgIGN0eC0+c2Vu ZGVyX2RlY2wKLQk9IGNyZWF0ZV90bXBfdmFyIChjdHgtPnJlY29yZF90eXBlLCAiLm9tcF9k YXRhX2FyciIpOworCT0gY3JlYXRlX3RtcF92YXIgKGRlZXBfbWFwX2NudCA/IGJ1aWxkX3Bv aW50ZXJfdHlwZSAoY3R4LT5yZWNvcmRfdHlwZSkKKwkJCQkgICAgICAgOiBjdHgtPnJlY29y ZF90eXBlLCAiLm9tcF9kYXRhX2FyciIpOwogICAgICAgREVDTF9OQU1FTEVTUyAoY3R4LT5z ZW5kZXJfZGVjbCkgPSAxOwogICAgICAgVFJFRV9BRERSRVNTQUJMRSAoY3R4LT5zZW5kZXJf ZGVjbCkgPSAxOwotICAgICAgdCA9IG1ha2VfdHJlZV92ZWMgKDMpOworICAgICAgdCA9IG1h a2VfdHJlZV92ZWMgKGRlZXBfbWFwX2NudCA/IDQgOiAzKTsKICAgICAgIFRSRUVfVkVDX0VM VCAodCwgMCkgPSBjdHgtPnNlbmRlcl9kZWNsOwogICAgICAgVFJFRV9WRUNfRUxUICh0LCAx KQotCT0gY3JlYXRlX3RtcF92YXIgKGJ1aWxkX2FycmF5X3R5cGVfbmVsdHMgKHNpemVfdHlw ZV9ub2RlLCBtYXBfY250KSwKKwk9IGNyZWF0ZV90bXBfdmFyIChkZWVwX21hcF9jbnQKKwkJ CSAgPyBidWlsZF9wb2ludGVyX3R5cGUgKHNpemVfdHlwZV9ub2RlKQorCQkJICA6IGJ1aWxk X2FycmF5X3R5cGVfbmVsdHMgKHNpemVfdHlwZV9ub2RlLCBtYXBfY250KSwKIAkJCSAgIi5v bXBfZGF0YV9zaXplcyIpOwogICAgICAgREVDTF9OQU1FTEVTUyAoVFJFRV9WRUNfRUxUICh0 LCAxKSkgPSAxOwogICAgICAgVFJFRV9BRERSRVNTQUJMRSAoVFJFRV9WRUNfRUxUICh0LCAx KSkgPSAxOwpAQCAtMTI5MTIsMTMgKzEyOTYyLDY1IEBAIGxvd2VyX29tcF90YXJnZXQgKGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKICAgICAgIHRy ZWUgdGtpbmRfdHlwZSA9IHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZTsKICAgICAgIGludCB0 YWxpZ25fc2hpZnQgPSA4OwogICAgICAgVFJFRV9WRUNfRUxUICh0LCAyKQotCT0gY3JlYXRl X3RtcF92YXIgKGJ1aWxkX2FycmF5X3R5cGVfbmVsdHMgKHRraW5kX3R5cGUsIG1hcF9jbnQp LAorCT0gY3JlYXRlX3RtcF92YXIgKGRlZXBfbWFwX2NudAorCQkJICA/IGJ1aWxkX3BvaW50 ZXJfdHlwZSAodGtpbmRfdHlwZSkKKwkJCSAgOiBidWlsZF9hcnJheV90eXBlX25lbHRzICh0 a2luZF90eXBlLCBtYXBfY250KSwKIAkJCSAgIi5vbXBfZGF0YV9raW5kcyIpOwogICAgICAg REVDTF9OQU1FTEVTUyAoVFJFRV9WRUNfRUxUICh0LCAyKSkgPSAxOwogICAgICAgVFJFRV9B RERSRVNTQUJMRSAoVFJFRV9WRUNfRUxUICh0LCAyKSkgPSAxOwogICAgICAgVFJFRV9TVEFU SUMgKFRSRUVfVkVDX0VMVCAodCwgMikpID0gMTsKICAgICAgIGdpbXBsZV9vbXBfdGFyZ2V0 X3NldF9kYXRhX2FyZyAoc3RtdCwgdCk7CiAKKyAgICAgIGlmIChkZWVwX21hcF9jbnQpCisJ eworCSAgdHJlZSB0bXAsIHNpemU7CisJICBzaXplID0gY3JlYXRlX3RtcF92YXIgKHNpemVf dHlwZV9ub2RlLCBOVUxMKTsKKwkgIERFQ0xfTkFNRUxFU1MgKHNpemUpID0gMTsKKwkgIGdp bXBsaWZ5X2Fzc2lnbiAoc2l6ZSwKKwkJCSAgIGZvbGRfYnVpbGQyX2xvYyAoVU5LTk9XTl9M T0NBVElPTiwgUExVU19FWFBSLAorCQkJCQkgICAgc2l6ZV90eXBlX25vZGUsIGRlZXBfbWFw X2NudCwKKwkJCQkJICAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLAorCQkJCQkJ CSAgIG1hcF9jbnQpKSwgJmlsaXN0KTsKKwkgIFRSRUVfVkVDX0VMVCAodCwgMykgPSBzaXpl OworCisJICB0cmVlIGNhbGwgPSBidWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX01B TExPQyk7CisJICBzaXplID0gZm9sZF9idWlsZDJfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBN VUxUX0VYUFIsCisJCQkJICBzaXplX3R5cGVfbm9kZSwgZGVlcF9tYXBfY250LAorCQkJCSAg VFlQRV9TSVpFX1VOSVQgKHB0cl90eXBlX25vZGUpKTsKKwkgIHNpemUgPSBmb2xkX2J1aWxk Ml9sb2MgKFVOS05PV05fTE9DQVRJT04sIFBMVVNfRVhQUiwKKwkJCQkgIHNpemVfdHlwZV9u b2RlLCBzaXplLAorCQkJCSAgVFlQRV9TSVpFX1VOSVQgKGN0eC0+cmVjb3JkX3R5cGUpKTsK KwkgIHRtcCA9IGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGlucHV0X2xvY2F0aW9uLCBjYWxsLCAx LCBzaXplKTsKKwkgIGdpbXBsaWZ5X2Fzc2lnbiAoY3R4LT5zZW5kZXJfZGVjbCwgdG1wLCAm aWxpc3QpOworCisJICBzaXplID0gZm9sZF9idWlsZDJfbG9jIChVTktOT1dOX0xPQ0FUSU9O LCBNVUxUX0VYUFIsCisJCQkJICBzaXplX3R5cGVfbm9kZSwgVFJFRV9WRUNfRUxUICh0LCAz KSwKKwkJCQkgIFRZUEVfU0laRV9VTklUIChzaXplX3R5cGVfbm9kZSkpOworCSAgdG1wID0g YnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGNhbGwsIDEsIHNpemUpOwor CSAgZ2ltcGxpZnlfYXNzaWduIChUUkVFX1ZFQ19FTFQgKHQsIDEpLCB0bXAsICZpbGlzdCk7 CisKKwkgIHNpemUgPSBmb2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sIE1VTFRf RVhQUiwKKwkJCQkgIHNpemVfdHlwZV9ub2RlLCBUUkVFX1ZFQ19FTFQgKHQsIDMpLAorCQkJ CSAgVFlQRV9TSVpFX1VOSVQgKHRraW5kX3R5cGUpKTsKKwkgIHRtcCA9IGJ1aWxkX2NhbGxf ZXhwcl9sb2MgKGlucHV0X2xvY2F0aW9uLCBjYWxsLCAxLCBzaXplKTsKKwkgIGdpbXBsaWZ5 X2Fzc2lnbiAoVFJFRV9WRUNfRUxUICh0LCAyKSwgdG1wLCAmaWxpc3QpOworCSAgdHJlZSBm aWVsZCA9IFRZUEVfRklFTERTIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAoY3R4LT5zZW5kZXJf ZGVjbCkpKTsKKwkgIGZvciAoIDsgREVDTF9DSEFJTiAoZmllbGQpICE9IE5VTExfVFJFRTsg ZmllbGQgPSBERUNMX0NIQUlOIChmaWVsZCkpCisJICAgIDsKKwkgIGdjY19hc3NlcnQgKFRS RUVfQ09ERSAoVFJFRV9UWVBFIChmaWVsZCkpKTsKKwkgIHRtcCA9IGJ1aWxkX2ZvbGRfaW5k aXJlY3RfcmVmIChjdHgtPnNlbmRlcl9kZWNsKTsKKwkgIGRlZXBfbWFwX2RhdGEgPSBvbXBf YnVpbGRfY29tcG9uZW50X3JlZiAodG1wLCBmaWVsZCk7CisJICBkZWVwX21hcF9vZmZzZXRf ZGF0YSA9IGNyZWF0ZV90bXBfdmFyX3JhdyAoc2l6ZV90eXBlX25vZGUsCisJCQkJCQkgICAg ICJtYXBfb2Zmc2V0X2RhdGEiKTsKKwkgIGRlZXBfbWFwX29mZnNldCA9IGNyZWF0ZV90bXBf dmFyX3JhdyAoc2l6ZV90eXBlX25vZGUsICJtYXBfb2Zmc2V0Iik7CisJICBnaW1wbGVfYWRk X3RtcF92YXIgKGRlZXBfbWFwX29mZnNldF9kYXRhKTsKKwkgIGdpbXBsZV9hZGRfdG1wX3Zh ciAoZGVlcF9tYXBfb2Zmc2V0KTsKKwkgIGdpbXBsaWZ5X2Fzc2lnbiAoZGVlcF9tYXBfb2Zm c2V0X2RhdGEsIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLAorCQkJCQkJCQkwKSwg JmlsaXN0KTsKKwkgIGdpbXBsaWZ5X2Fzc2lnbiAoZGVlcF9tYXBfb2Zmc2V0LCBidWlsZF9p bnRfY3N0IChzaXplX3R5cGVfbm9kZSwKKwkJCQkJCQkgICBtYXBfY250KSwgJmlsaXN0KTsK Kwl9CisKICAgICAgIHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZhX2djPiAqdnNpemU7CiAgICAg ICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKnZraW5kOwogICAgICAgdmVjX2FsbG9j ICh2c2l6ZSwgbWFwX2NudCk7CkBAIC0xMjk0NSw2ICsxMzA0NywyNCBAQCBsb3dlcl9vbXBf dGFyZ2V0IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgp CiAJCSAgICB8fCAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykKIAkJCT09IEdPTVBfTUFQX0ZJ UlNUUFJJVkFURV9SRUZFUkVOQ0UpKSkKIAkgICAgICBicmVhazsKKwkgICAgaWYgKGRlZXBf bWFwX2NudCkKKwkgICAgICB7CisJCXVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdGtpbmQyOwor CQlzd2l0Y2ggKE9NUF9DTEFVU0VfQ09ERSAoYykpCisJCSAgeworCQkgIGNhc2UgT01QX0NM QVVTRV9NQVA6IHRraW5kMiA9IE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpOyBicmVhazsKKwkJ ICBjYXNlIE9NUF9DTEFVU0VfRklSU1RQUklWQVRFOiB0a2luZDIgPSBHT01QX01BUF9UTzsg YnJlYWs7CisJCSAgY2FzZSBPTVBfQ0xBVVNFX1RPOiB0a2luZDIgPSBHT01QX01BUF9UTzsg YnJlYWs7CisJCSAgY2FzZSBPTVBfQ0xBVVNFX0ZST006IHRraW5kMiA9IEdPTVBfTUFQX0ZS T007IGJyZWFrOworCQkgIGRlZmF1bHQ6IGdjY191bnJlYWNoYWJsZSAoKTsKKwkJICB9CisJ CWxhbmdfaG9va3MuZGVjbHMub21wX2RlZXBfbWFwcGluZyAoc3RtdCwgYywgdGtpbmQyLAor CQkJCQkJICAgZGVlcF9tYXBfZGF0YSwKKwkJCQkJCSAgIFRSRUVfVkVDX0VMVCAodCwgMSks CisJCQkJCQkgICBUUkVFX1ZFQ19FTFQgKHQsIDIpLAorCQkJCQkJICAgZGVlcF9tYXBfb2Zm c2V0X2RhdGEsCisJCQkJCQkgICBkZWVwX21hcF9vZmZzZXQsICZpbGlzdCk7CisJICAgICAg fQogCSAgICBpZiAoIURFQ0xfUCAob3ZhcikpCiAJICAgICAgewogCQlpZiAoT01QX0NMQVVT RV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX01BUApAQCAtMTM0MjAsMjMgKzEzNTQwLDY1IEBA IGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2Nv bnRleHQgKmN0eCkKIAogICAgICAgZ2NjX2Fzc2VydCAobWFwX2lkeCA9PSBtYXBfY250KTsK IAotICAgICAgREVDTF9JTklUSUFMIChUUkVFX1ZFQ19FTFQgKHQsIDEpKQotCT0gYnVpbGRf Y29uc3RydWN0b3IgKFRSRUVfVFlQRSAoVFJFRV9WRUNfRUxUICh0LCAxKSksIHZzaXplKTsK LSAgICAgIERFQ0xfSU5JVElBTCAoVFJFRV9WRUNfRUxUICh0LCAyKSkKLQk9IGJ1aWxkX2Nv bnN0cnVjdG9yIChUUkVFX1RZUEUgKFRSRUVfVkVDX0VMVCAodCwgMikpLCB2a2luZCk7Cisg ICAgICBpZiAoIWRlZXBfbWFwX2NudCkKKwl7CisJICBERUNMX0lOSVRJQUwgKFRSRUVfVkVD X0VMVCAodCwgMSkpCisJICAgID0gYnVpbGRfY29uc3RydWN0b3IgKFRSRUVfVFlQRSAoVFJF RV9WRUNfRUxUICh0LCAxKSksIHZzaXplKTsKKwkgIERFQ0xfSU5JVElBTCAoVFJFRV9WRUNf RUxUICh0LCAyKSkKKwkgICAgPSBidWlsZF9jb25zdHJ1Y3RvciAoVFJFRV9UWVBFIChUUkVF X1ZFQ19FTFQgKHQsIDIpKSwgdmtpbmQpOworCX0KICAgICAgIGZvciAoaW50IGkgPSAxOyBp IDw9IDI7IGkrKykKLQlpZiAoIVRSRUVfU1RBVElDIChUUkVFX1ZFQ19FTFQgKHQsIGkpKSkK KwlpZiAoZGVlcF9tYXBfY250IHx8ICFUUkVFX1NUQVRJQyAoVFJFRV9WRUNfRUxUICh0LCBp KSkpCiAJICB7CisJICAgIHRyZWUgdG1wID0gVFJFRV9WRUNfRUxUICh0LCBpKTsKKwkgICAg aWYgKGRlZXBfbWFwX2NudCkKKwkgICAgICB7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IChp ID09IDEgPyAiLm9tcF9kYXRhX3NpemVzMCIKKwkJCQkJICAgICA6ICIub21wX2RhdGFfa2lu ZHMwIik7CisJCXRyZWUgdHlwZSA9IChpID09IDEpID8gc2l6ZV90eXBlX25vZGUgOiB0a2lu ZF90eXBlOworCQl0eXBlID0gYnVpbGRfYXJyYXlfdHlwZV9uZWx0cyAodHlwZSwgbWFwX2Nu dCk7CisJCXRyZWUgdmFyID0gY3JlYXRlX3RtcF92YXIgKHR5cGUsIHByZWZpeCk7CisJCURF Q0xfTkFNRUxFU1MgKHZhcikgPSAxOworCQlUUkVFX0FERFJFU1NBQkxFICh2YXIpID0gMTsK KwkJVFJFRV9TVEFUSUMgKHZhcikgPSBUUkVFX1NUQVRJQyAodG1wKTsKKwkJREVDTF9JTklU SUFMICh2YXIpID0gYnVpbGRfY29uc3RydWN0b3IgKHR5cGUsIGkgPT0gMQorCQkJCQkJCSAg ICAgID8gdnNpemUgOiB2a2luZCk7CisJCXRtcCA9IHZhcjsKKwkJVFJFRV9TVEFUSUMgKFRS RUVfVkVDX0VMVCAodCwgaSkpID0gMDsKKwkgICAgICB9CisKIAkgICAgZ2ltcGxlX3NlcSBp bml0bGlzdCA9IE5VTEw7Ci0JICAgIGZvcmNlX2dpbXBsZV9vcGVyYW5kIChidWlsZDEgKERF Q0xfRVhQUiwgdm9pZF90eXBlX25vZGUsCi0JCQkJCSAgVFJFRV9WRUNfRUxUICh0LCBpKSks CisJICAgIGZvcmNlX2dpbXBsZV9vcGVyYW5kIChidWlsZDEgKERFQ0xfRVhQUiwgdm9pZF90 eXBlX25vZGUsIHRtcCksCiAJCQkJICAmaW5pdGxpc3QsIHRydWUsIE5VTExfVFJFRSk7CiAJ ICAgIGdpbXBsZV9zZXFfYWRkX3NlcSAoJmlsaXN0LCBpbml0bGlzdCk7CiAKLQkgICAgdHJl ZSBjbG9iYmVyID0gYnVpbGRfY2xvYmJlciAoVFJFRV9UWVBFIChUUkVFX1ZFQ19FTFQgKHQs IGkpKSk7Ci0JICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZvbGlzdCwKLQkJCQkgZ2ltcGxl X2J1aWxkX2Fzc2lnbiAoVFJFRV9WRUNfRUxUICh0LCBpKSwKLQkJCQkJCSAgICAgIGNsb2Ji ZXIpKTsKKwkgICAgaWYgKGRlZXBfbWFwX2NudCkKKwkgICAgICB7CisJCXRyZWUgdG1wMjsK KwkJdHJlZSBjYWxsID0gYnVpbHRpbl9kZWNsX2V4cGxpY2l0IChCVUlMVF9JTl9NRU1DUFkp OworCQl0bXAyID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAodG1wKSk7CisJCWNhbGwg PSBidWlsZF9jYWxsX2V4cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwgY2FsbCwgMywKKwkJCQkJ ICAgIFRSRUVfVkVDX0VMVCAodCwgaSksCisJCQkJCSAgICBidWlsZF9mb2xkX2FkZHJfZXhw ciAodG1wKSwgdG1wMik7CisJCWdpbXBsaWZ5X2FuZF9hZGQgKGNhbGwsICZpbGlzdCk7CisJ ICAgICAgfQorCisJICAgIGlmICghVFJFRV9TVEFUSUMgKHRtcCkpCisJICAgICAgeworCQl0 cmVlIGNsb2JiZXIgPSBidWlsZF9jbG9iYmVyIChUUkVFX1RZUEUgKHRtcCkpOworCQlnaW1w bGVfc2VxX2FkZF9zdG10ICgmb2xpc3QsCisJCQkJICAgICBnaW1wbGVfYnVpbGRfYXNzaWdu ICh0bXAsIGNsb2JiZXIpKTsKKwkgICAgICB9CisJICAgIGlmIChkZWVwX21hcF9jbnQpCisJ ICAgICAgeworCQl0bXAgPSBUUkVFX1ZFQ19FTFQgKHQsIGkpOworCQl0cmVlIGNhbGwgPSBi dWlsdGluX2RlY2xfZXhwbGljaXQgKEJVSUxUX0lOX0ZSRUUpOworCQljYWxsID0gYnVpbGRf Y2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGNhbGwsIDEsIHRtcCk7CisJCWdpbXBs aWZ5X2FuZF9hZGQgKGNhbGwsICZvbGlzdCk7CisJCXRyZWUgY2xvYmJlciA9IGJ1aWxkX2Ns b2JiZXIgKFRSRUVfVFlQRSAodG1wKSk7CisJCWdpbXBsZV9zZXFfYWRkX3N0bXQgKCZvbGlz dCwKKwkJCQkgICAgIGdpbXBsZV9idWlsZF9hc3NpZ24gKHRtcCwgY2xvYmJlcikpOworCSAg ICAgIH0KIAkgIH0KIAllbHNlIGlmIChvbXBfbWF5YmVfb2ZmbG9hZGVkX2N0eCAoY3R4LT5v dXRlcikpCiAJICB7CkBAIC0xMzQ1Niw3ICsxMzYxOCwxOCBAQCBsb3dlcl9vbXBfdGFyZ2V0 IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAJICAg ICAgfQogCSAgfQogCi0gICAgICB0cmVlIGNsb2JiZXIgPSBidWlsZF9jbG9iYmVyIChjdHgt PnJlY29yZF90eXBlKTsKKyAgICAgIGlmIChkZWVwX21hcF9jbnQpCisJeworCSAgdHJlZSBj YWxsID0gYnVpbHRpbl9kZWNsX2V4cGxpY2l0IChCVUlMVF9JTl9GUkVFKTsKKwkgIGNhbGwg PSBidWlsZF9jYWxsX2V4cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwgY2FsbCwgMSwKKwkJCQkg ICAgICBUUkVFX1ZFQ19FTFQgKHQsIDApKTsKKwkgIGdpbXBsaWZ5X2FuZF9hZGQgKGNhbGws ICZvbGlzdCk7CisKKwkgIGdpbXBsaWZ5X2V4cHIgKCZUUkVFX1ZFQ19FTFQgKHQsIDEpLCAm aWxpc3QsIE5VTEwsIGlzX2dpbXBsZV92YWwsCisJCQkgZmJfcnZhbHVlKTsKKwl9CisKKyAg ICAgIHRyZWUgY2xvYmJlciA9IGJ1aWxkX2Nsb2JiZXIgKFRSRUVfVFlQRSAoY3R4LT5zZW5k ZXJfZGVjbCkpOwogICAgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJm9saXN0LCBnaW1wbGVf YnVpbGRfYXNzaWduIChjdHgtPnNlbmRlcl9kZWNsLAogCQkJCQkJCWNsb2JiZXIpKTsKICAg ICB9CkBAIC0xMzQ2OSwxMSArMTM2NDIsMTYgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxl X3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogICBpZiAob2ZmbG9h ZGVkCiAgICAgICAmJiBjdHgtPnJlY29yZF90eXBlKQogICAgIHsKLSAgICAgIHQgPSBidWls ZF9mb2xkX2FkZHJfZXhwcl9sb2MgKGxvYywgY3R4LT5zZW5kZXJfZGVjbCk7CisgICAgICB0 ID0gY3R4LT5zZW5kZXJfZGVjbDsKKyAgICAgIGlmICghZGVlcF9tYXBfY250KQorCXQgPSBi dWlsZF9mb2xkX2FkZHJfZXhwcl9sb2MgKGxvYywgdCk7CiAgICAgICAvKiBmaXh1cF9jaGls ZF9yZWNvcmRfdHlwZSBtaWdodCBoYXZlIGNoYW5nZWQgcmVjZWl2ZXJfZGVjbCdzIHR5cGUu ICAqLwogICAgICAgdCA9IGZvbGRfY29udmVydF9sb2MgKGxvYywgVFJFRV9UWVBFIChjdHgt PnJlY2VpdmVyX2RlY2wpLCB0KTsKLSAgICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZuZXdf Ym9keSwKLQkgIAkJICAgZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoY3R4LT5yZWNlaXZlcl9kZWNs LCB0KSk7CisgICAgICBpZiAoIUFHR1JFR0FURV9UWVBFX1AgKFRSRUVfVFlQRSAoY3R4LT5z ZW5kZXJfZGVjbCkpKQorCWdpbXBsaWZ5X2Fzc2lnbiAoY3R4LT5yZWNlaXZlcl9kZWNsLCB0 LCAmbmV3X2JvZHkpOworICAgICAgZWxzZQorCWdpbXBsZV9zZXFfYWRkX3N0bXQgKCZuZXdf Ym9keSwKKwkJCSAgICAgZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoY3R4LT5yZWNlaXZlcl9kZWNs LCB0KSk7CiAgICAgfQogICBnaW1wbGVfc2VxX2FkZF9zZXEgKCZuZXdfYm9keSwgZnBsaXN0 KTsKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jX2xvY190ZXN0 XzIyLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY19sb2NfdGVzdF8yMi5mOTAK aW5kZXggOWM0MGIyNmQ4MzAuLmIzNWVkN2NiYjMwIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2NfbG9jX3Rlc3RfMjIuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvY19sb2NfdGVzdF8yMi5mOTAKQEAgLTIwLDQgKzIwLDQgQEAgZW5kCiAh IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAicGFybS5cWzAtOVxdKy5kYXRh ID0gXFwodm9pZCAuXFwpICZcXCgueXl5LlxbMC05XF0rXFwpXFxcWzBcXFxdOyIgMSAib3Jp Z2luYWwiIH0gfQogISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInBhcm0u XFswLTlcXSsuZGF0YSA9IFxcKHZvaWQgLlxcKSAmXFwoLnl5eS5cWzAtOVxdK1xcKVxcXFtE LlxbMC05XF0rIFxcKiA0XFxcXTsiIDEgIm9yaWdpbmFsIiB9IH0KIAotISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkQuXFswLTlcXSsgPSBwYXJtLlxbMC05XF0rLmRh dGE7XFteO10rcHRyXFsxLTRcXSA9IEQuXFswLTlcXSs7IiA0ICJvcmlnaW5hbCIgfSB9Cish IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAicHRyXFsxLTRcXSA9IHBhcm0u XFswLTlcXSsuZGF0YTsiIDQgIm9yaWdpbmFsIiB9IH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvZmluYWxpemVfMjEuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9maW5hbGl6ZV8yMS5mOTAKaW5kZXggNWE4ZmVjM2QxMzkuLjFjMWIwZDI4Mzlh IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2ZpbmFsaXplXzIxLmY5 MAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2ZpbmFsaXplXzIxLmY5MApAQCAt OCw0ICs4LDQgQEAKIGNsYXNzKCopLCBhbGxvY2F0YWJsZSA6OiB2YXIKIGVuZAogCi0hIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAic3RhdGljIHN0cnVjdCBfX3Z0eXBlX19TVEFS IF9fdnRhYl9fU1RBUiA9IHsuX2hhc2g9MCwgLl9zaXplPS4sIC5fZXh0ZW5kcz0wQiwgLl9k ZWZfaW5pdD0wQiwgLl9jb3B5PTBCLCAuX2ZpbmFsPTBCLCAuX2RlYWxsb2NhdGU9MEJ9OyIg Im9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJzdGF0aWMg c3RydWN0IF9fdnR5cGVfX1NUQVIgX192dGFiX19TVEFSID0gey5faGFzaD0wLCAuX3NpemU9 OCwgLl9leHRlbmRzPTBCLCAuX2RlZl9pbml0PTBCLCAuX2NvcHk9MEIsIC5fZmluYWw9MEIs IC5fZGVhbGxvY2F0ZT0wQiwgLl9jYWxsYmFjaz0wQn07IiAib3JpZ2luYWwiIH0gfQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9hcnJheS13aXRoLWR0 LTEuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9hcnJheS13aXRoLWR0 LTEuZjkwCmluZGV4IDEzNmU0MmFjZDU5Li4yNzljNmM3YmJiMiAxMDA2NDQKLS0tIGEvZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9hcnJheS13aXRoLWR0LTEuZjkwCisrKyBi L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvYXJyYXktd2l0aC1kdC0xLmY5MApA QCAtNSwxMSArNSw4IEBAIHR5cGUgdAogZW5kIHR5cGUgdAogCiB0eXBlKHQpLCBhbGxvY2F0 YWJsZSA6OiBiKDopCi0hIHsgZGctbm90ZSB7J2InIGRlY2xhcmVkIGhlcmV9IHt9IHsgdGFy Z2V0ICotKi0qIH0gLi0xIH0KIAogISRhY2MgdXBkYXRlIGhvc3QoYikKLSEgeyBkZy13YXJu aW5nIHsnYlwuZGltXFswXF1cLnVib3VuZCcgaXMgdXNlZCB1bmluaXRpYWxpemVkfSB7fSB7 IHRhcmdldCAqLSotKiB9IC4tMSB9Ci0hIHsgZGctd2FybmluZyB7J2JcLmRpbVxbMFxdXC5s Ym91bmQnIGlzIHVzZWQgdW5pbml0aWFsaXplZH0ge30geyB0YXJnZXQgKi0qLSogfSAuLTIg fQogISRhY2MgdXBkYXRlIGhvc3QoYig6KSkKICEkYWNjIHVwZGF0ZSBob3N0KGIoMSklQSkK ICEkYWNjIHVwZGF0ZSBob3N0KGIoMSklQSg6LDopKQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9wcjkzNDY0LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZ29hY2MvcHI5MzQ2NC5mOTAKaW5kZXggYzkyZjFkM2Q4YjIuLjFjOGY0ZTNh MDhjIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL3ByOTM0 NjQuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcHI5MzQ2NC5m OTAKQEAgLTcsMTAgKzcsNyBAQAogcHJvZ3JhbSBwCiAgICBjaGFyYWN0ZXIgOjogYygyKSA9 ICdhJwogICAgY2hhcmFjdGVyLCBhbGxvY2F0YWJsZSA6OiB6KDopCi0gICAhIHsgZGctbm90 ZSB7J3onIGRlY2xhcmVkIGhlcmV9IHt9IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KICAgICEk YWNjIHBhcmFsbGVsCi0gICAhIHsgZGctd2FybmluZyB7J3pcLmRpbVxbMFxdXC51Ym91bmQn IGlzIHVzZWQgdW5pbml0aWFsaXplZH0ge30geyB0YXJnZXQgKi0qLSogfSAuLTEgfQotICAg ISB7IGRnLXdhcm5pbmcgeyd6XC5kaW1cWzBcXVwubGJvdW5kJyBpcyB1c2VkIHVuaW5pdGlh bGl6ZWR9IHt9IHsgdGFyZ2V0ICotKi0qIH0gLi0yIH0KICAgICEkb21wIHRhcmdldAogICAg eiA9IGMKICAgICEkYWNjIGVuZCBwYXJhbGxlbApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9nb21wL21hcC1hbGxvYy1jb21wLTEuZjkwIGIvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9nb21wL21hcC1hbGxvYy1jb21wLTEuZjkwCmluZGV4IDBjNDQyOTY3 N2JkLi5mNDhhZGRjYmNmNSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9nb21wL21hcC1hbGxvYy1jb21wLTEuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29tcC9tYXAtYWxsb2MtY29tcC0xLmY5MApAQCAtMTAsNSArMTAsNSBAQCB0eXBl IHNjdAogZW5kIHR5cGUKIHR5cGUoc2N0KSB2YXIKIAotISRvbXAgdGFyZ2V0IGVudGVyIGRh dGEgbWFwKHRvOnZhcikgICEgeyBkZy1lcnJvciAiYWxsb2NhdGFibGUgY29tcG9uZW50cyBp cyBub3QgcGVybWl0dGVkIGluIG1hcCBjbGF1c2UiIH0KKyEkb21wIHRhcmdldCBlbnRlciBk YXRhIG1hcCh0bzp2YXIpCiBlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi9hbGxvY2F0YWJsZS1jb21wLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuZm9ydHJhbi9hbGxvY2F0YWJsZS1jb21wLmY5MApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzgzZWNiYTk4YjQKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vYWxsb2NhdGFibGUtY29tcC5m OTAKQEAgLTAsMCArMSw1MyBAQAoraW1wbGljaXQgbm9uZQordHlwZSB0CisgIGludGVnZXIs IGFsbG9jYXRhYmxlIDo6IGEsIGIoOikKK2VuZCB0eXBlIHQKK3R5cGUodCkgOjogeCwgeSwg egoraW50ZWdlciA6OiBpCisKKyEkb21wIHRhcmdldCBtYXAodG86IHgpCisgIGlmIChhbGxv Y2F0ZWQoeCVhKSkgc3RvcCAxCisgIGlmIChhbGxvY2F0ZWQoeCViKSkgc3RvcCAyCishJG9t cCBlbmQgdGFyZ2V0CisKK2FsbG9jYXRlKHglYSwgeCViKC00OjYpKQoreCViKDopID0gWyhp LCBpPS00LDYpXQorCishJG9tcCB0YXJnZXQgbWFwKHRvOiB4KQorICBpZiAoLm5vdC4gYWxs b2NhdGVkKHglYSkpIHN0b3AgMworICBpZiAoLm5vdC4gYWxsb2NhdGVkKHglYikpIHN0b3Ag NAorICBpZiAobGJvdW5kKHglYiwxKSAvPSAtNCkgc3RvcCA1CisgIGlmICh1Ym91bmQoeCVi LDEpIC89IDYpIHN0b3AgNgorICBpZiAoYW55ICh4JWIgLz0gWyhpLCBpPS00LDYpXSkpIHN0 b3AgNworISRvbXAgZW5kIHRhcmdldAorCisKKyEgVGhlIGZvbGxvd2luZyBvbmx5IHdvcmtz IHdpdGggYXJyYXlzIGR1ZSB0bworISBQUiBmb3J0cmFuLzk2NjY4CisKKyEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcCh0bzogeSwgeikKKworISRvbXAgdGFyZ2V0IG1hcCh0bzogeSwg eikKKyAgaWYgKGFsbG9jYXRlZCh5JWIpKSBzdG9wIDgKKyAgaWYgKGFsbG9jYXRlZCh6JWIp KSBzdG9wIDkKKyEkb21wIGVuZCB0YXJnZXQKKworYWxsb2NhdGUoeSViKDUpLCB6JWIoMykp Cit5JWIgPSA0MgoreiViID0gOTkKKworISAoaW1wbGljaXRseSkgJ3RvZnJvbScgbWFwcGVk CishIFBsYW5uZWQgZm9yIE9wZW5NUCA2LjAgKGJ1dCBjb21tb24gZXh0ZW5zaW9uKQorISBP cGVuTVAgPD0gNS4wIHVuY2xlYXIKKyEkb21wIHRhcmdldCBtYXAodG86IHkpCisgIGlmICgu bm90LmFsbG9jYXRlZCh5JWIpKSBzdG9wIDEwCisgIGlmIChhbnkgKHklYiAvPSA0MikpIHN0 b3AgMTEKKyEkb21wIGVuZCB0YXJnZXQKKworISBhbHdheXMgbWFwOiBPcGVuTVAgNS4xIChj bGFyaWZpZWQpCishJG9tcCB0YXJnZXQgbWFwKGFsd2F5cywgdG9mcm9tOiB6KQorICBpZiAo Lm5vdC5hbGxvY2F0ZWQoeiViKSkgc3RvcCAxMgorICBpZiAoYW55ICh6JWIgLz0gOTkpKSBz dG9wIDEzCishJG9tcCBlbmQgdGFyZ2V0CisKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTMuZjkwIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21wLTMuZjkwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZDQ4YzdjYTU5ZAotLS0gL2Rl di9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxs b2MtY29tcC0zLmY5MApAQCAtMCwwICsxLDEyMSBAQAordHlwZSB0MgorICBpbnRlZ2VyIHgs IHksIHoKK2VuZCB0eXBlIHQyCit0eXBlIHQKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjog QQorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBCKDopCisgIHR5cGUodDIpLCBhbGxvY2F0 YWJsZSA6OiBDCisgIHR5cGUodDIpLCBhbGxvY2F0YWJsZSA6OiBEKDosOikKK2VuZCB0eXBl IHQKKwordHlwZSB0MworICB0eXBlKHQpIDo6IFEKKyAgdHlwZSh0KSA6OiBSKDUpCitlbmQg dHlwZQorCit0eXBlKHQpIDo6IHZhciwgdmFyMgordHlwZSh0MykgOjogdmFyMywgdmFyNAor CishIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCishIEFzc2lnbiAr IGFsbG9jYXRlCit2YXIlQSA9IDQ1Cit2YXIlQiA9IFsxLDIsM10KK3ZhciVDID0gdDIoNiw1 LDQpCit2YXIlRCA9IHJlc2hhcGUoW3QyKDEsMiwzKSwgdDIoNCw1LDYpLCB0MigxMSwxMiwx MyksIHQyKDE0LDE1LDE2KV0sIFsyLDJdKQorCishIEFzc2lnbiArIGFsbG9jYXRlCit2YXIy JUEgPSAxNDUKK3ZhcjIlQiA9IFs5OTEsOTkyLDk5M10KK3ZhcjIlQyA9IHQyKDk5Niw5OTUs OTk0KQordmFyMiVEID0gcmVzaGFwZShbdDIoMTk5LDI5OSwzOTkpLCB0Mig0OTksNTk5LDY5 OSksIHQyKDExOTksMTI5OSwxMzk5KSwgdDIoMTQ5OSwxNTk5LDE2OTkpXSwgWzIsMl0pCisK KworISRvbXAgdGFyZ2V0IG1hcCh0bzogdmFyKSBtYXAodG9mcm9tOiB2YXIyKQorICBjYWxs IGZvbyh2YXIsIHZhcjIpCishJG9tcCBlbmQgdGFyZ2V0CisKK2lmICh2YXIyJUEgLz0gNDUp IHN0b3AgOQoraWYgKGFueSAodmFyMiVCIC89IFsxLDIsM10pKSBzdG9wIDEwCitpZiAodmFy MiVDJXggLz0gNikgc3RvcCAxMQoraWYgKHZhcjIlQyV5IC89IDUpIHN0b3AgMTEKK2lmICh2 YXIyJUMleiAvPSA0KSBzdG9wIDExCitpZiAoYW55ICh2YXIyJUQoOiw6KSV4IC89IHJlc2hh cGUoWzEsIDQsIDExLCAxNF0sIFsyLDJdKSkpIHN0b3AgMTIKK2lmIChhbnkgKHZhcjIlRCg6 LDopJXkgLz0gcmVzaGFwZShbMiwgNSwgMTIsIDE1XSwgWzIsMl0pKSkgc3RvcCAxMgoraWYg KGFueSAodmFyMiVEKDosOikleiAvPSByZXNoYXBlKFszLCA2LCAxMywgMTZdLCBbMiwyXSkp KSBzdG9wIDEyCisKKyEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyEgQXNzaWduICsgYWxsb2NhdGUKK3ZhcjMlUSVBID0gNDUKK3ZhcjMlUSVCID0gWzEsMiwz XQordmFyMyVRJUMgPSB0Mig2LDUsNCkKK3ZhcjMlUSVEID0gcmVzaGFwZShbdDIoMSwyLDMp LCB0Mig0LDUsNiksIHQyKDExLDEyLDEzKSwgdDIoMTQsMTUsMTYpXSwgWzIsMl0pCisKK3Zh cjMlUigyKSVBID0gNDUKK3ZhcjMlUigyKSVCID0gWzEsMiwzXQordmFyMyVSKDIpJUMgPSB0 Mig2LDUsNCkKK3ZhcjMlUigyKSVEID0gcmVzaGFwZShbdDIoMSwyLDMpLCB0Mig0LDUsNiks IHQyKDExLDEyLDEzKSwgdDIoMTQsMTUsMTYpXSwgWzIsMl0pCisKKyEgQXNzaWduICsgYWxs b2NhdGUKK3ZhcjQlUSVBID0gMTQ1Cit2YXI0JVElQiA9IFs5OTEsOTkyLDk5M10KK3ZhcjQl USVDID0gdDIoOTk2LDk5NSw5OTQpCit2YXI0JVElRCA9IHJlc2hhcGUoW3QyKDE5OSwyOTks Mzk5KSwgdDIoNDk5LDU5OSw2OTkpLCB0MigxMTk5LDEyOTksMTM5OSksIHQyKDE0OTksMTU5 OSwxNjk5KV0sIFsyLDJdKQorCit2YXI0JVIoMyklQSA9IDE0NQordmFyNCVSKDMpJUIgPSBb OTkxLDk5Miw5OTNdCit2YXI0JVIoMyklQyA9IHQyKDk5Niw5OTUsOTk0KQordmFyNCVSKDMp JUQgPSByZXNoYXBlKFt0MigxOTksMjk5LDM5OSksIHQyKDQ5OSw1OTksNjk5KSwgdDIoMTE5 OSwxMjk5LDEzOTkpLCB0MigxNDk5LDE1OTksMTY5OSldLCBbMiwyXSkKKworISRvbXAgdGFy Z2V0IG1hcCh0bzogdmFyMyVRKSBtYXAodG9mcm9tOiB2YXI0JVEpCisgIGNhbGwgZm9vKHZh cjMlUSwgdmFyNCVRKQorISRvbXAgZW5kIHRhcmdldAorCishJG9tcCB0YXJnZXQgbWFwKHRv OiB2YXIzJVIoMikpIG1hcCh0b2Zyb206IHZhcjQlUigzKSkKKyAgY2FsbCBmb28odmFyMyVS KDIpLCB2YXI0JVIoMykpCishJG9tcCBlbmQgdGFyZ2V0CisKK2lmICh2YXI0JVElQSAvPSA0 NSkgc3RvcCAxMworaWYgKGFueSAodmFyNCVRJUIgLz0gWzEsMiwzXSkpIHN0b3AgMTQKK2lm ICh2YXI0JVElQyV4IC89IDYpIHN0b3AgMTUKK2lmICh2YXI0JVElQyV5IC89IDUpIHN0b3Ag MTUKK2lmICh2YXI0JVElQyV6IC89IDQpIHN0b3AgMTUKK2lmIChhbnkgKHZhcjQlUSVEKDos OikleCAvPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwyXSkpKSBzdG9wIDE2CitpZiAo YW55ICh2YXI0JVElRCg6LDopJXkgLz0gcmVzaGFwZShbMiwgNSwgMTIsIDE1XSwgWzIsMl0p KSkgc3RvcCAxNgoraWYgKGFueSAodmFyNCVRJUQoOiw6KSV6IC89IHJlc2hhcGUoWzMsIDYs IDEzLCAxNl0sIFsyLDJdKSkpIHN0b3AgMTYKKworaWYgKHZhcjQlUigzKSVBIC89IDQ1KSBz dG9wIDE3CitpZiAoYW55ICh2YXI0JVIoMyklQiAvPSBbMSwyLDNdKSkgc3RvcCAxOAoraWYg KHZhcjQlUigzKSVDJXggLz0gNikgc3RvcCAxOQoraWYgKHZhcjQlUigzKSVDJXkgLz0gNSkg c3RvcCAxOQoraWYgKHZhcjQlUigzKSVDJXogLz0gNCkgc3RvcCAxOQoraWYgKGFueSAodmFy NCVSKDMpJUQoOiw6KSV4IC89IHJlc2hhcGUoWzEsIDQsIDExLCAxNF0sIFsyLDJdKSkpIHN0 b3AgMjAKK2lmIChhbnkgKHZhcjQlUigzKSVEKDosOikleSAvPSByZXNoYXBlKFsyLCA1LCAx MiwgMTVdLCBbMiwyXSkpKSBzdG9wIDIwCitpZiAoYW55ICh2YXI0JVIoMyklRCg6LDopJXog Lz0gcmVzaGFwZShbMywgNiwgMTMsIDE2XSwgWzIsMl0pKSkgc3RvcCAyMAorCitjb250YWlu cworICBzdWJyb3V0aW5lIGZvbyh4LCB5KQorICAgIHR5cGUodCkgOjogeCwgeQorICAgIGlm ICh4JUEgLz0gNDUpIHN0b3AgMQorICAgIGlmIChhbnkgKHglQiAvPSBbMSwyLDNdKSkgc3Rv cCAyCisgICAgaWYgKHglQyV4IC89IDYpIHN0b3AgMworICAgIGlmICh4JUMleSAvPSA1KSBz dG9wIDMKKyAgICBpZiAoeCVDJXogLz0gNCkgc3RvcCAzCisgICAgaWYgKGFueSAoeCVEKDos OikleCAvPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwyXSkpKSBzdG9wIDQKKyAgICBp ZiAoYW55ICh4JUQoOiw6KSV5IC89IHJlc2hhcGUoWzIsIDUsIDEyLCAxNV0sIFsyLDJdKSkp IHN0b3AgNAorICAgIGlmIChhbnkgKHglRCg6LDopJXogLz0gcmVzaGFwZShbMywgNiwgMTMs IDE2XSwgWzIsMl0pKSkgc3RvcCA0CisKKyAgICBpZiAoeSVBIC89IDE0NSkgc3RvcCA1Cisg ICAgaWYgKGFueSAoeSVCIC89IFs5OTEsOTkyLDk5M10pKSBzdG9wIDYKKyAgICBpZiAoeSVD JXggLz0gOTk2KSBzdG9wIDcKKyAgICBpZiAoeSVDJXkgLz0gOTk1KSBzdG9wIDcKKyAgICBp ZiAoeSVDJXogLz0gOTk0KSBzdG9wIDcKKyAgICBpZiAoYW55ICh5JUQoOiw6KSV4IC89IHJl c2hhcGUoWzE5OSwgNDk5LCAxMTk5LCAxNDk5XSwgWzIsMl0pKSkgc3RvcCA4CisgICAgaWYg KGFueSAoeSVEKDosOikleSAvPSByZXNoYXBlKFsyOTksIDU5OSwgMTI5OSwgMTU5OV0sIFsy LDJdKSkpIHN0b3AgOAorICAgIGlmIChhbnkgKHklRCg6LDopJXogLz0gcmVzaGFwZShbMzk5 LCA2OTksIDEzOTksIDE2OTldLCBbMiwyXSkpKSBzdG9wIDgKKworICAgIHklQSA9IHglQQor ICAgIHklQig6KSA9IHglQgorICAgIHklQyA9IHglQworICAgIHklRCg6LDopID0geCVEKDos OikKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Zm9ydHJhbi9tYXAtYWxsb2MtY29tcC00LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi9tYXAtYWxsb2MtY29tcC00LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZmI5ODU5ZDk5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNC5mOTAKQEAg LTAsMCArMSwxMjQgQEAKK3R5cGUgdDIKKyAgaW50ZWdlciB4LCB5LCB6CitlbmQgdHlwZSB0 MgordHlwZSB0CisgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IEEKKyAgaW50ZWdlciwgYWxs b2NhdGFibGUgOjogQig6KQorICB0eXBlKHQyKSwgYWxsb2NhdGFibGUgOjogQworICB0eXBl KHQyKSwgYWxsb2NhdGFibGUgOjogRCg6LDopCitlbmQgdHlwZSB0CisKK3R5cGUgdDMKKyAg dHlwZSh0KSA6OiBRCisgIHR5cGUodCkgOjogUig1KQorZW5kIHR5cGUKKwordHlwZSh0KSA6 OiB2YXIsIHZhcjIKK3R5cGUodDMpIDo6IHZhcjMsIHZhcjQKKworISAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorISBBc3NpZ24gKyBhbGxvY2F0ZQordmFyJUEg PSA0NQordmFyJUIgPSBbMSwyLDNdCit2YXIlQyA9IHQyKDYsNSw0KQordmFyJUQgPSByZXNo YXBlKFt0MigxLDIsMyksIHQyKDQsNSw2KSwgdDIoMTEsMTIsMTMpLCB0MigxNCwxNSwxNild LCBbMiwyXSkKKworISBBc3NpZ24gKyBhbGxvY2F0ZQordmFyMiVBID0gMTQ1Cit2YXIyJUIg PSBbOTkxLDk5Miw5OTNdCit2YXIyJUMgPSB0Mig5OTYsOTk1LDk5NCkKK3ZhcjIlRCA9IHJl c2hhcGUoW3QyKDE5OSwyOTksMzk5KSwgdDIoNDk5LDU5OSw2OTkpLCB0MigxMTk5LDEyOTks MTM5OSksIHQyKDE0OTksMTU5OSwxNjk5KV0sIFsyLDJdKQorCisKKyEkb21wIHRhcmdldCBt YXAodG86IHZhciVBLCB2YXIlQiwgdmFyJUMsIHZhciVEKSAmCishJG9tcCYgICAgICAgbWFw KHRvZnJvbTogdmFyMiVBLCB2YXIyJUIsIHZhcjIlQywgdmFyMiVEKQorICBjYWxsIGZvbyh2 YXIsIHZhcjIpCishJG9tcCBlbmQgdGFyZ2V0CisKK2lmICh2YXIyJUEgLz0gNDUpIHN0b3Ag OQoraWYgKGFueSAodmFyMiVCIC89IFsxLDIsM10pKSBzdG9wIDEwCitpZiAodmFyMiVDJXgg Lz0gNikgc3RvcCAxMQoraWYgKHZhcjIlQyV5IC89IDUpIHN0b3AgMTEKK2lmICh2YXIyJUMl eiAvPSA0KSBzdG9wIDExCitpZiAoYW55ICh2YXIyJUQoOiw6KSV4IC89IHJlc2hhcGUoWzEs IDQsIDExLCAxNF0sIFsyLDJdKSkpIHN0b3AgMTIKK2lmIChhbnkgKHZhcjIlRCg6LDopJXkg Lz0gcmVzaGFwZShbMiwgNSwgMTIsIDE1XSwgWzIsMl0pKSkgc3RvcCAxMgoraWYgKGFueSAo dmFyMiVEKDosOikleiAvPSByZXNoYXBlKFszLCA2LCAxMywgMTZdLCBbMiwyXSkpKSBzdG9w IDEyCisKKyEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyEgQXNz aWduICsgYWxsb2NhdGUKK3ZhcjMlUSVBID0gNDUKK3ZhcjMlUSVCID0gWzEsMiwzXQordmFy MyVRJUMgPSB0Mig2LDUsNCkKK3ZhcjMlUSVEID0gcmVzaGFwZShbdDIoMSwyLDMpLCB0Mig0 LDUsNiksIHQyKDExLDEyLDEzKSwgdDIoMTQsMTUsMTYpXSwgWzIsMl0pCisKK3ZhcjMlUigy KSVBID0gNDUKK3ZhcjMlUigyKSVCID0gWzEsMiwzXQordmFyMyVSKDIpJUMgPSB0Mig2LDUs NCkKK3ZhcjMlUigyKSVEID0gcmVzaGFwZShbdDIoMSwyLDMpLCB0Mig0LDUsNiksIHQyKDEx LDEyLDEzKSwgdDIoMTQsMTUsMTYpXSwgWzIsMl0pCisKKyEgQXNzaWduICsgYWxsb2NhdGUK K3ZhcjQlUSVBID0gMTQ1Cit2YXI0JVElQiA9IFs5OTEsOTkyLDk5M10KK3ZhcjQlUSVDID0g dDIoOTk2LDk5NSw5OTQpCit2YXI0JVElRCA9IHJlc2hhcGUoW3QyKDE5OSwyOTksMzk5KSwg dDIoNDk5LDU5OSw2OTkpLCB0MigxMTk5LDEyOTksMTM5OSksIHQyKDE0OTksMTU5OSwxNjk5 KV0sIFsyLDJdKQorCit2YXI0JVIoMyklQSA9IDE0NQordmFyNCVSKDMpJUIgPSBbOTkxLDk5 Miw5OTNdCit2YXI0JVIoMyklQyA9IHQyKDk5Niw5OTUsOTk0KQordmFyNCVSKDMpJUQgPSBy ZXNoYXBlKFt0MigxOTksMjk5LDM5OSksIHQyKDQ5OSw1OTksNjk5KSwgdDIoMTE5OSwxMjk5 LDEzOTkpLCB0MigxNDk5LDE1OTksMTY5OSldLCBbMiwyXSkKKworISRvbXAgdGFyZ2V0IG1h cCh0bzogdmFyMyVRJUEsIHZhcjMlUSVCLCB2YXIzJVElQywgdmFyMyVRJUQpICYKKyEkb21w JiAgICAgICBtYXAodG9mcm9tOiB2YXI0JVElQSwgdmFyNCVRJUIsIHZhcjQlUSVDLCB2YXI0 JVElRCkKKyAgY2FsbCBmb28odmFyMyVRLCB2YXI0JVEpCishJG9tcCBlbmQgdGFyZ2V0CisK K2lmICh2YXI0JVElQSAvPSA0NSkgc3RvcCAxMworaWYgKGFueSAodmFyNCVRJUIgLz0gWzEs MiwzXSkpIHN0b3AgMTQKK2lmICh2YXI0JVElQyV4IC89IDYpIHN0b3AgMTUKK2lmICh2YXI0 JVElQyV5IC89IDUpIHN0b3AgMTUKK2lmICh2YXI0JVElQyV6IC89IDQpIHN0b3AgMTUKK2lm IChhbnkgKHZhcjQlUSVEKDosOikleCAvPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwy XSkpKSBzdG9wIDE2CitpZiAoYW55ICh2YXI0JVElRCg6LDopJXkgLz0gcmVzaGFwZShbMiwg NSwgMTIsIDE1XSwgWzIsMl0pKSkgc3RvcCAxNgoraWYgKGFueSAodmFyNCVRJUQoOiw6KSV6 IC89IHJlc2hhcGUoWzMsIDYsIDEzLCAxNl0sIFsyLDJdKSkpIHN0b3AgMTYKKworISRvbXAg dGFyZ2V0IG1hcCh0bzogdmFyMyVSKDIpJUEsIHZhcjMlUigyKSVCLCB2YXIzJVIoMiklQywg dmFyMyVSKDIpJUQpICYKKyEkb21wJiAgICAgICBtYXAodG9mcm9tOiB2YXI0JVIoMyklQSwg dmFyNCVSKDMpJUIsIHZhcjQlUigzKSVDLCB2YXI0JVIoMyklRCkKKyAgY2FsbCBmb28odmFy MyVSKDIpLCB2YXI0JVIoMykpCishJG9tcCBlbmQgdGFyZ2V0CisKK2lmICh2YXI0JVIoMykl QSAvPSA0NSkgc3RvcCAxNworaWYgKGFueSAodmFyNCVSKDMpJUIgLz0gWzEsMiwzXSkpIHN0 b3AgMTgKK2lmICh2YXI0JVIoMyklQyV4IC89IDYpIHN0b3AgMTkKK2lmICh2YXI0JVIoMykl QyV5IC89IDUpIHN0b3AgMTkKK2lmICh2YXI0JVIoMyklQyV6IC89IDQpIHN0b3AgMTkKK2lm IChhbnkgKHZhcjQlUigzKSVEKDosOikleCAvPSByZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBb MiwyXSkpKSBzdG9wIDIwCitpZiAoYW55ICh2YXI0JVIoMyklRCg6LDopJXkgLz0gcmVzaGFw ZShbMiwgNSwgMTIsIDE1XSwgWzIsMl0pKSkgc3RvcCAyMAoraWYgKGFueSAodmFyNCVSKDMp JUQoOiw6KSV6IC89IHJlc2hhcGUoWzMsIDYsIDEzLCAxNl0sIFsyLDJdKSkpIHN0b3AgMjAK KworY29udGFpbnMKKyAgc3Vicm91dGluZSBmb28oeCwgeSkKKyAgICB0eXBlKHQpIDo6IHgs IHkKKyAgICBpZiAoeCVBIC89IDQ1KSBzdG9wIDEKKyAgICBpZiAoYW55ICh4JUIgLz0gWzEs MiwzXSkpIHN0b3AgMgorICAgIGlmICh4JUMleCAvPSA2KSBzdG9wIDMKKyAgICBpZiAoeCVD JXkgLz0gNSkgc3RvcCAzCisgICAgaWYgKHglQyV6IC89IDQpIHN0b3AgMworICAgIGlmIChh bnkgKHglRCg6LDopJXggLz0gcmVzaGFwZShbMSwgNCwgMTEsIDE0XSwgWzIsMl0pKSkgc3Rv cCA0CisgICAgaWYgKGFueSAoeCVEKDosOikleSAvPSByZXNoYXBlKFsyLCA1LCAxMiwgMTVd LCBbMiwyXSkpKSBzdG9wIDQKKyAgICBpZiAoYW55ICh4JUQoOiw6KSV6IC89IHJlc2hhcGUo WzMsIDYsIDEzLCAxNl0sIFsyLDJdKSkpIHN0b3AgNAorCisgICAgaWYgKHklQSAvPSAxNDUp IHN0b3AgNQorICAgIGlmIChhbnkgKHklQiAvPSBbOTkxLDk5Miw5OTNdKSkgc3RvcCA2Cisg ICAgaWYgKHklQyV4IC89IDk5Nikgc3RvcCA3CisgICAgaWYgKHklQyV5IC89IDk5NSkgc3Rv cCA3CisgICAgaWYgKHklQyV6IC89IDk5NCkgc3RvcCA3CisgICAgaWYgKGFueSAoeSVEKDos OikleCAvPSByZXNoYXBlKFsxOTksIDQ5OSwgMTE5OSwgMTQ5OV0sIFsyLDJdKSkpIHN0b3Ag OAorICAgIGlmIChhbnkgKHklRCg6LDopJXkgLz0gcmVzaGFwZShbMjk5LCA1OTksIDEyOTks IDE1OTldLCBbMiwyXSkpKSBzdG9wIDgKKyAgICBpZiAoYW55ICh5JUQoOiw6KSV6IC89IHJl c2hhcGUoWzM5OSwgNjk5LCAxMzk5LCAxNjk5XSwgWzIsMl0pKSkgc3RvcCA4CisKKyAgICB5 JUEgPSB4JUEKKyAgICB5JUIoOikgPSB4JUIKKyAgICB5JUMgPSB4JUMKKyAgICB5JUQoOiw6 KSA9IHglRCg6LDopCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNS5mOTAgYi9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNS5mOTAKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIyZTM2YjJhNGI4Ci0tLSAvZGV2L251bGwK KysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL21hcC1hbGxvYy1jb21w LTUuZjkwCkBAIC0wLDAgKzEsNTMgQEAKK2ltcGxpY2l0IG5vbmUKK3R5cGUgdAorICBpbnRl Z2VyLCBhbGxvY2F0YWJsZSA6OiBhLCBiKDopCitlbmQgdHlwZSB0Cit0eXBlKHQpIDo6IHgs IHksIHoKK2ludGVnZXIgOjogaQorCishJG9tcCB0YXJnZXQKKyAgaWYgKGFsbG9jYXRlZCh4 JWEpKSBzdG9wIDEKKyAgaWYgKGFsbG9jYXRlZCh4JWIpKSBzdG9wIDIKKyEkb21wIGVuZCB0 YXJnZXQKKworYWxsb2NhdGUoeCVhLCB4JWIoLTQ6NikpCit4JWIoOikgPSBbKGksIGk9LTQs NildCisKKyEkb21wIHRhcmdldAorICBpZiAoLm5vdC4gYWxsb2NhdGVkKHglYSkpIHN0b3Ag MworICBpZiAoLm5vdC4gYWxsb2NhdGVkKHglYikpIHN0b3AgNAorICBpZiAobGJvdW5kKHgl YiwxKSAvPSAtNCkgc3RvcCA1CisgIGlmICh1Ym91bmQoeCViLDEpIC89IDYpIHN0b3AgNgor ICBpZiAoYW55ICh4JWIgLz0gWyhpLCBpPS00LDYpXSkpIHN0b3AgNworISRvbXAgZW5kIHRh cmdldAorCisKKyEgVGhlIGZvbGxvd2luZyBvbmx5IHdvcmtzIHdpdGggYXJyYXlzIGR1ZSB0 bworISBQUiBmb3J0cmFuLzk2NjY4CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0 bzogeSwgeikKKworISRvbXAgdGFyZ2V0CisgIGlmIChhbGxvY2F0ZWQoeSViKSkgc3RvcCA4 CisgIGlmIChhbGxvY2F0ZWQoeiViKSkgc3RvcCA5CishJG9tcCBlbmQgdGFyZ2V0CisKK2Fs bG9jYXRlKHklYig1KSwgeiViKDMpKQoreSViID0gNDIKK3olYiA9IDk5CisKKyEgKGltcGxp Y2l0bHkpICd0b2Zyb20nIG1hcHBlZAorISBQbGFubmVkIGZvciBPcGVuTVAgNi4wIChidXQg Y29tbW9uIGV4dGVuc2lvbikKKyEgT3Blbk1QIDw9IDUuMCB1bmNsZWFyCishJG9tcCB0YXJn ZXQKKyAgaWYgKC5ub3QuYWxsb2NhdGVkKHklYikpIHN0b3AgMTAKKyAgaWYgKGFueSAoeSVi IC89IDQyKSkgc3RvcCAxMQorISRvbXAgZW5kIHRhcmdldAorCishIGFsd2F5cyBtYXA6IE9w ZW5NUCA1LjEgKGNsYXJpZmllZCkKKyEkb21wIHRhcmdldCBtYXAoYWx3YXlzLCB0b2Zyb206 IHopCisgIGlmICgubm90LmFsbG9jYXRlZCh6JWIpKSBzdG9wIDEyCisgIGlmIChhbnkgKHol YiAvPSA5OSkpIHN0b3AgMTMKKyEkb21wIGVuZCB0YXJnZXQKKworZW5kCmRpZmYgLS1naXQg YS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNi5m OTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAt Ni5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjliYzAwMDhm NTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL21hcC1hbGxvYy1jb21wLTYuZjkwCkBAIC0wLDAgKzEsMzA4IEBACishIE5PVEU6IFRo aXMgY29kZSB1c2VzIFBPSU5URVIuCishIFdoaWxlIG1hcChwLCB2YXIlcCkgZXRjLiBtYXBz IHRoZSBwdHIvcHRyIGNvbXAgcCAvIHZhciVwIChpbmNsLiBhbGxvY2F0YWJsZSBjb21wcyks CishIG1hcCh2YXIpIGRvZXMgbm90IG1hcCB2YXIlcC4KKwordXNlIGlzb19jX2JpbmRpbmcK K2ltcGxpY2l0IG5vbmUKK3R5cGUgdDIKKyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogeCwg eSwgegorZW5kIHR5cGUgdDIKK3R5cGUgdAorICBpbnRlZ2VyLCBwb2ludGVyIDo6IEEgPT4g bnVsbCgpCisgIGludGVnZXIsIHBvaW50ZXIgOjogQig6KSA9PiBudWxsKCkKKyAgdHlwZSh0 MiksIHBvaW50ZXIgOjogQyA9PiBudWxsKCkKKyAgdHlwZSh0MiksIHBvaW50ZXIgOjogRCg6 LDopID0+IG51bGwoKQorZW5kIHR5cGUgdAorCit0eXBlIHQzCisgIHR5cGUodCkgOjogUQor ICB0eXBlKHQpIDo6IFIoNSkKK2VuZCB0eXBlCisKK3R5cGUodCkgOjogdmFyLCB2YXIyCit0 eXBlKHQzKSA6OiB2YXIzLCB2YXI0CitpbnRlZ2VyKGNfaW50cHRyX3QpIDo6IGlwdHIKKwor ISAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorISBBc3NpZ24gKyBh bGxvY2F0ZQorYWxsb2NhdGUgKHZhciVBLCBzb3VyY2U9NDUpCithbGxvY2F0ZSAodmFyJUIo MyksIHNvdXJjZT1bMSwyLDNdKQorYWxsb2NhdGUgKHZhciVDKQordmFyJUMleCA9IDY7IHZh ciVDJXkgPSA1OyB2YXIlQyV6ID0gNCAKK2FsbG9jYXRlICh2YXIlRCgyLDIpKQordmFyJUQo MSwxKSV4ID0gMQordmFyJUQoMSwxKSV5ID0gMgordmFyJUQoMSwxKSV6ID0gMwordmFyJUQo MiwxKSV4ID0gNAordmFyJUQoMiwxKSV5ID0gNQordmFyJUQoMiwxKSV6ID0gNgordmFyJUQo MSwyKSV4ID0gMTEKK3ZhciVEKDEsMikleSA9IDEyCit2YXIlRCgxLDIpJXogPSAxMwordmFy JUQoMiwyKSV4ID0gMTQKK3ZhciVEKDIsMikleSA9IDE1Cit2YXIlRCgyLDIpJXogPSAxNgor CishIEFzc2lnbiArIGFsbG9jYXRlCithbGxvY2F0ZSAodmFyMiVBLCBzb3VyY2U9MTQ1KQor YWxsb2NhdGUgKHZhcjIlQiwgc291cmNlPVs5OTEsOTkyLDk5M10pCithbGxvY2F0ZSAodmFy MiVDKQordmFyMiVDJXggPSA5OTY7IHZhcjIlQyV5ID0gOTk1OyB2YXIyJUMleiA9IDk5NCAK K2FsbG9jYXRlICh2YXIyJUQoMiwyKSkKK3ZhcjIlRCgxLDEpJXggPSAxOTkKK3ZhcjIlRCgx LDEpJXkgPSAyOTkKK3ZhcjIlRCgxLDEpJXogPSAzOTkKK3ZhcjIlRCgyLDEpJXggPSA0OTkK K3ZhcjIlRCgyLDEpJXkgPSA1OTkKK3ZhcjIlRCgyLDEpJXogPSA2OTkKK3ZhcjIlRCgxLDIp JXggPSAxMTk5Cit2YXIyJUQoMSwyKSV5ID0gMTI5OQordmFyMiVEKDEsMikleiA9IDEzOTkK K3ZhcjIlRCgyLDIpJXggPSAxNDk5Cit2YXIyJUQoMiwyKSV5ID0gMTU5OQordmFyMiVEKDIs MikleiA9IDE2OTkKKworYmxvY2sKKyAgaW50ZWdlcihjX2ludHB0cl90KSA6OiBsb2NfYSwg bG9jX2IsIGxvY19jLCBsb2NfZCwgbG9jMl9hLCBsb2MyX2IsIGxvYzJfYywgbG9jMl9kCisg IGxvY19hID0gbG9jICh2YXIlYSkKKyAgbG9jX2IgPSBsb2MgKHZhciViKQorICBsb2NfYyA9 IGxvYyAodmFyJWQpCisgIGxvY19kID0gbG9jICh2YXIlZCkKKyAgbG9jMl9hID0gbG9jICh2 YXIyJWEpCisgIGxvYzJfYiA9IGxvYyAodmFyMiViKQorICBsb2MyX2MgPSBsb2MgKHZhcjIl YykKKyAgbG9jMl9kID0gbG9jICh2YXIyJWQpCisgICEgdmFyL3ZhcjIgYXJlIG1hcHBlZCwg YnV0IHRoZSBwb2ludGVyIGNvbXBvbmVudHMgYXJlbid0CisgICEkb21wIHRhcmdldCBtYXAo dG86IHZhcikgbWFwKHRvZnJvbTogdmFyMikKKyAgICBpZiAobG9jX2EgLz0gbG9jICh2YXIl YSkpIHN0b3AgMzEKKyAgICBpZiAobG9jX2IgLz0gbG9jICh2YXIlYikpIHN0b3AgMzIKKyAg ICBpZiAobG9jX2MgLz0gbG9jICh2YXIlZCkpIHN0b3AgMzMKKyAgICBpZiAobG9jX2QgLz0g bG9jICh2YXIlZCkpIHN0b3AgMzQKKyAgICBpZiAobG9jMl9hIC89IGxvYyAodmFyMiVhKSkg c3RvcCAzNQorICAgIGlmIChsb2MyX2IgLz0gbG9jICh2YXIyJWIpKSBzdG9wIDM2CisgICAg aWYgKGxvYzJfYyAvPSBsb2MgKHZhcjIlYykpIHN0b3AgMzcKKyAgICBpZiAobG9jMl9kIC89 IGxvYyAodmFyMiVkKSkgc3RvcCAzOAorICAhJG9tcCBlbmQgdGFyZ2V0CisgIGlmIChsb2Nf YSAvPSBsb2MgKHZhciVhKSkgc3RvcCA0MQorICBpZiAobG9jX2IgLz0gbG9jICh2YXIlYikp IHN0b3AgNDIKKyAgaWYgKGxvY19jIC89IGxvYyAodmFyJWQpKSBzdG9wIDQzCisgIGlmIChs b2NfZCAvPSBsb2MgKHZhciVkKSkgc3RvcCA0NAorICBpZiAobG9jMl9hIC89IGxvYyAodmFy MiVhKSkgc3RvcCA0NQorICBpZiAobG9jMl9iIC89IGxvYyAodmFyMiViKSkgc3RvcCA0Ngor ICBpZiAobG9jMl9jIC89IGxvYyAodmFyMiVjKSkgc3RvcCA0NworICBpZiAobG9jMl9kIC89 IGxvYyAodmFyMiVkKSkgc3RvcCA0OAorZW5kIGJsb2NrCisKK2Jsb2NrCisgICEgTWFwIG9u bHkgKGFsbCkgY29tcG9uZW50cywgYnV0IHRoaXMgbWFwcyBhbHNvIHRoZSBhbGxvYyBjb21w cworICAhJG9tcCB0YXJnZXQgbWFwKHRvOiB2YXIlYSwgdmFyJWIsIHZhciVjLCB2YXIlZCkg bWFwKHRvZnJvbTogdmFyMiVhLCB2YXIyJWIsIHZhcjIlYywgdmFyMiVkKQorICAgIGNhbGwg Zm9vICh2YXIsdmFyMikKKyAgISRvbXAgZW5kIHRhcmdldAorZW5kIGJsb2NrCisKK2lmICh2 YXIyJUEgLz0gNDUpIHN0b3AgOQoraWYgKGFueSAodmFyMiVCIC89IFsxLDIsM10pKSBzdG9w IDEwCitpZiAodmFyMiVDJXggLz0gNikgc3RvcCAxMQoraWYgKHZhcjIlQyV5IC89IDUpIHN0 b3AgMTEKK2lmICh2YXIyJUMleiAvPSA0KSBzdG9wIDExCitibG9jaworICBpbnRlZ2VyIDo6 IHRtcF94KDIsMiksIHRtcF95KDIsMiksIHRtcF96KDIsMiksIGksIGoKKyAgdG1wX3ggPSBy ZXNoYXBlKFsxLCA0LCAxMSwgMTRdLCBbMiwyXSkKKyAgdG1wX3kgPSByZXNoYXBlKFsyLCA1 LCAxMiwgMTVdLCBbMiwyXSkKKyAgdG1wX3ogPSByZXNoYXBlKFszLCA2LCAxMywgMTZdLCBb MiwyXSkKKyAgZG8gaiA9IDEsIDIKKyAgICBkbyBpID0gMSwgMgorICAgICAgaWYgKHZhcjIl RChpLGopJXggLz0gdG1wX3goaSxqKSkgc3RvcCAxMgorICAgICAgaWYgKHZhcjIlRChpLGop JXkgLz0gdG1wX3koaSxqKSkgc3RvcCAxMgorICAgICAgaWYgKHZhcjIlRChpLGopJXogLz0g dG1wX3ooaSxqKSkgc3RvcCAxMgorICAgIGVuZCBkbworICBlbmQgZG8KK2VuZCBibG9jawor CishIEV4dHJhIGRlYWxsb2NhdGVzIGR1ZSB0byBQUiBmb3J0cmFuLzEwNDY5NworZGVhbGxv Y2F0ZSh2YXIlQyV4LCB2YXIlQyV5LCB2YXIlQyV6KQorZGVhbGxvY2F0ZSh2YXIlRCgxLDEp JXgsIHZhciVEKDEsMSkleSwgdmFyJUQoMSwxKSV6KQorZGVhbGxvY2F0ZSh2YXIlRCgyLDEp JXgsIHZhciVEKDIsMSkleSwgdmFyJUQoMiwxKSV6KQorZGVhbGxvY2F0ZSh2YXIlRCgxLDIp JXgsIHZhciVEKDEsMikleSwgdmFyJUQoMSwyKSV6KQorZGVhbGxvY2F0ZSh2YXIlRCgyLDIp JXgsIHZhciVEKDIsMikleSwgdmFyJUQoMiwyKSV6KQorZGVhbGxvY2F0ZSh2YXIlQSwgdmFy JUIsIHZhciVDLCB2YXIlRCkKKworZGVhbGxvY2F0ZSh2YXIyJUMleCwgdmFyMiVDJXksIHZh cjIlQyV6KQorZGVhbGxvY2F0ZSh2YXIyJUQoMSwxKSV4LCB2YXIyJUQoMSwxKSV5LCB2YXIy JUQoMSwxKSV6KQorZGVhbGxvY2F0ZSh2YXIyJUQoMiwxKSV4LCB2YXIyJUQoMiwxKSV5LCB2 YXIyJUQoMiwxKSV6KQorZGVhbGxvY2F0ZSh2YXIyJUQoMSwyKSV4LCB2YXIyJUQoMSwyKSV5 LCB2YXIyJUQoMSwyKSV6KQorZGVhbGxvY2F0ZSh2YXIyJUQoMiwyKSV4LCB2YXIyJUQoMiwy KSV5LCB2YXIyJUQoMiwyKSV6KQorZGVhbGxvY2F0ZSh2YXIyJUEsIHZhcjIlQiwgdmFyMiVD LCB2YXIyJUQpCisKKyEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyEgQXNzaWduICsgYWxsb2NhdGUKK2FsbG9jYXRlICh2YXIzJVElQSwgc291cmNlPTQ1KQor YWxsb2NhdGUgKHZhcjMlUSVCLCBzb3VyY2U9WzEsMiwzXSkKK2FsbG9jYXRlICh2YXIzJVEl Qywgc291cmNlPXQyKDYsNSw0KSkKK2FsbG9jYXRlICh2YXIzJVElRCgyLDIpKQordmFyMyVR JUQoMSwxKSA9IHQyKDEsMiwzKQordmFyMyVRJUQoMiwxKSA9IHQyKDQsNSw2KQordmFyMyVR JUQoMSwyKSA9IHQyKDExLDEyLDEzKQordmFyMyVRJUQoMiwyKSA9IHQyKDE0LDE1LDE2KQor CithbGxvY2F0ZSAodmFyMyVSKDIpJUEsIHNvdXJjZT00NSkKK2FsbG9jYXRlICh2YXIzJVIo MiklQiwgc291cmNlPVsxLDIsM10pCithbGxvY2F0ZSAodmFyMyVSKDIpJUMsIHNvdXJjZT10 Mig2LDUsNCkpCithbGxvY2F0ZSAodmFyMyVSKDIpJUQoMiwyKSkKK3ZhcjMlUigyKSVEKDEs MSkgPSB0MigxLDIsMykKK3ZhcjMlUigyKSVEKDIsMSkgPSB0Mig0LDUsNikKK3ZhcjMlUigy KSVEKDEsMikgPSB0MigxMSwxMiwxMykKK3ZhcjMlUigyKSVEKDIsMikgPSB0MigxNCwxNSwx NikKKworISBBc3NpZ24gKyBhbGxvY2F0ZQorYWxsb2NhdGUgKHZhcjQlUSVBLCBzb3VyY2U9 MTQ1KQorYWxsb2NhdGUgKHZhcjQlUSVCLCBzb3VyY2U9Wzk5MSw5OTIsOTkzXSkKK2FsbG9j YXRlICh2YXI0JVElQywgc291cmNlPXQyKDk5Niw5OTUsOTk0KSkKK2FsbG9jYXRlICh2YXI0 JVElRCgyLDIpKQordmFyNCVRJUQoMSwxKSA9IHQyKDE5OSwyOTksMzk5KQordmFyNCVRJUQo MiwxKSA9IHQyKDQ5OSw1OTksNjk5KQordmFyNCVRJUQoMSwyKSA9IHQyKDExOTksMTI5OSwx Mzk5KQordmFyNCVRJUQoMiwyKSA9IHQyKDE0OTksMTU5OSwxNjk5KQorCithbGxvY2F0ZSAo dmFyNCVSKDMpJUEsIHNvdXJjZT0xNDUpCithbGxvY2F0ZSAodmFyNCVSKDMpJUIsIHNvdXJj ZT1bOTkxLDk5Miw5OTNdKQorYWxsb2NhdGUgKHZhcjQlUigzKSVDLCBzb3VyY2U9dDIoOTk2 LDk5NSw5OTQpKQorYWxsb2NhdGUgKHZhcjQlUigzKSVEKDIsMikpCit2YXI0JVIoMyklRCgx LDEpID0gdDIoMTk5LDI5OSwzOTkpCit2YXI0JVIoMyklRCgyLDEpID0gdDIoNDk5LDU5OSw2 OTkpCit2YXI0JVIoMyklRCgxLDIpID0gdDIoMTE5OSwxMjk5LDEzOTkpCit2YXI0JVIoMykl RCgyLDIpID0gdDIoMTQ5OSwxNTk5LDE2OTkpCisKKyEkb21wIHRhcmdldCBtYXAodG86IHZh cjMlUSVBLCB2YXIzJVElQiwgdmFyMyVRJUMsIHZhcjMlUSVEKSAmCishJG9tcCYgICAgICAg bWFwKHRvZnJvbTogdmFyNCVRJUEsIHZhcjQlUSVCLCB2YXI0JVElQywgdmFyNCVRJUQpCisg IGNhbGwgZm9vKHZhcjMlUSwgdmFyNCVRKQorISRvbXAgZW5kIHRhcmdldAorCitpcHRyID0g bG9jKHZhcjMlUigyKSVBKQorCishJG9tcCB0YXJnZXQgbWFwKHRvOiB2YXIzJVIoMiklQSwg dmFyMyVSKDIpJUIsIHZhcjMlUigyKSVDLCB2YXIzJVIoMiklRCkgJgorISRvbXAmICAgICAg IG1hcCh0b2Zyb206IHZhcjQlUigzKSVBLCB2YXI0JVIoMyklQiwgdmFyNCVSKDMpJUMsIHZh cjQlUigzKSVEKQorICBjYWxsIGZvbyh2YXIzJVIoMiksIHZhcjQlUigzKSkKKyEkb21wIGVu ZCB0YXJnZXQKKworaWYgKHZhcjQlUSVBIC89IDQ1KSBzdG9wIDEzCitpZiAoYW55ICh2YXI0 JVElQiAvPSBbMSwyLDNdKSkgc3RvcCAxNAoraWYgKHZhcjQlUSVDJXggLz0gNikgc3RvcCAx NQoraWYgKHZhcjQlUSVDJXkgLz0gNSkgc3RvcCAxNQoraWYgKHZhcjQlUSVDJXogLz0gNCkg c3RvcCAxNQorYmxvY2sKKyAgaW50ZWdlciA6OiB0bXBfeCgyLDIpLCB0bXBfeSgyLDIpLCB0 bXBfeigyLDIpLCBpLCBqCisgIHRtcF94ID0gcmVzaGFwZShbMSwgNCwgMTEsIDE0XSwgWzIs Ml0pCisgIHRtcF95ID0gcmVzaGFwZShbMiwgNSwgMTIsIDE1XSwgWzIsMl0pCisgIHRtcF96 ID0gcmVzaGFwZShbMywgNiwgMTMsIDE2XSwgWzIsMl0pCisgIGRvIGogPSAxLCAyCisgICAg ZG8gaSA9IDEsIDIKKyAgICAgIGlmICh2YXI0JVElRChpLGopJXggLz0gdG1wX3goaSxqKSkg c3RvcCAxNgorICAgICAgaWYgKHZhcjQlUSVEKGksaikleSAvPSB0bXBfeShpLGopKSBzdG9w IDE2CisgICAgICBpZiAodmFyNCVRJUQoaSxqKSV6IC89IHRtcF96KGksaikpIHN0b3AgMTYK KyAgICBlbmQgZG8KKyAgZW5kIGRvCitlbmQgYmxvY2sKKworISBDZi4gUFIgZm9ydHJhbi8x MDQ2OTYKKyEgeyBkZy1vdXRwdXQgInZhbGlkIG1hcHBpbmcsIE9LIiB7IHhmYWlsIHsgb2Zm bG9hZF9kZXZpY2Vfbm9uc2hhcmVkX2FzIH0gfSB9CitpZiAoaXB0ciAvPSBsb2ModmFyMyVS KDIpJUEpKSB0aGVuCisgIHByaW50ICosICJpbnZhbGlkIG1hcHBpbmcsIGNmLiBQUiBmb3J0 cmFuLzEwNDY5NiIKK2Vsc2UKKworaWYgKHZhcjQlUigzKSVBIC89IDQ1KSBzdG9wIDE3Citp ZiAoYW55ICh2YXI0JVIoMyklQiAvPSBbMSwyLDNdKSkgc3RvcCAxOAoraWYgKHZhcjQlUigz KSVDJXggLz0gNikgc3RvcCAxOQoraWYgKHZhcjQlUigzKSVDJXkgLz0gNSkgc3RvcCAxOQor aWYgKHZhcjQlUigzKSVDJXogLz0gNCkgc3RvcCAxOQorYmxvY2sKKyAgaW50ZWdlciA6OiB0 bXBfeCgyLDIpLCB0bXBfeSgyLDIpLCB0bXBfeigyLDIpLCBpLCBqCisgIHRtcF94ID0gcmVz aGFwZShbMSwgNCwgMTEsIDE0XSwgWzIsMl0pCisgIHRtcF95ID0gcmVzaGFwZShbMiwgNSwg MTIsIDE1XSwgWzIsMl0pCisgIHRtcF96ID0gcmVzaGFwZShbMywgNiwgMTMsIDE2XSwgWzIs Ml0pCisgIGRvIGogPSAxLCAyCisgICAgZG8gaSA9IDEsIDIKKyAgICAgIGlmICh2YXI0JVIo MyklRChpLGopJXggLz0gdG1wX3goaSxqKSkgc3RvcCAyMAorICAgICAgaWYgKHZhcjQlUigz KSVEKGksaikleSAvPSB0bXBfeShpLGopKSBzdG9wIDIwCisgICAgICBpZiAodmFyNCVSKDMp JUQoaSxqKSV6IC89IHRtcF96KGksaikpIHN0b3AgMjAKKyAgICBlbmQgZG8KKyAgZW5kIGRv CitlbmQgYmxvY2sKKworISBFeHRyYSBkZWFsbG9jYXRlcyBkdWUgdG8gUFIgZm9ydHJhbi8x MDQ2OTcKK2RlYWxsb2NhdGUodmFyMyVRJUMleCwgdmFyMyVRJUQoMSwxKSV4LCB2YXIzJVEl RCgyLDEpJXgsIHZhcjMlUSVEKDEsMikleCwgdmFyMyVRJUQoMiwyKSV4KQorZGVhbGxvY2F0 ZSh2YXIzJVElQyV5LCB2YXIzJVElRCgxLDEpJXksIHZhcjMlUSVEKDIsMSkleSwgdmFyMyVR JUQoMSwyKSV5LCB2YXIzJVElRCgyLDIpJXkpCitkZWFsbG9jYXRlKHZhcjMlUSVDJXosIHZh cjMlUSVEKDEsMSkleiwgdmFyMyVRJUQoMiwxKSV6LCB2YXIzJVElRCgxLDIpJXosIHZhcjMl USVEKDIsMikleikKK2RlYWxsb2NhdGUodmFyMyVRJUEsIHZhcjMlUSVCLCB2YXIzJVElQywg dmFyMyVRJUQpCisKK2RlYWxsb2NhdGUodmFyNCVRJUMleCwgdmFyNCVRJUQoMSwxKSV4LCB2 YXI0JVElRCgyLDEpJXgsIHZhcjQlUSVEKDEsMikleCwgdmFyNCVRJUQoMiwyKSV4KQorZGVh bGxvY2F0ZSh2YXI0JVElQyV5LCB2YXI0JVElRCgxLDEpJXksIHZhcjQlUSVEKDIsMSkleSwg dmFyNCVRJUQoMSwyKSV5LCB2YXI0JVElRCgyLDIpJXkpCitkZWFsbG9jYXRlKHZhcjQlUSVD JXosIHZhcjQlUSVEKDEsMSkleiwgdmFyNCVRJUQoMiwxKSV6LCB2YXI0JVElRCgxLDIpJXos IHZhcjQlUSVEKDIsMikleikKK2RlYWxsb2NhdGUodmFyNCVRJUEsIHZhcjQlUSVCLCB2YXI0 JVElQywgdmFyNCVRJUQpCisKK2RlYWxsb2NhdGUodmFyMyVSKDIpJUMleCwgdmFyMyVSKDIp JUQoMSwxKSV4LCB2YXIzJVIoMiklRCgyLDEpJXgsIHZhcjMlUigyKSVEKDEsMikleCwgdmFy MyVSKDIpJUQoMiwyKSV4KQorZGVhbGxvY2F0ZSh2YXIzJVIoMiklQyV5LCB2YXIzJVIoMikl RCgxLDEpJXksIHZhcjMlUigyKSVEKDIsMSkleSwgdmFyMyVSKDIpJUQoMSwyKSV5LCB2YXIz JVIoMiklRCgyLDIpJXkpCitkZWFsbG9jYXRlKHZhcjMlUigyKSVDJXosIHZhcjMlUigyKSVE KDEsMSkleiwgdmFyMyVSKDIpJUQoMiwxKSV6LCB2YXIzJVIoMiklRCgxLDIpJXosIHZhcjMl UigyKSVEKDIsMikleikKK2RlYWxsb2NhdGUodmFyMyVSKDIpJUEsIHZhcjMlUigyKSVCLCB2 YXIzJVIoMiklQywgdmFyMyVSKDIpJUQpCisKK2RlYWxsb2NhdGUodmFyNCVSKDMpJUMleCwg dmFyNCVSKDMpJUQoMSwxKSV4LCB2YXI0JVIoMyklRCgyLDEpJXgsIHZhcjQlUigzKSVEKDEs MikleCwgdmFyNCVSKDMpJUQoMiwyKSV4KQorZGVhbGxvY2F0ZSh2YXI0JVIoMyklQyV5LCB2 YXI0JVIoMyklRCgxLDEpJXksIHZhcjQlUigzKSVEKDIsMSkleSwgdmFyNCVSKDMpJUQoMSwy KSV5LCB2YXI0JVIoMyklRCgyLDIpJXkpCitkZWFsbG9jYXRlKHZhcjQlUigzKSVDJXosIHZh cjQlUigzKSVEKDEsMSkleiwgdmFyNCVSKDMpJUQoMiwxKSV6LCB2YXI0JVIoMyklRCgxLDIp JXosIHZhcjQlUigzKSVEKDIsMikleikKK2RlYWxsb2NhdGUodmFyNCVSKDMpJUEsIHZhcjQl UigzKSVCLCB2YXI0JVIoMyklQywgdmFyNCVSKDMpJUQpCisKKyAgcHJpbnQgKiwgInZhbGlk IG1hcHBpbmcsIE9LIgorZW5kaWYKKworY29udGFpbnMKKyAgc3Vicm91dGluZSBmb28oeCwg eSkKKyAgICB0eXBlKHQpIDo6IHgsIHkKKyAgICBpbnRlbnQoaW4pIDo6IHgKKyAgICBpbnRl bnQoaW5vdXQpIDo6IHkKKyAgICBpbnRlZ2VyIDo6IHRtcF94KDIsMiksIHRtcF95KDIsMiks IHRtcF96KDIsMiksIGksIGoKKyAgICBpZiAoeCVBIC89IDQ1KSBzdG9wIDEKKyAgICBpZiAo YW55ICh4JUIgLz0gWzEsMiwzXSkpIHN0b3AgMgorICAgIGlmICh4JUMleCAvPSA2KSBzdG9w IDMKKyAgICBpZiAoeCVDJXkgLz0gNSkgc3RvcCAzCisgICAgaWYgKHglQyV6IC89IDQpIHN0 b3AgMworICAgIAorICAgIHRtcF94ID0gcmVzaGFwZShbMSwgNCwgMTEsIDE0XSwgWzIsMl0p CisgICAgdG1wX3kgPSByZXNoYXBlKFsyLCA1LCAxMiwgMTVdLCBbMiwyXSkKKyAgICB0bXBf eiA9IHJlc2hhcGUoWzMsIDYsIDEzLCAxNl0sIFsyLDJdKQorICAgIGRvIGogPSAxLCAyCisg ICAgICBkbyBpID0gMSwgMgorICAgICAgICBpZiAoeCVEKGksaikleCAvPSB0bXBfeChpLGop KSBzdG9wIDQKKyAgICAgICAgaWYgKHglRChpLGopJXkgLz0gdG1wX3koaSxqKSkgc3RvcCA0 CisgICAgICAgIGlmICh4JUQoaSxqKSV6IC89IHRtcF96KGksaikpIHN0b3AgNAorICAgICAg ZW5kIGRvCisgICAgZW5kIGRvCisKKyAgICBpZiAoeSVBIC89IDE0NSkgc3RvcCA1CisgICAg aWYgKGFueSAoeSVCIC89IFs5OTEsOTkyLDk5M10pKSBzdG9wIDYKKyAgICBpZiAoeSVDJXgg Lz0gOTk2KSBzdG9wIDcKKyAgICBpZiAoeSVDJXkgLz0gOTk1KSBzdG9wIDcKKyAgICBpZiAo eSVDJXogLz0gOTk0KSBzdG9wIDcKKyAgICB0bXBfeCA9IHJlc2hhcGUoWzE5OSwgNDk5LCAx MTk5LCAxNDk5XSwgWzIsMl0pCisgICAgdG1wX3kgPSByZXNoYXBlKFsyOTksIDU5OSwgMTI5 OSwgMTU5OV0sIFsyLDJdKQorICAgIHRtcF96ID0gcmVzaGFwZShbMzk5LCA2OTksIDEzOTks IDE2OTldLCBbMiwyXSkKKyAgICBkbyBqID0gMSwgMgorICAgICAgZG8gaSA9IDEsIDIKKyAg ICAgICAgaWYgKHklRChpLGopJXggLz0gdG1wX3goaSxqKSkgc3RvcCA4CisgICAgICAgIGlm ICh5JUQoaSxqKSV5IC89IHRtcF95KGksaikpIHN0b3AgOAorICAgICAgICBpZiAoeSVEKGks aikleiAvPSB0bXBfeihpLGopKSBzdG9wIDgKKyAgICAgIGVuZCBkbworICAgIGVuZCBkbwor CisgICAgeSVBID0geCVBCisgICAgeSVCKDopID0geCVCCisgICAgeSVDJXggPSB4JUMleAor ICAgIHklQyV5ID0geCVDJXkKKyAgICB5JUMleiA9IHglQyV6CisgICAgZG8gaiA9IDEsIDIK KyAgICAgIGRvIGkgPSAxLCAyCisgICAgICAgIHklRChpLGopJXggPSB4JUQoaSxqKSV4Cisg ICAgICAgIHklRChpLGopJXkgPSB4JUQoaSxqKSV5CisgICAgICAgIHklRChpLGopJXogPSB4 JUQoaSxqKSV6CisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKyAgZW5kCitlbmQKZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2MtY29t cC03LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9tYXAtYWxsb2Mt Y29tcC03LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmM5 MzEzZTg5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmZvcnRyYW4vbWFwLWFsbG9jLWNvbXAtNy5mOTAKQEAgLTAsMCArMSw2NzIgQEAKK21vZHVs ZSBtCisgIGltcGxpY2l0IG5vbmUgKHR5cGUsIGV4dGVybmFsKQorICB0eXBlIHQKKyAgICBp bnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBhcnIoOiw6KQorICAgIGludGVnZXIgOjogdmFyCisg ICAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogc2xyCisgIGVuZCB0eXBlIHQKKworY29udGFp bnMKKworICBzdWJyb3V0aW5lIGNoZWNrX2l0IChpc19wcmVzZW50LCBkdW1teV9hbGxvY2Vk LCBpbm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXIsIGFycmF5 LCBhX3NjYWxhciwgYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAgICAgICBsX3NjYWxh ciwgbF9hcnJheSwgbGFfc2NhbGFyLCBsYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAg ICAgICBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkp CisgICAgdHlwZSh0KSwgaW50ZW50KGlub3V0KSA6OiAmCisgICAgICAgICAgICBzY2FsYXIs IGFycmF5KDosOiksIG9wdF9zY2FsYXIsIG9wdF9hcnJheSg6LDopLCBhX3NjYWxhciwgYV9h cnJheSg6LDopLCAmCisgICAgICAgICAgICBhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5KDos OiksICYKKyAgICAgICAgICAgIGxfc2NhbGFyLCBsX2FycmF5KDosOiksIGxhX3NjYWxhciwg bGFfYXJyYXkoOiw6KQorICAgIG9wdGlvbmFsIDo6IG9wdF9zY2FsYXIsIG9wdF9hcnJheSwg YV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheQorICAgIGFsbG9jYXRhYmxlIDo6IGFfc2NhbGFy LCBhX2FycmF5LCBhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5LCBsYV9zY2FsYXIsIGxhX2Fy cmF5CisgICAgbG9naWNhbCwgdmFsdWUgOjogaXNfcHJlc2VudCwgZHVtbXlfYWxsb2NlZCwg aW5uZXJfYWxsb2MKKyAgICBpbnRlZ2VyIDo6IGksIGosIGssIGwKKworICAgICEgQ0hFQ0sg VkFMVUUKKyAgICBpZiAoc2NhbGFyJXZhciAvPSA0Mikgc3RvcCAxCisgICAgaWYgKGxfc2Nh bGFyJXZhciAvPSA0Mikgc3RvcCAxCisgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAg IGlmIChvcHRfc2NhbGFyJXZhciAvPSA0Mikgc3RvcCAyCisgICAgZW5kIGlmCisgICAgaWYg KGFueSAoc2hhcGUoYXJyYXkpIC89IFszLDJdKSkgc3RvcCAxCisgICAgaWYgKGFueSAoc2hh cGUobF9hcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICBpZiAoaXNfcHJlc2VudCkgdGhl bgorICAgICAgaWYgKGFueSAoc2hhcGUob3B0X2FycmF5KSAvPSBbMywyXSkpIHN0b3AgMQor ICAgIGVuZCBpZgorICAgIGRvIGogPSAxLCAyCisgICAgICBkbyBpID0gMSwgMworICAgICAg ICBpZiAoYXJyYXkoaSxqKSV2YXIgLz0gaSo5NyArIDEwMCo0MSpqKSBzdG9wIDMKKyAgICAg ICAgaWYgKGxfYXJyYXkoaSxqKSV2YXIgLz0gaSo5NyArIDEwMCo0MSpqKSBzdG9wIDMKKyAg ICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICBpZiAob3B0X2FycmF5KGks aikldmFyIC89IGkqOTcgKyAxMDAqNDEqaikgc3RvcCA0CisgICAgICAgIGVuZCBpZgorICAg ICAgZW5kIGRvCisgICAgZW5kIGRvCisKKyAgICBpZiAoZHVtbXlfYWxsb2NlZCkgdGhlbgor ICAgICAgaWYgKGFfc2NhbGFyJXZhciAvPSA0Mikgc3RvcCAxCisgICAgICBpZiAobGFfc2Nh bGFyJXZhciAvPSA0Mikgc3RvcCAxCisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAg ICAgICBpZiAoYV9vcHRfc2NhbGFyJXZhciAvPSA0Mikgc3RvcCAxCisgICAgICBlbmQgaWYK KyAgICAgIGlmIChhbnkgKHNoYXBlKGFfYXJyYXkpIC89IFszLDJdKSkgc3RvcCAxCisgICAg ICBpZiAoYW55IChzaGFwZShsYV9hcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICAgIGlm IChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGlmIChhbnkgKHNoYXBlKGFfb3B0X2FycmF5 KSAvPSBbMywyXSkpIHN0b3AgMQorICAgICAgZW5kIGlmCisgICAgICBkbyBqID0gMSwgMgor ICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGlmIChhX2FycmF5KGksaikldmFyIC89 IGkqOTcgKyAxMDAqNDEqaikgc3RvcCAxCisgICAgICAgICAgaWYgKGxhX2FycmF5KGksaikl dmFyIC89IGkqOTcgKyAxMDAqNDEqaikgc3RvcCAxCisgICAgICAgICAgaWYgKGlzX3ByZXNl bnQpIHRoZW4KKyAgICAgICAgICAgIGlmIChhX29wdF9hcnJheShpLGopJXZhciAvPSBpKjk3 ICsgMTAwKjQxKmopIHN0b3AgMQorICAgICAgICAgIGVuZCBpZgorICAgICAgICBlbmQgZG8K KyAgICAgIGVuZCBkbworICAgIGVsc2UKKyAgICAgIGlmIChhbGxvY2F0ZWQgKGFfc2NhbGFy KSkgc3RvcCAxCisgICAgICBpZiAoYWxsb2NhdGVkIChsYV9zY2FsYXIpKSBzdG9wIDEKKyAg ICAgIGlmIChhbGxvY2F0ZWQgKGFfYXJyYXkpKSBzdG9wIDEKKyAgICAgIGlmIChhbGxvY2F0 ZWQgKGxhX2FycmF5KSkgc3RvcCAxCisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAg ICAgICBpZiAoYWxsb2NhdGVkIChhX29wdF9zY2FsYXIpKSBzdG9wIDEKKyAgICAgICAgaWYg KGFsbG9jYXRlZCAoYV9vcHRfYXJyYXkpKSBzdG9wIDEKKyAgICAgIGVuZCBpZgorICAgIGVu ZCBpZgorCisgICAgaWYgKGlubmVyX2FsbG9jKSB0aGVuCisgICAgICBpZiAoc2NhbGFyJXNs ciAvPSA0NjcpIHN0b3AgNQorICAgICAgaWYgKGxfc2NhbGFyJXNsciAvPSA0NjcpIHN0b3Ag NQorICAgICAgaWYgKGFfc2NhbGFyJXNsciAvPSA0NjcpIHN0b3AgNgorICAgICAgaWYgKGxh X3NjYWxhciVzbHIgLz0gNDY3KSBzdG9wIDYKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVu CisgICAgICAgIGlmIChvcHRfc2NhbGFyJXNsciAvPSA0NjcpIHN0b3AgNworICAgICAgICBp ZiAoYV9vcHRfc2NhbGFyJXNsciAvPSA0NjcpIHN0b3AgOAorICAgICAgZW5kIGlmCisgICAg ICBkbyBqID0gMSwgMgorICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGlmIChhcnJh eShpLGopJXNsciAvPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcpIHN0b3AgOQorICAgICAg ICAgIGlmIChsX2FycmF5KGksaiklc2xyIC89IChpKjk3ICsgMTAwKjQxKmopICArIDQ2Nykg c3RvcCA5CisgICAgICAgICAgaWYgKGFfYXJyYXkoaSxqKSVzbHIgLz0gKGkqOTcgKyAxMDAq NDEqaikgICsgNDY3KSBzdG9wIDEwCisgICAgICAgICAgaWYgKGxhX2FycmF5KGksaiklc2xy IC89IChpKjk3ICsgMTAwKjQxKmopICArIDQ2Nykgc3RvcCAxMAorICAgICAgICAgIGlmIChp c19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICBpZiAob3B0X2FycmF5KGksaiklc2xyIC89 IChpKjk3ICsgMTAwKjQxKmopICArIDQ2Nykgc3RvcCAxMQorICAgICAgICAgICAgaWYgKGFf b3B0X2FycmF5KGksaiklc2xyIC89IChpKjk3ICsgMTAwKjQxKmopICArIDQ2Nykgc3RvcCAx MgorICAgICAgICAgIGVuZCBpZgorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworCisg ICAgICBkbyBsID0gMSwgNQorICAgICAgICBkbyBrID0gMSwgNAorICAgICAgICAgIGlmIChh bnkgKHNoYXBlKHNjYWxhciVhcnIpIC89IFs0LDVdKSkgc3RvcCAxCisgICAgICAgICAgaWYg KGFueSAoc2hhcGUobF9zY2FsYXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQorICAgICAgICAg IGlmIChhbnkgKHNoYXBlKGFfc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAgICAg ICAgICBpZiAoYW55IChzaGFwZShsYV9zY2FsYXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQor ICAgICAgICAgIGlmIChzY2FsYXIlYXJyKGssbCkgLz0gKGkqMjcgKyAxMDAwKjExKmopICsg NDY3KSBzdG9wIDEzCisgICAgICAgICAgaWYgKGxfc2NhbGFyJWFycihrLGwpIC89IChpKjI3 ICsgMTAwMCoxMSpqKSArIDQ2Nykgc3RvcCAxMworICAgICAgICAgIGlmIChhX3NjYWxhciVh cnIoayxsKSAvPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcpIHN0b3AgMTQKKyAgICAgICAg ICBpZiAobGFfc2NhbGFyJWFycihrLGwpIC89IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2Nykg c3RvcCAxNAorICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICBp ZiAoYW55IChzaGFwZShvcHRfc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAgICAg ICAgICAgIGlmIChhbnkgKHNoYXBlKGFfb3B0X3NjYWxhciVhcnIpIC89IFs0LDVdKSkgc3Rv cCAxCisgICAgICAgICAgICBpZiAob3B0X3NjYWxhciVhcnIoayxsKSAvPSAoaSoyNyArIDEw MDAqMTEqaikgKyA0NjcpIHN0b3AgMTUKKyAgICAgICAgICAgIGlmIChhX29wdF9zY2FsYXIl YXJyKGssbCkgLz0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3KSBzdG9wIDE2CisgICAgICAg ICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisgICAgICBkbyBqID0g MSwgMgorICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGlmIChhbnkgKHNoYXBlKGFy cmF5KGksaiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAgICAgICAgIGlmIChhbnkgKHNo YXBlKGxfYXJyYXkoaSxqKSVhcnIpIC89IFtpLGpdKSkgc3RvcCAxCisgICAgICAgICAgaWYg KGFueSAoc2hhcGUoYV9hcnJheShpLGopJWFycikgLz0gW2ksal0pKSBzdG9wIDEKKyAgICAg ICAgICBpZiAoYW55IChzaGFwZShsYV9hcnJheShpLGopJWFycikgLz0gW2ksal0pKSBzdG9w IDEKKyAgICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgICAgaWYgKGFu eSAoc2hhcGUob3B0X2FycmF5KGksaiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAgICAg ICAgICAgaWYgKGFueSAoc2hhcGUoYV9vcHRfYXJyYXkoaSxqKSVhcnIpIC89IFtpLGpdKSkg c3RvcCAxCisgICAgICAgICAgZW5kaWYKKyAgICAgICAgICBkbyBsID0gMSwgagorICAgICAg ICAgICAgZG8gayA9IDEsIGkKKyAgICAgICAgICAgICAgaWYgKGFycmF5KGksaiklYXJyKGss bCkgLz0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCkgc3RvcCAxNworICAg ICAgICAgICAgICBpZiAobF9hcnJheShpLGopJWFycihrLGwpIC89IGkqMjcgKyAxMDAwKjEx KmogKyA0NjcgKyAzKmsgKzUzKmwpIHN0b3AgMTcKKyAgICAgICAgICAgICAgaWYgKGFfYXJy YXkoaSxqKSVhcnIoayxsKSAvPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1Myps KSBzdG9wIDE4CisgICAgICAgICAgICAgIGlmIChsYV9hcnJheShpLGopJWFycihrLGwpIC89 IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwpIHN0b3AgMTgKKyAgICAgICAg ICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgICAgICBpZiAob3B0X2Fy cmF5KGksaiklYXJyKGssbCkgLz0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMq bCkgc3RvcCAxOQorICAgICAgICAgICAgICAgIGlmIChhX29wdF9hcnJheShpLGopJWFycihr LGwpIC89IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwpIHN0b3AgMjAKKyAg ICAgICAgICAgICAgZW5kIGlmCisgICAgICAgICAgICBlbmQgZG8KKyAgICAgICAgICBlbmQg ZG8KKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8KKyAgICBlbHNlIGlmIChkdW1teV9h bGxvY2VkKSB0aGVuCisgICAgICBpZiAoYWxsb2NhdGVkIChzY2FsYXIlc2xyKSkgc3RvcCAx CisgICAgICBpZiAoYWxsb2NhdGVkIChsX3NjYWxhciVzbHIpKSBzdG9wIDEKKyAgICAgIGlm IChhbGxvY2F0ZWQgKGFfc2NhbGFyJXNscikpIHN0b3AgMQorICAgICAgaWYgKGFsbG9jYXRl ZCAobGFfc2NhbGFyJXNscikpIHN0b3AgMQorICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4K KyAgICAgICAgaWYgKGFsbG9jYXRlZCAob3B0X3NjYWxhciVzbHIpKSBzdG9wIDEKKyAgICAg ICAgaWYgKGFsbG9jYXRlZCAoYV9vcHRfc2NhbGFyJXNscikpIHN0b3AgMQorICAgICAgZW5k aWYKKyAgICAgIGlmIChhbGxvY2F0ZWQgKHNjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGlm IChhbGxvY2F0ZWQgKGxfc2NhbGFyJWFycikpIHN0b3AgMQorICAgICAgaWYgKGFsbG9jYXRl ZCAoYV9zY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICBpZiAoYWxsb2NhdGVkIChsYV9zY2Fs YXIlYXJyKSkgc3RvcCAxCisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICBp ZiAoYWxsb2NhdGVkIChvcHRfc2NhbGFyJWFycikpIHN0b3AgMQorICAgICAgICBpZiAoYWxs b2NhdGVkIChhX29wdF9zY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICBlbmRpZgorICAgIGVu ZCBpZgorCisgICAgISBTRVQgVkFMVUUKKyAgICBzY2FsYXIldmFyID0gNDIgKyAxMworICAg IGxfc2NhbGFyJXZhciA9IDQyICsgMTMKKyAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAg ICAgb3B0X3NjYWxhciV2YXIgPSA0MiArIDEzCisgICAgZW5kaWYKKyAgICBkbyBqID0gMSwg MgorICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAgYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsg MTAwKjQxKmogKyAxMworICAgICAgICBsX2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0 MSpqICsgMTMKKyAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICBvcHRf YXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQxKmogKyAxMworICAgICAgICBlbmQgaWYK KyAgICAgIGVuZCBkbworICAgIGVuZCBkbworCisgICAgaWYgKGR1bW15X2FsbG9jZWQpIHRo ZW4KKyAgICAgIGFfc2NhbGFyJXZhciA9IDQyICsgMTMKKyAgICAgIGxhX3NjYWxhciV2YXIg PSA0MiArIDEzCisgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICBhX29wdF9z Y2FsYXIldmFyID0gNDIgKyAxMworICAgICAgZW5kaWYKKyAgICAgIGRvIGogPSAxLCAyCisg ICAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgICAgYV9hcnJheShpLGopJXZhciA9IGkqOTcg KyAxMDAqNDEqaiArIDEzCisgICAgICAgICAgbGFfYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsg MTAwKjQxKmogKyAxMworICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAg ICAgICBhX29wdF9hcnJheShpLGopJXZhciA9IGkqOTcgKyAxMDAqNDEqaiArIDEzCisgICAg ICAgICAgZW5kaWYKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8KKyAgICBlbmQgaWYK KworICAgIGlmIChpbm5lcl9hbGxvYykgdGhlbgorICAgICAgc2NhbGFyJXNsciA9IDQ2NyAr IDEzCisgICAgICBsX3NjYWxhciVzbHIgPSA0NjcgKyAxMworICAgICAgYV9zY2FsYXIlc2xy ID0gNDY3ICsgMTMKKyAgICAgIGxhX3NjYWxhciVzbHIgPSA0NjcgKyAxMworICAgICAgaWYg KGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgb3B0X3NjYWxhciVzbHIgPSA0NjcgKyAxMwor ICAgICAgICBhX29wdF9zY2FsYXIlc2xyID0gNDY3ICsgMTMKKyAgICAgIGVuZCBpZgorICAg ICAgZG8gaiA9IDEsIDIKKyAgICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAgICBhcnJheShp LGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzCisgICAgICAgICAgbF9h cnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzCisgICAgICAg ICAgYV9hcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzCisg ICAgICAgICAgbGFfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0Njcg KyAxMworICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICBvcHRf YXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcgKyAxMworICAgICAg ICAgICAgYV9vcHRfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0Njcg KyAxMworICAgICAgICAgIGVuZCBpZgorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbwor CisgICAgICBkbyBsID0gMSwgNQorICAgICAgICBkbyBrID0gMSwgNAorICAgICAgICAgIHNj YWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NyArIDEzCisgICAgICAg ICAgbF9zY2FsYXIlYXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcgKyAxMwor ICAgICAgICAgIGFfc2NhbGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3 ICsgMTMKKyAgICAgICAgICBsYV9zY2FsYXIlYXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEq aikgKyA0NjcgKyAxMworICAgICAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAg ICAgICBvcHRfc2NhbGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3ICsg MTMKKyAgICAgICAgICAgIGFfb3B0X3NjYWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCox MSpqKSArIDQ2NyArIDEzCisgICAgICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAg ICAgZW5kIGRvCisgICAgICBkbyBqID0gMSwgMgorICAgICAgICBkbyBpID0gMSwgMworICAg ICAgICAgIGRvIGwgPSAxLCBqCisgICAgICAgICAgICBkbyBrID0gMSwgaQorICAgICAgICAg ICAgICBhcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMq ayArNTMqbCArIDEzCisgICAgICAgICAgICAgIGxfYXJyYXkoaSxqKSVhcnIoayxsKSA9IGkq MjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwgKyAxMworICAgICAgICAgICAgICBh X2FycmF5KGksaiklYXJyKGssbCkgPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1 MypsICsgMTMKKyAgICAgICAgICAgICAgbGFfYXJyYXkoaSxqKSVhcnIoayxsKSA9IGkqMjcg KyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwgKyAxMworICAgICAgICAgICAgICBpZiAo aXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgICAgICAgIG9wdF9hcnJheShpLGopJWFycihr LGwpID0gaSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCArIDEzCisgICAgICAg ICAgICAgICAgYV9vcHRfYXJyYXkoaSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmog KyA0NjcgKyAzKmsgKzUzKmwgKyAxMworICAgICAgICAgICAgICBlbmQgaWYKKyAgICAgICAg ICAgIGVuZCBkbworICAgICAgICAgIGVuZCBkbworICAgICAgICBlbmQgZG8KKyAgICAgIGVu ZCBkbworICAgIGVuZCBpZgorCisgIGVuZCBzdWJyb3V0aW5lCisgIHN1YnJvdXRpbmUgY2hl Y2tfcmVzZXQgKGlzX3ByZXNlbnQsIGR1bW15X2FsbG9jZWQsIGlubmVyX2FsbG9jLCAmCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhciwgYXJyYXksIGFfc2NhbGFyLCBhX2Fy cmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxfc2NhbGFyLCBsX2FycmF5LCBs YV9zY2FsYXIsIGxhX2FycmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9z Y2FsYXIsIG9wdF9hcnJheSwgYV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheSkKKyAgICB0eXBl KHQpLCBpbnRlbnQoaW5vdXQpIDo6ICYKKyAgICAgICAgICAgIHNjYWxhciwgYXJyYXkoOiw6 KSwgb3B0X3NjYWxhciwgb3B0X2FycmF5KDosOiksIGFfc2NhbGFyLCBhX2FycmF5KDosOiks ICYKKyAgICAgICAgICAgIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkoOiw6KSwgJgorICAg ICAgICAgICAgbF9zY2FsYXIsIGxfYXJyYXkoOiw6KSwgbGFfc2NhbGFyLCBsYV9hcnJheSg6 LDopCisgICAgb3B0aW9uYWwgOjogb3B0X3NjYWxhciwgb3B0X2FycmF5LCBhX29wdF9zY2Fs YXIsIGFfb3B0X2FycmF5CisgICAgYWxsb2NhdGFibGUgOjogYV9zY2FsYXIsIGFfYXJyYXks IGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXksIGxhX3NjYWxhciwgbGFfYXJyYXkKKyAgICBs b2dpY2FsLCB2YWx1ZSA6OiBpc19wcmVzZW50LCBkdW1teV9hbGxvY2VkLCBpbm5lcl9hbGxv YworICAgIGludGVnZXIgOjogaSwgaiwgaywgbAorCisgICAgISBDSEVDSyBWQUxVRQorICAg IGlmIChzY2FsYXIldmFyIC89IDQyICsgMTMpIHN0b3AgMQorICAgIGlmIChsX3NjYWxhciV2 YXIgLz0gNDIgKyAxMykgc3RvcCAxCisgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAg IGlmIChvcHRfc2NhbGFyJXZhciAvPSA0MiArIDEzKSBzdG9wIDIKKyAgICBlbmQgaWYKKyAg ICBpZiAoYW55IChzaGFwZShhcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICBpZiAoYW55 IChzaGFwZShsX2FycmF5KSAvPSBbMywyXSkpIHN0b3AgMQorICAgIGlmIChpc19wcmVzZW50 KSB0aGVuCisgICAgICBpZiAoYW55IChzaGFwZShvcHRfYXJyYXkpIC89IFszLDJdKSkgc3Rv cCAxCisgICAgZW5kIGlmCisgICAgZG8gaiA9IDEsIDIKKyAgICAgIGRvIGkgPSAxLCAzCisg ICAgICAgIGlmIChhcnJheShpLGopJXZhciAvPSBpKjk3ICsgMTAwKjQxKmogKyAxMykgc3Rv cCAzCisgICAgICAgIGlmIChsX2FycmF5KGksaikldmFyIC89IGkqOTcgKyAxMDAqNDEqaiAr IDEzKSBzdG9wIDMKKyAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICBp ZiAob3B0X2FycmF5KGksaikldmFyIC89IGkqOTcgKyAxMDAqNDEqaiArIDEzKSBzdG9wIDQK KyAgICAgICAgZW5kIGlmCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8KKworICAgIGlmIChk dW1teV9hbGxvY2VkKSB0aGVuCisgICAgICBpZiAoYV9zY2FsYXIldmFyIC89IDQyICsgMTMp IHN0b3AgMQorICAgICAgaWYgKGxhX3NjYWxhciV2YXIgLz0gNDIgKyAxMykgc3RvcCAxCisg ICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICBpZiAoYV9vcHRfc2NhbGFyJXZh ciAvPSA0MiArIDEzKSBzdG9wIDEKKyAgICAgIGVuZCBpZgorICAgICAgaWYgKGFueSAoc2hh cGUoYV9hcnJheSkgLz0gWzMsMl0pKSBzdG9wIDEKKyAgICAgIGlmIChhbnkgKHNoYXBlKGxh X2FycmF5KSAvPSBbMywyXSkpIHN0b3AgMQorICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4K KyAgICAgICAgaWYgKGFueSAoc2hhcGUoYV9vcHRfYXJyYXkpIC89IFszLDJdKSkgc3RvcCAx CisgICAgICBlbmQgaWYKKyAgICAgIGRvIGogPSAxLCAyCisgICAgICAgIGRvIGkgPSAxLCAz CisgICAgICAgICAgaWYgKGFfYXJyYXkoaSxqKSV2YXIgLz0gaSo5NyArIDEwMCo0MSpqICsg MTMpIHN0b3AgMQorICAgICAgICAgIGlmIChsYV9hcnJheShpLGopJXZhciAvPSBpKjk3ICsg MTAwKjQxKmogKyAxMykgc3RvcCAxCisgICAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRoZW4K KyAgICAgICAgICAgIGlmIChhX29wdF9hcnJheShpLGopJXZhciAvPSBpKjk3ICsgMTAwKjQx KmogKyAxMykgc3RvcCAxCisgICAgICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAg ICAgZW5kIGRvCisgICAgZWxzZQorICAgICAgaWYgKGFsbG9jYXRlZCAoYV9zY2FsYXIpKSBz dG9wIDEKKyAgICAgIGlmIChhbGxvY2F0ZWQgKGxhX3NjYWxhcikpIHN0b3AgMQorICAgICAg aWYgKGFsbG9jYXRlZCAoYV9hcnJheSkpIHN0b3AgMQorICAgICAgaWYgKGFsbG9jYXRlZCAo bGFfYXJyYXkpKSBzdG9wIDEKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAg IGlmIChhbGxvY2F0ZWQgKGFfb3B0X3NjYWxhcikpIHN0b3AgMQorICAgICAgICBpZiAoYWxs b2NhdGVkIChhX29wdF9hcnJheSkpIHN0b3AgMQorICAgICAgZW5kIGlmCisgICAgZW5kIGlm CisKKyAgICBpZiAoaW5uZXJfYWxsb2MpIHRoZW4KKyAgICAgIGlmIChzY2FsYXIlc2xyIC89 IDQ2NyArIDEzKSBzdG9wIDUKKyAgICAgIGlmIChsX3NjYWxhciVzbHIgLz0gNDY3ICsgMTMp IHN0b3AgNQorICAgICAgaWYgKGFfc2NhbGFyJXNsciAvPSA0NjcgKyAxMykgc3RvcCA2Cisg ICAgICBpZiAobGFfc2NhbGFyJXNsciAvPSA0NjcgKyAxMykgc3RvcCA2CisgICAgICBpZiAo aXNfcHJlc2VudCkgdGhlbgorICAgICAgICBpZiAob3B0X3NjYWxhciVzbHIgLz0gNDY3ICsg MTMpIHN0b3AgNworICAgICAgICBpZiAoYV9vcHRfc2NhbGFyJXNsciAvPSA0NjcgKyAxMykg c3RvcCA4CisgICAgICBlbmQgaWYKKyAgICAgIGRvIGogPSAxLCAyCisgICAgICAgIGRvIGkg PSAxLCAzCisgICAgICAgICAgaWYgKGFycmF5KGksaiklc2xyIC89IChpKjk3ICsgMTAwKjQx KmopICArIDQ2NyArIDEzKSBzdG9wIDkKKyAgICAgICAgICBpZiAobF9hcnJheShpLGopJXNs ciAvPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcgKyAxMykgc3RvcCA5CisgICAgICAgICAg aWYgKGFfYXJyYXkoaSxqKSVzbHIgLz0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3ICsgMTMp IHN0b3AgMTAKKyAgICAgICAgICBpZiAobGFfYXJyYXkoaSxqKSVzbHIgLz0gKGkqOTcgKyAx MDAqNDEqaikgICsgNDY3ICsgMTMpIHN0b3AgMTAKKyAgICAgICAgICBpZiAoaXNfcHJlc2Vu dCkgdGhlbgorICAgICAgICAgICAgaWYgKG9wdF9hcnJheShpLGopJXNsciAvPSAoaSo5NyAr IDEwMCo0MSpqKSAgKyA0NjcgKyAxMykgc3RvcCAxMQorICAgICAgICAgICAgaWYgKGFfb3B0 X2FycmF5KGksaiklc2xyIC89IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NyArIDEzKSBzdG9w IDEyCisgICAgICAgICAgZW5kIGlmCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisK KyAgICAgIGRvIGwgPSAxLCA1CisgICAgICAgIGRvIGsgPSAxLCA0CisgICAgICAgICAgaWYg KGFueSAoc2hhcGUoc2NhbGFyJWFycikgLz0gWzQsNV0pKSBzdG9wIDEKKyAgICAgICAgICBp ZiAoYW55IChzaGFwZShsX3NjYWxhciVhcnIpIC89IFs0LDVdKSkgc3RvcCAxCisgICAgICAg ICAgaWYgKGFueSAoc2hhcGUoYV9zY2FsYXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQorICAg ICAgICAgIGlmIChhbnkgKHNoYXBlKGxhX3NjYWxhciVhcnIpIC89IFs0LDVdKSkgc3RvcCAx CisgICAgICAgICAgaWYgKHNjYWxhciVhcnIoayxsKSAvPSAoaSoyNyArIDEwMDAqMTEqaikg KyA0NjcgKyAxMykgc3RvcCAxMworICAgICAgICAgIGlmIChsX3NjYWxhciVhcnIoayxsKSAv PSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcgKyAxMykgc3RvcCAxMworICAgICAgICAgIGlm IChhX3NjYWxhciVhcnIoayxsKSAvPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcgKyAxMykg c3RvcCAxNAorICAgICAgICAgIGlmIChsYV9zY2FsYXIlYXJyKGssbCkgLz0gKGkqMjcgKyAx MDAwKjExKmopICsgNDY3ICsgMTMpIHN0b3AgMTQKKyAgICAgICAgICBpZiAoaXNfcHJlc2Vu dCkgdGhlbgorICAgICAgICAgICAgaWYgKGFueSAoc2hhcGUob3B0X3NjYWxhciVhcnIpIC89 IFs0LDVdKSkgc3RvcCAxCisgICAgICAgICAgICBpZiAoYW55IChzaGFwZShhX29wdF9zY2Fs YXIlYXJyKSAvPSBbNCw1XSkpIHN0b3AgMQorICAgICAgICAgICAgaWYgKG9wdF9zY2FsYXIl YXJyKGssbCkgLz0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3ICsgMTMpIHN0b3AgMTUKKyAg ICAgICAgICAgIGlmIChhX29wdF9zY2FsYXIlYXJyKGssbCkgLz0gKGkqMjcgKyAxMDAwKjEx KmopICsgNDY3ICsgMTMpIHN0b3AgMTYKKyAgICAgICAgICBlbmQgaWYKKyAgICAgICAgZW5k IGRvCisgICAgICBlbmQgZG8KKyAgICAgIGRvIGogPSAxLCAyCisgICAgICAgIGRvIGkgPSAx LCAzCisgICAgICAgICAgaWYgKGFueSAoc2hhcGUoYXJyYXkoaSxqKSVhcnIpIC89IFtpLGpd KSkgc3RvcCAxCisgICAgICAgICAgaWYgKGFueSAoc2hhcGUobF9hcnJheShpLGopJWFycikg Lz0gW2ksal0pKSBzdG9wIDEKKyAgICAgICAgICBpZiAoYW55IChzaGFwZShhX2FycmF5KGks aiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAgICAgICAgIGlmIChhbnkgKHNoYXBlKGxh X2FycmF5KGksaiklYXJyKSAvPSBbaSxqXSkpIHN0b3AgMQorICAgICAgICAgIGlmIChpc19w cmVzZW50KSB0aGVuCisgICAgICAgICAgICBpZiAoYW55IChzaGFwZShvcHRfYXJyYXkoaSxq KSVhcnIpIC89IFtpLGpdKSkgc3RvcCAxCisgICAgICAgICAgICBpZiAoYW55IChzaGFwZShh X29wdF9hcnJheShpLGopJWFycikgLz0gW2ksal0pKSBzdG9wIDEKKyAgICAgICAgICBlbmRp ZgorICAgICAgICAgIGRvIGwgPSAxLCBqCisgICAgICAgICAgICBkbyBrID0gMSwgaQorICAg ICAgICAgICAgICBpZiAoYXJyYXkoaSxqKSVhcnIoayxsKSAvPSBpKjI3ICsgMTAwMCoxMSpq ICsgNDY3ICsgMyprICs1MypsICsgMTMpIHN0b3AgMTcKKyAgICAgICAgICAgICAgaWYgKGxf YXJyYXkoaSxqKSVhcnIoayxsKSAvPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1 MypsICsgMTMpIHN0b3AgMTcKKyAgICAgICAgICAgICAgaWYgKGFfYXJyYXkoaSxqKSVhcnIo ayxsKSAvPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsICsgMTMpIHN0b3Ag MTgKKyAgICAgICAgICAgICAgaWYgKGxhX2FycmF5KGksaiklYXJyKGssbCkgLz0gaSoyNyAr IDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbCArIDEzKSBzdG9wIDE4CisgICAgICAgICAg ICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgICAgICAgICAgaWYgKG9wdF9hcnJh eShpLGopJWFycihrLGwpIC89IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwg KyAxMykgc3RvcCAxOQorICAgICAgICAgICAgICAgIGlmIChhX29wdF9hcnJheShpLGopJWFy cihrLGwpIC89IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwgKyAxMykgc3Rv cCAyMAorICAgICAgICAgICAgICBlbmQgaWYKKyAgICAgICAgICAgIGVuZCBkbworICAgICAg ICAgIGVuZCBkbworICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAgIGVsc2UgaWYg KGR1bW15X2FsbG9jZWQpIHRoZW4KKyAgICAgIGlmIChhbGxvY2F0ZWQgKHNjYWxhciVzbHIp KSBzdG9wIDEKKyAgICAgIGlmIChhbGxvY2F0ZWQgKGxfc2NhbGFyJXNscikpIHN0b3AgMQor ICAgICAgaWYgKGFsbG9jYXRlZCAoYV9zY2FsYXIlc2xyKSkgc3RvcCAxCisgICAgICBpZiAo YWxsb2NhdGVkIChsYV9zY2FsYXIlc2xyKSkgc3RvcCAxCisgICAgICBpZiAoaXNfcHJlc2Vu dCkgdGhlbgorICAgICAgICBpZiAoYWxsb2NhdGVkIChvcHRfc2NhbGFyJXNscikpIHN0b3Ag MQorICAgICAgICBpZiAoYWxsb2NhdGVkIChhX29wdF9zY2FsYXIlc2xyKSkgc3RvcCAxCisg ICAgICBlbmRpZgorICAgICAgaWYgKGFsbG9jYXRlZCAoc2NhbGFyJWFycikpIHN0b3AgMQor ICAgICAgaWYgKGFsbG9jYXRlZCAobF9zY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICBpZiAo YWxsb2NhdGVkIChhX3NjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGlmIChhbGxvY2F0ZWQg KGxhX3NjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisg ICAgICAgIGlmIChhbGxvY2F0ZWQgKG9wdF9zY2FsYXIlYXJyKSkgc3RvcCAxCisgICAgICAg IGlmIChhbGxvY2F0ZWQgKGFfb3B0X3NjYWxhciVhcnIpKSBzdG9wIDEKKyAgICAgIGVuZGlm CisgICAgZW5kIGlmCisKKyAgICAhIChSRSlTRVQgVkFMVUUKKyAgICBzY2FsYXIldmFyID0g NDIKKyAgICBsX3NjYWxhciV2YXIgPSA0MgorICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisg ICAgICBvcHRfc2NhbGFyJXZhciA9IDQyCisgICAgZW5kaWYKKyAgICBkbyBqID0gMSwgMgor ICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAgYXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAw KjQxKmoKKyAgICAgICAgbF9hcnJheShpLGopJXZhciA9IGkqOTcgKyAxMDAqNDEqagorICAg ICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgIG9wdF9hcnJheShpLGopJXZh ciA9IGkqOTcgKyAxMDAqNDEqagorICAgICAgICBlbmQgaWYKKyAgICAgIGVuZCBkbworICAg IGVuZCBkbworCisgICAgaWYgKGR1bW15X2FsbG9jZWQpIHRoZW4KKyAgICAgIGFfc2NhbGFy JXZhciA9IDQyCisgICAgICBsYV9zY2FsYXIldmFyID0gNDIKKyAgICAgIGlmIChpc19wcmVz ZW50KSB0aGVuCisgICAgICAgIGFfb3B0X3NjYWxhciV2YXIgPSA0MgorICAgICAgZW5kaWYK KyAgICAgIGRvIGogPSAxLCAyCisgICAgICAgIGRvIGkgPSAxLCAzCisgICAgICAgICAgYV9h cnJheShpLGopJXZhciA9IGkqOTcgKyAxMDAqNDEqagorICAgICAgICAgIGxhX2FycmF5KGks aikldmFyID0gaSo5NyArIDEwMCo0MSpqCisgICAgICAgICAgaWYgKGlzX3ByZXNlbnQpIHRo ZW4KKyAgICAgICAgICAgIGFfb3B0X2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0MSpq CisgICAgICAgICAgZW5kaWYKKyAgICAgICAgZW5kIGRvCisgICAgICBlbmQgZG8KKyAgICBl bmQgaWYKKworICAgIGlmIChpbm5lcl9hbGxvYykgdGhlbgorICAgICAgc2NhbGFyJXNsciA9 IDQ2NworICAgICAgbF9zY2FsYXIlc2xyID0gNDY3CisgICAgICBhX3NjYWxhciVzbHIgPSA0 NjcKKyAgICAgIGxhX3NjYWxhciVzbHIgPSA0NjcKKyAgICAgIGlmIChpc19wcmVzZW50KSB0 aGVuCisgICAgICAgIG9wdF9zY2FsYXIlc2xyID0gNDY3CisgICAgICAgIGFfb3B0X3NjYWxh ciVzbHIgPSA0NjcKKyAgICAgIGVuZCBpZgorICAgICAgZG8gaiA9IDEsIDIKKyAgICAgICAg ZG8gaSA9IDEsIDMKKyAgICAgICAgICBhcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQx KmopICArIDQ2NworICAgICAgICAgIGxfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0 MSpqKSAgKyA0NjcKKyAgICAgICAgICBhX2FycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAq NDEqaikgICsgNDY3CisgICAgICAgICAgbGFfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEw MCo0MSpqKSAgKyA0NjcKKyAgICAgICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAg ICAgICAgb3B0X2FycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3Cisg ICAgICAgICAgICBhX29wdF9hcnJheShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICAr IDQ2NworICAgICAgICAgIGVuZCBpZgorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbwor CisgICAgICBkbyBsID0gMSwgNQorICAgICAgICBkbyBrID0gMSwgNAorICAgICAgICAgIHNj YWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NworICAgICAgICAgIGxf c2NhbGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICAgICAg YV9zY2FsYXIlYXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcKKyAgICAgICAg ICBsYV9zY2FsYXIlYXJyKGssbCkgPSAoaSoyNyArIDEwMDAqMTEqaikgKyA0NjcKKyAgICAg ICAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgICAgICAgb3B0X3NjYWxhciVhcnIo ayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NworICAgICAgICAgICAgYV9vcHRfc2Nh bGFyJWFycihrLGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICAgICAgZW5k IGlmCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIGRvCisgICAgICBkbyBqID0gMSwgMgor ICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGRvIGwgPSAxLCBqCisgICAgICAgICAg ICBkbyBrID0gMSwgaQorICAgICAgICAgICAgICBhcnJheShpLGopJWFycihrLGwpID0gaSoy NyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICAgICAgICBsX2FycmF5 KGksaiklYXJyKGssbCkgPSBpKjI3ICsgMTAwMCoxMSpqICsgNDY3ICsgMyprICs1MypsCisg ICAgICAgICAgICAgIGFfYXJyYXkoaSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmog KyA0NjcgKyAzKmsgKzUzKmwKKyAgICAgICAgICAgICAgbGFfYXJyYXkoaSxqKSVhcnIoayxs KSA9IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwKKyAgICAgICAgICAgICAg aWYgKGlzX3ByZXNlbnQpIHRoZW4KKyAgICAgICAgICAgICAgICBvcHRfYXJyYXkoaSxqKSVh cnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwKKyAgICAgICAg ICAgICAgICBhX29wdF9hcnJheShpLGopJWFycihrLGwpID0gaSoyNyArIDEwMDAqMTEqaiAr IDQ2NyArIDMqayArNTMqbAorICAgICAgICAgICAgICBlbmQgaWYKKyAgICAgICAgICAgIGVu ZCBkbworICAgICAgICAgIGVuZCBkbworICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbwor ICAgIGVuZCBpZgorICBlbmQgc3Vicm91dGluZQorCisgIHN1YnJvdXRpbmUgdGVzdChzY2Fs YXIsIGFycmF5LCBhX3NjYWxhciwgYV9hcnJheSwgb3B0X3NjYWxhciwgb3B0X2FycmF5LCAm CisgICAgICAgICAgICAgICAgICBhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5KQorICAgIHR5 cGUodCkgOjogc2NhbGFyLCBhcnJheSg6LDopLCBvcHRfc2NhbGFyLCBvcHRfYXJyYXkoOiw6 KSwgYV9zY2FsYXIsIGFfYXJyYXkoOiw6KQorICAgIHR5cGUodCkgOjogYV9vcHRfc2NhbGFy LCBhX29wdF9hcnJheSg6LDopCisgICAgdHlwZSh0KSA6OiBsX3NjYWxhciwgbF9hcnJheSgz LDIpLCBsYV9zY2FsYXIsIGxhX2FycmF5KDosOikKKyAgICBhbGxvY2F0YWJsZSA6OiBhX3Nj YWxhciwgYV9hcnJheSwgYV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheSwgbGFfc2NhbGFyLCBs YV9hcnJheQorICAgIG9wdGlvbmFsIDo6IG9wdF9zY2FsYXIsIG9wdF9hcnJheSwgYV9vcHRf c2NhbGFyLCBhX29wdF9hcnJheQorCisgICAgaW50ZWdlciA6OiBpLCBqLCBrLCBsCisgICAg bG9naWNhbCA6OiBpc19wcmVzZW50LCBkdW1teV9hbGxvY2VkLCBsb2NhbF9hbGxvY2VkLCBp bm5lcl9hbGxvYworICAgIGlzX3ByZXNlbnQgPSBwcmVzZW50KG9wdF9zY2FsYXIpCisgICAg ZHVtbXlfYWxsb2NlZCA9IGFsbG9jYXRlZChhX3NjYWxhcikKKyAgICBpbm5lcl9hbGxvYyA9 IGFsbG9jYXRlZChzY2FsYXIlc2xyKQorCisgICAgbF9zY2FsYXIldmFyID0gNDIKKyAgICBk byBqID0gMSwgMgorICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAgbF9hcnJheShpLGopJXZh ciA9IGkqOTcgKyAxMDAqNDEqagorICAgICAgZW5kIGRvCisgICAgZW5kIGRvCisKKyAgICBp ZiAoZHVtbXlfYWxsb2NlZCkgdGhlbgorICAgICAgYWxsb2NhdGUobGFfc2NhbGFyLCBsYV9h cnJheSgzLDIpKQorICAgICAgYV9zY2FsYXIldmFyID0gNDIKKyAgICAgIGxhX3NjYWxhciV2 YXIgPSA0MgorICAgICAgZG8gaiA9IDEsIDIKKyAgICAgICAgZG8gaSA9IDEsIDMKKyAgICAg ICAgICBsX2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0MSpqCisgICAgICAgICAgbGFf YXJyYXkoaSxqKSV2YXIgPSBpKjk3ICsgMTAwKjQxKmoKKyAgICAgICAgZW5kIGRvCisgICAg ICBlbmQgZG8KKyAgICBlbmQgaWYKKworICAgIGlmIChpbm5lcl9hbGxvYykgdGhlbgorICAg ICAgbF9zY2FsYXIlc2xyID0gNDY3CisgICAgICBsYV9zY2FsYXIlc2xyID0gNDY3CisgICAg ICBkbyBqID0gMSwgMgorICAgICAgICBkbyBpID0gMSwgMworICAgICAgICAgIGxfYXJyYXko aSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcKKyAgICAgICAgICBsYV9hcnJh eShpLGopJXNsciA9IChpKjk3ICsgMTAwKjQxKmopICArIDQ2NworICAgICAgICBlbmQgZG8K KyAgICAgIGVuZCBkbworCisgICAgICBhbGxvY2F0ZShsX3NjYWxhciVhcnIoNCw1KSwgbGFf c2NhbGFyJWFycig0LDUpKQorICAgICAgZG8gbCA9IDEsIDUKKyAgICAgICAgZG8gayA9IDEs IDQKKyAgICAgICAgICBsX3NjYWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpqKSAr IDQ2NworICAgICAgICAgIGxhX3NjYWxhciVhcnIoayxsKSA9IChpKjI3ICsgMTAwMCoxMSpq KSArIDQ2NworICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAgICAgZG8gaiA9IDEs IDIKKyAgICAgICAgZG8gaSA9IDEsIDMKKyAgICAgICAgICBhbGxvY2F0ZShsX2FycmF5KGks aiklYXJyKGksaiksIGxhX2FycmF5KGksaiklYXJyKGksaikpCisgICAgICAgICAgZG8gbCA9 IDEsIGoKKyAgICAgICAgICAgIGRvIGsgPSAxLCBpCisgICAgICAgICAgICAgIGxfYXJyYXko aSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwKKyAg ICAgICAgICAgICAgbGFfYXJyYXkoaSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmog KyA0NjcgKyAzKmsgKzUzKmwKKyAgICAgICAgICAgIGVuZCBkbworICAgICAgICAgIGVuZCBk bworICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBkbworICAgIGVuZCBpZgorIAorICAgICEg aW1wbGljaXQgbWFwcGluZworICAgICEkb21wIHRhcmdldAorICAgICAgaWYgKGlzX3ByZXNl bnQpIHRoZW4KKyAgICAgICAgY2FsbCBjaGVja19pdCAoaXNfcHJlc2VudCwgZHVtbXlfYWxs b2NlZCwgaW5uZXJfYWxsb2MsICYKKyAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyLCBh cnJheSwgYV9zY2FsYXIsIGFfYXJyYXksICYKKyAgICAgICAgICAgICAgICAgICAgICAgbF9z Y2FsYXIsIGxfYXJyYXksIGxhX3NjYWxhciwgbGFfYXJyYXksICYKKyAgICAgICAgICAgICAg ICAgICAgICAgb3B0X3NjYWxhciwgb3B0X2FycmF5LCBhX29wdF9zY2FsYXIsIGFfb3B0X2Fy cmF5KQorICAgICAgZWxzZQorICAgICAgICBjYWxsIGNoZWNrX2l0IChpc19wcmVzZW50LCBk dW1teV9hbGxvY2VkLCBpbm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAgICAgICAgICBz Y2FsYXIsIGFycmF5LCBhX3NjYWxhciwgYV9hcnJheSwgJgorICAgICAgICAgICAgICAgICAg ICAgICBsX3NjYWxhciwgbF9hcnJheSwgbGFfc2NhbGFyLCBsYV9hcnJheSkKKyAgICAgIGVu ZCBpZgorICAgICEkb21wIGVuZCB0YXJnZXQKKworICAgIGlmIChpc19wcmVzZW50KSB0aGVu CisgICAgICBjYWxsIGNoZWNrX3Jlc2V0IChpc19wcmVzZW50LCBkdW1teV9hbGxvY2VkLCBp bm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyLCBhcnJheSwg YV9zY2FsYXIsIGFfYXJyYXksICYKKyAgICAgICAgICAgICAgICAgICAgICAgIGxfc2NhbGFy LCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5LCAmCisgICAgICAgICAgICAgICAgICAg ICAgICBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0X3NjYWxhciwgYV9vcHRfYXJyYXkp CisgICAgZWxzZQorICAgICAgY2FsbCBjaGVja19yZXNldCAoaXNfcHJlc2VudCwgZHVtbXlf YWxsb2NlZCwgaW5uZXJfYWxsb2MsICYKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxh ciwgYXJyYXksIGFfc2NhbGFyLCBhX2FycmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAg ICBsX3NjYWxhciwgbF9hcnJheSwgbGFfc2NhbGFyLCBsYV9hcnJheSkKKyAgICBlbmRpZgor CisgICAgISBleHBsaWNpdCBtYXBwaW5nCisgICAgISRvbXAgdGFyZ2V0IG1hcChzY2FsYXIs IGFycmF5LCBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfc2NhbGFyLCBhX2FycmF5KSAmCisg ICAgISRvbXAmICAgICAgIG1hcChhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5KSAmCisgICAg ISRvbXAmICAgICAgIG1hcChsX3NjYWxhciwgbF9hcnJheSwgbGFfc2NhbGFyLCBsYV9hcnJh eSkKKyAgICAgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICAgIGNhbGwgY2hlY2tfaXQg KGlzX3ByZXNlbnQsIGR1bW15X2FsbG9jZWQsIGlubmVyX2FsbG9jLCAmCisgICAgICAgICAg ICAgICAgICAgICAgIHNjYWxhciwgYXJyYXksIGFfc2NhbGFyLCBhX2FycmF5LCAmCisgICAg ICAgICAgICAgICAgICAgICAgIGxfc2NhbGFyLCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2Fy cmF5LCAmCisgICAgICAgICAgICAgICAgICAgICAgIG9wdF9zY2FsYXIsIG9wdF9hcnJheSwg YV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheSkKKyAgICAgIGVsc2UKKyAgICAgICAgY2FsbCBj aGVja19pdCAoaXNfcHJlc2VudCwgZHVtbXlfYWxsb2NlZCwgaW5uZXJfYWxsb2MsICYKKyAg ICAgICAgICAgICAgICAgICAgICAgc2NhbGFyLCBhcnJheSwgYV9zY2FsYXIsIGFfYXJyYXks ICYKKyAgICAgICAgICAgICAgICAgICAgICAgbF9zY2FsYXIsIGxfYXJyYXksIGxhX3NjYWxh ciwgbGFfYXJyYXkpCisgICAgICBlbmRpZgorICAgICEkb21wIGVuZCB0YXJnZXQKKworICAg IGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgICBjYWxsIGNoZWNrX3Jlc2V0IChpc19wcmVz ZW50LCBkdW1teV9hbGxvY2VkLCBpbm5lcl9hbGxvYywgJgorICAgICAgICAgICAgICAgICAg ICAgICAgc2NhbGFyLCBhcnJheSwgYV9zY2FsYXIsIGFfYXJyYXksICYKKyAgICAgICAgICAg ICAgICAgICAgICAgIGxfc2NhbGFyLCBsX2FycmF5LCBsYV9zY2FsYXIsIGxhX2FycmF5LCAm CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0 X3NjYWxhciwgYV9vcHRfYXJyYXkpCisgICAgZWxzZQorICAgICAgY2FsbCBjaGVja19yZXNl dCAoaXNfcHJlc2VudCwgZHVtbXlfYWxsb2NlZCwgaW5uZXJfYWxsb2MsICYKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNjYWxhciwgYXJyYXksIGFfc2NhbGFyLCBhX2FycmF5LCAmCisg ICAgICAgICAgICAgICAgICAgICAgICBsX3NjYWxhciwgbF9hcnJheSwgbGFfc2NhbGFyLCBs YV9hcnJheSkKKyAgICBlbmRpZgorICBlbmQgc3Vicm91dGluZQorZW5kIG1vZHVsZQorCitw cm9ncmFtIG1haW4KKyAgdXNlIG0KKyAgaW1wbGljaXQgbm9uZSAodHlwZSwgZXh0ZXJuYWwp CisgIHR5cGUodCkgOjogc2NhbGFyLCBhcnJheSgzLDIpLCBvcHRfc2NhbGFyLCBvcHRfYXJy YXkoMywyKSwgYV9zY2FsYXIsIGFfYXJyYXkoOiw6KQorICB0eXBlKHQpIDo6IGFfb3B0X3Nj YWxhciwgYV9vcHRfYXJyYXkoOiw6KQorICBhbGxvY2F0YWJsZSA6OiBhX3NjYWxhciwgYV9h cnJheSwgYV9vcHRfc2NhbGFyLCBhX29wdF9hcnJheQorICBpbnRlZ2VyIDo6IGksIGosIGss IGwsIG4KKworICBzY2FsYXIldmFyID0gNDIKKyAgb3B0X3NjYWxhciV2YXIgPSA0MgorICBk byBqID0gMSwgMgorICAgIGRvIGkgPSAxLCAzCisgICAgICBhcnJheShpLGopJXZhciA9IGkq OTcgKyAxMDAqNDEqagorICAgICAgb3B0X2FycmF5KGksaikldmFyID0gaSo5NyArIDEwMCo0 MSpqCisgICAgZW5kIGRvCisgIGVuZCBkbworCisgICEgdW5hbGxvY2F0ZWQKKyAgY2FsbCB0 ZXN0IChzY2FsYXIsIGFycmF5LCBhX3NjYWxhciwgYV9hcnJheSkKKyAgY2FsbCB0ZXN0IChz Y2FsYXIsIGFycmF5LCBhX3NjYWxhciwgYV9hcnJheSwgb3B0X3NjYWxhciwgb3B0X2FycmF5 LCBhX29wdF9zY2FsYXIsIGFfb3B0X2FycmF5KQorCisgICEgYWxsb2NhdGVkCisgIGFsbG9j YXRlKGFfc2NhbGFyLCBhX29wdF9zY2FsYXIsIGFfYXJyYXkoMywyKSwgYV9vcHRfYXJyYXko MywyKSkKKyAgYV9zY2FsYXIldmFyID0gNDIKKyAgYV9vcHRfc2NhbGFyJXZhciA9IDQyCisg IGRvIGogPSAxLCAyCisgICAgZG8gaSA9IDEsIDMKKyAgICAgIGFfYXJyYXkoaSxqKSV2YXIg PSBpKjk3ICsgMTAwKjQxKmoKKyAgICAgIGFfb3B0X2FycmF5KGksaikldmFyID0gaSo5NyAr IDEwMCo0MSpqCisgICAgZW5kIGRvCisgIGVuZCBkbworCisgIGNhbGwgdGVzdCAoc2NhbGFy LCBhcnJheSwgYV9zY2FsYXIsIGFfYXJyYXkpCisgIGNhbGwgdGVzdCAoc2NhbGFyLCBhcnJh eSwgYV9zY2FsYXIsIGFfYXJyYXksIG9wdF9zY2FsYXIsIG9wdF9hcnJheSwgYV9vcHRfc2Nh bGFyLCBhX29wdF9hcnJheSkKKworICAhIGNvbXBzIGFsbG9jYXRlZAorICBzY2FsYXIlc2xy ID0gNDY3CisgIGFfc2NhbGFyJXNsciA9IDQ2NworICBvcHRfc2NhbGFyJXNsciA9IDQ2Nwor ICBhX29wdF9zY2FsYXIlc2xyID0gNDY3CisgIGRvIGogPSAxLCAyCisgICAgZG8gaSA9IDEs IDMKKyAgICAgIGFycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3Cisg ICAgICBhX2FycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3CisgICAg ICBvcHRfYXJyYXkoaSxqKSVzbHIgPSAoaSo5NyArIDEwMCo0MSpqKSAgKyA0NjcKKyAgICAg IGFfb3B0X2FycmF5KGksaiklc2xyID0gKGkqOTcgKyAxMDAqNDEqaikgICsgNDY3CisgICAg ZW5kIGRvCisgIGVuZCBkbworCisgIGFsbG9jYXRlKHNjYWxhciVhcnIoNCw1KSwgYV9zY2Fs YXIlYXJyKDQsNSksIG9wdF9zY2FsYXIlYXJyKDQsNSksIGFfb3B0X3NjYWxhciVhcnIoNCw1 KSkKKyAgZG8gbCA9IDEsIDUKKyAgICBkbyBrID0gMSwgNAorICAgICAgc2NhbGFyJWFycihr LGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgICBhX3NjYWxhciVhcnIoayxs KSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NworICAgICAgb3B0X3NjYWxhciVhcnIoayxs KSA9IChpKjI3ICsgMTAwMCoxMSpqKSArIDQ2NworICAgICAgYV9vcHRfc2NhbGFyJWFycihr LGwpID0gKGkqMjcgKyAxMDAwKjExKmopICsgNDY3CisgICAgZW5kIGRvCisgIGVuZCBkbwor ICBkbyBqID0gMSwgMgorICAgIGRvIGkgPSAxLCAzCisgICAgICBhbGxvY2F0ZShhcnJheShp LGopJWFycihpLGopLCBhX2FycmF5KGksaiklYXJyKGksaiksIG9wdF9hcnJheShpLGopJWFy cihpLGopLCBhX29wdF9hcnJheShpLGopJWFycihpLGopKQorICAgICAgZG8gbCA9IDEsIGoK KyAgICAgICAgZG8gayA9IDEsIGkKKyAgICAgICAgICBhcnJheShpLGopJWFycihrLGwpID0g aSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICAgIGFfYXJyYXko aSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmogKyA0NjcgKyAzKmsgKzUzKmwKKyAg ICAgICAgICBvcHRfYXJyYXkoaSxqKSVhcnIoayxsKSA9IGkqMjcgKyAxMDAwKjExKmogKyA0 NjcgKyAzKmsgKzUzKmwKKyAgICAgICAgICBhX29wdF9hcnJheShpLGopJWFycihrLGwpID0g aSoyNyArIDEwMDAqMTEqaiArIDQ2NyArIDMqayArNTMqbAorICAgICAgICBlbmQgZG8KKyAg ICAgIGVuZCBkbworICAgIGVuZCBkbworICBlbmQgZG8KKworICBjYWxsIHRlc3QgKHNjYWxh ciwgYXJyYXksIGFfc2NhbGFyLCBhX2FycmF5KQorICBjYWxsIHRlc3QgKHNjYWxhciwgYXJy YXksIGFfc2NhbGFyLCBhX2FycmF5LCBvcHRfc2NhbGFyLCBvcHRfYXJyYXksIGFfb3B0X3Nj YWxhciwgYV9vcHRfYXJyYXkpCisKKyAgZGVhbGxvY2F0ZShhX3NjYWxhciwgYV9vcHRfc2Nh bGFyLCBhX2FycmF5LCBhX29wdF9hcnJheSkKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vaG9zdF9kYXRhLTUuRjkwIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vaG9zdF9kYXRhLTUuRjkwCmluZGV4 IDkzZTllZTA5ODE4Li43NjM0MWM0MTlmYyAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vaG9zdF9kYXRhLTUuRjkwCisrKyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFuL2hvc3RfZGF0YS01LkY5MApAQCAtNTcs NiArNTcsNyBAQCBzdWJyb3V0aW5lIGZvbyAocDIsIHBhcnIsIGhvc3RfcCwgaG9zdF9wYXJy LCBjb25kKQogICAgICEgeyBkZy1ub3RlIHt2YXJpYWJsZSAnRFwuWzAtOV0rJyBkZWNsYXJl ZCBpbiBibG9jayBpcyBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6 YXRpb24gbGV2ZWx9ICJUT0RPIiB7IHRhcmdldCAqLSotKiB9IC4tNiB9CiAgICAgISB7IGRn LW5vdGUge3ZhcmlhYmxlICd0cmFuc2ZlclwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBp cyBjYW5kaWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWx9 ICJUT0RPIiB7IHRhcmdldCAqLSotKiB9IC4tNyB9CiAgICAgISB7IGRnLW5vdGUge3Zhcmlh YmxlICdwYXJtXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzbid0IGNhbmRpZGF0ZSBm b3IgYWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3Nh YmxlfSAiIiB7IHRhcmdldCAqLSotKiB9IC4tOCB9CisgICAgISB7IGRnLW5vdGUge3Zhcmlh YmxlICdwXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzbid0IGNhbmRpZGF0ZSBmb3Ig YWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxl fSAiIiB7IHRhcmdldCAqLSotKiB9IC4tOSB9CiAgICAgICAhIG5vdCBtYXBwZWQgeWV0LCBz byBpdCB3aWxsIGJlIGVxdWFsIHRvIHRoZSBob3N0IHBvaW50ZXIuCiAgICAgICBpZiAodHJh bnNmZXIoY19sb2MocCksIGhvc3RfcCkgLz0gaG9zdF9wKSBzdG9wIDcKICAgICAgIGlmICh0 cmFuc2ZlcihjX2xvYyhwYXJyKSwgaG9zdF9wYXJyKSAvPSBob3N0X3BhcnIpIHN0b3AgOApA QCAtOTMsNiArOTQsNyBAQCBzdWJyb3V0aW5lIGZvbyAocDIsIHBhcnIsIGhvc3RfcCwgaG9z dF9wYXJyLCBjb25kKQogICAgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdEXC5bMC05XSsn IGRlY2xhcmVkIGluIGJsb2NrIGlzIGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0Mg cHJpdmF0aXphdGlvbiBsZXZlbH0gIlRPRE8iIHsgdGFyZ2V0ICotKi0qIH0gLi02IH0KICAg ICAgICEgeyBkZy1ub3RlIHt2YXJpYWJsZSAndHJhbnNmZXJcLlswLTldKycgZGVjbGFyZWQg aW4gYmxvY2sgaXMgY2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0 aW9uIGxldmVsfSAiVE9ETyIgeyB0YXJnZXQgKi0qLSogfSAuLTcgfQogICAgICAgISB7IGRn LW5vdGUge3ZhcmlhYmxlICdwYXJtXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzbid0 IGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbDog bm90IGFkZHJlc3NhYmxlfSAiIiB7IHRhcmdldCAqLSotKiB9IC4tOCB9CisgICAgICAhIHsg ZGctbm90ZSB7dmFyaWFibGUgJ3BcLlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXNuJ3Qg Y2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsOiBu b3QgYWRkcmVzc2FibGV9ICIiIHsgdGFyZ2V0ICotKi0qIH0gLi05IH0KICNpZiBBQ0NfTUVN X1NIQVJFRAogICAgICAgICBpZiAodHJhbnNmZXIoY19sb2MocCksIGhvc3RfcCkgLz0gaG9z dF9wKSBzdG9wIDE1CiAgICAgICAgIGlmICh0cmFuc2ZlcihjX2xvYyhwYXJyKSwgaG9zdF9w YXJyKSAvPSBob3N0X3BhcnIpIHN0b3AgMTYKQEAgLTExMiw2ICsxMTQsNyBAQCBzdWJyb3V0 aW5lIGZvbyAocDIsIHBhcnIsIGhvc3RfcCwgaG9zdF9wYXJyLCBjb25kKQogICAgICAgICAh IHsgZGctbm90ZSB7dmFyaWFibGUgJ3Bhcm1cLlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sg aXNuJ3QgY2FuZGlkYXRlIGZvciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxl dmVsOiBub3QgYWRkcmVzc2FibGV9ICIiIHsgdGFyZ2V0ICotKi0qIH0gLi02IH0KICAgICAg ICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdEXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2Nr IGlzIGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZl bH0gIlRPRE8iIHsgdGFyZ2V0ICotKi0qIH0gLi03IH0KICAgICAgICAgISB7IGRnLW5vdGUg e3ZhcmlhYmxlICd0cmFuc2ZlclwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpcyBjYW5k aWRhdGUgZm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWx9ICJUT0RP IiB7IHRhcmdldCAqLSotKiB9IC4tOCB9CisgICAgICAgICEgeyBkZy1ub3RlIHt2YXJpYWJs ZSAncFwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpc24ndCBjYW5kaWRhdGUgZm9yIGFk anVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNzYWJsZX0g IiIgeyB0YXJnZXQgKi0qLSogfSAuLTkgfQogI2lmIEFDQ19NRU1fU0hBUkVECiAgICAgICAg IGlmICh0cmFuc2ZlcihjX2xvYyhwKSwgaG9zdF9wKSAvPSBob3N0X3ApIHN0b3AgMTkKICAg ICAgICAgaWYgKHRyYW5zZmVyKGNfbG9jKHBhcnIpLCBob3N0X3BhcnIpIC89IGhvc3RfcGFy cikgc3RvcCAyMApAQCAtMTMxLDYgKzEzNCw3IEBAIHN1YnJvdXRpbmUgZm9vIChwMiwgcGFy ciwgaG9zdF9wLCBob3N0X3BhcnIsIGNvbmQpCiAgICAgICAgICEgeyBkZy1ub3RlIHt2YXJp YWJsZSAncGFybVwuWzAtOV0rJyBkZWNsYXJlZCBpbiBibG9jayBpc24ndCBjYW5kaWRhdGUg Zm9yIGFkanVzdGluZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWw6IG5vdCBhZGRyZXNz YWJsZX0gIiIgeyB0YXJnZXQgKi0qLSogfSAuLTYgfQogICAgICAgICAhIHsgZGctbm90ZSB7 dmFyaWFibGUgJ0RcLlswLTldKycgZGVjbGFyZWQgaW4gYmxvY2sgaXMgY2FuZGlkYXRlIGZv ciBhZGp1c3RpbmcgT3BlbkFDQyBwcml2YXRpemF0aW9uIGxldmVsfSAiVE9ETyIgeyB0YXJn ZXQgKi0qLSogfSAuLTcgfQogICAgICAgICAhIHsgZGctbm90ZSB7dmFyaWFibGUgJ3RyYW5z ZmVyXC5bMC05XSsnIGRlY2xhcmVkIGluIGJsb2NrIGlzIGNhbmRpZGF0ZSBmb3IgYWRqdXN0 aW5nIE9wZW5BQ0MgcHJpdmF0aXphdGlvbiBsZXZlbH0gIlRPRE8iIHsgdGFyZ2V0ICotKi0q IH0gLi04IH0KKyAgICAgICAgISB7IGRnLW5vdGUge3ZhcmlhYmxlICdwXC5bMC05XSsnIGRl Y2xhcmVkIGluIGJsb2NrIGlzbid0IGNhbmRpZGF0ZSBmb3IgYWRqdXN0aW5nIE9wZW5BQ0Mg cHJpdmF0aXphdGlvbiBsZXZlbDogbm90IGFkZHJlc3NhYmxlfSAiIiB7IHRhcmdldCAqLSot KiB9IC4tOSB9CiAjaWYgQUNDX01FTV9TSEFSRUQKICAgICAgICAgaWYgKHRyYW5zZmVyKGNf bG9jKHApLCBob3N0X3ApIC89IGhvc3RfcCkgc3RvcCAyMwogICAgICAgICBpZiAodHJhbnNm ZXIoY19sb2MocGFyciksIGhvc3RfcGFycikgLz0gaG9zdF9wYXJyKSBzdG9wIDI0Cg== --------------oH3woNa1I1dFVWSQRr6MpMEB--