From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id E54C53858D35 for ; Thu, 7 Mar 2024 08:02:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E54C53858D35 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=pllab.cs.nthu.edu.tw Authentication-Results: sourceware.org; spf=none smtp.mailfrom=pllab.cs.nthu.edu.tw ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E54C53858D35 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::62b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709798538; cv=none; b=gJU80SfasAo8aXBCoSvJhVOX0akxoQahJj6ESpHcgzwFkKiMg2pxmjgDxyMvVlpNrD45eVeQ+bCIdH9RUowfNj0G36TJq1Bc19rccrq5YojWsrvxoch3TO9KEgakEB9QzI8YqIMU3+a+zx8Fj8iH8cwDw1G7vQo/g8hk3lpPQ/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709798538; c=relaxed/simple; bh=qS+WXb9X8ic70INPxIn6HODosZJSyUrktvGGfl46WmA=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=FZ9oSFgznWDvHdH4fTJgs5shZ8zEmrgPNffImtPVg2jbuFLNkKDN8XufOSmVB+/ZjZw+igE/r2lJ4gCBQYlZo3jr/UoVBOL5QH/08bXl8jTC8TyrdbH7YNathczSSEEB2VYZ2zm7P0cCxfrYF4QVn2h7YGEfjDJiuvLe3kcnpyc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1dcad814986so4974745ad.0 for ; Thu, 07 Mar 2024 00:02:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pllab-cs-nthu-edu-tw.20230601.gappssmtp.com; s=20230601; t=1709798530; x=1710403330; darn=gcc.gnu.org; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=0CTbj0TW+n8ALvbSIaqK7DhgchYyWQfwNfXaaoN+rbM=; b=XVNbA+qSmYEI7Xjz0DTrOFf/XmGCqs/WCbf5S5ag7dfC26YNfFBh1uWL5fqa8hcSt4 cmYfb1KabBuc7FtbpMN7WXY6bS5rAcRxOlxcamrk4q7ln2SJtkzjgFMtVo76fXSrW2lq TOaEumhYi77yx51aSzGztffTfQoKMI+ZRNY94tTgdQzxR4HxctnruJJdJ6fUHcyw7uZw hvXRKX3AsbK1dzGIuw8+uhR0T+r0dvNt65ErxaowcKwfyKdX/H7Ocx0arYZH7b0xTASj oRPUnuByRWJNDNW/2oN3GtrLGKodmscwKYanlAyYBRLAe3gbDrUmJdFxa235N4oW9Tbx 68sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709798530; x=1710403330; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0CTbj0TW+n8ALvbSIaqK7DhgchYyWQfwNfXaaoN+rbM=; b=QwtqRJ01LBUzKaXb8/sDhIK4+psNPSoQuabwVMrcToQ6oR9Ss3iVBN7GiQA9LtZwOj PyTcnvAqobq8qFYPhpeTTLvFiUt4D+A36Altd9gBhBhhipTCvtvAiQwQCaOLbbHHeP0o XaTNd0zCs4n+lmnuFMzAaewRm8ZtpVukAHWsmPhKZodXXbIe763tnwbYRpo/A/iYp+Yx iSHGCwVsk/9XOWS5dPqonYE1+Tm/umdUnPwlPP0nDDqLRzCVo3dgsE3I+IZ+jfDq0vmz aBf2LtTTh9IA5gw0Dtdaym4SMbT+VBeD15MJ83C6kUeVTG+EUsh7vgHrX/N3GzKcAuDu GHNg== X-Forwarded-Encrypted: i=1; AJvYcCXWT0EfkHGho6NETwD0PPrFSCbkN4WCtw1Db1T2KRK9AyCnd5uW65sJI2YQMz/qvzUtueTq1QzJ6OEw27j9v4UIQfDA X-Gm-Message-State: AOJu0YwMm7x62QiT3U3xlcjIqZg6BMeHGQiGLFl0Bykv5dDZQ/rbXUFc DXAl5Sbvc32JBQKTEo7gnbHA9iTh2dWdMKJMyZP7BKk15XNsdYSJoGs9pEmvB9E= X-Google-Smtp-Source: AGHT+IEI532XnzKExrJYRQmjhN007TOVpPaXr+eqE2gTew9GQUxX8EWicaPykIMBSpSnALBk3EQnZA== X-Received: by 2002:a17:902:82c7:b0:1dc:f175:9ac0 with SMTP id u7-20020a17090282c700b001dcf1759ac0mr6381397plz.69.1709798529746; Thu, 07 Mar 2024 00:02:09 -0800 (PST) Received: from ?IPV6:2401:e180:8d30:470:1557:bb6c:fe0e:a621? ([2401:e180:8d30:470:1557:bb6c:fe0e:a621]) by smtp.gmail.com with ESMTPSA id u11-20020a170903124b00b001db2b8b2da7sm13803029plh.122.2024.03.07.00.02.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 07 Mar 2024 00:02:08 -0800 (PST) Content-Type: multipart/mixed; boundary="------------qHOlhnsgBWSRmGgnq7axsxtT" Message-ID: <2f568f7d-807b-41d1-befb-40039e2edb74@pllab.cs.nthu.edu.tw> Date: Thu, 7 Mar 2024 17:02:02 +0900 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH, OpenACC 2.7, v2] readonly modifier support in front-ends Content-Language: en-US To: Thomas Schwinge , Tobias Burnus , Chung-Lin Tang Cc: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org References: <87lefaaesb.fsf@euler.schwinge.homeip.net> <87ttqd7m8e.fsf@euler.schwinge.homeip.net> From: Chung-Lin Tang In-Reply-To: <87ttqd7m8e.fsf@euler.schwinge.homeip.net> X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: This is a multi-part message in MIME format. --------------qHOlhnsgBWSRmGgnq7axsxtT Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Thomas, Tobias, On 2023/10/26 6:43 PM, Thomas Schwinge wrote: >>>>> +++ b/gcc/tree.h >>>>> @@ -1813,6 +1813,14 @@ class auto_suppress_location_wrappers >>>>> #define OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE(NODE) \ >>>>> (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.addressable_flag) >>>>> >>>>> +/* Nonzero if OpenACC 'readonly' modifier set, used for 'copyin'. */ >>>>> +#define OMP_CLAUSE_MAP_READONLY(NODE) \ >>>>> + TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)) >>>>> + >>>>> +/* Same as above, for use in OpenACC cache directives. */ >>>>> +#define OMP_CLAUSE__CACHE__READONLY(NODE) \ >>>>> + TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__CACHE_)) >>>> I'm not sure if these special accessor functions are actually useful, or >>>> we should just directly use 'TREE_READONLY' instead? We're only using >>>> them in contexts where it's clear that the 'OMP_CLAUSE_SUBCODE_CHECK' is >>>> satisfied, for example. >>> I find directly using TREE_READONLY confusing. >> >> FWIW, I've changed to use TREE_NOTHROW instead, if it can give a better sense of safety :P > > I don't understand that, why not use 'TREE_READONLY'? > >> I think there's a misunderstanding here anyways: we are not relying on a DECL marked >> TREE_READONLY here. We merely need the OMP_CLAUSE_MAP to be marked as OMP_CLAUSE_MAP_READONLY == 1. > > Yes, I understand that. My question was why we don't just use > 'TREE_READONLY (c)', where 'c' is the > 'OMP_CLAUSE_MAP'/'OMP_CLAUSE__CACHE_' clause (not its decl), and avoid > the indirection through > '#define OMP_CLAUSE_MAP_READONLY'/'#define OMP_CLAUSE__CACHE__READONLY', > given that we're only using them in contexts where it's clear that the > 'OMP_CLAUSE_SUBCODE_CHECK' is satisfied. I don't have a strong > preference, though. After further re-testing using TREE_NOTHROW, I have reverted to using TREE_READONLY, because TREE_NOTHROW clashes with OMP_CLAUSE_RELEASE_DESCRIPTOR (which doesn't use the OMP_CLAUSE_MAP_* naming convention and is not documented in gcc/tree-core.h either, hmmm...) I have added the comment adjustments in gcc/tree-core.h for the new uses of TREE_READONLY/readonly_flag. We basically all use OMP_CLAUSE_SUBCODE_CHECK macros for OpenMP clause expressions exclusively, so I don't see a reason to diverge from that style (even when context is clear). > Either way, you still need to document this: > > | Also, for the new use for OMP clauses, update 'gcc/tree.h:TREE_READONLY', > | and in 'gcc/tree-core.h' for 'readonly_flag' the > | "table lists the uses of each of the above flags". Okay, done as mentioned above. > In addition to a few individual comments above and below, you've also not > yet responded to my requests re test cases. I have greatly expanded the test scan patterns to include parallel/kernels/serial/data/enter data, as well as non-readonly copyin clause together with readonly. Also added simple 'declare' tests, but there is not anything to scan in the 'tree-original' dump though. >> + tree nl = list; >> + bool readonly = false; >> + matching_parens parens; >> + if (parens.require_open (parser)) >> + { >> + /* Turn on readonly modifier parsing for copyin clause. */ >> + if (c_kind == PRAGMA_OACC_CLAUSE_COPYIN) >> + { >> + c_token *token = c_parser_peek_token (parser); >> + if (token->type == CPP_NAME >> + && !strcmp (IDENTIFIER_POINTER (token->value), "readonly") >> + && c_parser_peek_2nd_token (parser)->type == CPP_COLON) >> + { >> + c_parser_consume_token (parser); >> + c_parser_consume_token (parser); >> + readonly = true; >> + } >> + } >> + location_t loc = c_parser_peek_token (parser)->location; > > I suppose 'loc' here now points to after the opening '(' or after the > 'readonly :'? This is different from what 'c_parser_omp_var_list_parens' > does, and indeed, 'c_parser_omp_variable_list' states that "CLAUSE_LOC is > the location of the clause", not the location of the variable-list? As > this, I suppose, may change diagnostics, please restore the original > behavior. (This appears to be different in the C++ front end, huh.) Thanks for catching this! Fixed. >> --- a/gcc/fortran/openmp.cc >> +++ b/gcc/fortran/openmp.cc >> @@ -1197,7 +1197,7 @@ omp_inv_mask::omp_inv_mask (const omp_mask &m) : omp_mask (m) >> >> static bool >> gfc_match_omp_map_clause (gfc_omp_namelist **list, gfc_omp_map_op map_op, >> - bool allow_common, bool allow_derived) >> + bool allow_common, bool allow_derived, bool readonly = false) >> { >> gfc_omp_namelist **head = NULL; >> if (gfc_match_omp_variable_list ("", list, allow_common, NULL, &head, true, >> @@ -1206,7 +1206,10 @@ gfc_match_omp_map_clause (gfc_omp_namelist **list, gfc_omp_map_op map_op, >> { >> gfc_omp_namelist *n; >> for (n = *head; n; n = n->next) >> - n->u.map_op = map_op; >> + { >> + n->u.map.op = map_op; >> + n->u.map.readonly = readonly; >> + } >> return true; >> } > > Didn't we conclude that "not doing it here is cleaner" (Tobias' words), > and instead do this "Similar to 'c_parser_omp_var_list_parens'" (my > words)? That is, not add the 'bool readonly' formal parameter to > 'gfc_match_omp_map_clause'. Fixed in this v3 patch. Again, tested on x86_64-linux + nvptx offloading. Okay for mainline? Thanks, Chung-Lin gcc/c/ChangeLog: * c-parser.cc (c_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (c_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. gcc/cp/ChangeLog: * parser.cc (cp_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (cp_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. gcc/fortran/ChangeLog: * dump-parse-tree.cc (show_omp_namelist): Print "readonly," for OMP_LIST_MAP and OMP_LIST_CACHE if n->u.map.readonly is set. Adjust 'n->u.map_op' to 'n->u.map.op'. * gfortran.h (typedef struct gfc_omp_namelist): Adjust map_op as 'ENUM_BITFIELD (gfc_omp_map_op) op:8', add 'bool readonly' field, change to named struct field 'map'. * openmp.cc (gfc_match_omp_map_clause): Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_omp_clause_reduction): Likewise. (gfc_match_omp_clauses): Add readonly modifier parsing for OpenACC copyin clause, set 'n->u.map.op' and 'n->u.map.readonly' for parsed clause. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_oacc_declare): Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_oacc_cache): Add readonly modifier parsing for OpenACC cache directive. (resolve_omp_clauses): Adjust 'n->u.map_op' to 'n->u.map.op'. * trans-decl.cc (add_clause): Adjust 'n->u.map_op' to 'n->u.map.op'. (finish_oacc_declare): Likewise. * trans-openmp.cc (gfc_trans_omp_clauses): Set OMP_CLAUSE_MAP_READONLY, OMP_CLAUSE__CACHE__READONLY to 1 when readonly is set. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_add_clause_implicitly): Adjust 'n->u.map_op' to 'n->u.map.op'. gcc/ChangeLog: * tree.h (OMP_CLAUSE_MAP_READONLY): New macro. (OMP_CLAUSE__CACHE__READONLY): New macro. * tree-core.h (struct GTY(()) tree_base): Adjust comments for new uses of readonly_flag bit in OMP_CLAUSE_MAP_READONLY and OMP_CLAUSE__CACHE__READONLY. * tree-pretty-print.cc (dump_omp_clause): Add support for printing OMP_CLAUSE_MAP_READONLY and OMP_CLAUSE__CACHE__READONLY. gcc/testsuite/ChangeLog: * c-c++-common/goacc/readonly-1.c: New test. * gfortran.dg/goacc/readonly-1.f90: New test. --------------qHOlhnsgBWSRmGgnq7axsxtT Content-Type: text/plain; charset=UTF-8; name="readonly-fe-v3.patch" Content-Disposition: attachment; filename="readonly-fe-v3.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jL2MtcGFyc2VyLmNjIGIvZ2NjL2MvYy1wYXJzZXIuY2MKaW5k ZXggNTNlOTlhYTI5ZDkuLjAwZjhiZjQzNzZlIDEwMDY0NAotLS0gYS9nY2MvYy9jLXBhcnNl ci5jYworKysgYi9nY2MvYy9jLXBhcnNlci5jYwpAQCAtMTU2MjcsNyArMTU2MjcsMTEgQEAg Y19wYXJzZXJfb21wX3Zhcl9saXN0X3BhcmVucyAoY19wYXJzZXIgKnBhcnNlciwgZW51bSBv bXBfY2xhdXNlX2NvZGUga2luZCwKICAgIE9wZW5BQ0MgMi42OgogICAgbm9fY3JlYXRlICgg dmFyaWFibGUtbGlzdCApCiAgICBhdHRhY2ggKCB2YXJpYWJsZS1saXN0ICkKLSAgIGRldGFj aCAoIHZhcmlhYmxlLWxpc3QgKSAqLworICAgZGV0YWNoICggdmFyaWFibGUtbGlzdCApCisK KyAgIE9wZW5BQ0MgMi43OgorICAgY29weWluIChyZWFkb25seSA6IHZhcmlhYmxlLWxpc3Qg KQorICovCiAKIHN0YXRpYyB0cmVlCiBjX3BhcnNlcl9vYWNjX2RhdGFfY2xhdXNlIChjX3Bh cnNlciAqcGFyc2VyLCBwcmFnbWFfb21wX2NsYXVzZSBjX2tpbmQsCkBAIC0xNTY4MCwxMSAr MTU2ODQsMzcgQEAgY19wYXJzZXJfb2FjY19kYXRhX2NsYXVzZSAoY19wYXJzZXIgKnBhcnNl ciwgcHJhZ21hX29tcF9jbGF1c2UgY19raW5kLAogICAgIGRlZmF1bHQ6CiAgICAgICBnY2Nf dW5yZWFjaGFibGUgKCk7CiAgICAgfQotICB0cmVlIG5sLCBjOwotICBubCA9IGNfcGFyc2Vy X29tcF92YXJfbGlzdF9wYXJlbnMgKHBhcnNlciwgT01QX0NMQVVTRV9NQVAsIGxpc3QsIGZh bHNlKTsKIAotICBmb3IgKGMgPSBubDsgYyAhPSBsaXN0OyBjID0gT01QX0NMQVVTRV9DSEFJ TiAoYykpCi0gICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMsIGtpbmQpOworICB0cmVl IG5sID0gbGlzdDsKKyAgYm9vbCByZWFkb25seSA9IGZhbHNlOworICBsb2NhdGlvbl90IG9w ZW5fbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247CisgIG1h dGNoaW5nX3BhcmVucyBwYXJlbnM7CisgIGlmIChwYXJlbnMucmVxdWlyZV9vcGVuIChwYXJz ZXIpKQorICAgIHsKKyAgICAgIC8qIFR1cm4gb24gcmVhZG9ubHkgbW9kaWZpZXIgcGFyc2lu ZyBmb3IgY29weWluIGNsYXVzZS4gICovCisgICAgICBpZiAoY19raW5kID09IFBSQUdNQV9P QUNDX0NMQVVTRV9DT1BZSU4pCisJeworCSAgY190b2tlbiAqdG9rZW4gPSBjX3BhcnNlcl9w ZWVrX3Rva2VuIChwYXJzZXIpOworCSAgaWYgKHRva2VuLT50eXBlID09IENQUF9OQU1FCisJ ICAgICAgJiYgIXN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSICh0b2tlbi0+dmFsdWUpLCAi cmVhZG9ubHkiKQorCSAgICAgICYmIGNfcGFyc2VyX3BlZWtfMm5kX3Rva2VuIChwYXJzZXIp LT50eXBlID09IENQUF9DT0xPTikKKwkgICAgeworCSAgICAgIGNfcGFyc2VyX2NvbnN1bWVf dG9rZW4gKHBhcnNlcik7CisJICAgICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy KTsKKwkgICAgICByZWFkb25seSA9IHRydWU7CisJICAgIH0KKwl9CisgICAgICBubCA9IGNf cGFyc2VyX29tcF92YXJpYWJsZV9saXN0IChwYXJzZXIsIG9wZW5fbG9jLCBPTVBfQ0xBVVNF X01BUCwgbGlzdCwKKwkJCQkgICAgICAgZmFsc2UpOworICAgICAgcGFyZW5zLnNraXBfdW50 aWxfZm91bmRfY2xvc2UgKHBhcnNlcik7CisgICAgfQorCisgIGZvciAodHJlZSBjID0gbmw7 IGMgIT0gbGlzdDsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQorICAgIHsKKyAgICAgIE9N UF9DTEFVU0VfU0VUX01BUF9LSU5EIChjLCBraW5kKTsKKyAgICAgIGlmIChyZWFkb25seSkK KwlPTVBfQ0xBVVNFX01BUF9SRUFET05MWSAoYykgPSAxOworICAgIH0KIAogICByZXR1cm4g bmw7CiB9CkBAIC0xOTgyMSwxNSArMTk4NTEsMzkgQEAgY19wYXJzZXJfb21wX3N0cnVjdHVy ZWRfYmxvY2sgKGNfcGFyc2VyICpwYXJzZXIsIGJvb2wgKmlmX3ApCiAvKiBPcGVuQUNDIDIu MDoKICAgICMgcHJhZ21hIGFjYyBjYWNoZSAodmFyaWFibGUtbGlzdCkgbmV3LWxpbmUKIAor ICAgT3BlbkFDQyAyLjc6CisgICAjIHByYWdtYSBhY2MgY2FjaGUgKHJlYWRvbmx5OiB2YXJp YWJsZS1saXN0KSBuZXctbGluZQorCiAgICBMT0MgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSAj cHJhZ21hIHRva2VuLgogKi8KIAogc3RhdGljIHRyZWUKIGNfcGFyc2VyX29hY2NfY2FjaGUg KGxvY2F0aW9uX3QgbG9jLCBjX3BhcnNlciAqcGFyc2VyKQogewotICB0cmVlIHN0bXQsIGNs YXVzZXM7CisgIHRyZWUgc3RtdCwgY2xhdXNlcyA9IE5VTExfVFJFRTsKKyAgYm9vbCByZWFk b25seSA9IGZhbHNlOworICBsb2NhdGlvbl90IG9wZW5fbG9jID0gY19wYXJzZXJfcGVla190 b2tlbiAocGFyc2VyKS0+bG9jYXRpb247CisgIG1hdGNoaW5nX3BhcmVucyBwYXJlbnM7Cisg IGlmIChwYXJlbnMucmVxdWlyZV9vcGVuIChwYXJzZXIpKQorICAgIHsKKyAgICAgIGNfdG9r ZW4gKnRva2VuID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsKKyAgICAgIGlmICh0 b2tlbi0+dHlwZSA9PSBDUFBfTkFNRQorCSAgJiYgIXN0cmNtcCAoSURFTlRJRklFUl9QT0lO VEVSICh0b2tlbi0+dmFsdWUpLCAicmVhZG9ubHkiKQorCSAgJiYgY19wYXJzZXJfcGVla18y bmRfdG9rZW4gKHBhcnNlciktPnR5cGUgPT0gQ1BQX0NPTE9OKQorCXsKKwkgIGNfcGFyc2Vy X2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChw YXJzZXIpOworCSAgcmVhZG9ubHkgPSB0cnVlOworCX0KKyAgICAgIGNsYXVzZXMgPSBjX3Bh cnNlcl9vbXBfdmFyaWFibGVfbGlzdCAocGFyc2VyLCBvcGVuX2xvYywKKwkJCQkJICAgIE9N UF9DTEFVU0VfX0NBQ0hFXywgTlVMTF9UUkVFKTsKKyAgICAgIHBhcmVucy5za2lwX3VudGls X2ZvdW5kX2Nsb3NlIChwYXJzZXIpOworICAgIH0KKworICBpZiAocmVhZG9ubHkpCisgICAg Zm9yICh0cmVlIGMgPSBjbGF1c2VzOyBjOyBjID0gT01QX0NMQVVTRV9DSEFJTiAoYykpCisg ICAgICBPTVBfQ0xBVVNFX19DQUNIRV9fUkVBRE9OTFkgKGMpID0gMTsKIAotICBjbGF1c2Vz ID0gY19wYXJzZXJfb21wX3Zhcl9saXN0X3BhcmVucyAocGFyc2VyLCBPTVBfQ0xBVVNFX19D QUNIRV8sIE5VTEwpOwogICBjbGF1c2VzID0gY19maW5pc2hfb21wX2NsYXVzZXMgKGNsYXVz ZXMsIENfT1JUX0FDQyk7CiAKICAgY19wYXJzZXJfc2tpcF90b19wcmFnbWFfZW9sIChwYXJz ZXIpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3BhcnNlci5jYyBiL2djYy9jcC9wYXJzZXIuY2MK aW5kZXggZTMyYWNmYzMwYTIuLjRmZTI3ZmIwN2IyIDEwMDY0NAotLS0gYS9nY2MvY3AvcGFy c2VyLmNjCisrKyBiL2djYy9jcC9wYXJzZXIuY2MKQEAgLTM4NTQ0LDcgKzM4NTQ0LDExIEBA IGNwX3BhcnNlcl9vbXBfdmFyX2xpc3QgKGNwX3BhcnNlciAqcGFyc2VyLCBlbnVtIG9tcF9j bGF1c2VfY29kZSBraW5kLCB0cmVlIGxpc3QsCiAgICBPcGVuQUNDIDIuNjoKICAgIG5vX2Ny ZWF0ZSAoIHZhcmlhYmxlLWxpc3QgKQogICAgYXR0YWNoICggdmFyaWFibGUtbGlzdCApCi0g ICBkZXRhY2ggKCB2YXJpYWJsZS1saXN0ICkgKi8KKyAgIGRldGFjaCAoIHZhcmlhYmxlLWxp c3QgKQorCisgICBPcGVuQUNDIDIuNzoKKyAgIGNvcHlpbiAocmVhZG9ubHkgOiB2YXJpYWJs ZS1saXN0ICkKKyAqLwogCiBzdGF0aWMgdHJlZQogY3BfcGFyc2VyX29hY2NfZGF0YV9jbGF1 c2UgKGNwX3BhcnNlciAqcGFyc2VyLCBwcmFnbWFfb21wX2NsYXVzZSBjX2tpbmQsCkBAIC0z ODU5NywxMSArMzg2MDEsMzQgQEAgY3BfcGFyc2VyX29hY2NfZGF0YV9jbGF1c2UgKGNwX3Bh cnNlciAqcGFyc2VyLCBwcmFnbWFfb21wX2NsYXVzZSBjX2tpbmQsCiAgICAgZGVmYXVsdDoK ICAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKICAgICB9Ci0gIHRyZWUgbmwsIGM7Ci0gIG5s ID0gY3BfcGFyc2VyX29tcF92YXJfbGlzdCAocGFyc2VyLCBPTVBfQ0xBVVNFX01BUCwgbGlz dCwgZmFsc2UpOwogCi0gIGZvciAoYyA9IG5sOyBjICE9IGxpc3Q7IGMgPSBPTVBfQ0xBVVNF X0NIQUlOIChjKSkKLSAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYywga2luZCk7Cisg IHRyZWUgbmwgPSBsaXN0OworICBib29sIHJlYWRvbmx5ID0gZmFsc2U7CisgIGlmIChjcF9w YXJzZXJfcmVxdWlyZSAocGFyc2VyLCBDUFBfT1BFTl9QQVJFTiwgUlRfT1BFTl9QQVJFTikp CisgICAgeworICAgICAgLyogVHVybiBvbiByZWFkb25seSBtb2RpZmllciBwYXJzaW5nIGZv ciBjb3B5aW4gY2xhdXNlLiAgKi8KKyAgICAgIGlmIChjX2tpbmQgPT0gUFJBR01BX09BQ0Nf Q0xBVVNFX0NPUFlJTikKKwl7CisJICBjcF90b2tlbiAqdG9rZW4gPSBjcF9sZXhlcl9wZWVr X3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkgIGlmICh0b2tlbi0+dHlwZSA9PSBDUFBfTkFN RQorCSAgICAgICYmICFzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAodG9rZW4tPnUudmFs dWUpLCAicmVhZG9ubHkiKQorCSAgICAgICYmIGNwX2xleGVyX3BlZWtfbnRoX3Rva2VuIChw YXJzZXItPmxleGVyLCAyKS0+dHlwZSA9PSBDUFBfQ09MT04pCisJICAgIHsKKwkgICAgICBj cF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkgICAgICBjcF9sZXhl cl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkgICAgICByZWFkb25seSA9IHRy dWU7CisJICAgIH0KKwl9CisgICAgICBubCA9IGNwX3BhcnNlcl9vbXBfdmFyX2xpc3Rfbm9f b3BlbiAocGFyc2VyLCBPTVBfQ0xBVVNFX01BUCwgbGlzdCwgTlVMTCwKKwkJCQkJICAgZmFs c2UpOworICAgIH0KKworICBmb3IgKHRyZWUgYyA9IG5sOyBjICE9IGxpc3Q7IGMgPSBPTVBf Q0xBVVNFX0NIQUlOIChjKSkKKyAgICB7CisgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lO RCAoYywga2luZCk7CisgICAgICBpZiAocmVhZG9ubHkpCisJT01QX0NMQVVTRV9NQVBfUkVB RE9OTFkgKGMpID0gMTsKKyAgICB9CiAKICAgcmV0dXJuIG5sOwogfQpAQCAtNDcxNzgsNiAr NDcyMDUsOSBAQCBjcF9wYXJzZXJfb21wX3RhcmdldCAoY3BfcGFyc2VyICpwYXJzZXIsIGNw X3Rva2VuICpwcmFnbWFfdG9rLAogCiAvKiBPcGVuQUNDIDIuMDoKICAgICMgcHJhZ21hIGFj YyBjYWNoZSAodmFyaWFibGUtbGlzdCkgbmV3LWxpbmUKKworICAgT3BlbkFDQyAyLjc6Cisg ICAjIHByYWdtYSBhY2MgY2FjaGUgKHJlYWRvbmx5OiB2YXJpYWJsZS1saXN0KSBuZXctbGlu ZQogKi8KIAogc3RhdGljIHRyZWUKQEAgLTQ3MTg3LDkgKzQ3MjE3LDI4IEBAIGNwX3BhcnNl cl9vYWNjX2NhY2hlIChjcF9wYXJzZXIgKnBhcnNlciwgY3BfdG9rZW4gKnByYWdtYV90b2sp CiAgICAgIGNsYXVzZXMuICAqLwogICBhdXRvX3N1cHByZXNzX2xvY2F0aW9uX3dyYXBwZXJz IHNlbnRpbmVsOwogCi0gIHRyZWUgc3RtdCwgY2xhdXNlczsKKyAgdHJlZSBzdG10LCBjbGF1 c2VzID0gTlVMTF9UUkVFOworICBib29sIHJlYWRvbmx5ID0gZmFsc2U7CisKKyAgaWYgKGNw X3BhcnNlcl9yZXF1aXJlIChwYXJzZXIsIENQUF9PUEVOX1BBUkVOLCBSVF9PUEVOX1BBUkVO KSkKKyAgICB7CisgICAgICBjcF90b2tlbiAqdG9rZW4gPSBjcF9sZXhlcl9wZWVrX3Rva2Vu IChwYXJzZXItPmxleGVyKTsKKyAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBDUFBfTkFNRQor CSAgJiYgIXN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSICh0b2tlbi0+dS52YWx1ZSksICJy ZWFkb25seSIpCisJICAmJiBjcF9sZXhlcl9wZWVrX250aF90b2tlbiAocGFyc2VyLT5sZXhl ciwgMiktPnR5cGUgPT0gQ1BQX0NPTE9OKQorCXsKKwkgIGNwX2xleGVyX2NvbnN1bWVfdG9r ZW4gKHBhcnNlci0+bGV4ZXIpOworCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy LT5sZXhlcik7CisJICByZWFkb25seSA9IHRydWU7CisJfQorICAgICAgY2xhdXNlcyA9IGNw X3BhcnNlcl9vbXBfdmFyX2xpc3Rfbm9fb3BlbiAocGFyc2VyLCBPTVBfQ0xBVVNFX19DQUNI RV8sCisJCQkJCQlOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgaWYgKHJlYWRvbmx5KQorICAg IGZvciAodHJlZSBjID0gY2xhdXNlczsgYzsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQor ICAgICAgT01QX0NMQVVTRV9fQ0FDSEVfX1JFQURPTkxZIChjKSA9IDE7CiAKLSAgY2xhdXNl cyA9IGNwX3BhcnNlcl9vbXBfdmFyX2xpc3QgKHBhcnNlciwgT01QX0NMQVVTRV9fQ0FDSEVf LCBOVUxMX1RSRUUpOwogICBjbGF1c2VzID0gZmluaXNoX29tcF9jbGF1c2VzIChjbGF1c2Vz LCBDX09SVF9BQ0MpOwogCiAgIGNwX3BhcnNlcl9yZXF1aXJlX3ByYWdtYV9lb2wgKHBhcnNl ciwgY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlcikpOwpkaWZmIC0tZ2l0IGEv Z2NjL2ZvcnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjIGIvZ2NjL2ZvcnRyYW4vZHVtcC1wYXJz ZS10cmVlLmNjCmluZGV4IDdiMTU0ZWIzY2E3Li5kYjg0YjA2Mjg5YiAxMDA2NDQKLS0tIGEv Z2NjL2ZvcnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjCisrKyBiL2djYy9mb3J0cmFuL2R1bXAt cGFyc2UtdHJlZS5jYwpAQCAtMTQwMCw2ICsxNDAwLDkgQEAgc2hvd19vbXBfbmFtZWxpc3Qg KGludCBsaXN0X3R5cGUsIGdmY19vbXBfbmFtZWxpc3QgKm4pCiAJICAgIGZwdXRzICgiKSBB TExPQ0FURSgiLCBkdW1wZmlsZSk7CiAJICBjb250aW51ZTsKIAl9CisgICAgICBpZiAoKGxp c3RfdHlwZSA9PSBPTVBfTElTVF9NQVAgfHwgbGlzdF90eXBlID09IE9NUF9MSVNUX0NBQ0hF KQorCSAgJiYgbi0+dS5tYXAucmVhZG9ubHkpCisJZnB1dHMgKCJyZWFkb25seSwiLCBkdW1w ZmlsZSk7CiAgICAgICBpZiAobGlzdF90eXBlID09IE9NUF9MSVNUX1JFRFVDVElPTikKIAlz d2l0Y2ggKG4tPnUucmVkdWN0aW9uX29wKQogCSAgewpAQCAtMTQ2Nyw3ICsxNDcwLDcgQEAg c2hvd19vbXBfbmFtZWxpc3QgKGludCBsaXN0X3R5cGUsIGdmY19vbXBfbmFtZWxpc3QgKm4p CiAJICBkZWZhdWx0OiBicmVhazsKIAkgIH0KICAgICAgIGVsc2UgaWYgKGxpc3RfdHlwZSA9 PSBPTVBfTElTVF9NQVApCi0Jc3dpdGNoIChuLT51Lm1hcF9vcCkKKwlzd2l0Y2ggKG4tPnUu bWFwLm9wKQogCSAgewogCSAgY2FzZSBPTVBfTUFQX0FMTE9DOiBmcHV0cyAoImFsbG9jOiIs IGR1bXBmaWxlKTsgYnJlYWs7CiAJICBjYXNlIE9NUF9NQVBfVE86IGZwdXRzICgidG86Iiwg ZHVtcGZpbGUpOyBicmVhazsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgg Yi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCmluZGV4IGViYmEyMzM2ZTEyLi4zMmI3OTJmODVm YiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAorKysgYi9nY2MvZm9ydHJh bi9nZm9ydHJhbi5oCkBAIC0xMzYzLDcgKzEzNjMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgZ2Zj X29tcF9uYW1lbGlzdAogICAgIHsKICAgICAgIGdmY19vbXBfcmVkdWN0aW9uX29wIHJlZHVj dGlvbl9vcDsKICAgICAgIGdmY19vbXBfZGVwZW5kX2RvYWNyb3NzX29wIGRlcGVuZF9kb2Fj cm9zc19vcDsKLSAgICAgIGdmY19vbXBfbWFwX29wIG1hcF9vcDsKKyAgICAgIHN0cnVjdAor ICAgICAgICB7CisJICBFTlVNX0JJVEZJRUxEIChnZmNfb21wX21hcF9vcCkgb3A6ODsKKwkg IGJvb2wgcmVhZG9ubHk7CisgICAgICAgIH0gbWFwOwogICAgICAgZ2ZjX2V4cHIgKmFsaWdu OwogICAgICAgc3RydWN0CiAJewpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNj IGIvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjCmluZGV4IDM4ZGU2MDIzOGMwLi41YzQ0ZTY2NmVi OSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFu L29wZW5tcC5jYwpAQCAtMTIxMCw3ICsxMjEwLDcgQEAgZ2ZjX21hdGNoX29tcF9tYXBfY2xh dXNlIChnZmNfb21wX25hbWVsaXN0ICoqbGlzdCwgZ2ZjX29tcF9tYXBfb3AgbWFwX29wLAog ICAgIHsKICAgICAgIGdmY19vbXBfbmFtZWxpc3QgKm47CiAgICAgICBmb3IgKG4gPSAqaGVh ZDsgbjsgbiA9IG4tPm5leHQpCi0Jbi0+dS5tYXBfb3AgPSBtYXBfb3A7CisJbi0+dS5tYXAu b3AgPSBtYXBfb3A7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE1MjQsNyAr MTUyNCw3IEBAIGdmY19tYXRjaF9vbXBfY2xhdXNlX3JlZHVjdGlvbiAoY2hhciBwYywgZ2Zj X29tcF9jbGF1c2VzICpjLCBib29sIG9wZW5hY2MsCiAJICAgIGdmY19vbXBfbmFtZWxpc3Qg KnAgPSBnZmNfZ2V0X29tcF9uYW1lbGlzdCAoKSwgKip0bDsKIAkgICAgcC0+c3ltID0gbi0+ c3ltOwogCSAgICBwLT53aGVyZSA9IHAtPndoZXJlOwotCSAgICBwLT51Lm1hcF9vcCA9IE9N UF9NQVBfQUxXQVlTX1RPRlJPTTsKKwkgICAgcC0+dS5tYXAub3AgPSBPTVBfTUFQX0FMV0FZ U19UT0ZST007CiAKIAkgICAgdGwgPSAmYy0+bGlzdHNbT01QX0xJU1RfTUFQXTsKIAkgICAg d2hpbGUgKCp0bCkKQEAgLTIxODEsMTEgKzIxODEsMjUgQEAgZ2ZjX21hdGNoX29tcF9jbGF1 c2VzIChnZmNfb21wX2NsYXVzZXMgKipjcCwgY29uc3Qgb21wX21hc2sgbWFzaywKIAkgICAg ewogCSAgICAgIGlmIChvcGVuYWNjKQogCQl7Ci0JCSAgaWYgKGdmY19tYXRjaCAoImNvcHlp biAoICIpID09IE1BVENIX1lFUwotCQkgICAgICAmJiBnZmNfbWF0Y2hfb21wX21hcF9jbGF1 c2UgKCZjLT5saXN0c1tPTVBfTElTVF9NQVBdLAotCQkJCQkJICAgT01QX01BUF9UTywgdHJ1 ZSwKLQkJCQkJCSAgIGFsbG93X2Rlcml2ZWQpKQotCQkgICAgY29udGludWU7CisJCSAgaWYg KGdmY19tYXRjaCAoImNvcHlpbiAoICIpID09IE1BVENIX1lFUykKKwkJICAgIHsKKwkJICAg ICAgYm9vbCByZWFkb25seSA9IGdmY19tYXRjaCAoInJlYWRvbmx5IDogIikgPT0gTUFUQ0hf WUVTOworCQkgICAgICBoZWFkID0gTlVMTDsKKwkJICAgICAgaWYgKGdmY19tYXRjaF9vbXBf dmFyaWFibGVfbGlzdCAoIiIsCisJCQkJCQkgICAgICAgJmMtPmxpc3RzW09NUF9MSVNUX01B UF0sCisJCQkJCQkgICAgICAgdHJ1ZSwgTlVMTCwgJmhlYWQsIHRydWUsCisJCQkJCQkgICAg ICAgYWxsb3dfZGVyaXZlZCkKKwkJCSAgPT0gTUFUQ0hfWUVTKQorCQkJeworCQkJICBnZmNf b21wX25hbWVsaXN0ICpuOworCQkJICBmb3IgKG4gPSAqaGVhZDsgbjsgbiA9IG4tPm5leHQp CisJCQkgICAgeworCQkJICAgICAgbi0+dS5tYXAub3AgPSBPTVBfTUFQX1RPOworCQkJICAg ICAgbi0+dS5tYXAucmVhZG9ubHkgPSByZWFkb25seTsKKwkJCSAgICB9CisJCQkgIGNvbnRp bnVlOworCQkJfQorCQkgICAgfQogCQl9CiAJICAgICAgZWxzZSBpZiAoZ2ZjX21hdGNoX29t cF92YXJpYWJsZV9saXN0ICgiY29weWluICgiLAogCQkJCQkJICAgICZjLT5saXN0c1tPTVBf TElTVF9DT1BZSU5dLApAQCAtMzEzNCw3ICszMTQ4LDcgQEAgZ2ZjX21hdGNoX29tcF9jbGF1 c2VzIChnZmNfb21wX2NsYXVzZXMgKipjcCwgY29uc3Qgb21wX21hc2sgbWFzaywKIAkJewog CQkgIGdmY19vbXBfbmFtZWxpc3QgKm47CiAJCSAgZm9yIChuID0gKmhlYWQ7IG47IG4gPSBu LT5uZXh0KQotCQkgICAgbi0+dS5tYXBfb3AgPSBtYXBfb3A7CisJCSAgICBuLT51Lm1hcC5v cCA9IG1hcF9vcDsKIAkJICBjb250aW51ZTsKIAkJfQogCSAgICAgIGdmY19jdXJyZW50X2xv Y3VzID0gb2xkX2xvYzsKQEAgLTQwMDIsNyArNDAxNiw3IEBAIGdmY19tYXRjaF9vYWNjX2Rl Y2xhcmUgKHZvaWQpCiAgICAgICBpZiAoZ2ZjX2N1cnJlbnRfbnMtPnByb2NfbmFtZQogCSAg JiYgZ2ZjX2N1cnJlbnRfbnMtPnByb2NfbmFtZS0+YXR0ci5mbGF2b3IgPT0gRkxfTU9EVUxF KQogCXsKLQkgIGlmIChuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX0FMTE9DICYmIG4tPnUubWFw X29wICE9IE9NUF9NQVBfVE8pCisJICBpZiAobi0+dS5tYXAub3AgIT0gT01QX01BUF9BTExP QyAmJiBuLT51Lm1hcC5vcCAhPSBPTVBfTUFQX1RPKQogCSAgICB7CiAJICAgICAgZ2ZjX2Vy cm9yICgiSW52YWxpZCBjbGF1c2UgaW4gbW9kdWxlIHdpdGggISRBQ0MgREVDTEFSRSBhdCAl TCIsCiAJCQkgJndoZXJlKTsKQEAgLTQwMzYsNyArNDA1MCw3IEBAIGdmY19tYXRjaF9vYWNj X2RlY2xhcmUgKHZvaWQpCiAJICByZXR1cm4gTUFUQ0hfRVJST1I7CiAJfQogCi0gICAgICBz d2l0Y2ggKG4tPnUubWFwX29wKQorICAgICAgc3dpdGNoIChuLT51Lm1hcC5vcCkKIAl7CiAJ ICBjYXNlIE9NUF9NQVBfRk9SQ0VfQUxMT0M6CiAJICBjYXNlIE9NUF9NQVBfQUxMT0M6CkBA IC00MTUxLDIxICs0MTY1LDM2IEBAIGdmY19tYXRjaF9vYWNjX3dhaXQgKHZvaWQpCiBtYXRj aAogZ2ZjX21hdGNoX29hY2NfY2FjaGUgKHZvaWQpCiB7CisgIGJvb2wgcmVhZG9ubHkgPSBm YWxzZTsKICAgZ2ZjX29tcF9jbGF1c2VzICpjID0gZ2ZjX2dldF9vbXBfY2xhdXNlcyAoKTsK ICAgLyogVGhlIE9wZW5BQ0MgY2FjaGUgZGlyZWN0aXZlIGV4cGxpY2l0bHkgb25seSBhbGxv d3MgImFycmF5IGVsZW1lbnRzIG9yCiAgICAgIHN1YmFycmF5cyIsIHdoaWNoIHdlJ3JlIGN1 cnJlbnRseSBub3QgY2hlY2tpbmcgaGVyZS4gIEVpdGhlciBjaGVjayB0aGlzCiAgICAgIGFm dGVyIHRoZSBjYWxsIG9mIGdmY19tYXRjaF9vbXBfdmFyaWFibGVfbGlzdCwgb3IgYWRkIHNv bWV0aGluZyBsaWtlIGEKICAgICAgb25seV9zZWN0aW9ucyB2YXJpYW50IG5leHQgdG8gaXRz IGFsbG93X3NlY3Rpb25zIHBhcmFtZXRlci4gICovCi0gIG1hdGNoIG0gPSBnZmNfbWF0Y2hf b21wX3ZhcmlhYmxlX2xpc3QgKCIgKCIsCi0JCQkJCSAmYy0+bGlzdHNbT01QX0xJU1RfQ0FD SEVdLCB0cnVlLAotCQkJCQkgTlVMTCwgTlVMTCwgdHJ1ZSk7CisgIG1hdGNoIG0gPSBnZmNf bWF0Y2ggKCIgKCAiKTsKICAgaWYgKG0gIT0gTUFUQ0hfWUVTKQogICAgIHsKICAgICAgIGdm Y19mcmVlX29tcF9jbGF1c2VzKGMpOwogICAgICAgcmV0dXJuIG07CiAgICAgfQogCi0gIGlm IChnZmNfY3VycmVudF9zdGF0ZSgpICE9IENPTVBfRE8gCisgIGlmIChnZmNfbWF0Y2ggKCJy ZWFkb25seSA6ICIpID09IE1BVENIX1lFUykKKyAgICByZWFkb25seSA9IHRydWU7CisKKyAg Z2ZjX29tcF9uYW1lbGlzdCAqKmhlYWQgPSBOVUxMOworICBtID0gZ2ZjX21hdGNoX29tcF92 YXJpYWJsZV9saXN0ICgiIiwgJmMtPmxpc3RzW09NUF9MSVNUX0NBQ0hFXSwgdHJ1ZSwKKwkJ CQkgICBOVUxMLCAmaGVhZCwgdHJ1ZSk7CisgIGlmIChtICE9IE1BVENIX1lFUykKKyAgICB7 CisgICAgICBnZmNfZnJlZV9vbXBfY2xhdXNlcyhjKTsKKyAgICAgIHJldHVybiBtOworICAg IH0KKworICBpZiAocmVhZG9ubHkpCisgICAgZm9yIChnZmNfb21wX25hbWVsaXN0ICpuID0g KmhlYWQ7IG47IG4gPSBuLT5uZXh0KQorICAgICAgbi0+dS5tYXAucmVhZG9ubHkgPSB0cnVl OworCisgIGlmIChnZmNfY3VycmVudF9zdGF0ZSgpICE9IENPTVBfRE8KICAgICAgICYmIGdm Y19jdXJyZW50X3N0YXRlKCkgIT0gQ09NUF9ET19DT05DVVJSRU5UKQogICAgIHsKICAgICAg IGdmY19lcnJvciAoIkFDQyBDQUNIRSBkaXJlY3RpdmUgbXVzdCBiZSBpbnNpZGUgb2YgbG9v cCAlQyIpOwpAQCAtODQzNiw4ICs4NDY1LDggQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2Zj X2NvZGUgKmNvZGUsIGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJCSAgfQogCQlp ZiAob3BlbmFjYwogCQkgICAgJiYgbGlzdCA9PSBPTVBfTElTVF9NQVAKLQkJICAgICYmIChu LT51Lm1hcF9vcCA9PSBPTVBfTUFQX0FUVEFDSAotCQkJfHwgbi0+dS5tYXBfb3AgPT0gT01Q X01BUF9ERVRBQ0gpKQorCQkgICAgJiYgKG4tPnUubWFwLm9wID09IE9NUF9NQVBfQVRUQUNI CisJCQl8fCBuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFVEFDSCkpCiAJCSAgewogCQkgICAg c3ltYm9sX2F0dHJpYnV0ZSBhdHRyOwogCQkgICAgaWYgKG4tPmV4cHIpCkBAIC04NDQ3LDcg Kzg0NzYsNyBAQCByZXNvbHZlX29tcF9jbGF1c2VzIChnZmNfY29kZSAqY29kZSwgZ2ZjX29t cF9jbGF1c2VzICpvbXBfY2xhdXNlcywKIAkJICAgIGlmICghYXR0ci5wb2ludGVyICYmICFh dHRyLmFsbG9jYXRhYmxlKQogCQkgICAgICBnZmNfZXJyb3IgKCIlcXMgY2xhdXNlIGFyZ3Vt ZW50IG11c3QgYmUgQUxMT0NBVEFCTEUgb3IgIgogCQkJCSAiYSBQT0lOVEVSIGF0ICVMIiwK LQkJCQkgKG4tPnUubWFwX29wID09IE9NUF9NQVBfQVRUQUNIKSA/ICJhdHRhY2giCisJCQkJ IChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0FUVEFDSCkgPyAiYXR0YWNoIgogCQkJCSA6ICJk ZXRhY2giLCAmbi0+d2hlcmUpOwogCQkgIH0KIAkJaWYgKGxhc3RyZWYKQEAgLTg1MTgsNyAr ODU0Nyw3IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLCBnZmNfb21w X2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQllbHNlIGlmIChvcGVuYWNjKQogCQkgIHsKIAkJ ICAgIGlmIChsaXN0ID09IE9NUF9MSVNUX01BUAotCQkJJiYgbi0+dS5tYXBfb3AgPT0gT01Q X01BUF9GT1JDRV9ERVZJQ0VQVFIpCisJCQkmJiBuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0ZP UkNFX0RFVklDRVBUUikKIAkJICAgICAgcmVzb2x2ZV9vYWNjX2RldmljZXB0cl9jbGF1c2Ug KG4tPnN5bSwgbi0+d2hlcmUsIG5hbWUpOwogCQkgICAgZWxzZQogCQkgICAgICByZXNvbHZl X29hY2NfZGF0YV9jbGF1c2VzIChuLT5zeW0sIG4tPndoZXJlLCBuYW1lKTsKQEAgLTg1NDAs NyArODU2OSw3IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLCBnZmNf b21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkgICAgewogCQkgICAgY2FzZSBFWEVDX09N UF9UQVJHRVQ6CiAJCSAgICBjYXNlIEVYRUNfT01QX1RBUkdFVF9EQVRBOgotCQkgICAgICBz d2l0Y2ggKG4tPnUubWFwX29wKQorCQkgICAgICBzd2l0Y2ggKG4tPnUubWFwLm9wKQogCQkJ ewogCQkJY2FzZSBPTVBfTUFQX1RPOgogCQkJY2FzZSBPTVBfTUFQX0FMV0FZU19UTzoKQEAg LTg1NjcsNyArODU5Niw3IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2Rl LCBnZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkJfQogCQkgICAgICBicmVhazsK IAkJICAgIGNhc2UgRVhFQ19PTVBfVEFSR0VUX0VOVEVSX0RBVEE6Ci0JCSAgICAgIHN3aXRj aCAobi0+dS5tYXBfb3ApCisJCSAgICAgIHN3aXRjaCAobi0+dS5tYXAub3ApCiAJCQl7CiAJ CQljYXNlIE9NUF9NQVBfVE86CiAJCQljYXNlIE9NUF9NQVBfQUxXQVlTX1RPOgpAQCAtODU3 NywxNiArODYwNiwxNiBAQCByZXNvbHZlX29tcF9jbGF1c2VzIChnZmNfY29kZSAqY29kZSwg Z2ZjX29tcF9jbGF1c2VzICpvbXBfY2xhdXNlcywKIAkJCWNhc2UgT01QX01BUF9QUkVTRU5U X0FMTE9DOgogCQkJICBicmVhazsKIAkJCWNhc2UgT01QX01BUF9UT0ZST006Ci0JCQkgIG4t PnUubWFwX29wID0gT01QX01BUF9UTzsKKwkJCSAgbi0+dS5tYXAub3AgPSBPTVBfTUFQX1RP OwogCQkJICBicmVhazsKIAkJCWNhc2UgT01QX01BUF9BTFdBWVNfVE9GUk9NOgotCQkJICBu LT51Lm1hcF9vcCA9IE9NUF9NQVBfQUxXQVlTX1RPOworCQkJICBuLT51Lm1hcC5vcCA9IE9N UF9NQVBfQUxXQVlTX1RPOwogCQkJICBicmVhazsKIAkJCWNhc2UgT01QX01BUF9QUkVTRU5U X1RPRlJPTToKLQkJCSAgbi0+dS5tYXBfb3AgPSBPTVBfTUFQX1BSRVNFTlRfVE87CisJCQkg IG4tPnUubWFwLm9wID0gT01QX01BUF9QUkVTRU5UX1RPOwogCQkJICBicmVhazsKIAkJCWNh c2UgT01QX01BUF9BTFdBWVNfUFJFU0VOVF9UT0ZST006Ci0JCQkgIG4tPnUubWFwX29wID0g T01QX01BUF9BTFdBWVNfUFJFU0VOVF9UTzsKKwkJCSAgbi0+dS5tYXAub3AgPSBPTVBfTUFQ X0FMV0FZU19QUkVTRU5UX1RPOwogCQkJICBicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkgIGdm Y19lcnJvciAoIlRBUkdFVCBFTlRFUiBEQVRBIHdpdGggbWFwLXR5cGUgb3RoZXIgIgpAQCAt ODU5Niw3ICs4NjI1LDcgQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2ZjX2NvZGUgKmNvZGUs IGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJCQl9CiAJCSAgICAgIGJyZWFrOwog CQkgICAgY2FzZSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBOgotCQkgICAgICBzd2l0Y2gg KG4tPnUubWFwX29wKQorCQkgICAgICBzd2l0Y2ggKG4tPnUubWFwLm9wKQogCQkJewogCQkJ Y2FzZSBPTVBfTUFQX0ZST006CiAJCQljYXNlIE9NUF9NQVBfQUxXQVlTX0ZST006CkBAIC04 NjA2LDE2ICs4NjM1LDE2IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2Rl LCBnZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCQkJY2FzZSBPTVBfTUFQX0RFTEVU RToKIAkJCSAgYnJlYWs7CiAJCQljYXNlIE9NUF9NQVBfVE9GUk9NOgotCQkJICBuLT51Lm1h cF9vcCA9IE9NUF9NQVBfRlJPTTsKKwkJCSAgbi0+dS5tYXAub3AgPSBPTVBfTUFQX0ZST007 CiAJCQkgIGJyZWFrOwogCQkJY2FzZSBPTVBfTUFQX0FMV0FZU19UT0ZST006Ci0JCQkgIG4t PnUubWFwX29wID0gT01QX01BUF9BTFdBWVNfRlJPTTsKKwkJCSAgbi0+dS5tYXAub3AgPSBP TVBfTUFQX0FMV0FZU19GUk9NOwogCQkJICBicmVhazsKIAkJCWNhc2UgT01QX01BUF9QUkVT RU5UX1RPRlJPTToKLQkJCSAgbi0+dS5tYXBfb3AgPSBPTVBfTUFQX1BSRVNFTlRfRlJPTTsK KwkJCSAgbi0+dS5tYXAub3AgPSBPTVBfTUFQX1BSRVNFTlRfRlJPTTsKIAkJCSAgYnJlYWs7 CiAJCQljYXNlIE9NUF9NQVBfQUxXQVlTX1BSRVNFTlRfVE9GUk9NOgotCQkJICBuLT51Lm1h cF9vcCA9IE9NUF9NQVBfQUxXQVlTX1BSRVNFTlRfRlJPTTsKKwkJCSAgbi0+dS5tYXAub3Ag PSBPTVBfTUFQX0FMV0FZU19QUkVTRU5UX0ZST007CiAJCQkgIGJyZWFrOwogCQkJZGVmYXVs dDoKIAkJCSAgZ2ZjX2Vycm9yICgiVEFSR0VUIEVYSVQgREFUQSB3aXRoIG1hcC10eXBlIG90 aGVyICIKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MgYi9nY2MvZm9y dHJhbi90cmFucy1kZWNsLmNjCmluZGV4IDZkNDYzMDM2OTY2Li5iN2RlYTExNDYxZiAxMDA2 NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5jYworKysgYi9nY2MvZm9ydHJhbi90 cmFucy1kZWNsLmNjCkBAIC02NzQ0LDcgKzY3NDQsNyBAQCBhZGRfY2xhdXNlIChnZmNfc3lt Ym9sICpzeW0sIGdmY19vbXBfbWFwX29wIG1hcF9vcCkKIAogICBuID0gZ2ZjX2dldF9vbXBf bmFtZWxpc3QgKCk7CiAgIG4tPnN5bSA9IHN5bTsKLSAgbi0+dS5tYXBfb3AgPSBtYXBfb3A7 CisgIG4tPnUubWFwLm9wID0gbWFwX29wOwogCiAgIGlmICghbW9kdWxlX29hY2NfY2xhdXNl cykKICAgICBtb2R1bGVfb2FjY19jbGF1c2VzID0gZ2ZjX2dldF9vbXBfY2xhdXNlcyAoKTsK QEAgLTY4NDYsMTAgKzY4NDYsMTAgQEAgZmluaXNoX29hY2NfZGVjbGFyZSAoZ2ZjX25hbWVz cGFjZSAqbnMsIGdmY19zeW1ib2wgKnN5bSwgYm9vbCBibG9jaykKIAogICBmb3IgKG4gPSBv bXBfY2xhdXNlcy0+bGlzdHNbT01QX0xJU1RfTUFQXTsgbjsgbiA9IG4tPm5leHQpCiAgICAg ewotICAgICAgc3dpdGNoIChuLT51Lm1hcF9vcCkKKyAgICAgIHN3aXRjaCAobi0+dS5tYXAu b3ApCiAJewogCSAgY2FzZSBPTVBfTUFQX0RFVklDRV9SRVNJREVOVDoKLQkgICAgbi0+dS5t YXBfb3AgPSBPTVBfTUFQX0ZPUkNFX0FMTE9DOworCSAgICBuLT51Lm1hcC5vcCA9IE9NUF9N QVBfRk9SQ0VfQUxMT0M7CiAJICAgIGJyZWFrOwogCiAJICBkZWZhdWx0OgpkaWZmIC0tZ2l0 IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Bl bm1wLmNjCmluZGV4IGEyYmYxNTY2NWIzLi5mYTFiZmQ0MTM4MCAxMDA2NDQKLS0tIGEvZ2Nj L2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5t cC5jYwpAQCAtMzEzOSw3ICszMTM5LDEwIEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3Rt dGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICAgIHx8 IChuLT5leHByICYmIGdmY19leHByX2F0dHIgKG4tPmV4cHIpLnBvaW50ZXIpKSkKIAkJYWx3 YXlzX21vZGlmaWVyID0gdHJ1ZTsKIAotCSAgICAgIHN3aXRjaCAobi0+dS5tYXBfb3ApCisJ ICAgICAgaWYgKG4tPnUubWFwLnJlYWRvbmx5KQorCQlPTVBfQ0xBVVNFX01BUF9SRUFET05M WSAobm9kZSkgPSAxOworCisJICAgICAgc3dpdGNoIChuLT51Lm1hcC5vcCkKIAkJewogCQlj YXNlIE9NUF9NQVBfQUxMT0M6CiAJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUs IEdPTVBfTUFQX0FMTE9DKTsKQEAgLTMyNjYsOCArMzI2OSw4IEBAIGdmY190cmFuc19vbXBf Y2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMs CiAJCSAgICAgICYmIG4tPnN5bS0+YXR0ci5vbXBfZGVjbGFyZV90YXJnZXQKIAkJICAgICAg JiYgKGFsd2F5c19tb2RpZmllciB8fCBuLT5zeW0tPmF0dHIucG9pbnRlcikKIAkJICAgICAg JiYgb3AgIT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQotCQkgICAgICAmJiBuLT51Lm1h cF9vcCAhPSBPTVBfTUFQX0RFTEVURQotCQkgICAgICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBf TUFQX1JFTEVBU0UpCisJCSAgICAgICYmIG4tPnUubWFwLm9wICE9IE9NUF9NQVBfREVMRVRF CisJCSAgICAgICYmIG4tPnUubWFwLm9wICE9IE9NUF9NQVBfUkVMRUFTRSkKIAkJICAgIHsK IAkJICAgICAgZ2NjX2Fzc2VydCAobi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2wpOwog CQkgICAgICBub2RlNSA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLCBPTVBf Q0xBVVNFX01BUCk7CkBAIC0zMzMzLDcgKzMzMzYsNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVz ZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJ ewogCQkJICBlbnVtIGdvbXBfbWFwX2tpbmQgZ21rID0gR09NUF9NQVBfUE9JTlRFUjsKIAkJ CSAgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEKLQkJCSAgICAgICYmIG4t PnUubWFwX29wID09IE9NUF9NQVBfREVMRVRFKQorCQkJICAgICAgJiYgbi0+dS5tYXAub3Ag PT0gT01QX01BUF9ERUxFVEUpCiAJCQkgICAgZ21rID0gR09NUF9NQVBfREVMRVRFOwogCQkJ ICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBKQogCQkJICAgIGdt ayA9IEdPTVBfTUFQX1JFTEVBU0U7CkBAIC0zMzU2LDcgKzMzNTksNyBAQCBnZmNfdHJhbnNf b21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1 c2VzLAogCQkJewogCQkJICBlbnVtIGdvbXBfbWFwX2tpbmQgZ21rOwogCQkJICBpZiAob3Ag PT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQotCQkJICAgICAgJiYgbi0+dS5tYXBfb3Ag PT0gT01QX01BUF9ERUxFVEUpCisJCQkgICAgICAmJiBuLT51Lm1hcC5vcCA9PSBPTVBfTUFQ X0RFTEVURSkKIAkJCSAgICBnbWsgPSBHT01QX01BUF9ERUxFVEU7CiAJCQkgIGVsc2UgaWYg KG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEpCiAJCQkgICAgZ21rID0gR09NUF9N QVBfUkVMRUFTRTsKQEAgLTMzODgsMTggKzMzOTEsMTggQEAgZ2ZjX3RyYW5zX29tcF9jbGF1 c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJ ICAgICAgbm9kZTIgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NM QVVTRV9NQVApOwogCQkgICAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUyKSA9IGRlY2w7CiAJ CSAgICAgIE9NUF9DTEFVU0VfU0laRSAobm9kZTIpID0gVFlQRV9TSVpFX1VOSVQgKHR5cGUp OwotCQkgICAgICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxFVEUpCisJCSAgICAg IGlmIChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFTEVURSkKIAkJCW1hcF9raW5kID0gR09N UF9NQVBfREVMRVRFOwogCQkgICAgICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRf RVhJVF9EQVRBCi0JCQkgICAgICAgfHwgbi0+dS5tYXBfb3AgPT0gT01QX01BUF9SRUxFQVNF KQorCQkJICAgICAgIHx8IG4tPnUubWFwLm9wID09IE9NUF9NQVBfUkVMRUFTRSkKIAkJCW1h cF9raW5kID0gR09NUF9NQVBfUkVMRUFTRTsKIAkJICAgICAgZWxzZQogCQkJbWFwX2tpbmQg PSBHT01QX01BUF9UT19QU0VUOwogCQkgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAo bm9kZTIsIG1hcF9raW5kKTsKIAogCQkgICAgICBpZiAob3AgIT0gRVhFQ19PTVBfVEFSR0VU X0VYSVRfREFUQQotCQkJICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX0RFTEVURQotCQkJ ICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX1JFTEVBU0UpCisJCQkgICYmIG4tPnUubWFw Lm9wICE9IE9NUF9NQVBfREVMRVRFCisJCQkgICYmIG4tPnUubWFwLm9wICE9IE9NUF9NQVBf UkVMRUFTRSkKIAkJCXsKIAkJCSAgbm9kZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9s b2NhdGlvbiwKIAkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7CkBAIC0zNDE3LDcgKzM0MjAs NyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29t cF9jbGF1c2VzICpjbGF1c2VzLAogCQkJICAgICAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2Rh dGFfZ2V0IChkZWNsKTsKIAkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlMykgPSBzaXplX2lu dCAoMCk7CiAKLQkJCSAgaWYgKG4tPnUubWFwX29wID09IE9NUF9NQVBfQVRUQUNIKQorCQkJ ICBpZiAobi0+dS5tYXAub3AgPT0gT01QX01BUF9BVFRBQ0gpCiAJCQkgICAgewogCQkJICAg ICAgLyogU3RhbmRhbG9uZSBhdHRhY2ggY2xhdXNlcyB1c2VkIHdpdGggYXJyYXlzIHdpdGgK IAkJCQkgZGVzY3JpcHRvcnMgbXVzdCBjb3B5IHRoZSBkZXNjcmlwdG9yIHRvIHRoZQpAQCAt MzQzMyw3ICszNDM2LDcgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAq YmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICAgIG5vZGUzID0gTlVM TDsKIAkJCSAgICAgIGdvdG8gZmluYWxpemVfbWFwX2NsYXVzZTsKIAkJCSAgICB9Ci0JCQkg IGVsc2UgaWYgKG4tPnUubWFwX29wID09IE9NUF9NQVBfREVUQUNIKQorCQkJICBlbHNlIGlm IChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFVEFDSCkKIAkJCSAgICB7CiAJCQkgICAgICBP TVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMsIEdPTVBfTUFQX0RFVEFDSCk7CiAJCQkg ICAgICAvKiBTaW1pbGFybHkgdG8gYWJvdmUsIHdlIGRvbid0IHdhbnQgdG8gdW5tYXAgUFRS CkBAIC0zNjI2LDggKzM2MjksOCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9j a190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJIHRvIHBlcmZvcm0g YSBzaW5nbGUgYXR0YWNoL2RldGFjaCBvcGVyYXRpb24sIG9mIHRoZQogCQkJIHBvaW50ZXIg aXRzZWxmLCBub3Qgb2YgdGhlIHBvaW50ZWQtdG8gb2JqZWN0LiAgKi8KIAkJICAgICAgaWYg KG9wZW5hY2MKLQkJCSAgJiYgKG4tPnUubWFwX29wID09IE9NUF9NQVBfQVRUQUNICi0JCQkg ICAgICB8fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFVEFDSCkpCisJCQkgICYmIChuLT51 Lm1hcC5vcCA9PSBPTVBfTUFQX0FUVEFDSAorCQkJICAgICAgfHwgbi0+dS5tYXAub3AgPT0g T01QX01BUF9ERVRBQ0gpKQogCQkJewogCQkJICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUpCiAJ CQkgICAgPSBidWlsZF9mb2xkX2FkZHJfZXhwciAoT01QX0NMQVVTRV9ERUNMIChub2RlKSk7 CkBAIC0zNjU2LDcgKzM2NTksNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9j a190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJCQkgICAgICAgc2Uu c3RyaW5nX2xlbmd0aCksCiAJCQkJCSAgIFRZUEVfU0laRV9VTklUICh0bXApKTsKIAkJCSAg Z29tcF9tYXBfa2luZCBraW5kOwotCQkJICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9E RUxFVEUpCisJCQkgIGlmIChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0RFTEVURSkKIAkJCSAg ICBraW5kID0gR09NUF9NQVBfREVMRVRFOwogCQkJICBlbHNlIGlmIChvcCA9PSBFWEVDX09N UF9UQVJHRVRfRVhJVF9EQVRBKQogCQkJICAgIGtpbmQgPSBHT01QX01BUF9SRUxFQVNFOwpA QCAtMzcxMyw4ICszNzE2LDggQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tf dCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICAgdG8gcGVyZm9y bSBhIHNpbmdsZSBhdHRhY2gvZGV0YWNoIG9wZXJhdGlvbiwgb2YgdGhlCiAJCQkgICAgIHBv aW50ZXIgaXRzZWxmLCBub3Qgb2YgdGhlIHBvaW50ZWQtdG8gb2JqZWN0LiAgKi8KIAkJCSAg aWYgKG9wZW5hY2MKLQkJCSAgICAgICYmIChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0FUVEFD SAotCQkJCSAgfHwgbi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERVRBQ0gpKQorCQkJICAgICAg JiYgKG4tPnUubWFwLm9wID09IE9NUF9NQVBfQVRUQUNICisJCQkJICB8fCBuLT51Lm1hcC5v cCA9PSBPTVBfTUFQX0RFVEFDSCkpCiAJCQkgICAgewogCQkJICAgICAgT01QX0NMQVVTRV9E RUNMIChub2RlKQogCQkJCT0gYnVpbGRfZm9sZF9hZGRyX2V4cHIgKGlubmVyKTsKQEAgLTM4 MDYsOCArMzgwOSw4IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJs b2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICB7CiAJCSAgICAgIC8qIEJh cmUgYXR0YWNoIGFuZCBkZXRhY2ggY2xhdXNlcyBkb24ndCB3YW50IGFueQogCQkJIGFkZGl0 aW9uYWwgbm9kZXMuICAqLwotCQkgICAgICBpZiAoKG4tPnUubWFwX29wID09IE9NUF9NQVBf QVRUQUNICi0JCQkgICB8fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFVEFDSCkKKwkJICAg ICAgaWYgKChuLT51Lm1hcC5vcCA9PSBPTVBfTUFQX0FUVEFDSAorCQkJICAgfHwgbi0+dS5t YXAub3AgPT0gT01QX01BUF9ERVRBQ0gpCiAJCQkgICYmIChQT0lOVEVSX1RZUEVfUCAoVFJF RV9UWVBFIChpbm5lcikpCiAJCQkgICAgICB8fCBHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRS RUVfVFlQRSAoaW5uZXIpKSkpCiAJCQl7CkBAIC0zODQwLDggKzM4NDMsOCBAQCBnZmNfdHJh bnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpj bGF1c2VzLAogCQkJICAgIG1hcF9raW5kID0gKChHT01QX01BUF9BTFdBWVNfUCAobWFwX2tp bmQpCiAJCQkJCSB8fCBnZmNfZXhwcl9hdHRyIChuLT5leHByKS5wb2ludGVyKQogCQkJCQk/ IEdPTVBfTUFQX0FMV0FZU19UTyA6IEdPTVBfTUFQX1RPKTsKLQkJCSAgZWxzZSBpZiAobi0+ dS5tYXBfb3AgPT0gT01QX01BUF9SRUxFQVNFCi0JCQkJICAgfHwgbi0+dS5tYXBfb3AgPT0g T01QX01BUF9ERUxFVEUpCisJCQkgIGVsc2UgaWYgKG4tPnUubWFwLm9wID09IE9NUF9NQVBf UkVMRUFTRQorCQkJCSAgIHx8IG4tPnUubWFwLm9wID09IE9NUF9NQVBfREVMRVRFKQogCQkJ ICAgIDsKIAkJCSAgZWxzZSBpZiAob3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQog CQkJCSAgIHx8IG9wID09IEVYRUNfT0FDQ19FWElUX0RBVEEpCkBAIC00MDg4LDYgKzQwOTEs OCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29t cF9jbGF1c2VzICpjbGF1c2VzLAogCQl9CiAJICAgICAgaWYgKG4tPnUucHJlc2VudF9tb2Rp ZmllcikKIAkJT01QX0NMQVVTRV9NT1RJT05fUFJFU0VOVCAobm9kZSkgPSAxOworCSAgICAg IGlmIChsaXN0ID09IE9NUF9MSVNUX0NBQ0hFICYmIG4tPnUubWFwLnJlYWRvbmx5KQorCQlP TVBfQ0xBVVNFX19DQUNIRV9fUkVBRE9OTFkgKG5vZGUpID0gMTsKIAkgICAgICBvbXBfY2xh dXNlcyA9IGdmY190cmFuc19hZGRfY2xhdXNlIChub2RlLCBvbXBfY2xhdXNlcyk7CiAJICAg IH0KIAkgIGJyZWFrOwpAQCAtNjU2MSw3ICs2NTY2LDcgQEAgZ2ZjX2FkZF9jbGF1c2VfaW1w bGljaXRseSAoZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzX291dCwKIAkgIG4yLT53aGVyZSA9 IG4tPndoZXJlOwogCSAgbjItPnN5bSA9IG4tPnN5bTsKIAkgIGlmIChpc190YXJnZXQpCi0J ICAgIG4yLT51Lm1hcF9vcCA9IE9NUF9NQVBfVE9GUk9NOworCSAgICBuMi0+dS5tYXAub3Ag PSBPTVBfTUFQX1RPRlJPTTsKIAkgIGlmICh0YWlsKQogCSAgICB7CiAJICAgICAgdGFpbC0+ bmV4dCA9IG4yOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29h Y2MvcmVhZG9ubHktMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29hY2MvcmVh ZG9ubHktMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNGZj OTJjMjRkNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2dvYWNjL3JlYWRvbmx5LTEuYwpAQCAtMCwwICsxLDU5IEBACisvKiB7IGRnLWFkZGl0aW9u YWwtb3B0aW9ucyAiLWZkdW1wLXRyZWUtb3JpZ2luYWwiIH0gKi8KKworc3RydWN0IFMKK3sK KyAgaW50ICpwdHI7CisgIGZsb2F0IGY7Cit9OworCitpbnQgYVszMl0sIGJbMzJdOworI3By YWdtYSBhY2MgZGVjbGFyZSBjb3B5aW4ocmVhZG9ubHk6IGEpIGNvcHlpbihiKQorCitpbnQg bWFpbiAodm9pZCkKK3sKKyAgaW50IHhbMzJdLCB5WzMyXTsKKyAgc3RydWN0IFMgcyA9IHt4 LCAwfTsKKworICAjcHJhZ21hIGFjYyBwYXJhbGxlbCBjb3B5aW4ocmVhZG9ubHk6IHhbOjMy XSwgcy5wdHJbOjE2XSkgY29weWluKHlbOjMyXSkKKyAgeworICAgICNwcmFnbWEgYWNjIGNh Y2hlIChyZWFkb25seTogeFs6MzJdKQorICAgICNwcmFnbWEgYWNjIGNhY2hlICh5WzozMl0p CisgIH0KKworICAjcHJhZ21hIGFjYyBrZXJuZWxzIGNvcHlpbihyZWFkb25seTogeFs6MzJd LCBzLnB0cls6MTZdKSBjb3B5aW4oeVs6MzJdKQorICB7CisgICAgI3ByYWdtYSBhY2MgY2Fj aGUgKHJlYWRvbmx5OiB4WzozMl0pCisgICAgI3ByYWdtYSBhY2MgY2FjaGUgKHlbOjMyXSkK KyAgfQorCisgICNwcmFnbWEgYWNjIHNlcmlhbCBjb3B5aW4ocmVhZG9ubHk6IHhbOjMyXSwg cy5wdHJbOjE2XSkgY29weWluKHlbOjMyXSkKKyAgeworICAgICNwcmFnbWEgYWNjIGNhY2hl IChyZWFkb25seTogeFs6MzJdKQorICAgICNwcmFnbWEgYWNjIGNhY2hlICh5WzozMl0pCisg IH0KKworICAjcHJhZ21hIGFjYyBkYXRhIGNvcHlpbihyZWFkb25seTogeFs6MzJdLCBzLnB0 cls6MTZdKSBjb3B5aW4oeVs6MzJdKQorICB7CisgICAgI3ByYWdtYSBhY2MgY2FjaGUgKHJl YWRvbmx5OiB4WzozMl0pCisgICAgI3ByYWdtYSBhY2MgY2FjaGUgKHlbOjMyXSkKKyAgfQor CisgICNwcmFnbWEgYWNjIGVudGVyIGRhdGEgY29weWluKHJlYWRvbmx5OiB4WzozMl0sIHMu cHRyWzoxNl0pIGNvcHlpbih5WzozMl0pCisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHBhcmFsbGVs IG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxc KHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBc XChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAi b3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBrZXJuZWxzIG1hcFxcKHRvOnlc XFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRv OlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0 bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsg dGFyZ2V0IHsgYyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIig/bikjcHJhZ21hIGFjYyBzZXJpYWwgbWFwXFwodG86eVxcXFswXFxcXSBcXFxb bGVuOiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86XFwqcy5wdHIgXFxc W2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0g XFxcW2xlbjogXFswLTlcXStcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjIH0g fSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNw cmFnbWEgYWNjIGRhdGEgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xc XF1cXCkgbWFwXFwocmVhZG9ubHksdG86XFwqcy5wdHIgXFxcW2xlbjogXFswLTlcXStcXFxd XFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStc XFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjIH0gfSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGVudGVyIGRh dGEgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwo cmVhZG9ubHksdG86XFwqcy5wdHIgXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxc KHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIiAxICJv cmlnaW5hbCIgeyB0YXJnZXQgeyBjIH0gfSB9IH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgcGFyYWxsZWwgbWFwXFwodG86 eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHks dG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjogXFswLTlcXStcXFxdXFwp IC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxd XFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9IH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mga2VybmVscyBt YXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChy ZWFkb25seSx0bzpcXCpOT05fTFZBTFVFX0VYUFIgPHMucHRyPiBcXFxbbGVuOiBcWzAtOVxd K1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAt OVxdK1xcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMrKyB9IH0gfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBz ZXJpYWwgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisg bWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjog XFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xl bjogXFswLTlcXStcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9IH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdt YSBhY2MgZGF0YSBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxc KSBtYXBcXChyZWFkb25seSx0bzpcXCpOT05fTFZBTFVFX0VYUFIgPHMucHRyPiBcXFxbbGVu OiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxb bGVuOiBcWzAtOVxdK1xcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMrKyB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBlbnRlciBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlc XStcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOlxcKk5PTl9MVkFMVUVfRVhQUiA8cy5wdHI+ IFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBc XFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsg YysrIH0gfSB9IH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIoP24pI3ByYWdtYSBhY2MgY2FjaGUgXFwocmVhZG9ubHk6eFxcXFswXFxcXSBcXFxbbGVu OiBcWzAtOVxdK1xcXF1cXCk7JCIgNCAib3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgY2FjaGUgXFwoeVxc XFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCk7JCIgNCAib3JpZ2luYWwiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9yZWFkb25s eS0xLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVhZG9ubHktMS5m OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY5NmViZDA4MzIx Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9y ZWFkb25seS0xLmY5MApAQCAtMCwwICsxLDg5IEBACishIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItZmR1bXAtdHJlZS1vcmlnaW5hbCIgfQorCitzdWJyb3V0aW5lIGZvbyAoYSwgbikK KyAgaW50ZWdlciA6OiBuLCBhKDopCisgIGludGVnZXIgOjogaSwgYihuKSwgYyhuKQorICAh JGFjYyBwYXJhbGxlbCBjb3B5aW4ocmVhZG9ubHk6IGEoOiksIGIoOm4pKSBjb3B5aW4oYyg6 KSkKKyAgZG8gaSA9IDEsMzIKKyAgICAgISRhY2MgY2FjaGUgKHJlYWRvbmx5OiBhKDopLCBi KDpuKSkKKyAgICAgISRhY2MgY2FjaGUgKGMoOikpCisgIGVuZGRvCisgICEkYWNjIGVuZCBw YXJhbGxlbAorCisgICEkYWNjIGtlcm5lbHMgY29weWluKHJlYWRvbmx5OiBhKDopLCBiKDpu KSkgY29weWluKGMoOikpCisgIGRvIGkgPSAxLDMyCisgICAgICEkYWNjIGNhY2hlIChyZWFk b25seTogYSg6KSwgYig6bikpCisgICAgICEkYWNjIGNhY2hlIChjKDopKQorICBlbmRkbwor ICAhJGFjYyBlbmQga2VybmVscworCisgICEkYWNjIHNlcmlhbCBjb3B5aW4ocmVhZG9ubHk6 IGEoOiksIGIoOm4pKSBjb3B5aW4oYyg6KSkKKyAgZG8gaSA9IDEsMzIKKyAgICAgISRhY2Mg Y2FjaGUgKHJlYWRvbmx5OiBhKDopLCBiKDpuKSkKKyAgICAgISRhY2MgY2FjaGUgKGMoOikp CisgIGVuZGRvCisgICEkYWNjIGVuZCBzZXJpYWwKKworICAhJGFjYyBkYXRhIGNvcHlpbihy ZWFkb25seTogYSg6KSwgYig6bikpIGNvcHlpbihjKDopKQorICBkbyBpID0gMSwzMgorICAg ICAhJGFjYyBjYWNoZSAocmVhZG9ubHk6IGEoOiksIGIoOm4pKQorICAgICAhJGFjYyBjYWNo ZSAoYyg6KSkKKyAgZW5kZG8KKyAgISRhY2MgZW5kIGRhdGEKKworICAhJGFjYyBlbnRlciBk YXRhIGNvcHlpbihyZWFkb25seTogYSg6KSwgYig6bikpIGNvcHlpbihjKDopKQorCitlbmQg c3Vicm91dGluZSBmb28KKworcHJvZ3JhbSBtYWluCisgIGludGVnZXIgOjogZygzMiksIGgo MzIpCisgIGludGVnZXIgOjogaSwgbiA9IDMyLCBhKDMyKQorICBpbnRlZ2VyIDo6IGIoMzIp LCBjKDMyKQorCisgICEkYWNjIGRlY2xhcmUgY29weWluKHJlYWRvbmx5OiBnKSwgY29weWlu KGgpCisKKyAgISRhY2MgcGFyYWxsZWwgY29weWluKHJlYWRvbmx5OiBhKDozMiksIGIoOm4p KSBjb3B5aW4oYyg6KSkKKyAgZG8gaSA9IDEsMzIKKyAgICAgISRhY2MgY2FjaGUgKHJlYWRv bmx5OiBhKDopLCBiKDpuKSkKKyAgICAgISRhY2MgY2FjaGUgKGMoOikpCisgIGVuZGRvCisg ICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIGtlcm5lbHMgY29weWluKHJlYWRvbmx5 OiBhKDopLCBiKDpuKSkgY29weWluKGMoOikpCisgIGRvIGkgPSAxLDMyCisgICAgICEkYWNj IGNhY2hlIChyZWFkb25seTogYSg6KSwgYig6bikpCisgICAgICEkYWNjIGNhY2hlIChjKDop KQorICBlbmRkbworICAhJGFjYyBlbmQga2VybmVscworCisgICEkYWNjIHNlcmlhbCBjb3B5 aW4ocmVhZG9ubHk6IGEoOiksIGIoOm4pKSBjb3B5aW4oYyg6KSkKKyAgZG8gaSA9IDEsMzIK KyAgICAgISRhY2MgY2FjaGUgKHJlYWRvbmx5OiBhKDopLCBiKDpuKSkKKyAgICAgISRhY2Mg Y2FjaGUgKGMoOikpCisgIGVuZGRvCisgICEkYWNjIGVuZCBzZXJpYWwKKworICAhJGFjYyBk YXRhIGNvcHlpbihyZWFkb25seTogYSg6KSwgYig6bikpIGNvcHlpbihjKDopKQorICBkbyBp ID0gMSwzMgorICAgICAhJGFjYyBjYWNoZSAocmVhZG9ubHk6IGEoOiksIGIoOm4pKQorICAg ICAhJGFjYyBjYWNoZSAoYyg6KSkKKyAgZW5kZG8KKyAgISRhY2MgZW5kIGRhdGEKKworICAh JGFjYyBlbnRlciBkYXRhIGNvcHlpbihyZWFkb25seTogYSg6KSwgYig6bikpIGNvcHlpbihj KDopKQorCitlbmQgcHJvZ3JhbSBtYWluCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHksdG86 XFwqLisgbWFwXFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKGFs bG9jOmIuKyBtYXBcXCh0bzpcXCouKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9 IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBh Y2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHksdG86YS4rIG1hcFxcKGFsbG9jOmEuKyBtYXBc XChyZWFkb25seSx0bzpiLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBcXChh bGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mga2VybmVscyBtYXBcXChyZWFkb25seSx0bzpc XCouKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxs b2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0g fQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFj YyBrZXJuZWxzIG1hcFxcKHJlYWRvbmx5LHRvOmEuKyBtYXBcXChhbGxvYzphLisgbWFwXFwo cmVhZG9ubHksdG86Yi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0bzpjLisgbWFwXFwoYWxs b2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHNlcmlhbCBtYXBcXChyZWFkb25seSx0bzpcXCou KyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6 Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQor ISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBz ZXJpYWwgbWFwXFwocmVhZG9ubHksdG86YS4rIG1hcFxcKGFsbG9jOmEuKyBtYXBcXChyZWFk b25seSx0bzpiLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBcXChhbGxvYzpj LisiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICIoP24pI3ByYWdtYSBhY2MgZGF0YSBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBc XChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6Yi4rIG1h cFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1h cFxcKHJlYWRvbmx5LHRvOmEuKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86 Yi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0bzpjLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJv cmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9u KSNwcmFnbWEgYWNjIGVudGVyIGRhdGEgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwo YWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBc XCh0bzpcXCouKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZW50ZXIgZGF0 YSBtYXBcXChyZWFkb25seSx0bzphLisgbWFwXFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5 LHRvOmIuKyBtYXBcXChhbGxvYzpiLisgbWFwXFwodG86Yy4rIG1hcFxcKGFsbG9jOmMuKyIg MSAib3JpZ2luYWwiIH0gfQorCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAiKD9uKSNwcmFnbWEgYWNjIGNhY2hlIFxcKHJlYWRvbmx5OlxcKlxcKGludGVnZXJcXChr aW5kPTRcXClcXFxbMDpcXFxdIFxcKlxcKSBwYXJtLipkYXRhIFxcXFtsZW46IC4rXFxcXVxc KSBcXChyZWFkb25seTpcXCpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxcXSBcXCpc XCkgcGFybS4qZGF0YSBcXFxbbGVuOiAuK1xcXF1cXCk7IiA4ICJvcmlnaW5hbCIgfSB9Cish IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGNh Y2hlIFxcKFxcKlxcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKlxcKSBwYXJt LipkYXRhIFxcXFtsZW46IC4rXFxcXVxcKTsiIDggIm9yaWdpbmFsIiB9IH0KZGlmZiAtLWdp dCBhL2djYy90cmVlLWNvcmUuaCBiL2djYy90cmVlLWNvcmUuaAppbmRleCA4YTg5NDYyYmQ3 ZS4uZDUyOTcxMjMwNmQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWNvcmUuaAorKysgYi9nY2Mv dHJlZS1jb3JlLmgKQEAgLTEzNDQsNiArMTM0NCwxMiBAQCBzdHJ1Y3QgR1RZKCgpKSB0cmVl X2Jhc2UgewogICAgICAgIFRZUEVfUkVBRE9OTFkgaW4KICAgICAgICAgICAgYWxsIHR5cGVz CiAKKyAgICAgICBPTVBfQ0xBVVNFX01BUF9SRUFET05MWSBpbgorICAgICAgICAgICBPTVBf Q0xBVVNFX01BUAorCisgICAgICAgT01QX0NMQVVTRV9fQ0FDSEVfX1JFQURPTkxZIGluCisg ICAgICAgICAgIE9NUF9DTEFVU0VfX0NBQ0hFXworCiAgICBjb25zdGFudF9mbGFnOgogCiAg ICAgICAgVFJFRV9DT05TVEFOVCBpbgpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtcHJldHR5LXBy aW50LmNjIGIvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjCmluZGV4IDY1NGY1MjQ3ZTNhLi45 MjZmN2UwMDZhNyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjCisrKyBi L2djYy90cmVlLXByZXR0eS1wcmludC5jYwpAQCAtOTEzLDYgKzkxMyw4IEBAIGR1bXBfb21w X2NsYXVzZSAocHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIGNsYXVzZSwgaW50IHNwYywgZHVt cF9mbGFnc190IGZsYWdzKQogCiAgICAgY2FzZSBPTVBfQ0xBVVNFX01BUDoKICAgICAgIHBw X3N0cmluZyAocHAsICJtYXAoIik7CisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBfUkVBRE9O TFkgKGNsYXVzZSkpCisJcHBfc3RyaW5nIChwcCwgInJlYWRvbmx5LCIpOwogICAgICAgc3dp dGNoIChPTVBfQ0xBVVNFX01BUF9LSU5EIChjbGF1c2UpKQogCXsKIAljYXNlIEdPTVBfTUFQ X0FMTE9DOgpAQCAtMTA5NSw2ICsxMDk3LDggQEAgZHVtcF9vbXBfY2xhdXNlIChwcmV0dHlf cHJpbnRlciAqcHAsIHRyZWUgY2xhdXNlLCBpbnQgc3BjLCBkdW1wX2ZsYWdzX3QgZmxhZ3Mp CiAKICAgICBjYXNlIE9NUF9DTEFVU0VfX0NBQ0hFXzoKICAgICAgIHBwX3N0cmluZyAocHAs ICIoIik7CisgICAgICBpZiAoT01QX0NMQVVTRV9fQ0FDSEVfX1JFQURPTkxZIChjbGF1c2Up KQorCXBwX3N0cmluZyAocHAsICJyZWFkb25seToiKTsKICAgICAgIGR1bXBfZ2VuZXJpY19u b2RlIChwcCwgT01QX0NMQVVTRV9ERUNMIChjbGF1c2UpLAogCQkJIHNwYywgZmxhZ3MsIGZh bHNlKTsKICAgICAgIGdvdG8gcHJpbnRfY2xhdXNlX3NpemU7CmRpZmYgLS1naXQgYS9nY2Mv dHJlZS5oIGIvZ2NjL3RyZWUuaAppbmRleCBlMWZjNmMyMjIxZC4uYjY3YTM3ZDY1MjIgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtMTg0MSw2ICsxODQx LDE0IEBAIGNsYXNzIGF1dG9fc3VwcHJlc3NfbG9jYXRpb25fd3JhcHBlcnMKICNkZWZpbmUg T01QX0NMQVVTRV9NQVBfREVDTF9NQUtFX0FERFJFU1NBQkxFKE5PREUpIFwKICAgKE9NUF9D TEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9NQVApLT5iYXNlLmFkZHJl c3NhYmxlX2ZsYWcpCiAKKy8qIE5vbnplcm8gaWYgT3BlbkFDQyAncmVhZG9ubHknIG1vZGlm aWVyIHNldCwgdXNlZCBmb3IgJ2NvcHlpbicuICAqLworI2RlZmluZSBPTVBfQ0xBVVNFX01B UF9SRUFET05MWShOT0RFKSBcCisgIFRSRUVfUkVBRE9OTFkgKE9NUF9DTEFVU0VfU1VCQ09E RV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9NQVApKQorCisvKiBTYW1lIGFzIGFib3ZlLCBm b3IgdXNlIGluIE9wZW5BQ0MgY2FjaGUgZGlyZWN0aXZlcy4gICovCisjZGVmaW5lIE9NUF9D TEFVU0VfX0NBQ0hFX19SRUFET05MWShOT0RFKSBcCisgIFRSRUVfUkVBRE9OTFkgKE9NUF9D TEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9fQ0FDSEVfKSkKKwogLyog VHJ1ZSBvbiBhbiBPTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfUFRSIHdpdGggYW4gT3BlbkFDQyAn aWZfcHJlc2VudCcKICAgIGNsYXVzZS4gICovCiAjZGVmaW5lIE9NUF9DTEFVU0VfVVNFX0RF VklDRV9QVFJfSUZfUFJFU0VOVChOT0RFKSBcCg== --------------qHOlhnsgBWSRmGgnq7axsxtT--