From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id 3461C3851C03; Tue, 7 Mar 2023 13:46:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3461C3851C03 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-x42c.google.com with SMTP id c10so8017786pfv.13; Tue, 07 Mar 2023 05:46:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678196767; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=xk8VZv1A1mNOguhJe++FoIF22n/v3cPq3u9GysaulCs=; b=JB0/8a6Zwy0kBx2pPgzVq2rQba6wxqrhwfKshItq86bkGqPILz969QgpBuTJoIKk6v SBwT9d0XX2RusiMqFWJNIzObnBjGCDV8EmA+tK7lbkyLyG4RxrD9LAqtg2VfVjMbSluU hH0RSddYV4t3cY0UUjyCUEcvBdtOsMAUc2wCg3dxDD5koN4dIdM/eE9NnGeboucj7UYD NbrTtV0zbnd+iM9rjsCbk0bI39ZtoLpkI3TFmPyUj9uKfFN5TrRh9q4OFaKHjS5JLLIM ZiEm4+D7iENAraRj+bKTfaSKzViTJ/hrCpUwwD3CX053DtFiLDSo2H1QnIQ+iV5m8RZk VGOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678196767; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=xk8VZv1A1mNOguhJe++FoIF22n/v3cPq3u9GysaulCs=; b=UinTcsuL0NeH0hdW5YZyPZJiIRMFpnbvG/MH2wygUwpFIByrVbip/s1AU40lRi881q XpLjHDLdMzqwfz0tlTNqxcfV5iyD47oKkK3pgDdwCBss4Lxy7yjk35MQzTCWTvnX8ybW cKfIhSBmMvXYOoMN+FSUutF/faL8VycGl1kvl6bzjZNSU/F1FXCRuT5RogazCUA8bdTT pQ3M/BTuiDn+aC3FIi/GsAVVIl+rV2yeTGcJNMzPbYIxTkU2ACP6G7tTv8ggROJcaVCB KtGISlyU3R+Ps75J4srmAk8wuTtEYa9H/jBymRkPQfKo/uxmCPqSfJd9y/IjCzRWoIDZ sMSg== X-Gm-Message-State: AO0yUKWok1QnQdv+ET6MfWxLJK8b3jvcWk+rZUnKpHQib2jLcjZzetGP fVy0M/AHFgL4BouTF45hH9YVtkam3he96dzYD/DI6VK3PI8= X-Google-Smtp-Source: AK7set/QBBXWfyR7OYikvYwjcknkDOWIGtSAGw8BpIYb5Jbw9zD4HAyeQ8E/W14ehAJ8cBiGfH5jdk8MGVyx5pXRSIw= X-Received: by 2002:a62:834b:0:b0:5e2:c313:a660 with SMTP id h72-20020a62834b000000b005e2c313a660mr6202076pfe.6.1678196766610; Tue, 07 Mar 2023 05:46:06 -0800 (PST) MIME-Version: 1.0 From: Paul Richard Thomas Date: Tue, 7 Mar 2023 13:45:55 +0000 Message-ID: Subject: [Patch, fortran] PR37336 finalization To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="00000000000023e55805f64fa2f2" X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FILL_THIS_FORM,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: --00000000000023e55805f64fa2f2 Content-Type: multipart/alternative; boundary="00000000000023e55605f64fa2f0" --00000000000023e55605f64fa2f0 Content-Type: text/plain; charset="UTF-8" Hi All, I thought that I was ready for submission of this patch early in December, last year. That was before I tried to tackle the bugs triggered by the different versions of smart pointer or resource management. I would like to thank Andrew Benson, Salvatore Filippone, Jerry Delisle and Damian Rouson for all their help and encouragement in trying to get this right. The result is compliant with the F2018 standard (I think...!) and is more or less consistent with the other brands to which I have access. Thanks are also due to Malcolm Cohen for a very useful exchange of emails. All the paragraphs of F2018 7.5.6.3 "When finalization occurs" have been addressed. The difficulties of the last couple of months have all been related to finalization during intrinsic derived type assignment, where there are components with type bound defined assignments. These are, for the main part, dealt with by the chunks in resolve.cc(generate_component_assignments) and should be consistent with F2018: 10.2.1.3 "Interpretation of intrinsic assignments" paragraph 13. It is entirely possible that there are remaining corner cases. As a result of all this, the patch is now rather large at 2187 lines for the diff, even without the testcases. It is my intention to write the rest of the testcases and to break up the patch so that the various new features are introduced in separate patches. I can hurry this along to get the patch into 13-branch or I can wait until 14-branch opens. Best regards Paul Fortran: Fix bugs and implement missing features in finalization [PR37336] 2023-03-07 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. * gfortran.h : Add prototype for gfc_may_be_finalized. * resolve.cc (resolve_function): Correct derived types that have an incomplete namespace. (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. (generate_final_call): New function. (generate_component_assignments): Enclose the outermost call in a block to capture automatic deallocation and final calls. Set must_finalize as required to satisfy the standards. Use an explicit pointer assignment for pointer components to capture finalization of the target. Likewise use explicit assignment for allocatable components. Do not use the temporary copy of the lhs in defined assignment if the component is allocatable. Put the temporary in the same namespace as the lhs symbol if the component may be finalized. Remove the leading assignment from the expansion of assignment of components that have their own defined assignment components. Suppress finalization of assignment of temporary components to the lhs. Make an explicit final call for the rhs function temporary if it exists. (gfc_resolve_code): Set must_finalize for assignments with an array constructor on the rhs. (gfc_resolve_finalizers): Ensure that an assumed rank finalizer is the only finalizer for that type and correct the surprising warning for the lack of a scalar finalizer. (check_defined_assignments): Handle allocatable components. (resolve_fl_derived): Set referenced the vtab for use associated symbols. (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. (gfc_copy_alloc_comp_no_fini): 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 and do not deallocate the components of entities with a leading '_' in the name that are also marked as artificial. * 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_no_fini. * trans-decl.cc(init_intent_out_dt): Tidy up the code. * trans-expr.cc (gfc_init_se): Initialize finalblock. (gfc_conv_procedure_call): Use gfc_finalize_tree_expr to finalize 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_trans_arrayfunc_assign): Use gfc_assignment_finalizer_call and ensure that finalization occurs after the evaluation of the rhs but using the initial value for the lhs. Finalize rhs function results using gfc_finalize_tree_expr. (trans_class_assignment, gfc_trans_assignment_1): As previous function, taking care to order evaluation, assignment and finalization correctly. * trans-io.cc (gfc_trans_transfer): Add the final block. * trans-stmt.cc (gfc_trans_call, gfc_trans_allocate): likewise. (trans_associate_var): Nullify derived allocatable components and finalize function targets with defined assignment components on leaving the block scope. (trans_allocate): Finalize source expressions, if required, and set init_expr artificial temporarily to suppress the finalization in gfc_trans_assignment. * trans.cc (gfc_add_finalizer_call): Do not finalize the temporaries generated in type assignment with defined assignment components. (gfc_assignment_finalizer_call): New function. (gfc_finalize_tree_expr): New function. * trans.h: Add finalblock to gfc_se. Add the prototypes for gfc_finalize_tree_expr and gfc_assignment_finalizer_call. gcc/testsuite/ PR fortran/64290 * gfortran.dg/finalize_38.f90 : New test. * gfortran.dg/finalize_38a.f90 : New test. * gfortran.dg/allocate_with_source_25.f90 : The number of final calls goes down from 6 to 4. * gfortran.dg/associate_25.f90 : Remove the incorrect comment. * gfortran.dg/auto_dealloc_2.f90 : Change the tree dump expr but the final count remains the same. * 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/37336 * gfortran.dg/finalize_49.f90 : New test. * gfortran.dg/finalize_50.f90 : New test. * gfortran.dg/finalize_51.f90 : New test. --00000000000023e55605f64fa2f0-- --00000000000023e55805f64fa2f2 Content-Type: text/x-patch; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_leyax9f20 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2NsYXNzLmNjIGIvZ2NjL2ZvcnRy YW4vY2xhc3MuY2MKaW5kZXggYWU2NTNlNzQ0MzcuLjQ4NGY1MjU3NzNlIDEw 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 Ki8KCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oIGIvZ2Nj L2ZvcnRyYW4vZ2ZvcnRyYW4uaAppbmRleCBmZWEyNTMxMmNmNC4uOWJhYjJj NDBlYWQgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKKysr IGIvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaApAQCAtMzkzMSw2ICszOTMxLDcg QEAgZ2ZjX3R5cGVib3VuZF9wcm9jKiBnZmNfZmluZF90eXBlYm91bmRfaW50 cmluc2ljX29wIChnZmNfc3ltYm9sKiwgYm9vbCosCiAJCQkJCQkgICAgIGxv Y3VzKik7CiBnZmNfc3ltdHJlZSogZ2ZjX2dldF90YnBfc3ltdHJlZSAoZ2Zj X3N5bXRyZWUqKiwgY29uc3QgY2hhciopOwogYm9vbCBnZmNfaXNfZmluYWxp emFibGUgKGdmY19zeW1ib2wgKiwgZ2ZjX2V4cHIgKiopOworYm9vbCBnZmNf bWF5X2JlX2ZpbmFsaXplZCAoZ2ZjX3R5cGVzcGVjKTsKCiAjZGVmaW5lIENM QVNTX0RBVEEoc3ltKSBzeW0tPnRzLnUuZGVyaXZlZC0+Y29tcG9uZW50cwog I2RlZmluZSBVTkxJTUlURURfUE9MWShzeW0pIFwKZGlmZiAtLWdpdCBhL2dj Yy9mb3J0cmFuL3Jlc29sdmUuY2MgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNj CmluZGV4IDI3ODBjODJjNzk4Li5mMTY0OWYyZmMwMSAxMDA2NDQKLS0tIGEv Z2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYworKysgYi9nY2MvZm9ydHJhbi9yZXNv bHZlLmNjCkBAIC0zNDc4LDYgKzM0NzgsMjQgQEAgcmVzb2x2ZV9mdW5jdGlv biAoZ2ZjX2V4cHIgKmV4cHIpCiAJZXhwci0+dHMgPSBleHByLT5zeW10cmVl LT5uLnN5bS0+cmVzdWx0LT50czsKICAgICB9CgorICAvKiBUaGVzZSBkZXJp dmVkIHR5cGVzIHdpdGggYW4gaW5jb21wbGV0ZSBuYW1lc3BhY2UsIGFyaXNp bmcgZnJvbSB1c2UKKyAgICAgYXNzb2NpYXRpb24sIGNhdXNlIGdmY19nZXRf ZGVyaXZlZF92dGFiIHRvIHNlZ2ZhdWx0LiBJZiB0aGUgZnVuY3Rpb24KKyAg ICAgbmFtZXNwYWNlIGRvZXMgbm90IHN1ZmZpY2UsIHNvbWV0aGluZyBpcyBi YWRseSB3cm9uZy4gICovCisgIGlmIChleHByLT50cy50eXBlID09IEJUX0RF UklWRUQKKyAgICAgICYmICFleHByLT50cy51LmRlcml2ZWQtPm5zLT5wcm9j X25hbWUpCisgICAgeworICAgICAgZ2ZjX3N5bWJvbCAqZGVyOworICAgICAg Z2ZjX2ZpbmRfc3ltYm9sIChleHByLT50cy51LmRlcml2ZWQtPm5hbWUsIGV4 cHItPnN5bXRyZWUtPm4uc3ltLT5ucywgMSwgJmRlcik7CisgICAgICBpZiAo ZGVyKQorCXsKKwkgIGV4cHItPnRzLnUuZGVyaXZlZC0+cmVmcy0tOworCSAg ZXhwci0+dHMudS5kZXJpdmVkID0gZGVyOworCSAgZGVyLT5yZWZzKys7CisJ fQorICAgICAgZWxzZQorCWV4cHItPnRzLnUuZGVyaXZlZC0+bnMgPSBleHBy LT5zeW10cmVlLT5uLnN5bS0+bnM7CisgICAgfQorCiAgIGlmICghZXhwci0+ cmVmICYmICFleHByLT52YWx1ZS5mdW5jdGlvbi5pc3ltKQogICAgIHsKICAg ICAgIGlmIChleHByLT52YWx1ZS5mdW5jdGlvbi5lc3ltKQpAQCAtMTA1NTYs NiArMTA1NzQsMTEgQEAgcmVzb2x2ZV93aGVyZSAoZ2ZjX2NvZGUgKmNvZGUs IGdmY19leHByICptYXNrKQogCSAgICAgIGlmIChlICYmICFyZXNvbHZlX3do ZXJlX3NoYXBlIChjbmV4dC0+ZXhwcjEsIGUpKQogCSAgICAgICBnZmNfZXJy b3IgKCJXSEVSRSBhc3NpZ25tZW50IHRhcmdldCBhdCAlTCBoYXMgIgogCQkJ ICAiaW5jb25zaXN0ZW50IHNoYXBlIiwgJmNuZXh0LT5leHByMS0+d2hlcmUp OworCisJICAgICAgaWYgKGNuZXh0LT5vcCA9PSBFWEVDX0FTU0lHTgorCQkg ICYmIGdmY19tYXlfYmVfZmluYWxpemVkIChjbmV4dC0+ZXhwcjEtPnRzKSkK KwkJY25leHQtPmV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMTsKKwogCSAgICAg IGJyZWFrOwoKCkBAIC0xMDY0Myw2ICsxMDY2NiwxMSBAQCBnZmNfcmVzb2x2 ZV93aGVyZV9jb2RlX2luX2ZvcmFsbCAoZ2ZjX2NvZGUgKmNvZGUsIGludCBu dmFyLAogCSAgICAvKiBXSEVSRSBhc3NpZ25tZW50IHN0YXRlbWVudCAqLwog CSAgICBjYXNlIEVYRUNfQVNTSUdOOgogCSAgICAgIGdmY19yZXNvbHZlX2Fz c2lnbl9pbl9mb3JhbGwgKGNuZXh0LCBudmFyLCB2YXJfZXhwcik7CisKKwkg ICAgICBpZiAoY25leHQtPm9wID09IEVYRUNfQVNTSUdOCisJCSAgJiYgZ2Zj X21heV9iZV9maW5hbGl6ZWQgKGNuZXh0LT5leHByMS0+dHMpKQorCQljbmV4 dC0+ZXhwcjEtPm11c3RfZmluYWxpemUgPSAxOworCiAJICAgICAgYnJlYWs7 CgogCSAgICAvKiBXSEVSRSBvcGVyYXRvciBhc3NpZ25tZW50IHN0YXRlbWVu dCAqLwpAQCAtMTA2ODksNiArMTA3MTcsMTEgQEAgZ2ZjX3Jlc29sdmVfZm9y YWxsX2JvZHkgKGdmY19jb2RlICpjb2RlLCBpbnQgbnZhciwgZ2ZjX2V4cHIg Kip2YXJfZXhwcikKIAljYXNlIEVYRUNfQVNTSUdOOgogCWNhc2UgRVhFQ19Q T0lOVEVSX0FTU0lHTjoKIAkgIGdmY19yZXNvbHZlX2Fzc2lnbl9pbl9mb3Jh bGwgKGMsIG52YXIsIHZhcl9leHByKTsKKworCSAgaWYgKGMtPm9wID09IEVY RUNfQVNTSUdOCisJICAgICAgJiYgZ2ZjX21heV9iZV9maW5hbGl6ZWQgKGMt PmV4cHIxLT50cykpCisJICAgIGMtPmV4cHIxLT5tdXN0X2ZpbmFsaXplID0g MTsKKwogCSAgYnJlYWs7CgogCWNhc2UgRVhFQ19BU1NJR05fQ0FMTDoKQEAg LTExMzY5LDYgKzExNDA3LDcgQEAgZ2V0X3RlbXBfZnJvbV9leHByIChnZmNf ZXhwciAqZSwgZ2ZjX25hbWVzcGFjZSAqbnMpCiAgIHRtcC0+bi5zeW0tPmF0 dHIudXNlX2Fzc29jID0gMDsKICAgdG1wLT5uLnN5bS0+YXR0ci5pbnRlbnQg PSBJTlRFTlRfVU5LTk9XTjsKCisKICAgaWYgKGFzKQogICAgIHsKICAgICAg IHRtcC0+bi5zeW0tPmFzID0gZ2ZjX2NvcHlfYXJyYXlfc3BlYyAoYXMpOwpA QCAtMTE0MjAsOSArMTE0NTksNjIgQEAgYWRkX2NvZGVfdG9fY2hhaW4gKGdm Y19jb2RlICoqdGhpc19jb2RlLCBnZmNfY29kZSAqKmhlYWQsIGdmY19jb2Rl ICoqdGFpbCkKIH0KCgorLyogR2VuZXJhdGUgYSBmaW5hbCBjYWxsIGZyb20g YSB2YXJpYWJsZSBleHByZXNzaW9uICAqLworCitzdGF0aWMgdm9pZAorZ2Vu ZXJhdGVfZmluYWxfY2FsbCAoZ2ZjX2V4cHIgKnRtcF9leHByLCBnZmNfY29k ZSAqKmhlYWQsIGdmY19jb2RlICoqdGFpbCkKK3sKKyAgZ2ZjX2NvZGUgKnRo aXNfY29kZTsKKyAgZ2ZjX2V4cHIgKmZpbmFsX2V4cHIgPSBOVUxMOworICBn ZmNfZXhwciAqc2l6ZV9leHByOworICBnZmNfZXhwciAqZmluaV9jb2FycmF5 OworCisgIGdjY19hc3NlcnQgKHRtcF9leHByLT5leHByX3R5cGUgPT0gRVhQ Ul9WQVJJQUJMRSk7CisgIGlmICghZ2ZjX2lzX2ZpbmFsaXphYmxlICh0bXBf ZXhwci0+dHMudS5kZXJpdmVkLCAmZmluYWxfZXhwcikgfHwgIWZpbmFsX2V4 cHIpCisgICAgcmV0dXJuOworCisgIC8qIE5vdyBnZW5lcmF0ZSB0aGUgZmlu YWxpemVyIGNhbGwuICAqLworICB0aGlzX2NvZGUgPSBnZmNfZ2V0X2NvZGUg KEVYRUNfQ0FMTCk7CisgIHRoaXNfY29kZS0+c3ltdHJlZSA9IGZpbmFsX2V4 cHItPnN5bXRyZWU7CisgIHRoaXNfY29kZS0+cmVzb2x2ZWRfc3ltID0gZmlu YWxfZXhwci0+c3ltdHJlZS0+bi5zeW07CisKKyAgLy8qIEV4cHJlc3Npb24g dG8gYmUgZmluYWxpemVkICAqLworICB0aGlzX2NvZGUtPmV4dC5hY3R1YWwg PSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICB0aGlzX2NvZGUtPmV4 dC5hY3R1YWwtPmV4cHIgPSBnZmNfY29weV9leHByICh0bXBfZXhwcik7CisK KyAgLyogc2l6ZV9leHByID0gU1RPUkFHRV9TSVpFICguLi4pIC8gTlVNRVJJ Q19TVE9SQUdFX1NJWkUuICAqLworICB0aGlzX2NvZGUtPmV4dC5hY3R1YWwt Pm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICBzaXplX2V4 cHIgPSBnZmNfZ2V0X2V4cHIgKCk7CisgIHNpemVfZXhwci0+d2hlcmUgPSBn ZmNfY3VycmVudF9sb2N1czsKKyAgc2l6ZV9leHByLT5leHByX3R5cGUgPSBF WFBSX09QOworICBzaXplX2V4cHItPnZhbHVlLm9wLm9wID0gSU5UUklOU0lD X0RJVklERTsKKyAgc2l6ZV9leHByLT52YWx1ZS5vcC5vcDEKKwk9IGdmY19i dWlsZF9pbnRyaW5zaWNfY2FsbCAoZ2ZjX2N1cnJlbnRfbnMsIEdGQ19JU1lN X1NUT1JBR0VfU0laRSwKKwkJCQkgICAgInN0b3JhZ2Vfc2l6ZSIsIGdmY19j dXJyZW50X2xvY3VzLCAyLAorCQkJCSAgICBnZmNfbHZhbF9leHByX2Zyb21f c3ltICh0bXBfZXhwci0+c3ltdHJlZS0+bi5zeW0pLAorCQkJCSAgICBnZmNf Z2V0X2ludF9leHByIChnZmNfaW5kZXhfaW50ZWdlcl9raW5kLAorCQkJCQkJ ICAgICAgTlVMTCwgMCkpOworICBzaXplX2V4cHItPnZhbHVlLm9wLm9wMiA9 IGdmY19nZXRfaW50X2V4cHIgKGdmY19pbmRleF9pbnRlZ2VyX2tpbmQsIE5V TEwsCisJCQkJCSAgICAgIGdmY19jaGFyYWN0ZXJfc3RvcmFnZV9zaXplKTsK KyAgc2l6ZV9leHByLT52YWx1ZS5vcC5vcDEtPnRzID0gc2l6ZV9leHByLT52 YWx1ZS5vcC5vcDItPnRzOworICBzaXplX2V4cHItPnRzID0gc2l6ZV9leHBy LT52YWx1ZS5vcC5vcDEtPnRzOworICB0aGlzX2NvZGUtPmV4dC5hY3R1YWwt Pm5leHQtPmV4cHIgPSBzaXplX2V4cHI7CisKKyAgLyogZmluaV9jb2FycmF5 ICAqLworICB0aGlzX2NvZGUtPmV4dC5hY3R1YWwtPm5leHQtPm5leHQgPSBn ZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICBmaW5pX2NvYXJyYXkgPSBn ZmNfZ2V0X2NvbnN0YW50X2V4cHIgKEJUX0xPR0lDQUwsIGdmY19kZWZhdWx0 X2xvZ2ljYWxfa2luZCwKKwkJCQkJJnRtcF9leHByLT53aGVyZSk7CisgIGZp bmlfY29hcnJheS0+dmFsdWUubG9naWNhbCA9IChpbnQpZ2ZjX2V4cHJfYXR0 ciAodG1wX2V4cHIpLmNvZGltZW5zaW9uOworICB0aGlzX2NvZGUtPmV4dC5h Y3R1YWwtPm5leHQtPm5leHQtPmV4cHIgPSBmaW5pX2NvYXJyYXk7CisKKyAg YWRkX2NvZGVfdG9fY2hhaW4gKCZ0aGlzX2NvZGUsIGhlYWQsIHRhaWwpOwor Cit9CisKIC8qIENvdW50cyB0aGUgcG90ZW50aWFsIG51bWJlciBvZiBwYXJ0 IGFycmF5IHJlZmVyZW5jZXMgdGhhdCB3b3VsZAogICAgcmVzdWx0IGZyb20g cmVzb2x1dGlvbiBvZiB0eXBlYm91bmQgZGVmaW5lZCBhc3NpZ25tZW50cy4g ICovCgorCiBzdGF0aWMgaW50CiBub25zY2FsYXJfdHlwZWJvdW5kX2Fzc2ln biAoZ2ZjX3N5bWJvbCAqZGVyaXZlZCwgaW50IGRlcHRoKQogewpAQCAtMTE1 MDksOCArMTE2MDEsMTEgQEAgZ2VuZXJhdGVfY29tcG9uZW50X2Fzc2lnbm1l bnRzIChnZmNfY29kZSAqKmNvZGUsIGdmY19uYW1lc3BhY2UgKm5zKQogewog ICBnZmNfY29tcG9uZW50ICpjb21wMSwgKmNvbXAyOwogICBnZmNfY29kZSAq dGhpc19jb2RlID0gTlVMTCwgKmhlYWQgPSBOVUxMLCAqdGFpbCA9IE5VTEw7 Ci0gIGdmY19leHByICp0MTsKKyAgZ2ZjX2NvZGUgKnRtcF9jb2RlID0gTlVM TDsKKyAgZ2ZjX2V4cHIgKnQxID0gTlVMTDsKKyAgZ2ZjX2V4cHIgKnRtcF9l eHByID0gTlVMTDsKICAgaW50IGVycm9yX2NvdW50LCBkZXB0aDsKKyAgYm9v bCBmaW5hbGl6YWJsZV9saHMgPSBnZmNfbWF5X2JlX2ZpbmFsaXplZCAoKCpj b2RlKS0+ZXhwcjEtPnRzKTsKCiAgIGdmY19nZXRfZXJyb3JzIChOVUxMLCAm ZXJyb3JfY291bnQpOwoKQEAgLTExNTMxLDE5ICsxMTYyNiwzNCBAQCBnZW5l cmF0ZV9jb21wb25lbnRfYXNzaWdubWVudHMgKGdmY19jb2RlICoqY29kZSwg Z2ZjX25hbWVzcGFjZSAqbnMpCiAgICAgICByZXR1cm47CiAgICAgfQoKKyAg LyogQnVpbGQgYSBibG9jayBzbyB0aGF0IGZ1bmN0aW9uIHJlc3VsdCB0ZW1w b3JhcmllcyBhcmUgZmluYWxpemVkCisgICAgIGxvY2FsbHkgcmF0aGVyIHRo YW4gb24gZXhpdGluZyB0aGUgZW5jbG9zaW5nIHNjb3BlLiAgKi8KKyAgaWYg KCFjb21wb25lbnRfYXNzaWdubWVudF9sZXZlbCkKKyAgICB7CisgICAgICBu cyA9IGdmY19idWlsZF9ibG9ja19ucyAobnMpOworICAgICAgdG1wX2NvZGUg PSBnZmNfZ2V0X2NvZGUgKEVYRUNfTk9QKTsKKyAgICAgICp0bXBfY29kZSA9 ICoqY29kZTsKKyAgICAgIHRtcF9jb2RlLT5uZXh0ID0gTlVMTDsKKyAgICAg ICgqY29kZSktPm9wID0gRVhFQ19CTE9DSzsKKyAgICAgICgqY29kZSktPmV4 dC5ibG9jay5ucyA9IG5zOworICAgICAgKCpjb2RlKS0+ZXh0LmJsb2NrLmFz c29jID0gTlVMTDsKKyAgICAgICgqY29kZSktPmV4cHIxID0gKCpjb2RlKS0+ ZXhwcjIgPSBOVUxMOworICAgICAgbnMtPmNvZGUgPSB0bXBfY29kZTsKKyAg ICAgIGNvZGUgPSAmbnMtPmNvZGU7CisgICAgfQorCiAgIGNvbXBvbmVudF9h c3NpZ25tZW50X2xldmVsKys7CgogICAvKiBDcmVhdGUgYSB0ZW1wb3Jhcnkg c28gdGhhdCBmdW5jdGlvbnMgZ2V0IGNhbGxlZCBvbmx5IG9uY2UuICAqLwog ICBpZiAoKCpjb2RlKS0+ZXhwcjItPmV4cHJfdHlwZSAhPSBFWFBSX1ZBUklB QkxFCiAgICAgICAmJiAoKmNvZGUpLT5leHByMi0+ZXhwcl90eXBlICE9IEVY UFJfQ09OU1RBTlQpCiAgICAgewotICAgICAgZ2ZjX2V4cHIgKnRtcF9leHBy OwotCiAgICAgICAvKiBBc3NpZ24gdGhlIHJocyB0byB0aGUgdGVtcG9yYXJ5 LiAgKi8KICAgICAgIHRtcF9leHByID0gZ2V0X3RlbXBfZnJvbV9leHByICgo KmNvZGUpLT5leHByMSwgbnMpOwogICAgICAgdGhpc19jb2RlID0gYnVpbGRf YXNzaWdubWVudCAoRVhFQ19BU1NJR04sCiAJCQkJICAgIHRtcF9leHByLCAo KmNvZGUpLT5leHByMiwKIAkJCQkgICAgTlVMTCwgTlVMTCwgKCpjb2RlKS0+ bG9jKTsKKyAgICAgIHRoaXNfY29kZS0+ZXhwcjItPm11c3RfZmluYWxpemUg PSAxOwogICAgICAgLyogQWRkIHRoZSBjb2RlIGFuZCBzdWJzdGl0dXRlIHRo ZSByaHMgZXhwcmVzc2lvbi4gICovCiAgICAgICBhZGRfY29kZV90b19jaGFp biAoJnRoaXNfY29kZSwgJnRtcF9oZWFkLCAmdG1wX3RhaWwpOwogICAgICAg Z2ZjX2ZyZWVfZXhwciAoKCpjb2RlKS0+ZXhwcjIpOwpAQCAtMTE1NTUsNiAr MTE2NjUsOCBAQCBnZW5lcmF0ZV9jb21wb25lbnRfYXNzaWdubWVudHMgKGdm Y19jb2RlICoqY29kZSwgZ2ZjX25hbWVzcGFjZSAqbnMpCiAgICAgIHRvIHRo ZSBmaW5hbCByZXN1bHQgYWxyZWFkeSBkb2VzIHRoaXMuICAqLwogICBpZiAo KCpjb2RlKS0+ZXhwcjEtPnN5bXRyZWUtPm4uc3ltLT5uYW1lWzJdICE9ICdA JykKICAgICB7CisgICAgICBpZiAoZmluYWxpemFibGVfbGhzKQorCSgqY29k ZSktPmV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMTsKICAgICAgIHRoaXNfY29k ZSA9IGJ1aWxkX2Fzc2lnbm1lbnQgKEVYRUNfQVNTSUdOLAogCQkJCSAgICAo KmNvZGUpLT5leHByMSwgKCpjb2RlKS0+ZXhwcjIsCiAJCQkJICAgIE5VTEws IE5VTEwsICgqY29kZSktPmxvYyk7CkBAIC0xMTU2NCwyNiArMTE2NzYsNDIg QEAgZ2VuZXJhdGVfY29tcG9uZW50X2Fzc2lnbm1lbnRzIChnZmNfY29kZSAq KmNvZGUsIGdmY19uYW1lc3BhY2UgKm5zKQogICBjb21wMSA9ICgqY29kZSkt PmV4cHIxLT50cy51LmRlcml2ZWQtPmNvbXBvbmVudHM7CiAgIGNvbXAyID0g KCpjb2RlKS0+ZXhwcjItPnRzLnUuZGVyaXZlZC0+Y29tcG9uZW50czsKCi0g IHQxID0gTlVMTDsKICAgZm9yICg7IGNvbXAxOyBjb21wMSA9IGNvbXAxLT5u ZXh0LCBjb21wMiA9IGNvbXAyLT5uZXh0KQogICAgIHsKICAgICAgIGJvb2wg aW5vdXQgPSBmYWxzZTsKKyAgICAgIGJvb2wgZmluYWxpemFibGVfb3V0ID0g ZmFsc2U7CgogICAgICAgLyogVGhlIGludHJpbnNpYyBhc3NpZ25tZW50IGRv ZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBwb2ludGVycwogCSBvZiBhbGwga2lu ZHMgYW5kIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMuICAqLwogICAgICAgaWYg KCFnZmNfYnRfc3RydWN0IChjb21wMS0+dHMudHlwZSkKLQkgIHx8IGNvbXAx LT5hdHRyLnBvaW50ZXIKLQkgIHx8IGNvbXAxLT5hdHRyLmFsbG9jYXRhYmxl CisJICB8fCAoY29tcDEtPmF0dHIucG9pbnRlciAmJiAhZ2ZjX21heV9iZV9m aW5hbGl6ZWQgKGNvbXAxLT50cykpCiAJICB8fCBjb21wMS0+YXR0ci5wcm9j X3BvaW50ZXJfY29tcAogCSAgfHwgY29tcDEtPmF0dHIuY2xhc3NfcG9pbnRl cgogCSAgfHwgY29tcDEtPmF0dHIucHJvY19wb2ludGVyKQogCWNvbnRpbnVl OwoKKyAgICAgIC8qIERvIHRoZSBleHBsaWNpdCBwb2ludGVyIGFzc2lnbm1l bnQgdG8gZmluYWxpemUgdGhlIHRhcmdldC4gICovCisgICAgICBpZiAoY29t cDEtPmF0dHIucG9pbnRlcikKKwl7CisJICB0aGlzX2NvZGUgPSBidWlsZF9h c3NpZ25tZW50IChFWEVDX1BPSU5URVJfQVNTSUdOLAorCQkJCQkoKmNvZGUp LT5leHByMSwgKCpjb2RlKS0+ZXhwcjIsCisJCQkJCWNvbXAxLCBjb21wMiwg KCpjb2RlKS0+bG9jKTsKKwkgIGFkZF9jb2RlX3RvX2NoYWluICgmdGhpc19j b2RlLCAmaGVhZCwgJnRhaWwpOworCSAgY29udGludWU7CisJfQorCiAgICAg ICAvKiBNYWtlIGFuIGFzc2lnbm1lbnQgZm9yIHRoaXMgY29tcG9uZW50LiAg Ki8KICAgICAgIHRoaXNfY29kZSA9IGJ1aWxkX2Fzc2lnbm1lbnQgKEVYRUNf QVNTSUdOLAogCQkJCSAgICAoKmNvZGUpLT5leHByMSwgKCpjb2RlKS0+ZXhw cjIsCiAJCQkJICAgIGNvbXAxLCBjb21wMiwgKCpjb2RlKS0+bG9jKTsKCisg ICAgICBpZiAoY29tcDEtPmF0dHIuYWxsb2NhdGFibGUKKwkgICYmIGNvbXAx LT50cy50eXBlICE9IEJUX0RFUklWRUQpCisJeworCSAgYWRkX2NvZGVfdG9f Y2hhaW4gKCZ0aGlzX2NvZGUsICZoZWFkLCAmdGFpbCk7CisJICBjb250aW51 ZTsKKwl9CisKICAgICAgIC8qIENvbnZlcnQgdGhlIGFzc2lnbm1lbnQgaWYg dGhlcmUgaXMgYSBkZWZpbmVkIGFzc2lnbm1lbnQgZm9yCiAJIHRoaXMgdHlw ZS4gIE90aGVyd2lzZSwgdXNpbmcgdGhlIGNhbGwgZnJvbSBnZmNfcmVzb2x2 ZV9jb2RlLAogCSByZWN1cnNlIGludG8gaXRzIGNvbXBvbmVudHMuICAqLwpA QCAtMTE2MTEsOCArMTE3MzksMTMgQEAgZ2VuZXJhdGVfY29tcG9uZW50X2Fz c2lnbm1lbnRzIChnZmNfY29kZSAqKmNvZGUsIGdmY19uYW1lc3BhY2UgKm5z KQogCSAgICAgYSB0ZW1wb3JhcnkgbXVzdCBiZSBnZW5lcmF0ZWQgYW5kIHVz ZWQgaW5zdGVhZC4gICovCiAJICByc3ltID0gdGhpc19jb2RlLT5yZXNvbHZl ZF9zeW07CiAJICBkdW1teV9hcmdzID0gZ2ZjX3N5bV9nZXRfZHVtbXlfYXJn cyAocnN5bSk7Ci0JICBpZiAoZHVtbXlfYXJncwotCSAgICAgICYmIGR1bW15 X2FyZ3MtPnN5bS0+YXR0ci5pbnRlbnQgPT0gSU5URU5UX0lOT1VUKQorCSAg ZmluYWxpemFibGVfb3V0ID0gZ2ZjX21heV9iZV9maW5hbGl6ZWQgKGNvbXAx LT50cykKKwkJCSAgICAmJiBkdW1teV9hcmdzCisJCQkgICAgJiYgZHVtbXlf YXJncy0+c3ltLT5hdHRyLmludGVudCA9PSBJTlRFTlRfT1VUOworCSAgaW5v dXQgPSBkdW1teV9hcmdzCisJCSAgJiYgZHVtbXlfYXJncy0+c3ltLT5hdHRy LmludGVudCA9PSBJTlRFTlRfSU5PVVQ7CisJICBpZiAoKGlub3V0IHx8IGZp bmFsaXphYmxlX291dCkKKwkgICAgICAmJiAhY29tcDEtPmF0dHIuYWxsb2Nh dGFibGUpCiAJICAgIHsKIAkgICAgICBnZmNfY29kZSAqdGVtcF9jb2RlOwog CSAgICAgIGlub3V0ID0gdHJ1ZTsKQEAgLTExNjIxLDcgKzExNzU0LDExIEBA IGdlbmVyYXRlX2NvbXBvbmVudF9hc3NpZ25tZW50cyAoZ2ZjX2NvZGUgKipj b2RlLCBnZmNfbmFtZXNwYWNlICpucykKIAkJIGl0IGF0IHRoZSBoZWFkIG9m IHRoZSBnZW5lcmF0ZWQgY29kZS4gICovCiAJICAgICAgaWYgKCF0MSkKIAkJ ewotCQkgIHQxID0gZ2V0X3RlbXBfZnJvbV9leHByICgoKmNvZGUpLT5leHBy MSwgbnMpOworCQkgIGdmY19uYW1lc3BhY2UgKnRtcF9ucyA9IG5zOworCQkg IGlmIChucy0+cGFyZW50ICYmIGdmY19tYXlfYmVfZmluYWxpemVkIChjb21w MS0+dHMpKQorCQkgICAgdG1wX25zID0gKCpjb2RlKS0+ZXhwcjEtPnN5bXRy ZWUtPm4uc3ltLT5uczsKKwkJICB0MSA9IGdldF90ZW1wX2Zyb21fZXhwciAo KCpjb2RlKS0+ZXhwcjEsIHRtcF9ucyk7CisJCSAgdDEtPnN5bXRyZWUtPm4u c3ltLT5hdHRyLmFydGlmaWNpYWwgPSAxOwogCQkgIHRlbXBfY29kZSA9IGJ1 aWxkX2Fzc2lnbm1lbnQgKEVYRUNfQVNTSUdOLAogCQkJCQkJdDEsICgqY29k ZSktPmV4cHIxLAogCQkJCU5VTEwsIE5VTEwsICgqY29kZSktPmxvYyk7CkBA IC0xMTY4OCwxNSArMTE4MjUsMjcgQEAgZ2VuZXJhdGVfY29tcG9uZW50X2Fz c2lnbm1lbnRzIChnZmNfY29kZSAqKmNvZGUsIGdmY19uYW1lc3BhY2UgKm5z KQogCSAgdGhpc19jb2RlID0gTlVMTDsKIAkgIGNvbnRpbnVlOwogCX0KKyAg ICAgIGVsc2UKKwl7CisJICAvKiBSZXNvbHV0aW9uIGhhcyBleHBhbmRlZCBh biBhc3NpZ25tZW50IG9mIGEgZGVyaXZlZCB0eXBlIHdpdGgKKwkgICAgIGRl ZmluZWQgYXNzaWduZWQgY29tcG9uZW50cy4gIFJlbW92ZSB0aGUgcmVkdW5k YW50LCBsZWFkaW5nCisJICAgICBhc3NpZ25tZW50LiAgKi8KKwkgIGdjY19h c3NlcnQgKHRoaXNfY29kZS0+b3AgPT0gRVhFQ19BU1NJR04pOworCSAgZ2Zj X2NvZGUgKnRtcCA9IHRoaXNfY29kZTsKKwkgIHRoaXNfY29kZSA9IHRoaXNf Y29kZS0+bmV4dDsKKwkgIHRtcC0+bmV4dCA9IE5VTEw7CisJICBnZmNfZnJl ZV9zdGF0ZW1lbnRzICh0bXApOworCX0KCiAgICAgICBhZGRfY29kZV90b19j aGFpbiAoJnRoaXNfY29kZSwgJmhlYWQsICZ0YWlsKTsKCi0gICAgICBpZiAo dDEgJiYgaW5vdXQpCisgICAgICBpZiAodDEgJiYgKGlub3V0IHx8IGZpbmFs aXphYmxlX291dCkpCiAJewogCSAgLyogVHJhbnNmZXIgdGhlIHZhbHVlIHRv IHRoZSBmaW5hbCByZXN1bHQuICAqLwogCSAgdGhpc19jb2RlID0gYnVpbGRf YXNzaWdubWVudCAoRVhFQ19BU1NJR04sCiAJCQkJCSgqY29kZSktPmV4cHIx LCB0MSwKIAkJCQkJY29tcDEsIGNvbXAyLCAoKmNvZGUpLT5sb2MpOworCSAg dGhpc19jb2RlLT5leHByMS0+bXVzdF9maW5hbGl6ZSA9IDA7CiAJICBhZGRf Y29kZV90b19jaGFpbiAoJnRoaXNfY29kZSwgJmhlYWQsICZ0YWlsKTsKIAl9 CiAgICAgfQpAQCAtMTE3MDksOCArMTE4NTgsOCBAQCBnZW5lcmF0ZV9jb21w b25lbnRfYXNzaWdubWVudHMgKGdmY19jb2RlICoqY29kZSwgZ2ZjX25hbWVz cGFjZSAqbnMpCiAgICAgICB0bXBfaGVhZCA9IHRtcF90YWlsID0gTlVMTDsK ICAgICB9CgotICAvLyBJZiB3ZSBkaWQgYSBwb2ludGVyIGFzc2lnbm1lbnQg LSB0aHVzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBMSFMgaXMKLSAg Ly8gbm90IGFjY2lkZW50YWxseSBkZWFsbG9jYXRlZC4gSGVuY2UsIG51bGxp ZnkgdDEuCisgIC8qIElmIHdlIGRpZCBhIHBvaW50ZXIgYXNzaWdubWVudCAt IHRodXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIExIUyBpcworICAg ICBub3QgYWNjaWRlbnRhbGx5IGRlYWxsb2NhdGVkLiBIZW5jZSwgbnVsbGlm eSB0MS4gICovCiAgIGlmICh0MSAmJiAoKmNvZGUpLT5leHByMS0+c3ltdHJl ZS0+bi5zeW0tPmF0dHIuYWxsb2NhdGFibGUKICAgICAgICYmIGdmY19leHBy X2F0dHIgKCgqY29kZSktPmV4cHIxKS5hbGxvY2F0YWJsZSkKICAgICB7CkBA IC0xMTczMSw2ICsxMTg4MCwxOCBAQCBnZW5lcmF0ZV9jb21wb25lbnRfYXNz aWdubWVudHMgKGdmY19jb2RlICoqY29kZSwgZ2ZjX25hbWVzcGFjZSAqbnMp CiAgICAgICB0YWlsID0gYmxvY2s7CiAgICAgfQoKKyAgY29tcG9uZW50X2Fz c2lnbm1lbnRfbGV2ZWwtLTsKKworICAvKiBNYWtlIGFuIGV4cGxpY2l0IGZp bmFsIGNhbGwgZm9yIHRoZSBmdW5jdGlvbiByZXN1bHQuICAqLworICBpZiAo dG1wX2V4cHIpCisgICAgZ2VuZXJhdGVfZmluYWxfY2FsbCAodG1wX2V4cHIs ICZoZWFkLCAmdGFpbCk7CisKKyAgaWYgKHRtcF9jb2RlKQorICAgIHsKKyAg ICAgIG5zLT5jb2RlID0gaGVhZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisK ICAgLyogTm93IGF0dGFjaCB0aGUgcmVtYWluaW5nIGNvZGUgY2hhaW4gdG8g dGhlIGlucHV0IGNvZGUuICBTdGVwIG9uCiAgICAgIHRvIHRoZSBlbmQgb2Yg dGhlIG5ldyBjb2RlIHNpbmNlIHJlc29sdXRpb24gaXMgY29tcGxldGUuICAq LwogICBnY2NfYXNzZXJ0ICgoKmNvZGUpLT5vcCA9PSBFWEVDX0FTU0lHTik7 CkBAIC0xMTc0Myw4ICsxMTkwNCw2IEBAIGdlbmVyYXRlX2NvbXBvbmVudF9h c3NpZ25tZW50cyAoZ2ZjX2NvZGUgKipjb2RlLCBnZmNfbmFtZXNwYWNlICpu cykKICAgaWYgKGhlYWQgIT0gdGFpbCkKICAgICBmcmVlIChoZWFkKTsKICAg KmNvZGUgPSB0YWlsOwotCi0gIGNvbXBvbmVudF9hc3NpZ25tZW50X2xldmVs LS07CiB9CgoKQEAgLTEyMTY0LDYgKzEyMzIzLDE0IEBAIHN0YXJ0OgogCSAg ICAgICYmIGNvZGUtPmV4cHIxLT50cy51LmRlcml2ZWQKIAkgICAgICAmJiBj b2RlLT5leHByMS0+dHMudS5kZXJpdmVkLT5hdHRyLmRlZmluZWRfYXNzaWdu X2NvbXApCiAJICAgIGdlbmVyYXRlX2NvbXBvbmVudF9hc3NpZ25tZW50cyAo JmNvZGUsIG5zKTsKKwkgIGVsc2UgaWYgKGNvZGUtPm9wID09IEVYRUNfQVNT SUdOKQorCSAgICB7CisJICAgICAgaWYgKGdmY19tYXlfYmVfZmluYWxpemVk IChjb2RlLT5leHByMS0+dHMpKQorCQljb2RlLT5leHByMS0+bXVzdF9maW5h bGl6ZSA9IDE7CisJICAgICAgaWYgKGNvZGUtPmV4cHIyLT5leHByX3R5cGUg PT0gRVhQUl9BUlJBWQorCQkgICYmIGdmY19tYXlfYmVfZmluYWxpemVkIChj b2RlLT5leHByMi0+dHMpKQorCQljb2RlLT5leHByMi0+bXVzdF9maW5hbGl6 ZSA9IDE7CisJICAgIH0KCiAJICBicmVhazsKCkBAIC0xMzc0MSw2ICsxMzkw OCwxNSBAQCBnZmNfcmVzb2x2ZV9maW5hbGl6ZXJzIChnZmNfc3ltYm9sKiBk ZXJpdmVkLCBib29sICpmaW5hbGl6YWJsZSkKIAl9CiAgICAgICBhcmcgPSBk dW1teV9hcmdzLT5zeW07CgorICAgICAgaWYgKGFyZy0+YXMgJiYgYXJnLT5h cy0+dHlwZSA9PSBBU19BU1NVTUVEX1JBTksKKwkgICYmICgobGlzdCAhPSBk ZXJpdmVkLT5mMmtfZGVyaXZlZC0+ZmluYWxpemVycykgfHwgbGlzdC0+bmV4 dCkpCisJeworCSAgZ2ZjX2Vycm9yICgiRklOQUwgcHJvY2VkdXJlIGF0ICVM IHdpdGggYXNzdW1lZCByYW5rIGFyZ3VtZW50IG11c3QgIgorCQkgICAgICJi ZSB0aGUgb25seSBmaW5hbGl6ZXIgd2l0aCB0aGUgc2FtZSBraW5kL3R5cGUg IgorCQkgICAgICIoRjIwMTg6IEM3OTApIiwgJmxpc3QtPndoZXJlKTsKKwkg IGdvdG8gZXJyb3I7CisJfQorCiAgICAgICAvKiBUaGlzIGFyZ3VtZW50IG11 c3QgYmUgb2Ygb3VyIHR5cGUuICAqLwogICAgICAgaWYgKGFyZy0+dHMudHlw ZSAhPSBCVF9ERVJJVkVEIHx8IGFyZy0+dHMudS5kZXJpdmVkICE9IGRlcml2 ZWQpCiAJewpAQCAtMTM4NDEsNyArMTQwMTcsOCBAQCBlcnJvcjoKICAgaWYg KHdhcm5fc3VycHJpc2luZyAmJiBkZXJpdmVkLT5mMmtfZGVyaXZlZC0+Zmlu YWxpemVycyAmJiAhc2Vlbl9zY2FsYXIpCiAgICAgZ2ZjX3dhcm5pbmcgKE9Q VF9Xc3VycHJpc2luZywKIAkJICJPbmx5IGFycmF5IEZJTkFMIHByb2NlZHVy ZXMgZGVjbGFyZWQgZm9yIGRlcml2ZWQgdHlwZSAlcXMiCi0JCSAiIGRlZmlu ZWQgYXQgJUwsIHN1Z2dlc3QgYWxzbyBzY2FsYXIgb25lIiwKKwkJICIgZGVm aW5lZCBhdCAlTCwgc3VnZ2VzdCBhbHNvIHNjYWxhciBvbmUgdW5sZXNzIGFu IGFzc3VtZWQiCisJCSAiIHJhbmsgZmluYWxpemVyIGhhcyBiZWVuIGRlY2xh cmVkIiwKIAkJIGRlcml2ZWQtPm5hbWUsICZkZXJpdmVkLT5kZWNsYXJlZF9h dCk7CgogICB2dGFiID0gZ2ZjX2ZpbmRfZGVyaXZlZF92dGFiIChkZXJpdmVk KTsKQEAgLTE0NTczLDcgKzE0NzUwLDYgQEAgY2hlY2tfZGVmaW5lZF9hc3Np Z25tZW50cyAoZ2ZjX3N5bWJvbCAqZGVyaXZlZCkKICAgICB7CiAgICAgICBp ZiAoIWdmY19idF9zdHJ1Y3QgKGMtPnRzLnR5cGUpCiAJICB8fCBjLT5hdHRy LnBvaW50ZXIKLQkgIHx8IGMtPmF0dHIuYWxsb2NhdGFibGUKIAkgIHx8IGMt PmF0dHIucHJvY19wb2ludGVyX2NvbXAKIAkgIHx8IGMtPmF0dHIuY2xhc3Nf cG9pbnRlcgogCSAgfHwgYy0+YXR0ci5wcm9jX3BvaW50ZXIpCkBAIC0xNDU4 Nyw2ICsxNDc2Myw5IEBAIGNoZWNrX2RlZmluZWRfYXNzaWdubWVudHMgKGdm Y19zeW1ib2wgKmRlcml2ZWQpCiAJICByZXR1cm47CiAJfQoKKyAgICAgIGlm IChjLT5hdHRyLmFsbG9jYXRhYmxlKQorCWNvbnRpbnVlOworCiAgICAgICBj aGVja19kZWZpbmVkX2Fzc2lnbm1lbnRzIChjLT50cy51LmRlcml2ZWQpOwog ICAgICAgaWYgKGMtPnRzLnUuZGVyaXZlZC0+YXR0ci5kZWZpbmVkX2Fzc2ln bl9jb21wKQogCXsKQEAgLTE1MjYxLDcgKzE1NDQwLDcgQEAgcmVzb2x2ZV9m bF9kZXJpdmVkIChnZmNfc3ltYm9sICpzeW0pCiAgICAgICAmJiBzeW0tPm5z LT5wcm9jX25hbWUKICAgICAgICYmIHN5bS0+bnMtPnByb2NfbmFtZS0+YXR0 ci5mbGF2b3IgPT0gRkxfTU9EVUxFCiAgICAgICAmJiBzeW0tPmF0dHIuYWNj ZXNzICE9IEFDQ0VTU19QUklWQVRFCi0gICAgICAmJiAhKHN5bS0+YXR0ci51 c2VfYXNzb2MgfHwgc3ltLT5hdHRyLnZ0eXBlIHx8IHN5bS0+YXR0ci5wZHRf dGVtcGxhdGUpKQorICAgICAgJiYgIShzeW0tPmF0dHIudnR5cGUgfHwgc3lt LT5hdHRyLnBkdF90ZW1wbGF0ZSkpCiAgICAgewogICAgICAgZ2ZjX3N5bWJv bCAqdnRhYiA9IGdmY19maW5kX2Rlcml2ZWRfdnRhYiAoc3ltKTsKICAgICAg IGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKHZ0YWIpOwpAQCAtMTYzNTcsNiAr MTY1MzYsMTUgQEAgcmVzb2x2ZV9zeW1ib2wgKGdmY19zeW1ib2wgKnN5bSkK CiAgIGlmIChzeW0tPnBhcmFtX2xpc3QpCiAgICAgcmVzb2x2ZV9wZHQgKHN5 bSk7CisKKyAgaWYgKCFzeW0tPmF0dHIucmVmZXJlbmNlZAorICAgICAgJiYg KHN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUyB8fCBzeW0tPnRzLnR5cGUgPT0g QlRfREVSSVZFRCkpCisgICAgeworICAgICAgZ2ZjX2V4cHIgKmZpbmFsX2V4 cHIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChzeW0pOworICAgICAgaWYg KGdmY19pc19maW5hbGl6YWJsZSAoZmluYWxfZXhwci0+dHMudS5kZXJpdmVk LCBOVUxMKSkKKwlnZmNfc2V0X3N5bV9yZWZlcmVuY2VkIChzeW0pOworICAg ICAgZ2ZjX2ZyZWVfZXhwciAoZmluYWxfZXhwcik7CisgICAgfQogfQoKCmRp ZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYyBiL2djYy9m b3J0cmFuL3RyYW5zLWFycmF5LmNjCmluZGV4IDYzYmQxYWM1NzNhLi43YmMw ZTAzZGQwZCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXku Y2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKQEAgLTk5NCw5 ICs5OTQsOSBAQCBnZmNfZ2V0X2FycmF5X3NwYW4gKHRyZWUgZGVzYywgZ2Zj X2V4cHIgKmV4cHIpCiAgICAgICBpZiAodG1wICYmIFRSRUVfQ09ERSAodG1w KSA9PSBBUlJBWV9UWVBFICYmIFRZUEVfU1RSSU5HX0ZMQUcgKHRtcCkpCiAJ ewogCSAgZ2NjX2Fzc2VydCAoZXhwci0+dHMudHlwZSA9PSBCVF9DSEFSQUNU RVIpOwotCisKIAkgIHRtcCA9IGdmY19nZXRfY2hhcmFjdGVyX2xlbl9pbl9i eXRlcyAodG1wKTsKLQorCiAJICBpZiAodG1wID09IE5VTExfVFJFRSB8fCBp bnRlZ2VyX3plcm9wICh0bXApKQogCSAgICB7CiAJICAgICAgdHJlZSBiczsK QEAgLTEwMDcsNyArMTAwNyw3IEBAIGdmY19nZXRfYXJyYXlfc3BhbiAodHJl ZSBkZXNjLCBnZmNfZXhwciAqZXhwcikKIAkgICAgICB0bXAgPSBmb2xkX2J1 aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNVUxUX0VYUFIsCiAJCQkJICAg ICBnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wLCBicyk7CiAJICAgIH0KLQor CiAJICB0bXAgPSAodG1wICYmICFpbnRlZ2VyX3plcm9wICh0bXApKQogCSAg ICA/IChmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRleF90eXBlLCB0bXAp KSA6IChOVUxMX1RSRUUpOwogCX0KQEAgLTIwMjYsMTAgKzIwMjYsMTEgQEAg Z2ZjX3RyYW5zX2FycmF5X2NvbnN0cnVjdG9yX3N1YmFycmF5IChzdG10Ymxv Y2tfdCAqIHBibG9jaywKICAgIGZvciB0aGUgZHluYW1pYyBwYXJ0cyBtdXN0 IGJlIGFsbG9jYXRlZCB1c2luZyByZWFsbG9jLiAgKi8KCiBzdGF0aWMgdm9p ZAotZ2ZjX3RyYW5zX2FycmF5X2NvbnN0cnVjdG9yX3ZhbHVlIChzdG10Ymxv Y2tfdCAqIHBibG9jaywgdHJlZSB0eXBlLAotCQkJCSAgIHRyZWUgZGVzYywg Z2ZjX2NvbnN0cnVjdG9yX2Jhc2UgYmFzZSwKLQkJCQkgICB0cmVlICogcG9m ZnNldCwgdHJlZSAqIG9mZnNldHZhciwKLQkJCQkgICBib29sIGR5bmFtaWMp CitnZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKHN0bXRibG9j a190ICogcGJsb2NrLAorCQkJCSAgIHN0bXRibG9ja190ICogZmluYWxibG9j aywKKwkJCQkgICB0cmVlIHR5cGUsIHRyZWUgZGVzYywKKwkJCQkgICBnZmNf Y29uc3RydWN0b3JfYmFzZSBiYXNlLCB0cmVlICogcG9mZnNldCwKKwkJCQkg ICB0cmVlICogb2Zmc2V0dmFyLCBib29sIGR5bmFtaWMpCiB7CiAgIHRyZWUg dG1wOwogICB0cmVlIHN0YXJ0ID0gTlVMTF9UUkVFOwpAQCAtMjAzOSw2ICsy MDQwLDggQEAgZ2ZjX3RyYW5zX2FycmF5X2NvbnN0cnVjdG9yX3ZhbHVlIChz dG10YmxvY2tfdCAqIHBibG9jaywgdHJlZSB0eXBlLAogICBnZmNfc2Ugc2U7 CiAgIG1wel90IHNpemU7CiAgIGdmY19jb25zdHJ1Y3RvciAqYzsKKyAgZ2Zj X3R5cGVzcGVjIHRzOworICBpbnQgY3RyID0gMDsKCiAgIHRyZWUgc2hhZG93 X2xvb3B2YXIgPSBOVUxMX1RSRUU7CiAgIGdmY19zYXZlZF92YXIgc2F2ZWRf bG9vcHZhcjsKQEAgLTIwNDYsNiArMjA0OSw3IEBAIGdmY190cmFuc19hcnJh eV9jb25zdHJ1Y3Rvcl92YWx1ZSAoc3RtdGJsb2NrX3QgKiBwYmxvY2ssIHRy ZWUgdHlwZSwKICAgbXB6X2luaXQgKHNpemUpOwogICBmb3IgKGMgPSBnZmNf Y29uc3RydWN0b3JfZmlyc3QgKGJhc2UpOyBjOyBjID0gZ2ZjX2NvbnN0cnVj dG9yX25leHQgKGMpKQogICAgIHsKKyAgICAgIGN0cisrOwogICAgICAgLyog SWYgdGhpcyBpcyBhbiBpdGVyYXRvciBvciBhbiBhcnJheSwgdGhlIG9mZnNl dCBtdXN0IGJlIGEgdmFyaWFibGUuICAqLwogICAgICAgaWYgKChjLT5pdGVy YXRvciB8fCBjLT5leHByLT5yYW5rID4gMCkgJiYgSU5URUdFUl9DU1RfUCAo KnBvZmZzZXQpKQogCWdmY19wdXRfb2Zmc2V0X2ludG9fdmFyIChwYmxvY2ss IHBvZmZzZXQsIG9mZnNldHZhcik7CkBAIC0yMDkxLDggKzIwOTUsOCBAQCBn ZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKHN0bXRibG9ja190 ICogcGJsb2NrLCB0cmVlIHR5cGUsCiAgICAgICBpZiAoYy0+ZXhwci0+ZXhw cl90eXBlID09IEVYUFJfQVJSQVkpCiAJewogCSAgLyogQXJyYXkgY29uc3Ry dWN0b3JzIGNhbiBiZSBuZXN0ZWQuICAqLwotCSAgZ2ZjX3RyYW5zX2FycmF5 X2NvbnN0cnVjdG9yX3ZhbHVlICgmYm9keSwgdHlwZSwgZGVzYywKLQkJCQkJ ICAgICBjLT5leHByLT52YWx1ZS5jb25zdHJ1Y3RvciwKKwkgIGdmY190cmFu c19hcnJheV9jb25zdHJ1Y3Rvcl92YWx1ZSAoJmJvZHksIGZpbmFsYmxvY2ss IHR5cGUsCisJCQkJCSAgICAgZGVzYywgYy0+ZXhwci0+dmFsdWUuY29uc3Ry dWN0b3IsCiAJCQkJCSAgICAgcG9mZnNldCwgb2Zmc2V0dmFyLCBkeW5hbWlj KTsKIAl9CiAgICAgICBlbHNlIGlmIChjLT5leHByLT5yYW5rID4gMCkKQEAg LTIyMDAsNiArMjIwNCw3IEBAIGdmY190cmFuc19hcnJheV9jb25zdHJ1Y3Rv cl92YWx1ZSAoc3RtdGJsb2NrX3QgKiBwYmxvY2ssIHRyZWUgdHlwZSwKICAg ICAgICAgICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZib2R5LCAqb2Zmc2V0dmFy LCAqcG9mZnNldCk7CiAgICAgICAgICAgICAgICpwb2Zmc2V0ID0gKm9mZnNl dHZhcjsKICAgICAgICAgICAgIH0KKwkgIHRzID0gYy0+ZXhwci0+dHM7CiAJ fQoKICAgICAgIC8qIFRoZSBmcm9udGVuZCBzaG91bGQgYWxyZWFkeSBoYXZl IGRvbmUgYW55IGV4cGFuc2lvbnMKQEAgLTIyOTIsNiArMjI5NywzNCBAQCBn ZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFsdWUgKHN0bXRibG9ja190 ICogcGJsb2NrLCB0cmVlIHR5cGUsCiAJICBnZmNfcmVzdG9yZV9zeW0gKGMt Pml0ZXJhdG9yLT52YXItPnN5bXRyZWUtPm4uc3ltLCAmc2F2ZWRfbG9vcHZh cik7CiAJfQogICAgIH0KKworICAvKiBGMjAwOCA0LjUuNi4zIHBhcmEgNTog SWYgYW4gZXhlY3V0YWJsZSBjb25zdHJ1Y3QgcmVmZXJlbmNlcyBhIHN0cnVj dHVyZQorICAgICBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1Y3Rvciwg dGhlIGVudGl0eSBjcmVhdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBpcworICAg ICBmaW5hbGl6ZWQgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoZSBpbm5lcm1vc3Qg ZXhlY3V0YWJsZSBjb25zdHJ1Y3QgY29udGFpbmluZworICAgICB0aGUgcmVm ZXJlbmNlLiBUaGlzLCBpbiBmYWN0LCB3YXMgbGF0ZXIgZGVsZXRlZCBieSB0 aGUgQ29tYmluZWQgVGVjaGljYWwKKyAgICAgQ29ycmlnZW5kYSAxIFRPIDQg Zm9yIGZvcnRyYW4gMjAwOCAoZjA4LzAwMTEpLgorCisgICAgIFRyYW5zbWl0 IGZpbmFsaXphdGlvbiBvZiB0aGlzIGNvbnN0cnVjdG9yIHRocm91Z2ggJ2Zp bmFsYmxvY2snLiAqLworICBpZiAoIWdmY19ub3RpZmljYXRpb25fc3RkIChH RkNfU1REX0YyMDE4X0RFTCkgJiYgZmluYWxibG9jayAhPSBOVUxMCisgICAg ICAmJiBnZmNfbWF5X2JlX2ZpbmFsaXplZCAodHMpCisgICAgICAmJiBjdHIg PiAwICYmIGRlc2MgIT0gTlVMTF9UUkVFCisgICAgICAmJiBHRkNfREVTQ1JJ UFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVzYykpKQorICAgIHsKKyAgICAg IHN5bWJvbF9hdHRyaWJ1dGUgYXR0cjsKKyAgICAgIGdmY19zZSBmc2U7Cisg ICAgICBnZmNfd2FybmluZyAoMCwgIlRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0 b3IgYXQgJUMgaGFzIGJlZW4iCisJCQkgIiBmaW5hbGl6ZWQuIFRoaXMgZmVh dHVyZSB3YXMgcmVtb3ZlZCBieSBmMDgvMDAxMS4iCisJCQkgIiBVc2UgLXN0 ZD1mMjAxOCBvciAtc3RkPWdudSB0byBlbGltaW5hdGUgdGhlIgorCQkJICIg ZmluYWxpemF0aW9uLiIpOworICAgICAgYXR0ci5wb2ludGVyID0gYXR0ci5h bGxvY2F0YWJsZSA9IDA7CisgICAgICBnZmNfaW5pdF9zZSAoJmZzZSwgTlVM TCk7CisgICAgICBmc2UuZXhwciA9IGRlc2M7CisgICAgICBnZmNfZmluYWxp emVfdHJlZV9leHByICgmZnNlLCB0cy51LmRlcml2ZWQsIGF0dHIsIDEpOwor ICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoZmluYWxibG9jaywgJmZz ZS5wcmUpOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoZmluYWxi bG9jaywgJmZzZS5maW5hbGJsb2NrKTsKKyAgICAgIGdmY19hZGRfYmxvY2tf dG9fYmxvY2sgKGZpbmFsYmxvY2ssICZmc2UucG9zdCk7CisgICAgfQorCiAg IG1wel9jbGVhciAoc2l6ZSk7CiB9CgpAQCAtMjczOCw2ICsyNzcxLDcgQEAg dHJhbnNfYXJyYXlfY29uc3RydWN0b3IgKGdmY19zcyAqIHNzLCBsb2N1cyAq IHdoZXJlKQogICBnZmNfc3MgKnM7CiAgIHRyZWUgbmVnX2xlbjsKICAgY2hh ciAqbXNnOworICBzdG10YmxvY2tfdCBmaW5hbGJsb2NrOwoKICAgLyogU2F2 ZSB0aGUgb2xkIHZhbHVlcyBmb3IgbmVzdGVkIGNoZWNraW5nLiAgKi8KICAg b2xkX2ZpcnN0X2xlbiA9IGZpcnN0X2xlbjsKQEAgLTI4OTcsOCArMjkzMSwx MiBAQCB0cmFuc19hcnJheV9jb25zdHJ1Y3RvciAoZ2ZjX3NzICogc3MsIGxv Y3VzICogd2hlcmUpCiAgIG9mZnNldHZhciA9IGdmY19jcmVhdGVfdmFyX25w IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgIm9mZnNldCIpOwogICBzdXBwcmVz c193YXJuaW5nIChvZmZzZXR2YXIpOwogICBUUkVFX1VTRUQgKG9mZnNldHZh cikgPSAwOwotICBnZmNfdHJhbnNfYXJyYXlfY29uc3RydWN0b3JfdmFsdWUg KCZvdXRlcl9sb29wLT5wcmUsIHR5cGUsIGRlc2MsIGMsCi0JCQkJICAgICAm b2Zmc2V0LCAmb2Zmc2V0dmFyLCBkeW5hbWljKTsKKworICBnZmNfaW5pdF9i bG9jayAoJmZpbmFsYmxvY2spOworICBnZmNfdHJhbnNfYXJyYXlfY29uc3Ry dWN0b3JfdmFsdWUgKCZvdXRlcl9sb29wLT5wcmUsCisJCQkJICAgICBleHBy LT5tdXN0X2ZpbmFsaXplID8gJmZpbmFsYmxvY2sgOiBOVUxMLAorCQkJCSAg ICAgdHlwZSwgZGVzYywgYywgJm9mZnNldCwgJm9mZnNldHZhciwKKwkJCQkg ICAgIGR5bmFtaWMpOwoKICAgLyogSWYgdGhlIGFycmF5IGdyb3dzIGR5bmFt aWNhbGx5LCB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGxvb3AgdmFyaWFibGUK ICAgICAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYXJyYXkncyBmaW5hbCB1cHBl ciBib3VuZC4gICovCkBAIC0yOTMzLDYgKzI5NzEsMTUgQEAgZmluaXNoOgog ICBmaXJzdF9sZW4gPSBvbGRfZmlyc3RfbGVuOwogICBmaXJzdF9sZW5fdmFs ID0gb2xkX2ZpcnN0X2xlbl92YWw7CiAgIHR5cGVzcGVjX2NoYXJhcnJheV9j dG9yID0gb2xkX3R5cGVzcGVjX2NoYXJhcnJheV9jdG9yOworCisgIC8qIEYy MDA4IDQuNS42LjMgcGFyYSA1OiBJZiBhbiBleGVjdXRhYmxlIGNvbnN0cnVj dCByZWZlcmVuY2VzIGEgc3RydWN0dXJlCisgICAgIGNvbnN0cnVjdG9yIG9y IGFycmF5IGNvbnN0cnVjdG9yLCB0aGUgZW50aXR5IGNyZWF0ZWQgYnkgdGhl IGNvbnN0cnVjdG9yIGlzCisgICAgIGZpbmFsaXplZCBhZnRlciBleGVjdXRp b24gb2YgdGhlIGlubmVybW9zdCBleGVjdXRhYmxlIGNvbnN0cnVjdCBjb250 YWluaW5nCisgICAgIHRoZSByZWZlcmVuY2UuICAqLworICBpZiAoKGV4cHIt PnRzLnR5cGUgPT0gQlRfREVSSVZFRCB8fCBleHByLT50cy50eXBlID09IEJU X0NMQVNTKQorICAgICAgICYmIGZpbmFsYmxvY2suaGVhZCAhPSBOVUxMX1RS RUUpCisgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmxvb3AtPnBvc3Qs ICZmaW5hbGJsb2NrKTsKKwogfQoKCkBAIC0zMTYxLDYgKzMyMDgsNyBAQCBn ZmNfYWRkX2xvb3Bfc3NfY29kZSAoZ2ZjX2xvb3BpbmZvICogbG9vcCwgZ2Zj X3NzICogc3MsIGJvb2wgc3Vic2NyaXB0LAogCSAgZ2ZjX2NvbnZfZXhwciAo JnNlLCBleHByKTsKIAkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZvdXRl cl9sb29wLT5wcmUsICZzZS5wcmUpOwogCSAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJm91dGVyX2xvb3AtPnBvc3QsICZzZS5wb3N0KTsKKwkgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZvdXRlcl9sb29wLT5wb3N0LCAmc2UuZmlu YWxibG9jayk7CiAJICBzc19pbmZvLT5zdHJpbmdfbGVuZ3RoID0gc2Uuc3Ry aW5nX2xlbmd0aDsKIAkgIGJyZWFrOwoKQEAgLTY0NTQsMjMgKzY1MDIsMjkg QEAgZ2ZjX3RyYW5zX2FycmF5X2NvYm91bmRzICh0cmVlIHR5cGUsIHN0bXRi bG9ja190ICogcGJsb2NrLAoKICAgZm9yIChkaW0gPSBhcy0+cmFuazsgZGlt IDwgYXMtPnJhbmsgKyBhcy0+Y29yYW5rOyBkaW0rKykKICAgICB7Ci0gICAg ICAvKiBFdmFsdWF0ZSBub24tY29uc3RhbnQgYXJyYXkgYm91bmQgZXhwcmVz c2lvbnMuICAqLworICAgICAgLyogRXZhbHVhdGUgbm9uLWNvbnN0YW50IGFy cmF5IGJvdW5kIGV4cHJlc3Npb25zLgorCSBGMjAwOCA0LjUuNi4zIHBhcmEg NjogSWYgYSBzcGVjaWZpY2F0aW9uIGV4cHJlc3Npb24gaW4gYSBzY29waW5n IHVuaXQKKwkgcmVmZXJlbmNlcyBhIGZ1bmN0aW9uLCB0aGUgcmVzdWx0IGlz IGZpbmFsaXplZCBiZWZvcmUgZXhlY3V0aW9uIG9mIHRoZQorCSBleGVjdXRh YmxlIGNvbnN0cnVjdHMgaW4gdGhlIHNjb3BpbmcgdW5pdC4KKwkgQWRkaW5n IHRoZSBmaW5hbGJsb2NrcyBlbmFibGVzIHRoaXMuICAqLwogICAgICAgbGJv dW5kID0gR0ZDX1RZUEVfQVJSQVlfTEJPVU5EICh0eXBlLCBkaW0pOwogICAg ICAgaWYgKGFzLT5sb3dlcltkaW1dICYmICFJTlRFR0VSX0NTVF9QIChsYm91 bmQpKQotICAgICAgICB7Ci0gICAgICAgICAgZ2ZjX2luaXRfc2UgKCZzZSwg TlVMTCk7Ci0gICAgICAgICAgZ2ZjX2NvbnZfZXhwcl90eXBlICgmc2UsIGFz LT5sb3dlcltkaW1dLCBnZmNfYXJyYXlfaW5kZXhfdHlwZSk7Ci0gICAgICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAmc2UucHJlKTsK LSAgICAgICAgICBnZmNfYWRkX21vZGlmeSAocGJsb2NrLCBsYm91bmQsIHNl LmV4cHIpOwotICAgICAgICB9CisJeworCSAgZ2ZjX2luaXRfc2UgKCZzZSwg TlVMTCk7CisJICBnZmNfY29udl9leHByX3R5cGUgKCZzZSwgYXMtPmxvd2Vy W2RpbV0sIGdmY19hcnJheV9pbmRleF90eXBlKTsKKwkgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKHBibG9jaywgJnNlLnByZSk7CisJICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrIChwYmxvY2ssICZzZS5maW5hbGJsb2NrKTsKKwkgIGdm Y19hZGRfbW9kaWZ5IChwYmxvY2ssIGxib3VuZCwgc2UuZXhwcik7CisJfQog ICAgICAgdWJvdW5kID0gR0ZDX1RZUEVfQVJSQVlfVUJPVU5EICh0eXBlLCBk aW0pOwogICAgICAgaWYgKGFzLT51cHBlcltkaW1dICYmICFJTlRFR0VSX0NT VF9QICh1Ym91bmQpKQotICAgICAgICB7Ci0gICAgICAgICAgZ2ZjX2luaXRf c2UgKCZzZSwgTlVMTCk7Ci0gICAgICAgICAgZ2ZjX2NvbnZfZXhwcl90eXBl ICgmc2UsIGFzLT51cHBlcltkaW1dLCBnZmNfYXJyYXlfaW5kZXhfdHlwZSk7 Ci0gICAgICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAm c2UucHJlKTsKLSAgICAgICAgICBnZmNfYWRkX21vZGlmeSAocGJsb2NrLCB1 Ym91bmQsIHNlLmV4cHIpOwotICAgICAgICB9CisJeworCSAgZ2ZjX2luaXRf c2UgKCZzZSwgTlVMTCk7CisJICBnZmNfY29udl9leHByX3R5cGUgKCZzZSwg YXMtPnVwcGVyW2RpbV0sIGdmY19hcnJheV9pbmRleF90eXBlKTsKKwkgIGdm Y19hZGRfYmxvY2tfdG9fYmxvY2sgKHBibG9jaywgJnNlLnByZSk7CisJICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChwYmxvY2ssICZzZS5maW5hbGJsb2Nr KTsKKwkgIGdmY19hZGRfbW9kaWZ5IChwYmxvY2ssIHVib3VuZCwgc2UuZXhw cik7CisJfQogICAgIH0KIH0KCkBAIC02NDk5LDIzICs2NTUzLDI5IEBAIGdm Y190cmFuc19hcnJheV9ib3VuZHMgKHRyZWUgdHlwZSwgZ2ZjX3N5bWJvbCAq IHN5bSwgdHJlZSAqIHBvZmZzZXQsCiAgIG9mZnNldCA9IGdmY19pbmRleF96 ZXJvX25vZGU7CiAgIGZvciAoZGltID0gMDsgZGltIDwgYXMtPnJhbms7IGRp bSsrKQogICAgIHsKLSAgICAgIC8qIEV2YWx1YXRlIG5vbi1jb25zdGFudCBh cnJheSBib3VuZCBleHByZXNzaW9ucy4gICovCisgICAgICAvKiBFdmFsdWF0 ZSBub24tY29uc3RhbnQgYXJyYXkgYm91bmQgZXhwcmVzc2lvbnMuCisJIEYy MDA4IDQuNS42LjMgcGFyYSA2OiBJZiBhIHNwZWNpZmljYXRpb24gZXhwcmVz c2lvbiBpbiBhIHNjb3BpbmcgdW5pdAorCSByZWZlcmVuY2VzIGEgZnVuY3Rp b24sIHRoZSByZXN1bHQgaXMgZmluYWxpemVkIGJlZm9yZSBleGVjdXRpb24g b2YgdGhlCisJIGV4ZWN1dGFibGUgY29uc3RydWN0cyBpbiB0aGUgc2NvcGlu ZyB1bml0LgorCSBBZGRpbmcgdGhlIGZpbmFsYmxvY2tzIGVuYWJsZXMgdGhp cy4gICovCiAgICAgICBsYm91bmQgPSBHRkNfVFlQRV9BUlJBWV9MQk9VTkQg KHR5cGUsIGRpbSk7CiAgICAgICBpZiAoYXMtPmxvd2VyW2RpbV0gJiYgIUlO VEVHRVJfQ1NUX1AgKGxib3VuZCkpCi0gICAgICAgIHsKLSAgICAgICAgICBn ZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKLSAgICAgICAgICBnZmNfY29udl9l eHByX3R5cGUgKCZzZSwgYXMtPmxvd2VyW2RpbV0sIGdmY19hcnJheV9pbmRl eF90eXBlKTsKLSAgICAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChw YmxvY2ssICZzZS5wcmUpOwotICAgICAgICAgIGdmY19hZGRfbW9kaWZ5IChw YmxvY2ssIGxib3VuZCwgc2UuZXhwcik7Ci0gICAgICAgIH0KKwl7CisJICBn ZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKwkgIGdmY19jb252X2V4cHJfdHlw ZSAoJnNlLCBhcy0+bG93ZXJbZGltXSwgZ2ZjX2FycmF5X2luZGV4X3R5cGUp OworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2NrLCAmc2UucHJl KTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKHBibG9jaywgJnNlLmZp bmFsYmxvY2spOworCSAgZ2ZjX2FkZF9tb2RpZnkgKHBibG9jaywgbGJvdW5k LCBzZS5leHByKTsKKwl9CiAgICAgICB1Ym91bmQgPSBHRkNfVFlQRV9BUlJB WV9VQk9VTkQgKHR5cGUsIGRpbSk7CiAgICAgICBpZiAoYXMtPnVwcGVyW2Rp bV0gJiYgIUlOVEVHRVJfQ1NUX1AgKHVib3VuZCkpCi0gICAgICAgIHsKLSAg ICAgICAgICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKLSAgICAgICAgICBn ZmNfY29udl9leHByX3R5cGUgKCZzZSwgYXMtPnVwcGVyW2RpbV0sIGdmY19h cnJheV9pbmRleF90eXBlKTsKLSAgICAgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrIChwYmxvY2ssICZzZS5wcmUpOwotICAgICAgICAgIGdmY19hZGRf bW9kaWZ5IChwYmxvY2ssIHVib3VuZCwgc2UuZXhwcik7Ci0gICAgICAgIH0K Kwl7CisJICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKwkgIGdmY19jb252 X2V4cHJfdHlwZSAoJnNlLCBhcy0+dXBwZXJbZGltXSwgZ2ZjX2FycmF5X2lu ZGV4X3R5cGUpOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAocGJsb2Nr LCAmc2UucHJlKTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKHBibG9j aywgJnNlLmZpbmFsYmxvY2spOworCSAgZ2ZjX2FkZF9tb2RpZnkgKHBibG9j aywgdWJvdW5kLCBzZS5leHByKTsKKwl9CiAgICAgICAvKiBUaGUgb2Zmc2V0 IG9mIHRoaXMgZGltZW5zaW9uLiAgb2Zmc2V0ID0gb2Zmc2V0IC0gbGJvdW5k ICogc3RyaWRlLiAgKi8KICAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAo aW5wdXRfbG9jYXRpb24sIE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5 cGUsCiAJCQkgICAgIGxib3VuZCwgc2l6ZSk7CkBAIC02NTI5LDE5ICs2NTg5 LDE5IEBAIGdmY190cmFuc19hcnJheV9ib3VuZHMgKHRyZWUgdHlwZSwgZ2Zj X3N5bWJvbCAqIHN5bSwgdHJlZSAqIHBvZmZzZXQsCiAJc3RyaWRlID0gR0ZD X1RZUEVfQVJSQVlfU0laRSAodHlwZSk7CgogICAgICAgaWYgKHVib3VuZCAh PSBOVUxMX1RSRUUgJiYgIShzdHJpZGUgJiYgSU5URUdFUl9DU1RfUCAoc3Ry aWRlKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBDYWxjdWxhdGUgc3Ry aWRlID0gc2l6ZSAqICh1Ym91bmQgKyAxIC0gbGJvdW5kKS4gICovCi0gICAg ICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwg TUlOVVNfRVhQUiwKKwl7CisJICAvKiBDYWxjdWxhdGUgc3RyaWRlID0gc2l6 ZSAqICh1Ym91bmQgKyAxIC0gbGJvdW5kKS4gICovCisJICB0bXAgPSBmb2xk X2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNSU5VU19FWFBSLAogCQkJ CSBnZmNfYXJyYXlfaW5kZXhfdHlwZSwKIAkJCQkgZ2ZjX2luZGV4X29uZV9u b2RlLCBsYm91bmQpOwotICAgICAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xv YyAoaW5wdXRfbG9jYXRpb24sIFBMVVNfRVhQUiwKKwkgIHRtcCA9IGZvbGRf YnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFBMVVNfRVhQUiwKIAkJCQkg Z2ZjX2FycmF5X2luZGV4X3R5cGUsIHVib3VuZCwgdG1wKTsKLSAgICAgICAg ICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNVUxU X0VYUFIsCisJICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0 aW9uLCBNVUxUX0VYUFIsCiAJCQkJIGdmY19hcnJheV9pbmRleF90eXBlLCBz aXplLCB0bXApOwotICAgICAgICAgIGlmIChzdHJpZGUpCi0gICAgICAgICAg ICBnZmNfYWRkX21vZGlmeSAocGJsb2NrLCBzdHJpZGUsIHRtcCk7Ci0gICAg ICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaWRlID0gZ2ZjX2V2YWx1YXRl X25vdyAodG1wLCBwYmxvY2spOworCSAgaWYgKHN0cmlkZSkKKwkgICAgZ2Zj X2FkZF9tb2RpZnkgKHBibG9jaywgc3RyaWRlLCB0bXApOworCSAgZWxzZQor CSAgICBzdHJpZGUgPSBnZmNfZXZhbHVhdGVfbm93ICh0bXAsIHBibG9jayk7 CgogCSAgLyogTWFrZSBzdXJlIHRoYXQgbmVnYXRpdmUgc2l6ZSBhcnJheXMg YXJlIHRyYW5zbGF0ZWQKIAkgICAgIHRvIGJlaW5nIHplcm8gc2l6ZS4gICov CkBAIC02NTUxLDcgKzY2MTEsNyBAQCBnZmNfdHJhbnNfYXJyYXlfYm91bmRz ICh0cmVlIHR5cGUsIGdmY19zeW1ib2wgKiBzeW0sIHRyZWUgKiBwb2Zmc2V0 LAogCQkJCSBnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wLAogCQkJCSBzdHJp ZGUsIGdmY19pbmRleF96ZXJvX25vZGUpOwogCSAgZ2ZjX2FkZF9tb2RpZnkg KHBibG9jaywgc3RyaWRlLCB0bXApOwotICAgICAgICB9CisJfQoKICAgICAg IHNpemUgPSBzdHJpZGU7CiAgICAgfQpAQCAtNzUzMSw3ICs3NTkxLDcgQEAg Z2ZjX2NvbnZfZXhwcl9kZXNjcmlwdG9yIChnZmNfc2UgKnNlLCBnZmNfZXhw ciAqZXhwcikKCiAgIGlmICghc2UtPmRpcmVjdF9ieXJlZikKICAgICBzZS0+ dW5saW1pdGVkX3BvbHltb3JwaGljID0gVU5MSU1JVEVEX1BPTFkgKGV4cHIp OwotCisKICAgLyogU3BlY2lhbCBjYXNlIHRoaW5ncyB3ZSBrbm93IHdlIGNh biBwYXNzIGVhc2lseS4gICovCiAgIHN3aXRjaCAoZXhwci0+ZXhwcl90eXBl KQogICAgIHsKQEAgLTg5NzMsOSArOTAzMywxMCBAQCBlbnVtIHtERUFMTE9D QVRFX0FMTE9DX0NPTVAgPSAxLCBOVUxMSUZZX0FMTE9DX0NPTVAsCiBzdGF0 aWMgZ2ZjX2FjdHVhbF9hcmdsaXN0ICpwZHRfcGFyYW1fbGlzdDsKCiBzdGF0 aWMgdHJlZQotc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICog ZGVyX3R5cGUsIHRyZWUgZGVjbCwKLQkJICAgICAgIHRyZWUgZGVzdCwgaW50 IHJhbmssIGludCBwdXJwb3NlLCBpbnQgY2FmX21vZGUsCi0JCSAgICAgICBn ZmNfY29fc3Vicm91dGluZXNfYXJncyAqYXJncykKK3N0cnVjdHVyZV9hbGxv Y19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIHRy ZWUgZGVzdCwKKwkJICAgICAgIGludCByYW5rLCBpbnQgcHVycG9zZSwgaW50 IGNhZl9tb2RlLAorCQkgICAgICAgZ2ZjX2NvX3N1YnJvdXRpbmVzX2FyZ3Mg KmFyZ3MsCisJCSAgICAgICBib29sIG5vX2ZpbmFsaXphdGlvbiA9IGZhbHNl KQogewogICBnZmNfY29tcG9uZW50ICpjOwogICBnZmNfbG9vcGluZm8gbG9v cDsKQEAgLTkwNjMsMTEgKzkxMjQsMTIgQEAgc3RydWN0dXJlX2FsbG9jX2Nv bXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJCQkJ ICAgICBnZmNfY29udl9hcnJheV9kYXRhIChkZXN0KSk7CiAJICBkcmVmID0g Z2ZjX2J1aWxkX2FycmF5X3JlZiAodG1wLCBpbmRleCwgTlVMTCk7CiAJICB0 bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCB2cmVmLCBk cmVmLCByYW5rLAotCQkJCSAgICAgICBDT1BZX0FMTE9DX0NPTVAsIGNhZl9t b2RlLCBhcmdzKTsKKwkJCQkgICAgICAgQ09QWV9BTExPQ19DT01QLCBjYWZf bW9kZSwgYXJncywKKwkJCQkgICAgICAgbm9fZmluYWxpemF0aW9uKTsKIAl9 CiAgICAgICBlbHNlCiAJdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChk ZXJfdHlwZSwgdnJlZiwgTlVMTF9UUkVFLCByYW5rLCBwdXJwb3NlLAotCQkJ CSAgICAgY2FmX21vZGUsIGFyZ3MpOworCQkJCSAgICAgY2FmX21vZGUsIGFy Z3MsIG5vX2ZpbmFsaXphdGlvbik7CgogICAgICAgZ2ZjX2FkZF9leHByX3Rv X2Jsb2NrICgmbG9vcGJvZHksIHRtcCk7CgpAQCAtOTEwMSwxMyArOTE2Mywx NSBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJf dHlwZSwgdHJlZSBkZWNsLAogICBpZiAocHVycG9zZSA9PSBERUFMTE9DQVRF X0FMTE9DX0NPTVAgJiYgZGVyX3R5cGUtPmF0dHIucGR0X3R5cGUpCiAgICAg ewogICAgICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlw ZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJCSAgIERFQUxMT0NBVEVf UERUX0NPTVAsIDAsIGFyZ3MpOworCQkJCSAgIERFQUxMT0NBVEVfUERUX0NP TVAsIDAsIGFyZ3MsCisJCQkJICAgbm9fZmluYWxpemF0aW9uKTsKICAgICAg IGdmY19hZGRfZXhwcl90b19ibG9jayAoJmZuYmxvY2ssIHRtcCk7CiAgICAg fQogICBlbHNlIGlmIChwdXJwb3NlID09IEFMTE9DQVRFX1BEVF9DT01QICYm IGRlcl90eXBlLT5hdHRyLmFsbG9jX2NvbXApCiAgICAgewogICAgICAgdG1w ID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVM TF9UUkVFLCByYW5rLAotCQkJCSAgIE5VTExJRllfQUxMT0NfQ09NUCwgMCwg YXJncyk7CisJCQkJICAgTlVMTElGWV9BTExPQ19DT01QLCAwLCBhcmdzLAor CQkJCSAgIG5vX2ZpbmFsaXphdGlvbik7CiAgICAgICBnZmNfYWRkX2V4cHJf dG9fYmxvY2sgKCZmbmJsb2NrLCB0bXApOwogICAgIH0KCkBAIC05MTY5LDcg KzkyMzMsNyBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wg KiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRl ZAogCQkgICAgICA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoQ0xBU1NfREFU QSAoYyktPnRzLnUuZGVyaXZlZCwKIAkJCQkJICAgICAgIGNvbXAsIE5VTExf VFJFRSwgcmFuaywgcHVycG9zZSwKLQkJCQkJICAgICAgIGNhZl9tb2RlLCBh cmdzKTsKKwkJCQkJICAgICAgIGNhZl9tb2RlLCBhcmdzLCBub19maW5hbGl6 YXRpb24pOwogCQl9CiAJICAgICAgZWxzZQogCQl7CkBAIC05MTc3LDcgKzky NDEsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBk ZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRlZCA9 IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoYy0+dHMudS5kZXJpdmVkLAogCQkJ CQkJCSAgICAgIGNvbXAsIE5VTExfVFJFRSwKIAkJCQkJCQkgICAgICByYW5r LCBwdXJwb3NlLAotCQkJCQkJCSAgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJ CQkJCQkgICAgICBjYWZfbW9kZSwgYXJncywKKwkJCQkJCQkgICAgICBub19m aW5hbGl6YXRpb24pOwogCQl9CiAJICAgIH0KCkBAIC05MjkzLDggKzkzNTgs OCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJf dHlwZSwgdHJlZSBkZWNsLAogCQljb250aW51ZTsKIAkgICAgfQoKLQkgIGlm ICgoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFjLT5hdHRyLnBvaW50 ZXIpCi0JICAgICB8fCAoYy0+dHMudHlwZSA9PSBCVF9DTEFTUyAmJiAhQ0xB U1NfREFUQSAoYyktPmF0dHIuY2xhc3NfcG9pbnRlcikpCisJICBpZiAoIW5v X2ZpbmFsaXphdGlvbiAmJiAoKGMtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCAm JiAhYy0+YXR0ci5wb2ludGVyKQorCSAgICAgfHwgKGMtPnRzLnR5cGUgPT0g QlRfQ0xBU1MgJiYgIUNMQVNTX0RBVEEgKGMpLT5hdHRyLmNsYXNzX3BvaW50 ZXIpKSkKIAkgICAgLyogQ2FsbCB0aGUgZmluYWxpemVyLCB3aGljaCB3aWxs IGZyZWUgdGhlIG1lbW9yeSBhbmQgbnVsbGlmeSB0aGUKIAkgICAgICAgcG9p bnRlciBvZiBhbiBhcnJheS4gICovCiAJICAgIGRlYWxsb2NhdGVfY2FsbGVk ID0gZ2ZjX2FkZF9jb21wX2ZpbmFsaXplcl9jYWxsICgmdG1wYmxvY2ssIGNv bXAsIGMsCkBAIC05MzIyLDcgKzkzODcsNyBAQCBzdHJ1Y3R1cmVfYWxsb2Nf Y29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkg IGFkZF93aGVuX2FsbG9jYXRlZAogCQkgICAgICA9IHN0cnVjdHVyZV9hbGxv Y19jb21wcyAoQ0xBU1NfREFUQSAoYyktPnRzLnUuZGVyaXZlZCwKIAkJCQkJ ICAgICAgIGNvbXAsIE5VTExfVFJFRSwgcmFuaywgcHVycG9zZSwKLQkJCQkJ ICAgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJICAgICAgIGNhZl9tb2Rl LCBhcmdzLCBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgICAgZWxzZQog CQl7CkBAIC05MzMwLDcgKzkzOTUsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29t cHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFk ZF93aGVuX2FsbG9jYXRlZCA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoYy0+ dHMudS5kZXJpdmVkLAogCQkJCQkJCSAgICAgIGNvbXAsIE5VTExfVFJFRSwK IAkJCQkJCQkgICAgICByYW5rLCBwdXJwb3NlLAotCQkJCQkJCSAgICAgIGNh Zl9tb2RlLCBhcmdzKTsKKwkJCQkJCQkgICAgICBjYWZfbW9kZSwgYXJncywK KwkJCQkJCQkgICAgICBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgIH0K CkBAIC05NjI4LDcgKzk2OTQsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkJCSAgICAg IGRlY2wsIGNkZWNsLCBOVUxMX1RSRUUpOwogCSAgICAgIHJhbmsgPSBjLT5h cyA/IGMtPmFzLT5yYW5rIDogMDsKIAkgICAgICB0bXAgPSBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwgY29tcCwgTlVMTF9UUkVF LAotCQkJCQkgICByYW5rLCBwdXJwb3NlLCBjYWZfbW9kZSwgYXJncyk7CisJ CQkJCSAgIHJhbmssIHB1cnBvc2UsIGNhZl9tb2RlLCBhcmdzLAorCQkJCQkg ICBub19maW5hbGl6YXRpb24pOwogCSAgICAgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJmZuYmxvY2ssIHRtcCk7CiAJICAgIH0KIAkgIGJyZWFrOwpAQCAt OTY2NCw3ICs5NzMxLDcgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNf c3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJICB0bXAgPSBzdHJ1 Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwgY29tcCwgZGNt cCwKIAkJCQkJICAgICAgIHJhbmssIHB1cnBvc2UsIGNhZl9tb2RlCiAJCQkJ CSAgICAgICB8IEdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfSU5fQ09BUlJBWSwK LQkJCQkJICAgICAgIGFyZ3MpOworCQkJCQkgICAgICAgYXJncywgbm9fZmlu YWxpemF0aW9uKTsKIAkJICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJs b2NrLCB0bXApOwogCQl9CiAJICAgIH0KQEAgLTk3NzIsNyArOTgzOSw4IEBA IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBl LCB0cmVlIGRlY2wsCiAJICAgICAgYWRkX3doZW5fYWxsb2NhdGVkID0gc3Ry dWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2ZWQsCiAJCQkJCQkJ ICBjb21wLCBkY21wLAogCQkJCQkJCSAgcmFuaywgcHVycG9zZSwKLQkJCQkJ CQkgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJCQkgIGNhZl9tb2RlLCBhcmdz LAorCQkJCQkJCSAgbm9fZmluYWxpemF0aW9uKTsKIAkgICAgfQogCSAgZWxz ZQogCSAgICBhZGRfd2hlbl9hbGxvY2F0ZWQgPSBOVUxMX1RSRUU7CkBAIC0x MDE0NSw3ICsxMDIxMyw4IEBAIGdmY19udWxsaWZ5X2FsbG9jX2NvbXAgKGdm Y19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKIHsK ICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRl Y2wsIE5VTExfVFJFRSwgcmFuaywKIAkJCQlOVUxMSUZZX0FMTE9DX0NPTVAs Ci0JCQkJR0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVfQ09BUlJBWSB8 IGNhZl9tb2RlLCBOVUxMKTsKKwkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RF X0VOQUJMRV9DT0FSUkFZIHwgY2FmX21vZGUsCisJCQkJTlVMTCk7CiB9CgoK QEAgLTEwMTU4LDcgKzEwMjI3LDggQEAgZ2ZjX2RlYWxsb2NhdGVfYWxsb2Nf Y29tcCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCBy YW5rLAogewogICByZXR1cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJf dHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAogCQkJCURFQUxMT0NBVEVf QUxMT0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJM RV9DT0FSUkFZIHwgY2FmX21vZGUsIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RV UkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVkgfCBjYWZfbW9kZSwKKwkJCQlO VUxMKTsKIH0KCiB0cmVlCkBAIC0xMDE5Niw3ICsxMDI2Niw4IEBAIGdmY19i Y2FzdF9hbGxvY19jb21wIChnZmNfc3ltYm9sICpkZXJpdmVkLCBnZmNfZXhw ciAqZXhwciwgaW50IHJhbmssCgogICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2Nf Y29tcHMgKGRlcml2ZWQsIGFycmF5LCBOVUxMX1RSRUUsIHJhbmssCiAJCQkg ICAgICAgQkNBU1RfQUxMT0NfQ09NUCwKLSAgCQkJICAgICAgIEdGQ19TVFJV Q1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVksICZhcmdzKTsKKwkJCSAg ICAgICBHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZLAor CQkJICAgICAgICZhcmdzKTsKICAgcmV0dXJuIHRtcDsKIH0KCkBAIC0xMDIw NiwxMCArMTAyNzcsMTIgQEAgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdmY19z eW1ib2wgKmRlcml2ZWQsIGdmY19leHByICpleHByLCBpbnQgcmFuaywKICAg IHN0YXR1cyBvZiBjb2FycmF5cy4gICovCgogdHJlZQotZ2ZjX2RlYWxsb2Nh dGVfYWxsb2NfY29tcF9ub19jYWYgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwg dHJlZSBkZWNsLCBpbnQgcmFuaykKK2dmY19kZWFsbG9jYXRlX2FsbG9jX2Nv bXBfbm9fY2FmIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwg aW50IHJhbmssCisJCQkJICBib29sIG5vX2ZpbmFsaXphdGlvbikKIHsKICAg cmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2ws IE5VTExfVFJFRSwgcmFuaywKLQkJCQlERUFMTE9DQVRFX0FMTE9DX0NPTVAs IDAsIE5VTEwpOworCQkJCURFQUxMT0NBVEVfQUxMT0NfQ09NUCwgMCwgTlVM TCwKKwkJCQlub19maW5hbGl6YXRpb24pOwogfQoKCkBAIC0xMDIxNyw3ICsx MDI5MCw4IEBAIHRyZWUKIGdmY19yZWFzc2lnbl9hbGxvY19jb21wX2NhZiAo Z2ZjX3N5bWJvbCAqZGVyX3R5cGUsIHRyZWUgZGVjbCwgdHJlZSBkZXN0KQog ewogICByZXR1cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwg ZGVjbCwgZGVzdCwgMCwgUkVBU1NJR05fQ0FGX0NPTVAsCi0JCQkJR0ZDX1NU UlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVfQ09BUlJBWSwgTlVMTCk7CisJCQkJ R0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVfQ09BUlJBWSwKKwkJCQlO VUxMKTsKIH0KCgpAQCAtMTAyMzMsNiArMTAzMDcsMjAgQEAgZ2ZjX2NvcHlf YWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2ws IHRyZWUgZGVzdCwgaW50IHJhbmssCiB9CgoKKy8qIFJlY3Vyc2l2ZWx5IHRy YXZlcnNlIGFuIG9iamVjdCBvZiBkZXJpdmVkIHR5cGUsIGdlbmVyYXRpbmcg Y29kZSB0bworICAgY29weSBpdCBhbmQgaXRzIGFsbG9jYXRhYmxlIGNvbXBv bmVudHMsIHdoaWxlIHN1cHByZXNzaW5nIGFueQorICAgZmluYWxpemF0aW9u IHRoYXQgbWlnaHQgb2NjdXIuICBUaGlzIGlzIHVzZWQgaW4gdGhlIGZpbmFs aXphdGlvbiBvZgorICAgZnVuY3Rpb24gcmVzdWx0cy4gICovCisKK3RyZWUK K2dmY19jb3B5X2FsbG9jX2NvbXBfbm9fZmluaSAoZ2ZjX3N5bWJvbCAqIGRl cl90eXBlLCB0cmVlIGRlY2wsIHRyZWUgZGVzdCwKKwkJCSAgICAgaW50IHJh bmssIGludCBjYWZfbW9kZSkKK3sKKyAgcmV0dXJuIHN0cnVjdHVyZV9hbGxv Y19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIGRlc3QsIHJhbmssIENPUFlfQUxM T0NfQ09NUCwKKwkJCQljYWZfbW9kZSwgTlVMTCwgdHJ1ZSk7Cit9CisKKwog LyogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IG9mIGRlcml2ZWQg dHlwZSwgZ2VuZXJhdGluZyBjb2RlIHRvCiAgICBjb3B5IG9ubHkgaXRzIGFs bG9jYXRhYmxlIGNvbXBvbmVudHMuICAqLwoKQEAgLTEwOTcyLDcgKzExMDYw LDcgQEAgZ2ZjX2FsbG9jX2FsbG9jYXRhYmxlX2Zvcl9hc3NpZ25tZW50IChn ZmNfbG9vcGluZm8gKmxvb3AsCiAJJiYgZXhwcjEtPnRzLnUuZGVyaXZlZC0+ YXR0ci5hbGxvY19jb21wKQogICAgIHsKICAgICAgIHRtcCA9IGdmY19kZWFs bG9jYXRlX2FsbG9jX2NvbXBfbm9fY2FmIChleHByMS0+dHMudS5kZXJpdmVk LCBvbGRfZGVzYywKLQkJCQkJICAgICAgZXhwcjEtPnJhbmspOworCQkJCQkg ICAgICBleHByMS0+cmFuaywgdHJ1ZSk7CiAgICAgICBnZmNfYWRkX2V4cHJf dG9fYmxvY2sgKCZyZWFsbG9jX2Jsb2NrLCB0bXApOwogICAgIH0KCkBAIC0x MTE0NSw4ICsxMTIzMyw3IEBAIGdmY190cmFuc19kZWZlcnJlZF9hcnJheSAo Z2ZjX3N5bWJvbCAqIHN5bSwgZ2ZjX3dyYXBwZWRfYmxvY2sgKiBibG9jaykK ICAgc3ltX2hhc19hbGxvY19jb21wID0gKHN5bS0+dHMudHlwZSA9PSBCVF9E RVJJVkVECiAJCQl8fCBzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiAJCQkg ICYmIHN5bS0+dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXA7Ci0gIGhh c19maW5hbGl6ZXIgPSBzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MgfHwgc3lt LT50cy50eXBlID09IEJUX0RFUklWRUQKLQkJICAgPyBnZmNfaXNfZmluYWxp emFibGUgKHN5bS0+dHMudS5kZXJpdmVkLCBOVUxMKSA6IGZhbHNlOworICBo YXNfZmluYWxpemVyID0gZ2ZjX21heV9iZV9maW5hbGl6ZWQgKHN5bS0+dHMp OwoKICAgLyogTWFrZSBzdXJlIHRoZSBmcm9udGVuZCBnZXRzIHRoZXNlIHJp Z2h0LiAgKi8KICAgZ2NjX2Fzc2VydCAoc3ltLT5hdHRyLnBvaW50ZXIgfHwg c3ltLT5hdHRyLmFsbG9jYXRhYmxlIHx8IHN5bV9oYXNfYWxsb2NfY29tcApA QCAtMTEyNjksNiArMTEzNTYsNyBAQCBnZmNfdHJhbnNfZGVmZXJyZWRfYXJy YXkgKGdmY19zeW1ib2wgKiBzeW0sIGdmY193cmFwcGVkX2Jsb2NrICogYmxv Y2spCiAgIGVsc2UgaWYgKCghc3ltLT5hdHRyLmFsbG9jYXRhYmxlIHx8ICFo YXNfZmluYWxpemVyKQogICAgICAgJiYgc3ltX2hhc19hbGxvY19jb21wICYm ICEoc3ltLT5hdHRyLmZ1bmN0aW9uIHx8IHN5bS0+YXR0ci5yZXN1bHQpCiAg ICAgICAmJiAhc3ltLT5hdHRyLnBvaW50ZXIgJiYgIXN5bS0+YXR0ci5zYXZl CisgICAgICAmJiAhKHN5bS0+YXR0ci5hcnRpZmljaWFsICYmIHN5bS0+bmFt ZVswXSA9PSAnXycpCiAgICAgICAmJiAhc3ltLT5ucy0+cHJvY19uYW1lLT5h dHRyLmlzX21haW5fcHJvZ3JhbSkKICAgICB7CiAgICAgICBpbnQgcmFuazsK ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmggYi9nY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5oCmluZGV4IDkyOTZmYTYzMjUwLi41NDA4 NzU1MTM4ZSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXku aAorKysgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5oCkBAIC01NiwxMSAr NTYsMTQgQEAgdHJlZSBnZmNfbnVsbGlmeV9hbGxvY19jb21wIChnZmNfc3lt Ym9sICosIHRyZWUsIGludCwgaW50IGNtID0gMCk7CiB0cmVlIGdmY19kZWFs bG9jYXRlX2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgaW50LCBp bnQgY20gPSAwKTsKIHRyZWUgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdmY19z eW1ib2wgKiwgZ2ZjX2V4cHIgKiwgaW50LCB0cmVlLAogCQkJICAgdHJlZSwg dHJlZSwgdHJlZSk7Ci10cmVlIGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBf bm9fY2FmIChnZmNfc3ltYm9sICosIHRyZWUsIGludCk7Cit0cmVlIGdmY19k ZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9fY2FmIChnZmNfc3ltYm9sICosIHRy ZWUsIGludCwKKwkJCQkgICAgICAgYm9vbCBub19maW5hbGl6YXRpb24gPSBm YWxzZSk7CiB0cmVlIGdmY19yZWFzc2lnbl9hbGxvY19jb21wX2NhZiAoZ2Zj X3N5bWJvbCAqLCB0cmVlLCB0cmVlKTsKCiB0cmVlIGdmY19jb3B5X2FsbG9j X2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgdHJlZSwgaW50LCBpbnQpOwoK K3RyZWUgZ2ZjX2NvcHlfYWxsb2NfY29tcF9ub19maW5pIChnZmNfc3ltYm9s ICosIHRyZWUsIHRyZWUsIGludCwgaW50KTsKKwogdHJlZSBnZmNfY29weV9v bmx5X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgdHJlZSwgaW50 KTsKCiB0cmVlIGdmY19hbGxvY2F0ZV9wZHRfY29tcCAoZ2ZjX3N5bWJvbCAq LCB0cmVlLCBpbnQsIGdmY19hY3R1YWxfYXJnbGlzdCAqKTsKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MgYi9nY2MvZm9ydHJhbi90 cmFucy1kZWNsLmNjCmluZGV4IDQ3NDkyMDk2NmVjLi43NzYxMGRmMzQwYiAx MDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5jYworKysgYi9n Y2MvZm9ydHJhbi90cmFucy1kZWNsLmNjCkBAIC00MzQ1LDYgKzQzNDUsOCBA QCBpbml0X2ludGVudF9vdXRfZHQgKGdmY19zeW1ib2wgKiBwcm9jX3N5bSwg Z2ZjX3dyYXBwZWRfYmxvY2sgKiBibG9jaykKICAgZ2ZjX2Zvcm1hbF9hcmds aXN0ICpmOwogICB0cmVlIHRtcDsKICAgdHJlZSBwcmVzZW50OworICBnZmNf c3ltYm9sICpzOworICBib29sIGRlYWxsb2Nfd2l0aF92YWx1ZSA9IGZhbHNl OwoKICAgZ2ZjX2luaXRfYmxvY2sgKCZpbml0KTsKICAgZm9yIChmID0gZ2Zj X3N5bV9nZXRfZHVtbXlfYXJncyAocHJvY19zeW0pOyBmOyBmID0gZi0+bmV4 dCkKQEAgLTQzNTIsNDIgKzQzNTQsNTIgQEAgaW5pdF9pbnRlbnRfb3V0X2R0 IChnZmNfc3ltYm9sICogcHJvY19zeW0sIGdmY193cmFwcGVkX2Jsb2NrICog YmxvY2spCiAJJiYgIWYtPnN5bS0+YXR0ci5wb2ludGVyCiAJJiYgZi0+c3lt LT50cy50eXBlID09IEJUX0RFUklWRUQpCiAgICAgICB7CisJcyA9IGYtPnN5 bTsKIAl0bXAgPSBOVUxMX1RSRUU7CgogCS8qIE5vdGU6IEFsbG9jYXRhYmxl cyBhcmUgZXhjbHVkZWQgYXMgdGhleSBhcmUgYWxyZWFkeSBoYW5kbGVkCiAJ ICAgYnkgdGhlIGNhbGxlci4gICovCiAJaWYgKCFmLT5zeW0tPmF0dHIuYWxs b2NhdGFibGUKLQkgICAgJiYgZ2ZjX2lzX2ZpbmFsaXphYmxlIChmLT5zeW0t PnRzLnUuZGVyaXZlZCwgTlVMTCkpCisJICAgICYmIGdmY19pc19maW5hbGl6 YWJsZSAocy0+dHMudS5kZXJpdmVkLCBOVUxMKSkKIAkgIHsKIAkgICAgc3Rt dGJsb2NrX3QgYmxvY2s7CiAJICAgIGdmY19leHByICplOwoKIAkgICAgZ2Zj X2luaXRfYmxvY2sgKCZibG9jayk7Ci0JICAgIGYtPnN5bS0+YXR0ci5yZWZl cmVuY2VkID0gMTsKLQkgICAgZSA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0g KGYtPnN5bSk7CisJICAgIHMtPmF0dHIucmVmZXJlbmNlZCA9IDE7CisJICAg IGUgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChzKTsKIAkgICAgZ2ZjX2Fk ZF9maW5hbGl6ZXJfY2FsbCAoJmJsb2NrLCBlKTsKIAkgICAgZ2ZjX2ZyZWVf ZXhwciAoZSk7CiAJICAgIHRtcCA9IGdmY19maW5pc2hfYmxvY2sgKCZibG9j ayk7CiAJICB9CgotCWlmICh0bXAgPT0gTlVMTF9UUkVFICYmICFmLT5zeW0t PmF0dHIuYWxsb2NhdGFibGUKLQkgICAgJiYgZi0+c3ltLT50cy51LmRlcml2 ZWQtPmF0dHIuYWxsb2NfY29tcCAmJiAhZi0+c3ltLT52YWx1ZSkKLQkgIHRt cCA9IGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXAgKGYtPnN5bS0+dHMudS5k ZXJpdmVkLAotCQkJCQkgICBmLT5zeW0tPmJhY2tlbmRfZGVjbCwKLQkJCQkJ ICAgZi0+c3ltLT5hcyA/IGYtPnN5bS0+YXMtPnJhbmsgOiAwKTsKKwkvKiBO b3RlOiBBbGxvY2F0YWJsZXMgYXJlIGV4Y2x1ZGVkIGFzIHRoZXkgYXJlIGFs cmVhZHkgaGFuZGxlZAorCSAgIGJ5IHRoZSBjYWxsZXIuICAqLworCWlmICh0 bXAgPT0gTlVMTF9UUkVFICYmICFzLT5hdHRyLmFsbG9jYXRhYmxlCisJICAg ICYmIHMtPnRzLnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21wKQorCSAgewor CSAgICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wIChzLT50cy51 LmRlcml2ZWQsCisJCQkJCSAgICAgcy0+YmFja2VuZF9kZWNsLAorCQkJCQkg ICAgIHMtPmFzID8gcy0+YXMtPnJhbmsgOiAwKTsKKwkgICAgZGVhbGxvY193 aXRoX3ZhbHVlID0gcy0+dmFsdWU7CisJICB9CgotCWlmICh0bXAgIT0gTlVM TF9UUkVFICYmIChmLT5zeW0tPmF0dHIub3B0aW9uYWwKLQkJCQkgfHwgZi0+ c3ltLT5ucy0+cHJvY19uYW1lLT5hdHRyLmVudHJ5X21hc3RlcikpCisJaWYg KHRtcCAhPSBOVUxMX1RSRUUgJiYgKHMtPmF0dHIub3B0aW9uYWwKKwkJCQkg fHwgcy0+bnMtPnByb2NfbmFtZS0+YXR0ci5lbnRyeV9tYXN0ZXIpKQogCSAg ewotCSAgICBwcmVzZW50ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChmLT5z eW0pOworCSAgICBwcmVzZW50ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChz KTsKIAkgICAgdG1wID0gYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENP TkRfRVhQUiwgVFJFRV9UWVBFICh0bXApLAogCQkJICAgICAgcHJlc2VudCwg dG1wLCBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwogCSAg fQoKLQlpZiAodG1wICE9IE5VTExfVFJFRSkKKwlpZiAodG1wICE9IE5VTExf VFJFRSAmJiAhZGVhbGxvY193aXRoX3ZhbHVlKQogCSAgZ2ZjX2FkZF9leHBy X3RvX2Jsb2NrICgmaW5pdCwgdG1wKTsKLQllbHNlIGlmIChmLT5zeW0tPnZh bHVlICYmICFmLT5zeW0tPmF0dHIuYWxsb2NhdGFibGUpCi0JICBnZmNfaW5p dF9kZWZhdWx0X2R0IChmLT5zeW0sICZpbml0LCB0cnVlKTsKKwllbHNlIGlm IChzLT52YWx1ZSAmJiAhcy0+YXR0ci5hbGxvY2F0YWJsZSkKKwkgIHsKKwkg ICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmaW5pdCwgdG1wKTsKKwkgICAg Z2ZjX2luaXRfZGVmYXVsdF9kdCAocywgJmluaXQsIGZhbHNlKTsKKwkgICAg ZGVhbGxvY193aXRoX3ZhbHVlID0gZmFsc2U7CisJICB9CiAgICAgICB9CiAg ICAgZWxzZSBpZiAoZi0+c3ltICYmIGYtPnN5bS0+YXR0ci5pbnRlbnQgPT0g SU5URU5UX09VVAogCSAgICAgJiYgZi0+c3ltLT50cy50eXBlID09IEJUX0NM QVNTCkBAIC00NDExLDEwICs0NDIzLDggQEAgaW5pdF9pbnRlbnRfb3V0X2R0 IChnZmNfc3ltYm9sICogcHJvY19zeW0sIGdmY193cmFwcGVkX2Jsb2NrICog YmxvY2spCiAJCQkgICAgICBwcmVzZW50LCB0bXAsCiAJCQkgICAgICBidWls ZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwogCSAgfQotCiAJZ2Zj X2FkZF9leHByX3RvX2Jsb2NrICgmaW5pdCwgdG1wKTsKICAgICAgIH0KLQog ICBnZmNfYWRkX2luaXRfY2xlYW51cCAoYmxvY2ssIGdmY19maW5pc2hfYmxv Y2sgKCZpbml0KSwgTlVMTF9UUkVFKTsKIH0KCmRpZmYgLS1naXQgYS9nY2Mv Zm9ydHJhbi90cmFucy1leHByLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhw ci5jYwppbmRleCAwNDVjOGIwMGI5MC4uYTEzNzg3YjMxNTggMTAwNjQ0Ci0t LSBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MKKysrIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtZXhwci5jYwpAQCAtMTkxMCw2ICsxOTEwLDcgQEAgZ2ZjX2lu aXRfc2UgKGdmY19zZSAqIHNlLCBnZmNfc2UgKiBwYXJlbnQpCiB7CiAgIG1l bXNldCAoc2UsIDAsIHNpemVvZiAoZ2ZjX3NlKSk7CiAgIGdmY19pbml0X2Js b2NrICgmc2UtPnByZSk7CisgIGdmY19pbml0X2Jsb2NrICgmc2UtPmZpbmFs YmxvY2spOwogICBnZmNfaW5pdF9ibG9jayAoJnNlLT5wb3N0KTsKCiAgIHNl LT5wYXJlbnQgPSBwYXJlbnQ7CkBAIC03MDczLDYgKzcwNzQsNyBAQCBnZmNf Y29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wg KiBzeW0sCgogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLT5w cmUsICZwYXJtc2UucHJlKTsKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZwb3N0LCAmcGFybXNlLnBvc3QpOworICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJnNlLT5maW5hbGJsb2NrLCAmcGFybXNlLmZpbmFsYmxv Y2spOwoKICAgICAgIC8qIEFsbG9jYXRlZCBhbGxvY2F0YWJsZSBjb21wb25l bnRzIG9mIGRlcml2ZWQgdHlwZXMgbXVzdCBiZQogCSBkZWFsbG9jYXRlZCBm b3Igbm9uLXZhcmlhYmxlIHNjYWxhcnMsIGFycmF5IGFyZ3VtZW50cyB0byBl bGVtZW50YWwKQEAgLTc0MzksNiArNzQ0MSw3IEBAIGdmY19jb252X3Byb2Nl ZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKCiAg ICAgICB2ZWNfc2FmZV9wdXNoIChhcmdsaXN0LCBwYXJtc2UuZXhwcik7CiAg ICAgfQorCiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS0+cHJlLCAm Y2xvYmJlcnMpOwogICBnZmNfZmluaXNoX2ludGVyZmFjZV9tYXBwaW5nICgm bWFwcGluZywgJnNlLT5wcmUsICZzZS0+cG9zdCk7CgpAQCAtNzczNyw5ICs3 NzQwLDIwIEBAIGdmY19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBz ZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKICAgLyogQWxsb2NhdGFibGUgc2NhbGFy IGZ1bmN0aW9uIHJlc3VsdHMgbXVzdCBiZSBmcmVlZCBhbmQgbnVsbGlmaWVk CiAgICAgIGFmdGVyIHVzZS4gVGhpcyBuZWNlc3NpdGF0ZXMgdGhlIGNyZWF0 aW9uIG9mIGEgdGVtcG9yYXJ5IHRvCiAgICAgIGhvbGQgdGhlIHJlc3VsdCB0 byBwcmV2ZW50IGR1cGxpY2F0ZSBjYWxscy4gICovCisgIHN5bWJvbF9hdHRy aWJ1dGUgYXR0ciA9ICBjb21wID8gY29tcC0+YXR0ciA6IHN5bS0+YXR0cjsK KyAgYm9vbCBhbGxvY2F0YWJsZSA9IGF0dHIuYWxsb2NhdGFibGUgJiYgIWF0 dHIuZGltZW5zaW9uOworICBnZmNfc3ltYm9sICpkZXIgPSBjb21wID8KKwkJ ICAgIGNvbXAtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCA/IGNvbXAtPnRzLnUu ZGVyaXZlZCA6IE5VTEwKKwkJCSA6CisJCSAgICBzeW0tPnRzLnR5cGUgPT0g QlRfREVSSVZFRCA/IHN5bS0+dHMudS5kZXJpdmVkIDogTlVMTDsKKyAgYm9v bCBmaW5hbGl6YWJsZSA9IGRlciAhPSBOVUxMICYmIGRlci0+bnMtPnByb2Nf bmFtZQorCQkJICAgICYmIGdmY19pc19maW5hbGl6YWJsZSAoZGVyLCBOVUxM KTsKKworICBpZiAoIWJ5cmVmICYmIGZpbmFsaXphYmxlKQorICAgIGdmY19m aW5hbGl6ZV90cmVlX2V4cHIgKHNlLCBkZXIsIGF0dHIsIGV4cHItPnJhbmsp OworCiAgIGlmICghYnlyZWYgJiYgc3ltLT50cy50eXBlICE9IEJUX0NIQVJB Q1RFUgotICAgICAgJiYgKChzeW0tPmF0dHIuYWxsb2NhdGFibGUgJiYgIXN5 bS0+YXR0ci5kaW1lbnNpb24gJiYgIWNvbXApCi0JICB8fCAoY29tcCAmJiBj b21wLT5hdHRyLmFsbG9jYXRhYmxlICYmICFjb21wLT5hdHRyLmRpbWVuc2lv bikpKQorICAgICAgJiYgYWxsb2NhdGFibGUgJiYgIWZpbmFsaXphYmxlKQog ICAgIHsKICAgICAgIHRtcCA9IGdmY19jcmVhdGVfdmFyIChUUkVFX1RZUEUg KHNlLT5leHByKSwgTlVMTCk7CiAgICAgICBnZmNfYWRkX21vZGlmeSAoJnNl LT5wcmUsIHRtcCwgc2UtPmV4cHIpOwpAQCAtNzc5OSw2ICs3ODEzLDkgQEAg Z2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwgKGdmY19zZSAqIHNlLCBnZmNfc3lt Ym9sICogc3ltLAogCSAgICAgIHNlLT5leHByID0gaW5mby0+ZGVzY3JpcHRv cjsKIAkgICAgICAvKiBCdW5kbGUgaW4gdGhlIHN0cmluZyBsZW5ndGguICAq LwogCSAgICAgIHNlLT5zdHJpbmdfbGVuZ3RoID0gbGVuOworCisJICAgICAg aWYgKGZpbmFsaXphYmxlKQorCQlnZmNfZmluYWxpemVfdHJlZV9leHByIChz ZSwgZGVyLCBhdHRyLCBleHByLT5yYW5rKTsKIAkgICAgfQogCSAgZWxzZSBp ZiAodHMudHlwZSA9PSBCVF9DSEFSQUNURVIpCiAJICAgIHsKQEAgLTc4OTEs OCArNzkwOCw2IEBAIGdmY19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2Ug KiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKIAkgICYmIHNlLT5leHByICYmIEdG Q19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoc2UtPmV4cHIpKQogCSAgJiYg ZXhwci0+bXVzdF9maW5hbGl6ZSkKIAl7Ci0JICB0cmVlIGZpbmFsX2ZuZGVj bDsKLQkgIHRyZWUgaXNfZmluYWw7CiAJICBpbnQgbjsKIAkgIGlmIChzZS0+ c3MgJiYgc2UtPnNzLT5sb29wKQogCSAgICB7CkBAIC03OTE0LDY2ICs3OTI5 LDE1IEBAIGdmY19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwg Z2ZjX3N5bWJvbCAqIHN5bSwKIAkgICAgICAvKiBUT0RPIEVsaW1pbmF0ZSB0 aGUgZG91Ymxpbmcgb2YgdGVtcG9yYXJpZXMuIFRoaXMKIAkJIG9uZSBpcyBu ZWNlc3NhcnkgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrYWdlLiAgKi8KIAkg ICAgICBzZS0+ZXhwciA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLT5leHByLCAm c2UtPnByZSk7Ci0JICAgICAgdG1wID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChz ZS0+ZXhwcik7Ci0JICAgICAgdG1wID0gZ2ZjX2NvbnZfc2NhbGFyX3RvX2Rl c2NyaXB0b3IgKHNlLCB0bXAsCi0JCQlDTEFTU19EQVRBIChleHByLT52YWx1 ZS5mdW5jdGlvbi5lc3ltLT5yZXN1bHQpLT5hdHRyKTsKIAkgICAgfQoKLQkg IGlmICgoZ2ZjX2lzX2NsYXNzX2FycmF5X2Z1bmN0aW9uIChleHByKQotCSAg ICAgICB8fCBnZmNfaXNfYWxsb2NfY2xhc3Nfc2NhbGFyX2Z1bmN0aW9uIChl eHByKSkKLQkgICAgICAmJiBDTEFTU19EQVRBIChleHByLT52YWx1ZS5mdW5j dGlvbi5lc3ltLT5yZXN1bHQpLT5hdHRyLnBvaW50ZXIpCi0JICAgIGdvdG8g bm9fZmluYWxpemF0aW9uOwotCi0JICBmaW5hbF9mbmRlY2wgPSBnZmNfY2xh c3NfdnRhYl9maW5hbF9nZXQgKHNlLT5leHByKTsKLQkgIGlzX2ZpbmFsID0g Zm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwKLQkJ CQkgICAgICBsb2dpY2FsX3R5cGVfbm9kZSwKLQkJCQkgICAgICBmaW5hbF9m bmRlY2wsCi0JCQkJICAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGZp bmFsX2ZuZGVjbCksCi0JCQkJCSAgIAkgICAgbnVsbF9wb2ludGVyX25vZGUp KTsKLQkgIGZpbmFsX2ZuZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVm X2xvYyAoaW5wdXRfbG9jYXRpb24sCi0JCQkJCQkgICAgICBmaW5hbF9mbmRl Y2wpOwotIAkgIHRtcCA9IGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGlucHV0X2xv Y2F0aW9uLAotCQkJCSAgICAgZmluYWxfZm5kZWNsLCAzLAotCQkJCSAgICAg Z2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTCwgdG1wKSwKLQkJCQkgICAgIGdm Y19jbGFzc192dGFiX3NpemVfZ2V0IChzZS0+ZXhwciksCi0JCQkJICAgICBi b29sZWFuX2ZhbHNlX25vZGUpOwotCSAgdG1wID0gZm9sZF9idWlsZDNfbG9j IChpbnB1dF9sb2NhdGlvbiwgQ09ORF9FWFBSLAotCQkJCSB2b2lkX3R5cGVf bm9kZSwgaXNfZmluYWwsIHRtcCwKLQkJCQkgYnVpbGRfZW1wdHlfc3RtdCAo aW5wdXRfbG9jYXRpb24pKTsKLQotCSAgaWYgKHNlLT5zcyAmJiBzZS0+c3Mt Pmxvb3ApCi0JICAgIHsKLQkgICAgICBnZmNfcHJlcGVuZF9leHByX3RvX2Js b2NrICgmc2UtPnNzLT5sb29wLT5wb3N0LCB0bXApOwotCSAgICAgIHRtcCA9 IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCi0J CQkJICAgICBsb2dpY2FsX3R5cGVfbm9kZSwKLQkJCQkgICAgIGluZm8tPmRh dGEsCi0JCQkJICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoaW5mby0+ ZGF0YSksCi0JCQkJCSAgIAkgICAgbnVsbF9wb2ludGVyX25vZGUpKTsKLQkg ICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBD T05EX0VYUFIsCi0JCQkJICAgICB2b2lkX3R5cGVfbm9kZSwgdG1wLAotCQkJ CSAgICAgZ2ZjX2NhbGxfZnJlZSAoaW5mby0+ZGF0YSksCi0JCQkJICAgICBi dWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwotCSAgICAgIGdm Y19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5zcy0+bG9vcC0+cG9zdCwgdG1w KTsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgdHJlZSBjbGFz c2RhdGE7Ci0JICAgICAgZ2ZjX3ByZXBlbmRfZXhwcl90b19ibG9jayAoJnNl LT5wb3N0LCB0bXApOwotCSAgICAgIGNsYXNzZGF0YSA9IGdmY19jbGFzc19k YXRhX2dldCAoc2UtPmV4cHIpOwotCSAgICAgIHRtcCA9IGZvbGRfYnVpbGQy X2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCi0JCQkJICAgICBsb2dp Y2FsX3R5cGVfbm9kZSwKLQkJCQkgICAgIGNsYXNzZGF0YSwKLQkJCQkgICAg IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChjbGFzc2RhdGEpLAotCQkJCQkg ICAJICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7Ci0JICAgICAgdG1wID0gZm9s ZF9idWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwgQ09ORF9FWFBSLAotCQkJ CSAgICAgdm9pZF90eXBlX25vZGUsIHRtcCwKLQkJCQkgICAgIGdmY19jYWxs X2ZyZWUgKGNsYXNzZGF0YSksCi0JCQkJICAgICBidWlsZF9lbXB0eV9zdG10 IChpbnB1dF9sb2NhdGlvbikpOwotCSAgICAgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJnNlLT5wb3N0LCB0bXApOwotCSAgICB9CisJICAvKiBGaW5hbGl6 ZSB0aGUgcmVzdWx0LCBpZiBuZWNlc3NhcnkuICAqLworCSAgYXR0ciA9IENM QVNTX0RBVEEgKGV4cHItPnZhbHVlLmZ1bmN0aW9uLmVzeW0tPnJlc3VsdCkt PmF0dHI7CisJICBpZiAoISgoZ2ZjX2lzX2NsYXNzX2FycmF5X2Z1bmN0aW9u IChleHByKQorCQkgfHwgZ2ZjX2lzX2FsbG9jX2NsYXNzX3NjYWxhcl9mdW5j dGlvbiAoZXhwcikpCisJCSYmIGF0dHIucG9pbnRlcikpCisJICAgIGdmY19m aW5hbGl6ZV90cmVlX2V4cHIgKHNlLCBOVUxMLCBhdHRyLCBleHByLT5yYW5r KTsKIAl9Ci0KLW5vX2ZpbmFsaXphdGlvbjoKICAgICAgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKCZzZS0+cG9zdCwgJnBvc3QpOwogICAgIH0KCkBAIC05 NDg1LDEwICs5NDQ5LDI5IEBAIGdmY19jb252X2V4cHIgKGdmY19zZSAqIHNl LCBnZmNfZXhwciAqIGV4cHIpCgogICAgIGNhc2UgRVhQUl9TVFJVQ1RVUkU6 CiAgICAgICBnZmNfY29udl9zdHJ1Y3R1cmUgKHNlLCBleHByLCAwKTsKKyAg ICAgIC8qIEYyMDA4IDQuNS42LjMgcGFyYSA1OiBJZiBhbiBleGVjdXRhYmxl IGNvbnN0cnVjdCByZWZlcmVuY2VzIGEKKwkgc3RydWN0dXJlIGNvbnN0cnVj dG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yLCB0aGUgZW50aXR5IGNyZWF0ZWQg YnkKKwkgdGhlIGNvbnN0cnVjdG9yIGlzIGZpbmFsaXplZCBhZnRlciBleGVj dXRpb24gb2YgdGhlIGlubmVybW9zdAorCSBleGVjdXRhYmxlIGNvbnN0cnVj dCBjb250YWluaW5nIHRoZSByZWZlcmVuY2UuIFRoaXMsIGluIGZhY3QsCisJ IHdhcyBsYXRlciBkZWxldGVkIGJ5IHRoZSBDb21iaW5lZCBUZWNoaWNhbCBD b3JyaWdlbmRhIDEgVE8gNCBmb3IKKwkgZm9ydHJhbiAyMDA4IChmMDgvMDAx MSkuICAqLworICAgICAgaWYgKCFnZmNfbm90aWZpY2F0aW9uX3N0ZCAoR0ZD X1NURF9GMjAxOF9ERUwpICYmIGV4cHItPm11c3RfZmluYWxpemUKKwkgICYm IGdmY19tYXlfYmVfZmluYWxpemVkIChleHByLT50cykpCisJeworCSAgZ2Zj X3dhcm5pbmcgKDAsICJUaGUgc3RydWN0dXJlIGNvbnN0cnVjdG9yIGF0ICVD IGhhcyBiZWVuIgorCQkJICIgZmluYWxpemVkLiBUaGlzIGZlYXR1cmUgd2Fz IHJlbW92ZWQgYnkgZjA4LzAwMTEuIgorCQkJICIgVXNlIC1zdGQ9ZjIwMTgg b3IgLXN0ZD1nbnUgdG8gZWxpbWluYXRlIHRoZSIKKwkJCSAiIGZpbmFsaXph dGlvbi4iKTsKKwkgIHN5bWJvbF9hdHRyaWJ1dGUgYXR0cjsKKwkgIGF0dHIu YWxsb2NhdGFibGUgPSBhdHRyLnBvaW50ZXIgPSAwOworCSAgZ2ZjX2ZpbmFs aXplX3RyZWVfZXhwciAoc2UsIGV4cHItPnRzLnUuZGVyaXZlZCwgYXR0ciwg MCk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UtPnBvc3QsICZz ZS0+ZmluYWxibG9jayk7CisJfQogICAgICAgYnJlYWs7CgogICAgIGNhc2Ug RVhQUl9BUlJBWToKICAgICAgIGdmY19jb252X2FycmF5X2NvbnN0cnVjdG9y X2V4cHIgKHNlLCBleHByKTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZzZS0+cG9zdCwgJnNlLT5maW5hbGJsb2NrKTsKICAgICAgIGJyZWFr OwoKICAgICBkZWZhdWx0OgpAQCAtMTA0ODksNyArMTA0NzIsOCBAQCBnZmNf dHJhbnNfc2NhbGFyX2Fzc2lnbiAoZ2ZjX3NlICogbHNlLCBnZmNfc2UgKiBy c2UsIGdmY190eXBlc3BlYyB0cywKICAgICAgIGlmIChkZWFsbG9jKQogCXsK IAkgIHRtcF92YXIgPSBnZmNfZXZhbHVhdGVfbm93IChsc2UtPmV4cHIsICZs c2UtPnByZSk7Ci0JICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21w X25vX2NhZiAodHMudS5kZXJpdmVkLCB0bXBfdmFyLCAwKTsKKwkgIHRtcCA9 IGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9fY2FmICh0cy51LmRlcml2 ZWQsIHRtcF92YXIsCisJCQkJCQkgIDAsIHRydWUpOwogCSAgaWYgKGRlZXBf Y29weSkKIAkgICAgdG1wID0gYnVpbGQzX3YgKENPTkRfRVhQUiwgY29uZCwg YnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pLAogCQkJICAgIHRt cCk7CkBAIC0xMDQ5Nyw2ICsxMDQ4MSw3IEBAIGdmY190cmFuc19zY2FsYXJf YXNzaWduIChnZmNfc2UgKiBsc2UsIGdmY19zZSAqIHJzZSwgZ2ZjX3R5cGVz cGVjIHRzLAogCX0KCiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm YmxvY2ssICZyc2UtPnByZSk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmYmxvY2ssICZsc2UtPmZpbmFsYmxvY2spOwogICAgICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUpOwoKICAgICAg IGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIGxzZS0+ZXhwciwKQEAgLTEwNTI2 LDggKzEwNTExLDkgQEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19z ZSAqIGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAg fQogICBlbHNlIGlmIChnZmNfYnRfc3RydWN0ICh0cy50eXBlKSkKICAgICB7 Ci0gICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZsc2Ut PnByZSk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ss ICZyc2UtPnByZSk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm YmxvY2ssICZsc2UtPmZpbmFsYmxvY2spOworICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUpOwogICAgICAgdG1wID0g Zm9sZF9idWlsZDFfbG9jIChpbnB1dF9sb2NhdGlvbiwgVklFV19DT05WRVJU X0VYUFIsCiAJCQkgICAgIFRSRUVfVFlQRSAobHNlLT5leHByKSwgcnNlLT5l eHByKTsKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIGxzZS0+ZXhw ciwgdG1wKTsKQEAgLTEwNTM3LDYgKzEwNTIzLDcgQEAgZ2ZjX3RyYW5zX3Nj YWxhcl9hc3NpZ24gKGdmY19zZSAqIGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNf dHlwZXNwZWMgdHMsCiAgICAgewogICAgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJmJsb2NrLCAmbHNlLT5wcmUpOwogICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmJsb2NrLCAmcnNlLT5wcmUpOworICAgICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5maW5hbGJsb2NrKTsK CiAgICAgICBpZiAoIXRyYW5zX3NjYWxhcl9jbGFzc19hc3NpZ24gKCZibG9j aywgbHNlLCByc2UpKQogCXsKQEAgLTEwODY3LDYgKzEwODU0LDExIEBAIGdm Y190cmFuc19hcnJheWZ1bmNfYXNzaWduIChnZmNfZXhwciAqIGV4cHIxLCBn ZmNfZXhwciAqIGV4cHIyKQogICBnZmNfc3MgKnNzID0gTlVMTDsKICAgZ2Zj X2NvbXBvbmVudCAqY29tcCA9IE5VTEw7CiAgIGdmY19sb29waW5mbyBsb29w OworICB0cmVlIHRtcDsKKyAgdHJlZSBsaHM7CisgIGdmY19zZSBmaW5hbF9z ZTsKKyAgZ2ZjX3N5bWJvbCAqc3ltID0gZXhwcjEtPnN5bXRyZWUtPm4uc3lt OworICBib29sIGZpbmFsaXphYmxlID0gIGdmY19tYXlfYmVfZmluYWxpemVk IChleHByMS0+dHMpOwoKICAgaWYgKGFycmF5ZnVuY19hc3NpZ25fbmVlZHNf dGVtcG9yYXJ5IChleHByMSwgZXhwcjIpKQogICAgIHJldHVybiBOVUxMOwpA QCAtMTA4ODUsMTIgKzEwODc3LDQ0IEBAIGdmY190cmFuc19hcnJheWZ1bmNf YXNzaWduIChnZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyKQog ICBnZmNfc3RhcnRfYmxvY2sgKCZzZS5wcmUpOwogICBzZS53YW50X3BvaW50 ZXIgPSAxOwoKKyAgLyogRmlyc3QgdGhlIGxocyBtdXN0IGJlIGZpbmFsaXpl ZCwgaWYgbmVjZXNzYXJ5LiBXZSB1c2UgYSBjb3B5IG9mIHRoZSBzeW1ib2wK KyAgICAgYmFja2VuZCBkZWNsLCBzdGFzaCB0aGUgb3JpZ2luYWwgYXdheSBm b3IgdGhlIGZpbmFsaXphdGlvbiBzbyB0aGF0IHRoZQorICAgICB2YWx1ZSB1 c2VkIGlzIHRoYXQgYmVmb3JlIHRoZSBhc3NpZ25tZW50LiBUaGlzIGlzIG5l Y2Vzc2FyeSBiZWNhdXNlCisgICAgIGV2YWx1YXRpb24gb2YgdGhlIHJocyBl eHByZXNzaW9uIHVzaW5nIGRpcmVjdCBieSByZWZlcmVuY2UgY2FuIGNoYW5n ZQorICAgICB0aGUgdmFsdWUuIEhvd2V2ZXIsIHRoZSBzdGFuZGFyZCBtYW5k YXRlcyB0aGF0IHRoZSBmaW5hbGl6YXRpb24gbXVzdCBvY2N1cgorICAgICBh ZnRlciBldmFsdWF0aW9uIG9mIHRoZSByaHMuICAqLworICBnZmNfaW5pdF9z ZSAoJmZpbmFsX3NlLCBOVUxMKTsKKworICBpZiAoZmluYWxpemFibGUpCisg ICAgeworICAgICAgdG1wID0gc3ltLT5iYWNrZW5kX2RlY2w7CisgICAgICBs aHMgPSBzeW0tPmJhY2tlbmRfZGVjbDsKKyAgICAgIGlmIChUUkVFX0NPREUg KHRtcCkgPT0gSU5ESVJFQ1RfUkVGKQorCXRtcCA9IFRSRUVfT1BFUkFORCAo dG1wLCAwKTsKKyAgICAgIHN5bS0+YmFja2VuZF9kZWNsID0gZ2ZjX2NyZWF0 ZV92YXIgKFRSRUVfVFlQRSAodG1wKSwgImxocyIpOworICAgICAgZ2ZjX2Fk ZF9tb2RpZnkgKCZzZS5wcmUsIHN5bS0+YmFja2VuZF9kZWNsLCB0bXApOwor ICAgICAgaWYgKEdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFICh0 bXApKSkKKwl7CisJICB0bXAgPSBnZmNfY29weV9hbGxvY19jb21wIChleHBy MS0+dHMudS5kZXJpdmVkLCB0bXAsIHN5bS0+YmFja2VuZF9kZWNsLAorCQkJ CSAgICAgZXhwcjEtPnJhbmssIDApOworCSAgZ2ZjX2FkZF9leHByX3RvX2Js b2NrICgmZmluYWxfc2UucHJlLCB0bXApOworCX0KKyAgICB9CisKKyAgaWYg KGZpbmFsaXphYmxlICYmIGdmY19hc3NpZ25tZW50X2ZpbmFsaXplcl9jYWxs ICgmZmluYWxfc2UsIGV4cHIxLCBmYWxzZSkpCisgICAgeworICAgICAgZ2Zj X2FkZF9ibG9ja190b19ibG9jayAoJnNlLnByZSwgJmZpbmFsX3NlLnByZSk7 CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucG9zdCwgJmZp bmFsX3NlLmZpbmFsYmxvY2spOworICAgIH0KKworICBpZiAoZmluYWxpemFi bGUpCisgICAgc3ltLT5iYWNrZW5kX2RlY2wgPSBsaHM7CisKICAgZ2ZjX2Nv bnZfYXJyYXlfcGFyYW1ldGVyICgmc2UsIGV4cHIxLCBmYWxzZSwgTlVMTCwg TlVMTCwgTlVMTCk7CgogICBpZiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfREVS SVZFRAogCSYmIGV4cHIxLT50cy51LmRlcml2ZWQtPmF0dHIuYWxsb2NfY29t cCkKICAgICB7Ci0gICAgICB0cmVlIHRtcDsKICAgICAgIHRtcCA9IGdmY19k ZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9fY2FmIChleHByMS0+dHMudS5kZXJp dmVkLCBzZS5leHByLAogCQkJCQkgICAgICBleHByMS0+cmFuayk7CiAgICAg ICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS5wcmUsIHRtcCk7CkBAIC0x MDkwMCw2ICsxMDkyNCwxOCBAQCBnZmNfdHJhbnNfYXJyYXlmdW5jX2Fzc2ln biAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMikKICAgc2Uu c3MgPSBnZmNfd2Fsa19leHByIChleHByMik7CiAgIGdjY19hc3NlcnQgKHNl LnNzICE9IGdmY19zc190ZXJtaW5hdG9yKTsKCisgIC8qIFNpbmNlIHRoaXMg aXMgYSBkaXJlY3QgYnkgcmVmZXJlbmNlIGNhbGwsIHJlZmVyZW5jZXMgdG8g dGhlIGxocyBjYW4gYmUKKyAgICAgdXNlZCBmb3IgZmluYWxpemF0aW9uIG9m IHRoZSBmdW5jdGlvbiByZXN1bHQganVzdCBhcyBsb25nIGFzIHRoZSBibG9j a3MKKyAgICAgZnJvbSBmaW5hbF9zZSBhcmUgYWRkZWQgYXQgdGhlIHJpZ2h0 IHRpbWUuICAqLworICBnZmNfaW5pdF9zZSAoJmZpbmFsX3NlLCBOVUxMKTsK KyAgaWYgKGZpbmFsaXphYmxlICYmIGV4cHIyLT52YWx1ZS5mdW5jdGlvbi5l c3ltKQorICAgIHsKKyAgICAgIGZpbmFsX3NlLmV4cHIgPSBidWlsZF9mb2xk X2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBzZS5leHByKTsK KyAgICAgIGdmY19maW5hbGl6ZV90cmVlX2V4cHIgKCZmaW5hbF9zZSwgZXhw cjItPnRzLnUuZGVyaXZlZCwKKwkJCQkgICAgZXhwcjItPnZhbHVlLmZ1bmN0 aW9uLmVzeW0tPmF0dHIsCisJCQkJICAgIGV4cHIyLT5yYW5rKTsKKyAgICB9 CisKICAgLyogUmVhbGxvY2F0ZSBvbiBhc3NpZ25tZW50IG5lZWRzIHRoZSBs b29waW5mbyBmb3IgZXh0cmluc2ljIGZ1bmN0aW9ucy4KICAgICAgVGhpcyBp cyBzaWduYWxsZWQgdG8gZ2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwgYnkgc2V0 dGluZyBpc19hbGxvY19saHMuCiAgICAgIENsZWFybHksIHRoaXMgY2Fubm90 IGJlIGRvbmUgZm9yIGFuIGFsbG9jYXRhYmxlIGZ1bmN0aW9uIHJlc3VsdCwg c2luY2UKQEAgLTEwOTMwLDcgKzEwOTY2LDE5IEBAIGdmY190cmFuc19hcnJh eWZ1bmNfYXNzaWduIChnZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4 cHIyKQogICAgIH0KCiAgIGdmY19jb252X2Z1bmN0aW9uX2V4cHIgKCZzZSwg ZXhwcjIpOworCisgIC8qIEZpeCB0aGUgcmVzdWx0LiAgKi8KICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJnNlLnByZSwgJnNlLnBvc3QpOworICBpZiAo ZmluYWxpemFibGUpCisgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNl LnByZSwgJmZpbmFsX3NlLnByZSk7CisKKyAgLyogRG8gdGhlIGZpbmFsaXph dGlvbiwgaW5jbHVkaW5nIGZpbmFsIGNhbGxzIGZyb20gZnVuY3Rpb24gYXJn dW1lbnRzLiAgKi8KKyAgaWYgKGZpbmFsaXphYmxlKQorICAgIHsKKyAgICAg IGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZmaW5hbF9zZS5w b3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUs ICZzZS5maW5hbGJsb2NrKTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZzZS5wcmUsICZmaW5hbF9zZS5maW5hbGJsb2NrKTsKKyAgIH0KCiAg IGlmIChzcykKICAgICBnZmNfY2xlYW51cF9sb29wICgmbG9vcCk7CkBAIC0x MTQ1Myw2ICsxMTUwMSwxNyBAQCB0cmFuc19jbGFzc19hc3NpZ25tZW50IChz dG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMsIGdmY19leHByICpy aHMsCiB7CiAgIHRyZWUgdG1wLCBmY24sIHN0ZGNvcHksIHRvX2xlbiwgZnJv bV9sZW4sIHZwdHIsIG9sZF92cHRyOwogICB2ZWM8dHJlZSwgdmFfZ2M+ICph cmdzID0gTlVMTDsKKyAgYm9vbCBmaW5hbF9leHByOworCisgIGZpbmFsX2V4 cHIgPSBnZmNfYXNzaWdubWVudF9maW5hbGl6ZXJfY2FsbCAobHNlLCBsaHMs IGZhbHNlKTsKKyAgaWYgKGZpbmFsX2V4cHIpCisgICAgeworICAgICAgaWYg KHJzZS0+bG9vcCkKKwlnZmNfcHJlcGVuZF9leHByX3RvX2Jsb2NrICgmcnNl LT5sb29wLT5wcmUsCisJCQkJICAgZ2ZjX2ZpbmlzaF9ibG9jayAoJmxzZS0+ ZmluYWxibG9jaykpOworICAgICAgZWxzZQorCWdmY19hZGRfYmxvY2tfdG9f YmxvY2sgKGJsb2NrLCAmbHNlLT5maW5hbGJsb2NrKTsKKyAgICB9CgogICAv KiBTdG9yZSB0aGUgb2xkIHZwdHIgc28gdGhhdCBkeW5hbWljIHR5cGVzIGNh biBiZSBjb21wYXJlZCBmb3IKICAgICAgcmVhbGxvY2F0aW9uIHRvIG9jY3Vy IG9yIG5vdC4gICovCkBAIC0xMTQ3OCw4ICsxMTUzNyw5IEBAIHRyYW5zX2Ns YXNzX2Fzc2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIg KmxocywgZ2ZjX2V4cHIgKnJocywKIAlvbGRfdnB0ciA9IGJ1aWxkX2ludF9j c3QgKFRSRUVfVFlQRSAodnB0ciksIDApOwoKICAgICAgIHNpemUgPSBnZmNf dnB0cl9zaXplX2dldCAodnB0cik7Ci0gICAgICBjbGFzc19oYW4gPSBHRkNf Q0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKGxzZS0+ZXhwcikpCi0JICA/IGdm Y19jbGFzc19kYXRhX2dldCAobHNlLT5leHByKSA6IGxzZS0+ZXhwcjsKKyAg ICAgIHRtcCA9IGxzZS0+ZXhwcjsKKyAgICAgIGNsYXNzX2hhbiA9IEdGQ19D TEFTU19UWVBFX1AgKFRSRUVfVFlQRSAodG1wKSkKKwkgID8gZ2ZjX2NsYXNz X2RhdGFfZ2V0ICh0bXApIDogdG1wOwoKICAgICAgIGlmICghUE9JTlRFUl9U WVBFX1AgKFRSRUVfVFlQRSAoY2xhc3NfaGFuKSkpCiAJY2xhc3NfaGFuID0g Z2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTF9UUkVFLCBjbGFzc19oYW4pOwpA QCAtMTE1MDAsNiArMTE1NjAsMTAgQEAgdHJhbnNfY2xhc3NfYXNzaWdubWVu dCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhwciAqbGhzLCBnZmNfZXhw ciAqcmhzLAogCQkJICAgIHRtcCwgcmUsIGJ1aWxkX2VtcHR5X3N0bXQgKGlu cHV0X2xvY2F0aW9uKSk7CiAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sg KCZyZV9hbGxvYywgcmUpOwoKKyAgICAgIHRyZWUgcmVhbGxvY19leHByID0g bGhzLT50cy50eXBlID09IEJUX0NMQVNTID8KKwkJCQkJICBnZmNfZmluaXNo X2Jsb2NrICgmcmVfYWxsb2MpIDoKKwkJCQkJICBidWlsZF9lbXB0eV9zdG10 IChpbnB1dF9sb2NhdGlvbik7CisKICAgICAgIC8qIEFsbG9jYXRlIGlmIF9k YXRhIGlzIE5VTEwsIHJlYWxsb2NhdGUgb3RoZXJ3aXNlLiAgKi8KICAgICAg IHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIEVRX0VY UFIsCiAJCQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLCBjbGFzc19oYW4sCkBA IC0xMTUwOCw3ICsxMTU3Miw3IEBAIHRyYW5zX2NsYXNzX2Fzc2lnbm1lbnQg KHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIgKmxocywgZ2ZjX2V4cHIg KnJocywKIAkJCSAgICAgZ2ZjX3VubGlrZWx5ICh0bXAsCiAJCQkJCSAgIFBS RURfRk9SVFJBTl9GQUlMX0FMTE9DKSwKIAkJCSAgICAgZ2ZjX2ZpbmlzaF9i bG9jayAoJmFsbG9jKSwKLQkJCSAgICAgZ2ZjX2ZpbmlzaF9ibG9jayAoJnJl X2FsbG9jKSk7CisJCQkgICAgIHJlYWxsb2NfZXhwcik7CiAgICAgICBnZmNf YWRkX2V4cHJfdG9fYmxvY2sgKCZsc2UtPnByZSwgdG1wKTsKICAgICB9CgpA QCAtMTE1ODEsNiArMTE2NDUsNyBAQCB0cmFuc19jbGFzc19hc3NpZ25tZW50 IChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMsIGdmY19leHBy ICpyaHMsCiAgICAgfQogfQoKKwogLyogU3Vicm91dGluZSBvZiBnZmNfdHJh bnNfYXNzaWdubWVudCB0aGF0IGFjdHVhbGx5IHNjYWxhcml6ZXMgdGhlCiAg ICBhc3NpZ25tZW50LiAgRVhQUjEgaXMgdGhlIGRlc3RpbmF0aW9uL0xIUyBh bmQgRVhQUjIgaXMgdGhlIHNvdXJjZS9SSFMuCiAgICBpbml0X2ZsYWcgaW5k aWNhdGVzIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25zIGFuZCBkZWFsbG9j IHRoYXQgbm8KQEAgLTExNjA0LDYgKzExNjY5LDcgQEAgZ2ZjX3RyYW5zX2Fz c2lnbm1lbnRfMSAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHBy MiwgYm9vbCBpbml0X2ZsYWcsCiAgIHRyZWUgdG1wOwogICBzdG10YmxvY2tf dCBibG9jazsKICAgc3RtdGJsb2NrX3QgYm9keTsKKyAgYm9vbCBmaW5hbF9l eHByOwogICBib29sIGxfaXNfdGVtcDsKICAgYm9vbCBzY2FsYXJfdG9fYXJy YXk7CiAgIHRyZWUgc3RyaW5nX2xlbmd0aDsKQEAgLTExNjM1LDE1ICsxMTcw MSwyOSBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAqIGV4 cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKCiAgIHJz cyA9IE5VTEw7CgotICBpZiAoKGV4cHIxLT50cy50eXBlID09IEJUX0RFUklW RUQpCi0gICAgICAmJiAoZ2ZjX2lzX2NsYXNzX2FycmF5X2Z1bmN0aW9uIChl eHByMikKLQkgIHx8IGdmY19pc19hbGxvY19jbGFzc19zY2FsYXJfZnVuY3Rp b24gKGV4cHIyKSkpCi0gICAgZXhwcjItPm11c3RfZmluYWxpemUgPSAxOwor ICBpZiAoZXhwcjItPmV4cHJfdHlwZSAhPSBFWFBSX1ZBUklBQkxFCisgICAg ICAmJiBleHByMi0+ZXhwcl90eXBlICE9IEVYUFJfQ09OU1RBTlQKKyAgICAg ICYmIChleHByMi0+dHMudHlwZSA9PSBCVF9DTEFTUyB8fCBnZmNfbWF5X2Jl X2ZpbmFsaXplZCAoZXhwcjItPnRzKSkpCisgICAgeworICAgICAgZXhwcjIt Pm11c3RfZmluYWxpemUgPSAxOworICAgICAgLyogRjIwMDggNC41LjYuMyBw YXJhIDU6IElmIGFuIGV4ZWN1dGFibGUgY29uc3RydWN0IHJlZmVyZW5jZXMg YQorCSBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0 b3IsIHRoZSBlbnRpdHkgY3JlYXRlZCBieQorCSB0aGUgY29uc3RydWN0b3Ig aXMgZmluYWxpemVkIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGUgaW5uZXJtb3N0 CisJIGV4ZWN1dGFibGUgY29uc3RydWN0IGNvbnRhaW5pbmcgdGhlIHJlZmVy ZW5jZS4KKwkgVGhlc2UgZmluYWxpemF0aW9ucyB3ZXJlIGxhdGVyIGRlbGV0 ZWQgYnkgdGhlIENvbWJpbmVkIFRlY2hpY2FsCisJIENvcnJpZ2VuZGEgMSBU TyA0IGZvciBmb3J0cmFuIDIwMDggKGYwOC8wMDExKS4gICovCisgICAgICBp ZiAoZ2ZjX25vdGlmaWNhdGlvbl9zdGQgKEdGQ19TVERfRjIwMThfREVMKQor CSAgJiYgKGV4cHIyLT5leHByX3R5cGUgPT0gRVhQUl9TVFJVQ1RVUkUKKwkg ICAgICB8fCBleHByMi0+ZXhwcl90eXBlID09IEVYUFJfQVJSQVkpKQorCWV4 cHIyLT5tdXN0X2ZpbmFsaXplID0gMDsKKyAgICB9CisKCiAgIC8qIENoZWNr aW5nIHdoZXRoZXIgYSBjbGFzcyBhc3NpZ25tZW50IGlzIGRlc2lyZWQgaXMg cXVpdGUgY29tcGxpY2F0ZWQgYW5kCiAgICAgIG5lZWRlZCBhdCB0d28gbG9j YXRpb25zLCBzbyBkbyBpdCBvbmNlIG9ubHkgYmVmb3JlIHRoZSBpbmZvcm1h dGlvbiBpcwogICAgICBuZWVkZWQuICAqLwogICBsaHNfYXR0ciA9IGdmY19l eHByX2F0dHIgKGV4cHIxKTsKKwogICBpc19wb2x5X2Fzc2lnbiA9ICh1c2Vf dnB0cl9jb3B5IHx8IGxoc19hdHRyLnBvaW50ZXIKIAkJICAgIHx8IChsaHNf YXR0ci5hbGxvY2F0YWJsZSAmJiAhbGhzX2F0dHIuZGltZW5zaW9uKSkKIAkJ ICAgJiYgKGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTCkBAIC0xMTkxNyw2 ICsxMTk5Nyw4IEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHBy ICogZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAog CSAgZWxzZQogCSAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZsb29wLnBv c3QsIHRtcDIpOwogCX0KKworICAgICAgZXhwcjEtPm11c3RfZmluYWxpemUg PSAwOwogICAgIH0KICAgZWxzZSBpZiAoZmxhZ19jb2FycmF5ID09IEdGQ19G Q09BUlJBWV9MSUIKIAkgICAmJiBsaHNfY2FmX2F0dHIuY29kaW1lbnNpb24g JiYgcmhzX2NhZl9hdHRyLmNvZGltZW5zaW9uCkBAIC0xMTk2Miw2ICsxMjA0 NCwyNyBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAqIGV4 cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKIAl9CiAg ICAgfQoKKyAgLyogQ29tcGx5IHdpdGggRjIwMTggKDcuNS42LjMpLiBNYWtl IHN1cmUgdGhhdCBhbnkgZmluYWxpemF0aW9uIGNvZGUgaXMgYWRkZWQKKyAg ICAgYWZ0ZXIgZXZhbHVhdGlvbiBvZiB0aGUgcmhzIGFuZCBiZWZvcmUgcmVh bGxvY2F0aW9uLiAgKi8KKyAgZmluYWxfZXhwciA9IGdmY19hc3NpZ25tZW50 X2ZpbmFsaXplcl9jYWxsICgmbHNlLCBleHByMSwgaW5pdF9mbGFnKTsKKyAg aWYgKGZpbmFsX2V4cHIgJiYgIShleHByMi0+ZXhwcl90eXBlID09IEVYUFJf VkFSSUFCTEUKKwkJICAgICAgJiYgZXhwcjItPnN5bXRyZWUtPm4uc3ltLT5h dHRyLmFydGlmaWNpYWwpKQorICAgIHsKKyAgICAgIGlmIChsc3MgPT0gZ2Zj X3NzX3Rlcm1pbmF0b3IpCisJeworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAoJmJsb2NrLCAmcnNlLnByZSk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmYmxvY2ssICZsc2UuZmluYWxibG9jayk7CisJfQorICAgICAgZWxz ZQorCXsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNl LnByZSk7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmbG9vcC5jb2Rl W2V4cHIxLT5yYW5rIC0gMV0sCisJCQkJICAmbHNlLmZpbmFsYmxvY2spOwor CX0KKyAgICB9CisgIGVsc2UKKyAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmYm9keSwgJnJzZS5wcmUpOworCiAgIC8qIElmIG5vdGhpbmcgZWxzZSB3 b3JrcywgZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ISAgKi8KICAgaWYg KHRtcCA9PSBOVUxMX1RSRUUpCiAgICAgdG1wID0gZ2ZjX3RyYW5zX3NjYWxh cl9hc3NpZ24gKCZsc2UsICZyc2UsIGV4cHIxLT50cywKQEAgLTExOTcxLDEy ICsxMjA3NCwyMCBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhw ciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywK IAkJCQkgICAhKGxfaXNfdGVtcCB8fCBpbml0X2ZsYWcpICYmIGRlYWxsb2Ms CiAJCQkJICAgZXhwcjEtPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmNvZGltZW5z aW9uKTsKCi0gIC8qIEFkZCB0aGUgcHJlIGJsb2NrcyB0byB0aGUgYm9keS4g ICovCi0gIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnBy ZSk7CisKKyAgLyogQWRkIHRoZSBsc2UgcHJlIGJsb2NrIHRvIHRoZSBib2R5 ICAqLwogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJmxzZS5w cmUpOwogICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZib2R5LCB0bXApOwor CiAgIC8qIEFkZCB0aGUgcG9zdCBibG9ja3MgdG8gdGhlIGJvZHkuICAqLwot ICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJzZS5wb3N0KTsK KyAgaWYgKCFsX2lzX3RlbXApCisgICAgeworICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJnJzZS5maW5hbGJsb2NrLCAmcnNlLnBvc3QpOworICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZyc2UuZmluYWxi bG9jayk7CisgICAgfQorICBlbHNlCisgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJmJvZHksICZyc2UucG9zdCk7CisKICAgZ2ZjX2FkZF9ibG9ja190 b19ibG9jayAoJmJvZHksICZsc2UucG9zdCk7CgogICBpZiAobHNzID09IGdm Y19zc190ZXJtaW5hdG9yKQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJh bnMtaW8uY2MgYi9nY2MvZm9ydHJhbi90cmFucy1pby5jYwppbmRleCBjYzY5 MDQ1ZGQ0Zi4uYmFlZWE5NTVkMzUgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFu L3RyYW5zLWlvLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWlvLmNjCkBA IC0yNjkwLDYgKzI2OTAsNyBAQCBzY2FsYXJpemU6CgogICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmYm9keSwgJnNlLnByZSk7CiAgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKCZib2R5LCAmc2UucG9zdCk7CisgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKCZib2R5LCAmc2UuZmluYWxibG9jayk7CgogICBpZiAo c2Uuc3MgPT0gTlVMTCkKICAgICB0bXAgPSBnZmNfZmluaXNoX2Jsb2NrICgm Ym9keSk7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1zdG10LmNj IGIvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYwppbmRleCAyYjQyNzhiZTc0 OC4uZjc4ODc1NDU1YTUgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5z LXN0bXQuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYwpAQCAt NDQ0LDcgKzQ0NCw4IEBAIGdmY190cmFuc19jYWxsIChnZmNfY29kZSAqIGNv ZGUsIGJvb2wgZGVwZW5kZW5jeV9jaGVjaywKICAgICAgIGVsc2UKIAlnZmNf YWRkX2V4cHJfdG9fYmxvY2sgKCZzZS5wcmUsIHNlLmV4cHIpOwoKLSAgICAg IGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZzZS5wb3N0KTsK KyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5maW5hbGJsb2Nr LCAmc2UucG9zdCk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm c2UucHJlLCAmc2UuZmluYWxibG9jayk7CiAgICAgfQoKICAgZWxzZQpAQCAt NTQzLDYgKzU0NCw3IEBAIGdmY190cmFuc19jYWxsIChnZmNfY29kZSAqIGNv ZGUsIGJvb2wgZGVwZW5kZW5jeV9jaGVjaywKICAgICAgIGdmY190cmFuc19z Y2FsYXJpemluZ19sb29wcyAoJmxvb3AsICZib2R5KTsKICAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZsb29wLnByZSk7CiAgICAg ICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmbG9vcC5wb3N0 KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZs b29wc2UuZmluYWxibG9jayk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmc2UucHJlLCAmc2UucG9zdCk7CiAgICAgICBnZmNfY2xlYW51cF9s b29wICgmbG9vcCk7CiAgICAgfQpAQCAtMjE4OSw2ICsyMTkxLDcgQEAgdHJh bnNfYXNzb2NpYXRlX3ZhciAoZ2ZjX3N5bWJvbCAqc3ltLCBnZmNfd3JhcHBl ZF9ibG9jayAqYmxvY2spCiAgICAgICBnZmNfZXhwciAqbGhzOwogICAgICAg dHJlZSByZXM7CiAgICAgICBnZmNfc2Ugc2U7CisgICAgICBzdG10YmxvY2tf dCBmaW5hbF9ibG9jazsKCiAgICAgICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxM KTsKCkBAIC0yMTk2LDYgKzIxOTksMTUgQEAgdHJhbnNfYXNzb2NpYXRlX3Zh ciAoZ2ZjX3N5bWJvbCAqc3ltLCBnZmNfd3JhcHBlZF9ibG9jayAqYmxvY2sp CiAJIGFsbG9jYXRpb24gY2FuIHRha2UgcGxhY2UgYXV0b21hdGljYWxseSBp biBnZmNfdHJhbnNfYXNzaWdubWVudC4KIAkgVGhlIGZyb250ZW5kIHByZXZl bnRzIHRoZW0gZnJvbSBiZWluZyBlaXRoZXIgYWxsb2NhdGVkLAogCSBkZWFs bG9jYXRlZCBvciByZWFsbG9jYXRlZC4gICovCisgICAgICBpZiAoc3ltLT50 cy50eXBlID09IEJUX0RFUklWRUQKKwkgICYmIHN5bS0+dHMudS5kZXJpdmVk LT5hdHRyLmFsbG9jX2NvbXApCisJeworCSAgdG1wID0gc3ltLT5iYWNrZW5k X2RlY2w7CisJICB0bXAgPSBnZmNfbnVsbGlmeV9hbGxvY19jb21wIChzeW0t PnRzLnUuZGVyaXZlZCwgdG1wLAorCQkJCXN5bS0+YXR0ci5kaW1lbnNpb24g PyBzeW0tPmFzLT5yYW5rIDogMCk7CisJICBnZmNfYWRkX2V4cHJfdG9fYmxv Y2sgKCZzZS5wcmUsIHRtcCk7CisJfQorCiAgICAgICBpZiAoc3ltLT5hdHRy LmFsbG9jYXRhYmxlKQogCXsKIAkgIHRtcCA9IHN5bS0+YmFja2VuZF9kZWNs OwpAQCAtMjIwNiw5ICsyMjE4LDMzIEBAIHRyYW5zX2Fzc29jaWF0ZV92YXIg KGdmY19zeW1ib2wgKnN5bSwgZ2ZjX3dyYXBwZWRfYmxvY2sgKmJsb2NrKQog CX0KCiAgICAgICBsaHMgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChzeW0p OworICAgICAgbGhzLT5tdXN0X2ZpbmFsaXplID0gMDsKICAgICAgIHJlcyA9 IGdmY190cmFuc19hc3NpZ25tZW50IChsaHMsIGUsIGZhbHNlLCB0cnVlKTsK ICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLnByZSwgcmVzKTsK CisgICAgICBnZmNfaW5pdF9ibG9jayAoJmZpbmFsX2Jsb2NrKTsKKworICAg ICAgaWYgKHN5bS0+YXR0ci5hc3NvY2lhdGVfdmFyCisJICAmJiBzeW0tPnRz LnR5cGUgPT0gQlRfREVSSVZFRAorCSAgJiYgc3ltLT50cy51LmRlcml2ZWQt PmF0dHIuZGVmaW5lZF9hc3NpZ25fY29tcAorCSAgJiYgZ2ZjX21heV9iZV9m aW5hbGl6ZWQgKHN5bS0+dHMpCisJICAmJiBlLT5leHByX3R5cGUgPT0gRVhQ Ul9GVU5DVElPTikKKwl7CisJICBnZmNfZXhwciAqZWY7CisJICBlZiA9IGdm Y19sdmFsX2V4cHJfZnJvbV9zeW0gKHN5bSk7CisJICBnZmNfYWRkX2ZpbmFs aXplcl9jYWxsICgmZmluYWxfYmxvY2ssIGVmKTsKKwkgIGdmY19mcmVlX2V4 cHIgKGVmKTsKKwl9CisKKyAgICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRf REVSSVZFRAorCSAgJiYgc3ltLT50cy51LmRlcml2ZWQtPmF0dHIuYWxsb2Nf Y29tcCkKKwl7CisJICB0bXAgPSBzeW0tPmJhY2tlbmRfZGVjbDsKKwkgIHRt cCA9IGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXAgKHN5bS0+dHMudS5kZXJp dmVkLAorCQkJCQkgICB0bXAsIDApOworCSAgZ2ZjX2FkZF9leHByX3RvX2Js b2NrICgmZmluYWxfYmxvY2ssIHRtcCk7CisJfQorCiAgICAgICB0bXAgPSBz eW0tPmJhY2tlbmRfZGVjbDsKICAgICAgIGlmIChlLT5leHByX3R5cGUgPT0g RVhQUl9GVU5DVElPTgogCSAgJiYgc3ltLT50cy50eXBlID09IEJUX0RFUklW RUQKQEAgLTIyNDMsNiArMjI3OSw4IEBAIHRyYW5zX2Fzc29jaWF0ZV92YXIg KGdmY19zeW1ib2wgKnN5bSwgZ2ZjX3dyYXBwZWRfYmxvY2sgKmJsb2NrKQog ICAgICAgZWxzZQogCXRtcCA9IE5VTExfVFJFRTsKCisgICAgICBnZmNfYWRk X2V4cHJfdG9fYmxvY2sgKCZmaW5hbF9ibG9jaywgdG1wKTsKKyAgICAgIHRt cCA9IGdmY19maW5pc2hfYmxvY2sgKCZmaW5hbF9ibG9jayk7CiAgICAgICBy ZXMgPSBnZmNfZmluaXNoX2Jsb2NrICgmc2UucHJlKTsKICAgICAgIGdmY19h ZGRfaW5pdF9jbGVhbnVwIChibG9jaywgcmVzLCB0bXApOwogICAgICAgZ2Zj X2ZyZWVfZXhwciAobGhzKTsKQEAgLTYzNDcsNyArNjM4NSwxMCBAQCBnZmNf dHJhbnNfYWxsb2NhdGUgKGdmY19jb2RlICogY29kZSkKIAl9CiAgICAgICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZzZS5wcmUpOwogICAg ICAgaWYgKGNvZGUtPmV4cHIzLT5tdXN0X2ZpbmFsaXplKQotCWdmY19hZGRf YmxvY2tfdG9fYmxvY2sgKCZmaW5hbF9ibG9jaywgJnNlLnBvc3QpOworCXsK KwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZmaW5hbF9ibG9jaywgJnNl LmZpbmFsYmxvY2spOworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmZp bmFsX2Jsb2NrLCAmc2UucG9zdCk7CisJfQogICAgICAgZWxzZQogCWdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZwb3N0LCAmc2UucG9zdCk7CgpAQCAtNzAw Nyw4ICs3MDQ4LDEzIEBAIGdmY190cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUg KiBjb2RlKQogCSAgZ2ZjX2V4cHIgKmluaXRfZXhwciA9IGdmY19leHByX3Rv X2luaXRpYWxpemUgKGV4cHIpOwogCSAgZ2ZjX2V4cHIgKnJocyA9IGUzcmhz ID8gZTNyaHMgOiBnZmNfY29weV9leHByIChjb2RlLT5leHByMyk7CiAJICBm bGFnX3JlYWxsb2NfbGhzID0gMDsKKworCSAgLyogU2V0IHRoZSBzeW1ib2wg dG8gYmUgYXJ0aWZpY2lhbCBzbyB0aGF0IHRoZSByZXN1bHQgaXMgbm90IGZp bmFsaXplZC4gICovCisJICBpbml0X2V4cHItPnN5bXRyZWUtPm4uc3ltLT5h dHRyLmFydGlmaWNpYWwgPSAxOwogCSAgdG1wID0gZ2ZjX3RyYW5zX2Fzc2ln bm1lbnQgKGluaXRfZXhwciwgcmhzLCB0cnVlLCBmYWxzZSwgdHJ1ZSwKIAkJ CQkgICAgICBmYWxzZSk7CisJICBpbml0X2V4cHItPnN5bXRyZWUtPm4uc3lt LT5hdHRyLmFydGlmaWNpYWwgPSAwOworCiAJICBmbGFnX3JlYWxsb2NfbGhz ID0gcmVhbGxvY19saHM7CiAJICAvKiBGcmVlIHRoZSBleHByZXNzaW9uIGFs bG9jYXRlZCBmb3IgaW5pdF9leHByLiAgKi8KIAkgIGdmY19mcmVlX2V4cHIg KGluaXRfZXhwcik7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy5j YyBiL2djYy9mb3J0cmFuL3RyYW5zLmNjCmluZGV4IDRjMjE5M2JhZDM2Li4x MjY4ZjA0ZTU3NiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMuY2MK KysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuY2MKQEAgLTEyNzYsNiArMTI3Niwx NCBAQCBnZmNfYWRkX2ZpbmFsaXplcl9jYWxsIChzdG10YmxvY2tfdCAqYmxv Y2ssIGdmY19leHByICpleHByMikKICAgaWYgKCFleHByMiB8fCAoZXhwcjIt PnRzLnR5cGUgIT0gQlRfREVSSVZFRCAmJiBleHByMi0+dHMudHlwZSAhPSBC VF9DTEFTUykpCiAgICAgcmV0dXJuIGZhbHNlOwoKKyAgLyogRmluYWxpemF0 aW9uIG9mIHRoZXNlIHRlbXBvcmFyaWVzIGlzIG1hZGUgYnkgZXhwbGljaXQg Y2FsbHMgaW4KKyAgICAgcmVzb2x2ZS5jYyhnZW5lcmF0ZV9jb21wb25lbnRf YXNzaWdubWVudHMpLiAgKi8KKyAgaWYgKGV4cHIyLT5leHByX3R5cGUgPT0g RVhQUl9WQVJJQUJMRQorICAgICAgJiYgZXhwcjItPnN5bXRyZWUtPm4uc3lt LT5uYW1lWzBdID09ICdfJworICAgICAgJiYgZXhwcjItPnRzLnR5cGUgPT0g QlRfREVSSVZFRAorICAgICAgJiYgZXhwcjItPnRzLnUuZGVyaXZlZC0+YXR0 ci5kZWZpbmVkX2Fzc2lnbl9jb21wKQorICAgIHJldHVybiBmYWxzZTsKKwog ICBpZiAoZXhwcjItPnRzLnR5cGUgPT0gQlRfREVSSVZFRCkKICAgICB7CiAg ICAgICBnZmNfaXNfZmluYWxpemFibGUgKGV4cHIyLT50cy51LmRlcml2ZWQs ICZmaW5hbF9leHByKTsKQEAgLTEzNzAsNiArMTM3OCwyNzcgQEAgZ2ZjX2Fk ZF9maW5hbGl6ZXJfY2FsbCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhw ciAqZXhwcjIpCiB9CgoKKyAgLyogRjIwMTggKDcuNS42LjMpOiAiV2hlbiBh biBpbnRyaW5zaWMgYXNzaWdubWVudCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQK KyAgICAgKDEwLjIuMS4zKSwgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhbiB1 bmFsbG9jYXRlZCBhbGxvY2F0YWJsZSB2YXJpYWJsZSwKKyAgICAgaXQgaXMg ZmluYWxpemVkIGFmdGVyIGV2YWx1YXRpb24gb2YgZXhwciBhbmQgYmVmb3Jl IHRoZSBkZWZpbml0aW9uIG9mCisgICAgIHRoZSB2YXJpYWJsZS4gSWYgdGhl IHZhcmlhYmxlIGlzIGFuIGFsbG9jYXRlZCBhbGxvY2F0YWJsZSB2YXJpYWJs ZSwgb3IKKyAgICAgaGFzIGFuIGFsbG9jYXRlZCBhbGxvY2F0YWJsZSBzdWJv YmplY3QsIHRoYXQgd291bGQgYmUgZGVhbGxvY2F0ZWQgYnkKKyAgICAgaW50 cmluc2ljIGFzc2lnbm1lbnQsIHRoZSBmaW5hbGl6YXRpb24gb2NjdXJzIGJl Zm9yZSB0aGUgZGVhbGxvY2F0aW9uICovCisKK2Jvb2wKK2dmY19hc3NpZ25t ZW50X2ZpbmFsaXplcl9jYWxsIChnZmNfc2UgKmxzZSwgZ2ZjX2V4cHIgKmV4 cHIxLCBib29sIGluaXRfZmxhZykKK3sKKyAgc3ltYm9sX2F0dHJpYnV0ZSBs aHNfYXR0cjsKKyAgdHJlZSBmaW5hbF9leHByOworICB0cmVlIHB0cjsKKyAg dHJlZSBjb25kOworICBnZmNfc2Ugc2U7CisgIGdmY19zeW1ib2wgKnN5bSA9 IGV4cHIxLT5zeW10cmVlLT5uLnN5bTsKKyAgZ2ZjX3JlZiAqcmVmID0gZXhw cjEtPnJlZjsKKyAgc3RtdGJsb2NrX3QgZmluYWxfYmxvY2s7CisgIGdmY19p bml0X2Jsb2NrICgmZmluYWxfYmxvY2spOworICBnZmNfZXhwciAqZmluYWxp emVfZXhwcjsKKyAgYm9vbCBjbGFzc19hcnJheV9yZWY7CisKKyAgLyogV2Ug aGF2ZSB0byBleGNsdWRlIHZ0YWJsZSBwcm9jZWR1cmVzIChfY29weSBhbmQg X2ZpbmFsIGVzcGVjaWFsbHkpLCB1c2VzCisgICAgIG9mIGdmY190cmFuc19h c3NpZ25tZW50XzEgaW4gaW5pdGlhbGl6YXRpb24gYW5kIGFsbG9jYXRpb24g YmVmb3JlIHRyeWluZworICAgICB0byBidWlsZCBhIGZpbmFsIGNhbGwuICAq LworICBpZiAoIWV4cHIxLT5tdXN0X2ZpbmFsaXplCisgICAgICB8fCBzeW0t PmF0dHIuYXJ0aWZpY2lhbAorICAgICAgfHwgc3ltLT5ucy0+cHJvY19uYW1l LT5hdHRyLmFydGlmaWNpYWwKKyAgICAgIHx8IGluaXRfZmxhZykKKyAgICBy ZXR1cm4gZmFsc2U7CisKKyAgY2xhc3NfYXJyYXlfcmVmID0gcmVmICYmIHJl Zi0+dHlwZSA9PSBSRUZfQ09NUE9ORU5UCisJCSAgICAmJiAhc3RyY21wIChy ZWYtPnUuYy5jb21wb25lbnQtPm5hbWUsICJfZGF0YSIpCisJCSAgICAmJiBy ZWYtPm5leHQgJiYgcmVmLT5uZXh0LT50eXBlID09IFJFRl9BUlJBWQorCQkg ICAgJiYgIXJlZi0+bmV4dC0+bmV4dDsKKworICBpZiAoY2xhc3NfYXJyYXlf cmVmKQorICAgIHsKKyAgICAgIGZpbmFsaXplX2V4cHIgPSBnZmNfbHZhbF9l eHByX2Zyb21fc3ltIChzeW0pOworICAgICAgZmluYWxpemVfZXhwci0+bXVz dF9maW5hbGl6ZSA9IDE7CisgICAgICByZWYgPSBOVUxMOworICAgIH0KKyAg ZWxzZQorICAgIGZpbmFsaXplX2V4cHIgPSBnZmNfY29weV9leHByIChleHBy MSk7CisKKyAgLyogRjIwMTggNy41LjYuMjogT25seSBmaW5hbGl6YWJsZSBl bnRpdGllcyBhcmUgZmluYWxpemVkLiAgKi8KKyAgaWYgKCEoZXhwcjEtPnRz LnR5cGUgPT0gQlRfREVSSVZFRAorCSYmIGdmY19pc19maW5hbGl6YWJsZSAo ZXhwcjEtPnRzLnUuZGVyaXZlZCwgTlVMTCkpCisgICAgICAmJiBleHByMS0+ dHMudHlwZSAhPSBCVF9DTEFTUykKKyAgICAgIHJldHVybiBmYWxzZTsKKwor ICBpZiAoIWdmY19tYXlfYmVfZmluYWxpemVkIChzeW0tPnRzKSkKKyAgICBy ZXR1cm4gZmFsc2U7CisKKyAgZ2ZjX2luaXRfYmxvY2sgKCZmaW5hbF9ibG9j ayk7CisgIGJvb2wgZmluYWxpemFibGUgPSBnZmNfYWRkX2ZpbmFsaXplcl9j YWxsICgmZmluYWxfYmxvY2ssIGZpbmFsaXplX2V4cHIpOworICBnZmNfZnJl ZV9leHByIChmaW5hbGl6ZV9leHByKTsKKworICBpZiAoIWZpbmFsaXphYmxl KQorICAgIHJldHVybiBmYWxzZTsKKworICBsaHNfYXR0ciA9IGdmY19leHBy X2F0dHIgKGV4cHIxKTsKKworICAvKiBDaGVjayBhbGxvY2F0YWJsZS9wb2lu dGVyIGlzIGFsbG9jYXRlZC9hc3NvY2lhdGVkLiAgKi8KKyAgaWYgKGxoc19h dHRyLmFsbG9jYXRhYmxlIHx8IGxoc19hdHRyLnBvaW50ZXIpCisgICAgewor ICAgICAgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTKQorCXsKKwkg IHB0ciA9IGdmY19nZXRfY2xhc3NfZnJvbV9nZmNfZXhwciAoZXhwcjEpOwor CSAgZ2NjX2Fzc2VydCAocHRyICE9IE5VTExfVFJFRSk7CisJICBwdHIgPSBn ZmNfY2xhc3NfZGF0YV9nZXQgKHB0cik7CisJICBpZiAobGhzX2F0dHIuZGlt ZW5zaW9uKQorCSAgICBwdHIgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFf Z2V0IChwdHIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBnZmNfaW5pdF9z ZSAoJnNlLCBOVUxMKTsKKwkgIGlmIChleHByMS0+cmFuaykKKwkgICAgewor CSAgICAgIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoJnNlLCBleHByMSk7 CisJICAgICAgcHRyID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAo c2UuZXhwcik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGdm Y19jb252X2V4cHIgKCZzZSwgZXhwcjEpOworCSAgICAgIHB0ciA9IGdmY19i dWlsZF9hZGRyX2V4cHIgKE5VTExfVFJFRSwgc2UuZXhwcik7CisJICAgIH0K Kwl9CisKKyAgICAgIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xv Y2F0aW9uLCBORV9FWFBSLCBsb2dpY2FsX3R5cGVfbm9kZSwKKwkJCSAgICAg IHB0ciwgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAocHRyKSkpOworICAg ICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBD T05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQsIGdm Y19maW5pc2hfYmxvY2sgKCZmaW5hbF9ibG9jayksCisJCQkgICAgICAgYnVp bGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKyAgICB9CisgIGVs c2UKKyAgICBmaW5hbF9leHByID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmZpbmFs X2Jsb2NrKTsKKworICAvKiBDaGVjayBvcHRpb25hbCBwcmVzZW50LiAgKi8K KyAgaWYgKHN5bS0+YXR0ci5vcHRpb25hbCkKKyAgICB7CisgICAgICBjb25k ID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChzeW0pOworICAgICAgZmluYWxf ZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIs IHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQsIGZpbmFsX2V4cHIs CisJCQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24p KTsKKyAgICB9CisKKyAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmbHNlLT5m aW5hbGJsb2NrLCBmaW5hbF9leHByKTsKKworICByZXR1cm4gdHJ1ZTsKK30K KworCisvKiBGaW5hbGl6ZSBhIFRSRUUgZXhwcmVzc2lvbiB1c2luZyB0aGUg ZmluYWxpemVyIHdyYXBwZXIuIFRoZSByZXN1bHQgaXMKKyAgIGZpeGVkIGlu IG9yZGVyIHRvIHByZXZlbnQgcmVwZWF0ZWQgY2FsbHMuICAqLworCit2b2lk CitnZmNfZmluYWxpemVfdHJlZV9leHByIChnZmNfc2UgKnNlLCBnZmNfc3lt Ym9sICpkZXJpdmVkLAorCQkJc3ltYm9sX2F0dHJpYnV0ZSBhdHRyLCBpbnQg cmFuaykKK3sKKyAgdHJlZSB2cHRyLCBmaW5hbF9mbmRlY2wsIGRlc2MsIHRt cCwgc2l6ZSwgaXNfZmluYWw7CisgIHRyZWUgZGF0YV9wdHIsIGRhdGFfbnVs bCwgY29uZDsKKyAgZ2ZjX3N5bWJvbCAqdnRhYjsKKyAgZ2ZjX3NlIHBvc3Rf c2U7CisgIGJvb2wgaXNfY2xhc3MgPSBHRkNfQ0xBU1NfVFlQRV9QIChUUkVF X1RZUEUgKHNlLT5leHByKSk7CisKKyAgaWYgKGF0dHIucG9pbnRlcikKKyAg ICByZXR1cm47CisKKyAgLyogRGVyaXZlZCB0eXBlIGZ1bmN0aW9uIHJlc3Vs dHMgd2l0aCBjb21wb25lbnRzIHRoYXQgaGF2ZSBkZWZpbmVkCisgICAgIGFz c2lnbmVtZW50cyBhcmUgaGFuZGxlZCBpbiByZXNvbHZlLmNjKGdlbmVyYXRl X2NvbXBvbmVudF9hc3NpZ25tZW50cykgICovCisgIGlmIChkZXJpdmVkICYm IChkZXJpdmVkLT5hdHRyLmlzX2NfaW50ZXJvcAorCQkgIHx8IGRlcml2ZWQt PmF0dHIuaXNfaXNvX2MKKwkJICB8fCBkZXJpdmVkLT5hdHRyLmlzX2JpbmRf YworCQkgIHx8IGRlcml2ZWQtPmF0dHIuZGVmaW5lZF9hc3NpZ25fY29tcCkp CisgICAgcmV0dXJuOworCisgIGlmIChpc19jbGFzcykKKyAgICB7CisgICAg ICBpZiAoIVZBUl9QIChzZS0+ZXhwcikpCisJeworCSAgZGVzYyA9IGdmY19l dmFsdWF0ZV9ub3cgKHNlLT5leHByLCAmc2UtPnByZSk7CisJICBzZS0+ZXhw ciA9IGRlc2M7CisJfQorICAgICAgZGVzYyA9IGdmY19jbGFzc19kYXRhX2dl dCAoc2UtPmV4cHIpOworICAgICAgdnB0ciA9IGdmY19jbGFzc192cHRyX2dl dCAoc2UtPmV4cHIpOworICAgIH0KKyAgZWxzZSBpZiAoZGVyaXZlZCAmJiBn ZmNfaXNfZmluYWxpemFibGUgKGRlcml2ZWQsIE5VTEwpKQorICAgIHsKKyAg ICAgIGlmIChkZXJpdmVkLT5hdHRyLnplcm9fY29tcCAmJiAhcmFuaykKKwl7 CisJICAvKiBBbnkgYXR0ZW1wdCB0byBhc3NpZ24gemVybyBsZW5ndGggZW50 aXRpZXMsIGNhdXNlcyB0aGUgZ2ltcGxpZmllcgorCSAgICAgYWxsIG1hbm5l ciBvZiBwcm9ibGVtcy4gSW5zdGVhZCwgYSB2YXJpYWJsZSBpcyBjcmVhdGVk IHRvIGFjdCBhcworCSAgICAgYXMgdGhlIGFyZ3VtZW50IGZvciB0aGUgZmlu YWwgY2FsbC4gICovCisJICBkZXNjID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVf VFlQRSAoc2UtPmV4cHIpLCAiemVybyIpOworCX0KKyAgICAgIGVsc2UgaWYg KHNlLT5kaXJlY3RfYnlyZWYpCisJeworCSAgZGVzYyA9IGdmY19ldmFsdWF0 ZV9ub3cgKHNlLT5leHByLCAmc2UtPmZpbmFsYmxvY2spOworCSAgaWYgKGRl cml2ZWQtPmF0dHIuYWxsb2NfY29tcCkKKwkgICAgeworCSAgICAgIC8qIE5l ZWQgdG8gY29weSBhbGxvY2F0ZWQgY29tcG9uZW50cyBhbmQgbm90IGZpbmFs aXplLiAgKi8KKwkgICAgICB0bXAgPSBnZmNfY29weV9hbGxvY19jb21wX25v X2ZpbmkgKGRlcml2ZWQsIHNlLT5leHByLCBkZXNjLCByYW5rLCAwKTsKKwkg ICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+ZmluYWxibG9jaywg dG1wKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBkZXNjID0g Z2ZjX2V2YWx1YXRlX25vdyAoc2UtPmV4cHIsICZzZS0+cHJlKTsKKwkgIHNl LT5leHByID0gZ2ZjX2V2YWx1YXRlX25vdyAoZGVzYywgJnNlLT5wcmUpOwor CSAgaWYgKGRlcml2ZWQtPmF0dHIuYWxsb2NfY29tcCkKKwkgICAgeworCSAg ICAgIC8qIE5lZWQgdG8gY29weSBhbGxvY2F0ZWQgY29tcG9uZW50cyBhbmQg bm90IGZpbmFsaXplLiAgKi8KKwkgICAgICB0bXAgPSBnZmNfY29weV9hbGxv Y19jb21wX25vX2ZpbmkgKGRlcml2ZWQsIHNlLT5leHByLCBkZXNjLCByYW5r LCAwKTsKKwkgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+cHJl LCB0bXApOworCSAgICB9CisJfQorCisgICAgICB2dGFiID0gZ2ZjX2ZpbmRf ZGVyaXZlZF92dGFiIChkZXJpdmVkKTsKKyAgICAgIGlmICh2dGFiLT5iYWNr ZW5kX2RlY2wgPT0gTlVMTF9UUkVFKQorCXZwdHIgPSBnZmNfZ2V0X3N5bWJv bF9kZWNsICh2dGFiKTsKKyAgICAgIGVsc2UKKwl2cHRyID0gdnRhYi0+YmFj a2VuZF9kZWNsOworICAgICAgdnB0ciA9IGdmY19idWlsZF9hZGRyX2V4cHIg KE5VTEwsIHZwdHIpOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybjsKKwor ICBzaXplID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIpOworICBmaW5hbF9m bmRlY2wgPSBnZmNfdnB0cl9maW5hbF9nZXQgKHZwdHIpOworICBpc19maW5h bCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIs CisJCQkgICAgICBsb2dpY2FsX3R5cGVfbm9kZSwKKwkJCSAgICAgIGZpbmFs X2ZuZGVjbCwKKwkJCSAgICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChm aW5hbF9mbmRlY2wpLAorCQkJCQkgICAgbnVsbF9wb2ludGVyX25vZGUpKTsK KworICBmaW5hbF9mbmRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9s b2MgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkgICAgICBmaW5hbF9mbmRlY2wp OworICBpZiAoIUdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChk ZXNjKSkpCisgICAgeworICAgICAgaWYgKGlzX2NsYXNzKQorCWRlc2MgPSBn ZmNfY29udl9zY2FsYXJfdG9fZGVzY3JpcHRvciAoc2UsIGRlc2MsIGF0dHIp OworICAgICAgZWxzZQorCXsKKwkgIGdmY19pbml0X3NlICgmcG9zdF9zZSwg TlVMTCk7CisJICBkZXNjID0gZ2ZjX2NvbnZfc2NhbGFyX3RvX2Rlc2NyaXB0 b3IgKCZwb3N0X3NlLCBkZXNjLCBhdHRyKTsKKwkgIGdmY19hZGRfZXhwcl90 b19ibG9jayAoJnNlLT5wcmUsIGdmY19maW5pc2hfYmxvY2sgKCZwb3N0X3Nl LnByZSkpOworCX0KKyAgICB9CisKKyAgaWYgKGRlcml2ZWQgJiYgZGVyaXZl ZC0+YXR0ci56ZXJvX2NvbXApCisgICAgeworICAgICAgLyogQWxsIHRoZSBj b25kaXRpb25zIGJlbG93IGJyZWFrIGRvd24gZm9yIHplcm8gbGVuZ3RoIGRl cml2ZWQgdHlwZXMuICAqLworICAgICAgdG1wID0gYnVpbGRfY2FsbF9leHBy X2xvYyAoaW5wdXRfbG9jYXRpb24sIGZpbmFsX2ZuZGVjbCwgMywKKwkJCQkg Z2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTCwgZGVzYyksCisJCQkJIHNpemUs IGJvb2xlYW5fZmFsc2Vfbm9kZSk7CisgICAgICBnZmNfYWRkX2V4cHJfdG9f YmxvY2sgKCZzZS0+ZmluYWxibG9jaywgdG1wKTsKKyAgICAgIHJldHVybjsK KyAgICB9CisKKyAgaWYgKCFWQVJfUCAoZGVzYykpCisgICAgeworICAgICAg dG1wID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVfVFlQRSAoZGVzYyksICJyZXMi KTsKKyAgICAgIGlmIChzZS0+ZGlyZWN0X2J5cmVmKQorCWdmY19hZGRfbW9k aWZ5ICgmc2UtPmZpbmFsYmxvY2ssIHRtcCwgZGVzYyk7CisgICAgICBlbHNl CisJZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+cHJlLCB0bXAsIGRlc2MpOworICAg ICAgZGVzYyA9IHRtcDsKKyAgICB9CisKKyAgZGF0YV9wdHIgPSBnZmNfY29u dl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkZXNjKTsKKyAgZGF0YV9udWxsID0g Zm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGRhdGFfcHRyKSwgbnVsbF9wb2lu dGVyX25vZGUpOworICBjb25kID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9s b2NhdGlvbiwgTkVfRVhQUiwKKwkJCSAgbG9naWNhbF90eXBlX25vZGUsIGRh dGFfcHRyLCBkYXRhX251bGwpOworICBpc19maW5hbCA9IGZvbGRfYnVpbGQy X2xvYyAoaW5wdXRfbG9jYXRpb24sIFRSVVRIX0FORF9FWFBSLAorCQkJICAg ICAgbG9naWNhbF90eXBlX25vZGUsIGlzX2ZpbmFsLCBjb25kKTsKKyAgdG1w ID0gYnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGZpbmFs X2ZuZGVjbCwgMywKKwkJCSAgICAgZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVM TCwgZGVzYyksCisJCQkgICAgIHNpemUsIGJvb2xlYW5fZmFsc2Vfbm9kZSk7 CisgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENP TkRfRVhQUiwKKwkJCSB2b2lkX3R5cGVfbm9kZSwgaXNfZmluYWwsIHRtcCwK KwkJCSBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOworCisg IGlmIChpc19jbGFzcyAmJiBzZS0+c3MgJiYgc2UtPnNzLT5sb29wKQorICAg IHsKKyAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5sb29wLT5w b3N0LCB0bXApOworICAgICAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChpbnB1 dF9sb2NhdGlvbiwgQ09ORF9FWFBSLAorCQkJICAgICB2b2lkX3R5cGVfbm9k ZSwgY29uZCwKKwkJCSAgICAgZ2ZjX2NhbGxfZnJlZSAoZGF0YV9wdHIpLAor CQkJICAgICBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwor ICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmc2UtPmxvb3AtPnBvc3Qs IHRtcCk7CisgICAgICBnZmNfYWRkX21vZGlmeSAoJnNlLT5sb29wLT5wb3N0 LCBkYXRhX3B0ciwgZGF0YV9udWxsKTsKKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+ZmluYWxibG9j aywgdG1wKTsKKworICAgICAgLyogTGV0IHRoZSBzY2FsYXJpemVyIHRha2Ug Y2FyZSBvZiBmcmVlaW5nIG9mIHRlbXBvcmFyeSBhcnJheXMuICAqLworICAg ICAgaWYgKGF0dHIuYWxsb2NhdGFibGUgJiYgIShzZS0+bG9vcCAmJiBzZS0+ bG9vcC0+dGVtcF9kaW0pKQorCXsKKwkgIHRtcCA9IGZvbGRfYnVpbGQzX2xv YyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKKwkJCQkgdm9pZF90eXBl X25vZGUsIGNvbmQsCisJCQkJIGdmY19jYWxsX2ZyZWUgKGRhdGFfcHRyKSwK KwkJCQkgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKwkg IGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5maW5hbGJsb2NrLCB0bXAp OworCSAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+ZmluYWxibG9jaywgZGF0YV9w dHIsIGRhdGFfbnVsbCk7CisJfQorICAgIH0KK30KKworCiAvKiBVc2VyLWRl YWxsb2NhdGU7IHdlIGVtaXQgdGhlIGNvZGUgZGlyZWN0bHkgZnJvbSB0aGUg ZnJvbnQtZW5kLCBhbmQgdGhlCiAgICBsb2dpYyBpcyB0aGUgc2FtZSBhcyB0 aGUgcHJldmlvdXMgbGlicmFyeSBmdW5jdGlvbjoKCmRpZmYgLS1naXQgYS9n Y2MvZm9ydHJhbi90cmFucy5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuaAppbmRl eCA5YzZhMWMwNmJmNi4uMWFkNmQ5NDRmY2YgMTAwNjQ0Ci0tLSBhL2djYy9m b3J0cmFuL3RyYW5zLmgKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuaApAQCAt NDMsNiArNDMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgZ2ZjX3NlCiAgIHN0bXRi bG9ja190IHByZTsKICAgc3RtdGJsb2NrX3QgcG9zdDsKCisgIC8qIENhcnJp ZXMgZmluYWxpemF0aW9uIGNvZGUgdGhhdCBpcyByZXF1aXJlZCB0byBiZSBl eGVjdXRlZCBleGVjdXRpb24gb2YgdGhlCisgICAgIGlubmVybW9zdCBleGVj dXRhYmxlIGNvbnN0cnVjdC4gICovCisgIHN0bXRibG9ja190IGZpbmFsYmxv Y2s7CisKICAgLyogdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiAqLwog ICB0cmVlIGV4cHI7CgpAQCAtNTUsNyArNTksNyBAQCB0eXBlZGVmIHN0cnVj dCBnZmNfc2UKCiAgIC8qIFdoZXRoZXIgZXhwciBpcyBhIHJlZmVyZW5jZSB0 byBhbiB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgb2JqZWN0LiAgKi8KICAgdW5z aWduZWQgdW5saW1pdGVkX3BvbHltb3JwaGljOjE7Ci0KKwogICAvKiBJZiBz ZXQgZ2ZjX2NvbnZfdmFyaWFibGUgd2lsbCByZXR1cm4gYW4gZXhwcmVzc2lv biBmb3IgdGhlIGFycmF5CiAgICAgIGRlc2NyaXB0b3IuIFdoZW4gc2V0LCB3 YW50X3BvaW50ZXIgc2hvdWxkIGFsc28gYmUgc2V0LgogICAgICBJZiBub3Qg c2V0IHNjYWxhcml6aW5nIHZhcmlhYmxlcyB3aWxsIGJlIHN1YnN0aXR1dGVk LiAgKi8KQEAgLTQ1MCw2ICs0NTQsOCBAQCB0cmVlIGdmY19nZXRfdnB0cl9m cm9tX2V4cHIgKHRyZWUpOwogdHJlZSBnZmNfY29weV9jbGFzc190b19jbGFz cyAodHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7CiBib29sIGdmY19hZGRfZmlu YWxpemVyX2NhbGwgKHN0bXRibG9ja190ICosIGdmY19leHByICopOwogYm9v bCBnZmNfYWRkX2NvbXBfZmluYWxpemVyX2NhbGwgKHN0bXRibG9ja190ICos IHRyZWUsIGdmY19jb21wb25lbnQgKiwgYm9vbCk7Cit2b2lkIGdmY19maW5h bGl6ZV90cmVlX2V4cHIgKGdmY19zZSAqLCBnZmNfc3ltYm9sICosIHN5bWJv bF9hdHRyaWJ1dGUsIGludCk7Citib29sIGdmY19hc3NpZ25tZW50X2ZpbmFs aXplcl9jYWxsIChnZmNfc2UgKiwgZ2ZjX2V4cHIgKiwgYm9vbCk7Cgogdm9p ZCBnZmNfY29udl9kZXJpdmVkX3RvX2NsYXNzIChnZmNfc2UgKiwgZ2ZjX2V4 cHIgKiwgZ2ZjX3R5cGVzcGVjLCB0cmVlLCBib29sLAogCQkJCWJvb2wsIHRy ZWUgKmRlcml2ZWRfYXJyYXkgPSBOVUxMKTsKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUu ZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hbGxvY2F0ZV93aXRo X3NvdXJjZV8yNS5mOTAKaW5kZXggOTJkYzUwNzU2ZDQuLmRlMjBhMTQ3ODQy IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2FsbG9j YXRlX3dpdGhfc291cmNlXzI1LmY5MAorKysgYi9nY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzI1LmY5MApAQCAtNjgs NCArNjgsNCBAQCBjb250YWlucwogICBlbmQgZnVuY3Rpb24gZnVuY19mb29f YQoKIGVuZCBwcm9ncmFtIHNpbXBsZV9sZWFrCi0hIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiXD5fZmluYWwiIDYgIm9yaWdpbmFsIiB9 IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcPl9m aW5hbCIgNCAib3JpZ2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVfMjUuZjkwIGIvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVfMjUuZjkwCmluZGV4IGQzMTM3 MzAwMjgyLi45N2I1M2Y2NGRlZCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9hc3NvY2lhdGVfMjUuZjkwCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvYXNzb2NpYXRlXzI1LmY5MApAQCAtMjEsOSAr MjEsNyBAQCBjb250YWlucwogICAgIGFzc29jaWF0ZShYID0+IFQoKSkgISBU aGlzIHdhcyBmYWlsaW5nOiBTeW1ib2wgJ3gnIGF0ICgxKSBoYXMgbm8gSU1Q TElDSVQgdHlwZQogICAgICAgZmluYWxfZmxhZyA9IFgldmFsCiAgICAgZW5k IGFzc29jaWF0ZQotISBUaGlzIHNob3VsZCBub3cgYmUgNCBidXQgdGhlIGZp bmFsaXphdGlvbiBpcyBub3QgaGFwcGVuaW5nLgotISBUT0RPIHB1dCBpdCBy aWdodCEKLSAgICBpZiAoZmluYWxfZmxhZyAubmUuIDIpIFNUT1AgMQorICAg IGlmIChmaW5hbF9mbGFnIC5uZS4gMikgc3RvcCAxCiAgIGVuZCBzdWJyb3V0 aW5lIFRlc3RmCiBlbmQgbW9kdWxlCgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9hdXRvX2RlYWxsb2NfMi5mOTAgYi9nY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL2F1dG9fZGVhbGxvY18yLmY5MAppbmRleCA0 ZWU3MTIxY2MyNy4uOTNkNGY5NWRkZjYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvYXV0b19kZWFsbG9jXzIuZjkwCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXV0b19kZWFsbG9jXzIuZjkwCkBA IC0yNCw3ICsyNCw3IEBAIGNvbnRhaW5zCiAgICAgYWxsb2NhdGUoeCVpKDEw MDApKQogICBlbmQgc3Vicm91dGluZQoKLWVuZCBwcm9ncmFtCitlbmQgcHJv Z3JhbQoKICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJf X2J1aWx0aW5fZnJlZSIgNCAib3JpZ2luYWwiIH0gfQotISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIngtPl92cHRyLT5fZmluYWwgXFwo IiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiX3ZwdHItPl9maW5hbCBcXCgmZGVzYyIgMSAib3JpZ2lu YWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy91bmxpbWl0ZWRfcG9seW1vcnBoaWNfOC5mOTAgYi9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3VubGltaXRlZF9wb2x5bW9ycGhpY184LmY5MAppbmRl eCA0NmI5YTlmNjUxOC4uN2IyN2RkYjJlM2IgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdW5saW1pdGVkX3BvbHltb3JwaGljXzgu ZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdW5saW1pdGVk X3BvbHltb3JwaGljXzguZjkwCkBAIC0xNSw1ICsxNSw1IEBAIGNvbnRhaW5z CiAgIGVuZAogZW5kCgotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgImZvby4wLnguX2RhdGEgPSAwQjsiIDEgIm9yaWdpbmFsIiB9IH0K LSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb28uMC54 Ll92cHRyID0gLiogJl9fdnRhYl9fU1RBUjsiIDEgIm9yaWdpbmFsIiB9IH0K KyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJmb28uMS54 Ll9kYXRhID0gMEI7IiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZm9vLjEueC5fdnB0ciA9IC4qICZf X3Z0YWJfX1NUQVI7IiAxICJvcmlnaW5hbCIgfSB9Cg== --00000000000023e55805f64fa2f2 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_leyb02xv1 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGZpbmFsaXphdGlvbiBvbiBpbnRy aW5zaWMgYXNzaWdubWVudCAoRjIwMTggKDcuNS42LjMpKQohIFdpdGggLXN0 ZD1nbnUsIG5vIGZpbmFsaXphdGlvbiBvZiBhcnJheSBvciBzdHJ1Y3R1cmUg Y29uc3RydWN0b3JzIHNob3VsZCBvY2N1ci4KISBTZWUgZmluYWxpemVfMzhh LmY5MCBmb3IgdGhlIHJlc3VsdCB3aXRoIGYyMDA4LgohIFRlc3RzIGZpeCBm b3IgUFI2NDI5MCBhcyB3ZWxsLgohCm1vZHVsZSB0ZXN0bW9kZQogIGltcGxp Y2l0IG5vbmUKCiAgdHlwZSA6OiBzaW1wbGUKICAgIGludGVnZXIgOjogaW5k CiAgY29udGFpbnMKICAgIGZpbmFsIDo6IGRlc3RydWN0b3IxLCBkZXN0cnVj dG9yMgogIGVuZCB0eXBlIHNpbXBsZQoKICB0eXBlLCBleHRlbmRzKHNpbXBs ZSkgOjogY29tcGxpY2F0ZWQKICAgIHJlYWwgOjogcmluZAogIGNvbnRhaW5z CiAgICBmaW5hbCA6OiBkZXN0cnVjdG9yMywgZGVzdHJ1Y3RvcjQKICBlbmQg dHlwZSBjb21wbGljYXRlZAoKICBpbnRlZ2VyIDo6IGNoZWNrX3NjYWxhcgog IGludGVnZXIgOjogY2hlY2tfYXJyYXkoNCkKICByZWFsIDo6IGNoZWNrX3Jl YWwKICByZWFsIDo6IGNoZWNrX3JhcnJheSg0KQogIGludGVnZXIgOjogZmlu YWxfY291bnQgPSAwCgpjb250YWlucwoKICBzdWJyb3V0aW5lIGRlc3RydWN0 b3IxKHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91dCkgOjog c2VsZgogICAgY2hlY2tfc2NhbGFyID0gc2VsZiVpbmQKICAgIGNoZWNrX2Fy cmF5ID0gMAogICAgZmluYWxfY291bnQgPSBmaW5hbF9jb3VudCArIDEKICBl bmQgc3Vicm91dGluZSBkZXN0cnVjdG9yMQoKICBzdWJyb3V0aW5lIGRlc3Ry dWN0b3IyKHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91dCkg Ojogc2VsZig6KQogICAgY2hlY2tfc2NhbGFyID0gMAogICAgY2hlY2tfYXJy YXkoMTpzaXplKHNlbGYsIDEpKSA9IHNlbGYlaW5kCiAgICBmaW5hbF9jb3Vu dCA9IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJyb3V0aW5lIGRlc3RydWN0 b3IyCgogIHN1YnJvdXRpbmUgZGVzdHJ1Y3RvcjMoc2VsZikKICAgIHR5cGUo Y29tcGxpY2F0ZWQpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYKICAgIGNoZWNr X3JlYWwgPSBzZWxmJXJpbmQKICAgIGNoZWNrX2FycmF5ID0gMC4wCiAgICBm aW5hbF9jb3VudCA9IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJyb3V0aW5l IGRlc3RydWN0b3IzCgogIHN1YnJvdXRpbmUgZGVzdHJ1Y3RvcjQoc2VsZikK ICAgIHR5cGUoY29tcGxpY2F0ZWQpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYo OikKICAgIGNoZWNrX3JlYWwgPSAwLjAKICAgIGNoZWNrX3JhcnJheSgxOnNp emUoc2VsZiwgMSkpID0gc2VsZiVyaW5kCiAgICBmaW5hbF9jb3VudCA9IGZp bmFsX2NvdW50ICsgMQogIGVuZCBzdWJyb3V0aW5lIGRlc3RydWN0b3I0Cgog IGZ1bmN0aW9uIGNvbnN0cnVjdG9yMShpbmQpIHJlc3VsdChyZXMpCiAgICBj bGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiByZXMKICAgIGludGVnZXIs IGludGVudChpbikgOjogaW5kCiAgICBhbGxvY2F0ZSAocmVzLCBzb3VyY2Ug PSBzaW1wbGUgKGluZCkpCiAgZW5kIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMQoK ICBmdW5jdGlvbiBjb25zdHJ1Y3RvcjIoaW5kLCByaW5kKSByZXN1bHQocmVz KQogICAgY2xhc3Moc2ltcGxlKSwgYWxsb2NhdGFibGUgOjogcmVzKDopCiAg ICBpbnRlZ2VyLCBpbnRlbnQoaW4pIDo6IGluZCg6KQogICAgcmVhbCwgaW50 ZW50KGluKSwgb3B0aW9uYWwgOjogcmluZCg6KQogICAgdHlwZShjb21wbGlj YXRlZCksIGFsbG9jYXRhYmxlIDo6IHNyYyg6KQogICAgaW50ZWdlciA6OiBz egogICAgaW50ZWdlciA6OiBpCiAgICBpZiAocHJlc2VudCAocmluZCkpIHRo ZW4KICAgICAgc3ogPSBtaW4gKHNpemUgKGluZCwgMSksIHNpemUgKHJpbmQs IDEpKQogICAgICBzcmMgID0gWyhjb21wbGljYXRlZCAoaW5kKGkpLCByaW5k KGkpKSwgaSA9IDEsIHN6KV0KICAgICAgYWxsb2NhdGUgKHJlcywgc291cmNl ID0gc3JjKQogICAgZWxzZQogICAgICBzeiA9IHNpemUgKGluZCwgMSkKICAg ICAgYWxsb2NhdGUgKHJlcywgc291cmNlID0gWyhzaW1wbGUgKGluZChpKSks IGkgPSAxLCBzeildKQogICAgZW5kIGlmCiAgZW5kIGZ1bmN0aW9uIGNvbnN0 cnVjdG9yMgoKICBzdWJyb3V0aW5lIHRlc3QgKGNudCwgc2NhbGFyLCBhcnJh eSwgb2ZmLCByaW5kLCByYXJyYXkpCiAgICBpbnRlZ2VyIDo6IGNudAogICAg aW50ZWdlciA6OiBzY2FsYXIKICAgIGludGVnZXIgOjogYXJyYXkoOikKICAg IGludGVnZXIgOjogb2ZmCiAgICByZWFsLCBvcHRpb25hbCA6OiByaW5kCiAg ICByZWFsLCBvcHRpb25hbCA6OiByYXJyYXkoOikKICAgIGlmIChmaW5hbF9j b3VudCAubmUuIGNudCkgdGhlbgogICAgICAgIHN0b3AgMSArIG9mZgogICAg ZW5kaWYKICAgIGlmIChjaGVja19zY2FsYXIgLm5lLiBzY2FsYXIpIHRoZW4K ICAgICAgICBzdG9wIDIgKyBvZmYKICAgIGVuZGlmCiAgICBpZiAoYW55IChj aGVja19hcnJheSgxOnNpemUgKGFycmF5LCAxKSkgLm5lLiBhcnJheSkpIHRo ZW4KICAgICAgICBzdG9wIDMgKyBvZmYKICAgIGVuZGlmCiAgICBpZiAocHJl c2VudCAocmluZCkpIHRoZW4KICAgICAgICBzdG9wIDQgKyBvZmYKICAgIGVu ZCBpZgogICAgaWYgKHByZXNlbnQgKHJhcnJheSkpIHRoZW4KICAgICAgaWYg KGFueSAoY2hlY2tfcmFycmF5KDE6c2l6ZSAocmFycmF5LCAxKSkgLm5lLiBy YXJyYXkpKSB0aGVuCiAgICAgICAgc3RvcCA1ICsgb2ZmCiAgICAgIGVuZGlm CiAgICBlbmQgaWYKICAgIGZpbmFsX2NvdW50ID0gMAogIGVuZCBzdWJyb3V0 aW5lIHRlc3QKZW5kIG1vZHVsZSB0ZXN0bW9kZQoKcHJvZ3JhbSB0ZXN0X2Zp bmFsCiAgdXNlIHRlc3Rtb2RlCiAgaW1wbGljaXQgbm9uZQoKICB0eXBlKHNp bXBsZSksIGFsbG9jYXRhYmxlIDo6IE15VHlwZSwgTXlUeXBlMgogIHR5cGUo c2ltcGxlKSwgYWxsb2NhdGFibGUgOjogTXlUeXBlQXJyYXkoOikKICB0eXBl KHNpbXBsZSkgOjogVGh5VHlwZSA9IHNpbXBsZSgyMSksIFRoeVR5cGUyID0g c2ltcGxlKDIyKQogIGNsYXNzKHNpbXBsZSksIGFsbG9jYXRhYmxlIDo6IE15 Q2xhc3MKICBjbGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiBNeUNsYXNz QXJyYXkoOikKCiEgKioqKioqKioqKioqKioqKioqKioqKioqCiEgRGVyaXZl ZCB0eXBlIGFzc2lnbm1lbnRzCiEgKioqKioqKioqKioqKioqKioqKioqKioq CgohIFRoZSBvcmlnaW5hbCBQUiAtIG5vIGZpbmFsaXphdGlvbiBvZiAndmFy JyBiZWZvcmUgKHJlKWFsbG9jYXRpb24KISBiZWNhdXNlIGl0IGlzIGRlYWxs b2NhdGVkIG9uIHNjb3BlIGVudHJ5IChwYXJhIDEgb2YgRjIwMTggNy41LjYu My4pCiAgTXlUeXBlID0gVGh5VHlwZQogIGNhbGwgdGVzdCgwLCAwLCBbMCww XSwgMCkKCiAgaWYgKC5ub3QuIGFsbG9jYXRlZChNeVR5cGUpKSBhbGxvY2F0 ZShNeVR5cGUpCiAgYWxsb2NhdGUoTXlUeXBlMikKICBNeVR5cGUlaW5kID0g MQogIE15VHlwZTIlaW5kID0gMgoKISBUaGlzIHNob3VsZCByZXN1bHQgaW4g YSBmaW5hbCBjYWxsIHdpdGggc2VsZiA9IHNpbXBsZSgxKSAocGFyYSAxIG9m IEYyMDE4IDcuNS42LjMuKS4KICBNeVR5cGUgPSBNeVR5cGUyCiAgY2FsbCB0 ZXN0KDEsIDEsIFswLDBdLCAxMCkKCiAgYWxsb2NhdGUoTXlUeXBlQXJyYXko MikpCiAgTXlUeXBlQXJyYXklaW5kID0gWzQyLCA0M10KISBUaGlzIHNob3Vs ZCByZXN1bHQgbm8gY2FsbHMuCiAgY2FsbCB0ZXN0KDAsIDEsIFswLDBdLCAy MCkKCiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2FsbCAndmFy JyA9IGluaXRpYWxpemF0aW9uID0gc2ltcGxlKDIyKS4KICBUaHlUeXBlMiA9 IHNpbXBsZSg5OSkKICBjYWxsIHRlc3QoMSwgMjIsIFswLDBdLCAzMCkKCiEg VGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2FsbCBmb3IgJ3Zhcicg d2l0aCBzZWxmID0gc2ltcGxlKDIxKS4KICBUaHlUeXBlID0gVGh5VHlwZTIK ICBjYWxsIHRlc3QoMSwgMjEsIFswLDBdLCA0MCkKCiEgVGhpcyBzaG91bGQg cmVzdWx0IGluIHR3byBmaW5hbCBjYWxsczsgdGhlIGxhc3QgaXMgZm9yIE15 dHlwZTIgPSBzaW1wbGUoMikuCiAgZGVhbGxvY2F0ZSAoTXlUeXBlLCBNeVR5 cGUyKQogIGNhbGwgdGVzdCgyLCAyLCBbMCwwXSwgNTApCgohIFRoaXMgc2hv dWxkIHJlc3VsdCBpbiBvbmUgZmluYWwgY2FsbDsgTXlUeXBlQXJyYXkgPSBb c2ltcGxlKDQyKSxzaW1wbGUoNDMpXS4KICBkZWFsbG9jYXRlIChNeVR5cGVB cnJheSkKICBjYWxsIHRlc3QoMSwgMCwgWzQyLDQzXSwgNjApCgohIFRoZSBs aHMgaXMgZmluYWxpemVkIGJlZm9yZSBhc3NpZ25tZW50LgohIFRoZSBmdW5j dGlvbiByZXN1bHQgaXMgZmluYWxpemVkIGFmdGVyIHRoZSBhc3NpZ25tZW50 LgohIE5BR0ZPUiBkb2Vzbid0IGZpbmFsaXplIHRoZSBmdW5jdGlvbiByZXN1 bHQuCiAgYWxsb2NhdGUgKE15VHlwZSwgc291cmNlID0gc2ltcGxlICgxMSkp CiAgTXlUeXBlID0gY29uc3RydWN0b3IxICg5OSkKICBjYWxsIHRlc3QoMiwg OTksIFswLDBdLCA3MCkKICBkZWFsbG9jYXRlIChNeVR5cGUpCiEgKioqKioq KioqKioqKioqKioKISBDbGFzcyBhc3NpZ25tZW50cwohICoqKioqKioqKioq KioqKioqCgogIGZpbmFsX2NvdW50ID0gMAoKISBUaGlzIHNob3VsZCByZXN1 bHQgaW4gYSBmaW5hbCBjYWxsIGZvciBNeUNsYXNzLCB3aGljaCBpcyBzaW1w bGUoMykuCiAgYWxsb2NhdGUgKE15Q2xhc3MsIHNvdXJjZSA9IHNpbXBsZSAo MykpCiAgTXlDbGFzcyA9IHNpbXBsZSAoNCkKICBjYWxsIHRlc3QoMSwgMywg WzAsMF0sIDEwMCkKCiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwg Y2FsbCB3aXRoIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBzaW1wbGUoNCkuCiAg ZGVhbGxvY2F0ZSAoTXlDbGFzcykKICBjYWxsIHRlc3QoMSwgNCwgWzAsMF0s IDExMCkKCgogIGFsbG9jYXRlIChNeUNsYXNzQXJyYXksIHNvdXJjZSA9IFtz aW1wbGUgKDUpLCBzaW1wbGUgKDYpXSkKISBNYWtlIHN1cmUgdGhhdCB0aGVy ZSBpcyBubyBmaW5hbCBjYWxsIHNpbmNlIE15Q2xhc3NBcnJheSBpcyBub3Qg YWxsb2NhdGVkLgogIGNhbGwgdGVzdCgwLCA0LCBbMCwwXSwgMTIwKQoKICBN eUNsYXNzQXJyYXkgPSBbc2ltcGxlICg3KSwgc2ltcGxlICg4KV0KISBUaGUg b25seSBmaW5hbCBjYWxsIHNob3VsZCBmaW5hbGl6ZSAndmFyJy4KISBOQUdG T1IgZG9lcyBzb21ldGhpbmcgc3RyYW5nZSBoZXJlOiBtYWtlcyBhIHNjYWxh ciBmaW5hbCBjYWxsIHdpdGggdmFsdWUKISBzaW1wbGUoNSkuCiAgY2FsbCB0 ZXN0KDEsIDAsIFs1LDZdLCAxMzApCgohIFRoaXMgc2hvdWxkIHJlc3VsdCBp biBhIGZpbmFsIGNhbGwgd2l0aCB0aGUgYXNzaWduZWQgdmFsdWUuCiAgZGVh bGxvY2F0ZSAoTXlDbGFzc0FycmF5KQogIGNhbGwgdGVzdCgxLCAwLCBbNyw4 XSwgMTQwKQoKISBUaGlzIHNob3VsZCBwcm9kdWNlIG5vIGZpbmFsIGNhbGxz IHNpbmNlIE15Q2xhc3NBcnJheSB3YXMgZGVhbGxvY2F0ZWQuCiAgYWxsb2Nh dGUgKE15Q2xhc3NBcnJheSwgc291cmNlID0gW2NvbXBsaWNhdGVkKDEsIDIu MCksY29tcGxpY2F0ZWQoMywgNC4wKV0pCgohIFRoaXMgc2hvdWxkIHByb2R1 Y2UgY2FsbHMgdG8gZGVzdHJ1Y3RvcjQgdGhlbiBkZXN0cnVjdG9yMi4KICBp ZiAoYWxsb2NhdGVkIChNeUNsYXNzQXJyYXkpKSBkZWFsbG9jYXRlIChNeUNs YXNzQXJyYXkpCgohIEYyMDE4IDcuNS42LjM6ICJJZiB0aGUgZW50aXR5IGlz IG9mIGV4dGVuZGVkIHR5cGUgYW5kIHRoZSBwYXJlbnQgdHlwZSBpcwohIGZp bmFsaXphYmxlLCB0aGUgcGFyZW50IGNvbXBvbmVudCBpcyBmaW5hbGl6ZWQu CiAgY2FsbCB0ZXN0KDIsIDAsIFsxLCAzXSwgMTUwLCByYXJyYXkgPSBbMi4w LCA0LjBdKQoKISBUaGlzIHByb2R1Y2VzIDIgZmluYWwgY2FsbHMgaW4gdHVy biBmb3IgJ3NyYycgYXMgaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGZvcgohIE15 Q2xhc3NBcnJheSBiZWZvcmUgaXQgaXMgYXNzaWduZWQgdG8gYW5kIHRoZSBy ZXN1bHQgb2YgJ2NvbnN0cnVjdG9yMicgYWZ0ZXIKISB0aGUgYXNzaWdubWVu dCwgZm9yIHdoaWNoIHRoZSByZXN1bHQgc2hvdWxkIGJlIHNob3VsZCBiZSBb MTAsMjBdICYgWzEwLjAsMjAuMF0uCiAgTXlDbGFzc0FycmF5ID0gY29uc3Ry dWN0b3IyIChbMTAsMjBdLCBbMTAuMCwyMC4wXSkKICBjYWxsIHRlc3QoNCwg MCwgWzEwLDIwXSwgMTYwLCByYXJyYXkgPSBbMTAuMCwyMC4wXSkKCiEgVGhp cyBwcm9kdWNlcyB0d28gZmluYWwgY2FsbHMgd2l0aCB0aGUgY29udGVudHMg b2YgJ015Q2xhc3NBcnJheS4gYW5kIGl0cwohIHBhcmVudCBjb21wb25lbnQu CiAgZGVhbGxvY2F0ZSAoTXlDbGFzc0FycmF5KQogIGNhbGwgdGVzdCgyLCAw LCBbMTAsIDIwXSwgMTcwLCByYXJyYXkgPSBbMTAuMCwyMC4wXSkKCiEgQ2xl YW4gdXAgZm9yIHZhbGdyaW5kIHRlc3RpbmcKICBpZiAoYWxsb2NhdGVkIChN eVR5cGUpKSBkZWFsbG9jYXRlIChNeVR5cGUpCiAgaWYgKGFsbG9jYXRlZCAo TXlUeXBlMikpIGRlYWxsb2NhdGUgKE15VHlwZTIpCiAgaWYgKGFsbG9jYXRl ZCAoTXlUeXBlQXJyYXkpKSBkZWFsbG9jYXRlIChNeVR5cGVBcnJheSkKICBp ZiAoYWxsb2NhdGVkIChNeUNsYXNzKSkgZGVhbGxvY2F0ZSAoTXlDbGFzcykK ZW5kIHByb2dyYW0gdGVzdF9maW5hbAo= --00000000000023e55805f64fa2f2 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_leyb02yk4 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoYXQgUFI2NzQ3MSBpcyBmaXhl ZC4gVXNlZCBub3QgdG8gY2FsbCB0aGUgZmluYWxpemVyLgohCiEgQ29udHJp YnV0ZWQgYnkgSWFuIEhhcnZleSAgPGlhbl9oYXJ2ZXlAYmlncG9uZC5jb20+ CiEKbW9kdWxlIHRlc3RfZmluYWxfbW9kCiAgaW1wbGljaXQgbm9uZQogIHR5 cGUgOjogbXlfZmluYWwKICAgIGludGVnZXIgOjogbiA9IDEKICBjb250YWlu cwogICAgZmluYWwgOjogZGVzdHJveV9zY2FsYXIsIGRlc3Ryb3lfcmFuazFf YXJyYXkKICBlbmQgdHlwZSBteV9maW5hbAogIGludGVnZXIgOjogZmluYWxf Y2FsbHMgPSAwCmNvbnRhaW5zCiAgc3Vicm91dGluZSBkZXN0cm95X3Jhbmsx X2FycmF5KHNlbGYpCiAgICB0eXBlKG15X2ZpbmFsKSwgaW50ZW50KGlub3V0 KSA6OiBzZWxmKDopCiAgICBpZiAoc2l6ZShzZWxmKSAvPSAwKSB0aGVuCiAg ICAgIGlmIChzaXplKHNlbGYpIC89IDIpIHN0b3AgMQogICAgICBpZiAoYW55 IChzZWxmJW4gLz0gWzMsNF0pKSBzdG9wIDIKICAgIGVsc2UKICAgICAgc3Rv cCAzCiAgICBlbmQgaWYKICAgIGZpbmFsX2NhbGxzID0gZmluYWxfY2FsbHMg KyAxCiAgZW5kIHN1YnJvdXRpbmUgZGVzdHJveV9yYW5rMV9hcnJheQoKISBF bGltaW5hdGUgdGhlIHdhcm5pbmcgYWJvdXQgdGhlIGxhY2sgb2YgYSBzY2Fs YXIgZmluYWxpemVyLgogIHN1YnJvdXRpbmUgZGVzdHJveV9zY2FsYXIoc2Vs ZikKICAgIHR5cGUobXlfZmluYWwpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYK ICAgIGZpbmFsX2NhbGxzID0gZmluYWxfY2FsbHMgKyBzZWxmJW4KICBlbmQg c3Vicm91dGluZSBkZXN0cm95X3NjYWxhcgoKZW5kIG1vZHVsZSB0ZXN0X2Zp bmFsX21vZAoKcHJvZ3JhbSB0ZXN0X2ZpbmFsaXplcgogIHVzZSB0ZXN0X2Zp bmFsX21vZAogIGltcGxpY2l0IG5vbmUKICB0eXBlKG15X2ZpbmFsKSA6OiBi KDQpLCBjKDIpCgogIGIlbiA9IFsyLCAzLCA0LCA1XQogIGMlbiA9IFs2LCA3 XQogIGIoMjozKSA9IGMKICBpZiAoZmluYWxfY2FsbHMgLz0gMSkgc3RvcCA0 CmVuZCBwcm9ncmFtIHRlc3RfZmluYWxpemVyCg== --00000000000023e55805f64fa2f2 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_leyb02yd3 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 --00000000000023e55805f64fa2f2 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_leyb02yq5 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 bCBpbl90eXBlKCkKISAyMSBjYWxscyB0byBzY2FsYXIgZmluYWxpemVyIGFu ZCA0IHRvIHRoZSB2ZWN0b3IgdmVyc2lvbjsgSUZPUlQgYWdyZWVzCiEgTkFH Rk9SIGFsc28gcHJvZHVjZXMgMjEgc2NhbGFyIGNhbGxzIGJ1dCA1IHZlY3Rv ciBjYWxscy4KICBpZiAoZmluYWxfY2FsbHMgLm5lLiA0MjEpIHByaW50ICos IGZpbmFsX2NhbGxzCmNvbnRhaW5zCgogIHN1YnJvdXRpbmUgaGVyZSgpCiAg ICBpbXBsaWNpdCBub25lCiAgICB0eXBlKHN0dWZmX3R5cGUpIDo6IHRoaW5n CiAgICB0eXBlKHN0dWZmX3R5cGUpIDo6IGJpdHMoMykKICAgIGludGVnZXIg OjogaQogICAgaW50ZWdlciA6OiB0YWxseQogICAgdGhpbmcgPSBzdHVmZl90 eXBlKDQpICEgVHdvIHNjYWxhciBmaW5hbCBjYWxsczsgSU5URU5UKE9VVCkg YW5kIGluaXRpYWxpc2VyCiAgICBkbyBpID0gMSwgMwogICAgICBiaXRzKGkp ID0gc3R1ZmZfdHlwZShpKSAhIGRpdHRvIHRpbWVzIDMKICAgIGVuZCBkbwog ICAgdGFsbHkgPSB0aGluZyVnZXRfanVuaygpCiAgICBkbyBpID0gMSwgMwog ICAgICB0YWxseSA9IHRhbGx5ICsgYml0cyhpKSVnZXRfanVuaygpCiAgICBl bmQgZG8KICAgIGlmICh0YWxseSAubmUuIDEwKSBzdG9wIDMgISA4IHNjYWxh ciBmaW5hbCBjYWxscyBieSBoZXJlCiAgZW5kIHN1YnJvdXRpbmUgaGVyZQoK ICBzdWJyb3V0aW5lIGluX3R5cGUoKQogICAgaW1wbGljaXQgbm9uZQogICAg dHlwZSh0ZXN0X3R5cGUpIDo6IHRoaW5nCiAgICB0aGluZyA9IHRlc3RfdHlw ZSgpICEgOCBzY2FsYXIgaW4gdGVzdF90eXBlICsgMSB2ZWN0b3IgYW5kIDEg c2NhbGFyIHRvIGZpbmFsaXplIGZ1bmN0aW9uIHJlc3VsdCBhbmQKICAgICAg ICAgICAgICAgICAgICAgICAgISAxIHZlY3RvcnMgYW5kIDIgc2NhbGFycyBm cm9tIHRoZSBleHBhbnNpb24gb2YgdGhlIGRlZmluZWQgYXNzaWdubWVudC4K ICAgIGlmICh0aGluZyVnZXRfdmFsdWUoKSAubmUuIDEwKSBzdG9wIDQKICBl bmQgc3Vicm91dGluZSBpbl90eXBlCmVuZCBwcm9ncmFtIHRlc3QK --00000000000023e55805f64fa2f2 Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_38a.f90" Content-Disposition: attachment; filename="finalize_38a.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_leyb02y62 ISB7IGRnLWRvIHJ1biB9CiEgeyBkZy1vcHRpb25zICItc3RkPWYyMDA4IiB9 CiEKISBUZXN0IGZpbmFsaXphdGlvbiBvbiBpbnRyaW5zaWMgYXNzaWdubWVu dCAoRjIwMTggKDcuNS42LjMpKQohIFdpdGggLXN0ZD1mMjAwOCwgc3RydWN0 dXJlIGFuZCBhcnJheSBjb25zdHJ1Y3RvcnMgYXJlIGZpbmFsaXplZC4KISBT ZWUgZmluYWxpemVfMzguZjkwIGZvciB0aGUgcmVzdWx0IHdpdGggLXN0ZD1n bnUuCiEgVGVzdHMgZml4IGZvciBQUjY0MjkwIGFzIHdlbGwuCiEKbW9kdWxl IHRlc3Rtb2RlCiAgaW1wbGljaXQgbm9uZQoKICB0eXBlIDo6IHNpbXBsZQog ICAgaW50ZWdlciA6OiBpbmQKICBjb250YWlucwogICAgZmluYWwgOjogZGVz dHJ1Y3RvcjEsIGRlc3RydWN0b3IyCiAgZW5kIHR5cGUgc2ltcGxlCgogIHR5 cGUsIGV4dGVuZHMoc2ltcGxlKSA6OiBjb21wbGljYXRlZAogICAgcmVhbCA6 OiByaW5kCiAgY29udGFpbnMKICAgIGZpbmFsIDo6IGRlc3RydWN0b3IzLCBk ZXN0cnVjdG9yNAogIGVuZCB0eXBlIGNvbXBsaWNhdGVkCgogIGludGVnZXIg OjogY2hlY2tfc2NhbGFyCiAgaW50ZWdlciA6OiBjaGVja19hcnJheSg0KQog IHJlYWwgOjogY2hlY2tfcmVhbAogIHJlYWwgOjogY2hlY2tfcmFycmF5KDQp CiAgaW50ZWdlciA6OiBmaW5hbF9jb3VudCA9IDAKICBpbnRlZ2VyIDo6IGZh aWxzID0gMAoKY29udGFpbnMKCiAgc3Vicm91dGluZSBkZXN0cnVjdG9yMShz ZWxmKQogICAgdHlwZShzaW1wbGUpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYK ICAgIGNoZWNrX3NjYWxhciA9IHNlbGYlaW5kCiAgICBjaGVja19hcnJheSA9 IDAKICAgIGZpbmFsX2NvdW50ID0gZmluYWxfY291bnQgKyAxCiAgZW5kIHN1 YnJvdXRpbmUgZGVzdHJ1Y3RvcjEKCiAgc3Vicm91dGluZSBkZXN0cnVjdG9y MihzZWxmKQogICAgdHlwZShzaW1wbGUpLCBpbnRlbnQoaW5vdXQpIDo6IHNl bGYoOikKICAgIGNoZWNrX3NjYWxhciA9IDAKICAgIGNoZWNrX2FycmF5KDE6 c2l6ZShzZWxmLCAxKSkgPSBzZWxmJWluZAogICAgZmluYWxfY291bnQgPSBm aW5hbF9jb3VudCArIDEKICBlbmQgc3Vicm91dGluZSBkZXN0cnVjdG9yMgoK ICBzdWJyb3V0aW5lIGRlc3RydWN0b3IzKHNlbGYpCiAgICB0eXBlKGNvbXBs aWNhdGVkKSwgaW50ZW50KGlub3V0KSA6OiBzZWxmCiAgICBjaGVja19yZWFs ID0gc2VsZiVyaW5kCiAgICBjaGVja19hcnJheSA9IDAuMAogICAgZmluYWxf Y291bnQgPSBmaW5hbF9jb3VudCArIDEKICBlbmQgc3Vicm91dGluZSBkZXN0 cnVjdG9yMwoKICBzdWJyb3V0aW5lIGRlc3RydWN0b3I0KHNlbGYpCiAgICB0 eXBlKGNvbXBsaWNhdGVkKSwgaW50ZW50KGlub3V0KSA6OiBzZWxmKDopCiAg ICBjaGVja19yZWFsID0gMC4wCiAgICBjaGVja19yYXJyYXkoMTpzaXplKHNl bGYsIDEpKSA9IHNlbGYlcmluZAogICAgZmluYWxfY291bnQgPSBmaW5hbF9j b3VudCArIDEKICBlbmQgc3Vicm91dGluZSBkZXN0cnVjdG9yNAoKICBmdW5j dGlvbiBjb25zdHJ1Y3RvcjEoaW5kKSByZXN1bHQocmVzKQogICAgY2xhc3Mo c2ltcGxlKSwgYWxsb2NhdGFibGUgOjogcmVzCiAgICBpbnRlZ2VyLCBpbnRl bnQoaW4pIDo6IGluZAogICAgYWxsb2NhdGUgKHJlcywgc291cmNlID0gc2lt cGxlIChpbmQpKQogIGVuZCBmdW5jdGlvbiBjb25zdHJ1Y3RvcjEKCiAgZnVu Y3Rpb24gY29uc3RydWN0b3IyKGluZCwgcmluZCkgcmVzdWx0KHJlcykKICAg IGNsYXNzKHNpbXBsZSksIGFsbG9jYXRhYmxlIDo6IHJlcyg6KQogICAgaW50 ZWdlciwgaW50ZW50KGluKSA6OiBpbmQoOikKICAgIHJlYWwsIGludGVudChp biksIG9wdGlvbmFsIDo6IHJpbmQoOikKICAgIHR5cGUoY29tcGxpY2F0ZWQp LCBhbGxvY2F0YWJsZSA6OiBzcmMoOikKICAgIGludGVnZXIgOjogc3oKICAg IGludGVnZXIgOjogaQogICAgaWYgKHByZXNlbnQgKHJpbmQpKSB0aGVuCiAg ICAgIHN6ID0gbWluIChzaXplIChpbmQsIDEpLCBzaXplIChyaW5kLCAxKSkK ICAgICAgc3JjICA9IFsoY29tcGxpY2F0ZWQgKGluZChpKSwgcmluZChpKSks IGkgPSAxLCBzeildICAhIHsgZGctd2FybmluZyAiaGFzIGJlZW4gZmluYWxp emVkIiB9CiAgICAgIGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHNyYykKICAg IGVsc2UKICAgICAgc3ogPSBzaXplIChpbmQsIDEpCiAgICAgIGFsbG9jYXRl IChyZXMsIHNvdXJjZSA9IFsoc2ltcGxlIChpbmQoaSkpLCBpID0gMSwgc3op XSkKICAgIGVuZCBpZgogIGVuZCBmdW5jdGlvbiBjb25zdHJ1Y3RvcjIKCiAg c3Vicm91dGluZSB0ZXN0IChjbnQsIHNjYWxhciwgYXJyYXksIG9mZiwgcmlu ZCwgcmFycmF5KQogICAgaW50ZWdlciA6OiBjbnQKICAgIGludGVnZXIgOjog c2NhbGFyCiAgICBpbnRlZ2VyIDo6IGFycmF5KDopCiAgICBpbnRlZ2VyIDo6 IG9mZgogICAgcmVhbCwgb3B0aW9uYWwgOjogcmluZAogICAgcmVhbCwgb3B0 aW9uYWwgOjogcmFycmF5KDopCiAgICBpZiAoZmluYWxfY291bnQgLm5lLiBj bnQpIHRoZW4KICAgICAgICBwcmludCAqLCAxICsgb2ZmLCBmaW5hbF9jb3Vu dCwgJygnLCBjbnQsICcpJwogICAgICAgIGZhaWxzID0gZmFpbHMgKyAxCiAg ICBlbmRpZgogICAgaWYgKGNoZWNrX3NjYWxhciAubmUuIHNjYWxhcikgdGhl bgogICAgICAgIHByaW50ICosIDIgKyBvZmYsIGNoZWNrX3NjYWxhciwgJygn LCBzY2FsYXIsICcpJwogICAgICAgIGZhaWxzID0gZmFpbHMgKyAxCiAgICBl bmRpZgogICAgaWYgKGFueSAoY2hlY2tfYXJyYXkoMTpzaXplIChhcnJheSwg MSkpIC5uZS4gYXJyYXkpKSB0aGVuCiAgICAgICAgcHJpbnQgKiwgMyArIG9m ZiwgY2hlY2tfYXJyYXkoMTpzaXplIChhcnJheSwgMSkpICwgJygnLCBhcnJh eSwgJyknCiAgICAgICAgZmFpbHMgPSBmYWlscyArIDEKICAgIGVuZGlmCiAg ICBpZiAocHJlc2VudCAocmluZCkpIHRoZW4KICAgICAgaWYgKGNoZWNrX3Jl YWwgLm5lLiByaW5kKSB0aGVuCiAgICAgICAgcHJpbnQgKiwgNCArIG9mZiwg Y2hlY2tfcmVhbCwnKCcsIHJpbmQsICcpJwogICAgICAgIGZhaWxzID0gZmFp bHMgKyAxCiAgICAgIGVuZGlmCiAgICBlbmQgaWYKICAgIGlmIChwcmVzZW50 IChyYXJyYXkpKSB0aGVuCiAgICAgIGlmIChhbnkgKGNoZWNrX3JhcnJheSgx OnNpemUgKHJhcnJheSwgMSkpIC5uZS4gcmFycmF5KSkgdGhlbgogICAgICAg IHByaW50ICosIDUgKyBvZmYsIGNoZWNrX3JhcnJheSgxOnNpemUgKHJhcnJh eSwgMSkpLCAnKCcsIHJhcnJheSwgJyknCiAgICAgICAgZmFpbHMgPSBmYWls cyArIDEKICAgICAgZW5kaWYKICAgIGVuZCBpZgogICAgZmluYWxfY291bnQg PSAwCiAgZW5kIHN1YnJvdXRpbmUgdGVzdAplbmQgbW9kdWxlIHRlc3Rtb2Rl Cgpwcm9ncmFtIHRlc3RfZmluYWwKICB1c2UgdGVzdG1vZGUKICBpbXBsaWNp dCBub25lCgogIHR5cGUoc2ltcGxlKSwgYWxsb2NhdGFibGUgOjogTXlUeXBl LCBNeVR5cGUyCiAgdHlwZShzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiBNeVR5 cGVBcnJheSg6KQogIHR5cGUoc2ltcGxlKSA6OiBUaHlUeXBlID0gc2ltcGxl KDIxKSwgVGh5VHlwZTIgPSBzaW1wbGUoMjIpCiAgY2xhc3Moc2ltcGxlKSwg YWxsb2NhdGFibGUgOjogTXlDbGFzcwogIGNsYXNzKHNpbXBsZSksIGFsbG9j YXRhYmxlIDo6IE15Q2xhc3NBcnJheSg6KQoKISAqKioqKioqKioqKioqKioq KioqKioqKioKISBEZXJpdmVkIHR5cGUgYXNzaWdubWVudHMKISAqKioqKioq KioqKioqKioqKioqKioqKioKCiEgVGhlIG9yaWdpbmFsIFBSIC0gbm8gZmlu YWxpemF0aW9uIG9mICd2YXInIGJlZm9yZSAocmUpYWxsb2NhdGlvbgohIGJl Y2F1c2UgaXQgaXMgZGVhbGxvY2F0ZWQgb24gc2NvcGUgZW50cnkgKHBhcmEg MSBvZiBGMjAxOCA3LjUuNi4zLikKICBNeVR5cGUgPSBUaHlUeXBlCiAgY2Fs bCB0ZXN0KDAsIDAsIFswLDBdLCAwKQoKICBpZiAoLm5vdC4gYWxsb2NhdGVk KE15VHlwZSkpIGFsbG9jYXRlKE15VHlwZSkKICBhbGxvY2F0ZShNeVR5cGUy KQogIE15VHlwZSVpbmQgPSAxCiAgTXlUeXBlMiVpbmQgPSAyCgohIFRoaXMg c2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0aCBzZWxmID0gc2lt cGxlKDEpIChwYXJhIDEgb2YgRjIwMTggNy41LjYuMy4pLgogIE15VHlwZSA9 IE15VHlwZTIKICBjYWxsIHRlc3QoMSwgMSwgWzAsMF0sIDEwKQoKICBhbGxv Y2F0ZShNeVR5cGVBcnJheSgyKSkKICBNeVR5cGVBcnJheSVpbmQgPSBbNDIs IDQzXQohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0 aCBzZWxmID0gW3NpbXBsZSg0Miksc2ltcGxlKDQzKV0sCiEgZm9sbG93ZWQg YnkgdGhlIGZpbmFsaXphdGlvbiBvZiB0aGUgYXJyYXkgY29uc3RydWN0b3Ig PSBzZWxmID0gW3NpbXBsZSgyMSksc2ltcGxlKDIyKV0uCiAgTXlUeXBlQXJy YXkgPSBbVGh5VHlwZSwgVGh5VHlwZTJdICEgeyBkZy13YXJuaW5nICJoYXMg YmVlbiBmaW5hbGl6ZWQiIH0KICBjYWxsIHRlc3QoMiwgMCwgWzIxLDIyXSwg MjApCgohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgJ3Zh cicgPSBpbml0aWFsaXphdGlvbiA9IHNpbXBsZSgyMiksCiEgZm9sbG93ZWQg Ynkgb25lIHdpdGggZm9yIHRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0b3IuCiAg VGh5VHlwZTIgPSBzaW1wbGUoOTkpICEgeyBkZy13YXJuaW5nICJoYXMgYmVl biBmaW5hbGl6ZWQiIH0KICBjYWxsIHRlc3QoMiwgOTksIFswLDBdLCAzMCkK CiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2FsbCBmb3IgJ3Zh cicgd2l0aCBzZWxmID0gc2ltcGxlKDIxKS4KICBUaHlUeXBlID0gVGh5VHlw ZTIKICBjYWxsIHRlc3QoMSwgMjEsIFswLDBdLCA0MCkKCiEgVGhpcyBzaG91 bGQgcmVzdWx0IGluIHR3byBmaW5hbCBjYWxsczsgdGhlIGxhc3QgaXMgZm9y IE15dHlwZTIgPSBzaW1wbGUoMikuCiAgZGVhbGxvY2F0ZSAoTXlUeXBlLCBN eVR5cGUyKQogIGNhbGwgdGVzdCgyLCAyLCBbMCwwXSwgNTApCgohIFRoaXMg c2hvdWxkIHJlc3VsdCBpbiBvbmUgZmluYWwgY2FsbDsgTXlUeXBlQXJyYXkg PSBbc2ltcGxlKDIxKSxzaW1wbGUoMjIpXS4KICBkZWFsbG9jYXRlIChNeVR5 cGVBcnJheSkKICBjYWxsIHRlc3QoMSwgMCwgWzIxLDIyXSwgNjApCgohIFRo ZSBsaHMgaXMgZmluYWxpemVkIGJlZm9yZSBhc3NpZ25tZW50LgohIFRoZSBm dW5jdGlvbiByZXN1bHQgaXMgZmluYWxpemVkIGFmdGVyIHRoZSBhc3NpZ25t ZW50LgogIGFsbG9jYXRlIChNeVR5cGUsIHNvdXJjZSA9IHNpbXBsZSAoMTEp KQogIE15VHlwZSA9IGNvbnN0cnVjdG9yMSAoOTkpCiAgY2FsbCB0ZXN0KDIs IDk5LCBbMCwwXSwgNzApCiAgZGVhbGxvY2F0ZSAoTXlUeXBlKQohICoqKioq KioqKioqKioqKioqCiEgQ2xhc3MgYXNzaWdubWVudHMKISAqKioqKioqKioq KioqKioqKgoKICBmaW5hbF9jb3VudCA9IDAKCiEgVGhpcyBzaG91bGQgcmVz dWx0IGluIGEgZmluYWwgY2FsbCBmb3IgTXlDbGFzcywgd2hpY2ggaXMgc2lt cGxlKDMpIGFuZCB0aGVuCiEgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciB3 aXRoIHZhbHVlIHNpbXBsZSg0KSkuCiAgYWxsb2NhdGUgKE15Q2xhc3MsIHNv dXJjZSA9IHNpbXBsZSAoMykpCiAgTXlDbGFzcyA9IHNpbXBsZSAoNCkgISB7 IGRnLXdhcm5pbmcgImhhcyBiZWVuIGZpbmFsaXplZCIgfQogIGNhbGwgdGVz dCgyLCA0LCBbMCwwXSwgMTAwKQoKISBUaGlzIHNob3VsZCByZXN1bHQgaW4g YSBmaW5hbCBjYWxsIHdpdGggdGhlIGFzc2lnbmVkIHZhbHVlIG9mIHNpbXBs ZSg0KS4KICBkZWFsbG9jYXRlIChNeUNsYXNzKQogIGNhbGwgdGVzdCgxLCA0 LCBbMCwwXSwgMTEwKQoKCiAgYWxsb2NhdGUgKE15Q2xhc3NBcnJheSwgc291 cmNlID0gW3NpbXBsZSAoNSksIHNpbXBsZSAoNildKQohIE1ha2Ugc3VyZSB0 aGF0IHRoZXJlIGlzIG5vIGZpbmFsIGNhbGwgc2luY2UgTXlDbGFzc0FycmF5 IGlzIG5vdCBhbGxvY2F0ZWQuCiAgY2FsbCB0ZXN0KDAsIDQsIFswLDBdLCAx MjApCgogIE15Q2xhc3NBcnJheSA9IFtzaW1wbGUgKDcpLCBzaW1wbGUgKDgp XSAhIHsgZGctd2FybmluZyAiaGFzIGJlZW4gZmluYWxpemVkIiB9CiEgVGhl IGZpcnN0IGZpbmFsIGNhbGwgc2hvdWxkIGZpbmFsaXplIE15Q2xhc3NBcnJh eSBhbmQgdGhlIHNlY29uZCBzaG91bGQgcmV0dXJuCiEgdGhlIHZhbHVlIG9m IHRoZSBhcnJheSBjb25zdHJ1Y3Rvci4KICBjYWxsIHRlc3QoMiwgMCwgWzcs OF0sIDEzMCkKCiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2Fs bCB3aXRoIHRoZSBhc3NpZ25lZCB2YWx1ZS4KICBkZWFsbG9jYXRlIChNeUNs YXNzQXJyYXkpCiAgY2FsbCB0ZXN0KDEsIDAsIFs3LDhdLCAxNDApCgohIFRo aXMgc2hvdWxkIHByb2R1Y2Ugbm8gZmluYWwgY2FsbHMgc2luY2UgTXlDbGFz c0FycmF5IHdhcyBkZWFsbG9jYXRlZC4KICBhbGxvY2F0ZSAoTXlDbGFzc0Fy cmF5LCBzb3VyY2UgPSBbY29tcGxpY2F0ZWQoMSwgMi4wKSxjb21wbGljYXRl ZCgzLCA0LjApXSkKCiEgVGhpcyBzaG91bGQgcHJvZHVjZSBjYWxscyB0byBk ZXN0cnVjdG9yNCB0aGVuIGRlc3RydWN0b3IyLgogIGRlYWxsb2NhdGUgKE15 Q2xhc3NBcnJheSkKCiEgRjIwMTggNy41LjYuMzogIklmIHRoZSBlbnRpdHkg aXMgb2YgZXh0ZW5kZWQgdHlwZSBhbmQgdGhlIHBhcmVudCB0eXBlIGlzCiEg ZmluYWxpemFibGUsIHRoZSBwYXJlbnQgY29tcG9uZW50IGlzIGZpbmFsaXpl ZC4KICBjYWxsIHRlc3QoMiwgMCwgWzEsIDNdLCAxNTAsIHJhcnJheSA9IFsy LjAsIDQuMF0pCgohIFRoaXMgcHJvZHVjZXMgMiBmaW5hbCBjYWxscyBpbiB0 dXJuIGZvciAnc3JjJyBhcyBpdCBnb2VzIG91dCBvZiBzY29wZSwgZm9yCiEg TXlDbGFzc0FycmF5IGJlZm9yZSBpdCBpcyBhc3NpZ25lZCB0byBhbmQgdGhl IHJlc3VsdCBvZiAnY29uc3RydWN0b3IyJyBhZnRlcgohIHRoZSBhc3NpZ25t ZW50LCBmb3Igd2hpY2ggdGhlIHJlc3VsdCBzaG91bGQgYmUgc2hvdWxkIGJl IFsxMCwyMF0gJiBbMTAuMCwyMC4wXS4KICBNeUNsYXNzQXJyYXkgPSBjb25z dHJ1Y3RvcjIgKFsxMCwyMF0sIFsxMC4wLDIwLjBdKQogIGNhbGwgdGVzdCg2 LCAwLCBbMTAsMjBdLCAxNjAsIHJhcnJheSA9IFsxMC4wLDIwLjBdKQoKISBU aGlzIHByb2R1Y2VzIHR3byBmaW5hbCBjYWxscyB3aXRoIHRoZSBjb250ZW50 cyBvZiAnTXlDbGFzc0FycmF5LiBhbmQgaXRzCiEgcGFyZW50IGNvbXBvbmVu dC4KICBkZWFsbG9jYXRlIChNeUNsYXNzQXJyYXkpCiAgY2FsbCB0ZXN0KDIs IDAsIFsxMCwgMjBdLCAxNzAsIHJhcnJheSA9IFsxMC4wLDIwLjBdKQoKISBD bGVhbiB1cCBmb3IgdmFsZ3JpbmQgdGVzdGluZwogIGlmIChhbGxvY2F0ZWQg KE15VHlwZSkpIGRlYWxsb2NhdGUgKE15VHlwZSkKICBpZiAoYWxsb2NhdGVk IChNeVR5cGUyKSkgZGVhbGxvY2F0ZSAoTXlUeXBlMikKICBpZiAoYWxsb2Nh dGVkIChNeVR5cGVBcnJheSkpIGRlYWxsb2NhdGUgKE15VHlwZUFycmF5KQog IGlmIChhbGxvY2F0ZWQgKE15Q2xhc3MpKSBkZWFsbG9jYXRlIChNeUNsYXNz KQogIGlmIChhbGxvY2F0ZWQgKE15Q2xhc3NBcnJheSkpIGRlYWxsb2NhdGUg KE15Q2xhc3NBcnJheSkKCiEgRXJyb3IgbWVzc2FnZXMgcHJpbnRlZCBvdXQg YnkgJ3Rlc3QnLgogIGlmIChmYWlscyAubmUuIDApIHRoZW4KICAgUHJpbnQg KiwgZmFpbHMsICIgRXJyb3JzIgogICBlcnJvciBzdG9wCiAgZW5kaWYKZW5k IHByb2dyYW0gdGVzdF9maW5hbAo= --00000000000023e55805f64fa2f2 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_leyb02yx6 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 --00000000000023e55805f64fa2f2 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_leyb02z47 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== --00000000000023e55805f64fa2f2 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_leyb02zj9 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSODQ0NzIg aW4gd2hpY2ggdGhlIGZpbmFsaXphdGlvbnMgYXJvdW5kIHRoZQohIGFzc2ln bm1lbnQgaW4gJ215bWFpbicgd2VyZSBub3QgaGFwcGVuaW5nLgohCiEgQ29u dHJpYnV0ZWQgYnkgVmlwdWwgUGFyZWtoICA8Zm9ydHJhbmZhbkBvdXRsb29r LmNvbT4KIQptb2R1bGUgbQoKICAgdXNlLCBpbnRyaW5zaWMgOjogaXNvX2Zv cnRyYW5fZW52LCBvbmx5IDogb3V0cHV0X3VuaXQKCiAgIGltcGxpY2l0IG5v bmUKCiEgICBwcml2YXRlCgogICBpbnRlZ2VyLCBwdWJsaWMgOjogZmluYWxf Y291bnRzID0gMAogICBpbnRlZ2VyLCBwdWJsaWMgOjogYXNzb2NfY291bnRz ID0gMAoKICAgdHlwZSA6OiB0CiAgICAgIHByaXZhdGUKICAgICAgY2hhcmFj dGVyKGxlbj06KSwgcG9pbnRlciA6OiBtX3MgPT4gbnVsbCgpCiAgIGNvbnRh aW5zCiAgICAgIHByaXZhdGUKICAgICAgZmluYWwgOjogZmluYWxfdAogICAg ICBwcm9jZWR1cmUsIHBhc3ModGhpcyksIHB1YmxpYyA6OiBjbGVhbiA9PiBj bGVhbl90CiAgICAgIHByb2NlZHVyZSwgcGFzcyh0aGlzKSwgcHVibGljIDo6 IGluaXQgPT4gaW5pdF90CiAgICAgIHByb2NlZHVyZSwgcHVibGljIDo6IGFz c2lnbl90CiAgICAgIGdlbmVyaWMsIHB1YmxpYyA6OiBBU1NJR05NRU5UKD0p ID0+IGFzc2lnbl90CiAgIGVuZCB0eXBlCgogICBpbnRlcmZhY2UgdAogICAg ICBtb2R1bGUgcHJvY2VkdXJlIDo6IGNvbnN0cnVjdF90CiAgIGVuZCBpbnRl cmZhY2UKCiAgIHB1YmxpYyA6OiB0LCBhc3NpZ25fdAoKY29udGFpbnMKCiAg IGltcHVyZSBlbGVtZW50YWwgc3Vicm91dGluZSBhc3NpZ25fdCAodG8sIGZy b20pCiAgICAgY2xhc3ModCksIGludGVudChvdXQpIDo6IHRvCiAgICAgY2xh c3ModCksIGludGVudChpbikgOjogZnJvbQogICAgIGlmIChhc3NvY2lhdGVk IChmcm9tJW1fcykpIHRoZW4KICAgICAgICBhbGxvY2F0ZSh0byVtX3MsIHNv dXJjZSA9IGZyb20lbV9zKQogICAgIGVsc2UKICAgICAgICBhbGxvY2F0ZSh0 byVtX3MsIHNvdXJjZSA9ICJuZXciKQogICAgIGVuZGlmCiAgIGVuZCBzdWJy b3V0aW5lIGFzc2lnbl90CgogICBmdW5jdGlvbiBjb25zdHJ1Y3RfdCggbmFt ZSApIHJlc3VsdChuZXdfdCkKCiAgICAgICEgYXJndW1lbnQgbGlzdAogICAg ICBjaGFyYWN0ZXIobGVuPSopLCBpbnRlbnQoaW4pLCBvcHRpb25hbCA6OiBu YW1lCiAgICAgICEgZnVuY3Rpb24gcmVzdWx0CiAgICAgIHR5cGUodCkgOjog bmV3X3QKCiAgICAgIGlmICggcHJlc2VudChuYW1lKSApIHRoZW4KICAgICAg ICAgY2FsbCBuZXdfdCVpbml0KCBuYW1lICkKICAgICAgZW5kIGlmCgogICBl bmQgZnVuY3Rpb24KCiAgIHN1YnJvdXRpbmUgZmluYWxfdCggdGhpcyApCgog ICAgICAhIGFyZ3VtZW50IGxpc3QKICAgICAgdHlwZSh0KSwgaW50ZW50KGlu b3V0KSA6OiB0aGlzCgogICAgICBmaW5hbF9jb3VudHMgPSBmaW5hbF9jb3Vu dHMgKyAxCiAgICAgIGlmICggYXNzb2NpYXRlZCh0aGlzJW1fcykgKSB0aGVu CiAgICAgICAgIGFzc29jX2NvdW50cyA9IGFzc29jX2NvdW50cyArIDEKICAg ICAgZW5kaWYKICAgICAgY2FsbCBjbGVhbl90KCB0aGlzICkKCiAgIGVuZCBz dWJyb3V0aW5lCgogICBzdWJyb3V0aW5lIGNsZWFuX3QoIHRoaXMgKQoKICAg ICAgISBhcmd1bWVudCBsaXN0CiAgICAgIGNsYXNzKHQpLCBpbnRlbnQoaW5v dXQpIDo6IHRoaXMKCiAgICAgIGlmICggYXNzb2NpYXRlZCh0aGlzJW1fcykg KSB0aGVuCiAgICAgICAgIHByaW50ICosIHRoaXMlbV9zCiAgICAgICAgIGRl YWxsb2NhdGUoIHRoaXMlbV9zICkKICAgICAgZW5kIGlmCiAgICAgIHRoaXMl bV9zID0+IG51bGwoKQoKICAgZW5kIHN1YnJvdXRpbmUKCiAgIHN1YnJvdXRp bmUgaW5pdF90KCB0aGlzLCBtbmFtZSApCgogICAgICAhIGFyZ3VtZW50IGxp c3QKICAgICAgY2xhc3ModCksIGludGVudChpbm91dCkgICAgICA6OiB0aGlz CiAgICAgIGNoYXJhY3RlcihsZW49KiksIGludGVudChpbikgOjogbW5hbWUK CiAgICAgIGNhbGwgdGhpcyVjbGVhbigpCiAgICAgIGFsbG9jYXRlKGNoYXJh Y3RlcihsZW4obW5hbWUpKSA6OiB0aGlzJW1fcykKICAgICAgdGhpcyVtX3Mg PSBtbmFtZQoKICAgZW5kIHN1YnJvdXRpbmUKCmVuZCBtb2R1bGUKICAgdXNl IG0sIG9ubHkgOiBmaW5hbF9jb3VudHMsIGFzc29jX2NvdW50cwogICBjYWxs IG15bWFpbgohIFNlZSBjb21tZW50IGJlbG93LgogICBpZiAoZmluYWxfY291 bnRzIC89IDMpIHN0b3AgMQogICBpZiAoYXNzb2NfY291bnRzIC89IDIpIHN0 b3AgMgoKY29udGFpbnMKICAgc3Vicm91dGluZSBteW1haW4KCiAgIHVzZSBt LCBvbmx5IDogdAoKICAgaW1wbGljaXQgbm9uZQoKICAgY2hhcmFjdGVyKDMp LCBhbGxvY2F0YWJsZSwgdGFyZ2V0IDo6IG15bmFtZQoKICAgdHlwZSh0KSA6 OiBmb28KCiAgIGNhbGwgZm9vJWluaXQoIG1uYW1lPSIxMjMiICkKCiAgIG15 bmFtZSA9ICJmb28iCiAgIGZvbyA9IHQoIG15bmFtZSApCgogICBjYWxsIGZv byVjbGVhbigpCgohIE5BR0ZPUiBoYXMgYXNzb2NfY291bnRzID0yLCB3aGlj aCBpcyBwcm9iYWJseSBjb3JyZWN0LiBJZiBudWxsaWZpY2F0aW9uCiEgb2Yg dGhlIHBvaW50ZXIgY29tcG9uZW50IGlzIG5vdCBkb25lIGluIGdmb3J0cmFu LCBmdW5jdGlvbiBmaW5hbGl6YXRpb24KISByZXN1bHRzIGluIGEgZG91Ymxl IGZyZWUuIFRPRE8gZml4IHRoaXMuCiAgIGlmIChmaW5hbF9jb3VudHMgLz0g Mikgc3RvcCAzCiAgIGlmIChhc3NvY19jb3VudHMgLz0gMikgc3RvcCA0CiAg IGVuZAplbmQKCg== --00000000000023e55805f64fa2f2 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_leyb02zb8 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 --00000000000023e55805f64fa2f2 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_leyb02zo10 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIHByODg3MzUu CiEKISBDb250cmlidXRlZCBieSBNYXJ0aW4gU3RlaW4gIDxtc2NmZEBnbXgu bmV0PgohCm1vZHVsZSBtb2QKICBpbXBsaWNpdCBub25lCiAgdHlwZSwgcHVi bGljIDo6IHQKICAgICBpbnRlZ2VyLCBwb2ludGVyIDo6IGkgPT4gTlVMTCAo KQogICAgIGNoYXJhY3RlciA6OiBteW5hbWUgPSAneicKICAgICBjaGFyYWN0 ZXIgOjogYWxsb2MgPSAnbicKICBjb250YWlucwogICAgIHByb2NlZHVyZSwg cHVibGljIDo6IHNldAogICAgIGdlbmVyaWMsIHB1YmxpYyA6OiBhc3NpZ25t ZW50KD0pID0+IHNldAogICAgIGZpbmFsIDo6IGZpbmFsaXNlCiAgZW5kIHR5 cGUgdAogIGludGVnZXIsIHB1YmxpYyA6OiBhc3NvY19pbl9maW5hbCA9IDAK ICBpbnRlZ2VyLCBwdWJsaWMgOjogY2FsbHNfdG9fZmluYWwgPSAwCiAgY2hh cmFjdGVyLCBwdWJsaWMgOjogbXluYW1lMSwgbXluYW1lMgoKY29udGFpbnMK CiAgc3Vicm91dGluZSBzZXQoc2VsZiwgeCkKICAgICBjbGFzcyh0KSwgaW50 ZW50KG91dCkgOjogc2VsZgogICAgIGNsYXNzKHQpLCBpbnRlbnQoaW4pICA6 OiB4CiAgICAgaWYgKGFzc29jaWF0ZWQoc2VsZiVpKSkgdGhlbgogICAgICAg IHN0b3AgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIERlZmF1 bHQgaW5pdCBmb3IgSU5URU5UKE9VVCkKICAgICBlbmRpZgogICAgIGlmIChh c3NvY2lhdGVkKHglaSkpIHRoZW4KICAgICAgICBteW5hbWUyID0gc2VsZiVt eW5hbWUKICAgICAgICBzZWxmJWkgPT4geCVpCiAgICAgICAgc2VsZiVpID0g c2VsZiVpICsgMQogICAgIGVuZCBpZgplbmQgc3Vicm91dGluZSBzZXQKCiAg c3Vicm91dGluZSBmaW5hbGlzZShzZWxmKQogICAgIHR5cGUodCksIGludGVu dChpbm91dCkgOjogc2VsZgogICAgIGNhbGxzX3RvX2ZpbmFsID0gY2FsbHNf dG9fZmluYWwgKyAxCiAgICAgbXluYW1lMSA9IHNlbGYlbXluYW1lCiAgICAg aWYgKGFzc29jaWF0ZWQoc2VsZiVpKSkgdGhlbgogICAgICAgIGFzc29jX2lu X2ZpbmFsID0gYXNzb2NfaW5fZmluYWwgKyAxCiAgICAgICAgaWYgKHNlbGYl YWxsb2MgLmVxLiAneScpIGRlYWxsb2NhdGUgKHNlbGYlaSkKICAgICBlbmQg aWYKICBlbmQgc3Vicm91dGluZSBmaW5hbGlzZQoKZW5kIG1vZHVsZSBtb2QK CnByb2dyYW0gZmluYWxpc2VfYXNzaWduCiAgdXNlIG1vZAogIGltcGxpY2l0 IG5vbmUKICB0eXBlIDo6IHMKICAgICBpbnRlZ2VyIDo6IGkgPSAwCiAgICAg dHlwZSh0KSA6OiB4CiAgZW5kIHR5cGUgcwogIHR5cGUocykgOjogYSwgYgog IHR5cGUodCkgOjogYwogIGEleCVteW5hbWUgPSAnYScKICBiJXglbXluYW1l ID0gJ2InCiAgYyVteW5hbWUgPSAnYycKICBhbGxvY2F0ZSAoYSV4JWkpCiAg YSV4JWkgPSAxMjMKICBhJXglYWxsb2MgPSAneScKCiAgYiA9IGEKICBpZiAo YXNzb2NfaW5fZmluYWwgLz0gMCkgc3RvcCAyICAhIGIleCVpIG5vdCBhc3Nv Y2lhdGVkIGJlZm9yZSBmaW5hbGl6YXRpb24KICBpZiAoY2FsbHNfdG9fZmlu YWwgLz0gMikgc3RvcCAzICAhIFR3byBmaW5hbGl6YXRpb24gY2FsbHMKICBp ZiAobXluYW1lMSAubmUuICdiJykgc3RvcCA0ICAgICAhIEZpbmFsaXphdGlv biBiZWZvcmUgaW50ZW50IG91dCBiZWNvbWUgdW5kZWZpbmVkCiAgaWYgKG15 bmFtZTIgLm5lLiAneicpIHN0b3AgNSAgICAgISBJbnRlbnQgb3V0IG5vdyBk ZWZhdWx0IGluaXRpYWxpemVkCiAgaWYgKC5ub3QuYXNzb2NpYXRlZCAoYiV4 JWksIGEleCVpKSkgc3RvcCA2CgogIGFsbG9jYXRlIChjJWksIHNvdXJjZSA9 IDc4OSkKICBjJWFsbG9jID0gJ3knCiAgYyA9IGEleAogIGlmIChhc3NvY19p bl9maW5hbCAvPSAxKSBzdG9wIDYgICEgYyVpIGlzIGFsbG9jYXRlZCBwcmlv ciB0byB0aGUgYXNzaWdubWVudAogIGlmIChjYWxsc190b19maW5hbCAvPSAz KSBzdG9wIDcgICEgT25lIGZpbmFsaXphdGlvbiBjYWxsIGZvciB0aGUgYXNz aWdubWVudAogIGlmIChteW5hbWUxIC5uZS4gJ2MnKSBzdG9wIDggICAgICEg RmluYWxpemF0aW9uIGJlZm9yZSBpbnRlbnQgb3V0IGJlY29tZSB1bmRlZmlu ZWQKICBpZiAobXluYW1lMiAubmUuICd6Jykgc3RvcCA5ICAgICAhIEludGVu dCBvdXQgbm93IGRlZmF1bHQgaW5pdGlhbGl6ZWQKCiAgYiA9IGEKICBpZiAo YXNzb2NfaW5fZmluYWwgLz0gMykgc3RvcCAxMCAhIGIlaSBpcyBhc3NvY2lh dGVkIGJ5IGVhcmxpZXIgYXNzaWdubWVudAogIGlmIChjYWxsc190b19maW5h bCAvPSA1KSBzdG9wIDExICEgVHdvIGZpbmFsaXphdGlvbiBjYWxscyBmb3Ig dGhlIGFzc2lnbm1lbnQKICBpZiAobXluYW1lMSAubmUuICd6Jykgc3RvcCAx MiAgICAhIGIleCVteW5hbWUgd2FzIGRlZmF1bHQgaW5pdGlhbGl6ZWQgaW4g ZWFybGllciBhc3NpZ25tZW50CiAgaWYgKG15bmFtZTIgLm5lLiAneicpIHN0 b3AgMTMgICAgISBJbnRlbnQgb3V0IG5vdyBkZWZhdWx0IGluaXRpYWxpemVk CiAgaWYgKGIleCVpIC5uZS4gMTI2KSBzdG9wIDE0ICAgICAgISBUaHJlZSBh c3NpZ25tZW50cyB3aXRoIHNlbGYleCVpIHBvaW50aW5nIHRvIHNhbWUgdGFy Z2V0CiAgZGVhbGxvY2F0ZSAoYSV4JWkpCiAgaWYgKC5ub3QuYXNzb2NpYXRl ZCAoYiV4JWksIGMlaSkpIHRoZW4KICAgIHN0b3AgMTUgICAgICAgICAgICAg ICAgICAgICAgICAhIGRpdHRvCiAgICBiJXglaSA9Pk5VTEwgKCkgICAgICAg ICAgICAgICAgISBBbHRob3VnaCBub3QgbmVlZGVkIGhlcmUsIGNsZWFuIHVw CiAgICBjJWkgPT4gTlVMTCAoKQogIGVuZGlmCmVuZCBwcm9ncmFtIGZpbmFs aXNlX2Fzc2lnbgo= --00000000000023e55805f64fa2f2 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_leyb02zt11 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== --00000000000023e55805f64fa2f2 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_leyb02zx12 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 --00000000000023e55805f64fa2f2 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_leyb030213 ISB7IGRnLWRvIGNvbXBpbGUgfQohIHsgZGctb3B0aW9ucyAiLWZkdW1wLXRy ZWUtb3JpZ2luYWwiIH0KIQohIFRlc3QgY29uZm9ybWFuY2Ugd2l0aCBjbGF1 c2UgNy41LjYuMywgcGFyYWdyYXBoIDYgb2YgRjIwMTguIFBhcnQgb2YgUFIx MDY1NzYuCiEKISBDb250cmlidXRlZCBieSBEYW1pYW4gUm91c29uICA8ZGFt aWFuQGFyY2hhZW9sb2dpYy5jb2Rlcz4KIQptb2R1bGUgZmluYWxpemFibGVf bQogICEhIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBtYWluIHByb2dyYW0g YXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUsIHdoaWNoCiAgISEgdGVzdHMg Y29tcGlsZXIgY29uZm9ybWFuY2Ugd2l0aCBjbGF1c2UgNy41LjYuMywgcGFy YWdyYXBoIDYgaW4gdGhlIEZvcnRyYW4KICAhISBJbnRlcnByZXRhdGlvbiBE b2N1bWVudCAoaHR0cHM6Ly9qMy1mb3J0cmFuLm9yZy9kb2MveWVhci8xOC8x OC0wMDdyMS5wZGYpOgogICEhICJJZiBhIHNwZWNpZmljYXRpb24gZXhwcmVz c2lvbiBpbiBhIHNjb3BpbmcgdW5pdCByZWZlcmVuY2VzCiAgISEgYSBmdW5j dGlvbiwgdGhlIHJlc3VsdCBpcyBmaW5hbGl6ZWQgYmVmb3JlIGV4ZWN1dGlv biBvZiB0aGUgZXhlY3V0YWJsZQogICEhIGNvbnN0cnVjdHMgaW4gdGhlIHNj b3BpbmcgdW5pdC4iCiAgaW1wbGljaXQgbm9uZQoKICBwcml2YXRlCiAgcHVi bGljIDo6IGZpbmFsaXphYmxlX3QsIGNvbXBvbmVudAoKICB0eXBlIGZpbmFs aXphYmxlX3QKICAgIHByaXZhdGUKICAgIGludGVnZXIsIGFsbG9jYXRhYmxl IDo6IGNvbXBvbmVudF8KICBjb250YWlucwogICAgZmluYWwgOjogZmluYWxp emUKICBlbmQgVHlwZQoKICBpbnRlcmZhY2UgZmluYWxpemFibGVfdAogICAg bW9kdWxlIHByb2NlZHVyZSBjb25zdHJ1Y3QKICBlbmQgaW50ZXJmYWNlCgpj b250YWlucwoKICBwdXJlIGZ1bmN0aW9uIGNvbnN0cnVjdChjb21wb25lbnQp IHJlc3VsdChmaW5hbGl6YWJsZSkKICAgIGludGVnZXIsIGludGVudChpbikg OjogY29tcG9uZW50CiAgICB0eXBlKGZpbmFsaXphYmxlX3QpIGZpbmFsaXph YmxlCiAgICBhbGxvY2F0ZShmaW5hbGl6YWJsZSVjb21wb25lbnRfLCBzb3Vy Y2UgPSBjb21wb25lbnQpCiAgZW5kIGZ1bmN0aW9uCgogIHB1cmUgZnVuY3Rp b24gY29tcG9uZW50KHNlbGYpIHJlc3VsdChzZWxmX2NvbXBvbmVudCkKICAg IHR5cGUoZmluYWxpemFibGVfdCksIGludGVudChpbikgOjogc2VsZgogICAg aW50ZWdlciBzZWxmX2NvbXBvbmVudAogICAgc2VsZl9jb21wb25lbnQgPSBz ZWxmJWNvbXBvbmVudF8KICBlbmQgZnVuY3Rpb24KCiAgcHVyZSBzdWJyb3V0 aW5lIGZpbmFsaXplKHNlbGYpCiAgICB0eXBlKGZpbmFsaXphYmxlX3QpLCBp bnRlbnQoaW5vdXQpIDo6IHNlbGYKICAgIGlmIChhbGxvY2F0ZWQoc2VsZiVj b21wb25lbnRfKSkgZGVhbGxvY2F0ZShzZWxmJWNvbXBvbmVudF8pCiAgZW5k IHN1YnJvdXRpbmUKCmVuZCBtb2R1bGUKCnByb2dyYW0gc3BlY2lmaWNhdGlv bl9leHByZXNzaW9uX2ZpbmFsaXphdGlvbgogIHVzZSBmaW5hbGl6YWJsZV9t LCBvbmx5IDogZmluYWxpemFibGVfdCwgY29tcG9uZW50CiAgaW1wbGljaXQg bm9uZQoKICBjYWxsIGZpbmFsaXplX3NwZWNpZmljYXRpb25fZXhwcmVzc2lv bl9yZXN1bHQKCmNvbnRhaW5zCgogIHN1YnJvdXRpbmUgZmluYWxpemVfc3Bl Y2lmaWNhdGlvbl9leHByZXNzaW9uX3Jlc3VsdAogICAgcmVhbCB0bXAoY29t cG9uZW50KGZpbmFsaXphYmxlX3QoY29tcG9uZW50PTEpKSkgISEgRmluYWxp emVzIHRoZSBmaW5hbGl6YWJsZV90IGZ1bmN0aW9uIHJlc3VsdAogICAgcmVh bCBlbGltaW5hdGVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcKICAgIHRtcCA9 IGVsaW1pbmF0ZV91bnVzZWRfdmFyaWFibGVfd2FybmluZwogIGVuZCBzdWJy b3V0aW5lCgplbmQgcHJvZ3JhbQohIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiX2ZpbmFsICE9IDBCIiAxICJvcmlnaW5hbCIgfSB9 --00000000000023e55805f64fa2f2 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_leyb030614 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 --00000000000023e55805f64fa2f2 Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_51.f90" Content-Disposition: attachment; filename="finalize_51.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_leyb030a15 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGFzc3VtZWQgcmFuayBmaW5hbGl6 ZXJzCiEKbW9kdWxlIGZpbmFsaXphYmxlX20KISBGMjAxODogNy41LjYuMiBw YXJhIDE6ICJPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGFuIGVsZW1lbnRhbCBm aW5hbAohIHN1YnJvdXRpbmUgd2hvc2UgZHVtbXkgYXJndW1lbnQgaGFzIHRo ZSBzYW1lIGtpbmQgdHlwZSBwYXJhbWV0ZXJzCiEgYXMgdGhlIGVudGl0eSBi ZWluZyBmaW5hbGl6ZWQsIG9yIGEgZmluYWwgc3Vicm91dGluZSB3aG9zZSBk dW1teQohIGFyZ3VtZW50IGlzIGFzc3VtZWQtcmFuayB3aXRoIHRoZSBzYW1l IGtpbmQgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZQohIGVudGl0eSBiZWluZyBm aW5hbGl6ZWQsIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBlbnRpdHkgYXMgYW4g YWN0dWFsCiEgYXJndW1lbnQuIgogIGltcGxpY2l0IG5vbmUKCiAgdHlwZSBm aW5hbGl6YWJsZV90CiAgICBpbnRlZ2VyIDo6IGNvbXBvbmVudF8KICBjb250 YWlucwogICAgZmluYWwgOjogZmluYWxpemUKICBlbmQgVHlwZQoKICBpbnRl cmZhY2UgZmluYWxpemFibGVfdHlwZQogICAgbW9kdWxlIHByb2NlZHVyZSBj b25zdHJ1Y3QwLCBjb25zdHJ1Y3QxCiAgZW5kIGludGVyZmFjZQoKICBpbnRl Z2VyIDo6IGZpbmFsX2N0ciA9IDAKCmNvbnRhaW5zCgogIHB1cmUgZnVuY3Rp b24gY29uc3RydWN0MChjb21wb25lbnQpIHJlc3VsdChmaW5hbGl6YWJsZSkK ICAgIGludGVnZXIsIGludGVudChpbikgOjogY29tcG9uZW50CiAgICB0eXBl KGZpbmFsaXphYmxlX3QpIGZpbmFsaXphYmxlCiAgICBmaW5hbGl6YWJsZSVj b21wb25lbnRfID0gY29tcG9uZW50CiAgZW5kIGZ1bmN0aW9uCgogIGltcHVy ZSBmdW5jdGlvbiBjb25zdHJ1Y3QxKGNvbXBvbmVudCkgcmVzdWx0KGZpbmFs aXphYmxlKQogICAgaW50ZWdlciwgaW50ZW50KGluKSwgZGltZW5zaW9uKDop IDo6IGNvbXBvbmVudAogICAgdHlwZShmaW5hbGl6YWJsZV90KSwgZGltZW5z aW9uKDopLCBhbGxvY2F0YWJsZSA6OiBmaW5hbGl6YWJsZQogICAgaW50ZWdl ciA6OiBzegogICAgc3ogPSBzaXplKGNvbXBvbmVudCkKICAgIGFsbG9jYXRl IChmaW5hbGl6YWJsZSAoc3opKQogICAgZmluYWxpemFibGUlY29tcG9uZW50 XyA9IGNvbXBvbmVudAogIGVuZCBmdW5jdGlvbgoKICBzdWJyb3V0aW5lIGZp bmFsaXplKHNlbGYpCiAgICB0eXBlKGZpbmFsaXphYmxlX3QpLCBpbnRlbnQo aW5vdXQpLCBkaW1lbnNpb24gKC4uKSA6OiBzZWxmCiAgICBzZWxlY3QgcmFu ayAoc2VsZikKICAgIHJhbmsgKDApCiAgICAgICAgcHJpbnQgKiwgInJhbmsg MCB2YWx1ZSA9ICIsIHNlbGYlY29tcG9uZW50XwogICAgcmFuayAoMSkKICAg ICAgICBwcmludCAqLCAicmFuayAxIHZhbHVlID0gIiwgc2VsZiVjb21wb25l bnRfCiAgICByYW5rIGRlZmF1bHQKICAgICAgICBwcmludCAqLCAicmFuayBk ZWZhdWx0IgogICAgZW5kIHNlbGVjdAogICAgZmluYWxfY3RyID0gZmluYWxf Y3RyICsgMQogIGVuZCBzdWJyb3V0aW5lCgplbmQgbW9kdWxlCgpwcm9ncmFt IHNwZWNpZmljYXRpb25fZXhwcmVzc2lvbl9maW5hbGl6YXRpb24KICB1c2Ug ZmluYWxpemFibGVfbQogIGltcGxpY2l0IG5vbmUKCiAgdHlwZShmaW5hbGl6 YWJsZV90KSA6OiBhID0gZmluYWxpemFibGVfdCAoMSkKICB0eXBlKGZpbmFs aXphYmxlX3QpIDo6IGIoMikgPSBbZmluYWxpemFibGVfdCAoMiksIGZpbmFs aXphYmxlX3QgKDMpXQoKICBhID0gZmluYWxpemFibGVfdHlwZSAoNDIpCiAg aWYgKGZpbmFsX2N0ciAubmUuIDIpIHN0b3AgMQogIGIgPSBmaW5hbGl6YWJs ZV90eXBlIChbNDIsIDQzXSkKICBwcmludCAqLCBiJWNvbXBvbmVudF8KCmVu ZCBwcm9ncmFtCg== --00000000000023e55805f64fa2f2--