From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ua1-x92f.google.com (mail-ua1-x92f.google.com [IPv6:2607:f8b0:4864:20::92f]) by sourceware.org (Postfix) with ESMTPS id A0EAF3858D39; Mon, 2 Jan 2023 13:15:20 +0000 (GMT) Received: by mail-ua1-x92f.google.com with SMTP id f15so2773256uaq.8; Mon, 02 Jan 2023 05:15:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=YjChi/BhhjZEqGZzoNaOKh2vGOpP1/onTq26/2ZV4QM=; b=hnm89gZPlBkQF1gFzeCqgwIKHdEd7vikjb7DQvr4oPM3yu4hhSmP+tbRR/4s6AynrO pq9KeZ3mb9Cna60QXzY1PxTk80/agZi3e+pEuOQJFx8Eq1KvP5eQarCgO+S6R3DsKIrm 7ufm0qryVB2aigf+V+bKq0wd7gfcxydBxlFmTCJY/S2zwx63/K6IS1BlqIWDn5Ahn++F c+ElMOFMTaBdGfm1+OtpFZY6KF40JW+alsKT3Gjjfz+Ge3zcbx2Y0dUus8fvMBV60G08 SyURE9qFNOPM0egdzUS7kUbhVhuY6v7XxkPdipb2dKD/cpTFgaXhSq3u/LsxyAYTJOeE p+Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YjChi/BhhjZEqGZzoNaOKh2vGOpP1/onTq26/2ZV4QM=; b=yR5Gv2PiAT4Y+olQfKZHR5NdlKKbICF8yduUE4E+P7uMBnhKS/T6R6Zrs5h7sBs5Wd dCLJ6Jm7E3323VQECXmN/JaBzg246rQLIwITTZV4VTThEHryIyh5P88Of0HlRsuTFbaI zYeTqLleyRDQjNbRiIuoqOe+TXWNrxBO5/ouGmis3z53/V5DePcF7tnWb1mkO8118O7I +luLAFzAXNBEeES8UAKhxutDGd4bKSaT54w/cb1CpGXLzfFOy8LbT7vb4dD5KTcUQunI v+lOnyWTPU4Zm+Y8LSJeaITmTYkQkSKuSSuJf/BTKwB1JKethq/DvHwmiD4GFAFb46aO HKOA== X-Gm-Message-State: AFqh2kqse1AISgw6QWu/NdlOAPLo7P8uX1Wa1KRXY5YJGJbrEy4LeVxJ gJcll7HxegGe7YmhUQa6HEACZ58sWWDac4KcYF/VCoMRrjc= X-Google-Smtp-Source: AMrXdXvad+u0qZ+Hc8VwduJdqBaECNBmSClbkmNT+duDvwLqMAsQJyfmdqu+UBf3B0NqKur8jhQjM/S5MNjj5ESIAPY= X-Received: by 2002:ab0:6509:0:b0:51d:7e9f:1692 with SMTP id w9-20020ab06509000000b0051d7e9f1692mr1910150uam.45.1672665319590; Mon, 02 Jan 2023 05:15:19 -0800 (PST) MIME-Version: 1.0 References: <9a2667e2-8055-bcac-1862-05c8ac60ce7a@gmx.de> <3cbaf568-84ac-8498-558f-9560fe395d66@gmx.de> <7ab973cd-f62e-28be-36e8-4e44252a4a38@gmx.de> <061aee5b-c27c-3a9f-419d-9893c2d744c4@netcologne.de> In-Reply-To: From: Paul Richard Thomas Date: Mon, 2 Jan 2023 13:15:06 +0000 Message-ID: Subject: [Patch, fortran] PR37336 (Finalization) - [F03] Finish derived-type finalization To: "fortran@gcc.gnu.org" Cc: Harald Anlauf , Alessandro Fanfarillo , Andrew Benson , Thomas Koenig , Damian Rouson Content-Type: multipart/mixed; boundary="0000000000003486e505f147be2a" X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,HTML_MESSAGE,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000003486e505f147be2a Content-Type: multipart/alternative; boundary="0000000000003486e305f147be28" --0000000000003486e305f147be28 Content-Type: text/plain; charset="UTF-8" Hi All, Happy new year! This thread broke off in February last year, as did my effort to resolve all the issues. However, prodded by Damian, I picked up the mantle again about a month ago. Please consider this posting to be a placeholder. All the dependencies of PR37366 appear to be fixed although some minor issues remain and some divergences with the other brands. I will be contacting the vendors of the other brands today or tomorrow and will try to achieve some resolution with them. In the meantime, I will break the patch down to half a dozen more digestible chunks and will aim to submit formally in a week or so. Of the remaining issues: Function results of finalizable type with zero components confound the gimplifier: see PR65347 comment 3. finalize_38.f90 loses 38 bytes in 4 blocks and has a load of invalid writes. finalize_49.f90 has a number of invalid writes. Please give the patch a whirl and any feedback that you might have would be very welcome. Cheers Paul Fortran:Implement missing finalization features [PR37336] 2022-02-02 Paul Thomas gcc/fortran PR fortran/103854 * class.cc (has_finalizer_component): Do not return true for procedure pointer components. PR fortran/96122 * class.cc (finalize_component): Include the missing arguments in the call to the component's finalizer wrapper. PR fortran/37336 * class.cc (finalizer_insert_packed_call): Remove the redundant argument in the call to the final subroutine. (generate_finalization_wrapper): Add support for assumed rank finalizers. (gfc_may_be_finalized): New helper function. * dump_parse_tree.cc (show_expr): Mark expressions with must_finalize set. * gfortran.h : Add prototype for gfc_may_be_finalized. * resolve.cc (resolve_where, gfc_resolve_where_code_in_forall, gfc_resolve_forall_body, gfc_resolve_code): Check that the op code is still EXEC_ASSIGN. If it is set lhs to must finalize. (generate_component_assignments): Set must_finalize if needed. (gfc_resolve_finalizers): Error if assumed rank finalizer is not the only one. Warning on lack of scalar finalizer modified to account for assumed rank finalizers. (resolve_symbol): Set referenced an unreferenced symbol that will be finalized. * trans-array.cc (gfc_trans_array_constructor_value): Add code to finalize the constructor result. Warn that this feature was removed in F2018 and that it is suppressed by -std=2018. (trans_array_constructor): Add finalblock, pass to previous and apply to loop->post if filled. (gfc_add_loop_ss_code): Add se finalblock to outer loop post. (gfc_trans_array_cobounds, gfc_trans_array_bounds): Add any generated finalization code to the main block. (structure_alloc_comps): Add boolean argument to suppress finalization and use it for calls from gfc_deallocate_alloc_comp_no_caf. Otherwise it defaults to false. Add a second, additional boolean argument to nullify pointer components and use it in gfc_copy_alloc_comp_del_ptrs. (gfc_copy_alloc_comp_del_ptrs): New wrapper for structure_alloc_comps. (gfc_alloc_allocatable_for_assignment): Suppress finalization by setting new arg in call to gfc_deallocate_alloc_comp_no_caf. (gfc_trans_deferred_array): Use gfc_may_be_finalized. * trans-array.h : Add the new boolean argument to the prototype of gfc_deallocate_alloc_comp_no_caf with a default of false. Add prototype for gfc_copy_alloc_comp_del_ptrs. * trans-decl.cc (gfc_get_symbol_decl): Make sure that temporary variables from resolve.cc are not finalized by detection of a leading '_' in the symbol name. (init_intent_out_dt): Tidy up the code. * trans-expr.cc (gfc_init_se): Initialize finalblock. (finalize_function_result): New function that finalizes function results in the correct order. (gfc_conv_procedure_call): Use new function for finalizable function results. Replace in-line block for class results with call to new function. (gfc_conv_expr): Finalize structure constructors for F2003 and F2008. Warn that this feature was deleted in F2018 and, unlike array constructors, is not default. Add array constructor finalblock to the post block. (gfc_trans_scalar_assign): Suppress finalization by setting new argument in call to gfc_deallocate_alloc_comp_no_caf. Add the finalization blocks to the main block. (gfc_assignment_finalizer_call): New function to provide finalization on intrinsic assignment. (gfc_trans_arrayfunc_assign): Use the previous and ensure that finalization occurs after the evaluation of the rhs but must use the initial value for the lhs. (trans_class_assignment, gfc_trans_assignment_1): Call it and add the block between the rhs evaluation and any reallocation on assignment that there might be. * trans-io.cc (gfc_trans_transfer): Add the final block. * trans-stmt.cc (gfc_trans_call, gfc_trans_allocate): likewise. * trans.h: Add finalblock to gfc_se. Add the prototype for gfc_finalize_function_result. gcc/testsuite/ PR fortran/64290 * gfortran.dg/finalize_38.f90 : New test. * gfortran.dg/allocate_with_source_25.f90 : The number of final calls goes down from 6 to 4. * gfortran.dg/unlimited_polymorphic_8.f90 : Tree dump reveals foo.1.x rather than foo.0.x PR fortran/67444 * gfortran.dg/finalize_39.f90 : New test. PR fortran/67471 * gfortran.dg/finalize_40.f90 : New test. PR fortran/69298 PR fortran/70863 * gfortran.dg/finalize_41.f90 : New test. PR fortran/71798 * gfortran.dg/finalize_42.f90 : New test. PR fortran/80524 * gfortran.dg/finalize_43.f90 : New test. PR fortran/82996 * gfortran.dg/finalize_44.f90 : New test. PR fortran/84472 * gfortran.dg/finalize_45.f90 : New test. PR fortran/88735 PR fortran/93691 * gfortran.dg/finalize_46.f90 : New test. PR fortran/91316 * gfortran.dg/finalize_47.f90 : New test. PR fortran/106576 * gfortran.dg/finalize_48.f90 : New test. PR fortran/91316 * gfortran.dg/finalize_47.f90 : New test. --0000000000003486e305f147be28-- --0000000000003486e505f147be2a Content-Type: text/x-patch; charset="US-ASCII"; name="submit020123.diff" Content-Disposition: attachment; filename="submit020123.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lceto7ev0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2NsYXNzLmNjIGIvZ2NjL2ZvcnRy YW4vY2xhc3MuY2MKaW5kZXggNzMxZTliMGZlNmEuLmJhYTUyMDdkNjFiIDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi9jbGFzcy5jYworKysgYi9nY2MvZm9y dHJhbi9jbGFzcy5jYwpAQCAtODk2LDcgKzg5Niw4IEBAIGhhc19maW5hbGl6 ZXJfY29tcG9uZW50IChnZmNfc3ltYm9sICpkZXJpdmVkKQogICAgZ2ZjX2Nv bXBvbmVudCAqYzsKCiAgIGZvciAoYyA9IGRlcml2ZWQtPmNvbXBvbmVudHM7 IGM7IGMgPSBjLT5uZXh0KQotICAgIGlmIChjLT50cy50eXBlID09IEJUX0RF UklWRUQgJiYgIWMtPmF0dHIucG9pbnRlciAmJiAhYy0+YXR0ci5hbGxvY2F0 YWJsZSkKKyAgICBpZiAoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFj LT5hdHRyLnBvaW50ZXIgJiYgIWMtPmF0dHIuYWxsb2NhdGFibGUKKwkmJiBj LT5hdHRyLmZsYXZvciAhPSBGTF9QUk9DRURVUkUpCiAgICAgICB7CiAJaWYg KGMtPnRzLnUuZGVyaXZlZC0+ZjJrX2Rlcml2ZWQKIAkgICAgJiYgYy0+dHMu dS5kZXJpdmVkLT5mMmtfZGVyaXZlZC0+ZmluYWxpemVycykKQEAgLTEwNTks NyArMTA2MCw4IEBAIGZpbmFsaXplX2NvbXBvbmVudCAoZ2ZjX2V4cHIgKmV4 cHIsIGdmY19zeW1ib2wgKmRlcml2ZWQsIGdmY19jb21wb25lbnQgKmNvbXAs CiAgICAgewogICAgICAgLyogQ2FsbCBGSU5BTF9XUkFQUEVSIChjb21wKTsg ICovCiAgICAgICBnZmNfY29kZSAqZmluYWxfd3JhcDsKLSAgICAgIGdmY19z eW1ib2wgKnZ0YWI7CisgICAgICBnZmNfc3ltYm9sICp2dGFiLCAqYnl0ZV9z dHJpZGU7CisgICAgICBnZmNfZXhwciAqc2NhbGFyLCAqc2l6ZV9leHByLCAq ZmluaV9jb2FycmF5X2V4cHI7CiAgICAgICBnZmNfY29tcG9uZW50ICpjOwoK ICAgICAgIHZ0YWIgPSBnZmNfZmluZF9kZXJpdmVkX3Z0YWIgKGNvbXAtPnRz LnUuZGVyaXZlZCk7CkBAIC0xMDY4LDEyICsxMDcwLDU0IEBAIGZpbmFsaXpl X2NvbXBvbmVudCAoZ2ZjX2V4cHIgKmV4cHIsIGdmY19zeW1ib2wgKmRlcml2 ZWQsIGdmY19jb21wb25lbnQgKmNvbXAsCiAJICBicmVhazsKCiAgICAgICBn Y2NfYXNzZXJ0IChjKTsKKworICAgICAgLyogU2V0IHNjYWxhciBhcmd1bWVu dCBmb3Igc3RvcmFnZV9zaXplLiAgKi8KKyAgICAgIGdmY19nZXRfc3ltYm9s ICgiY29tcF9ieXRlX3N0cmlkZSIsIHN1Yl9ucywgJmJ5dGVfc3RyaWRlKTsK KyAgICAgIGJ5dGVfc3RyaWRlLT50cyA9IGUtPnRzOworICAgICAgYnl0ZV9z dHJpZGUtPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgICAgICBieXRl X3N0cmlkZS0+YXR0ci52YWx1ZSA9IDE7CisgICAgICBieXRlX3N0cmlkZS0+ YXR0ci5hcnRpZmljaWFsID0gMTsKKyAgICAgIGdmY19zZXRfc3ltX3JlZmVy ZW5jZWQgKGJ5dGVfc3RyaWRlKTsKKyAgICAgIGdmY19jb21taXRfc3ltYm9s IChieXRlX3N0cmlkZSk7CisgICAgICBzY2FsYXIgPSBnZmNfbHZhbF9leHBy X2Zyb21fc3ltIChieXRlX3N0cmlkZSk7CisKICAgICAgIGZpbmFsX3dyYXAg PSBnZmNfZ2V0X2NvZGUgKEVYRUNfQ0FMTCk7CiAgICAgICBmaW5hbF93cmFw LT5zeW10cmVlID0gYy0+aW5pdGlhbGl6ZXItPnN5bXRyZWU7CiAgICAgICBm aW5hbF93cmFwLT5yZXNvbHZlZF9zeW0gPSBjLT5pbml0aWFsaXplci0+c3lt dHJlZS0+bi5zeW07CiAgICAgICBmaW5hbF93cmFwLT5leHQuYWN0dWFsID0g Z2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKICAgICAgIGZpbmFsX3dyYXAt PmV4dC5hY3R1YWwtPmV4cHIgPSBlOwoKKyAgICAgIC8qIHNpemVfZXhwciA9 IFNUT1JBR0VfU0laRSAoLi4uKSAvIE5VTUVSSUNfU1RPUkFHRV9TSVpFLiAg Ki8KKyAgICAgIHNpemVfZXhwciA9IGdmY19nZXRfZXhwciAoKTsKKyAgICAg IHNpemVfZXhwci0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKyAgICAg IHNpemVfZXhwci0+ZXhwcl90eXBlID0gRVhQUl9PUDsKKyAgICAgIHNpemVf ZXhwci0+dmFsdWUub3Aub3AgPSBJTlRSSU5TSUNfRElWSURFOworCisgICAg ICAvKiBTVE9SQUdFX1NJWkUgKGFycmF5LGtpbmQ9Y19pbnRwdHJfdCkuICAq LworICAgICAgc2l6ZV9leHByLT52YWx1ZS5vcC5vcDEKKwk9IGdmY19idWls ZF9pbnRyaW5zaWNfY2FsbCAoc3ViX25zLCBHRkNfSVNZTV9TVE9SQUdFX1NJ WkUsCisJCQkJICAgICJzdG9yYWdlX3NpemUiLCBnZmNfY3VycmVudF9sb2N1 cywgMiwKKwkJCQkgICAgc2NhbGFyLAorCQkJCSAgICBnZmNfZ2V0X2ludF9l eHByIChnZmNfaW5kZXhfaW50ZWdlcl9raW5kLAorCQkJCQkJICAgICAgTlVM TCwgMCkpOworCisgICAgICAvKiBOVU1FUklDX1NUT1JBR0VfU0laRS4gICov CisgICAgICBzaXplX2V4cHItPnZhbHVlLm9wLm9wMiA9IGdmY19nZXRfaW50 X2V4cHIgKGdmY19pbmRleF9pbnRlZ2VyX2tpbmQsIE5VTEwsCisJCQkJCQkg IGdmY19jaGFyYWN0ZXJfc3RvcmFnZV9zaXplKTsKKyAgICAgIHNpemVfZXhw ci0+dmFsdWUub3Aub3AxLT50cyA9IHNpemVfZXhwci0+dmFsdWUub3Aub3Ay LT50czsKKyAgICAgIHNpemVfZXhwci0+dHMgPSBzaXplX2V4cHItPnZhbHVl Lm9wLm9wMS0+dHM7CisKKyAgICAgIC8qIFdoaWNoIHByb3ZpZGVzIHRoZSBh cmd1bWVudCAnYnl0ZV9zdHJpZGUnLi4uLi4gICovCisgICAgICBmaW5hbF93 cmFwLT5leHQuYWN0dWFsLT5uZXh0ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlz dCAoKTsKKyAgICAgIGZpbmFsX3dyYXAtPmV4dC5hY3R1YWwtPm5leHQtPmV4 cHIgPSBzaXplX2V4cHI7CisKKyAgICAgIC8qIC4uLmFuZCBsYXN0IG9mIGFs bCB0aGUgJ2ZpbmlfY29hcnJheScgYXJndW1lbnQuICAqLworICAgICAgZmlu aV9jb2FycmF5X2V4cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChmaW5p X2NvYXJyYXkpOworICAgICAgZmluYWxfd3JhcC0+ZXh0LmFjdHVhbC0+bmV4 dC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBm aW5hbF93cmFwLT5leHQuYWN0dWFsLT5uZXh0LT5uZXh0LT5leHByID0gZmlu aV9jb2FycmF5X2V4cHI7CisKKworCiAgICAgICBpZiAoKmNvZGUpCiAJewog CSAgKCpjb2RlKS0+bmV4dCA9IGZpbmFsX3dyYXA7CkBAIC0xNDMwLDggKzE0 NzQsNiBAQCBmaW5hbGl6ZXJfaW5zZXJ0X3BhY2tlZF9jYWxsIChnZmNfY29k ZSAqYmxvY2ssIGdmY19maW5hbGl6ZXIgKmZpbmksCiAgIGJsb2NrLT5uZXh0 LT5yZXNvbHZlZF9zeW0gPSBmaW5pLT5wcm9jX3RyZWUtPm4uc3ltOwogICBi bG9jay0+bmV4dC0+ZXh0LmFjdHVhbCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xp c3QgKCk7CiAgIGJsb2NrLT5uZXh0LT5leHQuYWN0dWFsLT5leHByID0gZ2Zj X2x2YWxfZXhwcl9mcm9tX3N5bSAoYXJyYXkpOwotICBibG9jay0+bmV4dC0+ ZXh0LmFjdHVhbC0+bmV4dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7 Ci0gIGJsb2NrLT5uZXh0LT5leHQuYWN0dWFsLT5uZXh0LT5leHByID0gZ2Zj X2NvcHlfZXhwciAoc2l6ZV9leHByKTsKCiAgIC8qIEVMU0UuICAqLwoKQEAg LTIwNDcsMTMgKzIwODksMzIgQEAgZ2VuZXJhdGVfZmluYWxpemF0aW9uX3dy YXBwZXIgKGdmY19zeW1ib2wgKmRlcml2ZWQsIGdmY19uYW1lc3BhY2UgKm5z LAogICAgICAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAocHRyKTsKICAgICAg IGdmY19jb21taXRfc3ltYm9sIChwdHIpOwoKKyAgICAgIGZpbmkgPSBkZXJp dmVkLT5mMmtfZGVyaXZlZC0+ZmluYWxpemVyczsKKworICAgICAgLyogQXNz dW1lZCByYW5rIGZpbmFsaXplcnMgY2FuIGJlIGNhbGxlZCBkaXJlY3RseS4g VGhlIGNhbGwgdGFrZXMgY2FyZQorCSBvZiBzZXR0aW5nIHVwIHRoZSBkZXNj cmlwdG9yLiAgcmVzb2x2ZV9maW5hbGl6ZXJzIGhhcyBhbHJlYWR5IGNoZWNr ZWQKKwkgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGZpbmFsaXplciBmb3IgdGhp cyBraW5kL3R5cGUgKEYyMDE4OiBDNzkwKS4gICovCisgICAgICBpZiAoZmlu aS0+cHJvY190cmVlICYmIGZpbmktPnByb2NfdHJlZS0+bi5zeW0tPmZvcm1h bC0+c3ltLT5hcworCSAgJiYgZmluaS0+cHJvY190cmVlLT5uLnN5bS0+Zm9y bWFsLT5zeW0tPmFzLT50eXBlID09IEFTX0FTU1VNRURfUkFOSykKKwl7CisJ ICBsYXN0X2NvZGUtPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfQ0FMTCk7 CisJICBsYXN0X2NvZGUtPm5leHQtPnN5bXRyZWUgPSBmaW5pLT5wcm9jX3Ry ZWU7CisJICBsYXN0X2NvZGUtPm5leHQtPnJlc29sdmVkX3N5bSA9IGZpbmkt PnByb2NfdHJlZS0+bi5zeW07CisJICBsYXN0X2NvZGUtPm5leHQtPmV4dC5h Y3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworCSAgbGFzdF9j b2RlLT5uZXh0LT5leHQuYWN0dWFsLT5leHByID0gZ2ZjX2x2YWxfZXhwcl9m cm9tX3N5bSAoYXJyYXkpOworCisJICBsYXN0X2NvZGUgPSBsYXN0X2NvZGUt Pm5leHQ7CisJICBnb3RvIGZpbmlzaF9hc3N1bWVkX3Jhbms7CisJfQorCiAg ICAgICAvKiBTRUxFQ1QgQ0FTRSAoUkFOSyAoYXJyYXkpKS4gICovCiAgICAg ICBsYXN0X2NvZGUtPm5leHQgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfU0VMRUNU KTsKICAgICAgIGxhc3RfY29kZSA9IGxhc3RfY29kZS0+bmV4dDsKICAgICAg IGxhc3RfY29kZS0+ZXhwcjEgPSBnZmNfY29weV9leHByIChyYW5rKTsKICAg ICAgIGJsb2NrID0gTlVMTDsKCi0gICAgICBmb3IgKGZpbmkgPSBkZXJpdmVk LT5mMmtfZGVyaXZlZC0+ZmluYWxpemVyczsgZmluaTsgZmluaSA9IGZpbmkt Pm5leHQpCisKKyAgICAgIGZvciAoOyBmaW5pOyBmaW5pID0gZmluaS0+bmV4 dCkKIAl7CiAJICBnY2NfYXNzZXJ0IChmaW5pLT5wcm9jX3RyZWUpOyAgIC8q IFNob3VsZCBoYXZlIGJlZW4gc2V0IGluIGdmY19yZXNvbHZlX2ZpbmFsaXpl cnMuICAqLwogCSAgaWYgKGZpbmktPnByb2NfdHJlZS0+bi5zeW0tPmF0dHIu ZWxlbWVudGFsKQpAQCAtMjE1Miw2ICsyMjEzLDggQEAgZ2VuZXJhdGVfZmlu YWxpemF0aW9uX3dyYXBwZXIgKGdmY19zeW1ib2wgKmRlcml2ZWQsIGdmY19u YW1lc3BhY2UgKm5zLAogCX0KICAgICB9CgorZmluaXNoX2Fzc3VtZWRfcmFu azoKKwogICAvKiBGaW5hbGl6ZSBhbmQgZGVhbGxvY2F0ZSBhbGxvY2F0YWJs ZSBjb21wb25lbnRzLiBUaGUgc2FtZSBtYW51YWwKICAgICAgc2NhbGFyaXph dGlvbiBpcyB1c2VkIGFzIGFib3ZlLiAgKi8KCkBAIC0yNjgyLDYgKzI3NDUs MTQgQEAgeWVzOgogfQoKCitib29sCitnZmNfbWF5X2JlX2ZpbmFsaXplZCAo Z2ZjX3R5cGVzcGVjIHRzKQoreworICByZXR1cm4gKHRzLnR5cGUgPT0gQlRf Q0xBU1MgfHwgKHRzLnR5cGUgPT0gQlRfREVSSVZFRAorCSAgJiYgdHMudS5k ZXJpdmVkICYmIGdmY19pc19maW5hbGl6YWJsZSAodHMudS5kZXJpdmVkLCBO VUxMKSkpOworfQorCisKIC8qIEZpbmQgKG9yIGdlbmVyYXRlKSB0aGUgc3lt Ym9sIGZvciBhbiBpbnRyaW5zaWMgdHlwZSdzIHZ0YWIuICBUaGlzIGlzCiAg ICBuZWVkZWQgdG8gc3VwcG9ydCB1bmxpbWl0ZWQgcG9seW1vcnBoaXNtLiAg Ki8KCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUu Y2MgYi9nY2MvZm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MKaW5kZXggNWFl NzJkYzFjYWMuLjYyOWRkNGVhYjkzIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJh bi9kdW1wLXBhcnNlLXRyZWUuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vZHVtcC1w YXJzZS10cmVlLmNjCkBAIC02MjgsNyArNjI4LDEwIEBAIHNob3dfZXhwciAo Z2ZjX2V4cHIgKnApCiAgICAgY2FzZSBFWFBSX1ZBUklBQkxFOgogICAgICAg aWYgKHAtPnN5bXRyZWUtPm4uc3ltLT5ucyAmJiBwLT5zeW10cmVlLT5uLnN5 bS0+bnMtPnByb2NfbmFtZSkKIAlmcHJpbnRmIChkdW1wZmlsZSwgIiVzOiIs IHAtPnN5bXRyZWUtPm4uc3ltLT5ucy0+cHJvY19uYW1lLT5uYW1lKTsKLSAg ICAgIGZwcmludGYgKGR1bXBmaWxlLCAiJXMiLCBwLT5zeW10cmVlLT5uLnN5 bS0+bmFtZSk7CisgICAgICBpZiAocC0+bXVzdF9maW5hbGl6ZSkKKwlmcHJp bnRmIChkdW1wZmlsZSwgIiVzKG11c3RfZmluYWxpemUpIiwgcC0+c3ltdHJl ZS0+bi5zeW0tPm5hbWUpOworICAgICAgZWxzZQorCWZwcmludGYgKGR1bXBm aWxlLCAiJXMiLCBwLT5zeW10cmVlLT5uLnN5bS0+bmFtZSk7CiAgICAgICBz aG93X3JlZiAocC0+cmVmKTsKICAgICAgIGJyZWFrOwoKQEAgLTM5MDksNyAr MzkxMiw3IEBAIHdyaXRlX3Byb2MgKGdmY19zeW1ib2wgKnN5bSwgYm9vbCBi aW5kX2MpCiAgICAgICBpZiAoc3ltLT5mb3JtYWwpCiAJZnB1dHMgKCIsICIs IGR1bXBmaWxlKTsKICAgICB9Ci0KKwogICBmb3IgKGYgPSBzeW0tPmZvcm1h bDsgZjsgZiA9IGYtPm5leHQpCiAgICAgewogICAgICAgZ2ZjX3N5bWJvbCAq czsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2dmb3J0cmFuLmggYi9nY2Mv Zm9ydHJhbi9nZm9ydHJhbi5oCmluZGV4IDIxOWVmOGM3NjEyLi44ZTJiNWUz NTVmNSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAorKysg Yi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCkBAIC0zOTI4LDYgKzM5MjgsNyBA QCBnZmNfdHlwZWJvdW5kX3Byb2MqIGdmY19maW5kX3R5cGVib3VuZF9pbnRy aW5zaWNfb3AgKGdmY19zeW1ib2wqLCBib29sKiwKIAkJCQkJCSAgICAgbG9j dXMqKTsKIGdmY19zeW10cmVlKiBnZmNfZ2V0X3RicF9zeW10cmVlIChnZmNf c3ltdHJlZSoqLCBjb25zdCBjaGFyKik7CiBib29sIGdmY19pc19maW5hbGl6 YWJsZSAoZ2ZjX3N5bWJvbCAqLCBnZmNfZXhwciAqKik7Citib29sIGdmY19t YXlfYmVfZmluYWxpemVkIChnZmNfdHlwZXNwZWMpOwoKICNkZWZpbmUgQ0xB U1NfREFUQShzeW0pIHN5bS0+dHMudS5kZXJpdmVkLT5jb21wb25lbnRzCiAj ZGVmaW5lIFVOTElNSVRFRF9QT0xZKHN5bSkgXApkaWZmIC0tZ2l0IGEvZ2Nj L2ZvcnRyYW4vcmVzb2x2ZS5jYyBiL2djYy9mb3J0cmFuL3Jlc29sdmUuY2MK aW5kZXggMGY1ZjFkMjc3ZTQuLjBjMGMzMjllMDRkIDEwMDY0NAotLS0gYS9n Y2MvZm9ydHJhbi9yZXNvbHZlLmNjCisrKyBiL2djYy9mb3J0cmFuL3Jlc29s dmUuY2MKQEAgLTEwNTQ3LDYgKzEwNTQ3LDEwIEBAIHJlc29sdmVfd2hlcmUg KGdmY19jb2RlICpjb2RlLCBnZmNfZXhwciAqbWFzaykKIAkgICAgICBpZiAo ZSAmJiAhcmVzb2x2ZV93aGVyZV9zaGFwZSAoY25leHQtPmV4cHIxLCBlKSkK IAkgICAgICAgZ2ZjX2Vycm9yICgiV0hFUkUgYXNzaWdubWVudCB0YXJnZXQg YXQgJUwgaGFzICIKIAkJCSAgImluY29uc2lzdGVudCBzaGFwZSIsICZjbmV4 dC0+ZXhwcjEtPndoZXJlKTsKKworCSAgICAgIGlmIChjbmV4dC0+b3AgPT0g RVhFQ19BU1NJR04pCisJCWNuZXh0LT5leHByMS0+bXVzdF9maW5hbGl6ZSA9 IDE7CisKIAkgICAgICBicmVhazsKCgpAQCAtMTA2MzQsNiArMTA2MzgsMTAg QEAgZ2ZjX3Jlc29sdmVfd2hlcmVfY29kZV9pbl9mb3JhbGwgKGdmY19jb2Rl ICpjb2RlLCBpbnQgbnZhciwKIAkgICAgLyogV0hFUkUgYXNzaWdubWVudCBz dGF0ZW1lbnQgKi8KIAkgICAgY2FzZSBFWEVDX0FTU0lHTjoKIAkgICAgICBn ZmNfcmVzb2x2ZV9hc3NpZ25faW5fZm9yYWxsIChjbmV4dCwgbnZhciwgdmFy X2V4cHIpOworCisJICAgICAgaWYgKGNuZXh0LT5vcCA9PSBFWEVDX0FTU0lH TikKKwkJY25leHQtPmV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMTsKKwogCSAg ICAgIGJyZWFrOwoKIAkgICAgLyogV0hFUkUgb3BlcmF0b3IgYXNzaWdubWVu dCBzdGF0ZW1lbnQgKi8KQEAgLTEwNjgwLDYgKzEwNjg4LDEwIEBAIGdmY19y ZXNvbHZlX2ZvcmFsbF9ib2R5IChnZmNfY29kZSAqY29kZSwgaW50IG52YXIs IGdmY19leHByICoqdmFyX2V4cHIpCiAJY2FzZSBFWEVDX0FTU0lHTjoKIAlj YXNlIEVYRUNfUE9JTlRFUl9BU1NJR046CiAJICBnZmNfcmVzb2x2ZV9hc3Np Z25faW5fZm9yYWxsIChjLCBudmFyLCB2YXJfZXhwcik7CisKKwkgIGlmIChj LT5vcCA9PSBFWEVDX0FTU0lHTikKKwkgICAgYy0+ZXhwcjEtPm11c3RfZmlu YWxpemUgPSAxOworCiAJICBicmVhazsKCiAJY2FzZSBFWEVDX0FTU0lHTl9D QUxMOgpAQCAtMTEzNjAsNiArMTEzNzIsNyBAQCBnZXRfdGVtcF9mcm9tX2V4 cHIgKGdmY19leHByICplLCBnZmNfbmFtZXNwYWNlICpucykKICAgdG1wLT5u LnN5bS0+YXR0ci51c2VfYXNzb2MgPSAwOwogICB0bXAtPm4uc3ltLT5hdHRy LmludGVudCA9IElOVEVOVF9VTktOT1dOOwoKKwogICBpZiAoYXMpCiAgICAg ewogICAgICAgdG1wLT5uLnN5bS0+YXMgPSBnZmNfY29weV9hcnJheV9zcGVj IChhcyk7CkBAIC0xMTUwMCw4ICsxMTUxMyw5IEBAIGdlbmVyYXRlX2NvbXBv bmVudF9hc3NpZ25tZW50cyAoZ2ZjX2NvZGUgKipjb2RlLCBnZmNfbmFtZXNw YWNlICpucykKIHsKICAgZ2ZjX2NvbXBvbmVudCAqY29tcDEsICpjb21wMjsK ICAgZ2ZjX2NvZGUgKnRoaXNfY29kZSA9IE5VTEwsICpoZWFkID0gTlVMTCwg KnRhaWwgPSBOVUxMOwotICBnZmNfZXhwciAqdDE7CisgIGdmY19leHByICp0 MSA9IE5VTEw7CiAgIGludCBlcnJvcl9jb3VudCwgZGVwdGg7CisgIGJvb2wg ZmluYWxpemFibGVfbGhzID0gZ2ZjX21heV9iZV9maW5hbGl6ZWQgKCgqY29k ZSktPmV4cHIxLT50cyk7CgogICBnZmNfZ2V0X2Vycm9ycyAoTlVMTCwgJmVy cm9yX2NvdW50KTsKCkBAIC0xMTU0Niw2ICsxMTU2MCw4IEBAIGdlbmVyYXRl X2NvbXBvbmVudF9hc3NpZ25tZW50cyAoZ2ZjX2NvZGUgKipjb2RlLCBnZmNf bmFtZXNwYWNlICpucykKICAgICAgdG8gdGhlIGZpbmFsIHJlc3VsdCBhbHJl YWR5IGRvZXMgdGhpcy4gICovCiAgIGlmICgoKmNvZGUpLT5leHByMS0+c3lt dHJlZS0+bi5zeW0tPm5hbWVbMl0gIT0gJ0AnKQogICAgIHsKKyAgICAgIGlm IChmaW5hbGl6YWJsZV9saHMpCisJKCpjb2RlKS0+ZXhwcjEtPm11c3RfZmlu YWxpemUgPSAxOwogICAgICAgdGhpc19jb2RlID0gYnVpbGRfYXNzaWdubWVu dCAoRVhFQ19BU1NJR04sCiAJCQkJICAgICgqY29kZSktPmV4cHIxLCAoKmNv ZGUpLT5leHByMiwKIAkJCQkgICAgTlVMTCwgTlVMTCwgKCpjb2RlKS0+bG9j KTsKQEAgLTExNTU1LDEwICsxMTU3MSwxMCBAQCBnZW5lcmF0ZV9jb21wb25l bnRfYXNzaWdubWVudHMgKGdmY19jb2RlICoqY29kZSwgZ2ZjX25hbWVzcGFj ZSAqbnMpCiAgIGNvbXAxID0gKCpjb2RlKS0+ZXhwcjEtPnRzLnUuZGVyaXZl ZC0+Y29tcG9uZW50czsKICAgY29tcDIgPSAoKmNvZGUpLT5leHByMi0+dHMu dS5kZXJpdmVkLT5jb21wb25lbnRzOwoKLSAgdDEgPSBOVUxMOwogICBmb3Ig KDsgY29tcDE7IGNvbXAxID0gY29tcDEtPm5leHQsIGNvbXAyID0gY29tcDIt Pm5leHQpCiAgICAgewogICAgICAgYm9vbCBpbm91dCA9IGZhbHNlOworICAg ICAgYm9vbCBmaW5hbGl6YWJsZV9vdXQgPSBmYWxzZTsKCiAgICAgICAvKiBU aGUgaW50cmluc2ljIGFzc2lnbm1lbnQgZG9lcyB0aGUgcmlnaHQgdGhpbmcg Zm9yIHBvaW50ZXJzCiAJIG9mIGFsbCBraW5kcyBhbmQgYWxsb2NhdGFibGUg Y29tcG9uZW50cy4gICovCkBAIC0xMTYwMiw4ICsxMTYxOCwxMiBAQCBnZW5l cmF0ZV9jb21wb25lbnRfYXNzaWdubWVudHMgKGdmY19jb2RlICoqY29kZSwg Z2ZjX25hbWVzcGFjZSAqbnMpCiAJICAgICBhIHRlbXBvcmFyeSBtdXN0IGJl IGdlbmVyYXRlZCBhbmQgdXNlZCBpbnN0ZWFkLiAgKi8KIAkgIHJzeW0gPSB0 aGlzX2NvZGUtPnJlc29sdmVkX3N5bTsKIAkgIGR1bW15X2FyZ3MgPSBnZmNf c3ltX2dldF9kdW1teV9hcmdzIChyc3ltKTsKLQkgIGlmIChkdW1teV9hcmdz Ci0JICAgICAgJiYgZHVtbXlfYXJncy0+c3ltLT5hdHRyLmludGVudCA9PSBJ TlRFTlRfSU5PVVQpCisJICBmaW5hbGl6YWJsZV9vdXQgPSBnZmNfbWF5X2Jl X2ZpbmFsaXplZCAoY29tcDEtPnRzKQorCQkJICAgICYmIGR1bW15X2FyZ3MK KwkJCSAgICAmJiBkdW1teV9hcmdzLT5zeW0tPmF0dHIuaW50ZW50ID09IElO VEVOVF9PVVQ7CisJICBpbm91dCA9IGR1bW15X2FyZ3MKKwkJICAmJiBkdW1t eV9hcmdzLT5zeW0tPmF0dHIuaW50ZW50ID09IElOVEVOVF9JTk9VVDsKKwkg IGlmIChpbm91dCB8fCBmaW5hbGl6YWJsZV9vdXQpCiAJICAgIHsKIAkgICAg ICBnZmNfY29kZSAqdGVtcF9jb2RlOwogCSAgICAgIGlub3V0ID0gdHJ1ZTsK QEAgLTExNjc1LDE5ICsxMTY5NSwyNSBAQCBnZW5lcmF0ZV9jb21wb25lbnRf YXNzaWdubWVudHMgKGdmY19jb2RlICoqY29kZSwgZ2ZjX25hbWVzcGFjZSAq bnMpCiAJewogCSAgLyogRG9uJ3QgYWRkIGludHJpbnNpYyBhc3NpZ25tZW50 cyBzaW5jZSB0aGV5IGFyZSBhbHJlYWR5CiAJICAgICBlZmZlY3RlZCBieSB0 aGUgaW50cmluc2ljIGFzc2lnbm1lbnQgb2YgdGhlIHN0cnVjdHVyZS4gICov Ci0JICBnZmNfZnJlZV9zdGF0ZW1lbnRzICh0aGlzX2NvZGUpOwotCSAgdGhp c19jb2RlID0gTlVMTDsKLQkgIGNvbnRpbnVlOworCSAgaWYgKGdmY19tYXlf YmVfZmluYWxpemVkICh0aGlzX2NvZGUtPmV4cHIxLT50cykpCisJICAgIHRo aXNfY29kZS0+ZXhwcjEtPm11c3RfZmluYWxpemUgPSAxOworCSAgZWxzZQor CSAgICB7CisJICAgICAgZ2ZjX2ZyZWVfc3RhdGVtZW50cyAodGhpc19jb2Rl KTsKKwkgICAgICB0aGlzX2NvZGUgPSBOVUxMOworCSAgICAgIGNvbnRpbnVl OworCSAgICB9CiAJfQoKICAgICAgIGFkZF9jb2RlX3RvX2NoYWluICgmdGhp c19jb2RlLCAmaGVhZCwgJnRhaWwpOwoKLSAgICAgIGlmICh0MSAmJiBpbm91 dCkKKyAgICAgIGlmICh0MSAmJiAoaW5vdXQgfHwgZmluYWxpemFibGVfb3V0 KSkKIAl7CiAJICAvKiBUcmFuc2ZlciB0aGUgdmFsdWUgdG8gdGhlIGZpbmFs IHJlc3VsdC4gICovCiAJICB0aGlzX2NvZGUgPSBidWlsZF9hc3NpZ25tZW50 IChFWEVDX0FTU0lHTiwKIAkJCQkJKCpjb2RlKS0+ZXhwcjEsIHQxLAogCQkJ CQljb21wMSwgY29tcDIsICgqY29kZSktPmxvYyk7CisJICB0aGlzX2NvZGUt PmV4cHIxLT5tdXN0X2ZpbmFsaXplID0gZmluYWxpemFibGVfb3V0ID8gMCA6 IDE7CiAJICBhZGRfY29kZV90b19jaGFpbiAoJnRoaXNfY29kZSwgJmhlYWQs ICZ0YWlsKTsKIAl9CiAgICAgfQpAQCAtMTIxNDYsNyArMTIxNzIsMTIgQEAg c3RhcnQ6CiAJICAgICAgJiYgY29kZS0+ZXhwcjEtPnRzLnUuZGVyaXZlZAog CSAgICAgICYmIGNvZGUtPmV4cHIxLT50cy51LmRlcml2ZWQtPmF0dHIuZGVm aW5lZF9hc3NpZ25fY29tcCkKIAkgICAgZ2VuZXJhdGVfY29tcG9uZW50X2Fz c2lnbm1lbnRzICgmY29kZSwgbnMpOwotCisJICBlbHNlIGlmIChjb2RlLT5v cCA9PSBFWEVDX0FTU0lHTikKKwkgICAgeworCSAgICAgIGNvZGUtPmV4cHIx LT5tdXN0X2ZpbmFsaXplID0gMTsKKwkgICAgICBpZiAoY29kZS0+ZXhwcjIt PmV4cHJfdHlwZSA9PSBFWFBSX0FSUkFZKQorCQljb2RlLT5leHByMi0+bXVz dF9maW5hbGl6ZSA9IDE7CisJICAgIH0KIAkgIGJyZWFrOwoKIAljYXNlIEVY RUNfTEFCRUxfQVNTSUdOOgpAQCAtMTM3MjMsNiArMTM3NTQsMTUgQEAgZ2Zj X3Jlc29sdmVfZmluYWxpemVycyAoZ2ZjX3N5bWJvbCogZGVyaXZlZCwgYm9v bCAqZmluYWxpemFibGUpCiAJfQogICAgICAgYXJnID0gZHVtbXlfYXJncy0+ c3ltOwoKKyAgICAgIGlmIChhcmctPmFzICYmIGFyZy0+YXMtPnR5cGUgPT0g QVNfQVNTVU1FRF9SQU5LCisJICAmJiAoKGxpc3QgIT0gZGVyaXZlZC0+ZjJr X2Rlcml2ZWQtPmZpbmFsaXplcnMpIHx8IGxpc3QtPm5leHQpKQorCXsKKwkg IGdmY19lcnJvciAoIkZJTkFMIHByb2NlZHVyZSBhdCAlTCB3aXRoIGFzc3Vt ZWQgcmFuayBhcmd1bWVudCBtdXN0ICIKKwkJICAgICAiYmUgdGhlIG9ubHkg ZmluYWxpemVyIHdpdGggdGhlIHNhbWUga2luZC90eXBlICIKKwkJICAgICAi KEYyMDE4OiBDNzkwKSIsICZsaXN0LT53aGVyZSk7CisJICBnb3RvIGVycm9y OworCX0KKwogICAgICAgLyogVGhpcyBhcmd1bWVudCBtdXN0IGJlIG9mIG91 ciB0eXBlLiAgKi8KICAgICAgIGlmIChhcmctPnRzLnR5cGUgIT0gQlRfREVS SVZFRCB8fCBhcmctPnRzLnUuZGVyaXZlZCAhPSBkZXJpdmVkKQogCXsKQEAg LTEzODIzLDcgKzEzODYzLDggQEAgZXJyb3I6CiAgIGlmICh3YXJuX3N1cnBy aXNpbmcgJiYgZGVyaXZlZC0+ZjJrX2Rlcml2ZWQtPmZpbmFsaXplcnMgJiYg IXNlZW5fc2NhbGFyKQogICAgIGdmY193YXJuaW5nIChPUFRfV3N1cnByaXNp bmcsCiAJCSAiT25seSBhcnJheSBGSU5BTCBwcm9jZWR1cmVzIGRlY2xhcmVk IGZvciBkZXJpdmVkIHR5cGUgJXFzIgotCQkgIiBkZWZpbmVkIGF0ICVMLCBz dWdnZXN0IGFsc28gc2NhbGFyIG9uZSIsCisJCSAiIGRlZmluZWQgYXQgJUws IHN1Z2dlc3QgYWxzbyBzY2FsYXIgb25lIHVubGVzcyBhbiBhc3N1bWVkIgor CQkgIiByYW5rIGZpbmFsaXplciBoYXMgYmVlbiBkZWNsYXJlZCIsCiAJCSBk ZXJpdmVkLT5uYW1lLCAmZGVyaXZlZC0+ZGVjbGFyZWRfYXQpOwoKICAgdnRh YiA9IGdmY19maW5kX2Rlcml2ZWRfdnRhYiAoZGVyaXZlZCk7CkBAIC0xNjMy Niw2ICsxNjM2NywxNSBAQCByZXNvbHZlX3N5bWJvbCAoZ2ZjX3N5bWJvbCAq c3ltKQoKICAgaWYgKHN5bS0+cGFyYW1fbGlzdCkKICAgICByZXNvbHZlX3Bk dCAoc3ltKTsKKworICBpZiAoIXN5bS0+YXR0ci5yZWZlcmVuY2VkCisgICAg ICAmJiAoc3ltLT50cy50eXBlID09IEJUX0NMQVNTIHx8IHN5bS0+dHMudHlw ZSA9PSBCVF9ERVJJVkVEKSkKKyAgICB7CisgICAgICBnZmNfZXhwciAqZmlu YWxfZXhwciA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKHN5bSk7CisgICAg ICBpZiAoZ2ZjX2lzX2ZpbmFsaXphYmxlIChmaW5hbF9leHByLT50cy51LmRl cml2ZWQsIE5VTEwpKQorCWdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHN5bSk7 CisgICAgICBnZmNfZnJlZV9leHByIChmaW5hbF9leHByKTsKKyAgICB9CiB9 CgoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjIGIv Z2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKaW5kZXggYjdkNGM0MWI1ZmUu LmEyMjFlZDg5ODM3IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1h cnJheS5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYwpAQCAt OTk0LDkgKzk5NCw5IEBAIGdmY19nZXRfYXJyYXlfc3BhbiAodHJlZSBkZXNj LCBnZmNfZXhwciAqZXhwcikKICAgICAgIGlmICh0bXAgJiYgVFJFRV9DT0RF ICh0bXApID09IEFSUkFZX1RZUEUgJiYgVFlQRV9TVFJJTkdfRkxBRyAodG1w KSkKIAl7CiAJICBnY2NfYXNzZXJ0IChleHByLT50cy50eXBlID09IEJUX0NI QVJBQ1RFUik7Ci0KKwogCSAgdG1wID0gZ2ZjX2dldF9jaGFyYWN0ZXJfbGVu X2luX2J5dGVzICh0bXApOwotCisKIAkgIGlmICh0bXAgPT0gTlVMTF9UUkVF IHx8IGludGVnZXJfemVyb3AgKHRtcCkpCiAJICAgIHsKIAkgICAgICB0cmVl IGJzOwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAgZ2ZjX2dldF9hcnJheV9zcGFu ICh0cmVlIGRlc2MsIGdmY19leHByICpleHByKQogCSAgICAgIHRtcCA9IGZv bGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE1VTFRfRVhQUiwKIAkJ CQkgICAgIGdmY19hcnJheV9pbmRleF90eXBlLCB0bXAsIGJzKTsKIAkgICAg fQotCisKIAkgIHRtcCA9ICh0bXAgJiYgIWludGVnZXJfemVyb3AgKHRtcCkp CiAJICAgID8gKGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUs IHRtcCkpIDogKE5VTExfVFJFRSk7CiAJfQpAQCAtMjAyNiwxMCArMjAyNiwx MSBAQCBnZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3Jfc3ViYXJyYXkgKHN0 bXRibG9ja190ICogcGJsb2NrLAogICAgZm9yIHRoZSBkeW5hbWljIHBhcnRz IG11c3QgYmUgYWxsb2NhdGVkIHVzaW5nIHJlYWxsb2MuICAqLwoKIHN0YXRp YyB2b2lkCi1nZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKHN0 bXRibG9ja190ICogcGJsb2NrLCB0cmVlIHR5cGUsCi0JCQkJICAgdHJlZSBk ZXNjLCBnZmNfY29uc3RydWN0b3JfYmFzZSBiYXNlLAotCQkJCSAgIHRyZWUg KiBwb2Zmc2V0LCB0cmVlICogb2Zmc2V0dmFyLAotCQkJCSAgIGJvb2wgZHlu YW1pYykKK2dmY190cmFuc19hcnJheV9jb25zdHJ1Y3Rvcl92YWx1ZSAoc3Rt dGJsb2NrX3QgKiBwYmxvY2ssCisJCQkJICAgc3RtdGJsb2NrX3QgKiBmaW5h bGJsb2NrLAorCQkJCSAgIHRyZWUgdHlwZSwgdHJlZSBkZXNjLAorCQkJCSAg IGdmY19jb25zdHJ1Y3Rvcl9iYXNlIGJhc2UsIHRyZWUgKiBwb2Zmc2V0LAor CQkJCSAgIHRyZWUgKiBvZmZzZXR2YXIsIGJvb2wgZHluYW1pYykKIHsKICAg dHJlZSB0bXA7CiAgIHRyZWUgc3RhcnQgPSBOVUxMX1RSRUU7CkBAIC0yMDM5 LDYgKzIwNDAsOCBAQCBnZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFs dWUgKHN0bXRibG9ja190ICogcGJsb2NrLCB0cmVlIHR5cGUsCiAgIGdmY19z ZSBzZTsKICAgbXB6X3Qgc2l6ZTsKICAgZ2ZjX2NvbnN0cnVjdG9yICpjOwor ICBnZmNfdHlwZXNwZWMgdHM7CisgIGludCBjdHIgPSAwOwoKICAgdHJlZSBz aGFkb3dfbG9vcHZhciA9IE5VTExfVFJFRTsKICAgZ2ZjX3NhdmVkX3ZhciBz YXZlZF9sb29wdmFyOwpAQCAtMjA0Niw2ICsyMDQ5LDcgQEAgZ2ZjX3RyYW5z X2FycmF5X2NvbnN0cnVjdG9yX3ZhbHVlIChzdG10YmxvY2tfdCAqIHBibG9j aywgdHJlZSB0eXBlLAogICBtcHpfaW5pdCAoc2l6ZSk7CiAgIGZvciAoYyA9 IGdmY19jb25zdHJ1Y3Rvcl9maXJzdCAoYmFzZSk7IGM7IGMgPSBnZmNfY29u c3RydWN0b3JfbmV4dCAoYykpCiAgICAgeworICAgICAgY3RyKys7CiAgICAg ICAvKiBJZiB0aGlzIGlzIGFuIGl0ZXJhdG9yIG9yIGFuIGFycmF5LCB0aGUg b2Zmc2V0IG11c3QgYmUgYSB2YXJpYWJsZS4gICovCiAgICAgICBpZiAoKGMt Pml0ZXJhdG9yIHx8IGMtPmV4cHItPnJhbmsgPiAwKSAmJiBJTlRFR0VSX0NT VF9QICgqcG9mZnNldCkpCiAJZ2ZjX3B1dF9vZmZzZXRfaW50b192YXIgKHBi bG9jaywgcG9mZnNldCwgb2Zmc2V0dmFyKTsKQEAgLTIwOTEsOCArMjA5NSw4 IEBAIGdmY190cmFuc19hcnJheV9jb25zdHJ1Y3Rvcl92YWx1ZSAoc3RtdGJs b2NrX3QgKiBwYmxvY2ssIHRyZWUgdHlwZSwKICAgICAgIGlmIChjLT5leHBy LT5leHByX3R5cGUgPT0gRVhQUl9BUlJBWSkKIAl7CiAJICAvKiBBcnJheSBj b25zdHJ1Y3RvcnMgY2FuIGJlIG5lc3RlZC4gICovCi0JICBnZmNfdHJhbnNf YXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKCZib2R5LCB0eXBlLCBkZXNjLAot CQkJCQkgICAgIGMtPmV4cHItPnZhbHVlLmNvbnN0cnVjdG9yLAorCSAgZ2Zj X3RyYW5zX2FycmF5X2NvbnN0cnVjdG9yX3ZhbHVlICgmYm9keSwgZmluYWxi bG9jaywgdHlwZSwKKwkJCQkJICAgICBkZXNjLCBjLT5leHByLT52YWx1ZS5j b25zdHJ1Y3RvciwKIAkJCQkJICAgICBwb2Zmc2V0LCBvZmZzZXR2YXIsIGR5 bmFtaWMpOwogCX0KICAgICAgIGVsc2UgaWYgKGMtPmV4cHItPnJhbmsgPiAw KQpAQCAtMjIwMCw2ICsyMjA0LDcgQEAgZ2ZjX3RyYW5zX2FycmF5X2NvbnN0 cnVjdG9yX3ZhbHVlIChzdG10YmxvY2tfdCAqIHBibG9jaywgdHJlZSB0eXBl LAogICAgICAgICAgICAgICBnZmNfYWRkX21vZGlmeSAoJmJvZHksICpvZmZz ZXR2YXIsICpwb2Zmc2V0KTsKICAgICAgICAgICAgICAgKnBvZmZzZXQgPSAq b2Zmc2V0dmFyOwogICAgICAgICAgICAgfQorCSAgdHMgPSBjLT5leHByLT50 czsKIAl9CgogICAgICAgLyogVGhlIGZyb250ZW5kIHNob3VsZCBhbHJlYWR5 IGhhdmUgZG9uZSBhbnkgZXhwYW5zaW9ucwpAQCAtMjI5Miw2ICsyMjk3LDM3 IEBAIGdmY190cmFuc19hcnJheV9jb25zdHJ1Y3Rvcl92YWx1ZSAoc3RtdGJs b2NrX3QgKiBwYmxvY2ssIHRyZWUgdHlwZSwKIAkgIGdmY19yZXN0b3JlX3N5 bSAoYy0+aXRlcmF0b3ItPnZhci0+c3ltdHJlZS0+bi5zeW0sICZzYXZlZF9s b29wdmFyKTsKIAl9CiAgICAgfQorCisgIC8qIEYyMDA4IDQuNS42LjMgcGFy YSA1OiBJZiBhbiBleGVjdXRhYmxlIGNvbnN0cnVjdCByZWZlcmVuY2VzIGEg c3RydWN0dXJlCisgICAgIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVj dG9yLCB0aGUgZW50aXR5IGNyZWF0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGlz CisgICAgIGZpbmFsaXplZCBhZnRlciBleGVjdXRpb24gb2YgdGhlIGlubmVy bW9zdCBleGVjdXRhYmxlIGNvbnN0cnVjdCBjb250YWluaW5nCisgICAgIHRo ZSByZWZlcmVuY2UuIFRoaXMsIGluIGZhY3QsIHdhcyBsYXRlciBkZWxldGVk IGJ5IHRoZSBDb21iaW5lZCBUZWNoaWNhbAorICAgICBDb3JyaWdlbmRhIDEg VE8gNCBmb3IgZm9ydHJhbiAyMDA4IChmMDgvMDAxMSkuCisgICAgIFVubGlr ZSBzdHJ1Y3R1cmUgZmluYWxpemVycywgYXJyYXkgY29uc3RydWN0b3IgZmlu YWxpemF0aW9uIGNvbnRpbnVlcyB0bworICAgICBiZSBwZXJtaXR0ZWQgYnkg b3RoZXIgcHJvY2Vzc29ycy4gSXQgdGhlcmVmb3JlIGhhcyBiZWVuIHJldGFp bmVkIGZvcgorICAgICAtc3RkPWdudS4KKworICAgICBUcmFuc21pdCBmaW5h bGl6YXRpb24gb2YgdGhpcyBjb25zdHJ1Y3RvciB0aHJvdWdoICdmaW5hbGJs b2NrJy4gKi8KKyAgaWYgKCghZ2ZjX25vdGlmaWNhdGlvbl9zdGQgKEdGQ19T VERfR05VKQorCSYmICFnZmNfbm90aWZpY2F0aW9uX3N0ZCAoR0ZDX1NURF9G MjAxOCkpICYmIGZpbmFsYmxvY2sgIT0gTlVMTAorICAgICAgJiYgZ2ZjX21h eV9iZV9maW5hbGl6ZWQgKHRzKQorICAgICAgJiYgY3RyID4gMCAmJiBkZXNj ICE9IE5VTExfVFJFRQorICAgICAgJiYgR0ZDX0RFU0NSSVBUT1JfVFlQRV9Q IChUUkVFX1RZUEUgKGRlc2MpKSkKKyAgICB7CisgICAgICBzeW1ib2xfYXR0 cmlidXRlIGF0dHI7CisgICAgICBnZmNfc2UgZnNlOworICAgICAgZ2ZjX3dh cm5pbmcgKDAsICJUaGUgYXJyYXkgY29uc3RydWN0b3IgYXQgJUMgaGFzIGJl ZW4gZmluYWxpemVkLiBUaGlzIgorCQkgICAgICAiIGZlYXR1cmUgd2FzIHJl bW92ZWQgYnkgZjA4LzAwMTEuIFVzZSAtc3RkPWYyMDE4IHRvIgorCQkgICAg ICAiIGVsaW1pbmF0ZSB0aGUgZmluYWxpemF0aW9uLiIpOworICAgICAgYXR0 ci5wb2ludGVyID0gYXR0ci5hbGxvY2F0YWJsZSA9IDA7CisgICAgICBnZmNf aW5pdF9zZSAoJmZzZSwgTlVMTCk7CisgICAgICBmc2UuZXhwciA9IGRlc2M7 CisgICAgICBnZmNfZmluYWxpemVfZnVuY3Rpb25fcmVzdWx0ICgmZnNlLCB0 cy51LmRlcml2ZWQsIGF0dHIsIDEpOworICAgICAgZ2ZjX2FkZF9ibG9ja190 b19ibG9jayAoZmluYWxibG9jaywgJmZzZS5wcmUpOworICAgICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoZmluYWxibG9jaywgJmZzZS5maW5hbGJsb2Nr KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKGZpbmFsYmxvY2ss ICZmc2UucG9zdCk7CisgICAgfQorCiAgIG1wel9jbGVhciAoc2l6ZSk7CiB9 CgpAQCAtMjczOCw2ICsyNzc0LDcgQEAgdHJhbnNfYXJyYXlfY29uc3RydWN0 b3IgKGdmY19zcyAqIHNzLCBsb2N1cyAqIHdoZXJlKQogICBnZmNfc3MgKnM7 CiAgIHRyZWUgbmVnX2xlbjsKICAgY2hhciAqbXNnOworICBzdG10YmxvY2tf dCBmaW5hbGJsb2NrOwoKICAgLyogU2F2ZSB0aGUgb2xkIHZhbHVlcyBmb3Ig bmVzdGVkIGNoZWNraW5nLiAgKi8KICAgb2xkX2ZpcnN0X2xlbiA9IGZpcnN0 X2xlbjsKQEAgLTI4OTcsOCArMjkzNCwxMiBAQCB0cmFuc19hcnJheV9jb25z dHJ1Y3RvciAoZ2ZjX3NzICogc3MsIGxvY3VzICogd2hlcmUpCiAgIG9mZnNl dHZhciA9IGdmY19jcmVhdGVfdmFyX25wIChnZmNfYXJyYXlfaW5kZXhfdHlw ZSwgIm9mZnNldCIpOwogICBzdXBwcmVzc193YXJuaW5nIChvZmZzZXR2YXIp OwogICBUUkVFX1VTRUQgKG9mZnNldHZhcikgPSAwOwotICBnZmNfdHJhbnNf YXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKCZvdXRlcl9sb29wLT5wcmUsIHR5 cGUsIGRlc2MsIGMsCi0JCQkJICAgICAmb2Zmc2V0LCAmb2Zmc2V0dmFyLCBk eW5hbWljKTsKKworICBnZmNfaW5pdF9ibG9jayAoJmZpbmFsYmxvY2spOwor ICBnZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKCZvdXRlcl9s b29wLT5wcmUsCisJCQkJICAgICBleHByLT5tdXN0X2ZpbmFsaXplID8gJmZp bmFsYmxvY2sgOiBOVUxMLAorCQkJCSAgICAgdHlwZSwgZGVzYywgYywgJm9m ZnNldCwgJm9mZnNldHZhciwKKwkJCQkgICAgIGR5bmFtaWMpOwoKICAgLyog SWYgdGhlIGFycmF5IGdyb3dzIGR5bmFtaWNhbGx5LCB0aGUgdXBwZXIgYm91 bmQgb2YgdGhlIGxvb3AgdmFyaWFibGUKICAgICAgaXMgZGV0ZXJtaW5lZCBi eSB0aGUgYXJyYXkncyBmaW5hbCB1cHBlciBib3VuZC4gICovCkBAIC0yOTMz LDYgKzI5NzQsMTUgQEAgZmluaXNoOgogICBmaXJzdF9sZW4gPSBvbGRfZmly c3RfbGVuOwogICBmaXJzdF9sZW5fdmFsID0gb2xkX2ZpcnN0X2xlbl92YWw7 CiAgIHR5cGVzcGVjX2NoYXJhcnJheV9jdG9yID0gb2xkX3R5cGVzcGVjX2No YXJhcnJheV9jdG9yOworCisgIC8qIEYyMDA4IDQuNS42LjMgcGFyYSA1OiBJ ZiBhbiBleGVjdXRhYmxlIGNvbnN0cnVjdCByZWZlcmVuY2VzIGEgc3RydWN0 dXJlCisgICAgIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yLCB0 aGUgZW50aXR5IGNyZWF0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGlzCisgICAg IGZpbmFsaXplZCBhZnRlciBleGVjdXRpb24gb2YgdGhlIGlubmVybW9zdCBl eGVjdXRhYmxlIGNvbnN0cnVjdCBjb250YWluaW5nCisgICAgIHRoZSByZWZl cmVuY2UuICAqLworICBpZiAoKGV4cHItPnRzLnR5cGUgPT0gQlRfREVSSVZF RCB8fCBleHByLT50cy50eXBlID09IEJUX0NMQVNTKQorICAgICAgICYmIGZp bmFsYmxvY2suaGVhZCAhPSBOVUxMX1RSRUUpCisgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmxvb3AtPnBvc3QsICZmaW5hbGJsb2NrKTsKKwogfQoK CkBAIC0zMTYxLDYgKzMyMTEsNyBAQCBnZmNfYWRkX2xvb3Bfc3NfY29kZSAo Z2ZjX2xvb3BpbmZvICogbG9vcCwgZ2ZjX3NzICogc3MsIGJvb2wgc3Vic2Ny aXB0LAogCSAgZ2ZjX2NvbnZfZXhwciAoJnNlLCBleHByKTsKIAkgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZvdXRlcl9sb29wLT5wcmUsICZzZS5wcmUp OwogCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJm91dGVyX2xvb3AtPnBv c3QsICZzZS5wb3N0KTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZv dXRlcl9sb29wLT5wb3N0LCAmc2UuZmluYWxibG9jayk7CiAJICBzc19pbmZv LT5zdHJpbmdfbGVuZ3RoID0gc2Uuc3RyaW5nX2xlbmd0aDsKIAkgIGJyZWFr OwoKQEAgLTY0NTcsMjAgKzY1MDgsMjIgQEAgZ2ZjX3RyYW5zX2FycmF5X2Nv Ym91bmRzICh0cmVlIHR5cGUsIHN0bXRibG9ja190ICogcGJsb2NrLAogICAg ICAgLyogRXZhbHVhdGUgbm9uLWNvbnN0YW50IGFycmF5IGJvdW5kIGV4cHJl c3Npb25zLiAgKi8KICAgICAgIGxib3VuZCA9IEdGQ19UWVBFX0FSUkFZX0xC T1VORCAodHlwZSwgZGltKTsKICAgICAgIGlmIChhcy0+bG93ZXJbZGltXSAm JiAhSU5URUdFUl9DU1RfUCAobGJvdW5kKSkKLSAgICAgICAgewotICAgICAg ICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAgICAgICAgIGdmY19j b252X2V4cHJfdHlwZSAoJnNlLCBhcy0+bG93ZXJbZGltXSwgZ2ZjX2FycmF5 X2luZGV4X3R5cGUpOwotICAgICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKHBibG9jaywgJnNlLnByZSk7Ci0gICAgICAgICAgZ2ZjX2FkZF9tb2Rp ZnkgKHBibG9jaywgbGJvdW5kLCBzZS5leHByKTsKLSAgICAgICAgfQorCXsK KwkgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCSAgZ2ZjX2NvbnZfZXhw cl90eXBlICgmc2UsIGFzLT5sb3dlcltkaW1dLCBnZmNfYXJyYXlfaW5kZXhf dHlwZSk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChwYmxvY2ssICZz ZS5wcmUpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAm c2UuZmluYWxibG9jayk7CisJICBnZmNfYWRkX21vZGlmeSAocGJsb2NrLCBs Ym91bmQsIHNlLmV4cHIpOworCX0KICAgICAgIHVib3VuZCA9IEdGQ19UWVBF X0FSUkFZX1VCT1VORCAodHlwZSwgZGltKTsKICAgICAgIGlmIChhcy0+dXBw ZXJbZGltXSAmJiAhSU5URUdFUl9DU1RfUCAodWJvdW5kKSkKLSAgICAgICAg ewotICAgICAgICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAgICAg ICAgIGdmY19jb252X2V4cHJfdHlwZSAoJnNlLCBhcy0+dXBwZXJbZGltXSwg Z2ZjX2FycmF5X2luZGV4X3R5cGUpOwotICAgICAgICAgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKHBibG9jaywgJnNlLnByZSk7Ci0gICAgICAgICAgZ2Zj X2FkZF9tb2RpZnkgKHBibG9jaywgdWJvdW5kLCBzZS5leHByKTsKLSAgICAg ICAgfQorCXsKKwkgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCSAgZ2Zj X2NvbnZfZXhwcl90eXBlICgmc2UsIGFzLT51cHBlcltkaW1dLCBnZmNfYXJy YXlfaW5kZXhfdHlwZSk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChw YmxvY2ssICZzZS5wcmUpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAo cGJsb2NrLCAmc2UuZmluYWxibG9jayk7CisJICBnZmNfYWRkX21vZGlmeSAo cGJsb2NrLCB1Ym91bmQsIHNlLmV4cHIpOworCX0KICAgICB9CiB9CgpAQCAt NjUwMiwyMCArNjU1NSwyMiBAQCBnZmNfdHJhbnNfYXJyYXlfYm91bmRzICh0 cmVlIHR5cGUsIGdmY19zeW1ib2wgKiBzeW0sIHRyZWUgKiBwb2Zmc2V0LAog ICAgICAgLyogRXZhbHVhdGUgbm9uLWNvbnN0YW50IGFycmF5IGJvdW5kIGV4 cHJlc3Npb25zLiAgKi8KICAgICAgIGxib3VuZCA9IEdGQ19UWVBFX0FSUkFZ X0xCT1VORCAodHlwZSwgZGltKTsKICAgICAgIGlmIChhcy0+bG93ZXJbZGlt XSAmJiAhSU5URUdFUl9DU1RfUCAobGJvdW5kKSkKLSAgICAgICAgewotICAg ICAgICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAgICAgICAgIGdm Y19jb252X2V4cHJfdHlwZSAoJnNlLCBhcy0+bG93ZXJbZGltXSwgZ2ZjX2Fy cmF5X2luZGV4X3R5cGUpOwotICAgICAgICAgIGdmY19hZGRfYmxvY2tfdG9f YmxvY2sgKHBibG9jaywgJnNlLnByZSk7Ci0gICAgICAgICAgZ2ZjX2FkZF9t b2RpZnkgKHBibG9jaywgbGJvdW5kLCBzZS5leHByKTsKLSAgICAgICAgfQor CXsKKwkgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCSAgZ2ZjX2NvbnZf ZXhwcl90eXBlICgmc2UsIGFzLT5sb3dlcltkaW1dLCBnZmNfYXJyYXlfaW5k ZXhfdHlwZSk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChwYmxvY2ss ICZzZS5wcmUpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2Nr LCAmc2UuZmluYWxibG9jayk7CisJICBnZmNfYWRkX21vZGlmeSAocGJsb2Nr LCBsYm91bmQsIHNlLmV4cHIpOworCX0KICAgICAgIHVib3VuZCA9IEdGQ19U WVBFX0FSUkFZX1VCT1VORCAodHlwZSwgZGltKTsKICAgICAgIGlmIChhcy0+ dXBwZXJbZGltXSAmJiAhSU5URUdFUl9DU1RfUCAodWJvdW5kKSkKLSAgICAg ICAgewotICAgICAgICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotICAg ICAgICAgIGdmY19jb252X2V4cHJfdHlwZSAoJnNlLCBhcy0+dXBwZXJbZGlt XSwgZ2ZjX2FycmF5X2luZGV4X3R5cGUpOwotICAgICAgICAgIGdmY19hZGRf YmxvY2tfdG9fYmxvY2sgKHBibG9jaywgJnNlLnByZSk7Ci0gICAgICAgICAg Z2ZjX2FkZF9tb2RpZnkgKHBibG9jaywgdWJvdW5kLCBzZS5leHByKTsKLSAg ICAgICAgfQorCXsKKwkgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCSAg Z2ZjX2NvbnZfZXhwcl90eXBlICgmc2UsIGFzLT51cHBlcltkaW1dLCBnZmNf YXJyYXlfaW5kZXhfdHlwZSk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr IChwYmxvY2ssICZzZS5wcmUpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAocGJsb2NrLCAmc2UuZmluYWxibG9jayk7CisJICBnZmNfYWRkX21vZGlm eSAocGJsb2NrLCB1Ym91bmQsIHNlLmV4cHIpOworCX0KICAgICAgIC8qIFRo ZSBvZmZzZXQgb2YgdGhpcyBkaW1lbnNpb24uICBvZmZzZXQgPSBvZmZzZXQg LSBsYm91bmQgKiBzdHJpZGUuICAqLwogICAgICAgdG1wID0gZm9sZF9idWls ZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTVVMVF9FWFBSLCBnZmNfYXJyYXlf aW5kZXhfdHlwZSwKIAkJCSAgICAgbGJvdW5kLCBzaXplKTsKQEAgLTY1Mjks MTkgKzY1ODQsMTkgQEAgZ2ZjX3RyYW5zX2FycmF5X2JvdW5kcyAodHJlZSB0 eXBlLCBnZmNfc3ltYm9sICogc3ltLCB0cmVlICogcG9mZnNldCwKIAlzdHJp ZGUgPSBHRkNfVFlQRV9BUlJBWV9TSVpFICh0eXBlKTsKCiAgICAgICBpZiAo dWJvdW5kICE9IE5VTExfVFJFRSAmJiAhKHN0cmlkZSAmJiBJTlRFR0VSX0NT VF9QIChzdHJpZGUpKSkKLSAgICAgICAgewotICAgICAgICAgIC8qIENhbGN1 bGF0ZSBzdHJpZGUgPSBzaXplICogKHVib3VuZCArIDEgLSBsYm91bmQpLiAg Ki8KLSAgICAgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xv Y2F0aW9uLCBNSU5VU19FWFBSLAorCXsKKwkgIC8qIENhbGN1bGF0ZSBzdHJp ZGUgPSBzaXplICogKHVib3VuZCArIDEgLSBsYm91bmQpLiAgKi8KKwkgIHRt cCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE1JTlVTX0VY UFIsCiAJCQkJIGdmY19hcnJheV9pbmRleF90eXBlLAogCQkJCSBnZmNfaW5k ZXhfb25lX25vZGUsIGxib3VuZCk7Ci0gICAgICAgICAgdG1wID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLAorCSAgdG1w ID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBS LAogCQkJCSBnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdWJvdW5kLCB0bXApOwot ICAgICAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRp b24sIE1VTFRfRVhQUiwKKwkgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5w dXRfbG9jYXRpb24sIE1VTFRfRVhQUiwKIAkJCQkgZ2ZjX2FycmF5X2luZGV4 X3R5cGUsIHNpemUsIHRtcCk7Ci0gICAgICAgICAgaWYgKHN0cmlkZSkKLSAg ICAgICAgICAgIGdmY19hZGRfbW9kaWZ5IChwYmxvY2ssIHN0cmlkZSwgdG1w KTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpZGUgPSBnZmNf ZXZhbHVhdGVfbm93ICh0bXAsIHBibG9jayk7CisJICBpZiAoc3RyaWRlKQor CSAgICBnZmNfYWRkX21vZGlmeSAocGJsb2NrLCBzdHJpZGUsIHRtcCk7CisJ ICBlbHNlCisJICAgIHN0cmlkZSA9IGdmY19ldmFsdWF0ZV9ub3cgKHRtcCwg cGJsb2NrKTsKCiAJICAvKiBNYWtlIHN1cmUgdGhhdCBuZWdhdGl2ZSBzaXpl IGFycmF5cyBhcmUgdHJhbnNsYXRlZAogCSAgICAgdG8gYmVpbmcgemVybyBz aXplLiAgKi8KQEAgLTY1NTEsNyArNjYwNiw3IEBAIGdmY190cmFuc19hcnJh eV9ib3VuZHMgKHRyZWUgdHlwZSwgZ2ZjX3N5bWJvbCAqIHN5bSwgdHJlZSAq IHBvZmZzZXQsCiAJCQkJIGdmY19hcnJheV9pbmRleF90eXBlLCB0bXAsCiAJ CQkJIHN0cmlkZSwgZ2ZjX2luZGV4X3plcm9fbm9kZSk7CiAJICBnZmNfYWRk X21vZGlmeSAocGJsb2NrLCBzdHJpZGUsIHRtcCk7Ci0gICAgICAgIH0KKwl9 CgogICAgICAgc2l6ZSA9IHN0cmlkZTsKICAgICB9CkBAIC03NTMyLDcgKzc1 ODcsNyBAQCBnZmNfY29udl9leHByX2Rlc2NyaXB0b3IgKGdmY19zZSAqc2Us IGdmY19leHByICpleHByKQoKICAgaWYgKCFzZS0+ZGlyZWN0X2J5cmVmKQog ICAgIHNlLT51bmxpbWl0ZWRfcG9seW1vcnBoaWMgPSBVTkxJTUlURURfUE9M WSAoZXhwcik7Ci0KKwogICAvKiBTcGVjaWFsIGNhc2UgdGhpbmdzIHdlIGtu b3cgd2UgY2FuIHBhc3MgZWFzaWx5LiAgKi8KICAgc3dpdGNoIChleHByLT5l eHByX3R5cGUpCiAgICAgewpAQCAtODk3NCw5ICs5MDI5LDExIEBAIGVudW0g e0RFQUxMT0NBVEVfQUxMT0NfQ09NUCA9IDEsIE5VTExJRllfQUxMT0NfQ09N UCwKIHN0YXRpYyBnZmNfYWN0dWFsX2FyZ2xpc3QgKnBkdF9wYXJhbV9saXN0 OwoKIHN0YXRpYyB0cmVlCi1zdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19z eW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAotCQkgICAgICAgdHJlZSBk ZXN0LCBpbnQgcmFuaywgaW50IHB1cnBvc2UsIGludCBjYWZfbW9kZSwKLQkJ ICAgICAgIGdmY19jb19zdWJyb3V0aW5lc19hcmdzICphcmdzKQorc3RydWN0 dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUg ZGVjbCwgdHJlZSBkZXN0LAorCQkgICAgICAgaW50IHJhbmssIGludCBwdXJw b3NlLCBpbnQgY2FmX21vZGUsCisJCSAgICAgICBnZmNfY29fc3Vicm91dGlu ZXNfYXJncyAqYXJncywKKwkJICAgICAgIGJvb2wgbm9fZmluYWxpemF0aW9u ID0gZmFsc2UsCisJCSAgICAgICBib29sIGRlbF9wdHJzID0gZmFsc2UpCiB7 CiAgIGdmY19jb21wb25lbnQgKmM7CiAgIGdmY19sb29waW5mbyBsb29wOwpA QCAtOTA2NCwxMSArOTEyMSwxMiBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkJCQkgICAg IGdmY19jb252X2FycmF5X2RhdGEgKGRlc3QpKTsKIAkgIGRyZWYgPSBnZmNf YnVpbGRfYXJyYXlfcmVmICh0bXAsIGluZGV4LCBOVUxMKTsKIAkgIHRtcCA9 IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIHZyZWYsIGRyZWYs IHJhbmssCi0JCQkJICAgICAgIENPUFlfQUxMT0NfQ09NUCwgY2FmX21vZGUs IGFyZ3MpOworCQkJCSAgICAgICBDT1BZX0FMTE9DX0NPTVAsIGNhZl9tb2Rl LCBhcmdzLAorCQkJCSAgICAgICBub19maW5hbGl6YXRpb24pOwogCX0KICAg ICAgIGVsc2UKIAl0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90 eXBlLCB2cmVmLCBOVUxMX1RSRUUsIHJhbmssIHB1cnBvc2UsCi0JCQkJICAg ICBjYWZfbW9kZSwgYXJncyk7CisJCQkJICAgICBjYWZfbW9kZSwgYXJncywg bm9fZmluYWxpemF0aW9uKTsKCiAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxv Y2sgKCZsb29wYm9keSwgdG1wKTsKCkBAIC05MTAyLDEzICs5MTYwLDE1IEBA IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBl LCB0cmVlIGRlY2wsCiAgIGlmIChwdXJwb3NlID09IERFQUxMT0NBVEVfQUxM T0NfQ09NUCAmJiBkZXJfdHlwZS0+YXR0ci5wZHRfdHlwZSkKICAgICB7CiAg ICAgICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBk ZWNsLCBOVUxMX1RSRUUsIHJhbmssCi0JCQkJICAgREVBTExPQ0FURV9QRFRf Q09NUCwgMCwgYXJncyk7CisJCQkJICAgREVBTExPQ0FURV9QRFRfQ09NUCwg MCwgYXJncywKKwkJCQkgICBub19maW5hbGl6YXRpb24pOwogICAgICAgZ2Zj X2FkZF9leHByX3RvX2Jsb2NrICgmZm5ibG9jaywgdG1wKTsKICAgICB9CiAg IGVsc2UgaWYgKHB1cnBvc2UgPT0gQUxMT0NBVEVfUERUX0NPTVAgJiYgZGVy X3R5cGUtPmF0dHIuYWxsb2NfY29tcCkKICAgICB7CiAgICAgICB0bXAgPSBz dHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNsLCBOVUxMX1RS RUUsIHJhbmssCi0JCQkJICAgTlVMTElGWV9BTExPQ19DT01QLCAwLCBhcmdz KTsKKwkJCQkgICBOVUxMSUZZX0FMTE9DX0NPTVAsIDAsIGFyZ3MsCisJCQkJ ICAgbm9fZmluYWxpemF0aW9uKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJmZuYmxvY2ssIHRtcCk7CiAgICAgfQoKQEAgLTkxNzAsNyArOTIz MCw3IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRl cl90eXBlLCB0cmVlIGRlY2wsCiAJCSAgYWRkX3doZW5fYWxsb2NhdGVkCiAJ CSAgICAgID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChDTEFTU19EQVRBIChj KS0+dHMudS5kZXJpdmVkLAogCQkJCQkgICAgICAgY29tcCwgTlVMTF9UUkVF LCByYW5rLCBwdXJwb3NlLAotCQkJCQkgICAgICAgY2FmX21vZGUsIGFyZ3Mp OworCQkJCQkgICAgICAgY2FmX21vZGUsIGFyZ3MsIG5vX2ZpbmFsaXphdGlv bik7CiAJCX0KIAkgICAgICBlbHNlCiAJCXsKQEAgLTkxNzgsNyArOTIzOCw4 IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90 eXBlLCB0cmVlIGRlY2wsCiAJCSAgYWRkX3doZW5fYWxsb2NhdGVkID0gc3Ry dWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2ZWQsCiAJCQkJCQkJ ICAgICAgY29tcCwgTlVMTF9UUkVFLAogCQkJCQkJCSAgICAgIHJhbmssIHB1 cnBvc2UsCi0JCQkJCQkJICAgICAgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkJ CSAgICAgIGNhZl9tb2RlLCBhcmdzLAorCQkJCQkJCSAgICAgIG5vX2ZpbmFs aXphdGlvbik7CiAJCX0KIAkgICAgfQoKQEAgLTkyOTQsOCArOTM1NSw4IEBA IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBl LCB0cmVlIGRlY2wsCiAJCWNvbnRpbnVlOwogCSAgICB9CgotCSAgaWYgKChj LT50cy50eXBlID09IEJUX0RFUklWRUQgJiYgIWMtPmF0dHIucG9pbnRlcikK LQkgICAgIHx8IChjLT50cy50eXBlID09IEJUX0NMQVNTICYmICFDTEFTU19E QVRBIChjKS0+YXR0ci5jbGFzc19wb2ludGVyKSkKKwkgIGlmICghbm9fZmlu YWxpemF0aW9uICYmICgoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFj LT5hdHRyLnBvaW50ZXIpCisJICAgICB8fCAoYy0+dHMudHlwZSA9PSBCVF9D TEFTUyAmJiAhQ0xBU1NfREFUQSAoYyktPmF0dHIuY2xhc3NfcG9pbnRlcikp KQogCSAgICAvKiBDYWxsIHRoZSBmaW5hbGl6ZXIsIHdoaWNoIHdpbGwgZnJl ZSB0aGUgbWVtb3J5IGFuZCBudWxsaWZ5IHRoZQogCSAgICAgICBwb2ludGVy IG9mIGFuIGFycmF5LiAgKi8KIAkgICAgZGVhbGxvY2F0ZV9jYWxsZWQgPSBn ZmNfYWRkX2NvbXBfZmluYWxpemVyX2NhbGwgKCZ0bXBibG9jaywgY29tcCwg YywKQEAgLTkzMjMsNyArOTM4NCw3IEBAIHN0cnVjdHVyZV9hbGxvY19jb21w cyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCSAgYWRk X3doZW5fYWxsb2NhdGVkCiAJCSAgICAgID0gc3RydWN0dXJlX2FsbG9jX2Nv bXBzIChDTEFTU19EQVRBIChjKS0+dHMudS5kZXJpdmVkLAogCQkJCQkgICAg ICAgY29tcCwgTlVMTF9UUkVFLCByYW5rLCBwdXJwb3NlLAotCQkJCQkgICAg ICAgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkgICAgICAgY2FmX21vZGUsIGFy Z3MsIG5vX2ZpbmFsaXphdGlvbik7CiAJCX0KIAkgICAgICBlbHNlCiAJCXsK QEAgLTkzMzEsNyArOTM5Miw4IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAo Z2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCSAgYWRkX3do ZW5fYWxsb2NhdGVkID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51 LmRlcml2ZWQsCiAJCQkJCQkJICAgICAgY29tcCwgTlVMTF9UUkVFLAogCQkJ CQkJCSAgICAgIHJhbmssIHB1cnBvc2UsCi0JCQkJCQkJICAgICAgY2FmX21v ZGUsIGFyZ3MpOworCQkJCQkJCSAgICAgIGNhZl9tb2RlLCBhcmdzLAorCQkJ CQkJCSAgICAgIG5vX2ZpbmFsaXphdGlvbik7CiAJCX0KIAkgICAgfQoKQEAg LTk2MjksNyArOTY5MSw4IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2Zj X3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCQkJICAgICAgZGVj bCwgY2RlY2wsIE5VTExfVFJFRSk7CiAJICAgICAgcmFuayA9IGMtPmFzID8g Yy0+YXMtPnJhbmsgOiAwOwogCSAgICAgIHRtcCA9IHN0cnVjdHVyZV9hbGxv Y19jb21wcyAoYy0+dHMudS5kZXJpdmVkLCBjb21wLCBOVUxMX1RSRUUsCi0J CQkJCSAgIHJhbmssIHB1cnBvc2UsIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJ ICAgcmFuaywgcHVycG9zZSwgY2FmX21vZGUsIGFyZ3MsCisJCQkJCSAgIG5v X2ZpbmFsaXphdGlvbik7CiAJICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2Nr ICgmZm5ibG9jaywgdG1wKTsKIAkgICAgfQogCSAgYnJlYWs7CkBAIC05NjY1 LDE0ICs5NzI4LDE0IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5 bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCSAgdG1wID0gc3RydWN0 dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2ZWQsIGNvbXAsIGRjbXAs CiAJCQkJCSAgICAgICByYW5rLCBwdXJwb3NlLCBjYWZfbW9kZQogCQkJCQkg ICAgICAgfCBHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0lOX0NPQVJSQVksCi0J CQkJCSAgICAgICBhcmdzKTsKKwkJCQkJICAgICAgIGFyZ3MsIG5vX2ZpbmFs aXphdGlvbik7CiAJCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmZm5ibG9j aywgdG1wKTsKIAkJfQogCSAgICB9CiAJICBicmVhazsKCiAJY2FzZSBDT1BZ X0FMTE9DX0NPTVA6Ci0JICBpZiAoYy0+YXR0ci5wb2ludGVyIHx8IGMtPmF0 dHIucHJvY19wb2ludGVyKQorCSAgaWYgKChjLT5hdHRyLnBvaW50ZXIgJiYg IWRlbF9wdHJzKSB8fCBjLT5hdHRyLnByb2NfcG9pbnRlcikKIAkgICAgY29u dGludWU7CgogCSAgLyogV2UgbmVlZCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u IGNvbXBvbmVudHMuICAqLwpAQCAtOTcxNCw2ICs5Nzc3LDEzIEBAIHN0cnVj dHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVl IGRlY2wsCiAJCSAgZHN0X2RhdGEgPSBnZmNfY29udl9kZXNjcmlwdG9yX2Rh dGFfZ2V0IChkc3RfZGF0YSk7CiAJCX0KCisJICAgICAgaWYgKENMQVNTX0RB VEEgKGMpLT5hdHRyLnBvaW50ZXIpCisJCXsKKwkJICBnZmNfYWRkX21vZGlm eSAoJmZuYmxvY2ssIGRzdF9kYXRhLAorCQkJCSAgYnVpbGRfaW50X2NzdCAo VFJFRV9UWVBFIChkc3RfZGF0YSksIDApKTsKKwkJICBjb250aW51ZTsKKwkJ fQorCiAJICAgICAgZ2ZjX2luaXRfYmxvY2sgKCZ0bXBibG9jayk7CgogCSAg ICAgIGdmY19hZGRfbW9kaWZ5ICgmdG1wYmxvY2ssIGdmY19jbGFzc192cHRy X2dldCAoZGNtcCksCkBAIC05NzYwLDYgKzk4MzAsMTYgQEAgc3RydWN0dXJl X2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVj bCwKIAkJCQkJCQkgdG1wLCBudWxsX2RhdGEpKTsKIAkgICAgICBjb250aW51 ZTsKIAkgICAgfQorCSAgZWxzZSBpZiAoYy0+YXR0ci5wb2ludGVyKQorCSAg ICB7CisJICAgICAgaWYgKGMtPmF0dHIuZGltZW5zaW9uKQorCQl0bXAgPSBn ZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkY21wKTsKKwkgICAgICBl bHNlCisJCXRtcCA9IGRjbXA7CisJICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZm bmJsb2NrLCB0bXAsCisJCQkgICAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZ UEUgKHRtcCksIDApKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQoKIAkg IC8qIFRvIGltcGxlbWVudCBndWFyZGVkIGRlZXAgY29weSwgaS5lLiwgZGVl cCBjb3B5IG9ubHkgYWxsb2NhdGFibGUKIAkgICAgIGNvbXBvbmVudHMgdGhh dCBhcmUgcmVhbGx5IGFsbG9jYXRlZCwgdGhlIGRlZXAgY29weSBjb2RlIGhh cyB0bwpAQCAtOTc3Myw3ICs5ODUzLDggQEAgc3RydWN0dXJlX2FsbG9jX2Nv bXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkgICAg ICBhZGRfd2hlbl9hbGxvY2F0ZWQgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGMtPnRzLnUuZGVyaXZlZCwKIAkJCQkJCQkgIGNvbXAsIGRjbXAsCiAJCQkJ CQkJICByYW5rLCBwdXJwb3NlLAotCQkJCQkJCSAgY2FmX21vZGUsIGFyZ3Mp OworCQkJCQkJCSAgY2FmX21vZGUsIGFyZ3MsCisJCQkJCQkJICBub19maW5h bGl6YXRpb24pOwogCSAgICB9CiAJICBlbHNlCiAJICAgIGFkZF93aGVuX2Fs bG9jYXRlZCA9IE5VTExfVFJFRTsKQEAgLTEwMTQ2LDcgKzEwMjI3LDggQEAg Z2ZjX251bGxpZnlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBl LCB0cmVlIGRlY2wsIGludCByYW5rLAogewogICByZXR1cm4gc3RydWN0dXJl X2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5r LAogCQkJCU5VTExJRllfQUxMT0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJF X0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZIHwgY2FmX21vZGUsIE5VTEwpOwor CQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVkgfCBj YWZfbW9kZSwKKwkJCQlOVUxMKTsKIH0KCgpAQCAtMTAxNTksNyArMTAyNDEs OCBAQCBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wIChnZmNfc3ltYm9sICog ZGVyX3R5cGUsIHRyZWUgZGVjbCwgaW50IHJhbmssCiB7CiAgIHJldHVybiBz dHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNsLCBOVUxMX1RS RUUsIHJhbmssCiAJCQkJREVBTExPQ0FURV9BTExPQ19DT01QLAotCQkJCUdG Q19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVkgfCBjYWZfbW9k ZSwgTlVMTCk7CisJCQkJR0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVf Q09BUlJBWSB8IGNhZl9tb2RlLAorCQkJCU5VTEwpOwogfQoKIHRyZWUKQEAg LTEwMTk3LDcgKzEwMjgwLDggQEAgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdm Y19zeW1ib2wgKmRlcml2ZWQsIGdmY19leHByICpleHByLCBpbnQgcmFuaywK CiAgIHRtcCA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyaXZlZCwgYXJy YXksIE5VTExfVFJFRSwgcmFuaywKIAkJCSAgICAgICBCQ0FTVF9BTExPQ19D T01QLAotICAJCQkgICAgICAgR0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFC TEVfQ09BUlJBWSwgJmFyZ3MpOworCQkJICAgICAgIEdGQ19TVFJVQ1RVUkVf Q0FGX01PREVfRU5BQkxFX0NPQVJSQVksCisJCQkgICAgICAgJmFyZ3MpOwog ICByZXR1cm4gdG1wOwogfQoKQEAgLTEwMjA3LDEwICsxMDI5MSwxMiBAQCBn ZmNfYmNhc3RfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqZGVyaXZlZCwgZ2Zj X2V4cHIgKmV4cHIsIGludCByYW5rLAogICAgc3RhdHVzIG9mIGNvYXJyYXlz LiAgKi8KCiB0cmVlCi1nZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2Nh ZiAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5r KQorZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGdmY19zeW1i b2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKKwkJCQkgIGJv b2wgbm9fZmluYWxpemF0aW9uKQogewogICByZXR1cm4gc3RydWN0dXJlX2Fs bG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAot CQkJCURFQUxMT0NBVEVfQUxMT0NfQ09NUCwgMCwgTlVMTCk7CisJCQkJREVB TExPQ0FURV9BTExPQ19DT01QLCAwLCBOVUxMLAorCQkJCW5vX2ZpbmFsaXph dGlvbik7CiB9CgoKQEAgLTEwMjE4LDcgKzEwMzA0LDggQEAgdHJlZQogZ2Zj X3JlYXNzaWduX2FsbG9jX2NvbXBfY2FmIChnZmNfc3ltYm9sICpkZXJfdHlw ZSwgdHJlZSBkZWNsLCB0cmVlIGRlc3QpCiB7CiAgIHJldHVybiBzdHJ1Y3R1 cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNsLCBkZXN0LCAwLCBSRUFT U0lHTl9DQUZfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VO QUJMRV9DT0FSUkFZLCBOVUxMKTsKKwkJCQlHRkNfU1RSVUNUVVJFX0NBRl9N T0RFX0VOQUJMRV9DT0FSUkFZLAorCQkJCU5VTEwpOwogfQoKCkBAIC0xMDIz NCw2ICsxMDMyMSwyMCBAQCBnZmNfY29weV9hbGxvY19jb21wIChnZmNfc3lt Ym9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwgdHJlZSBkZXN0LCBpbnQgcmFu aywKIH0KCgorLyogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IG9m IGRlcml2ZWQgdHlwZSwgZ2VuZXJhdGluZyBjb2RlIHRvCisgICBjb3B5IGl0 IGFuZCBpdHMgYWxsb2NhdGFibGUgY29tcG9uZW50cywgd2hpbGUgc3VwcHJl c3NpbmcgYW55CisgICBmaW5hbGl6YXRpb24gdGhhdCBtaWdodCBvY2N1ci4g IFRoaXMgaXMgdXNlZCBpbiB0aGUgZmluYWxpemF0aW9uIG9mCisgICBmdW5j dGlvbiByZXN1bHRzLiAgKi8KKwordHJlZQorZ2ZjX2NvcHlfYWxsb2NfY29t cF9kZWxfcHRycyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2ws IHRyZWUgZGVzdCwKKwkJCSAgICAgIGludCByYW5rLCBpbnQgY2FmX21vZGUp Cit7CisgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBl LCBkZWNsLCBkZXN0LCByYW5rLCBDT1BZX0FMTE9DX0NPTVAsCisJCQkJY2Fm X21vZGUsIE5VTEwsIHRydWUsIHRydWUpOworfQorCisKIC8qIFJlY3Vyc2l2 ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCBvZiBkZXJpdmVkIHR5cGUsIGdlbmVy YXRpbmcgY29kZSB0bwogICAgY29weSBvbmx5IGl0cyBhbGxvY2F0YWJsZSBj b21wb25lbnRzLiAgKi8KCkBAIC0xMDk3Myw3ICsxMTA3NCw3IEBAIGdmY19h bGxvY19hbGxvY2F0YWJsZV9mb3JfYXNzaWdubWVudCAoZ2ZjX2xvb3BpbmZv ICpsb29wLAogCSYmIGV4cHIxLT50cy51LmRlcml2ZWQtPmF0dHIuYWxsb2Nf Y29tcCkKICAgICB7CiAgICAgICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxv Y19jb21wX25vX2NhZiAoZXhwcjEtPnRzLnUuZGVyaXZlZCwgb2xkX2Rlc2Ms Ci0JCQkJCSAgICAgIGV4cHIxLT5yYW5rKTsKKwkJCQkJICAgICAgZXhwcjEt PnJhbmssIHRydWUpOwogICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm cmVhbGxvY19ibG9jaywgdG1wKTsKICAgICB9CgpAQCAtMTExNDYsOCArMTEy NDcsNyBAQCBnZmNfdHJhbnNfZGVmZXJyZWRfYXJyYXkgKGdmY19zeW1ib2wg KiBzeW0sIGdmY193cmFwcGVkX2Jsb2NrICogYmxvY2spCiAgIHN5bV9oYXNf YWxsb2NfY29tcCA9IChzeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRAogCQkJ fHwgc3ltLT50cy50eXBlID09IEJUX0NMQVNTKQogCQkJICAmJiBzeW0tPnRz LnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wOwotICBoYXNfZmluYWxpemVy ID0gc3ltLT50cy50eXBlID09IEJUX0NMQVNTIHx8IHN5bS0+dHMudHlwZSA9 PSBCVF9ERVJJVkVECi0JCSAgID8gZ2ZjX2lzX2ZpbmFsaXphYmxlIChzeW0t PnRzLnUuZGVyaXZlZCwgTlVMTCkgOiBmYWxzZTsKKyAgaGFzX2ZpbmFsaXpl ciA9IGdmY19tYXlfYmVfZmluYWxpemVkIChzeW0tPnRzKTsKCiAgIC8qIE1h a2Ugc3VyZSB0aGUgZnJvbnRlbmQgZ2V0cyB0aGVzZSByaWdodC4gICovCiAg IGdjY19hc3NlcnQgKHN5bS0+YXR0ci5wb2ludGVyIHx8IHN5bS0+YXR0ci5h bGxvY2F0YWJsZSB8fCBzeW1faGFzX2FsbG9jX2NvbXAKZGlmZiAtLWdpdCBh L2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmggYi9nY2MvZm9ydHJhbi90cmFu cy1hcnJheS5oCmluZGV4IGNkMmIzZDlmMmYwLi5jNzFmYTNmNTIzYyAxMDA2 NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaAorKysgYi9nY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5oCkBAIC01NiwxMSArNTYsMTQgQEAgdHJl ZSBnZmNfbnVsbGlmeV9hbGxvY19jb21wIChnZmNfc3ltYm9sICosIHRyZWUs IGludCwgaW50IGNtID0gMCk7CiB0cmVlIGdmY19kZWFsbG9jYXRlX2FsbG9j X2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgaW50LCBpbnQgY20gPSAwKTsK IHRyZWUgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiwgZ2Zj X2V4cHIgKiwgaW50LCB0cmVlLAogCQkJICAgdHJlZSwgdHJlZSwgdHJlZSk7 Ci10cmVlIGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9fY2FmIChnZmNf c3ltYm9sICosIHRyZWUsIGludCk7Cit0cmVlIGdmY19kZWFsbG9jYXRlX2Fs bG9jX2NvbXBfbm9fY2FmIChnZmNfc3ltYm9sICosIHRyZWUsIGludCwKKwkJ CQkgICAgICAgYm9vbCBub19maW5hbGl6YXRpb24gPSBmYWxzZSk7CiB0cmVl IGdmY19yZWFzc2lnbl9hbGxvY19jb21wX2NhZiAoZ2ZjX3N5bWJvbCAqLCB0 cmVlLCB0cmVlKTsKCiB0cmVlIGdmY19jb3B5X2FsbG9jX2NvbXAgKGdmY19z eW1ib2wgKiwgdHJlZSwgdHJlZSwgaW50LCBpbnQpOwoKK3RyZWUgZ2ZjX2Nv cHlfYWxsb2NfY29tcF9kZWxfcHRycyAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCB0 cmVlLCBpbnQsIGludCk7CisKIHRyZWUgZ2ZjX2NvcHlfb25seV9hbGxvY19j b21wIChnZmNfc3ltYm9sICosIHRyZWUsIHRyZWUsIGludCk7CgogdHJlZSBn ZmNfYWxsb2NhdGVfcGR0X2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgaW50 LCBnZmNfYWN0dWFsX2FyZ2xpc3QgKik7CmRpZmYgLS1naXQgYS9nY2MvZm9y dHJhbi90cmFucy1kZWNsLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5j YwppbmRleCAyMTdkZTZiOGRhMC4uMmFlY2FkYTllZmUgMTAwNjQ0Ci0tLSBh L2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKKysrIGIvZ2NjL2ZvcnRyYW4v dHJhbnMtZGVjbC5jYwpAQCAtMTg1NSw3ICsxODU1LDggQEAgZ2ZjX2dldF9z eW1ib2xfZGVjbCAoZ2ZjX3N5bWJvbCAqIHN5bSkKIAkgICYmIChzeW0tPnRz LnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wCiAJICAgICAgfHwgKCFzeW0t PmF0dHIucG9pbnRlciAmJiAhc3ltLT5hdHRyLmFydGlmaWNpYWwgJiYgIXN5 bS0+YXR0ci5zYXZlCiAJCSAgJiYgIXN5bS0+bnMtPnByb2NfbmFtZS0+YXR0 ci5pc19tYWluX3Byb2dyYW0KLQkJICAmJiBnZmNfaXNfZmluYWxpemFibGUg KHN5bS0+dHMudS5kZXJpdmVkLCBOVUxMKSkpKQorCQkgICYmIChnZmNfaXNf ZmluYWxpemFibGUgKHN5bS0+dHMudS5kZXJpdmVkLCBOVUxMKQorCQkgICAg ICAmJiBzeW0tPm5hbWVbMF0gIT0gJ18nKSkpKQogICAgICAgLyogVGhpcyBh cHBsaWVzIGEgZGVyaXZlZCB0eXBlIGRlZmF1bHQgaW5pdGlhbGl6ZXIuICAq LwogICAgICAgfHwgKHN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVECiAJICAm JiBzeW0tPmF0dHIuc2F2ZSA9PSBTQVZFX05PTkUKQEAgLTQzMjksNiArNDMz MCw4IEBAIGluaXRfaW50ZW50X291dF9kdCAoZ2ZjX3N5bWJvbCAqIHByb2Nf c3ltLCBnZmNfd3JhcHBlZF9ibG9jayAqIGJsb2NrKQogICBnZmNfZm9ybWFs X2FyZ2xpc3QgKmY7CiAgIHRyZWUgdG1wOwogICB0cmVlIHByZXNlbnQ7Cisg IGdmY19zeW1ib2wgKnM7CisgIGJvb2wgZGVhbGxvY193aXRoX3ZhbHVlID0g ZmFsc2U7CgogICBnZmNfaW5pdF9ibG9jayAoJmluaXQpOwogICBmb3IgKGYg PSBnZmNfc3ltX2dldF9kdW1teV9hcmdzIChwcm9jX3N5bSk7IGY7IGYgPSBm LT5uZXh0KQpAQCAtNDMzNiw0MiArNDMzOSw1MCBAQCBpbml0X2ludGVudF9v dXRfZHQgKGdmY19zeW1ib2wgKiBwcm9jX3N5bSwgZ2ZjX3dyYXBwZWRfYmxv Y2sgKiBibG9jaykKIAkmJiAhZi0+c3ltLT5hdHRyLnBvaW50ZXIKIAkmJiBm LT5zeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRCkKICAgICAgIHsKKwlzID0g Zi0+c3ltOwogCXRtcCA9IE5VTExfVFJFRTsKCiAJLyogTm90ZTogQWxsb2Nh dGFibGVzIGFyZSBleGNsdWRlZCBhcyB0aGV5IGFyZSBhbHJlYWR5IGhhbmRs ZWQKIAkgICBieSB0aGUgY2FsbGVyLiAgKi8KLQlpZiAoIWYtPnN5bS0+YXR0 ci5hbGxvY2F0YWJsZQotCSAgICAmJiBnZmNfaXNfZmluYWxpemFibGUgKGYt PnN5bS0+dHMudS5kZXJpdmVkLCBOVUxMKSkKKwlpZiAoIXMtPmF0dHIuYWxs b2NhdGFibGUKKwkgICAgJiYgZ2ZjX2lzX2ZpbmFsaXphYmxlIChzLT50cy51 LmRlcml2ZWQsIE5VTEwpKQogCSAgewogCSAgICBzdG10YmxvY2tfdCBibG9j azsKIAkgICAgZ2ZjX2V4cHIgKmU7CgogCSAgICBnZmNfaW5pdF9ibG9jayAo JmJsb2NrKTsKLQkgICAgZi0+c3ltLT5hdHRyLnJlZmVyZW5jZWQgPSAxOwot CSAgICBlID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAoZi0+c3ltKTsKKwkg ICAgcy0+YXR0ci5yZWZlcmVuY2VkID0gMTsKKwkgICAgZSA9IGdmY19sdmFs X2V4cHJfZnJvbV9zeW0gKHMpOwogCSAgICBnZmNfYWRkX2ZpbmFsaXplcl9j YWxsICgmYmxvY2ssIGUpOwogCSAgICBnZmNfZnJlZV9leHByIChlKTsKIAkg ICAgdG1wID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmJsb2NrKTsKIAkgIH0KCi0J aWYgKHRtcCA9PSBOVUxMX1RSRUUgJiYgIWYtPnN5bS0+YXR0ci5hbGxvY2F0 YWJsZQotCSAgICAmJiBmLT5zeW0tPnRzLnUuZGVyaXZlZC0+YXR0ci5hbGxv Y19jb21wICYmICFmLT5zeW0tPnZhbHVlKQotCSAgdG1wID0gZ2ZjX2RlYWxs b2NhdGVfYWxsb2NfY29tcCAoZi0+c3ltLT50cy51LmRlcml2ZWQsCi0JCQkJ CSAgIGYtPnN5bS0+YmFja2VuZF9kZWNsLAotCQkJCQkgICBmLT5zeW0tPmFz ID8gZi0+c3ltLT5hcy0+cmFuayA6IDApOworCWlmICh0bXAgPT0gTlVMTF9U UkVFICYmICFzLT5hdHRyLmFsbG9jYXRhYmxlCisJICAgICYmIHMtPnRzLnUu ZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wKQorCSAgeworCSAgICB0bXAgPSBn ZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wIChzLT50cy51LmRlcml2ZWQsCisJ CQkJCSAgICAgcy0+YmFja2VuZF9kZWNsLAorCQkJCQkgICAgIHMtPmFzID8g cy0+YXMtPnJhbmsgOiAwKTsKKwkgICAgZGVhbGxvY193aXRoX3ZhbHVlID0g cy0+dmFsdWU7CisJICB9CgotCWlmICh0bXAgIT0gTlVMTF9UUkVFICYmIChm LT5zeW0tPmF0dHIub3B0aW9uYWwKLQkJCQkgfHwgZi0+c3ltLT5ucy0+cHJv Y19uYW1lLT5hdHRyLmVudHJ5X21hc3RlcikpCisJaWYgKHRtcCAhPSBOVUxM X1RSRUUgJiYgKHMtPmF0dHIub3B0aW9uYWwKKwkJCQkgfHwgcy0+bnMtPnBy b2NfbmFtZS0+YXR0ci5lbnRyeV9tYXN0ZXIpKQogCSAgewotCSAgICBwcmVz ZW50ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChmLT5zeW0pOworCSAgICBw cmVzZW50ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChzKTsKIAkgICAgdG1w ID0gYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwgVFJF RV9UWVBFICh0bXApLAogCQkJICAgICAgcHJlc2VudCwgdG1wLCBidWlsZF9l bXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwogCSAgfQoKLQlpZiAodG1w ICE9IE5VTExfVFJFRSkKKwlpZiAodG1wICE9IE5VTExfVFJFRSAmJiAhZGVh bGxvY193aXRoX3ZhbHVlKQogCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm aW5pdCwgdG1wKTsKLQllbHNlIGlmIChmLT5zeW0tPnZhbHVlICYmICFmLT5z eW0tPmF0dHIuYWxsb2NhdGFibGUpCi0JICBnZmNfaW5pdF9kZWZhdWx0X2R0 IChmLT5zeW0sICZpbml0LCB0cnVlKTsKKwllbHNlIGlmIChzLT52YWx1ZSAm JiAhcy0+YXR0ci5hbGxvY2F0YWJsZSkKKwkgIHsKKwkgICAgZ2ZjX2FkZF9l eHByX3RvX2Jsb2NrICgmaW5pdCwgdG1wKTsKKwkgICAgZ2ZjX2luaXRfZGVm YXVsdF9kdCAocywgJmluaXQsIGZhbHNlKTsKKwkgICAgZGVhbGxvY193aXRo X3ZhbHVlID0gZmFsc2U7CisJICB9CiAgICAgICB9CiAgICAgZWxzZSBpZiAo Zi0+c3ltICYmIGYtPnN5bS0+YXR0ci5pbnRlbnQgPT0gSU5URU5UX09VVAog CSAgICAgJiYgZi0+c3ltLT50cy50eXBlID09IEJUX0NMQVNTCkBAIC00Mzgx LDE2ICs0MzkyLDE4IEBAIGluaXRfaW50ZW50X291dF9kdCAoZ2ZjX3N5bWJv bCAqIHByb2Nfc3ltLCBnZmNfd3JhcHBlZF9ibG9jayAqIGJsb2NrKQogCXN0 bXRibG9ja190IGJsb2NrOwogCWdmY19leHByICplOwoKKwlzID0gZi0+c3lt OworCiAJZ2ZjX2luaXRfYmxvY2sgKCZibG9jayk7Ci0JZi0+c3ltLT5hdHRy LnJlZmVyZW5jZWQgPSAxOwotCWUgPSBnZmNfbHZhbF9leHByX2Zyb21fc3lt IChmLT5zeW0pOworCXMtPmF0dHIucmVmZXJlbmNlZCA9IDE7CisJZSA9IGdm Y19sdmFsX2V4cHJfZnJvbV9zeW0gKHMpOwogCWdmY19hZGRfZmluYWxpemVy X2NhbGwgKCZibG9jaywgZSk7CiAJZ2ZjX2ZyZWVfZXhwciAoZSk7CiAJdG1w ID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmJsb2NrKTsKCi0JaWYgKGYtPnN5bS0+ YXR0ci5vcHRpb25hbCB8fCBmLT5zeW0tPm5zLT5wcm9jX25hbWUtPmF0dHIu ZW50cnlfbWFzdGVyKQorCWlmIChzLT5hdHRyLm9wdGlvbmFsIHx8IHMtPm5z LT5wcm9jX25hbWUtPmF0dHIuZW50cnlfbWFzdGVyKQogCSAgewotCSAgICBw cmVzZW50ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChmLT5zeW0pOworCSAg ICBwcmVzZW50ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChzKTsKIAkgICAg dG1wID0gYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwg VFJFRV9UWVBFICh0bXApLAogCQkJICAgICAgcHJlc2VudCwgdG1wLAogCQkJ ICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKZGlm ZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MgYi9nY2MvZm9y dHJhbi90cmFucy1leHByLmNjCmluZGV4IGI5NWM1Y2YyZjk2Li5mMDVlMjU3 YmY3NiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYwor KysgYi9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCkBAIC0xOTEwLDYgKzE5 MTAsNyBAQCBnZmNfaW5pdF9zZSAoZ2ZjX3NlICogc2UsIGdmY19zZSAqIHBh cmVudCkKIHsKICAgbWVtc2V0IChzZSwgMCwgc2l6ZW9mIChnZmNfc2UpKTsK ICAgZ2ZjX2luaXRfYmxvY2sgKCZzZS0+cHJlKTsKKyAgZ2ZjX2luaXRfYmxv Y2sgKCZzZS0+ZmluYWxibG9jayk7CiAgIGdmY19pbml0X2Jsb2NrICgmc2Ut PnBvc3QpOwoKICAgc2UtPnBhcmVudCA9IHBhcmVudDsKQEAgLTU5ODcsNiAr NTk4OCwxMzYgQEAgcG9zdF9jYWxsOgogfQoKCisvKiBGaW5hbGl6ZSBhIGZ1 bmN0aW9uIHJlc3VsdCBvciBhcnJheSBjb25zdHJ1Y3RvcnMgdXNpbmcgdGhl IGZpbmFsaXplciB3cmFwcGVyLgorICAgVGhlIHJlc3VsdCBpcyBmaXhlZCBp biBvcmRlciB0byBwcmV2ZW50IHJlcGVhdGVkIGNhbGxzLiAgKi8KKwordm9p ZAorZ2ZjX2ZpbmFsaXplX2Z1bmN0aW9uX3Jlc3VsdCAoZ2ZjX3NlICpzZSwg Z2ZjX3N5bWJvbCAqZGVyaXZlZCwKKwkJCSAgICAgIHN5bWJvbF9hdHRyaWJ1 dGUgYXR0ciwgaW50IHJhbmspCit7CisgIHRyZWUgdnB0ciwgZmluYWxfZm5k ZWNsLCBkZXNjLCB0bXAsIHNpemUsIGlzX2ZpbmFsLCBkYXRhX3B0ciwgY29u ZDsKKyAgZ2ZjX3N5bWJvbCAqdnRhYjsKKyAgZ2ZjX3NlIHBvc3Rfc2U7Cisg IGJvb2wgaXNfY2xhc3MgPSBHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUg KHNlLT5leHByKSk7CisKKyAgaWYgKGF0dHIucG9pbnRlcikKKyAgICByZXR1 cm47CisKKyAgaWYgKGRlcml2ZWQgJiYgKGRlcml2ZWQtPmF0dHIuaXNfY19p bnRlcm9wCisJCSAgfHwgZGVyaXZlZC0+YXR0ci5pc19pc29fYworCQkgIHx8 IGRlcml2ZWQtPmF0dHIuaXNfYmluZF9jKSkKKyAgICByZXR1cm47CisKKyAg aWYgKGlzX2NsYXNzKQorICAgIHsKKyAgICAgIGlmICghVkFSX1AgKHNlLT5l eHByKSkKKwl7CisJICBkZXNjID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2UtPmV4 cHIsICZzZS0+cHJlKTsKKwkgIHNlLT5leHByID0gZGVzYzsKKwl9CisgICAg ICBkZXNjID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChzZS0+ZXhwcik7CisgICAg ICB2cHRyID0gZ2ZjX2NsYXNzX3ZwdHJfZ2V0IChzZS0+ZXhwcik7CisgICAg fQorICBlbHNlIGlmIChkZXJpdmVkICYmIGdmY19pc19maW5hbGl6YWJsZSAo ZGVyaXZlZCwgTlVMTCkpCisgICAgeworICAgICAgLyogTmVlZCB0byBjb3B5 IGFsbG9jYXRlZCBjb21wb25lbnRzIGFuZCBkZWxldGUgcG9pbnRlciBjb21w b25lbnRzLiAgKi8KKyAgICAgIGlmIChzZS0+ZGlyZWN0X2J5cmVmKQorCXsK KwkgIGRlc2MgPSBnZmNfZXZhbHVhdGVfbm93IChzZS0+ZXhwciwgJnNlLT5m aW5hbGJsb2NrKTsKKwkgIHRtcCA9IGdmY19jb3B5X2FsbG9jX2NvbXBfZGVs X3B0cnMgKGRlcml2ZWQsIHNlLT5leHByLCBkZXNjLCByYW5rLCAwKTsKKwkg IGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5maW5hbGJsb2NrLCB0bXAp OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBkZXNjID0gZ2ZjX2V2YWx1YXRl X25vdyAoc2UtPmV4cHIsICZzZS0+cHJlKTsKKwkgIHNlLT5leHByID0gZ2Zj X2V2YWx1YXRlX25vdyAoZGVzYywgJnNlLT5wcmUpOworCSAgdG1wID0gZ2Zj X2NvcHlfYWxsb2NfY29tcF9kZWxfcHRycyAoZGVyaXZlZCwgc2UtPmV4cHIs IGRlc2MsIHJhbmssIDApOworCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm c2UtPmZpbmFsYmxvY2ssIHRtcCk7CisJfQorCisgICAgICB2dGFiID0gZ2Zj X2ZpbmRfZGVyaXZlZF92dGFiIChkZXJpdmVkKTsKKyAgICAgIGlmICh2dGFi LT5iYWNrZW5kX2RlY2wgPT0gTlVMTF9UUkVFKQorCXZwdHIgPSBnZmNfZ2V0 X3N5bWJvbF9kZWNsICh2dGFiKTsKKyAgICAgIGVsc2UKKwl2cHRyID0gdnRh Yi0+YmFja2VuZF9kZWNsOworICAgICAgdnB0ciA9IGdmY19idWlsZF9hZGRy X2V4cHIgKE5VTEwsIHZwdHIpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVy bjsKKworICBzaXplID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIpOworICBm aW5hbF9mbmRlY2wgPSBnZmNfdnB0cl9maW5hbF9nZXQgKHZwdHIpOworICBp c19maW5hbCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5F X0VYUFIsCisJCQkgICAgICBsb2dpY2FsX3R5cGVfbm9kZSwKKwkJCSAgICAg IGZpbmFsX2ZuZGVjbCwKKwkJCSAgICAgIGZvbGRfY29udmVydCAoVFJFRV9U WVBFIChmaW5hbF9mbmRlY2wpLAorCQkJCQkgICAgbnVsbF9wb2ludGVyX25v ZGUpKTsKKworICBmaW5hbF9mbmRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0 X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkgICAgICBmaW5hbF9m bmRlY2wpOworICBpZiAoIUdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9U WVBFIChkZXNjKSkpCisgICAgeworICAgICAgaWYgKGlzX2NsYXNzKQorCWRl c2MgPSBnZmNfY29udl9zY2FsYXJfdG9fZGVzY3JpcHRvciAoc2UsIGRlc2Ms IGF0dHIpOworICAgICAgZWxzZQorCXsKKwkgIGdmY19pbml0X3NlICgmcG9z dF9zZSwgTlVMTCk7CisJICBkZXNjID0gZ2ZjX2NvbnZfc2NhbGFyX3RvX2Rl c2NyaXB0b3IgKCZwb3N0X3NlLCBkZXNjLCBhdHRyKTsKKwkgIGdmY19hZGRf ZXhwcl90b19ibG9jayAoJnNlLT5wcmUsIGdmY19maW5pc2hfYmxvY2sgKCZw b3N0X3NlLnByZSkpOworCX0KKyAgICB9CisKKyAgdG1wID0gZ2ZjX2NyZWF0 ZV92YXIgKFRSRUVfVFlQRSAoZGVzYyksICJyZXMiKTsKKyAgaWYgKHNlLT5k aXJlY3RfYnlyZWYpCisgICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+ZmluYWxi bG9jaywgdG1wLCBkZXNjKTsKKyAgZWxzZQorICAgIGdmY19hZGRfbW9kaWZ5 ICgmc2UtPnByZSwgdG1wLCBkZXNjKTsKKyAgZGVzYyA9IHRtcDsKKworICBk YXRhX3B0ciA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlc2Mp OworICBjb25kID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwg TkVfRVhQUiwKKwkJCSAgbG9naWNhbF90eXBlX25vZGUsIGRhdGFfcHRyLAor CQkJICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZGF0YV9wdHIpLAorCQkJ CQludWxsX3BvaW50ZXJfbm9kZSkpOworICBpc19maW5hbCA9IGZvbGRfYnVp bGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFRSVVRIX0FORF9FWFBSLAorCQkJ ICAgICAgbG9naWNhbF90eXBlX25vZGUsIGlzX2ZpbmFsLCBjb25kKTsKKyAg dG1wID0gYnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGZp bmFsX2ZuZGVjbCwgMywKKwkJCSAgICAgZ2ZjX2J1aWxkX2FkZHJfZXhwciAo TlVMTCwgZGVzYyksCisJCQkgICAgIHNpemUsIGJvb2xlYW5fZmFsc2Vfbm9k ZSk7CisgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24s IENPTkRfRVhQUiwKKwkJCSB2b2lkX3R5cGVfbm9kZSwgaXNfZmluYWwsIHRt cCwKKwkJCSBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwor CisgIGlmIChpc19jbGFzcyAmJiBzZS0+c3MgJiYgc2UtPnNzLT5sb29wKQor ICAgIHsKKyAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5sb29w LT5wb3N0LCB0bXApOworICAgICAgY29uZCA9IGZvbGRfYnVpbGQyX2xvYyAo aW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCisJCQkgICAgICBsb2dpY2FsX3R5 cGVfbm9kZSwKKwkJCSAgICAgIGRhdGFfcHRyLAorCQkJICAgICAgZm9sZF9j b252ZXJ0IChUUkVFX1RZUEUgKGRhdGFfcHRyKSwKKwkJCQkJICAgIG51bGxf cG9pbnRlcl9ub2RlKSk7CisgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2Mg KGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCisJCQkgICAgIHZvaWRfdHlw ZV9ub2RlLCBjb25kLAorCQkJICAgICBnZmNfY2FsbF9mcmVlIChkYXRhX3B0 ciksCisJCQkgICAgIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xvY2F0aW9u KSk7CisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+bG9vcC0+ cG9zdCwgdG1wKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBnZmNf YWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+ZmluYWxibG9jaywgdG1wKTsKKwor ICAgICAgLyogTGV0IHRoZSBzY2FsYXJpemVyIHRha2UgY2FyZSBvZiBmcmVl aW5nIG9mIHRlbXBvcmFyeSBhcnJheXMuICAqLworICAgICAgaWYgKGF0dHIu YWxsb2NhdGFibGUgJiYgIShzZS0+bG9vcCAmJiBzZS0+bG9vcC0+dGVtcF9k aW0pKQorCXsKKwkgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9j YXRpb24sIENPTkRfRVhQUiwKKwkJCQkgdm9pZF90eXBlX25vZGUsIGNvbmQs CisJCQkJIGdmY19jYWxsX2ZyZWUgKGRhdGFfcHRyKSwKKwkJCQkgYnVpbGRf ZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKwkgIGdmY19hZGRfZXhw cl90b19ibG9jayAoJnNlLT5maW5hbGJsb2NrLCB0bXApOworCX0KKyAgICB9 Cit9CisKIC8qIEdlbmVyYXRlIGNvZGUgZm9yIGEgcHJvY2VkdXJlIGNhbGwu ICBOb3RlIGNhbiByZXR1cm4gc2UtPnBvc3QgIT0gTlVMTC4KICAgIElmIHNl LT5kaXJlY3RfYnlyZWYgaXMgc2V0IHRoZW4gc2UtPmV4cHIgY29udGFpbnMg dGhlIHJldHVybiBwYXJhbWV0ZXIuCiAgICBSZXR1cm4gbm9uemVybywgaWYg dGhlIGNhbGwgaGFzIGFsdGVybmF0ZSBzcGVjaWZpZXJzLgpAQCAtNzA2Nyw2 ICs3MTk4LDcgQEAgZ2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwgKGdmY19zZSAq IHNlLCBnZmNfc3ltYm9sICogc3ltLAoKICAgICAgIGdmY19hZGRfYmxvY2tf dG9fYmxvY2sgKCZzZS0+cHJlLCAmcGFybXNlLnByZSk7CiAgICAgICBnZmNf YWRkX2Jsb2NrX3RvX2Jsb2NrICgmcG9zdCwgJnBhcm1zZS5wb3N0KTsKKyAg ICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS0+ZmluYWxibG9jaywg JnBhcm1zZS5maW5hbGJsb2NrKTsKCiAgICAgICAvKiBBbGxvY2F0ZWQgYWxs b2NhdGFibGUgY29tcG9uZW50cyBvZiBkZXJpdmVkIHR5cGVzIG11c3QgYmUK IAkgZGVhbGxvY2F0ZWQgZm9yIG5vbi12YXJpYWJsZSBzY2FsYXJzLCBhcnJh eSBhcmd1bWVudHMgdG8gZWxlbWVudGFsCkBAIC03NzMxLDkgKzc4NjMsMTcg QEAgZ2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwgKGdmY19zZSAqIHNlLCBnZmNf c3ltYm9sICogc3ltLAogICAvKiBBbGxvY2F0YWJsZSBzY2FsYXIgZnVuY3Rp b24gcmVzdWx0cyBtdXN0IGJlIGZyZWVkIGFuZCBudWxsaWZpZWQKICAgICAg YWZ0ZXIgdXNlLiBUaGlzIG5lY2Vzc2l0YXRlcyB0aGUgY3JlYXRpb24gb2Yg YSB0ZW1wb3JhcnkgdG8KICAgICAgaG9sZCB0aGUgcmVzdWx0IHRvIHByZXZl bnQgZHVwbGljYXRlIGNhbGxzLiAgKi8KKyAgc3ltYm9sX2F0dHJpYnV0ZSBh dHRyID0gIGNvbXAgPyBjb21wLT5hdHRyIDogc3ltLT5hdHRyOworICBib29s IGFsbG9jYXRhYmxlID0gYXR0ci5hbGxvY2F0YWJsZSAmJiAhYXR0ci5kaW1l bnNpb247CisgIGdmY19zeW1ib2wgKmRlciA9IGNvbXAgJiYgY29tcC0+dHMu dHlwZSA9PSBCVF9ERVJJVkVEID8gY29tcC0+dHMudS5kZXJpdmVkCisJCSAg ICA6IChzeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRCA/IHN5bS0+dHMudS5k ZXJpdmVkIDogTlVMTCk7CisgIGJvb2wgZmluYWxpemFibGUgPSBkZXIgIT0g TlVMTCAmJiBnZmNfaXNfZmluYWxpemFibGUgKGRlciwgTlVMTCk7CisKKyAg aWYgKCFieXJlZiAmJiBmaW5hbGl6YWJsZSkKKyAgICBnZmNfZmluYWxpemVf ZnVuY3Rpb25fcmVzdWx0IChzZSwgZGVyLCBhdHRyLCBleHByLT5yYW5rKTsK KwogICBpZiAoIWJ5cmVmICYmIHN5bS0+dHMudHlwZSAhPSBCVF9DSEFSQUNU RVIKLSAgICAgICYmICgoc3ltLT5hdHRyLmFsbG9jYXRhYmxlICYmICFzeW0t PmF0dHIuZGltZW5zaW9uICYmICFjb21wKQotCSAgfHwgKGNvbXAgJiYgY29t cC0+YXR0ci5hbGxvY2F0YWJsZSAmJiAhY29tcC0+YXR0ci5kaW1lbnNpb24p KSkKKyAgICAgICYmIGFsbG9jYXRhYmxlICYmICFmaW5hbGl6YWJsZSkKICAg ICB7CiAgICAgICB0bXAgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFIChz ZS0+ZXhwciksIE5VTEwpOwogICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+ cHJlLCB0bXAsIHNlLT5leHByKTsKQEAgLTc3OTMsNiArNzkzMyw5IEBAIGdm Y19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJv bCAqIHN5bSwKIAkgICAgICBzZS0+ZXhwciA9IGluZm8tPmRlc2NyaXB0b3I7 CiAJICAgICAgLyogQnVuZGxlIGluIHRoZSBzdHJpbmcgbGVuZ3RoLiAgKi8K IAkgICAgICBzZS0+c3RyaW5nX2xlbmd0aCA9IGxlbjsKKworCSAgICAgIGlm IChmaW5hbGl6YWJsZSkKKwkJZ2ZjX2ZpbmFsaXplX2Z1bmN0aW9uX3Jlc3Vs dCAoc2UsIGRlciwgYXR0ciwgZXhwci0+cmFuayk7CiAJICAgIH0KIAkgIGVs c2UgaWYgKHRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKQogCSAgICB7CkBAIC03 ODg1LDggKzgwMjgsNiBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2Zj X3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAJICAmJiBzZS0+ZXhwciAm JiBHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKHNlLT5leHByKSkKIAkg ICYmIGV4cHItPm11c3RfZmluYWxpemUpCiAJewotCSAgdHJlZSBmaW5hbF9m bmRlY2w7Ci0JICB0cmVlIGlzX2ZpbmFsOwogCSAgaW50IG47CiAJICBpZiAo c2UtPnNzICYmIHNlLT5zcy0+bG9vcCkKIAkgICAgewpAQCAtNzkwOCw2NiAr ODA0OSwxNSBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICog c2UsIGdmY19zeW1ib2wgKiBzeW0sCiAJICAgICAgLyogVE9ETyBFbGltaW5h dGUgdGhlIGRvdWJsaW5nIG9mIHRlbXBvcmFyaWVzLiBUaGlzCiAJCSBvbmUg aXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha2FnZS4gICov CiAJICAgICAgc2UtPmV4cHIgPSBnZmNfZXZhbHVhdGVfbm93IChzZS0+ZXhw ciwgJnNlLT5wcmUpOwotCSAgICAgIHRtcCA9IGdmY19jbGFzc19kYXRhX2dl dCAoc2UtPmV4cHIpOwotCSAgICAgIHRtcCA9IGdmY19jb252X3NjYWxhcl90 b19kZXNjcmlwdG9yIChzZSwgdG1wLAotCQkJQ0xBU1NfREFUQSAoZXhwci0+ dmFsdWUuZnVuY3Rpb24uZXN5bS0+cmVzdWx0KS0+YXR0cik7CiAJICAgIH0K Ci0JICBpZiAoKGdmY19pc19jbGFzc19hcnJheV9mdW5jdGlvbiAoZXhwcikK LQkgICAgICAgfHwgZ2ZjX2lzX2FsbG9jX2NsYXNzX3NjYWxhcl9mdW5jdGlv biAoZXhwcikpCi0JICAgICAgJiYgQ0xBU1NfREFUQSAoZXhwci0+dmFsdWUu ZnVuY3Rpb24uZXN5bS0+cmVzdWx0KS0+YXR0ci5wb2ludGVyKQotCSAgICBn b3RvIG5vX2ZpbmFsaXphdGlvbjsKLQotCSAgZmluYWxfZm5kZWNsID0gZ2Zj X2NsYXNzX3Z0YWJfZmluYWxfZ2V0IChzZS0+ZXhwcik7Ci0JICBpc19maW5h bCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIs Ci0JCQkJICAgICAgbG9naWNhbF90eXBlX25vZGUsCi0JCQkJICAgICAgZmlu YWxfZm5kZWNsLAotCQkJCSAgICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBF IChmaW5hbF9mbmRlY2wpLAotCQkJCQkgICAJICAgIG51bGxfcG9pbnRlcl9u b2RlKSk7Ci0JICBmaW5hbF9mbmRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0 X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLAotCQkJCQkJICAgICAgZmluYWxf Zm5kZWNsKTsKLSAJICB0bXAgPSBidWlsZF9jYWxsX2V4cHJfbG9jIChpbnB1 dF9sb2NhdGlvbiwKLQkJCQkgICAgIGZpbmFsX2ZuZGVjbCwgMywKLQkJCQkg ICAgIGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEwsIHRtcCksCi0JCQkJICAg ICBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoc2UtPmV4cHIpLAotCQkJCSAg ICAgYm9vbGVhbl9mYWxzZV9ub2RlKTsKLQkgIHRtcCA9IGZvbGRfYnVpbGQz X2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKLQkJCQkgdm9pZF90 eXBlX25vZGUsIGlzX2ZpbmFsLCB0bXAsCi0JCQkJIGJ1aWxkX2VtcHR5X3N0 bXQgKGlucHV0X2xvY2F0aW9uKSk7Ci0KLQkgIGlmIChzZS0+c3MgJiYgc2Ut PnNzLT5sb29wKQotCSAgICB7Ci0JICAgICAgZ2ZjX3ByZXBlbmRfZXhwcl90 b19ibG9jayAoJnNlLT5zcy0+bG9vcC0+cG9zdCwgdG1wKTsKLQkgICAgICB0 bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBS LAotCQkJCSAgICAgbG9naWNhbF90eXBlX25vZGUsCi0JCQkJICAgICBpbmZv LT5kYXRhLAotCQkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGlu Zm8tPmRhdGEpLAotCQkJCQkgICAJICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7 Ci0JICAgICAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChpbnB1dF9sb2NhdGlv biwgQ09ORF9FWFBSLAotCQkJCSAgICAgdm9pZF90eXBlX25vZGUsIHRtcCwK LQkJCQkgICAgIGdmY19jYWxsX2ZyZWUgKGluZm8tPmRhdGEpLAotCQkJCSAg ICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKLQkgICAg ICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+c3MtPmxvb3AtPnBvc3Qs IHRtcCk7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIHRyZWUg Y2xhc3NkYXRhOwotCSAgICAgIGdmY19wcmVwZW5kX2V4cHJfdG9fYmxvY2sg KCZzZS0+cG9zdCwgdG1wKTsKLQkgICAgICBjbGFzc2RhdGEgPSBnZmNfY2xh c3NfZGF0YV9nZXQgKHNlLT5leHByKTsKLQkgICAgICB0bXAgPSBmb2xkX2J1 aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLAotCQkJCSAgICAg bG9naWNhbF90eXBlX25vZGUsCi0JCQkJICAgICBjbGFzc2RhdGEsCi0JCQkJ ICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoY2xhc3NkYXRhKSwKLQkJ CQkJICAgCSAgICBudWxsX3BvaW50ZXJfbm9kZSkpOwotCSAgICAgIHRtcCA9 IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwK LQkJCQkgICAgIHZvaWRfdHlwZV9ub2RlLCB0bXAsCi0JCQkJICAgICBnZmNf Y2FsbF9mcmVlIChjbGFzc2RhdGEpLAotCQkJCSAgICAgYnVpbGRfZW1wdHlf c3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKLQkgICAgICBnZmNfYWRkX2V4cHJf dG9fYmxvY2sgKCZzZS0+cG9zdCwgdG1wKTsKLQkgICAgfQorCSAgLyogRmlu YWxpemUgdGhlIHJlc3VsdCwgaWYgbmVjZXNzYXJ5LiAgKi8KKwkgIGF0dHIg PSBDTEFTU19EQVRBIChleHByLT52YWx1ZS5mdW5jdGlvbi5lc3ltLT5yZXN1 bHQpLT5hdHRyOworCSAgaWYgKCEoKGdmY19pc19jbGFzc19hcnJheV9mdW5j dGlvbiAoZXhwcikKKwkJIHx8IGdmY19pc19hbGxvY19jbGFzc19zY2FsYXJf ZnVuY3Rpb24gKGV4cHIpKQorCQkmJiBhdHRyLnBvaW50ZXIpKQorCSAgICBn ZmNfZmluYWxpemVfZnVuY3Rpb25fcmVzdWx0IChzZSwgTlVMTCwgYXR0ciwg ZXhwci0+cmFuayk7CiAJfQotCi1ub19maW5hbGl6YXRpb246CiAgICAgICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UtPnBvc3QsICZwb3N0KTsKICAg ICB9CgpAQCAtOTQ3OSwxMCArOTU2OSwyOSBAQCBnZmNfY29udl9leHByIChn ZmNfc2UgKiBzZSwgZ2ZjX2V4cHIgKiBleHByKQoKICAgICBjYXNlIEVYUFJf U1RSVUNUVVJFOgogICAgICAgZ2ZjX2NvbnZfc3RydWN0dXJlIChzZSwgZXhw ciwgMCk7CisgICAgICAvKiBGMjAwOCA0LjUuNi4zIHBhcmEgNTogSWYgYW4g ZXhlY3V0YWJsZSBjb25zdHJ1Y3QgcmVmZXJlbmNlcyBhCisJIHN0cnVjdHVy ZSBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1Y3RvciwgdGhlIGVudGl0 eSBjcmVhdGVkIGJ5CisJIHRoZSBjb25zdHJ1Y3RvciBpc2ZpbmFsaXplZCBh ZnRlciBleGVjdXRpb24gb2YgdGhlIGlubmVybW9zdAorCSBleGVjdXRhYmxl IGNvbnN0cnVjdCBjb250YWluaW5nIHRoZSByZWZlcmVuY2UuIFRoaXMsIGlu IGZhY3QsCisJIHdhcyBsYXRlciBkZWxldGVkIGJ5IHRoZSBDb21iaW5lZCBU ZWNoaWNhbCBDb3JyaWdlbmRhIDEgVE8gNCBmb3IKKwkgZm9ydHJhbiAyMDA4 IChmMDgvMDAxMSkuICAqLworICAgICAgaWYgKCFnZmNfbm90aWZpY2F0aW9u X3N0ZCAoR0ZDX1NURF9GMjAxOF9ERUwpICYmIGV4cHItPm11c3RfZmluYWxp emUKKwkgICYmIGdmY19tYXlfYmVfZmluYWxpemVkIChleHByLT50cykpCisJ eworCSAgZ2ZjX3dhcm5pbmcgKDAsICJUaGUgc3RydWN0dXJlIGNvbnN0cnVj dG9yIGF0ICVDIGhhcyBiZWVuIgorCQkJICIgZmluYWxpemVkLiBUaGlzIGZl YXR1cmUgd2FzIHJlbW92ZWQgYnkgZjA4LzAwMTEuIgorCQkJICIgVXNlIC1z dGQ9ZjIwMTggb3IgLXN0ZD1nbnUgdG8gZWxpbWluYXRlIHRoZSIKKwkJCSAi IGZpbmFsaXphdGlvbi4iKTsKKwkgIHN5bWJvbF9hdHRyaWJ1dGUgYXR0cjsK KwkgIGF0dHIuYWxsb2NhdGFibGUgPSBhdHRyLnBvaW50ZXIgPSAwOworCSAg Z2ZjX2ZpbmFsaXplX2Z1bmN0aW9uX3Jlc3VsdCAoc2UsIGV4cHItPnRzLnUu ZGVyaXZlZCwgYXR0ciwgMCk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmc2UtPnBvc3QsICZzZS0+ZmluYWxibG9jayk7CisJfQogICAgICAgYnJl YWs7CgogICAgIGNhc2UgRVhQUl9BUlJBWToKICAgICAgIGdmY19jb252X2Fy cmF5X2NvbnN0cnVjdG9yX2V4cHIgKHNlLCBleHByKTsKKyAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS0+cG9zdCwgJnNlLT5maW5hbGJsb2Nr KTsKICAgICAgIGJyZWFrOwoKICAgICBkZWZhdWx0OgpAQCAtMTA0ODMsNyAr MTA1OTIsOCBAQCBnZmNfdHJhbnNfc2NhbGFyX2Fzc2lnbiAoZ2ZjX3NlICog bHNlLCBnZmNfc2UgKiByc2UsIGdmY190eXBlc3BlYyB0cywKICAgICAgIGlm IChkZWFsbG9jKQogCXsKIAkgIHRtcF92YXIgPSBnZmNfZXZhbHVhdGVfbm93 IChsc2UtPmV4cHIsICZsc2UtPnByZSk7Ci0JICB0bXAgPSBnZmNfZGVhbGxv Y2F0ZV9hbGxvY19jb21wX25vX2NhZiAodHMudS5kZXJpdmVkLCB0bXBfdmFy LCAwKTsKKwkgIHRtcCA9IGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9f Y2FmICh0cy51LmRlcml2ZWQsIHRtcF92YXIsCisJCQkJCQkgIDAsIHRydWUp OwogCSAgaWYgKGRlZXBfY29weSkKIAkgICAgdG1wID0gYnVpbGQzX3YgKENP TkRfRVhQUiwgY29uZCwgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRp b24pLAogCQkJICAgIHRtcCk7CkBAIC0xMDQ5MSw2ICsxMDYwMSw3IEBAIGdm Y190cmFuc19zY2FsYXJfYXNzaWduIChnZmNfc2UgKiBsc2UsIGdmY19zZSAq IHJzZSwgZ2ZjX3R5cGVzcGVjIHRzLAogCX0KCiAgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmYmxvY2ssICZyc2UtPnByZSk7CisgICAgICBnZmNf YWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZsc2UtPmZpbmFsYmxvY2sp OwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNl LT5wcmUpOwoKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIGxzZS0+ ZXhwciwKQEAgLTEwNTIwLDggKzEwNjMxLDkgQEAgZ2ZjX3RyYW5zX3NjYWxh cl9hc3NpZ24gKGdmY19zZSAqIGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlw ZXNwZWMgdHMsCiAgICAgfQogICBlbHNlIGlmIChnZmNfYnRfc3RydWN0ICh0 cy50eXBlKSkKICAgICB7Ci0gICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmYmxvY2ssICZsc2UtPnByZSk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmYmxvY2ssICZyc2UtPnByZSk7CisgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmYmxvY2ssICZsc2UtPmZpbmFsYmxvY2spOworICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUp OwogICAgICAgdG1wID0gZm9sZF9idWlsZDFfbG9jIChpbnB1dF9sb2NhdGlv biwgVklFV19DT05WRVJUX0VYUFIsCiAJCQkgICAgIFRSRUVfVFlQRSAobHNl LT5leHByKSwgcnNlLT5leHByKTsKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgm YmxvY2ssIGxzZS0+ZXhwciwgdG1wKTsKQEAgLTEwNTMxLDYgKzEwNjQzLDcg QEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19zZSAqIGxzZSwgZ2Zj X3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAgewogICAgICAgZ2Zj X2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUpOwogICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmcnNlLT5wcmUp OworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNl LT5maW5hbGJsb2NrKTsKCiAgICAgICBpZiAoIXRyYW5zX3NjYWxhcl9jbGFz c19hc3NpZ24gKCZibG9jaywgbHNlLCByc2UpKQogCXsKQEAgLTEwODQ5LDYg KzEwOTYyLDExOCBAQCBmY25jYWxsX3JlYWxsb2NfcmVzdWx0IChnZmNfc2Ug KnNlLCBpbnQgcmFuaykKIH0KCgorICAvKiBGMjAxOCAoNy41LjYuMyk6ICJX aGVuIGFuIGludHJpbnNpYyBhc3NpZ25tZW50IHN0YXRlbWVudCBpcyBleGVj dXRlZAorICAgICAoMTAuMi4xLjMpLCBpZiB0aGUgdmFyaWFibGUgaXMgbm90 IGFuIHVuYWxsb2NhdGVkIGFsbG9jYXRhYmxlIHZhcmlhYmxlLAorICAgICBp dCBpcyBmaW5hbGl6ZWQgYWZ0ZXIgZXZhbHVhdGlvbiBvZiBleHByIGFuZCBi ZWZvcmUgdGhlIGRlZmluaXRpb24gb2YKKyAgICAgdGhlIHZhcmlhYmxlLiBJ ZiB0aGUgdmFyaWFibGUgaXMgYW4gYWxsb2NhdGVkIGFsbG9jYXRhYmxlIHZh cmlhYmxlLCBvcgorICAgICBoYXMgYW4gYWxsb2NhdGVkIGFsbG9jYXRhYmxl IHN1Ym9iamVjdCwgdGhhdCB3b3VsZCBiZSBkZWFsbG9jYXRlZCBieQorICAg ICBpbnRyaW5zaWMgYXNzaWdubWVudCwgdGhlIGZpbmFsaXphdGlvbiBvY2N1 cnMgYmVmb3JlIHRoZSBkZWFsbG9jYXRpb24gKi8KKworc3RhdGljIGJvb2wK K2dmY19hc3NpZ25tZW50X2ZpbmFsaXplcl9jYWxsIChnZmNfc2UgKmxzZSwg Z2ZjX2V4cHIgKmV4cHIxLCBib29sIGluaXRfZmxhZykKK3sKKyAgc3ltYm9s X2F0dHJpYnV0ZSBsaHNfYXR0cjsKKyAgdHJlZSBmaW5hbF9leHByOworICB0 cmVlIHB0cjsKKyAgdHJlZSBjb25kOworICBnZmNfc2Ugc2U7CisgIGdmY19z eW1ib2wgKnN5bSA9IGV4cHIxLT5zeW10cmVlLT5uLnN5bTsKKyAgZ2ZjX3Jl ZiAqcmVmID0gZXhwcjEtPnJlZjsKKyAgc3RtdGJsb2NrX3QgZmluYWxfYmxv Y2s7CisgIGdmY19pbml0X2Jsb2NrICgmZmluYWxfYmxvY2spOworICBnZmNf ZXhwciAqZmluYWxpemVfZXhwcjsKKyAgYm9vbCBjbGFzc19hcnJheV9yZWY7 CisKKyAgLyogV2UgaGF2ZSB0byBleGNsdWRlIHZ0YWJsZSBwcm9jZWR1cmVz IChfY29weSBhbmQgX2ZpbmFsIGVzcGVjaWFsbHkpLCB1c2VzCisgICAgIG9m IGdmY190cmFuc19hc3NpZ25tZW50XzEgaW4gaW5pdGlhbGl6YXRpb24gYW5k IGFsbG9jYXRpb24gYmVmb3JlIHRyeWluZworICAgICB0byBidWlsZCBhIGZp bmFsIGNhbGwuICAqLworICBpZiAoIWV4cHIxLT5tdXN0X2ZpbmFsaXplCisg ICAgICB8fCBzeW0tPmF0dHIuYXJ0aWZpY2lhbAorICAgICAgfHwgc3ltLT5u cy0+cHJvY19uYW1lLT5hdHRyLmFydGlmaWNpYWwKKyAgICAgIHx8IGluaXRf ZmxhZykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgY2xhc3NfYXJyYXlfcmVm ID0gcmVmICYmIHJlZi0+dHlwZSA9PSBSRUZfQ09NUE9ORU5UCisJCSAgICAm JiAhc3RyY21wIChyZWYtPnUuYy5jb21wb25lbnQtPm5hbWUsICJfZGF0YSIp CisJCSAgICAmJiByZWYtPm5leHQgJiYgcmVmLT5uZXh0LT50eXBlID09IFJF Rl9BUlJBWQorCQkgICAgJiYgIXJlZi0+bmV4dC0+bmV4dDsKKworICBpZiAo Y2xhc3NfYXJyYXlfcmVmKQorICAgIHsKKyAgICAgIGZpbmFsaXplX2V4cHIg PSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChzeW0pOworICAgICAgZmluYWxp emVfZXhwci0+bXVzdF9maW5hbGl6ZSA9IDE7CisgICAgICByZWYgPSBOVUxM OworICAgIH0KKyAgZWxzZQorICAgIGZpbmFsaXplX2V4cHIgPSBnZmNfY29w eV9leHByIChleHByMSk7CisKKyAgLyogRjIwMTggNy41LjYuMjogT25seSBm aW5hbGl6YWJsZSBlbnRpdGllcyBhcmUgZmluYWxpemVkLiAgKi8KKyAgaWYg KCEoZXhwcjEtPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCSYmIGdmY19pc19m aW5hbGl6YWJsZSAoZXhwcjEtPnRzLnUuZGVyaXZlZCwgTlVMTCkpCisgICAg ICAmJiBleHByMS0+dHMudHlwZSAhPSBCVF9DTEFTUykKKyAgICAgIHJldHVy biBmYWxzZTsKKworICBpZiAoIWdmY19tYXlfYmVfZmluYWxpemVkIChzeW0t PnRzKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgZ2ZjX2luaXRfYmxvY2sg KCZmaW5hbF9ibG9jayk7CisgIGJvb2wgZmluYWxpemFibGUgPSBnZmNfYWRk X2ZpbmFsaXplcl9jYWxsICgmZmluYWxfYmxvY2ssIGZpbmFsaXplX2V4cHIp OworICBnZmNfZnJlZV9leHByIChmaW5hbGl6ZV9leHByKTsKKworICBpZiAo IWZpbmFsaXphYmxlKQorICAgIHJldHVybiBmYWxzZTsKKworICBsaHNfYXR0 ciA9IGdmY19leHByX2F0dHIgKGV4cHIxKTsKKworICAvKiBDaGVjayBhbGxv Y2F0YWJsZS9wb2ludGVyIGlzIGFsbG9jYXRlZC9hc3NvY2lhdGVkLiAgKi8K KyAgaWYgKGxoc19hdHRyLmFsbG9jYXRhYmxlIHx8IGxoc19hdHRyLnBvaW50 ZXIpCisgICAgeworICAgICAgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NM QVNTKQorCXsKKwkgIHB0ciA9IGdmY19nZXRfY2xhc3NfZnJvbV9nZmNfZXhw ciAoZXhwcjEpOworCSAgZ2NjX2Fzc2VydCAocHRyICE9IE5VTExfVFJFRSk7 CisJICBwdHIgPSBnZmNfY2xhc3NfZGF0YV9nZXQgKHB0cik7CisJICBpZiAo bGhzX2F0dHIuZGltZW5zaW9uKQorCSAgICBwdHIgPSBnZmNfY29udl9kZXNj cmlwdG9yX2RhdGFfZ2V0IChwdHIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKwkgIGlmIChleHByMS0+cmFu aykKKwkgICAgeworCSAgICAgIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAo JnNlLCBleHByMSk7CisJICAgICAgcHRyID0gZ2ZjX2NvbnZfZGVzY3JpcHRv cl9kYXRhX2dldCAoc2UuZXhwcik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGdmY19jb252X2V4cHIgKCZzZSwgZXhwcjEpOworCSAgICAg IHB0ciA9IGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTExfVFJFRSwgc2UuZXhw cik7CisJICAgIH0KKwl9CisKKyAgICAgIGNvbmQgPSBmb2xkX2J1aWxkMl9s b2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLCBsb2dpY2FsX3R5cGVfbm9k ZSwKKwkJCSAgICAgIHB0ciwgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAo cHRyKSkpOworICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0 X2xvY2F0aW9uLCBDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAg ICAgIGNvbmQsIGdmY19maW5pc2hfYmxvY2sgKCZmaW5hbF9ibG9jayksCisJ CQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsK KyAgICB9CisgIGVsc2UKKyAgICBmaW5hbF9leHByID0gZ2ZjX2ZpbmlzaF9i bG9jayAoJmZpbmFsX2Jsb2NrKTsKKworICAvKiBDaGVjayBvcHRpb25hbCBw cmVzZW50LiAgKi8KKyAgaWYgKHN5bS0+YXR0ci5vcHRpb25hbCkKKyAgICB7 CisgICAgICBjb25kID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChzeW0pOwor ICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9u LCBDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQs IGZpbmFsX2V4cHIsCisJCQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5w dXRfbG9jYXRpb24pKTsKKyAgICB9CisKKyAgZ2ZjX2FkZF9leHByX3RvX2Js b2NrICgmbHNlLT5maW5hbGJsb2NrLCBmaW5hbF9leHByKTsKKworICByZXR1 cm4gdHJ1ZTsKK30KKwoKIC8qIFRyeSB0byB0cmFuc2xhdGUgYXJyYXkoOikg PSBmdW5jICguLi4pLCB3aGVyZSBmdW5jIGlzIGEgdHJhbnNmb3JtYXRpb25h bAogICAgYXJyYXkgZnVuY3Rpb24sIHdpdGhvdXQgdXNpbmcgYSB0ZW1wb3Jh cnkuICBSZXR1cm5zIE5VTEwgaWYgdGhpcyBpc24ndCB0aGUKQEAgLTEwODYx LDYgKzExMDg2LDExIEBAIGdmY190cmFuc19hcnJheWZ1bmNfYXNzaWduIChn ZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyKQogICBnZmNfc3Mg KnNzID0gTlVMTDsKICAgZ2ZjX2NvbXBvbmVudCAqY29tcCA9IE5VTEw7CiAg IGdmY19sb29waW5mbyBsb29wOworICB0cmVlIHRtcDsKKyAgdHJlZSBsaHM7 CisgIGdmY19zZSBmaW5hbF9zZTsKKyAgZ2ZjX3N5bWJvbCAqc3ltID0gZXhw cjEtPnN5bXRyZWUtPm4uc3ltOworICBib29sIGZpbmFsaXphYmxlID0gIGdm Y19tYXlfYmVfZmluYWxpemVkIChleHByMS0+dHMpOwoKICAgaWYgKGFycmF5 ZnVuY19hc3NpZ25fbmVlZHNfdGVtcG9yYXJ5IChleHByMSwgZXhwcjIpKQog ICAgIHJldHVybiBOVUxMOwpAQCAtMTA4NzksMTIgKzExMTA5LDQ0IEBAIGdm Y190cmFuc19hcnJheWZ1bmNfYXNzaWduIChnZmNfZXhwciAqIGV4cHIxLCBn ZmNfZXhwciAqIGV4cHIyKQogICBnZmNfc3RhcnRfYmxvY2sgKCZzZS5wcmUp OwogICBzZS53YW50X3BvaW50ZXIgPSAxOwoKKyAgLyogRmlyc3QgdGhlIGxo cyBtdXN0IGJlIGZpbmFsaXplZCwgaWYgbmVjZXNzYXJ5LiBXZSB1c2UgYSBj b3B5IG9mIHRoZSBzeW1ib2wKKyAgICAgYmFja2VuZCBkZWNsLCBzdGFzaCB0 aGUgb3JpZ2luYWwgYXdheSBmb3IgdGhlIGZpbmFsaXphdGlvbiBzbyB0aGF0 IHRoZQorICAgICB2YWx1ZSB1c2VkIGlzIHRoYXQgYmVmb3JlIHRoZSBhc3Np Z25tZW50LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCisgICAgIGV2YWx1 YXRpb24gb2YgdGhlIHJocyBleHByZXNzaW9uIHVzaW5nIGRpcmVjdCBieSBy ZWZlcmVuY2UgY2FuIGNoYW5nZQorICAgICB0aGUgdmFsdWUuIEhvd2V2ZXIs IHRoZSBzdGFuZGFyZCBtYW5kYXRlcyB0aGF0IHRoZSBmaW5hbGl6YXRpb24g bXVzdCBvY2N1cgorICAgICBhZnRlciBldmFsdWF0aW9uIG9mIHRoZSByaHMu ICAqLworICBnZmNfaW5pdF9zZSAoJmZpbmFsX3NlLCBOVUxMKTsKKworICBp ZiAoZmluYWxpemFibGUpCisgICAgeworICAgICAgdG1wID0gc3ltLT5iYWNr ZW5kX2RlY2w7CisgICAgICBsaHMgPSBzeW0tPmJhY2tlbmRfZGVjbDsKKyAg ICAgIGlmIChUUkVFX0NPREUgKHRtcCkgPT0gSU5ESVJFQ1RfUkVGKQorCXRt cCA9IFRSRUVfT1BFUkFORCAodG1wLCAwKTsKKyAgICAgIHN5bS0+YmFja2Vu ZF9kZWNsID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVfVFlQRSAodG1wKSwgImxo cyIpOworICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS5wcmUsIHN5bS0+YmFj a2VuZF9kZWNsLCB0bXApOworICAgICAgaWYgKEdGQ19ERVNDUklQVE9SX1RZ UEVfUCAoVFJFRV9UWVBFICh0bXApKSkKKwl7CisJICB0bXAgPSBnZmNfY29w eV9hbGxvY19jb21wIChleHByMS0+dHMudS5kZXJpdmVkLCB0bXAsIHN5bS0+ YmFja2VuZF9kZWNsLAorCQkJCSAgICAgZXhwcjEtPnJhbmssIDApOworCSAg Z2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmZmluYWxfc2UucHJlLCB0bXApOwor CX0KKyAgICB9CisKKyAgaWYgKGZpbmFsaXphYmxlICYmIGdmY19hc3NpZ25t ZW50X2ZpbmFsaXplcl9jYWxsICgmZmluYWxfc2UsIGV4cHIxLCBmYWxzZSkp CisgICAgeworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLnBy ZSwgJmZpbmFsX3NlLnByZSk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmc2UucG9zdCwgJmZpbmFsX3NlLmZpbmFsYmxvY2spOworICAgIH0K KworICBpZiAoZmluYWxpemFibGUpCisgICAgc3ltLT5iYWNrZW5kX2RlY2wg PSBsaHM7CisKICAgZ2ZjX2NvbnZfYXJyYXlfcGFyYW1ldGVyICgmc2UsIGV4 cHIxLCBmYWxzZSwgTlVMTCwgTlVMTCwgTlVMTCk7CgogICBpZiAoZXhwcjEt PnRzLnR5cGUgPT0gQlRfREVSSVZFRAogCSYmIGV4cHIxLT50cy51LmRlcml2 ZWQtPmF0dHIuYWxsb2NfY29tcCkKICAgICB7Ci0gICAgICB0cmVlIHRtcDsK ICAgICAgIHRtcCA9IGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9fY2Fm IChleHByMS0+dHMudS5kZXJpdmVkLCBzZS5leHByLAogCQkJCQkgICAgICBl eHByMS0+cmFuayk7CiAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZz ZS5wcmUsIHRtcCk7CkBAIC0xMDg5NCw2ICsxMTE1NiwxOCBAQCBnZmNfdHJh bnNfYXJyYXlmdW5jX2Fzc2lnbiAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4 cHIgKiBleHByMikKICAgc2Uuc3MgPSBnZmNfd2Fsa19leHByIChleHByMik7 CiAgIGdjY19hc3NlcnQgKHNlLnNzICE9IGdmY19zc190ZXJtaW5hdG9yKTsK CisgIC8qIFNpbmNlIHRoaXMgaXMgYSBkaXJlY3QgYnkgcmVmZXJlbmNlIGNh bGwsIHJlZmVyZW5jZXMgdG8gdGhlIGxocyBjYW4gYmUKKyAgICAgdXNlZCBm b3IgZmluYWxpemF0aW9uIG9mIHRoZSBmdW5jdGlvbiByZXN1bHQganVzdCBh cyBsb25nIGFzIHRoZSBibG9ja3MKKyAgICAgZnJvbSBmaW5hbF9zZSBhcmUg YWRkZWQgYXQgdGhlIHJpZ2h0IHRpbWUuICAqLworICBnZmNfaW5pdF9zZSAo JmZpbmFsX3NlLCBOVUxMKTsKKyAgaWYgKGZpbmFsaXphYmxlICYmIGV4cHIy LT52YWx1ZS5mdW5jdGlvbi5lc3ltKQorICAgIHsKKyAgICAgIGZpbmFsX3Nl LmV4cHIgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xv Y2F0aW9uLCBzZS5leHByKTsKKyAgICAgIGdmY19maW5hbGl6ZV9mdW5jdGlv bl9yZXN1bHQgKCZmaW5hbF9zZSwgZXhwcjItPnRzLnUuZGVyaXZlZCwKKwkJ CQkgICAgZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmVzeW0tPmF0dHIsCisJCQkJ ICAgIGV4cHIyLT5yYW5rKTsKKyAgICB9CisKICAgLyogUmVhbGxvY2F0ZSBv biBhc3NpZ25tZW50IG5lZWRzIHRoZSBsb29waW5mbyBmb3IgZXh0cmluc2lj IGZ1bmN0aW9ucy4KICAgICAgVGhpcyBpcyBzaWduYWxsZWQgdG8gZ2ZjX2Nv bnZfcHJvY2VkdXJlX2NhbGwgYnkgc2V0dGluZyBpc19hbGxvY19saHMuCiAg ICAgIENsZWFybHksIHRoaXMgY2Fubm90IGJlIGRvbmUgZm9yIGFuIGFsbG9j YXRhYmxlIGZ1bmN0aW9uIHJlc3VsdCwgc2luY2UKQEAgLTEwOTI0LDcgKzEx MTk4LDE5IEBAIGdmY190cmFuc19hcnJheWZ1bmNfYXNzaWduIChnZmNfZXhw ciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyKQogICAgIH0KCiAgIGdmY19j b252X2Z1bmN0aW9uX2V4cHIgKCZzZSwgZXhwcjIpOworCisgIC8qIEZpeCB0 aGUgcmVzdWx0LiAgKi8KICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNl LnByZSwgJnNlLnBvc3QpOworICBpZiAoZmluYWxpemFibGUpCisgICAgZ2Zj X2FkZF9ibG9ja190b19ibG9jayAoJnNlLnByZSwgJmZpbmFsX3NlLnByZSk7 CisKKyAgLyogRG8gdGhlIGZpbmFsaXphdGlvbiwgaW5jbHVkaW5nIGZpbmFs IGNhbGxzIGZyb20gZnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KKyAgaWYgKGZp bmFsaXphYmxlKQorICAgIHsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZzZS5wcmUsICZmaW5hbF9zZS5wb3N0KTsKKyAgICAgIGdmY19hZGRf YmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZzZS5maW5hbGJsb2NrKTsKKyAg ICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZmaW5hbF9z ZS5maW5hbGJsb2NrKTsKKyAgIH0KCiAgIGlmIChzcykKICAgICBnZmNfY2xl YW51cF9sb29wICgmbG9vcCk7CkBAIC0xMTQ0Nyw2ICsxMTczMywxNyBAQCB0 cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ssIGdm Y19leHByICpsaHMsIGdmY19leHByICpyaHMsCiB7CiAgIHRyZWUgdG1wLCBm Y24sIHN0ZGNvcHksIHRvX2xlbiwgZnJvbV9sZW4sIHZwdHIsIG9sZF92cHRy OwogICB2ZWM8dHJlZSwgdmFfZ2M+ICphcmdzID0gTlVMTDsKKyAgYm9vbCBm aW5hbF9leHByOworCisgIGZpbmFsX2V4cHIgPSBnZmNfYXNzaWdubWVudF9m aW5hbGl6ZXJfY2FsbCAobHNlLCBsaHMsIGZhbHNlKTsKKyAgaWYgKGZpbmFs X2V4cHIpCisgICAgeworICAgICAgaWYgKHJzZS0+bG9vcCkKKwlnZmNfcHJl cGVuZF9leHByX3RvX2Jsb2NrICgmcnNlLT5sb29wLT5wcmUsCisJCQkJICAg Z2ZjX2ZpbmlzaF9ibG9jayAoJmxzZS0+ZmluYWxibG9jaykpOworICAgICAg ZWxzZQorCWdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKGJsb2NrLCAmbHNlLT5m aW5hbGJsb2NrKTsKKyAgICB9CgogICAvKiBTdG9yZSB0aGUgb2xkIHZwdHIg c28gdGhhdCBkeW5hbWljIHR5cGVzIGNhbiBiZSBjb21wYXJlZCBmb3IKICAg ICAgcmVhbGxvY2F0aW9uIHRvIG9jY3VyIG9yIG5vdC4gICovCkBAIC0xMTQ3 Miw4ICsxMTc2OSw5IEBAIHRyYW5zX2NsYXNzX2Fzc2lnbm1lbnQgKHN0bXRi bG9ja190ICpibG9jaywgZ2ZjX2V4cHIgKmxocywgZ2ZjX2V4cHIgKnJocywK IAlvbGRfdnB0ciA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAodnB0ciks IDApOwoKICAgICAgIHNpemUgPSBnZmNfdnB0cl9zaXplX2dldCAodnB0cik7 Ci0gICAgICBjbGFzc19oYW4gPSBHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZ UEUgKGxzZS0+ZXhwcikpCi0JICA/IGdmY19jbGFzc19kYXRhX2dldCAobHNl LT5leHByKSA6IGxzZS0+ZXhwcjsKKyAgICAgIHRtcCA9IGxzZS0+ZXhwcjsK KyAgICAgIGNsYXNzX2hhbiA9IEdGQ19DTEFTU19UWVBFX1AgKFRSRUVfVFlQ RSAodG1wKSkKKwkgID8gZ2ZjX2NsYXNzX2RhdGFfZ2V0ICh0bXApIDogdG1w OwoKICAgICAgIGlmICghUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoY2xh c3NfaGFuKSkpCiAJY2xhc3NfaGFuID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAo TlVMTF9UUkVFLCBjbGFzc19oYW4pOwpAQCAtMTE1NzUsNiArMTE4NzMsNyBA QCB0cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ss IGdmY19leHByICpsaHMsIGdmY19leHByICpyaHMsCiAgICAgfQogfQoKKwog LyogU3Vicm91dGluZSBvZiBnZmNfdHJhbnNfYXNzaWdubWVudCB0aGF0IGFj dHVhbGx5IHNjYWxhcml6ZXMgdGhlCiAgICBhc3NpZ25tZW50LiAgRVhQUjEg aXMgdGhlIGRlc3RpbmF0aW9uL0xIUyBhbmQgRVhQUjIgaXMgdGhlIHNvdXJj ZS9SSFMuCiAgICBpbml0X2ZsYWcgaW5kaWNhdGVzIGluaXRpYWxpemF0aW9u IGV4cHJlc3Npb25zIGFuZCBkZWFsbG9jIHRoYXQgbm8KQEAgLTExNTk4LDYg KzExODk3LDcgQEAgZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSAoZ2ZjX2V4cHIg KiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMiwgYm9vbCBpbml0X2ZsYWcsCiAg IHRyZWUgdG1wOwogICBzdG10YmxvY2tfdCBibG9jazsKICAgc3RtdGJsb2Nr X3QgYm9keTsKKyAgYm9vbCBmaW5hbF9leHByOwogICBib29sIGxfaXNfdGVt cDsKICAgYm9vbCBzY2FsYXJfdG9fYXJyYXk7CiAgIHRyZWUgc3RyaW5nX2xl bmd0aDsKQEAgLTExNjM0LDEwICsxMTkzNCwxNCBAQCBnZmNfdHJhbnNfYXNz aWdubWVudF8xIChnZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIy LCBib29sIGluaXRfZmxhZywKIAkgIHx8IGdmY19pc19hbGxvY19jbGFzc19z Y2FsYXJfZnVuY3Rpb24gKGV4cHIyKSkpCiAgICAgZXhwcjItPm11c3RfZmlu YWxpemUgPSAxOwoKKyAgaWYgKGV4cHIyLT50cy50eXBlID09IEJUX0RFUklW RUQgJiYgZXhwcjItPmV4cHJfdHlwZSA9PSBFWFBSX1NUUlVDVFVSRSkKKyAg ICBleHByMi0+bXVzdF9maW5hbGl6ZSA9IDE7CisKICAgLyogQ2hlY2tpbmcg d2hldGhlciBhIGNsYXNzIGFzc2lnbm1lbnQgaXMgZGVzaXJlZCBpcyBxdWl0 ZSBjb21wbGljYXRlZCBhbmQKICAgICAgbmVlZGVkIGF0IHR3byBsb2NhdGlv bnMsIHNvIGRvIGl0IG9uY2Ugb25seSBiZWZvcmUgdGhlIGluZm9ybWF0aW9u IGlzCiAgICAgIG5lZWRlZC4gICovCiAgIGxoc19hdHRyID0gZ2ZjX2V4cHJf YXR0ciAoZXhwcjEpOworCiAgIGlzX3BvbHlfYXNzaWduID0gKHVzZV92cHRy X2NvcHkgfHwgbGhzX2F0dHIucG9pbnRlcgogCQkgICAgfHwgKGxoc19hdHRy LmFsbG9jYXRhYmxlICYmICFsaHNfYXR0ci5kaW1lbnNpb24pKQogCQkgICAm JiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0xBU1MKQEAgLTExOTExLDYgKzEy MjE1LDggQEAgZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSAoZ2ZjX2V4cHIgKiBl eHByMSwgZ2ZjX2V4cHIgKiBleHByMiwgYm9vbCBpbml0X2ZsYWcsCiAJICBl bHNlCiAJICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmxvb3AucG9zdCwg dG1wMik7CiAJfQorCisgICAgICBleHByMS0+bXVzdF9maW5hbGl6ZSA9IDA7 CiAgICAgfQogICBlbHNlIGlmIChmbGFnX2NvYXJyYXkgPT0gR0ZDX0ZDT0FS UkFZX0xJQgogCSAgICYmIGxoc19jYWZfYXR0ci5jb2RpbWVuc2lvbiAmJiBy aHNfY2FmX2F0dHIuY29kaW1lbnNpb24KQEAgLTExOTU2LDYgKzEyMjYyLDI3 IEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEs IGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogCX0KICAgICB9 CgorICAvKiBDb21wbHkgd2l0aCBGMjAxOCAoNy41LjYuMykuIE1ha2Ugc3Vy ZSB0aGF0IGFueSBmaW5hbGl6YXRpb24gY29kZSBpcyBhZGRlZAorICAgICBh ZnRlciBldmFsdWF0aW9uIG9mIHRoZSByaHMgYW5kIGJlZm9yZSByZWFsbG9j YXRpb24uICAqLworICBmaW5hbF9leHByID0gZ2ZjX2Fzc2lnbm1lbnRfZmlu YWxpemVyX2NhbGwgKCZsc2UsIGV4cHIxLCBpbml0X2ZsYWcpOworICBpZiAo ZmluYWxfZXhwciAmJiAhKGV4cHIyLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJ QUJMRQorCQkgICAgICAmJiBleHByMi0+c3ltdHJlZS0+bi5zeW0tPmF0dHIu YXJ0aWZpY2lhbCkpCisgICAgeworICAgICAgaWYgKGxzcyA9PSBnZmNfc3Nf dGVybWluYXRvcikKKwl7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm YmxvY2ssICZyc2UucHJlKTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KCZibG9jaywgJmxzZS5maW5hbGJsb2NrKTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZyc2UucHJl KTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZsb29wLmNvZGVbZXhw cjEtPnJhbmsgLSAxXSwKKwkJCQkgICZsc2UuZmluYWxibG9jayk7CisJfQor ICAgIH0KKyAgZWxzZQorICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZi b2R5LCAmcnNlLnByZSk7CisKICAgLyogSWYgbm90aGluZyBlbHNlIHdvcmtz LCBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXkhICAqLwogICBpZiAodG1w ID09IE5VTExfVFJFRSkKICAgICB0bXAgPSBnZmNfdHJhbnNfc2NhbGFyX2Fz c2lnbiAoJmxzZSwgJnJzZSwgZXhwcjEtPnRzLApAQCAtMTE5NjUsMTIgKzEy MjkyLDIwIEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHByICog ZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogCQkJ CSAgICEobF9pc190ZW1wIHx8IGluaXRfZmxhZykgJiYgZGVhbGxvYywKIAkJ CQkgICBleHByMS0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuY29kaW1lbnNpb24p OwoKLSAgLyogQWRkIHRoZSBwcmUgYmxvY2tzIHRvIHRoZSBib2R5LiAgKi8K LSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZyc2UucHJlKTsK KworICAvKiBBZGQgdGhlIGxzZSBwcmUgYmxvY2sgdG8gdGhlIGJvZHkgICov CiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmbHNlLnByZSk7 CiAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmJvZHksIHRtcCk7CisKICAg LyogQWRkIHRoZSBwb3N0IGJsb2NrcyB0byB0aGUgYm9keS4gICovCi0gIGdm Y19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnBvc3QpOworICBp ZiAoIWxfaXNfdGVtcCkKKyAgICB7CisgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmcnNlLmZpbmFsYmxvY2ssICZyc2UucG9zdCk7CisgICAgICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJzZS5maW5hbGJsb2Nr KTsKKyAgICB9CisgIGVsc2UKKyAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmYm9keSwgJnJzZS5wb3N0KTsKKwogICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmYm9keSwgJmxzZS5wb3N0KTsKCiAgIGlmIChsc3MgPT0gZ2ZjX3Nz X3Rlcm1pbmF0b3IpCkBAIC0xMTk5NCw2ICsxMjMyOSw3IEBAIGdmY190cmFu c19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEsIGdmY19leHByICog ZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogCSAgZ2ZjX3RyYW5zX3NjYWxhcml6 ZWRfbG9vcF9ib3VuZGFyeSAoJmxvb3AsICZib2R5KTsKCiAJICAvKiBXZSBu ZWVkIHRvIGNvcHkgdGhlIHRlbXBvcmFyeSB0byB0aGUgYWN0dWFsIGxocy4g ICovCisvLwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZsb29wLnBvc3Qs ICZyc2UuZmluYWxibG9jayk7CiAJICBnZmNfaW5pdF9zZSAoJmxzZSwgTlVM TCk7CiAJICBnZmNfaW5pdF9zZSAoJnJzZSwgTlVMTCk7CiAJICBnZmNfY29w eV9sb29waW5mb190b19zZSAoJmxzZSwgJmxvb3ApOwpkaWZmIC0tZ2l0IGEv Z2NjL2ZvcnRyYW4vdHJhbnMtaW8uY2MgYi9nY2MvZm9ydHJhbi90cmFucy1p by5jYwppbmRleCA5Zjg2ODE1Mzg4Yy4uNWVkZjFmZTFiNTEgMTAwNjQ0Ci0t LSBhL2djYy9mb3J0cmFuL3RyYW5zLWlvLmNjCisrKyBiL2djYy9mb3J0cmFu L3RyYW5zLWlvLmNjCkBAIC0yNjkwLDYgKzI2OTAsNyBAQCBzY2FsYXJpemU6 CgogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnNlLnByZSk7 CiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmc2UucG9zdCk7 CisgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmc2UuZmluYWxi bG9jayk7CgogICBpZiAoc2Uuc3MgPT0gTlVMTCkKICAgICB0bXAgPSBnZmNf ZmluaXNoX2Jsb2NrICgmYm9keSk7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJh bi90cmFucy1zdG10LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYwpp bmRleCBiMjg4ZjFmOTA1MC4uNTEyNjE2OTA3NDQgMTAwNjQ0Ci0tLSBhL2dj Yy9mb3J0cmFuL3RyYW5zLXN0bXQuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJh bnMtc3RtdC5jYwpAQCAtNDQ0LDcgKzQ0NCw4IEBAIGdmY190cmFuc19jYWxs IChnZmNfY29kZSAqIGNvZGUsIGJvb2wgZGVwZW5kZW5jeV9jaGVjaywKICAg ICAgIGVsc2UKIAlnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS5wcmUsIHNl LmV4cHIpOwoKLSAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5w cmUsICZzZS5wb3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KCZzZS5maW5hbGJsb2NrLCAmc2UucG9zdCk7CisgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmc2UuZmluYWxibG9jayk7CiAgICAg fQoKICAgZWxzZQpAQCAtNTQzLDYgKzU0NCw3IEBAIGdmY190cmFuc19jYWxs IChnZmNfY29kZSAqIGNvZGUsIGJvb2wgZGVwZW5kZW5jeV9jaGVjaywKICAg ICAgIGdmY190cmFuc19zY2FsYXJpemluZ19sb29wcyAoJmxvb3AsICZib2R5 KTsKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZs b29wLnByZSk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2Uu cHJlLCAmbG9vcC5wb3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZzZS5wcmUsICZsb29wc2UuZmluYWxibG9jayk7CiAgICAgICBnZmNf YWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmc2UucG9zdCk7CiAgICAg ICBnZmNfY2xlYW51cF9sb29wICgmbG9vcCk7CiAgICAgfQpAQCAtNjM0Nyw3 ICs2MzQ5LDEwIEBAIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUgKiBj b2RlKQogCX0KICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9j aywgJnNlLnByZSk7CiAgICAgICBpZiAoY29kZS0+ZXhwcjMtPm11c3RfZmlu YWxpemUpCi0JZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmZpbmFsX2Jsb2Nr LCAmc2UucG9zdCk7CisJeworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAo JmZpbmFsX2Jsb2NrLCAmc2UuZmluYWxibG9jayk7CisJICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmZmluYWxfYmxvY2ssICZzZS5wb3N0KTsKKwl9CiAg ICAgICBlbHNlCiAJZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnBvc3QsICZz ZS5wb3N0KTsKCkBAIC03MDA3LDggKzcwMTIsMTMgQEAgZ2ZjX3RyYW5zX2Fs bG9jYXRlIChnZmNfY29kZSAqIGNvZGUpCiAJICBnZmNfZXhwciAqaW5pdF9l eHByID0gZ2ZjX2V4cHJfdG9faW5pdGlhbGl6ZSAoZXhwcik7CiAJICBnZmNf ZXhwciAqcmhzID0gZTNyaHMgPyBlM3JocyA6IGdmY19jb3B5X2V4cHIgKGNv ZGUtPmV4cHIzKTsKIAkgIGZsYWdfcmVhbGxvY19saHMgPSAwOworCisJICAv KiBTZXQgdGhlIHN5bWJvbCB0byBiZSBhcnRpZmljaWFsIHNvIHRoYXQgdGhl IHJlc3VsdCBpcyBub3QgZmluYWxpemVkLiAgKi8KKwkgIGluaXRfZXhwci0+ c3ltdHJlZS0+bi5zeW0tPmF0dHIuYXJ0aWZpY2lhbCA9IDE7CiAJICB0bXAg PSBnZmNfdHJhbnNfYXNzaWdubWVudCAoaW5pdF9leHByLCByaHMsIHRydWUs IGZhbHNlLCB0cnVlLAogCQkJCSAgICAgIGZhbHNlKTsKKwkgIGluaXRfZXhw ci0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuYXJ0aWZpY2lhbCA9IDA7CisKIAkg IGZsYWdfcmVhbGxvY19saHMgPSByZWFsbG9jX2xoczsKIAkgIC8qIEZyZWUg dGhlIGV4cHJlc3Npb24gYWxsb2NhdGVkIGZvciBpbml0X2V4cHIuICAqLwog CSAgZ2ZjX2ZyZWVfZXhwciAoaW5pdF9leHByKTsKZGlmZiAtLWdpdCBhL2dj Yy9mb3J0cmFuL3RyYW5zLmggYi9nY2MvZm9ydHJhbi90cmFucy5oCmluZGV4 IGJjOTAzNWMxNzE3Li5iNDA0ZGE0OTg3OCAxMDA2NDQKLS0tIGEvZ2NjL2Zv cnRyYW4vdHJhbnMuaAorKysgYi9nY2MvZm9ydHJhbi90cmFucy5oCkBAIC00 Myw2ICs0MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBnZmNfc2UKICAgc3RtdGJs b2NrX3QgcHJlOwogICBzdG10YmxvY2tfdCBwb3N0OwoKKyAgLyogQ2Fycmll cyBmaW5hbGl6YXRpb24gY29kZSB0aGF0IGlzIHJlcXVpcmVkIHRvIGJlIGV4 ZWN1dGVkIGV4ZWN1dGlvbiBvZiB0aGUKKyAgICAgaW5uZXJtb3N0IGV4ZWN1 dGFibGUgY29uc3RydWN0LiAgKi8KKyAgc3RtdGJsb2NrX3QgZmluYWxibG9j azsKKwogICAvKiB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uICovCiAg IHRyZWUgZXhwcjsKCkBAIC01NSw3ICs1OSw3IEBAIHR5cGVkZWYgc3RydWN0 IGdmY19zZQoKICAgLyogV2hldGhlciBleHByIGlzIGEgcmVmZXJlbmNlIHRv IGFuIHVubGltaXRlZCBwb2x5bW9ycGhpYyBvYmplY3QuICAqLwogICB1bnNp Z25lZCB1bmxpbWl0ZWRfcG9seW1vcnBoaWM6MTsKLQorCiAgIC8qIElmIHNl dCBnZmNfY29udl92YXJpYWJsZSB3aWxsIHJldHVybiBhbiBleHByZXNzaW9u IGZvciB0aGUgYXJyYXkKICAgICAgZGVzY3JpcHRvci4gV2hlbiBzZXQsIHdh bnRfcG9pbnRlciBzaG91bGQgYWxzbyBiZSBzZXQuCiAgICAgIElmIG5vdCBz ZXQgc2NhbGFyaXppbmcgdmFyaWFibGVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQu ICAqLwpAQCAtNTUxLDYgKzU1NSw5IEBAIHZvaWQgZ2ZjX2NvbnZfc3VicmVm X2FycmF5X2FyZyAoZ2ZjX3NlICosIGdmY19leHByICosIGludCwgc3ltX2lu dGVudCwgYm9vbCwKIAkJCQlnZmNfc3ltYm9sICpzeW0gPSBOVUxMLAogCQkJ CWJvb2wgY2hlY2tfY29udGlndW91cyA9IGZhbHNlKTsKCit2b2lkIGdmY19m aW5hbGl6ZV9mdW5jdGlvbl9yZXN1bHQgKGdmY19zZSAqLCBnZmNfc3ltYm9s ICosCisJCQkJICBzeW1ib2xfYXR0cmlidXRlLCBpbnQpOworCiB2b2lkIGdm Y19jb252X2lzX2NvbnRpZ3VvdXNfZXhwciAoZ2ZjX3NlICosIGdmY19leHBy ICopOwoKIC8qIEdlbmVyYXRlIGNvZGUgZm9yIGEgc2NhbGFyIGFzc2lnbm1l bnQuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9hbGxvY2F0ZV93aXRoX3NvdXJjZV8yNS5mOTAgYi9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzI1LmY5MAppbmRl eCA5MmRjNTA3NTZkNC4uZGUyMGExNDc4NDIgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUu ZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYWxsb2NhdGVf d2l0aF9zb3VyY2VfMjUuZjkwCkBAIC02OCw0ICs2OCw0IEBAIGNvbnRhaW5z CiAgIGVuZCBmdW5jdGlvbiBmdW5jX2Zvb19hCgogZW5kIHByb2dyYW0gc2lt cGxlX2xlYWsKLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJcPl9maW5hbCIgNiAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIlw+X2ZpbmFsIiA0ICJvcmlnaW5hbCIg fSB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3Vu bGltaXRlZF9wb2x5bW9ycGhpY184LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzguZjkwCmluZGV4IDQ2 YjlhOWY2NTE4Li43YjI3ZGRiMmUzYiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy91bmxpbWl0ZWRfcG9seW1vcnBoaWNfOC5mOTAK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy91bmxpbWl0ZWRfcG9s eW1vcnBoaWNfOC5mOTAKQEAgLTE1LDUgKzE1LDUgQEAgY29udGFpbnMKICAg ZW5kCiBlbmQKCi0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAiZm9vLjAueC5fZGF0YSA9IDBCOyIgMSAib3JpZ2luYWwiIH0gfQotISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvby4wLnguX3Zw dHIgPSAuKiAmX192dGFiX19TVEFSOyIgMSAib3JpZ2luYWwiIH0gfQorISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImZvby4xLnguX2Rh dGEgPSAwQjsiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJmb28uMS54Ll92cHRyID0gLiogJl9fdnRh Yl9fU1RBUjsiIDEgIm9yaWdpbmFsIiB9IH0K --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_39.f90" Content-Disposition: attachment; filename="finalize_39.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqsx2 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSNjc0NDQg aW4gd2hpY2ggdGhlIGZpbmFsaXphdGlvbiBvZiBhIHBvbHltb3JwaGljICd2 YXInCiEgd2FzIG5vdCBiZWluZyBmaW5hbGl6ZWQgYmVmb3JlIGFzc2lnbm1l bnQuIChTVE9QIDMpCiEKISBDb250cmlidXRlZCBieSBCYWxpbnQgQXJhZGkg IDxiYWxhZGlAZ21haWwuY29tPgohCm1vZHVsZSBjbGFzc2VzCiAgaW1wbGlj aXQgbm9uZQogIGludGVnZXIgOjogaXZhbHVlID0gMAogIGludGVnZXIgOjog aWNhbGwgPSAwCiAgaW50ZWdlciA6OiBmdmFsdWUgPSAwCgogIHR5cGUgOjog QmFzaWMKICAgIGludGVnZXIgOjogaWkgPSAtMQogIGNvbnRhaW5zCiAgICBw cm9jZWR1cmUgOjogYXNzaWduQmFzaWMKICAgIGdlbmVyaWMgOjogYXNzaWdu bWVudCg9KSA9PiBhc3NpZ25CYXNpYwogICAgZmluYWwgOjogZGVzdHJ1Y3RC YXNpYwogIGVuZCB0eXBlIEJhc2ljCiAgaW50ZXJmYWNlIEJhc2ljCiAgICBt b2R1bGUgcHJvY2VkdXJlIGluaXRCYXNpYwogIGVuZCBpbnRlcmZhY2UgQmFz aWMKY29udGFpbnMKICBmdW5jdGlvbiBpbml0QmFzaWMoaW5pdFZhbHVlKSBy ZXN1bHQodGhpcykKICAgIGludGVnZXIsIGludGVudChpbikgOjogaW5pdFZh bHVlCiAgICB0eXBlKEJhc2ljKSA6OiB0aGlzCiAgICB0aGlzJWlpID0gaW5p dFZhbHVlCiAgICBpY2FsbCA9IGljYWxsICsgMQogIGVuZCBmdW5jdGlvbiBp bml0QmFzaWMKICBzdWJyb3V0aW5lIGFzc2lnbkJhc2ljKHRoaXMsIG90aGVy KQogICAgY2xhc3MoQmFzaWMpLCBpbnRlbnQob3V0KSA6OiB0aGlzCiAgICB0 eXBlKEJhc2ljKSwgaW50ZW50KGluKSA6OiBvdGhlcgogICAgdGhpcyVpaSA9 IG90aGVyJWlpICsgMQogICAgaWNhbGwgPSBvdGhlciVpaQogIGVuZCBzdWJy b3V0aW5lIGFzc2lnbkJhc2ljCiAgc3Vicm91dGluZSBkZXN0cnVjdEJhc2lj KHRoaXMpCiAgICB0eXBlKEJhc2ljKSwgaW50ZW50KGlub3V0KSA6OiB0aGlz CiAgICBmdmFsdWUgPSBmdmFsdWUgKyAxCiAgICBzZWxlY3QgY2FzZSAoZnZh bHVlKQogICAgY2FzZSAoMSkKICAgICAgICBpZiAodGhpcyVpaSAvPSAtMSkg c3RvcCAxICAgICAgICAgICEgRmlyc3QgZmluYWxpemF0aW9uIGJlZm9yZSBh c3NpZ25tZW50IHRvICd2YXInCiAgICAgICAgaWYgKGljYWxsIC89IDEpIHN0 b3AgMiAgICAgICAgICAgICAhIGFuZCBiZWZvcmUgZXZhbHVhdGlvbiBvZiAn ZXhwcicuCiAgICBjYXNlKDIpCiAgICAgICAgaWYgKHRoaXMlaWkgLz0gaXZh bHVlKSBzdG9wIDMgICAgICAhIEZpbmFsaXphdGlvbiBvZiBpbnRlbnQob3V0 KSBpbiAnYXNzaWduQmFzaWMnCiAgICAgICAgaWYgKGljYWxsIC89IDQyKSBz dG9wIDQgICAgICAgICAgICAhIGFuZCBhZnRlciBldmFsdWF0aW9uIG9mICdl eHByJy4KICAgIGNhc2UoMykKICAgICAgICBpZiAodGhpcyVpaSAvPSBpdmFs dWUgKyAxKSBzdG9wIDUgICEgRmluYWxpemF0aW9uIG9mICdleHByJyAoZnVu Y3Rpb24hKSBhZnRlciBhc3NpZ25tZW50LgogICAgY2FzZSBkZWZhdWx0CiAg ICAgICAgc3RvcCA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIFRv byBtYW55IG9yIG5vIGZpbmFsaXphdGlvbnMKICAgIGVuZCBzZWxlY3QKICBl bmQgc3Vicm91dGluZSBkZXN0cnVjdEJhc2ljCmVuZCBtb2R1bGUgY2xhc3Nl cwoKbW9kdWxlIHVzYWdlCiAgdXNlIGNsYXNzZXMKICBpbXBsaWNpdCBub25l CmNvbnRhaW5zCiAgc3Vicm91dGluZSB1c2VCYXNpYygpCiAgICB0eXBlKEJh c2ljKSA6OiBiYXMKICAgIGl2YWx1ZSA9IDQyCiAgICBiYXMgPSBCYXNpYyhp dmFsdWUpCiAgZW5kIHN1YnJvdXRpbmUgdXNlQmFzaWMKZW5kIG1vZHVsZSB1 c2FnZQoKcHJvZ3JhbSB0ZXN0CiAgdXNlIHVzYWdlCiAgaW1wbGljaXQgbm9u ZQogIGNhbGwgdXNlQmFzaWMoKQogIGlmIChmdmFsdWUgLz0gMykgc3RvcCA3 ICAgICAgICAgICAgICAgICAgISAzIGZpbmFsaXphdGlvbnMgbWFuZGF0ZWQu CmVuZCBwcm9ncmFtIHRlc3QK --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_42.f90" Content-Disposition: attachment; filename="finalize_42.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqth5 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSNzE3OTgg aW4gd2hpY2ggdGhlIHJlc3VsdCBvZiAnY3JlYXRlX215dHlwZScKISB3YXMg bm90IGJlaW5nIGZpbmFsaXplZCBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0 aGUgYXNzaWdubWVudAohIHN0YXRlbWVudC4KIQohIENvbnRyaWJ1dGVkIGJ5 IEpvbmF0aGFuIEhvZ2cgIDxqaG9nZzQxQGdtYWlsLmNvbT4KIQptb2R1bGUg bXltb2QKICAgaW1wbGljaXQgbm9uZQoKICAgaW50ZWdlciA6OiBuZXh0ID0g MAoKICAgdHlwZSA6OiBteXR5cGUKICAgICAgaW50ZWdlciA6OiBpZHggPSAt MQogICBjb250YWlucwogICAgICBwcm9jZWR1cmUgOjogbXl0eXBlX2Fzc2ln bgogICAgICBnZW5lcmljIDo6IGFzc2lnbm1lbnQoPSkgPT4gbXl0eXBlX2Fz c2lnbgogICAgICBmaW5hbCA6OiBteXR5cGVfZmluYWwKICAgZW5kIHR5cGUg bXl0eXBlCgpjb250YWlucwogICBzdWJyb3V0aW5lIG15dHlwZV9hc3NpZ24o dGhpcywgb3RoZXIpCiAgICAgIGNsYXNzKG15dHlwZSksIGludGVudChpbm91 dCkgOjogdGhpcwogICAgICBjbGFzcyhteXR5cGUpLCBpbnRlbnQoaW4pIDo6 IG90aGVyCgogICAgICB0aGlzJWlkeCA9IG5leHQKICAgICAgbmV4dCA9IG5l eHQgKyAxCiAgIGVuZCBzdWJyb3V0aW5lIG15dHlwZV9hc3NpZ24KCiAgIHN1 YnJvdXRpbmUgbXl0eXBlX2ZpbmFsKHRoaXMpCiAgICAgIHR5cGUobXl0eXBl KSA6OiB0aGlzCiAgICAgIG5leHQgPSBuZXh0ICsgMQogICAgICBpZiAodGhp cyVpZHggLz0gMCkgc3RvcCAxICEgZmluYWxpemUgJ2NyZWF0ZV9tdHlwZScg cmVzdWx0CiAgIGVuZCBzdWJyb3V0aW5lIG15dHlwZV9maW5hbAoKICAgdHlw ZShteXR5cGUpIGZ1bmN0aW9uIGNyZWF0ZV9teXR5cGUoKQogICAgICBjcmVh dGVfbXl0eXBlJWlkeCA9IG5leHQKICAgICAgbmV4dCA9IG5leHQgKyAxCiAg IGVuZCBmdW5jdGlvbiBjcmVhdGVfbXl0eXBlCgplbmQgbW9kdWxlIG15bW9k Cgpwcm9ncmFtIHRlc3QKICAgdXNlIG15bW9kCiAgIGltcGxpY2l0IG5vbmUK CiAgIHR5cGUobXl0eXBlKSA6OiB4CgogICB4ID0gY3JlYXRlX215dHlwZSgp CiAgIGlmICh4JWlkeCAvPSAxKSBzdG9wIDIgICAgICAgISBEZWZpbmVkIGFz c2lnbm1lbnQgZmFpbGVkCiAgIGlmIChuZXh0IC89IDMpIHN0b3AgMyAgICAg ICAgISBVc2VkIHRvIGdpdmUgMiBiZWNhdXNlIGZpbmFsaXphdGlvbiBkaWQg bm90IG9jY3VyCmVuZCBwcm9ncmFtIHRlc3QK --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_38.f90" Content-Disposition: attachment; filename="finalize_38.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqsm1 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGZpbmFsaXphdGlvbiBvbiBpbnRy aW5zaWMgYXNzaWdubWVudCAoRjIwMTggKDcuNS42LjMpKQohIFRlc3RzIGZp eCBmb3IgUFI2NDI5MCBhcyB3ZWxsLgohCm1vZHVsZSB0ZXN0bW9kZQogIGlt cGxpY2l0IG5vbmUKCiAgdHlwZSA6OiBzaW1wbGUKICAgIGludGVnZXIgOjog aW5kCiAgY29udGFpbnMKICAgIGZpbmFsIDo6IGRlc3RydWN0b3IxLCBkZXN0 cnVjdG9yMgogIGVuZCB0eXBlIHNpbXBsZQoKICB0eXBlLCBleHRlbmRzKHNp bXBsZSkgOjogY29tcGxpY2F0ZWQKICAgIHJlYWwgOjogcmluZAogIGNvbnRh aW5zCiAgICBmaW5hbCA6OiBkZXN0cnVjdG9yMywgZGVzdHJ1Y3RvcjQKICBl bmQgdHlwZSBjb21wbGljYXRlZAoKICBpbnRlZ2VyIDo6IGNoZWNrX3NjYWxh cgogIGludGVnZXIgOjogY2hlY2tfYXJyYXkoNCkKICByZWFsIDo6IGNoZWNr X3JlYWwKICByZWFsIDo6IGNoZWNrX3JhcnJheSg0KQogIGludGVnZXIgOjog ZmluYWxfY291bnQgPSAwCgpjb250YWlucwoKICBzdWJyb3V0aW5lIGRlc3Ry dWN0b3IxKHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91dCkg Ojogc2VsZgogICAgY2hlY2tfc2NhbGFyID0gc2VsZiVpbmQKICAgIGNoZWNr X2FycmF5ID0gMAogICAgZmluYWxfY291bnQgPSBmaW5hbF9jb3VudCArIDEK ICBlbmQgc3Vicm91dGluZSBkZXN0cnVjdG9yMQoKICBzdWJyb3V0aW5lIGRl c3RydWN0b3IyKHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91 dCkgOjogc2VsZig6KQogICAgY2hlY2tfc2NhbGFyID0gMAogICAgY2hlY2tf YXJyYXkoMTpzaXplKHNlbGYsIDEpKSA9IHNlbGYlaW5kCiAgICBmaW5hbF9j b3VudCA9IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJyb3V0aW5lIGRlc3Ry dWN0b3IyCgogIHN1YnJvdXRpbmUgZGVzdHJ1Y3RvcjMoc2VsZikKICAgIHR5 cGUoY29tcGxpY2F0ZWQpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYKICAgIGNo ZWNrX3JlYWwgPSBzZWxmJXJpbmQKICAgIGNoZWNrX2FycmF5ID0gMC4wCiAg ICBmaW5hbF9jb3VudCA9IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJyb3V0 aW5lIGRlc3RydWN0b3IzCgogIHN1YnJvdXRpbmUgZGVzdHJ1Y3RvcjQoc2Vs ZikKICAgIHR5cGUoY29tcGxpY2F0ZWQpLCBpbnRlbnQoaW5vdXQpIDo6IHNl bGYoOikKICAgIGNoZWNrX3JlYWwgPSAwLjAKICAgIGNoZWNrX3JhcnJheSgx OnNpemUoc2VsZiwgMSkpID0gc2VsZiVyaW5kCiAgICBmaW5hbF9jb3VudCA9 IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJyb3V0aW5lIGRlc3RydWN0b3I0 CgogIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMShpbmQpIHJlc3VsdChyZXMpCiAg ICBjbGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiByZXMKICAgIGludGVn ZXIsIGludGVudChpbikgOjogaW5kCiAgICBhbGxvY2F0ZSAocmVzLCBzb3Vy Y2UgPSBzaW1wbGUgKGluZCkpCiAgZW5kIGZ1bmN0aW9uIGNvbnN0cnVjdG9y MQoKICBmdW5jdGlvbiBjb25zdHJ1Y3RvcjIoaW5kLCByaW5kKSByZXN1bHQo cmVzKQogICAgY2xhc3Moc2ltcGxlKSwgYWxsb2NhdGFibGUgOjogcmVzKDop CiAgICBpbnRlZ2VyLCBpbnRlbnQoaW4pIDo6IGluZCg6KQogICAgcmVhbCwg aW50ZW50KGluKSwgb3B0aW9uYWwgOjogcmluZCg6KQogICAgdHlwZShjb21w bGljYXRlZCksIGFsbG9jYXRhYmxlIDo6IHNyYyg6KQogICAgaW50ZWdlciA6 OiBzegogICAgaW50ZWdlciA6OiBpCiAgICBpZiAocHJlc2VudCAocmluZCkp IHRoZW4KICAgICAgc3ogPSBtaW4gKHNpemUgKGluZCwgMSksIHNpemUgKHJp bmQsIDEpKQogICAgICBzcmMgID0gWyhjb21wbGljYXRlZCAoaW5kKGkpLCBy aW5kKGkpKSwgaSA9IDEsIHN6KV0gICEgeyBkZy13YXJuaW5nICJoYXMgYmVl biBmaW5hbGl6ZWQiIH0KICAgICAgYWxsb2NhdGUgKHJlcywgc291cmNlID0g c3JjKQogICAgZWxzZQogICAgICBzeiA9IHNpemUgKGluZCwgMSkKICAgICAg YWxsb2NhdGUgKHJlcywgc291cmNlID0gWyhzaW1wbGUgKGluZChpKSksIGkg PSAxLCBzeildKQogICAgZW5kIGlmCiAgZW5kIGZ1bmN0aW9uIGNvbnN0cnVj dG9yMgoKICBzdWJyb3V0aW5lIHRlc3QgKGNudCwgc2NhbGFyLCBhcnJheSwg b2ZmLCByaW5kLCByYXJyYXkpCiAgICBpbnRlZ2VyIDo6IGNudAogICAgaW50 ZWdlciA6OiBzY2FsYXIKICAgIGludGVnZXIgOjogYXJyYXkoOikKICAgIGlu dGVnZXIgOjogb2ZmCiAgICByZWFsLCBvcHRpb25hbCA6OiByaW5kCiAgICBy ZWFsLCBvcHRpb25hbCA6OiByYXJyYXkoOikKICAgIGlmIChmaW5hbF9jb3Vu dCAubmUuIGNudCkgdGhlbgogICAgICAgIHN0b3AgMSArIG9mZgogICAgZW5k aWYKICAgIGlmIChjaGVja19zY2FsYXIgLm5lLiBzY2FsYXIpIHRoZW4KICAg ICAgICBzdG9wIDIgKyBvZmYKICAgIGVuZGlmCiAgICBpZiAoYW55IChjaGVj a19hcnJheSgxOnNpemUgKGFycmF5LCAxKSkgLm5lLiBhcnJheSkpIHRoZW4K ICAgICAgICBzdG9wIDMgKyBvZmYKICAgIGVuZGlmCiAgICBpZiAocHJlc2Vu dCAocmluZCkpIHRoZW4KICAgICAgICBzdG9wIDQgKyBvZmYKICAgIGVuZCBp ZgogICAgaWYgKHByZXNlbnQgKHJhcnJheSkpIHRoZW4KICAgICAgaWYgKGFu eSAoY2hlY2tfcmFycmF5KDE6c2l6ZSAocmFycmF5LCAxKSkgLm5lLiByYXJy YXkpKSB0aGVuCiAgICAgICAgc3RvcCA1ICsgb2ZmCiAgICAgIGVuZGlmCiAg ICBlbmQgaWYKICAgIGZpbmFsX2NvdW50ID0gMAogIGVuZCBzdWJyb3V0aW5l IHRlc3QKZW5kIG1vZHVsZSB0ZXN0bW9kZQoKcHJvZ3JhbSB0ZXN0X2ZpbmFs CiAgdXNlIHRlc3Rtb2RlCiAgaW1wbGljaXQgbm9uZQoKICB0eXBlKHNpbXBs ZSksIGFsbG9jYXRhYmxlIDo6IE15VHlwZSwgTXlUeXBlMgogIHR5cGUoc2lt cGxlKSwgYWxsb2NhdGFibGUgOjogTXlUeXBlQXJyYXkoOikKICB0eXBlKHNp bXBsZSkgOjogVGh5VHlwZSA9IHNpbXBsZSgyMSksIFRoeVR5cGUyID0gc2lt cGxlKDIyKQogIGNsYXNzKHNpbXBsZSksIGFsbG9jYXRhYmxlIDo6IE15Q2xh c3MKICBjbGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiBNeUNsYXNzQXJy YXkoOikKCiEgKioqKioqKioqKioqKioqKioqKioqKioqCiEgRGVyaXZlZCB0 eXBlIGFzc2lnbm1lbnRzCiEgKioqKioqKioqKioqKioqKioqKioqKioqCgoh IFRoZSBvcmlnaW5hbCBQUiAtIG5vIGZpbmFsaXphdGlvbiBvZiAndmFyJyBi ZWZvcmUgKHJlKWFsbG9jYXRpb24KISBiZWNhdXNlIGl0IGlzIGRlYWxsb2Nh dGVkIG9uIHNjb3BlIGVudHJ5IChwYXJhIDEgb2YgRjIwMTggNy41LjYuMy4p CiAgTXlUeXBlID0gVGh5VHlwZQogIGNhbGwgdGVzdCgwLCAwLCBbMCwwXSwg MCkKCiAgaWYgKC5ub3QuIGFsbG9jYXRlZChNeVR5cGUpKSBhbGxvY2F0ZShN eVR5cGUpCiAgYWxsb2NhdGUoTXlUeXBlMikKICBNeVR5cGUlaW5kID0gMQog IE15VHlwZTIlaW5kID0gMgoKISBUaGlzIHNob3VsZCByZXN1bHQgaW4gYSBm aW5hbCBjYWxsIHdpdGggc2VsZiA9IHNpbXBsZSgxKSAocGFyYSAxIG9mIEYy MDE4IDcuNS42LjMuKS4KICBNeVR5cGUgPSBNeVR5cGUyCiAgY2FsbCB0ZXN0 KDEsIDEsIFswLDBdLCAxMCkKCiAgYWxsb2NhdGUoTXlUeXBlQXJyYXkoMikp CiAgTXlUeXBlQXJyYXklaW5kID0gWzQyLCA0M10KISBUaGlzIHNob3VsZCBy ZXN1bHQgaW4gYSBmaW5hbCBjYWxsIHdpdGggc2VsZiA9IFtzaW1wbGUoNDIp LHNpbXBsZSg0MyldLAohIGZvbGxvd2VkIGJ5IHRoZSBmaW5hbGl6YXRpb24g b2YgdGhlIGFycmF5IGNvbnN0cnVjdG9yID0gc2VsZiA9IFtzaW1wbGUoMjEp LHNpbXBsZSgyMildLgogIE15VHlwZUFycmF5ID0gW1RoeVR5cGUsIFRoeVR5 cGUyXSAhIHsgZGctd2FybmluZyAiaGFzIGJlZW4gZmluYWxpemVkIiB9CiAg Y2FsbCB0ZXN0KDIsIDAsIFsyMSwyMl0sIDIwKQoKISBUaGlzIHNob3VsZCBy ZXN1bHQgaW4gYSBmaW5hbCBjYWxsIHNlbGYgPSBpbml0aWFsaXphdGlvbiA9 IHNpbXBsZSgyMikuCiEgKHdpdGggLXN0ZD1mMjAwMy84OiBmb2xsb3dlZCBi eSBvbmUgd2l0aCBmb3IgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcikKICBU aHlUeXBlMiA9IHNpbXBsZSg5OSkKICBjYWxsIHRlc3QoMSwgMjIsIFswLDBd LCAzMCkKCiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2FsbCBm b3IgJ3Zhcicgd2l0aCBzZWxmID0gc2ltcGxlKDIxKS4KICBUaHlUeXBlID0g VGh5VHlwZTIKICBjYWxsIHRlc3QoMSwgMjEsIFswLDBdLCA0MCkKCiEgVGhp cyBzaG91bGQgcmVzdWx0IGluIHR3byBmaW5hbCBjYWxsczsgdGhlIGxhc3Qg aXMgZm9yIE15dHlwZTIgPSBzaW1wbGUoMikuCiAgZGVhbGxvY2F0ZSAoTXlU eXBlLCBNeVR5cGUyKQogIGNhbGwgdGVzdCgyLCAyLCBbMCwwXSwgNTApCgoh IFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBvbmUgZmluYWwgY2FsbDsgTXlUeXBl QXJyYXkgPSBbc2ltcGxlKDIxKSxzaW1wbGUoMjIpXS4KICBkZWFsbG9jYXRl IChNeVR5cGVBcnJheSkKICBjYWxsIHRlc3QoMSwgMCwgWzIxLDIyXSwgNjAp CgohIFRoZSBsaHMgaXMgZmluYWxpemVkIGJlZm9yZSBhc3NpZ25tZW50Lgoh IFRoZSBmdW5jdGlvbiByZXN1bHQgaXMgZmluYWxpemVkIGFmdGVyIHRoZSBh c3NpZ25tZW50LgohIE5BR0ZPUiBkb2Vzbid0IGZpbmFsaXplIHRoZSBmdW5j dGlvbiByZXN1bHQuCiAgYWxsb2NhdGUgKE15VHlwZSwgc291cmNlID0gc2lt cGxlICgxMSkpCiAgTXlUeXBlID0gY29uc3RydWN0b3IxICg5OSkKICBjYWxs IHRlc3QoMiwgOTksIFswLDBdLCA3MCkKICBkZWFsbG9jYXRlIChNeVR5cGUp CiEgKioqKioqKioqKioqKioqKioKISBDbGFzcyBhc3NpZ25tZW50cwohICoq KioqKioqKioqKioqKioqCgogIGZpbmFsX2NvdW50ID0gMAoKISBUaGlzIHNo b3VsZCByZXN1bHQgaW4gYSBmaW5hbCBjYWxsIGZvciBNeUNsYXNzLCB3aGlj aCBpcyBzaW1wbGUoMykgKGFuZCB0aGVuCiEgd2l0aCAtc3RkPWYyMDAzLzgs IHRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igd2l0aCB2YWx1ZSBzaW1sZSg0 KSkuCiAgYWxsb2NhdGUgKE15Q2xhc3MsIHNvdXJjZSA9IHNpbXBsZSAoMykp CiAgTXlDbGFzcyA9IHNpbXBsZSAoNCkKICBjYWxsIHRlc3QoMSwgMywgWzAs MF0sIDEwMCkKCiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2Fs bCB3aXRoIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBzaW1wbGUoNCkuCiAgZGVh bGxvY2F0ZSAoTXlDbGFzcykKICBjYWxsIHRlc3QoMSwgNCwgWzAsMF0sIDEx MCkKCgogIGFsbG9jYXRlIChNeUNsYXNzQXJyYXksIHNvdXJjZSA9IFtzaW1w bGUgKDUpLCBzaW1wbGUgKDYpXSkKISBNYWtlIHN1cmUgdGhhdCB0aGVyZSBp cyBubyBmaW5hbCBjYWxsIHNpbmNlIE15Q2xhc3NBcnJheSBpcyBub3QgYWxs b2NhdGVkLgogIGNhbGwgdGVzdCgwLCA0LCBbMCwwXSwgMTIwKQoKICBNeUNs YXNzQXJyYXkgPSBbc2ltcGxlICg3KSwgc2ltcGxlICg4KV0gISB7IGRnLXdh cm5pbmcgImhhcyBiZWVuIGZpbmFsaXplZCIgfQohIFRoZSBmaXJzdCBmaW5h bCBjYWxsIHNob3VsZCBmaW5hbGl6ZSBNeUNsYXNzQXJyYXkgYW5kIHRoZSBz ZWNvbmQgc2hvdWxkIHJldHVybgohIHRoZSB2YWx1ZSBvZiB0aGUgYXJyYXkg Y29uc3RydWN0b3IuCiEgTkFHRk9SIGRvZXMgc29tZXRoaW5nIHN0cmFuZ2Ug aGVyZTogbWFrZXMgYSBzY2FsYXIgZmluYWwgY2FsbCB3aXRoIHZhbHVlCiEg c2ltcGxlKDUpLgogIGNhbGwgdGVzdCgyLCAwLCBbNyw4XSwgMTMwKQoKISBU aGlzIHNob3VsZCByZXN1bHQgaW4gYSBmaW5hbCBjYWxsIHdpdGggdGhlIGFz c2lnbmVkIHZhbHVlLgogIGRlYWxsb2NhdGUgKE15Q2xhc3NBcnJheSkKICBj YWxsIHRlc3QoMSwgMCwgWzcsOF0sIDE0MCkKCiEgVGhpcyBzaG91bGQgcHJv ZHVjZSBubyBmaW5hbCBjYWxscyBzaW5jZSBNeUNsYXNzQXJyYXkgd2FzIGRl YWxsb2NhdGVkLgogIGFsbG9jYXRlIChNeUNsYXNzQXJyYXksIHNvdXJjZSA9 IFtjb21wbGljYXRlZCgxLCAyLjApLGNvbXBsaWNhdGVkKDMsIDQuMCldKQoK ISBUaGlzIHNob3VsZCBwcm9kdWNlIGNhbGxzIHRvIGRlc3RydWN0b3I0IHRo ZW4gZGVzdHJ1Y3RvcjIuCiAgZGVhbGxvY2F0ZSAoTXlDbGFzc0FycmF5KQoK ISBGMjAxOCA3LjUuNi4zOiAiSWYgdGhlIGVudGl0eSBpcyBvZiBleHRlbmRl ZCB0eXBlIGFuZCB0aGUgcGFyZW50IHR5cGUgaXMKISBmaW5hbGl6YWJsZSwg dGhlIHBhcmVudCBjb21wb25lbnQgaXMgZmluYWxpemVkLgogIGNhbGwgdGVz dCgyLCAwLCBbMSwgM10sIDE1MCwgcmFycmF5ID0gWzIuMCwgNC4wXSkKCiEg VGhpcyBwcm9kdWNlcyAyIGZpbmFsIGNhbGxzIGluIHR1cm4gZm9yICdzcmMn IGFzIGl0IGdvZXMgb3V0IG9mIHNjb3BlLCBmb3IKISBNeUNsYXNzQXJyYXkg YmVmb3JlIGl0IGlzIGFzc2lnbmVkIHRvIGFuZCB0aGUgcmVzdWx0IG9mICdj b25zdHJ1Y3RvcjInIGFmdGVyCiEgdGhlIGFzc2lnbm1lbnQsIGZvciB3aGlj aCB0aGUgcmVzdWx0IHNob3VsZCBiZSBzaG91bGQgYmUgWzEwLDIwXSAmIFsx MC4wLDIwLjBdLgogIE15Q2xhc3NBcnJheSA9IGNvbnN0cnVjdG9yMiAoWzEw LDIwXSwgWzEwLjAsMjAuMF0pCiAgY2FsbCB0ZXN0KDYsIDAsIFsxMCwyMF0s IDE2MCwgcmFycmF5ID0gWzEwLjAsMjAuMF0pCgohIFRoaXMgcHJvZHVjZXMg dHdvIGZpbmFsIGNhbGxzIHdpdGggdGhlIGNvbnRlbnRzIG9mICdNeUNsYXNz QXJyYXkuIGFuZCBpdHMKISBwYXJlbnQgY29tcG9uZW50LgogIGRlYWxsb2Nh dGUgKE15Q2xhc3NBcnJheSkKICBjYWxsIHRlc3QoMiwgMCwgWzEwLCAyMF0s IDE3MCwgcmFycmF5ID0gWzEwLjAsMjAuMF0pCgohIENsZWFuIHVwIGZvciB2 YWxncmluZCB0ZXN0aW5nCiAgaWYgKGFsbG9jYXRlZCAoTXlUeXBlKSkgZGVh bGxvY2F0ZSAoTXlUeXBlKQogIGlmIChhbGxvY2F0ZWQgKE15VHlwZTIpKSBk ZWFsbG9jYXRlIChNeVR5cGUyKQogIGlmIChhbGxvY2F0ZWQgKE15VHlwZUFy cmF5KSkgZGVhbGxvY2F0ZSAoTXlUeXBlQXJyYXkpCiAgaWYgKGFsbG9jYXRl ZCAoTXlDbGFzcykpIGRlYWxsb2NhdGUgKE15Q2xhc3MpCmVuZCBwcm9ncmFt IHRlc3RfZmluYWwK --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_41.f90" Content-Disposition: attachment; filename="finalize_41.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqtb4 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoYXQgUFI2OTI5OCBpcyBmaXhl ZC4gVXNlZCB0byBzZWdmYXVsdCBvbiBmaW5hbGl6YXRpb24gaW4KISBzdWJy b3V0aW5lICdpbl90eXBlJy4KIQohIENvbnRyaWJ1dGVkIGJ5IE5laWwgQ2Fy bHNvbiAgPG5laWwubi5jYXJsc29uQGdtYWlsLmNvbT4KIQptb2R1bGUgc3R1 ZmZfbW9kCiAgaW1wbGljaXQgbm9uZQogIHByaXZhdGUKICBwdWJsaWMgOjog c3R1ZmZfdHlwZSwgZmluYWxfY2FsbHMKICB0eXBlIHN0dWZmX3R5cGUKICAg IHByaXZhdGUKICAgIGludGVnZXIgOjoganVuawogIGNvbnRhaW5zCiAgICBw cm9jZWR1cmUgZ2V0X2p1bmsKICAgIHByb2NlZHVyZSBzdHVmZl9jb3B5X2lu aXRpYWxpc2VyCiAgICBnZW5lcmljIDo6IGFzc2lnbm1lbnQoPSkgPT4gc3R1 ZmZfY29weV9pbml0aWFsaXNlcgogICAgZmluYWwgOjogc3R1ZmZfc2NhbGFy X2ZpbmFsaXNlciwgJgogICAgICAgICAgICAgc3R1ZmZfMWRfZmluYWxpc2Vy CiAgZW5kIHR5cGUgc3R1ZmZfdHlwZQogIGludGVnZXIgOjogZmluYWxfY2Fs bHMgPSAwCiAgaW50ZXJmYWNlIHN0dWZmX3R5cGUKICAgIHByb2NlZHVyZSBz dHVmZl9pbml0aWFsaXNlcgogIGVuZCBpbnRlcmZhY2Ugc3R1ZmZfdHlwZQpj b250YWlucwoKICBmdW5jdGlvbiBzdHVmZl9pbml0aWFsaXNlcigganVuayAp IHJlc3VsdChuZXdfc3R1ZmYpCiAgICBpbXBsaWNpdCBub25lCiAgICB0eXBl KHN0dWZmX3R5cGUpIDo6IG5ld19zdHVmZgogICAgaW50ZWdlciA6OiBqdW5r CiAgICBuZXdfc3R1ZmYlanVuayA9IGp1bmsKICBlbmQgZnVuY3Rpb24gc3R1 ZmZfaW5pdGlhbGlzZXIKCiAgc3Vicm91dGluZSBzdHVmZl9jb3B5X2luaXRp YWxpc2VyKCBkZXN0aW5hdGlvbiwgc291cmNlICkKICAgIGltcGxpY2l0IG5v bmUKICAgIGNsYXNzKHN0dWZmX3R5cGUpLCBpbnRlbnQob3V0KSA6OiBkZXN0 aW5hdGlvbgogICAgY2xhc3Moc3R1ZmZfdHlwZSksIGludGVudChpbikgIDo6 IHNvdXJjZQogICAgZGVzdGluYXRpb24lanVuayA9IHNvdXJjZSVqdW5rCiAg ZW5kIHN1YnJvdXRpbmUgc3R1ZmZfY29weV9pbml0aWFsaXNlcgoKICBzdWJy b3V0aW5lIHN0dWZmX3NjYWxhcl9maW5hbGlzZXIoIHRoaXMgKQogICAgaW1w bGljaXQgbm9uZQogICAgdHlwZShzdHVmZl90eXBlKSwgaW50ZW50KGlub3V0 KSA6OiB0aGlzCiAgICBmaW5hbF9jYWxscyA9IGZpbmFsX2NhbGxzICsgMQog IGVuZCBzdWJyb3V0aW5lIHN0dWZmX3NjYWxhcl9maW5hbGlzZXIKCiAgc3Vi cm91dGluZSBzdHVmZl8xZF9maW5hbGlzZXIoIHRoaXMgKQogICAgaW1wbGlj aXQgbm9uZQogICAgdHlwZShzdHVmZl90eXBlKSwgaW50ZW50KGlub3V0KSA6 OiB0aGlzKDopCiAgICBpbnRlZ2VyIDo6IGkKICAgIGZpbmFsX2NhbGxzID0g ZmluYWxfY2FsbHMgKyAxMDAKICBlbmQgc3Vicm91dGluZSBzdHVmZl8xZF9m aW5hbGlzZXIKCiAgZnVuY3Rpb24gZ2V0X2p1bmsoIHRoaXMgKSByZXN1bHQo anVuaykKICAgIGltcGxpY2l0IG5vbmUKICAgIGNsYXNzKHN0dWZmX3R5cGUp LCBpbnRlbnQoaW4pIDo6IHRoaXMKICAgIGludGVnZXIgOjoganVuawogICAg anVuayA9IHRoaXMlanVuawogIGVuZCBmdW5jdGlvbiBnZXRfanVuawplbmQg bW9kdWxlIHN0dWZmX21vZAoKbW9kdWxlIHRlc3RfbW9kCiAgdXNlIHN0dWZm X21vZCwgb25seSA6IHN0dWZmX3R5cGUsIGZpbmFsX2NhbGxzCiAgaW1wbGlj aXQgbm9uZQogIHByaXZhdGUKICBwdWJsaWMgOjogdGVzdF90eXBlCiAgdHlw ZSB0ZXN0X3R5cGUKICAgIHByaXZhdGUKICAgIHR5cGUoc3R1ZmZfdHlwZSkg OjogdGhpbmcKICAgIHR5cGUoc3R1ZmZfdHlwZSkgOjogdGhpbmdzKDMpCiAg Y29udGFpbnMKICAgIHByb2NlZHVyZSBnZXRfdmFsdWUKICBlbmQgdHlwZSB0 ZXN0X3R5cGUKICBpbnRlcmZhY2UgdGVzdF90eXBlCiAgICBwcm9jZWR1cmUg dGVzdF90eXBlX2luaXRpYWxpc2VyCiAgZW5kIGludGVyZmFjZSB0ZXN0X3R5 cGUKY29udGFpbnMKCiAgZnVuY3Rpb24gdGVzdF90eXBlX2luaXRpYWxpc2Vy KCkgcmVzdWx0KG5ld190ZXN0KQogICAgaW1wbGljaXQgbm9uZQogICAgdHlw ZSh0ZXN0X3R5cGUpIDo6IG5ld190ZXN0CiAgICBpbnRlZ2VyIDo6IGkgISBB dCBlbnRyeTogMSBhcnJheSBhbmQgOSBzY2FsYXJzCiAgICBuZXdfdGVzdCV0 aGluZyA9IHN0dWZmX3R5cGUoIDQgKSAhIEdpdmVzIDIgc2NhbGFyIGNhbGxz CiAgICBkbyBpID0gMSwgMwogICAgICBuZXdfdGVzdCV0aGluZ3MoaSkgPSBz dHVmZl90eXBlKCBpICkgICEgR2l2ZXMgNiBzY2FsYXIgY2FsbHMKICAgIGVu ZCBkbwogIGVuZCBmdW5jdGlvbiB0ZXN0X3R5cGVfaW5pdGlhbGlzZXIKCiAg ZnVuY3Rpb24gZ2V0X3ZhbHVlKCB0aGlzICkgcmVzdWx0KHZhbHVlKQogICAg aW1wbGljaXQgbm9uZQogICAgY2xhc3ModGVzdF90eXBlKSA6OiB0aGlzCiAg ICBpbnRlZ2VyIDo6IHZhbHVlCiAgICBpbnRlZ2VyIDo6IGkKICAgIHZhbHVl ID0gdGhpcyV0aGluZyVnZXRfanVuaygpCiAgICBkbyBpID0gMSwgMwogICAg ICB2YWx1ZSA9IHZhbHVlICsgdGhpcyV0aGluZ3MoaSklZ2V0X2p1bmsoKQog ICAgZW5kIGRvCiAgZW5kIGZ1bmN0aW9uIGdldF92YWx1ZQplbmQgbW9kdWxl IHRlc3RfbW9kCgpwcm9ncmFtIHRlc3QKICB1c2Ugc3R1ZmZfbW9kLCBvbmx5 IDogc3R1ZmZfdHlwZSwgZmluYWxfY2FsbHMKICB1c2UgdGVzdF9tb2QsICBv bmx5IDogdGVzdF90eXBlCiAgaW1wbGljaXQgbm9uZQogIGNhbGwgaGVyZSgp CiEgT25lIGFycmF5IGNhbGwgYW5kIDEgc2NhbGFyIGNhbGwgYWZ0ZXIgbGVh dmluZyBzY29wZSA9PiAxICsgOSB0b3RhbDsgTkFHRk9SIGFuZCBJRk9SVCBh Z3JlZQogIGlmIChmaW5hbF9jYWxscyAubmUuIDEwOSkgc3RvcCAxCiAgY2Fs bCBpbl90eXBlKCkKISAyMiBjYWxscyB0byBzY2FsYXIgZmluYWxpemVyIGFu ZCA1IHRvIHRoZSB2ZWN0b3IgdmVyc2lvbjsgTkFHRk9SIGFncmVlcwohIElG T1JUIGFsc28gcHJvZHVjZXMgMjEgc2NhbGFyIGNhbGxzIGJ1dCBvbmx5IDQg dmVjdG9yIGNhbGxzLgogIGlmIChmaW5hbF9jYWxscyAubmUuIDUyMSkgcHJp bnQgKiwgZmluYWxfY2FsbHMKY29udGFpbnMKCiAgc3Vicm91dGluZSBoZXJl KCkKICAgIGltcGxpY2l0IG5vbmUKICAgIHR5cGUoc3R1ZmZfdHlwZSkgOjog dGhpbmcKICAgIHR5cGUoc3R1ZmZfdHlwZSkgOjogYml0cygzKQogICAgaW50 ZWdlciA6OiBpCiAgICBpbnRlZ2VyIDo6IHRhbGx5CiAgICB0aGluZyA9IHN0 dWZmX3R5cGUoNCkgISBUd28gc2NhbGFyIGZpbmFsIGNhbGxzOyBJTlRFTlQo T1VUKSBhbmQgaW5pdGlhbGlzZXIKICAgIGRvIGkgPSAxLCAzCiAgICAgIGJp dHMoaSkgPSBzdHVmZl90eXBlKGkpICEgZGl0dG8gdGltZXMgMwogICAgZW5k IGRvCiAgICB0YWxseSA9IHRoaW5nJWdldF9qdW5rKCkKICAgIGRvIGkgPSAx LCAzCiAgICAgIHRhbGx5ID0gdGFsbHkgKyBiaXRzKGkpJWdldF9qdW5rKCkK ICAgIGVuZCBkbwogICAgaWYgKHRhbGx5IC5uZS4gMTApIHN0b3AgMyAhIDgg c2NhbGFyIGZpbmFsIGNhbGxzIGJ5IGhlcmUKICBlbmQgc3Vicm91dGluZSBo ZXJlCgogIHN1YnJvdXRpbmUgaW5fdHlwZSgpCiAgICBpbXBsaWNpdCBub25l CiAgICB0eXBlKHRlc3RfdHlwZSkgOjogdGhpbmcKICAgIHRoaW5nID0gdGVz dF90eXBlKCkgISA4IHNjYWxhciBpbiB0ZXN0X3R5cGUgKyAxIHZlY3RvciBh bmQgMSBzY2FsYXIgdG8gZmluYWxpemUgZnVuY3Rpb24gcmVzdWx0IGFuZAog ICAgICAgICAgICAgICAgICAgICAgICAhIDIgdmVjdG9ycyBhbmQgMiBzY2Fs YXJzIGZyb20gdGhlIGV4cGFuc2lvbiBvZiB0aGUgZGVmaW5lZCBhc3NpZ25t ZW50LgogICAgaWYgKHRoaW5nJWdldF92YWx1ZSgpIC5uZS4gMTApIHByaW50 ICosIHRoaW5nJWdldF92YWx1ZSgpCiAgZW5kIHN1YnJvdXRpbmUgaW5fdHlw ZQplbmQgcHJvZ3JhbSB0ZXN0Cg== --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_40.f90" Content-Disposition: attachment; filename="finalize_40.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqt43 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoYXQgUFI2NzQ3MSBpcyBmaXhl ZC4gVXNlZCBub3QgdG8gY2FsbCB0aGUgZmluYWxpemVyLgohCiEgQ29udHJp YnV0ZWQgYnkgSWFuIEhhcnZleSAgPGlhbl9oYXJ2ZXlAYmlncG9uZC5jb20+ CiEKbW9kdWxlIHRlc3RfZmluYWxfbW9kCiAgaW1wbGljaXQgbm9uZQogIHR5 cGUgOjogbXlfZmluYWwKICAgIGludGVnZXIgOjogbiA9IDEKICBjb250YWlu cwogICAgZmluYWwgOjogZGVzdHJveV9zY2FsYXIsIGRlc3Ryb3lfcmFuazFf YXJyYXkKICBlbmQgdHlwZSBteV9maW5hbAogIGludGVnZXIgOjogZmluYWxf Y2FsbHMgPSAwCmNvbnRhaW5zCiAgc3Vicm91dGluZSBkZXN0cm95X3Jhbmsx X2FycmF5KHNlbGYpCiAgICB0eXBlKG15X2ZpbmFsKSwgaW50ZW50KGlub3V0 KSA6OiBzZWxmKDopCiAgICBpZiAoc2l6ZShzZWxmKSAvPSAwKSB0aGVuCiAg ICAgIGlmIChzaXplKHNlbGYpIC89IDIpIHN0b3AgMQogICAgICBpZiAoYW55 IChzZWxmJW4gLz0gWzMsNF0pKSBzdG9wIDIKICAgIGVsc2UKICAgICAgc3Rv cCAzCiAgICBlbmQgaWYKICAgIGZpbmFsX2NhbGxzID0gZmluYWxfY2FsbHMg KyAxCiAgZW5kIHN1YnJvdXRpbmUgZGVzdHJveV9yYW5rMV9hcnJheQoKISBF bGltaW5hdGUgdGhlIHdhcm5pbmcgYWJvdXQgdGhlIGxhY2sgb2YgYSBzY2Fs YXIgZmluYWxpemVyLgogIHN1YnJvdXRpbmUgZGVzdHJveV9zY2FsYXIoc2Vs ZikKICAgIHR5cGUobXlfZmluYWwpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYK ICAgIGZpbmFsX2NhbGxzID0gZmluYWxfY2FsbHMgKyBzZWxmJW4KICBlbmQg c3Vicm91dGluZSBkZXN0cm95X3NjYWxhcgoKZW5kIG1vZHVsZSB0ZXN0X2Zp bmFsX21vZAoKcHJvZ3JhbSB0ZXN0X2ZpbmFsaXplcgogIHVzZSB0ZXN0X2Zp bmFsX21vZAogIGltcGxpY2l0IG5vbmUKICB0eXBlKG15X2ZpbmFsKSA6OiBi KDQpLCBjKDIpCgogIGIlbiA9IFsyLCAzLCA0LCA1XQogIGMlbiA9IFs2LCA3 XQogIGIoMjozKSA9IGMKICBpZiAoZmluYWxfY2FsbHMgLz0gMSkgc3RvcCA0 CmVuZCBwcm9ncmFtIHRlc3RfZmluYWxpemVyCg== --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_43.f90" Content-Disposition: attachment; filename="finalize_43.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqtn6 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSODA1MjQs IHdoZXJlIGdmb3J0cmFuIG9uIGlzc3VlZCBvbmUgZmluYWwgY2FsbAohIEZv ciAndScgZ29pbmcgb3V0IG9mIHNjb3BlLiBUd28gZnVydGhlciBjYWxsIHNo b3VsZCBiZSBlbWl0dGVkOyBvbmUKISBmb3IgdGhlIGxocyBvZiB0aGUgYXNz aWdubWVudCBpbiAncycgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGZ1bmN0aW9u CiEgcmVzdWx0LCB3aGljaCBvY2N1cnMgYWZ0ZXIgYXNzaWdubWVudC4KIQoh IENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBXb29kICA8YW5kcmV3QGZsdWlkZ3Jh dml0eS5jby51az4KIQpNT0RVTEUgbTEKICAgSU1QTElDSVQgTk9ORQogICBp bnRlZ2VyIDo6IGNvdW50ZXIgPSAwCiAgIGludGVnZXIgOjogZnZhbCA9IDAK ICAgVFlQRSB0CiAgICAgIElOVEVHRVIgOjogaQogICAgICBDT05UQUlOUwog ICAgICAgICBGSU5BTCA6OiB0X2ZpbmFsCiAgIEVORCBUWVBFIHQKICAgQ09O VEFJTlMKICAgICAgU1VCUk9VVElORSB0X2ZpbmFsKHRoaXMpCiAgICAgICAg IFRZUEUodCkgOjogdGhpcwogICAgICAgICBjb3VudGVyID0gY291bnRlciAr IDEKICAgICAgRU5EIFNVQlJPVVRJTkUKICAgICAgRlVOQ1RJT04gbmV3X3Qo KQogICAgICAgICBUWVBFKHQpIDo6IG5ld190CiAgICAgICAgIG5ld190JWkg PSAxCiAgICAgICAgIGZ2YWwgPSBuZXdfdCVpCiAgICAgICAgIGlmIChjb3Vu dGVyIC89IDApIHN0b3AgMSAgICEgRmluYWxpemF0aW9uIG9mICd2YXInIGFm dGVyIGV2YWx1YXRpb24gb2YgJ2V4cHInCiAgICAgIEVORCBGVU5DVElPTiBu ZXdfdAogICAgICBTVUJST1VUSU5FIHMKICAgICAgICAgVFlQRSh0KSA6OiB1 CiAgICAgICAgIHUgPSBuZXdfdCgpCiAgICAgICAgIGlmIChjb3VudGVyIC89 IDIpIHN0b3AgMiAgICEgRmluYWxpemF0aW9uIG9mICd2YXInIGFuZCAnZXhw cicKICAgICAgRU5EIFNVQlJPVVRJTkUgcwpFTkQgTU9EVUxFIG0xClBST0dS QU0gcHJvZwogICBVU0UgbTEKICAgSU1QTElDSVQgTk9ORQogICBDQUxMIHMK ICAgaWYgKGNvdW50ZXIgLz0gMykgc3RvcCAzICAgICAgICAgISBGaW5hbGl6 YXRpb24gb2YgJ3UnIGluICdzJwpFTkQgUFJPR1JBTSBwcm9nCg== --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_44.f90" Content-Disposition: attachment; filename="finalize_44.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqtt7 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIGFsbCB0aHJl ZSB2YXJpYW50cyBvZiBQUjgyOTk2LCB3aGljaCB1c2VkIHRvCiEgc2VnZmF1 bHQgaW4gdGhlIG9yaWdpbmFsIHRlc3RjYXNlIGFuZCBJQ0UgaW4gdGhlIHRl c3RjYXNlcyBvZgohIGNvbW1lbnRzIDEgYW5kIDIuCiEKISBDb250cmlidXRl ZCBieSBOZWlsIENhcmxzb24gIDxuZWlsLm4uY2FybHNvbkBnbWFpbC5jb20+ CiEKbW9kdWxlIG1vZDAKICBpbnRlZ2VyIDo6IGZpbmFsX2NvdW50X2ZvbyA9 IDAKICBpbnRlZ2VyIDo6IGZpbmFsX2NvdW50X2JhciA9IDAKZW5kIG1vZHVs ZSBtb2QwCiEKISBUaGlzIGlzIHRoZSBvcmlnaW5hbCB0ZXN0Y2FzZSwgd2l0 aCBhIGZpbmFsIHJvdXRpbmUgJ2ZvbycgYnV0CiEgYnV0IG5vdCBpbiB0aGUg Y29udGFpbmVyIHR5cGUgJ2JhcjEnLgohCm1vZHVsZSBtb2QxCiAgdXNlIG1v ZDAKICBwcml2YXRlIGZvbywgZm9vX2Rlc3Ryb3kKICB0eXBlIGZvbwogICAg aW50ZWdlciwgcG9pbnRlciA6OiBmKDopID0+IG51bGwoKQogIGNvbnRhaW5z CiAgICBmaW5hbCA6OiBmb29fZGVzdHJveQogIGVuZCB0eXBlCiAgdHlwZSBi YXIxCiAgICB0eXBlKGZvbykgOjogYigyKQogIGVuZCB0eXBlCmNvbnRhaW5z CiAgaW1wdXJlIGVsZW1lbnRhbCBzdWJyb3V0aW5lIGZvb19kZXN0cm95KHRo aXMpCiAgICB0eXBlKGZvbyksIGludGVudChpbm91dCkgOjogdGhpcwogICAg ZmluYWxfY291bnRfZm9vID0gZmluYWxfY291bnRfZm9vICsgMQogICAgaWYg KGFzc29jaWF0ZWQodGhpcyVmKSkgZGVhbGxvY2F0ZSh0aGlzJWYpCiAgZW5k IHN1YnJvdXRpbmUKZW5kIG1vZHVsZSBtb2QxCiEKISBDb21tZW50IDEgd2Fz IHRoZSBzYW1lIGFzIG9yaWdpbmFsLCBleGNlcHQgdGhhdCB0aGUKISAnZm9v JyBmaW5hbGl6ZXIgaXMgZWxlbWVudGFsIGFuZCBhICdiYXInIGZpbmFsaXpl ciBpcyBhZGRlZC4uCiEKbW9kdWxlIG1vZDIKICB1c2UgbW9kMAogIHByaXZh dGUgZm9vLCBmb29fZGVzdHJveSwgYmFyX2Rlc3Ryb3kKICB0eXBlIGZvbwog ICAgaW50ZWdlciwgcG9pbnRlciA6OiBmKDopID0+IG51bGwoKQogIGNvbnRh aW5zCiAgICBmaW5hbCA6OiBmb29fZGVzdHJveQogIGVuZCB0eXBlCiAgdHlw ZSBiYXIyCiAgICB0eXBlKGZvbykgOjogYigyKQogIGNvbnRhaW5zCiAgICBm aW5hbCA6OiBiYXJfZGVzdHJveQogIGVuZCB0eXBlCmNvbnRhaW5zCiAgaW1w dXJlIGVsZW1lbnRhbCBzdWJyb3V0aW5lIGZvb19kZXN0cm95KHRoaXMpCiAg ICB0eXBlKGZvbyksIGludGVudChpbm91dCkgOjogdGhpcwogICAgZmluYWxf Y291bnRfZm9vID0gZmluYWxfY291bnRfZm9vICsgMQogICAgaWYgKGFzc29j aWF0ZWQodGhpcyVmKSkgZGVhbGxvY2F0ZSh0aGlzJWYpCiAgZW5kIHN1YnJv dXRpbmUKICBzdWJyb3V0aW5lIGJhcl9kZXN0cm95KHRoaXMpCiAgICB0eXBl KGJhcjIpLCBpbnRlbnQoaW5vdXQpIDo6IHRoaXMKICAgIGZpbmFsX2NvdW50 X2JhciA9IGZpbmFsX2NvdW50X2JhciArIDEKICAgIGNhbGwgZm9vX2Rlc3Ry b3kodGhpcyViKQogIGVuZCBzdWJyb3V0aW5lCmVuZCBtb2R1bGUgbW9kMgoh CiEgQ29tbWVudCAyIHdhcyB0aGUgc2FtZSBhcyBjb21tZW50IDEsIGV4Y2Vw dCB0aGF0IHRoZSAnZm9vJwohIGZpbmFsaXplciBpcyBubyBsb25nZXIgZWxl bWVudGFsLgohCm1vZHVsZSBtb2QzCiAgdXNlIG1vZDAKICBwcml2YXRlIGZv bywgZm9vX2Rlc3Ryb3ksIGJhcl9kZXN0cm95CiAgdHlwZSBmb28KICAgIGlu dGVnZXIsIHBvaW50ZXIgOjogZig6KSA9PiBudWxsKCkKICBjb250YWlucwog ICAgZmluYWwgOjogZm9vX2Rlc3Ryb3kKICBlbmQgdHlwZQogIHR5cGUgYmFy MwogICAgdHlwZShmb28pIDo6IGIoMikKICBjb250YWlucwogICAgZmluYWwg OjogYmFyX2Rlc3Ryb3kKICBlbmQgdHlwZQpjb250YWlucwogIHN1YnJvdXRp bmUgZm9vX2Rlc3Ryb3kodGhpcykKICAgIHR5cGUoZm9vKSwgaW50ZW50KGlu b3V0KSA6OiB0aGlzCiAgICBmaW5hbF9jb3VudF9mb28gPSBmaW5hbF9jb3Vu dF9mb28gKyAxCiAgICBpZiAoYXNzb2NpYXRlZCh0aGlzJWYpKSBkZWFsbG9j YXRlKHRoaXMlZikKICBlbmQgc3Vicm91dGluZQogIHN1YnJvdXRpbmUgYmFy X2Rlc3Ryb3kodGhpcykKICAgIHR5cGUoYmFyMyksIGludGVudChpbm91dCkg OjogdGhpcwogICAgZmluYWxfY291bnRfYmFyID0gZmluYWxfY291bnRfYmFy ICsgMQogICAgZG8gaiA9IDEsIHNpemUodGhpcyViKQogICAgICBjYWxsIGZv b19kZXN0cm95KHRoaXMlYihqKSkKICAgIGVuZCBkbwogIGVuZCBzdWJyb3V0 aW5lCmVuZCBtb2R1bGUgbW9kMwoKcHJvZ3JhbSBtYWluCiAgdXNlIG1vZDAK ICB1c2UgbW9kMQogIHVzZSBtb2QyCiAgdXNlIG1vZDMKICB0eXBlKGJhcjEp IDo6IHgKICB0eXBlKGJhcjIpIDo6IHkKICB0eXBlKGJhcjMpIDo6IHoKICBj YWxsIHN1YjEoeCkKICBpZiAoZmluYWxfY291bnRfZm9vIC89IDIpIHN0b3Ag MQogIGlmIChmaW5hbF9jb3VudF9iYXIgLz0gMCkgc3RvcCAyCiAgY2FsbCBz dWIyKHkpCiAgaWYgKGZpbmFsX2NvdW50X2ZvbyAvPSA2KSBzdG9wIDMKICBp ZiAoZmluYWxfY291bnRfYmFyIC89IDEpIHN0b3AgNAogIGNhbGwgc3ViMyh6 KQogIGlmIChmaW5hbF9jb3VudF9mb28gLz0gOCkgc3RvcCA1CiAgaWYgKGZp bmFsX2NvdW50X2JhciAvPSAyKSBzdG9wIDYKY29udGFpbnMKICBzdWJyb3V0 aW5lIHN1YjEoeCkKICAgIHR5cGUoYmFyMSksIGludGVudChvdXQpIDo6IHgK ICBlbmQgc3Vicm91dGluZQogIHN1YnJvdXRpbmUgc3ViMih4KQogICAgdHlw ZShiYXIyKSwgaW50ZW50KG91dCkgOjogeAogIGVuZCBzdWJyb3V0aW5lCiAg c3Vicm91dGluZSBzdWIzKHgpCiAgICB0eXBlKGJhcjMpLCBpbnRlbnQob3V0 KSA6OiB4CiAgZW5kIHN1YnJvdXRpbmUKZW5kIHByb2dyYW0K --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_46.f90" Content-Disposition: attachment; filename="finalize_46.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqu49 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIHByODg3MzUu CiEKISBDb250cmlidXRlZCBieSBNYXJ0aW4gU3RlaW4gIDxtc2NmZEBnbXgu bmV0PgohCiEgTk9URTogSXMgaW5jb3JyZWN0bHkgZmluYWxpemluZyAndmFy JyBpbiBhIGRlZmluZWQgYXNzaWdubWVudCAoSU1ITykgdG8gY29tcGx5IHdp dGgKISBiZWhhdmlvdXIgb2YgYW5vdGhlciBicmFuZC4gV2lsbCBjb25zdWx0 IHdpdGggdmVuZG9yIHRvIGNvbWUgdG8gYW4gYWdyZWVtZW50IGFzIHRvCiEg dGhlIGNvcnJlY3QgaW50ZXJwcmV0YXRpb24uCiEgRjIwMTggNy41LjYuMyBw YXJhZ3JhcGggMSBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIG9ubHkgJ3Zhcicg aW4gaW50cmluc2ljIGFzc2lnbm1lbnRzCiEgdGhhdCBhcmUgZmluYWxpemVk LiBUaGUgb25seSBmaW5hbGl6YXRpb24gdGhhdCBvY2N1cnMgaW4gdGhlIHR3 byBhc3NpZ25tZW50cywgYT1iLAohIGlzIHRvIHRoZSBJTlRFTlQoT1VUKSBk dW1teSBpbiAnc2V0Jy4KCm1vZHVsZSBtb2QKICBpbXBsaWNpdCBub25lCiAg dHlwZSwgcHVibGljIDo6IHQKICAgICBpbnRlZ2VyLCBwb2ludGVyIDo6IGkg PT4gTlVMTCAoKQogICAgIGNoYXJhY3RlciA6OiBteW5hbWUgPSAneicKICAg ICBjaGFyYWN0ZXIgOjogYWxsb2MgPSAnbicKICBjb250YWlucwogICAgIHBy b2NlZHVyZSwgcHVibGljIDo6IHNldAogICAgIGdlbmVyaWMsIHB1YmxpYyA6 OiBhc3NpZ25tZW50KD0pID0+IHNldAogICAgIGZpbmFsIDo6IGZpbmFsaXNl CiAgZW5kIHR5cGUgdAogIGludGVnZXIsIHB1YmxpYyA6OiBhc3NvY19pbl9m aW5hbCA9IDAKICBpbnRlZ2VyLCBwdWJsaWMgOjogY2FsbHNfdG9fZmluYWwg PSAwCiAgY2hhcmFjdGVyLCBwdWJsaWMgOjogbXluYW1lMSwgbXluYW1lMgoK Y29udGFpbnMKCiAgc3Vicm91dGluZSBzZXQoc2VsZiwgeCkKICAgICBjbGFz cyh0KSwgaW50ZW50KG91dCkgOjogc2VsZgogICAgIGNsYXNzKHQpLCBpbnRl bnQoaW4pICA6OiB4CiAgICAgaWYgKGFzc29jaWF0ZWQoc2VsZiVpKSkgdGhl bgogICAgICAgIHN0b3AgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAhIERlZmF1bHQgaW5pdCBmb3IgSU5URU5UKE9VVCkKICAgICBlbmRpZgog ICAgIGlmIChhc3NvY2lhdGVkKHglaSkpIHRoZW4KICAgICAgICBteW5hbWUy ID0gc2VsZiVteW5hbWUKICAgICAgICBzZWxmJWkgPT4geCVpCiAgICAgICAg c2VsZiVpID0gc2VsZiVpICsgMQogICAgIGVuZCBpZgplbmQgc3Vicm91dGlu ZSBzZXQKCiAgc3Vicm91dGluZSBmaW5hbGlzZShzZWxmKQogICAgIHR5cGUo dCksIGludGVudChpbm91dCkgOjogc2VsZgogICAgIGNhbGxzX3RvX2ZpbmFs ID0gY2FsbHNfdG9fZmluYWwgKyAxCiAgICAgbXluYW1lMSA9IHNlbGYlbXlu YW1lCiAgICAgaWYgKGFzc29jaWF0ZWQoc2VsZiVpKSkgdGhlbgogICAgICAg IGFzc29jX2luX2ZpbmFsID0gYXNzb2NfaW5fZmluYWwgKyAxCiAgICAgICAg aWYgKHNlbGYlYWxsb2MgLmVxLiAneScpIGRlYWxsb2NhdGUgKHNlbGYlaSkK ICAgICBlbmQgaWYKICBlbmQgc3Vicm91dGluZSBmaW5hbGlzZQoKZW5kIG1v ZHVsZSBtb2QKCnByb2dyYW0gZmluYWxpc2VfYXNzaWduCiAgdXNlIG1vZAog IGltcGxpY2l0IG5vbmUKICB0eXBlIDo6IHMKICAgICBpbnRlZ2VyIDo6IGkg PSAwCiAgICAgdHlwZSh0KSA6OiB4CiAgZW5kIHR5cGUgcwogIHR5cGUocykg OjogYSwgYgogIHR5cGUodCkgOjogYwogIGEleCVteW5hbWUgPSAnYScKICBi JXglbXluYW1lID0gJ2InCiAgYyVteW5hbWUgPSAnYycKICBhbGxvY2F0ZSAo YSV4JWkpCiAgYSV4JWkgPSAxMjMKICBhJXglYWxsb2MgPSAneScKCiAgYiA9 IGEKICBpZiAoYXNzb2NfaW5fZmluYWwgLz0gMCkgc3RvcCAyICAhIGIleCVp IG5vdCBhc3NvY2lhdGVkIGJlZm9yZSBmaW5hbGl6YXRpb24KICBpZiAoY2Fs bHNfdG9fZmluYWwgLz0gMikgc3RvcCAzICAhIFR3byBmaW5hbGl6YXRpb24g Y2FsbHMgKFNob3VsZCBiZSBvbmU/KQogIGlmIChteW5hbWUxIC5uZS4gJ2In KSBzdG9wIDQgICAgICEgRmluYWxpemF0aW9uIGJlZm9yZSBpbnRlbnQgb3V0 IGJlY29tZSB1bmRlZmluZWQKICBpZiAobXluYW1lMiAubmUuICd6Jykgc3Rv cCA1ICAgICAhIEludGVudCBvdXQgbm93IGRlZmF1bHQgaW5pdGlhbGl6ZWQK ICBpZiAoLm5vdC5hc3NvY2lhdGVkIChiJXglaSwgYSV4JWkpKSBzdG9wIDYK CiAgYWxsb2NhdGUgKGMlaSwgc291cmNlID0gNzg5KQogIGMlYWxsb2MgPSAn eScKICBjID0gYSV4CiAgaWYgKGFzc29jX2luX2ZpbmFsIC89IDEpIHN0b3Ag NiAgISBjJWkgaXMgYWxsb2NhdGVkIHByaW9yIHRvIHRoZSBhc3NpZ25tZW50 CiAgaWYgKGNhbGxzX3RvX2ZpbmFsIC89IDMpIHN0b3AgNyAgISBPbmUgZmlu YWxpemF0aW9uIGNhbGwgZm9yIHRoZSBhc3NpZ25tZW50CiAgaWYgKG15bmFt ZTEgLm5lLiAnYycpIHN0b3AgOCAgICAgISBGaW5hbGl6YXRpb24gYmVmb3Jl IGludGVudCBvdXQgYmVjb21lIHVuZGVmaW5lZAogIGlmIChteW5hbWUyIC5u ZS4gJ3onKSBzdG9wIDkgICAgICEgSW50ZW50IG91dCBub3cgZGVmYXVsdCBp bml0aWFsaXplZAoKICBiID0gYQogIGlmIChhc3NvY19pbl9maW5hbCAvPSAz KSBzdG9wIDEwICEgYiVpIGlzIGFzc29jaWF0ZWQgYnkgZWFybGllciBhc3Np Z25tZW50CiAgaWYgKGNhbGxzX3RvX2ZpbmFsIC89IDUpIHN0b3AgMTEgISBU d28gZmluYWxpemF0aW9uIGNhbGxzIGZvciB0aGUgYXNzaWdubWVudCAoU2hv dWxkIGJlIG9uZT8pCiAgaWYgKG15bmFtZTEgLm5lLiAneicpIHN0b3AgMTIg ICAgISBiJXglbXluYW1lIHdhcyBkZWZhdWx0IGluaXRpYWxpemVkIGluIGVh cmxpZXIgYXNzaWdubWVudAogIGlmIChteW5hbWUyIC5uZS4gJ3onKSBzdG9w IDEzICAgICEgSW50ZW50IG91dCBub3cgZGVmYXVsdCBpbml0aWFsaXplZAog IGlmIChiJXglaSAubmUuIDEyNikgc3RvcCAxNCAgICAgICEgVGhyZWUgYXNz aWdubWVudHMgd2l0aCBzZWxmJXglaSBwb2ludGluZyB0byBzYW1lIHRhcmdl dAogIGRlYWxsb2NhdGUgKGEleCVpKQogIGlmICgubm90LmFzc29jaWF0ZWQg KGIleCVpLCBjJWkpKSB0aGVuCiAgICBzdG9wIDE1ICAgICAgICAgICAgICAg ICAgICAgICAgISBkaXR0bwogICAgYiV4JWkgPT5OVUxMICgpICAgICAgICAg ICAgICAgICEgQWx0aG91Z2ggbm90IG5lZWRlZCBoZXJlLCBjbGVhbiB1cAog ICAgYyVpID0+IE5VTEwgKCkKICBlbmRpZgplbmQgcHJvZ3JhbSBmaW5hbGlz ZV9hc3NpZ24K --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_47.f90" Content-Disposition: attachment; filename="finalize_47.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqu910 ISB7IGRnLWRvIHJ1biB9CiEKISBDaGVjayB0aGF0IFBSOTEzMTYgaXMgZml4 ZWQuIE5vdGUgcmVtb3ZhbCBvZiByZWN1cnNpdmUgSS9PLgohCiEgQ29udHJp YnV0ZWQgYnkgSm9zZSBSdWkgRmF1c3Rpbm8gZGUgU291c2EgIDxqcmZzb3Vz YUBnY2MuZ251Lm9yZz4KIQohIE5BR0ZPUiBjb21wbGFpbnMgY29ycmVjdGx5 IGFib3V0IHRoZSBmaW5hbGl6YXRpb24gb2YgYW4gSU5URU5UKE9VVCkgZHVt bXkKISB3aXRoIGFuIGltcHVyZSBmaW5hbGl6YXRpb24gc3Vicm91dGluZSwg d2l0aGluIGEgcHVyZSBwcm9jZWR1cmUuCiEgSXQgYWxzbyBjb21wbGFpbnMg YWJvdXQgdGhlIGZpbmFsaXphdGlvbiBvZiBmaW5hbF9zZXQsIHdoaWNoIGRv ZXMgbm90IHNlZW0KISB0byBiZSBjb3JyZWN0IChzZWUgZmluYWxpemVfNTAu ZjkwKS4KISBCb3RoIHByb2NlZHVyZXMgaGF2ZSBiZWVuIG1hZGUgaW1wdXJl IHNvIHRoYXQgdGhpcyB0ZXN0Y2FzZSBydW5zIHdpdGggYm90aAohIGNvbXBp bGVycy4KIQptb2R1bGUgZmluYWxfbQogIGltcGxpY2l0IG5vbmUKICBwcml2 YXRlCiAgcHVibGljIDo6ICAgICAgICAmCiAgICBhc3NpZ25tZW50KD0pCgog IHB1YmxpYyA6OiAmCiAgICBmaW5hbF90CgogIHB1YmxpYyA6OiAgICAgJgog ICAgZmluYWxfaW5pdCwgJgogICAgZmluYWxfc2V0LCAgJgogICAgZmluYWxf Z2V0LCAgJgogICAgZmluYWxfZW5kCgogIHR5cGUgOjogZmluYWxfdAogICAg cHJpdmF0ZQogICAgaW50ZWdlciA6OiBuID0gLTEKICBjb250YWlucwogICAg ZmluYWwgOjogZmluYWxfZW5kCiAgZW5kIHR5cGUgZmluYWxfdAoKICBpbnRl cmZhY2UgYXNzaWdubWVudCg9KQogICAgbW9kdWxlIHByb2NlZHVyZSBmaW5h bF9pbml0CiAgZW5kIGludGVyZmFjZSBhc3NpZ25tZW50KD0pCgogIGludGVn ZXIsIHB1YmxpYyA6OiBmaW5hbF9jdHIgPSAwCiAgaW50ZWdlciwgcHVibGlj IDo6IGZpbmFsX3JlcyA9IDAKCmNvbnRhaW5zCgogIGltcHVyZSBlbGVtZW50 YWwgc3Vicm91dGluZSBmaW5hbF9pbml0KHRoaXMsIG4pCiAgICB0eXBlKGZp bmFsX3QpLCBpbnRlbnQob3V0KSA6OiB0aGlzCiAgICBpbnRlZ2VyLCAgICAg ICBpbnRlbnQoaW4pICA6OiBuCiAgICB0aGlzJW4gPSBuCiAgZW5kIHN1YnJv dXRpbmUgZmluYWxfaW5pdAoKICBpbXB1cmUgZWxlbWVudGFsIGZ1bmN0aW9u IGZpbmFsX3NldChuKSByZXN1bHQodGhpcykKICAgIGludGVnZXIsIGludGVu dChpbikgOjogbgogICAgdHlwZShmaW5hbF90KSA6OiB0aGlzCiAgICB0aGlz JW4gPSBuCiAgZW5kIGZ1bmN0aW9uIGZpbmFsX3NldAoKICBlbGVtZW50YWwg ZnVuY3Rpb24gZmluYWxfZ2V0KHRoaXMpIHJlc3VsdChuKQogICAgdHlwZShm aW5hbF90KSwgaW50ZW50KGluKSA6OiB0aGlzCiAgICBpbnRlZ2VyIDo6IG4K ICAgIG4gPSB0aGlzJW4KICBlbmQgZnVuY3Rpb24gZmluYWxfZ2V0CgogIHN1 YnJvdXRpbmUgZmluYWxfZW5kKHRoaXMpCiAgICB0eXBlKGZpbmFsX3QpLCBp bnRlbnQoaW5vdXQpIDo6IHRoaXMKISAgICBwcmludCAqLCAiREVTVFJPWTog IiwgdGhpcyVuICE8IGdlbmVyYXRlcyBpbGxlZ2FsLCByZWN1cnNpdmUgaW8g aW4gJ2ZpbmFsX3M0JwogICAgZmluYWxfcmVzID0gdGhpcyVuCiAgICBmaW5h bF9jdHIgPSBmaW5hbF9jdHIgKyAxCiAgICB0aGlzJW4gPSAtMQogIGVuZCBz dWJyb3V0aW5lIGZpbmFsX2VuZAplbmQgbW9kdWxlIGZpbmFsX20KCnByb2dy YW0gZmluYWxfcAogIHVzZSBmaW5hbF9tCiAgaW1wbGljaXQgbm9uZQogIHR5 cGUoZmluYWxfdCkgOjogZjAKISAgY2FsbCBmaW5hbF9pbml0KGYwLCAwKQog IGNhbGwgZmluYWxfczEoKQogIGNhbGwgZmluYWxfczIoKQogIGNhbGwgZmlu YWxfczMoKQogIGNhbGwgZmluYWxfczQoKQogIGNhbGwgZmluYWxfZW5kKGYw KQpjb250YWlucwogIHN1YnJvdXRpbmUgZmluYWxfczEoKQogICAgdHlwZShm aW5hbF90KSA6OiBmCiAgICBjYWxsIGZpbmFsX2luaXQoZiwgMSkKICAgIHBy aW50ICosICJmMTogIiwgZmluYWxfZ2V0KGYpCiAgICBpZiAoKGZpbmFsX2N0 ciAubmUuIDEpIC5vci4gKGZpbmFsX3JlcyAubmUuIC0xKSkgc3RvcCAxCiAg ZW5kIHN1YnJvdXRpbmUgZmluYWxfczEKICBzdWJyb3V0aW5lIGZpbmFsX3My KCkKICAgIHR5cGUoZmluYWxfdCkgOjogZgogICAgZiA9IDIKICAgIHByaW50 ICosICJmMjogIiwgZmluYWxfZ2V0KGYpCiAgICBpZiAoKGZpbmFsX2N0ciAu bmUuIDMpIC5vci4gKGZpbmFsX3JlcyAubmUuIC0xKSkgc3RvcCAxCiAgZW5k IHN1YnJvdXRpbmUgZmluYWxfczIKICBzdWJyb3V0aW5lIGZpbmFsX3MzKCkK ICAgIHR5cGUoZmluYWxfdCkgOjogZgogICAgZiA9IGZpbmFsX3NldCgzKQog ICAgcHJpbnQgKiwgImYzOiAiLCBmaW5hbF9nZXQoZikKICAgIGlmICgoZmlu YWxfY3RyIC5uZS4gNikgLm9yLiAoZmluYWxfcmVzIC5uZS4gMykpIHN0b3Ag MQogIGVuZCBzdWJyb3V0aW5lIGZpbmFsX3MzCiAgc3Vicm91dGluZSBmaW5h bF9zNCgpCiAgICBwcmludCAqLCAiZjQ6ICIsIGZpbmFsX2dldChmaW5hbF9z ZXQoNCkpCiAgICBpZiAoKGZpbmFsX2N0ciAubmUuIDgpIC5vci4gKGZpbmFs X3JlcyAubmUuIDQpKSBzdG9wIDEKICBlbmQgc3Vicm91dGluZSBmaW5hbF9z NAplbmQgcHJvZ3JhbSBmaW5hbF9wCg== --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_45.f90" Content-Disposition: attachment; filename="finalize_45.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqtz8 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSODQ0NzIg aW4gd2hpY2ggdGhlIGZpbmFsaXphdGlvbnMgYXJvdW5kIHRoZQohIGFzc2ln bm1lbnQgaW4gJ215bWFpbicgd2VyZSBub3QgaGFwcGVuaW5nLgohCiEgQ29u dHJpYnV0ZWQgYnkgVmlwdWwgUGFyZWtoICA8Zm9ydHJhbmZhbkBvdXRsb29r LmNvbT4KIQptb2R1bGUgbQoKICAgdXNlLCBpbnRyaW5zaWMgOjogaXNvX2Zv cnRyYW5fZW52LCBvbmx5IDogb3V0cHV0X3VuaXQKCiAgIGltcGxpY2l0IG5v bmUKCiAgIHByaXZhdGUKCiAgIGludGVnZXIsIHB1YmxpYyA6OiBmaW5hbF9j b3VudHMgPSAwCiAgIGludGVnZXIsIHB1YmxpYyA6OiBhc3NvY19jb3VudHMg PSAwCgogICB0eXBlIDo6IHQKICAgICAgcHJpdmF0ZQogICAgICBjaGFyYWN0 ZXIobGVuPTopLCBwb2ludGVyIDo6IG1fcyA9PiBudWxsKCkKICAgY29udGFp bnMKICAgICAgcHJpdmF0ZQogICAgICBmaW5hbCA6OiBmaW5hbF90CiAgICAg IHByb2NlZHVyZSwgcGFzcyh0aGlzKSwgcHVibGljIDo6IGNsZWFuID0+IGNs ZWFuX3QKICAgICAgcHJvY2VkdXJlLCBwYXNzKHRoaXMpLCBwdWJsaWMgOjog aW5pdCA9PiBpbml0X3QKICAgZW5kIHR5cGUKCiAgIGludGVyZmFjZSB0CiAg ICAgIG1vZHVsZSBwcm9jZWR1cmUgOjogY29uc3RydWN0X3QKICAgZW5kIGlu dGVyZmFjZQoKICAgcHVibGljIDo6IHQKCmNvbnRhaW5zCgogICBmdW5jdGlv biBjb25zdHJ1Y3RfdCggbmFtZSApIHJlc3VsdChuZXdfdCkKCiAgICAgICEg YXJndW1lbnQgbGlzdAogICAgICBjaGFyYWN0ZXIobGVuPSopLCBpbnRlbnQo aW4pLCBvcHRpb25hbCA6OiBuYW1lCiAgICAgICEgZnVuY3Rpb24gcmVzdWx0 CiAgICAgIHR5cGUodCkgOjogbmV3X3QKCiAgICAgIGlmICggcHJlc2VudChu YW1lKSApIHRoZW4KICAgICAgICAgY2FsbCBuZXdfdCVpbml0KCBuYW1lICkK ICAgICAgZW5kIGlmCgogICBlbmQgZnVuY3Rpb24KCiAgIHN1YnJvdXRpbmUg ZmluYWxfdCggdGhpcyApCgogICAgICAhIGFyZ3VtZW50IGxpc3QKICAgICAg dHlwZSh0KSwgaW50ZW50KGlub3V0KSA6OiB0aGlzCgogICAgICBmaW5hbF9j b3VudHMgPSBmaW5hbF9jb3VudHMgKyAxCiAgICAgIGlmICggYXNzb2NpYXRl ZCh0aGlzJW1fcykgKSB0aGVuCiAgICAgICAgIGFzc29jX2NvdW50cyA9IGFz c29jX2NvdW50cyArIDEKICAgICAgZW5kaWYKICAgICAgY2FsbCBjbGVhbl90 KCB0aGlzICkKCiAgIGVuZCBzdWJyb3V0aW5lCgogICBzdWJyb3V0aW5lIGNs ZWFuX3QoIHRoaXMgKQoKICAgICAgISBhcmd1bWVudCBsaXN0CiAgICAgIGNs YXNzKHQpLCBpbnRlbnQoaW5vdXQpIDo6IHRoaXMKCiAgICAgIGlmICggYXNz b2NpYXRlZCh0aGlzJW1fcykgKSB0aGVuCiAgICAgICAgIGRlYWxsb2NhdGUo IHRoaXMlbV9zICkKICAgICAgZW5kIGlmCiAgICAgIHRoaXMlbV9zID0+IG51 bGwoKQoKICAgZW5kIHN1YnJvdXRpbmUKCiAgIHN1YnJvdXRpbmUgaW5pdF90 KCB0aGlzLCBtbmFtZSApCgogICAgICAhIGFyZ3VtZW50IGxpc3QKICAgICAg Y2xhc3ModCksIGludGVudChpbm91dCkgICAgICA6OiB0aGlzCiAgICAgIGNo YXJhY3RlcihsZW49KiksIGludGVudChpbikgOjogbW5hbWUKCiAgICAgIGNh bGwgdGhpcyVjbGVhbigpCiAgICAgIGFsbG9jYXRlKGNoYXJhY3RlcihsZW4o bW5hbWUpKSA6OiB0aGlzJW1fcykKICAgICAgdGhpcyVtX3MgPSBtbmFtZQoK ICAgZW5kIHN1YnJvdXRpbmUKCmVuZCBtb2R1bGUKICAgdXNlIG0sIG9ubHkg OiBmaW5hbF9jb3VudHMsIGFzc29jX2NvdW50cwogICBjYWxsIG15bWFpbgoh IFNlZSBjb21tZW50IGJlbG93LgogICBpZiAoZmluYWxfY291bnRzIC89IDMp IHN0b3AgMQogICBpZiAoYXNzb2NfY291bnRzIC89IDEpIHN0b3AgMgoKY29u dGFpbnMKICAgc3Vicm91dGluZSBteW1haW4KCiAgIHVzZSBtLCBvbmx5IDog dAoKICAgaW1wbGljaXQgbm9uZQoKICAgY2hhcmFjdGVyKDMpLCBhbGxvY2F0 YWJsZSwgdGFyZ2V0IDo6IG15bmFtZQoKICAgdHlwZSh0KSA6OiBmb28KCiAg IGNhbGwgZm9vJWluaXQoIG1uYW1lPSIxMjMiICkKCiAgIG15bmFtZSA9ICJm b28iCiAgIGZvbyA9IHQoIG15bmFtZSApCgogICBjYWxsIGZvbyVjbGVhbigp CgohIE5BR0ZPUiBoYXMgYXNzb2NfY291bnRzID0yLCB3aGljaCBpcyBwcm9i YWJseSBjb3JyZWN0LiBJZiBudWxsaWZpY2F0aW9uCiEgb2YgdGhlIHBvaW50 ZXIgY29tcG9uZW50IGlzIG5vdCBkb25lIGluIGdmb3J0cmFuLCBmdW5jdGlv biBmaW5hbGl6YXRpb24KISByZXN1bHRzIGluIGEgZG91YmxlIGZyZWUuIFRP RE8gZml4IHRoaXMuCiAgIGlmIChmaW5hbF9jb3VudHMgLz0gMikgc3RvcCAz CiAgIGlmIChhc3NvY19jb3VudHMgLz0gMSkgc3RvcCA0CiAgIGVuZAplbmQK Cg== --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_48.f90" Content-Disposition: attachment; filename="finalize_48.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpque11 ISB7IGRnLWRvIHJ1biB9CiEKISBDaGVjayB0aGF0IHByMTA2NTc2IGlzIGZp eGVkLiBUaGUgdGVtcG9yYXJ5IGZyb20gdGhlIGZ1bmN0aW9uIHJlc3VsdAoh IHdhcyBub3QgYmVpbmcgZmluYWxpemVkLgohCiEgQ29udHJpYnV0ZWQgYnkg VGhvbWFzIEtvZW5pZyAgPHRrb2VuaWdAZ2NjLmdudS5vcmc+CiEKbW9kdWxl IHkKICBpbXBsaWNpdCBub25lCiAgdHlwZSBmb28KICAgICBpbnRlZ2VyIDo6 IG4KICAgY29udGFpbnMKICAgICBmaW5hbCA6OiBjbGVhbnVwCiAgZW5kIHR5 cGUgZm9vCiAgaW50ZXJmYWNlIGFzc2lnbm1lbnQgKD0pCiAgICAgbW9kdWxl IHByb2NlZHVyZSBhc3NpZ24KICBlbmQgaW50ZXJmYWNlIGFzc2lnbm1lbnQg KD0pCiAgY2hhcmFjdGVyKDE2KSA6OiBidWZmZXIoNCkKICBpbnRlZ2VyIDo6 IGJ1ZmZlcl9jb3VudCA9IDEKY29udGFpbnMKCiAgc3Vicm91dGluZSBhc3Np Z24gKHJvcCwgb3ApCiAgICB0eXBlKGZvbyksIGludGVudChpbm91dCkgOjog cm9wCiAgICB0eXBlKGZvbyksIGludGVudChpbikgOjogb3AKICAgIHJvcCVu ID0gb3AlbiArIDEKICAgIHdyaXRlIChidWZmZXIoYnVmZmVyX2NvdW50KSwg JyhBMTIsSTQpJykgImFzc2lnbiIsIHJvcCVuCiAgICBidWZmZXJfY291bnQg PSBidWZmZXJfY291bnQgKyAxCiAgZW5kIHN1YnJvdXRpbmUgYXNzaWduCgog IGZ1bmN0aW9uIHRvX2ZvbyhuKSByZXN1bHQocmVzKQogICAgaW50ZWdlciwg aW50ZW50KGluKSA6OiBuCiAgICB0eXBlIChmb28pIDo6IHJlcwogICAgcmVz JW4gPSBuCiAgICB3cml0ZSAoYnVmZmVyKGJ1ZmZlcl9jb3VudCksICAnKEEx MixJNCknKSAidG9fZm9vIiwgcmVzJW4KICAgIGJ1ZmZlcl9jb3VudCA9IGJ1 ZmZlcl9jb3VudCArIDEKICBlbmQgZnVuY3Rpb24gdG9fZm9vCgogIHN1YnJv dXRpbmUgY2xlYW51cCAoc2VsZikKICAgIHR5cGUgKGZvbyksIGludGVudChp bm91dCkgOjogc2VsZgogICAgd3JpdGUgKGJ1ZmZlcihidWZmZXJfY291bnQp LCAgJyhBMTIsSTQpJykgImNsZWFudXAiLCBzZWxmJW4KICAgIGJ1ZmZlcl9j b3VudCA9IGJ1ZmZlcl9jb3VudCArIDEKICBlbmQgc3Vicm91dGluZSBjbGVh bnVwCmVuZCBtb2R1bGUgeQoKcHJvZ3JhbSBtZW1haW4KICB1c2UgeQogIGlt cGxpY2l0IG5vbmUKICBjaGFyYWN0ZXIoMTYpIDo6IGNoZWNrKDQpID0gWyIg ICAgICB0b19mb28gICAzIiwgJgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiAgICAgIGFzc2lnbiAgIDQiLCAmCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiICAgICBjbGVhbnVwICAgMyIsICYKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgICAgIGNsZWFudXAgICA0Il0KICBj YWxsIGNoawogIGlmIChhbnkgKGJ1ZmZlciAubmUuIGNoZWNrKSkgc3RvcCAx CmNvbnRhaW5zCiAgc3Vicm91dGluZSBjaGsKICAgIHR5cGUgKGZvbykgOjog YQogICAgYSA9IHRvX2ZvbygzKQogIGVuZCBzdWJyb3V0aW5lIGNoawplbmQg cHJvZ3JhbSBtZW1haW4K --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_50.f90" Content-Disposition: attachment; filename="finalize_50.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqum13 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGNvbmZvcm1hbmNlIHdpdGggY2xh dXNlIDcuNS42LjMsIHBhcmFncmFwaCA2IG9mIEYyMDE4LiBNb3N0IG9mIFBS MTA2NTc2OgohIFRoZSBmaW5hbGl6YXRpb24gb2YgZnVuY3Rpb24gcmVzdWx0 cyB3aXRoaW4gc3BlY2lmaWNhdGlvbiBleHByZXNzaW9ucyBpcyB0ZXN0ZWQK ISBpbiBmaW5hbGl6ZV80OS5mOTAuCiEKISBDb250cmlidXRlZCBieSBEYW1p YW4gUm91c29uICA8ZGFtaWFuQGFyY2hhZW9sb2dpYy5jb2Rlcz4KIQptb2R1 bGUgdGVzdF9yZXN1bHRfbQogICEhIERlZmluZSB0ZXN0cyBmb3IgZWFjaCBz Y2VuYXJpbyBpbiB3aGljaCB0aGUgRm9ydHJhbiAyMDE4CiAgISEgc3RhbmRh cmQgbWFuZGF0ZXMgdHlwZSBmaW5hbGl6YXRpb24uCiAgaW1wbGljaXQgbm9u ZQoKICBwcml2YXRlCiAgcHVibGljIDo6IHRlc3RfcmVzdWx0X3QsIGdldF90 ZXN0X3Jlc3VsdHMKCiAgdHlwZSB0ZXN0X3Jlc3VsdF90CiAgICBjaGFyYWN0 ZXIobGVuPTEzMikgZGVzY3JpcHRpb24KICAgIGxvZ2ljYWwgb3V0Y29tZQog IGVuZCB0eXBlCgogIHR5cGUgb2JqZWN0X3QKICAgIGludGVnZXIgZHVtbXkK ICBjb250YWlucwogICAgZmluYWwgOjogY291bnRfZmluYWxpemF0aW9ucwog IGVuZCB0eXBlCgogIHR5cGUgd3JhcHBlcl90CiAgICBwcml2YXRlCiAgICB0 eXBlKG9iamVjdF90KSwgYWxsb2NhdGFibGUgOjogb2JqZWN0CiAgZW5kIHR5 cGUKCiAgaW50ZWdlciA6OiBmaW5hbGl6YXRpb25zID0gMAogIGludGVnZXIs IHBhcmFtZXRlciA6OiBhdm9pZF91bnVzZWRfdmFyaWFibGVfd2FybmluZyA9 IDEKCmNvbnRhaW5zCgogIGZ1bmN0aW9uIGdldF90ZXN0X3Jlc3VsdHMoKSBy ZXN1bHQodGVzdF9yZXN1bHRzKQogICAgdHlwZSh0ZXN0X3Jlc3VsdF90KSwg YWxsb2NhdGFibGUgOjogdGVzdF9yZXN1bHRzKDopCgogICAgdGVzdF9yZXN1 bHRzID0gWyAmCiAgICAgICB0ZXN0X3Jlc3VsdF90KCJmaW5hbGl6ZXMgYSBu b24tYWxsb2NhdGFibGUgb2JqZWN0IG9uIHRoZSBMSFMgb2YgYW4gaW50cmlu c2ljIGFzc2lnbm1lbnQiLCBsaHNfb2JqZWN0KCkpICYKICAgICAgLHRlc3Rf cmVzdWx0X3QoImZpbmFsaXplcyBhbiBhbGxvY2F0ZWQgYWxsb2NhdGFibGUg TEhTIG9mIGFuIGludHJpbnNpYyBhc3NpZ25tZW50IiwgYWxsb2NhdGVkX2Fs bG9jYXRhYmxlX2xocygpKSAmCiAgICAgICx0ZXN0X3Jlc3VsdF90KCJmaW5h bGl6ZXMgYSB0YXJnZXQgd2hlbiB0aGUgYXNzb2NpYXRlZCBwb2ludGVyIGlz IGRlYWxsb2NhdGVkIiwgdGFyZ2V0X2RlYWxsb2NhdGlvbigpKSAmCiAgICAg ICx0ZXN0X3Jlc3VsdF90KCJmaW5hbGl6ZXMgYW4gb2JqZWN0IHVwb24gZXhw bGljaXQgZGVhbGxvY2F0aW9uIiwgZmluYWxpemVfb25fZGVhbGxvY2F0ZSgp KSAmCiAgICAgICx0ZXN0X3Jlc3VsdF90KCJmaW5hbGl6ZXMgYSBub24tcG9p bnRlciBub24tYWxsb2NhdGFibGUgb2JqZWN0IGF0IHRoZSBFTkQgc3RhdGVt ZW50IiwgZmluYWxpemVfb25fZW5kKCkpICYKICAgICAgLHRlc3RfcmVzdWx0 X3QoImZpbmFsaXplcyBhIG5vbi1wb2ludGVyIG5vbi1hbGxvY2F0YWJsZSBv YmplY3QgYXQgdGhlIGVuZCBvZiBhIGJsb2NrIGNvbnN0cnVjdCIsIGJsb2Nr X2VuZCgpKSAmCiAgICAgICx0ZXN0X3Jlc3VsdF90KCJmaW5hbGl6ZXMgYSBm dW5jdGlvbiByZWZlcmVuY2Ugb24gdGhlIFJIUyBvZiBhbiBpbnRyaW5zaWMg YXNzaWdubWVudCIsIHJoc19mdW5jdGlvbl9yZWZlcmVuY2UoKSkgJgogICAg ICAsdGVzdF9yZXN1bHRfdCgiZmluYWxpemVzIGFuIGludGVudChvdXQpIGRl cml2ZWQgdHlwZSBkdW1teSBhcmd1bWVudCIsIGludGVudF9vdXQoKSkgJgog ICAgICAsdGVzdF9yZXN1bHRfdCgiZmluYWxpemVzIGFuIGFsbG9jYXRhYmxl IGNvbXBvbmVudCBvYmplY3QiLCBhbGxvY2F0YWJsZV9jb21wb25lbnQoKSkg JgogICAgXQogIGVuZCBmdW5jdGlvbgoKICBmdW5jdGlvbiBjb25zdHJ1Y3Rf b2JqZWN0KCkgcmVzdWx0KG9iamVjdCkKICAgICEhIENvbnN0cnVjdG9yIGZv ciBvYmplY3RfdAogICAgdHlwZShvYmplY3RfdCkgb2JqZWN0CiAgICBvYmpl Y3QgJSBkdW1teSA9IGF2b2lkX3VudXNlZF92YXJpYWJsZV93YXJuaW5nCiAg ZW5kIGZ1bmN0aW9uCgogIHN1YnJvdXRpbmUgY291bnRfZmluYWxpemF0aW9u cyhzZWxmKQogICAgISEgRGVzdHJ1Y3RvciBmb3Igb2JqZWN0X3QKICAgIHR5 cGUob2JqZWN0X3QpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYKICAgIGZpbmFs aXphdGlvbnMgPSBmaW5hbGl6YXRpb25zICsgMQogICAgc2VsZiAlIGR1bW15 ID0gYXZvaWRfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcKICBlbmQgc3Vicm91 dGluZQoKICBmdW5jdGlvbiBsaHNfb2JqZWN0KCkgcmVzdWx0KG91dGNvbWUp CiAgICAhISBUZXN0IGNvbmZvcm1hbmNlIHdpdGggRm9ydHJhbiAyMDE4IGNs YXVzZSA3LjUuNi4zLCBwYXJhZ3JhcGggMSBiZWhhdmlvcjoKICAgICEhICJu b3QgYW4gdW5hbGxvY2F0ZWQgYWxsb2NhdGFibGUgdmFyaWFibGUiCiAgICB0 eXBlKG9iamVjdF90KSBsaHMsIHJocwogICAgbG9naWNhbCBvdXRjb21lCiAg ICBpbnRlZ2VyIGluaXRpYWxfdGFsbHkKCiAgICByaHMlZHVtbXkgPSBhdm9p ZF91bnVzZWRfdmFyaWFibGVfd2FybmluZwogICAgaW5pdGlhbF90YWxseSA9 IGZpbmFsaXphdGlvbnMKICAgIGxocyA9IHJocyAhIGZpbmFsaXplcyBsaHMK ICAgIGFzc29jaWF0ZShmaW5hbGl6YXRpb25fdGFsbHkgPT4gZmluYWxpemF0 aW9ucyAtIGluaXRpYWxfdGFsbHkpCiAgICAgIG91dGNvbWUgPSBmaW5hbGl6 YXRpb25fdGFsbHk9PTEKICAgIGVuZCBhc3NvY2lhdGUKICBlbmQgZnVuY3Rp b24KCiAgZnVuY3Rpb24gYWxsb2NhdGVkX2FsbG9jYXRhYmxlX2xocygpIHJl c3VsdChvdXRjb21lKQogICAgISEgVGVzdCBjb25mb3JtYW5jZSB3aXRoIEZv cnRyYW4gMjAxOCBjbGF1c2UgNy41LjYuMywgcGFyYWdyYXBoIDEgYmVoYXZp b3I6CiAgICAhISAiYWxsb2NhdGVkIGFsbG9jYXRhYmxlIHZhcmlhYmxlIgog ICAgdHlwZShvYmplY3RfdCksIGFsbG9jYXRhYmxlIDo6IGxocwogICAgdHlw ZShvYmplY3RfdCkgcmhzCiAgICBsb2dpY2FsIG91dGNvbWUKICAgIGludGVn ZXIgaW5pdGlhbF90YWxseQoKICAgIHJocyVkdW1teSA9IGF2b2lkX3VudXNl ZF92YXJpYWJsZV93YXJuaW5nCiAgICBpbml0aWFsX3RhbGx5ID0gZmluYWxp emF0aW9ucwogICAgYWxsb2NhdGUobGhzKQogICAgbGhzID0gcmhzICEgZmlu YWxpemVzIGxocwogICAgYXNzb2NpYXRlKGZpbmFsaXphdGlvbl90YWxseSA9 PiBmaW5hbGl6YXRpb25zIC0gaW5pdGlhbF90YWxseSkKICAgICAgb3V0Y29t ZSA9IGZpbmFsaXphdGlvbl90YWxseT09MQogICAgZW5kIGFzc29jaWF0ZQog IGVuZCBmdW5jdGlvbgoKICBmdW5jdGlvbiB0YXJnZXRfZGVhbGxvY2F0aW9u KCkgcmVzdWx0KG91dGNvbWUpCiAgICAhISBUZXN0IGNvbmZvcm1hbmNlIHdp dGggRm9ydHJhbiAyMDE4IGNsYXVzZSA3LjUuNi4zLCBwYXJhZ3JhcGggMiBi ZWhhdmlvcjoKICAgICEhICJwb2ludGVyIGlzIGRlYWxsb2NhdGVkIgogICAg dHlwZShvYmplY3RfdCksIHBvaW50ZXIgOjogb2JqZWN0X3B0ciA9PiBudWxs KCkKICAgIGxvZ2ljYWwgb3V0Y29tZQogICAgaW50ZWdlciBpbml0aWFsX3Rh bGx5CgogICAgYWxsb2NhdGUob2JqZWN0X3B0ciwgc291cmNlPW9iamVjdF90 KGR1bW15PTApKQogICAgaW5pdGlhbF90YWxseSA9IGZpbmFsaXphdGlvbnMK ICAgIGRlYWxsb2NhdGUob2JqZWN0X3B0cikgISBmaW5hbGl6ZXMgb2JqZWN0 CiAgICBhc3NvY2lhdGUoZmluYWxpemF0aW9uX3RhbGx5ID0+IGZpbmFsaXph dGlvbnMgLSBpbml0aWFsX3RhbGx5KQogICAgICBvdXRjb21lID0gZmluYWxp emF0aW9uX3RhbGx5PT0xCiAgICBlbmQgYXNzb2NpYXRlCiAgZW5kIGZ1bmN0 aW9uCgogIGZ1bmN0aW9uIGFsbG9jYXRhYmxlX2NvbXBvbmVudCgpIHJlc3Vs dChvdXRjb21lKQogICAgISEgVGVzdCBjb25mb3JtYW5jZSB3aXRoIEZvcnRy YW4gMjAxOCBjbGF1c2UgNy41LjYuMywgcGFyYS4gMiAoImFsbG9jYXRhYmxl IGVudGl0eSBpcyBkZWFsbG9jYXRlZCIpCiAgICAhISArIDkuNy4zLjIsIHBh cmEuIDYgKCJJTlRFTlQoT1VUKSBhbGxvY2F0YWJsZSBkdW1teSBhcmd1bWVu dCBpcyBkZWFsbG9jYXRlZCIpCiAgICB0eXBlKHdyYXBwZXJfdCksIGFsbG9j YXRhYmxlIDo6IHdyYXBwZXIKICAgIGxvZ2ljYWwgb3V0Y29tZQogICAgaW50 ZWdlciBpbml0aWFsX3RhbGx5CgogICAgaW5pdGlhbF90YWxseSA9IGZpbmFs aXphdGlvbnMKCiAgICBhbGxvY2F0ZSh3cmFwcGVyKQogICAgYWxsb2NhdGUo d3JhcHBlciVvYmplY3QpCiAgICBjYWxsIGZpbmFsaXplX2ludGVudF9vdXRf Y29tcG9uZW50KHdyYXBwZXIpCiAgICBhc3NvY2lhdGUoZmluYWxpemF0aW9u X3RhbGx5ID0+IGZpbmFsaXphdGlvbnMgLSBpbml0aWFsX3RhbGx5KQogICAg ICBvdXRjb21lID0gZmluYWxpemF0aW9uX3RhbGx5PT0xCiAgICBlbmQgYXNz b2NpYXRlCgogIGNvbnRhaW5zCgogICAgc3Vicm91dGluZSBmaW5hbGl6ZV9p bnRlbnRfb3V0X2NvbXBvbmVudChvdXRwdXQpCiAgICAgIHR5cGUod3JhcHBl cl90KSwgaW50ZW50KG91dCkgOjogb3V0cHV0ICEgZmluYWxpemVzIG9iamVj dCBjb21wb25lbnQKICAgICAgYWxsb2NhdGUob3V0cHV0JW9iamVjdCkKICAg ICAgb3V0cHV0JW9iamVjdCVkdW1teSA9IGF2b2lkX3VudXNlZF92YXJpYWJs ZV93YXJuaW5nCiAgICBlbmQgc3Vicm91dGluZQoKICBlbmQgZnVuY3Rpb24K CiAgZnVuY3Rpb24gZmluYWxpemVfb25fZGVhbGxvY2F0ZSgpIHJlc3VsdChv dXRjb21lKQogICAgISEgVGVzdCBjb25mb3JtYW5jZSB3aXRoIEZvcnRyYW4g MjAxOCBjbGF1c2UgNy41LjYuMywgcGFyYWdyYXBoIDI6CiAgICAhISAiYWxs b2NhdGFibGUgZW50aXR5IGlzIGRlYWxsb2NhdGVkIgogICAgdHlwZShvYmpl Y3RfdCksIGFsbG9jYXRhYmxlIDo6IG9iamVjdAogICAgbG9naWNhbCBvdXRj b21lCiAgICBpbnRlZ2VyIGluaXRpYWxfdGFsbHkKCiAgICBpbml0aWFsX3Rh bGx5ID0gZmluYWxpemF0aW9ucwogICAgYWxsb2NhdGUob2JqZWN0KQogICAg b2JqZWN0JWR1bW15ID0gMQogICAgZGVhbGxvY2F0ZShvYmplY3QpICAgICAg ICAgICEgZmluYWxpemVzIG9iamVjdAogICAgYXNzb2NpYXRlKGZpbmFsX3Rh bGx5ID0+IGZpbmFsaXphdGlvbnMgLSBpbml0aWFsX3RhbGx5KQogICAgICBv dXRjb21lID0gZmluYWxfdGFsbHk9PTEKICAgIGVuZCBhc3NvY2lhdGUKICBl bmQgZnVuY3Rpb24KCiAgZnVuY3Rpb24gZmluYWxpemVfb25fZW5kKCkgcmVz dWx0KG91dGNvbWUpCiAgICAhISBUZXN0IGNvbmZvcm1hbmNlIHdpdGggRm9y dHJhbiAyMDE4IGNsYXVzZSA3LjUuNi4zLCBwYXJhZ3JhcGggMzoKICAgICEh ICJiZWZvcmUgcmV0dXJuIG9yIEVORCBzdGF0ZW1lbnQiCiAgICBsb2dpY2Fs IG91dGNvbWUKICAgIGludGVnZXIgaW5pdGlhbF90YWxseQoKICAgIGluaXRp YWxfdGFsbHkgPSBmaW5hbGl6YXRpb25zCiAgICBjYWxsIGZpbmFsaXplX29u X2VuZF9zdWJyb3V0aW5lKCkgISBGaW5hbGl6ZXMgbG9jYWxfb2JqCiAgICBh c3NvY2lhdGUoZmluYWxfdGFsbHkgPT4gZmluYWxpemF0aW9ucyAtIGluaXRp YWxfdGFsbHkpCiAgICAgIG91dGNvbWUgPSBmaW5hbF90YWxseT09MQogICAg ZW5kIGFzc29jaWF0ZQoKICBjb250YWlucwoKICAgIHN1YnJvdXRpbmUgZmlu YWxpemVfb25fZW5kX3N1YnJvdXRpbmUoKQogICAgICB0eXBlKG9iamVjdF90 KSBsb2NhbF9vYmoKICAgICAgbG9jYWxfb2JqICUgZHVtbXkgPSBhdm9pZF91 bnVzZWRfdmFyaWFibGVfd2FybmluZwogICAgZW5kIHN1YnJvdXRpbmUKCiAg ZW5kIGZ1bmN0aW9uCgogIGZ1bmN0aW9uIGJsb2NrX2VuZCgpIHJlc3VsdChv dXRjb21lKQogICAgISEgVGVzdCBjb25mb3JtYW5jZSB3aXRoIEZvcnRyYW4g MjAxOCBjbGF1c2UgIDcuNS42LjMsIHBhcmFncmFwaCA0OgogICAgISEgInRl cm1pbmF0aW9uIG9mIHRoZSBCTE9DSyBjb25zdHJ1Y3QiCiAgICBsb2dpY2Fs IG91dGNvbWUKICAgIGludGVnZXIgaW5pdGlhbF90YWxseQoKICAgIGluaXRp YWxfdGFsbHkgPSBmaW5hbGl6YXRpb25zCiAgICBibG9jawogICAgICB0eXBl KG9iamVjdF90KSBvYmplY3QKICAgICAgb2JqZWN0ICUgZHVtbXkgPSBhdm9p ZF91bnVzZWRfdmFyaWFibGVfd2FybmluZwogICAgZW5kIGJsb2NrICEgRmlu YWxpemVzIG9iamVjdAogICAgYXNzb2NpYXRlKGZpbmFsaXphdGlvbl90YWxs eSA9PiBmaW5hbGl6YXRpb25zIC0gaW5pdGlhbF90YWxseSkKICAgICAgb3V0 Y29tZSA9IGZpbmFsaXphdGlvbl90YWxseT09MQogICAgZW5kIGFzc29jaWF0 ZQogIGVuZCBmdW5jdGlvbgoKICBmdW5jdGlvbiByaHNfZnVuY3Rpb25fcmVm ZXJlbmNlKCkgcmVzdWx0KG91dGNvbWUpCiAgICAhISBUZXN0IGNvbmZvcm1h bmNlIHdpdGggRm9ydHJhbiAyMDE4IGNsYXVzZSA3LjUuNi4zLCBwYXJhZ3Jh cGggNSBiZWhhdmlvcjoKICAgICEhICJub25wb2ludGVyIGZ1bmN0aW9uIHJl c3VsdCIKICAgIHR5cGUob2JqZWN0X3QpLCBhbGxvY2F0YWJsZSA6OiBvYmpl Y3QKICAgIGxvZ2ljYWwgb3V0Y29tZQogICAgaW50ZWdlciBpbml0aWFsX3Rh bGx5CgogICAgaW5pdGlhbF90YWxseSA9IGZpbmFsaXphdGlvbnMKICAgIG9i amVjdCA9IGNvbnN0cnVjdF9vYmplY3QoKSAhIGZpbmFsaXplcyBvYmplY3Rf dCByZXN1bHQKICAgIGFzc29jaWF0ZShmaW5hbGl6YXRpb25fdGFsbHkgPT4g ZmluYWxpemF0aW9ucyAtIGluaXRpYWxfdGFsbHkpCiAgICAgIG91dGNvbWUg PSBmaW5hbGl6YXRpb25fdGFsbHk9PTEKICAgIGVuZCBhc3NvY2lhdGUKICBl bmQgZnVuY3Rpb24KCiAgZnVuY3Rpb24gaW50ZW50X291dCgpIHJlc3VsdChv dXRjb21lKQogICAgISEgVGVzdCBjb25mb3JtYW5jZSB3aXRoIEZvcnRyYW4g MjAxOCBzdGFuZGFyZCBjbGF1c2UgNy41LjYuMywgcGFyYWdyYXBoIDc6CiAg ICAhISAibm9ucG9pbnRlciwgbm9uYWxsb2NhdGFibGUsIElOVEVOVCAoT1VU KSBkdW1teSBhcmd1bWVudCIKICAgIGxvZ2ljYWwgb3V0Y29tZQogICAgdHlw ZShvYmplY3RfdCkgb2JqZWN0CiAgICBpbnRlZ2VyIGluaXRpYWxfdGFsbHkK CiAgICBpbml0aWFsX3RhbGx5ID0gZmluYWxpemF0aW9ucwogICAgY2FsbCBm aW5hbGl6ZV9pbnRlbnRfb3V0X2FyZyhvYmplY3QpCiAgICBhc3NvY2lhdGUo ZmluYWxpemF0aW9uX3RhbGx5ID0+IGZpbmFsaXphdGlvbnMgLSBpbml0aWFs X3RhbGx5KQogICAgICBvdXRjb21lID0gZmluYWxpemF0aW9uX3RhbGx5PT0x CiAgICBlbmQgYXNzb2NpYXRlCiAgY29udGFpbnMKICAgIHN1YnJvdXRpbmUg ZmluYWxpemVfaW50ZW50X291dF9hcmcob3V0cHV0KQogICAgICB0eXBlKG9i amVjdF90KSwgaW50ZW50KG91dCkgOjogb3V0cHV0ICEgZmluYWxpemVzIG91 dHB1dAogICAgICBvdXRwdXQlZHVtbXkgPSBhdm9pZF91bnVzZWRfdmFyaWFi bGVfd2FybmluZwogICAgZW5kIHN1YnJvdXRpbmUKICBlbmQgZnVuY3Rpb24K CmVuZCBtb2R1bGUgdGVzdF9yZXN1bHRfbQoKcHJvZ3JhbSBtYWluCiAgISEg VGVzdCBlYWNoIHNjZW5hcmlvIGluIHdoaWNoIHRoZSBGb3J0cmFuIDIwMTgg c3RhbmRhcmQKICAhISByZXF1aXJlcyB0eXBlIGZpbmFsaXphdGlvbi4KICB1 c2UgdGVzdF9yZXN1bHRfbSwgb25seSA6IHRlc3RfcmVzdWx0X3QsIGdldF90 ZXN0X3Jlc3VsdHMKICBpbXBsaWNpdCBub25lCiAgdHlwZSh0ZXN0X3Jlc3Vs dF90KSwgYWxsb2NhdGFibGUgOjogdGVzdF9yZXN1bHRzKDopCiAgaW50ZWdl ciBpCgogIHRlc3RfcmVzdWx0cyA9IGdldF90ZXN0X3Jlc3VsdHMoKQoKICBk byBpPTEsc2l6ZSh0ZXN0X3Jlc3VsdHMpCiAgICBwcmludCAqLCByZXBvcnQo dGVzdF9yZXN1bHRzKGkpJW91dGNvbWUpLCB0ZXN0X3Jlc3VsdHMoaSklZGVz Y3JpcHRpb24KICBlbmQgZG8KCiAgaWYgKGFueSgubm90LnRlc3RfcmVzdWx0 cyVvdXRjb21lKSkgc3RvcCAiRmFpbGluZyB0ZXN0cyIKCiAgaWYgKGFsbG9j YXRlZCAodGVzdF9yZXN1bHRzKSkgZGVhbGxvY2F0ZSAodGVzdF9yZXN1bHRz KQoKY29udGFpbnMKCiAgcHVyZSBmdW5jdGlvbiByZXBvcnQob3V0Y29tZSkK ICAgIGxvZ2ljYWwsIGludGVudChpbikgOjogb3V0Y29tZQogICAgY2hhcmFj dGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogIHJlcG9ydAogICAgcmVwb3J0 ID0gbWVyZ2UoIlBhc3M6ICIsICJGYWlsOiAiLCBvdXRjb21lKQogIGVuZCBm dW5jdGlvbgoKZW5kIHByb2dyYW0K --0000000000003486e505f147be2a Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_49.f90" Content-Disposition: attachment; filename="finalize_49.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcetpqui12 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGNvbmZvcm1hbmNlIHdpdGggY2xh dXNlIDcuNS42LjMsIHBhcmFncmFwaCA2IG9mIEYyMDE4LiBQYXJ0IG9mIFBS MTA2NTc2LgohCiEgQ29udHJpYnV0ZWQgYnkgRGFtaWFuIFJvdXNvbiAgPGRh bWlhbkBhcmNoYWVvbG9naWMuY29kZXM+CiEKbW9kdWxlIGZpbmFsaXphYmxl X20KICAhISBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgbWFpbiBwcm9ncmFt IGF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLCB3aGljaAogICEhIHRlc3Rz IGNvbXBpbGVyIGNvbmZvcm1hbmNlIHdpdGggY2xhdXNlIDcuNS42LjMsIHBh cmFncmFwaCA2IGluIHRoZSBGb3J0cmFuCiAgISEgSW50ZXJwcmV0YXRpb24g RG9jdW1lbnQgKGh0dHBzOi8vajMtZm9ydHJhbi5vcmcvZG9jL3llYXIvMTgv MTgtMDA3cjEucGRmKToKICAhISAiSWYgYSBzcGVjaWZpY2F0aW9uIGV4cHJl c3Npb24gaW4gYSBzY29waW5nIHVuaXQgcmVmZXJlbmNlcwogICEhIGEgZnVu Y3Rpb24sIHRoZSByZXN1bHQgaXMgZmluYWxpemVkIGJlZm9yZSBleGVjdXRp b24gb2YgdGhlIGV4ZWN1dGFibGUKICAhISBjb25zdHJ1Y3RzIGluIHRoZSBz Y29waW5nIHVuaXQuIgoKISBOQUdGT1IgY29tcGxhaW5zIGFib3V0IHRoaXMg dGVzdGNhc2U6ICJFcnJvcjogZmluYWxpemVfNTAuZjkwLCBsaW5lIDM4OiBS YW5rIDAKISB0eXBlIEZJTkFMSVpBQkxFX1QgcmVzdWx0IHZhcmlhYmxlIG9m IHB1cmUgZnVuY3Rpb24gQ09OU1RSVUNUIHdpbGwgaW52b2tlIGFuCiEgaW1w dXJlIGZpbmFsIHN1YnJvdXRpbmUuIgoKISBUaGUgc3RhbmRhcmQgZG9lc24n dCBzcGVjaWZ5IHdoZXRoZXIgdGhlIGZpbmFsaXphdGlvbiBpcyBjb25zaWRl cmVkIHRvIGJlIHdpdGhpbgohIHRoZSBmdW5jdGlvbiBvciBub3QuIEhvd2V2 ZXIsIGdpdmVuIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsICJJZiBhbiBleGVj dXRhYmxlCiEgY29uc3RydWN0IHJlZmVyZW5jZXMgYSBub25wb2ludGVyIGZ1 bmN0aW9uLCB0aGUgcmVzdWx0IGlzIGZpbmFsaXplZCBhZnRlcgohIGV4ZWN1 dGlvbiBvZiB0aGUgaW5uZXJtb3N0IGV4ZWN1dGFibGUgY29uc3RydWN0IGNv bnRhaW5pbmcgdGhlIHJlZmVyZW5jZS4iLCB0aGUKISBwdXJlbmVzcyBvZiB0 aGUgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGlzIGJlaW5nIGZpbmFsaXplZCBk b2Vzbid0IG1hdHRlci4gSW5zdGVhZCwKISBpdCBzaG91bGQgYmUgdGhlIHB1 cmVuZXNzIG9mIHRoZSBjb250YWluaW5nIHNjb3BlLgoKICBpbXBsaWNpdCBu b25lCgogIHByaXZhdGUKICBwdWJsaWMgOjogZmluYWxpemFibGVfdCwgY29t cG9uZW50CgogIHR5cGUgZmluYWxpemFibGVfdAogICAgcHJpdmF0ZQogICAg aW50ZWdlciwgYWxsb2NhdGFibGUgOjogY29tcG9uZW50XwogIGNvbnRhaW5z CiAgICBmaW5hbCA6OiBmaW5hbGl6ZQogIGVuZCBUeXBlCgogIGludGVyZmFj ZSBmaW5hbGl6YWJsZV90CiAgICBtb2R1bGUgcHJvY2VkdXJlIGNvbnN0cnVj dAogIGVuZCBpbnRlcmZhY2UKCiAgaW50ZWdlciwgcHVibGljIDo6IGZpbmFs X2N0ciA9IDAKCmNvbnRhaW5zCgogIHB1cmUgZnVuY3Rpb24gY29uc3RydWN0 KGNvbXBvbmVudCkgcmVzdWx0KGZpbmFsaXphYmxlKQogICAgaW50ZWdlciwg aW50ZW50KGluKSA6OiBjb21wb25lbnQKICAgIHR5cGUoZmluYWxpemFibGVf dCkgZmluYWxpemFibGUKICAgIGFsbG9jYXRlKGZpbmFsaXphYmxlJWNvbXBv bmVudF8sIHNvdXJjZSA9IGNvbXBvbmVudCkKICBlbmQgZnVuY3Rpb24KCiAg cHVyZSBmdW5jdGlvbiBjb21wb25lbnQoc2VsZikgcmVzdWx0KHNlbGZfY29t cG9uZW50KQogICAgdHlwZShmaW5hbGl6YWJsZV90KSwgaW50ZW50KGluKSA6 OiBzZWxmCiAgICBpbnRlZ2VyIHNlbGZfY29tcG9uZW50CiAgICBpZiAoLm5v dC4gYWxsb2NhdGVkKHNlbGYlY29tcG9uZW50XykpIGVycm9yIHN0b3AgImNv bXBvbmVudDogdW5hbGxvY2F0ZWQgY29tcG9uZW50IgogICAgc2VsZl9jb21w b25lbnQgPSBzZWxmJWNvbXBvbmVudF8KICBlbmQgZnVuY3Rpb24KCiAgc3Vi cm91dGluZSBmaW5hbGl6ZShzZWxmKQogICAgdHlwZShmaW5hbGl6YWJsZV90 KSwgaW50ZW50KGlub3V0KSA6OiBzZWxmCiAgICBpZiAoYWxsb2NhdGVkKHNl bGYlY29tcG9uZW50XykpIGRlYWxsb2NhdGUoc2VsZiVjb21wb25lbnRfKQog ICAgZmluYWxfY3RyID0gZmluYWxfY3RyICsgMQogIGVuZCBzdWJyb3V0aW5l CgplbmQgbW9kdWxlCgpwcm9ncmFtIHNwZWNpZmljYXRpb25fZXhwcmVzc2lv bl9maW5hbGl6YXRpb24KICB1c2UgZmluYWxpemFibGVfbSwgb25seSA6IGZp bmFsaXphYmxlX3QsIGNvbXBvbmVudCwgZmluYWxfY3RyCiAgaW1wbGljaXQg bm9uZQoKICBjYWxsIGZpbmFsaXplX3NwZWNpZmljYXRpb25fZXhwcmVzc2lv bl9yZXN1bHQKICBpZiAoZmluYWxfY3RyIC5uZS4gMSkgc3RvcCAxCgpjb250 YWlucwoKICBzdWJyb3V0aW5lIGZpbmFsaXplX3NwZWNpZmljYXRpb25fZXhw cmVzc2lvbl9yZXN1bHQKICAgIHJlYWwgdG1wKGNvbXBvbmVudChmaW5hbGl6 YWJsZV90KGNvbXBvbmVudD0xKSkpICEhIEZpbmFsaXplcyB0aGUgZmluYWxp emFibGVfdCBmdW5jdGlvbiByZXN1bHQKICAgIHJlYWwgZWxpbWluYXRlX3Vu dXNlZF92YXJpYWJsZV93YXJuaW5nCiAgICB0bXAgPSBlbGltaW5hdGVfdW51 c2VkX3ZhcmlhYmxlX3dhcm5pbmcKICAgIGlmIChmaW5hbF9jdHIgLm5lLiAx KSBzdG9wIDIKICBlbmQgc3Vicm91dGluZQoKZW5kIHByb2dyYW0K --0000000000003486e505f147be2a--