Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ukUup-003AUE-5v for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Aug 2025 21:46:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ukUun-00GZqh-Nh for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Aug 2025 21:46:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ukUum-00GZqY-T9 for pgsql-hackers@lists.postgresql.org; Fri, 08 Aug 2025 21:46:17 +0000 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ukUuj-001SX5-0b for pgsql-hackers@lists.postgresql.org; Fri, 08 Aug 2025 21:46:15 +0000 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-61b43c84905so1890598eaf.3 for ; Fri, 08 Aug 2025 14:46:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20230601.gappssmtp.com; s=20230601; t=1754689573; x=1755294373; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=5wpyOu2iBDGXAxhb0i5CxTmd089vjcMKSWNU1Y4gDxI=; b=E2HQbNUEd5CEkH2tC2Sf7PONleo+FbnzRNPBp0glmkB2ArHmOAsI/u+1FH1XDXlg5B iUl++h6dfeublRbkJYvZF9Tmuw6uBJ2AT0djZlQyFvpFxp2wRU+6NO8Em/u+1aHQDBMF L1AyYxVwD5XAdq1N3FX4t5Wyh7jUrcNKG799nCrta2+Y8NXIe9Y9hR73JYgl0IcodmV2 Hmd+D9eNbqJisEnm/fJIV+l7SCurXV6VEnHRsuYwmOyXXFjFQ4I/c0hvc0YTZf7A30UU TI2/RLaTBW7ZQw/HDdr98ph7/duIgC0ru9y2tsUK2zIRSrztlcKRaYXmI5+d+Maru//o ZreQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754689573; x=1755294373; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5wpyOu2iBDGXAxhb0i5CxTmd089vjcMKSWNU1Y4gDxI=; b=srsQsCUR35SlMztFtdt3K0N081DdGqArRDwXGncysK2WAWok7H8xmKzoZhDI9c2woj mruicRSFVgFeonXFaG8Qu3Lcf9wy51p9iMcW+/LlJkwn6qn2ZFV5MuXlRl2YV0NDxht5 n02Yd5+qSQFMew4aacS+DhCuRGs1HFhq44n8xgwZ65hmdT9MD6BkShB+2SiYmAFIs1Ps UEC/IQR9Z77Clyzo4Cwymk+LyEZJAGiIDenM1n7Bx1REZtJptxQuE8+80Zq3/CyS4HIG q6kE24YNtIuutDBGdJq1FRCBFA79/Nx15leDjp5iLJDI96Z+0SAcSl0VsxFIBaSH2l7q qKPQ== X-Forwarded-Encrypted: i=1; AJvYcCWhqBF9AvVxjxEr3sfmwYzsCLtmDGy/sUJeo6xB1SNi7zvxEnmGjpkXxVxWEyHScYkn9524U6L6G+gxIsIw@lists.postgresql.org X-Gm-Message-State: AOJu0Yz1ht78LjJZd4XmTdA6MOux5/PpBoJ/WoLbaWvxT4RdYja2YGG3 3hvud38c2wyhynbn9mCH7otyaX+KSePgzK4vd0FMgK+wxMGjftHOXq+l681AhLE7NaUihssGndm FN5XmSKm/S0kbm+GPC7QpsLWgA/HeT3KA72eUbevwIw== X-Gm-Gg: ASbGncs/8MCf466TcgoXU5uWI7ADcxFgMbzkCeVe+yGk1+5Wox5QcaBWTvqFizrZV0B 3BjbbRxbCAd8AbJqmAiS+syKd52cegqcuARi4z+q6CdIdn9hvBgH3unif8yISMcK0Y3WnC7haEP QsG5mHROHjtiqV2AbE56EssAS5cvDR8ALg02/ZxBUWvlySnFecPYPFy8fLrIJC0iFQswPF/MWyH mUczQ== X-Google-Smtp-Source: AGHT+IGx0J91CJvnBnTkypCimn6V18HlFe49Dr1F7GBip43sXGXY1XvxkselzNCQImdJWzD/NwLYp95NKBbPO5kMkGY= X-Received: by 2002:a05:6808:10d3:b0:409:f8e:7284 with SMTP id 5614622812f47-43597b55ea7mr2685379b6e.6.1754689573175; Fri, 08 Aug 2025 14:46:13 -0700 (PDT) MIME-Version: 1.0 References: <09de6afa-c33d-4d94-a5cb-afc6cea0d2bb@illuminatedcomputing.com> <1755478.1722020334@sss.pgh.pa.us> <956f8a6f-32a7-49ab-92a3-dca5c8afe112@illuminatedcomputing.com> <1466725.1725381721@sss.pgh.pa.us> <33b10538-2c88-4278-a65f-0c1e6f265cb7@illuminatedcomputing.com> <737313.1752528083@sss.pgh.pa.us> In-Reply-To: <737313.1752528083@sss.pgh.pa.us> From: Paul A Jungwirth Date: Fri, 8 Aug 2025 14:46:01 -0700 X-Gm-Features: Ac12FXz_wzv0lb1jGpt4FADvmksPew2rx1E1gULEHuWZTUJSYUHKw3EfpkPs1PI Message-ID: Subject: Re: Inline non-SQL SRFs using SupportRequestSimplify To: Tom Lane Cc: Heikki Linnakangas , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000b3a32e063be18027" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b3a32e063be18027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jul 14, 2025 at 2:21=E2=80=AFPM Tom Lane wrote: > I got around to looking at this again. I generally agree with your > approach to the refactoring in clauses.c, with minor nitpicks: Thanks for taking another look! Revisions attached. > * I don't like postponing the early exit for its-not-a-SELECT; > as coded, this wastes a pretty decent number of cycles transforming > a querytree that won't be used (not to mention that I'm not sure > that our usage of check_sql_fn_retval won't fail on a non-SELECT). > So I think we should keep this bit where it is: > > - /* > - * The single command must be a plain SELECT. > - */ > - if (!IsA(querytree, Query) || > - querytree->commandType !=3D CMD_SELECT) > - goto fail; > > and then in the other path, simply Assert that those two conditions > hold for anything the support function might try to give back. Okay. > * I'm inclined to think that the test for "it must be declared to > return a set" should stay in inline_sql_set_returning_function. > In the case of a support-function-supported function, it's okay either > if the function returns a set or if it is guaranteed to return exactly > one row (including edge cases such as null function arguments). > The support function either knows that already or can take the > responsibility for checking it. But if we do it like this, we > foreclose the possibility of supporting the latter class of functions. Makes sense. Done. > * But on the other hand, I wonder if this bit shouldn't move to > the outer function: > > /* > * Refuse to inline if the arguments contain any volatile functio= ns or > * sub-selects. Volatile functions are rejected because inlining= may > * result in the arguments being evaluated multiple times, riskin= g a > * change in behavior. Sub-selects are rejected partly for imple= mentation > * reasons (pushing them down another level might change their be= havior) > * and partly because they're likely to be expensive and so multi= ple > * evaluation would be bad. > */ > if (contain_volatile_functions((Node *) fexpr->args) || > contain_subplans((Node *) fexpr->args)) > return NULL; > > I am not really convinced that any support function could safely > ignore those restrictions, and I do fear that a lot would omit the > enforcement and thereby produce wrong queries in such cases. Another > thing that likely needs to be in the outer wrapper is the check that > pg_proc_proconfig is empty, because that doesn't seem like a case > that support functions could skip over either. Agreed, done. > * I don't like the memory management. I think creation/destruction > of the temp context should occur at the outer level, and in particular > that we want to perform substitute_actual_srf_parameters() while still > working in the temp context, and copy out only the final form of the > query tree. This addresses your XXX comment in v2-0002, and also > saves support functions from having to re-invent that wheel. Okay, done. I was trying to defer creating a memory context past as many checks as possible. It's not an expensive thing to do? > > I didn't love passing a SysCache HeapTuple into another function, > > No, that's perfectly common; see for example > prepare_sql_fn_parse_info. In fact, one thing I don't like in v2-0002 > is that you should pass the pg_proc entry to the support function as a > HeapTuple not Form_pg_proc. It's possible to get the Form_pg_proc > pointer from the HeapTuple but not vice versa, while the Form_pg_proc > does not allow access to varlena fields, which makes it useless for > many cases. Even your own example function is forced to re-fetch > the syscache entry because of this. Okay, thanks for explaining! Done. > One other comment on v2-0002 is that this bit doesn't look right: > > + /* Get filter if present */ > + node =3D lthird(expr->args); > + if (!(IsA(node, Const) && ((Const *) node)->constisnull)) > + { > + appendStringInfo(&sql, " WHERE %s::text =3D $3", quote_ident= ifier(colname)); > + } > > It's not actually doing anything with the "node" value. This is correct, but I added a comment. The idea is that $3 will get the value of "node". > Backing up to a higher level, it seems like we still have no answer > for how to build a valid support function result besides "construct an > equivalent SQL query string and feed it through parse analysis and > rewrite". That seems both restrictive and expensive. In particular > it begs the question of why the target function couldn't just have > been written as a SQL function to begin with. So I still have kind > of a low estimate of this feature's usefulness. Is there a way to > do better? Parsing the function body is no more expensive than what we'd do to execute it separately, right? And by inlining we only do it once. But if it was too much for someone, perhaps they could keep a cache of node trees based on the function arguments and/or hash of the SQL string, not unlike how foreign keys cache query plans. Or they could build the node tree directly, without parsing. But parsing the equivalent string is easy and covers most uses. I can even imagine a way to eventually semi-automate it, e.g. creating a general-purpose support function that you can attach to (many) PL/pgSQL functions that end in `EXECUTE format(...)`. The reason for supporting more than SQL functions is to let you construct the query dynamically, e.g. with user-supplied table/column names, or to only include some expensive filters if needed. This would be great for building functions that implement temporal outer/semi/antijoin. Another use-case I personally have, which I think is quite common, is building "parameterized views" for permissions checks, e.g. visible_sales(user). In that case we may only need to include certain joins if the user belongs to certain roles (e.g. a third-party sales rep). Rebased to 04b7ff3cd3. Yours, -- Paul ~{:-) pj@illuminatedcomputing.com --000000000000b3a32e063be18027 Content-Type: application/octet-stream; name="v3-0001-Move-some-things-outside-of-inline_set_returning_.patch" Content-Disposition: attachment; filename="v3-0001-Move-some-things-outside-of-inline_set_returning_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me3ctdy60 RnJvbSBjNzRlM2ZlYTA5ZjQ0ZGYzOWM2MjI5OTc3NzUyN2UyODYxNmUwMzQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgMjQgSnVuIDIwMjUgMTk6MTA6MTUgLTA3MDAKU3ViamVj dDogW1BBVENIIHYzIDEvMl0gTW92ZSBzb21lIHRoaW5ncyBvdXRzaWRlIG9mCiBpbmxpbmVfc2V0 X3JldHVybmluZ19mdW5jdGlvbi4KCkFkZGVkIGEgbmV3IGlubGluZV9zcWxfc2V0X3JldHVybmlu Z19mdW5jdGlvbiBpbiBwcmVwYXJhdGlvbiBmb3IKaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rp b25fd2l0aF9zdXBwb3J0LiBUaGVuCmlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uIGNhbiBj YWxsIGJvdGgsIGhhbmRsaW5nIHRoZWlyIHNoYXJlZCBuZWVkcwppdHNlbGYuCgpBdXRob3I6IFBh dWwgQS4gSnVuZ3dpcnRoIDxwakBpbGx1bWluYXRlZGNvbXB1dGluZy5jb20+Ci0tLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIHwgMjczICsrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE1NyBpbnNlcnRpb25zKCspLCAxMTYgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IDZmMGIzMzhkMmNkLi43 N2Y0OGZmNDA2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNl cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwpAQCAtNTE0Niwz NiArNTE0NiwyMSBAQCBldmFsdWF0ZV9leHByKEV4cHIgKmV4cHIsIE9pZCByZXN1bHRfdHlwZSwg aW50MzIgcmVzdWx0X3R5cG1vZCwKIAogCiAvKgotICogaW5saW5lX3NldF9yZXR1cm5pbmdfZnVu Y3Rpb24KLSAqCQlBdHRlbXB0IHRvICJpbmxpbmUiIGEgc2V0LXJldHVybmluZyBmdW5jdGlvbiBp biB0aGUgRlJPTSBjbGF1c2UuCi0gKgotICogInJ0ZSIgaXMgYW4gUlRFX0ZVTkNUSU9OIHJhbmdl dGFibGUgZW50cnkuICBJZiBpdCByZXByZXNlbnRzIGEgY2FsbCBvZiBhCi0gKiBzZXQtcmV0dXJu aW5nIFNRTCBmdW5jdGlvbiB0aGF0IGNhbiBzYWZlbHkgYmUgaW5saW5lZCwgZXhwYW5kIHRoZSBm dW5jdGlvbgotICogYW5kIHJldHVybiB0aGUgc3Vic3RpdHV0ZSBRdWVyeSBzdHJ1Y3R1cmUuICBP dGhlcndpc2UsIHJldHVybiBOVUxMLgorICogaW5saW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0 aW9uCiAgKgotICogV2UgYXNzdW1lIHRoYXQgdGhlIFJURSdzIGV4cHJlc3Npb24gaGFzIGFscmVh ZHkgYmVlbiBwdXQgdGhyb3VnaAotICogZXZhbF9jb25zdF9leHByZXNzaW9ucygpLCB3aGljaCBh bW9uZyBvdGhlciB0aGluZ3Mgd2lsbCB0YWtlIGNhcmUgb2YKLSAqIGRlZmF1bHQgYXJndW1lbnRz IGFuZCBuYW1lZC1hcmd1bWVudCBub3RhdGlvbi4KKyAqIFRoaXMgaW1wbGVtZW50cyBpbmxpbmVf c2V0X3JldHVybmluZ19mdW5jdGlvbiBmb3Igc3FsLWxhbmd1YWdlIGZ1bmN0aW9ucy4KKyAqIEl0 IHBhcnNlcyB0aGUgYm9keSAob3IgdXNlcyB0aGUgcHJlLXBhcnNlZCBib2R5IGlmIGF2YWlsYWJs ZSkuCiAgKgotICogVGhpcyBoYXMgYSBnb29kIGRlYWwgb2Ygc2ltaWxhcml0eSB0byBpbmxpbmVf ZnVuY3Rpb24oKSwgYnV0IHRoYXQncwotICogZm9yIHRoZSBub24tc2V0LXJldHVybmluZyBjYXNl LCBhbmQgdGhlcmUgYXJlIGVub3VnaCBkaWZmZXJlbmNlcyB0bwotICoganVzdGlmeSBzZXBhcmF0 ZSBmdW5jdGlvbnMuCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIGZ1bmN0aW9uIGNvdWxkbid0IGJl IGlubGluZWQuCiAgKi8KLVF1ZXJ5ICoKLWlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBs YW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUpCitzdGF0aWMgUXVlcnkgKgoraW5s aW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRi bEVudHJ5ICpydGUsCisJCQkJCQkJCSAgUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAorCQkJCQkJ CQkgIEZ1bmNFeHByICpmZXhwciwgT2lkIGZ1bmNfb2lkLCBIZWFwVHVwbGUgZnVuY190dXBsZSwK KwkJCQkJCQkJICBGb3JtX3BnX3Byb2MgZnVuY2Zvcm0sIGNoYXIgKnNyYykKIHsKLQlSYW5nZVRi bEZ1bmN0aW9uICpydGZ1bmM7Ci0JRnVuY0V4cHIgICAqZmV4cHI7Ci0JT2lkCQkJZnVuY19vaWQ7 Ci0JSGVhcFR1cGxlCWZ1bmNfdHVwbGU7Ci0JRm9ybV9wZ19wcm9jIGZ1bmNmb3JtOwotCWNoYXIJ ICAgKnNyYzsKLQlEYXR1bQkJdG1wOworCURhdHVtCQlzcWxib2R5OwogCWJvb2wJCWlzTnVsbDsK LQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKLQlNZW1vcnlDb250ZXh0IG15Y3h0OwotCWlubGluZV9l cnJvcl9jYWxsYmFja19hcmcgY2FsbGJhY2tfYXJnOwotCUVycm9yQ29udGV4dENhbGxiYWNrIHNx bGVycmNvbnRleHQ7CiAJU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgcGluZm87CiAJVHlwZUZ1bmND bGFzcyBmdW5jdHlwY2xhc3M7CiAJVHVwbGVEZXNjCXJldHR1cGRlc2M7CkBAIC01MTg1LDI5ICs1 MTcwLDYgQEAgaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3Qs IFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAogCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX0ZVTkNU SU9OKTsKIAotCS8qCi0JICogSXQgZG9lc24ndCBtYWtlIGEgbG90IG9mIHNlbnNlIGZvciBhIFNR TCBTUkYgdG8gcmVmZXIgdG8gaXRzZWxmIGluIGl0cwotCSAqIG93biBGUk9NIGNsYXVzZSwgc2lu Y2UgdGhhdCBtdXN0IGNhdXNlIGluZmluaXRlIHJlY3Vyc2lvbiBhdCBydW50aW1lLgotCSAqIEl0 IHdpbGwgY2F1c2UgdGhpcyBjb2RlIHRvIHJlY3Vyc2UgdG9vLCBzbyBjaGVjayBmb3Igc3RhY2sg b3ZlcmZsb3cuCi0JICogKFRoZXJlJ3Mgbm8gbmVlZCB0byBkbyBtb3JlLikKLQkgKi8KLQljaGVj a19zdGFja19kZXB0aCgpOwotCi0JLyogRmFpbCBpZiB0aGUgUlRFIGhhcyBPUkRJTkFMSVRZIC0g d2UgZG9uJ3QgaW1wbGVtZW50IHRoYXQgaGVyZS4gKi8KLQlpZiAocnRlLT5mdW5jb3JkaW5hbGl0 eSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBGYWlsIGlmIFJURSBpc24ndCBhIHNpbmdsZSwgc2lt cGxlIEZ1bmNFeHByICovCi0JaWYgKGxpc3RfbGVuZ3RoKHJ0ZS0+ZnVuY3Rpb25zKSAhPSAxKQot CQlyZXR1cm4gTlVMTDsKLQlydGZ1bmMgPSAoUmFuZ2VUYmxGdW5jdGlvbiAqKSBsaW5pdGlhbChy dGUtPmZ1bmN0aW9ucyk7Ci0KLQlpZiAoIUlzQShydGZ1bmMtPmZ1bmNleHByLCBGdW5jRXhwcikp Ci0JCXJldHVybiBOVUxMOwotCWZleHByID0gKEZ1bmNFeHByICopIHJ0ZnVuYy0+ZnVuY2V4cHI7 Ci0KLQlmdW5jX29pZCA9IGZleHByLT5mdW5jaWQ7Ci0KIAkvKgogCSAqIFRoZSBmdW5jdGlvbiBt dXN0IGJlIGRlY2xhcmVkIHRvIHJldHVybiBhIHNldCwgZWxzZSBpbmxpbmluZyB3b3VsZAogCSAq IGNoYW5nZSB0aGUgcmVzdWx0cyBpZiB0aGUgY29udGFpbmVkIFNFTEVDVCBkaWRuJ3QgcmV0dXJu IGV4YWN0bHkgb25lCkBAIC01MjE2LDM1ICs1MTc4LDYgQEAgaW5saW5lX3NldF9yZXR1cm5pbmdf ZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAlpZiAoIWZl eHByLT5mdW5jcmV0c2V0KQogCQlyZXR1cm4gTlVMTDsKIAotCS8qCi0JICogUmVmdXNlIHRvIGlu bGluZSBpZiB0aGUgYXJndW1lbnRzIGNvbnRhaW4gYW55IHZvbGF0aWxlIGZ1bmN0aW9ucyBvcgot CSAqIHN1Yi1zZWxlY3RzLiAgVm9sYXRpbGUgZnVuY3Rpb25zIGFyZSByZWplY3RlZCBiZWNhdXNl IGlubGluaW5nIG1heQotCSAqIHJlc3VsdCBpbiB0aGUgYXJndW1lbnRzIGJlaW5nIGV2YWx1YXRl ZCBtdWx0aXBsZSB0aW1lcywgcmlza2luZyBhCi0JICogY2hhbmdlIGluIGJlaGF2aW9yLiAgU3Vi LXNlbGVjdHMgYXJlIHJlamVjdGVkIHBhcnRseSBmb3IgaW1wbGVtZW50YXRpb24KLQkgKiByZWFz b25zIChwdXNoaW5nIHRoZW0gZG93biBhbm90aGVyIGxldmVsIG1pZ2h0IGNoYW5nZSB0aGVpciBi ZWhhdmlvcikKLQkgKiBhbmQgcGFydGx5IGJlY2F1c2UgdGhleSdyZSBsaWtlbHkgdG8gYmUgZXhw ZW5zaXZlIGFuZCBzbyBtdWx0aXBsZQotCSAqIGV2YWx1YXRpb24gd291bGQgYmUgYmFkLgotCSAq LwotCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBmZXhwci0+YXJncykg fHwKLQkJY29udGFpbl9zdWJwbGFucygoTm9kZSAqKSBmZXhwci0+YXJncykpCi0JCXJldHVybiBO VUxMOwotCi0JLyogQ2hlY2sgcGVybWlzc2lvbiB0byBjYWxsIGZ1bmN0aW9uIChmYWlsIGxhdGVy LCBpZiBub3QpICovCi0JaWYgKG9iamVjdF9hY2xjaGVjayhQcm9jZWR1cmVSZWxhdGlvbklkLCBm dW5jX29pZCwgR2V0VXNlcklkKCksIEFDTF9FWEVDVVRFKSAhPSBBQ0xDSEVDS19PSykKLQkJcmV0 dXJuIE5VTEw7Ci0KLQkvKiBDaGVjayB3aGV0aGVyIGEgcGx1Z2luIHdhbnRzIHRvIGhvb2sgZnVu Y3Rpb24gZW50cnkvZXhpdCAqLwotCWlmIChGbWdySG9va0lzTmVlZGVkKGZ1bmNfb2lkKSkKLQkJ cmV0dXJuIE5VTEw7Ci0KLQkvKgotCSAqIE9LLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZnVu Y3Rpb24ncyBwZ19wcm9jIGVudHJ5LgotCSAqLwotCWZ1bmNfdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShmdW5jX29pZCkpOwotCWlmICghSGVhcFR1cGxl SXNWYWxpZChmdW5jX3R1cGxlKSkKLQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGZ1bmN0aW9uICV1IiwgZnVuY19vaWQpOwotCWZ1bmNmb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKGZ1bmNfdHVwbGUpOwotCiAJLyoKIAkgKiBGb3JnZXQgaXQgaWYgdGhlIGZ1bmN0 aW9uIGlzIG5vdCBTUUwtbGFuZ3VhZ2Ugb3IgaGFzIG90aGVyIHNob3dzdG9wcGVyCiAJICogcHJv cGVydGllcy4gIEluIHBhcnRpY3VsYXIgaXQgbXVzdG4ndCBiZSBkZWNsYXJlZCBTVFJJQ1QsIHNp bmNlIHdlCkBAIC01MjYyLDYxICs1MTk1LDM0IEBAIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0 aW9uKFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUpCiAJCWZ1bmNmb3JtLT5w cm9yZXR0eXBlID09IFZPSURPSUQgfHwKIAkJZnVuY2Zvcm0tPnByb3NlY2RlZiB8fAogCQkhZnVu Y2Zvcm0tPnByb3JldHNldCB8fAotCQlsaXN0X2xlbmd0aChmZXhwci0+YXJncykgIT0gZnVuY2Zv cm0tPnByb25hcmdzIHx8Ci0JCSFoZWFwX2F0dGlzbnVsbChmdW5jX3R1cGxlLCBBbnVtX3BnX3By b2NfcHJvY29uZmlnLCBOVUxMKSkKKwkJbGlzdF9sZW5ndGgoZmV4cHItPmFyZ3MpICE9IGZ1bmNm b3JtLT5wcm9uYXJncykKIAl7Ci0JCVJlbGVhc2VTeXNDYWNoZShmdW5jX3R1cGxlKTsKIAkJcmV0 dXJuIE5VTEw7CiAJfQogCi0JLyoKLQkgKiBNYWtlIGEgdGVtcG9yYXJ5IG1lbW9yeSBjb250ZXh0 LCBzbyB0aGF0IHdlIGRvbid0IGxlYWsgYWxsIHRoZSBzdHVmZgotCSAqIHRoYXQgcGFyc2luZyBt aWdodCBjcmVhdGUuCi0JICovCi0JbXljeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVu dE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCSAgImlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9u IiwKLQkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKLQlvbGRjeHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8obXljeHQpOwotCi0JLyogRmV0Y2ggdGhlIGZ1bmN0aW9uIGJvZHkgKi8K LQl0bXAgPSBTeXNDYWNoZUdldEF0dHJOb3ROdWxsKFBST0NPSUQsIGZ1bmNfdHVwbGUsIEFudW1f cGdfcHJvY19wcm9zcmMpOwotCXNyYyA9IFRleHREYXR1bUdldENTdHJpbmcodG1wKTsKLQotCS8q Ci0JICogU2V0dXAgZXJyb3IgdHJhY2ViYWNrIHN1cHBvcnQgZm9yIGVyZXBvcnQoKS4gIFRoaXMg aXMgc28gdGhhdCB3ZSBjYW4KLQkgKiBmaW5nZXIgdGhlIGZ1bmN0aW9uIHRoYXQgYmFkIGluZm9y bWF0aW9uIGNhbWUgZnJvbS4KLQkgKi8KLQljYWxsYmFja19hcmcucHJvbmFtZSA9IE5hbWVTdHIo ZnVuY2Zvcm0tPnByb25hbWUpOwotCWNhbGxiYWNrX2FyZy5wcm9zcmMgPSBzcmM7Ci0KLQlzcWxl cnJjb250ZXh0LmNhbGxiYWNrID0gc3FsX2lubGluZV9lcnJvcl9jYWxsYmFjazsKLQlzcWxlcnJj b250ZXh0LmFyZyA9ICZjYWxsYmFja19hcmc7Ci0Jc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVy cm9yX2NvbnRleHRfc3RhY2s7Ci0JZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0 OwotCiAJLyogSWYgd2UgaGF2ZSBwcm9zcWxib2R5LCBwYXkgYXR0ZW50aW9uIHRvIHRoYXQgbm90 IHByb3NyYyAqLwotCXRtcCA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELAotCQkJCQkJICBmdW5j X3R1cGxlLAotCQkJCQkJICBBbnVtX3BnX3Byb2NfcHJvc3FsYm9keSwKLQkJCQkJCSAgJmlzTnVs bCk7CisJc3FsYm9keSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELAorCQkJCQkJCSAgZnVuY190 dXBsZSwKKwkJCQkJCQkgIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LAorCQkJCQkJCSAgJmlzTnVs bCk7CiAJaWYgKCFpc051bGwpCiAJewogCQlOb2RlCSAgICpuOwogCi0JCW4gPSBzdHJpbmdUb05v ZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh0bXApKTsKKwkJbiA9IHN0cmluZ1RvTm9kZShUZXh0RGF0 dW1HZXRDU3RyaW5nKHNxbGJvZHkpKTsKIAkJaWYgKElzQShuLCBMaXN0KSkKIAkJCXF1ZXJ5dHJl ZV9saXN0ID0gbGluaXRpYWxfbm9kZShMaXN0LCBjYXN0Tm9kZShMaXN0LCBuKSk7CiAJCWVsc2UK IAkJCXF1ZXJ5dHJlZV9saXN0ID0gbGlzdF9tYWtlMShuKTsKIAkJaWYgKGxpc3RfbGVuZ3RoKHF1 ZXJ5dHJlZV9saXN0KSAhPSAxKQotCQkJZ290byBmYWlsOworCQkJcmV0dXJuIE5VTEw7CiAJCXF1 ZXJ5dHJlZSA9IGxpbml0aWFsKHF1ZXJ5dHJlZV9saXN0KTsKIAogCQkvKiBBY3F1aXJlIG5lY2Vz c2FyeSBsb2NrcywgdGhlbiBhcHBseSByZXdyaXRlci4gKi8KIAkJQWNxdWlyZVJld3JpdGVMb2Nr cyhxdWVyeXRyZWUsIHRydWUsIGZhbHNlKTsKIAkJcXVlcnl0cmVlX2xpc3QgPSBwZ19yZXdyaXRl X3F1ZXJ5KHF1ZXJ5dHJlZSk7CiAJCWlmIChsaXN0X2xlbmd0aChxdWVyeXRyZWVfbGlzdCkgIT0g MSkKLQkJCWdvdG8gZmFpbDsKKwkJCXJldHVybiBOVUxMOwogCQlxdWVyeXRyZWUgPSBsaW5pdGlh bChxdWVyeXRyZWVfbGlzdCk7CiAJfQogCWVsc2UKQEAgLTUzMzcsMTQgKzUyNDMsMTQgQEAgaW5s aW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50 cnkgKnJ0ZSkKIAkJICovCiAJCXJhd19wYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KHNy Yyk7CiAJCWlmIChsaXN0X2xlbmd0aChyYXdfcGFyc2V0cmVlX2xpc3QpICE9IDEpCi0JCQlnb3Rv IGZhaWw7CisJCQlyZXR1cm4gTlVMTDsKIAogCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVf YW5kX3Jld3JpdGVfd2l0aGNiKGxpbml0aWFsKHJhd19wYXJzZXRyZWVfbGlzdCksCiAJCQkJCQkJ CQkJCQkJICAgc3JjLAogCQkJCQkJCQkJCQkJCSAgIChQYXJzZXJTZXR1cEhvb2spIHNxbF9mbl9w YXJzZXJfc2V0dXAsCiAJCQkJCQkJCQkJCQkJICAgcGluZm8sIE5VTEwpOwogCQlpZiAobGlzdF9s ZW5ndGgocXVlcnl0cmVlX2xpc3QpICE9IDEpCi0JCQlnb3RvIGZhaWw7CisJCQlyZXR1cm4gTlVM TDsKIAkJcXVlcnl0cmVlID0gbGluaXRpYWwocXVlcnl0cmVlX2xpc3QpOwogCX0KIApAQCAtNTM2 OSw3ICs1Mjc1LDcgQEAgaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8g KnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAkgKi8KIAlpZiAoIUlzQShxdWVyeXRyZWUsIFF1 ZXJ5KSB8fAogCQlxdWVyeXRyZWUtPmNvbW1hbmRUeXBlICE9IENNRF9TRUxFQ1QpCi0JCWdvdG8g ZmFpbDsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24g KHN0aWxsKSByZXR1cm5zIHdoYXQgaXQncyBkZWNsYXJlZCB0by4gIFRoaXMKQEAgLTUzOTEsNyAr NTI5Nyw3IEBAIGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJbmZvICpyb290 LCBSYW5nZVRibEVudHJ5ICpydGUpCiAJCShmdW5jdHlwY2xhc3MgPT0gVFlQRUZVTkNfQ09NUE9T SVRFIHx8CiAJCSBmdW5jdHlwY2xhc3MgPT0gVFlQRUZVTkNfQ09NUE9TSVRFX0RPTUFJTiB8fAog CQkgZnVuY3R5cGNsYXNzID09IFRZUEVGVU5DX1JFQ09SRCkpCi0JCWdvdG8gZmFpbDsJCQkJLyog cmVqZWN0IG5vdC13aG9sZS10dXBsZS1yZXN1bHQgY2FzZXMgKi8KKwkJcmV0dXJuIE5VTEw7CQkJ LyogcmVqZWN0IG5vdC13aG9sZS10dXBsZS1yZXN1bHQgY2FzZXMgKi8KIAogCS8qCiAJICogY2hl Y2tfc3FsX2ZuX3JldHZhbCBtaWdodCd2ZSBpbnNlcnRlZCBhIHByb2plY3Rpb24gc3RlcCwgYnV0 IHRoYXQncwpAQCAtNTM5OSw2ICs1MzA1LDE0MSBAQCBpbmxpbmVfc2V0X3JldHVybmluZ19mdW5j dGlvbihQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogCSAqLwogCXF1ZXJ5 dHJlZSA9IGxpbml0aWFsX25vZGUoUXVlcnksIHF1ZXJ5dHJlZV9saXN0KTsKIAorCXJldHVybiBx dWVyeXRyZWU7Cit9CisKKy8qCisgKiBpbmxpbmVfc2V0X3JldHVybmluZ19mdW5jdGlvbgorICoJ CUF0dGVtcHQgdG8gImlubGluZSIgYW4gU1FMIHNldC1yZXR1cm5pbmcgZnVuY3Rpb24gaW4gdGhl IEZST00gY2xhdXNlLgorICoKKyAqICJydGUiIGlzIGFuIFJURV9GVU5DVElPTiByYW5nZXRhYmxl IGVudHJ5LiAgSWYgaXQgcmVwcmVzZW50cyBhIGNhbGwgb2YgYQorICogc2V0LXJldHVybmluZyBT UUwgZnVuY3Rpb24gdGhhdCBjYW4gc2FmZWx5IGJlIGlubGluZWQsIGV4cGFuZCB0aGUgZnVuY3Rp b24KKyAqIGFuZCByZXR1cm4gdGhlIHN1YnN0aXR1dGUgUXVlcnkgc3RydWN0dXJlLiAgT3RoZXJ3 aXNlLCByZXR1cm4gTlVMTC4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCB0aGUgUlRFJ3MgZXhwcmVz c2lvbiBoYXMgYWxyZWFkeSBiZWVuIHB1dCB0aHJvdWdoCisgKiBldmFsX2NvbnN0X2V4cHJlc3Np b25zKCksIHdoaWNoIGFtb25nIG90aGVyIHRoaW5ncyB3aWxsIHRha2UgY2FyZSBvZgorICogZGVm YXVsdCBhcmd1bWVudHMgYW5kIG5hbWVkLWFyZ3VtZW50IG5vdGF0aW9uLgorICoKKyAqIFRoaXMg aGFzIGEgZ29vZCBkZWFsIG9mIHNpbWlsYXJpdHkgdG8gaW5saW5lX2Z1bmN0aW9uKCksIGJ1dCB0 aGF0J3MKKyAqIGZvciB0aGUgbm9uLXNldC1yZXR1cm5pbmcgY2FzZSwgYW5kIHRoZXJlIGFyZSBl bm91Z2ggZGlmZmVyZW5jZXMgdG8KKyAqIGp1c3RpZnkgc2VwYXJhdGUgZnVuY3Rpb25zLgorICoK KyAqIEl0IGFsbG9jYXRlcyBpdHMgb3duIHRlbXBvcmFyeSBNZW1vcnlDb250ZXh0IGZvciB0aGUg cGFyc2luZywgdGhlbiBjb3BpZXMKKyAqIHRoZSByZXN1bHQgaW50byB0aGUgY2FsbGVyJ3MgY29u dGV4dC4KKyAqLworUXVlcnkgKgoraW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5l ckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKK3sKKwlSYW5nZVRibEZ1bmN0aW9uICpy dGZ1bmM7CisJRnVuY0V4cHIgICAqZmV4cHI7CisJT2lkCQkJZnVuY19vaWQ7CisJSGVhcFR1cGxl CWZ1bmNfdHVwbGU7CisJRm9ybV9wZ19wcm9jIGZ1bmNmb3JtOworCURhdHVtCQl0bXA7CisJY2hh cgkgICAqc3JjOworCWlubGluZV9lcnJvcl9jYWxsYmFja19hcmcgY2FsbGJhY2tfYXJnOworCUVy cm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7 CisJTWVtb3J5Q29udGV4dCBteWN4dDsKKwlRdWVyeQkgICAqcXVlcnl0cmVlOworCisJQXNzZXJ0 KHJ0ZS0+cnRla2luZCA9PSBSVEVfRlVOQ1RJT04pOworCisJLyoKKwkgKiBJdCBkb2Vzbid0IG1h a2UgYSBsb3Qgb2Ygc2Vuc2UgZm9yIGEgU1JGIHRvIHJlZmVyIHRvIGl0c2VsZiBpbiBpdHMgb3du CisJICogRlJPTSBjbGF1c2UsIHNpbmNlIHRoYXQgbXVzdCBjYXVzZSBpbmZpbml0ZSByZWN1cnNp b24gYXQgcnVudGltZS4gSXQKKwkgKiB3aWxsIGNhdXNlIHRoaXMgY29kZSB0byByZWN1cnNlIHRv bywgc28gY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93LgorCSAqIChUaGVyZSdzIG5vIG5lZWQgdG8g ZG8gbW9yZS4pCisJICovCisJY2hlY2tfc3RhY2tfZGVwdGgoKTsKKworCS8qIEZhaWwgaWYgdGhl IFJURSBoYXMgT1JESU5BTElUWSAtIHdlIGRvbid0IGltcGxlbWVudCB0aGF0IGhlcmUuICovCisJ aWYgKHJ0ZS0+ZnVuY29yZGluYWxpdHkpCisJCXJldHVybiBOVUxMOworCisJLyogRmFpbCBpZiBS VEUgaXNuJ3QgYSBzaW5nbGUsIHNpbXBsZSBGdW5jRXhwciAqLworCWlmIChsaXN0X2xlbmd0aChy dGUtPmZ1bmN0aW9ucykgIT0gMSkKKwkJcmV0dXJuIE5VTEw7CisJcnRmdW5jID0gKFJhbmdlVGJs RnVuY3Rpb24gKikgbGluaXRpYWwocnRlLT5mdW5jdGlvbnMpOworCisJaWYgKCFJc0EocnRmdW5j LT5mdW5jZXhwciwgRnVuY0V4cHIpKQorCQlyZXR1cm4gTlVMTDsKKwlmZXhwciA9IChGdW5jRXhw ciAqKSBydGZ1bmMtPmZ1bmNleHByOworCisJZnVuY19vaWQgPSBmZXhwci0+ZnVuY2lkOworCisJ LyoKKwkgKiBSZWZ1c2UgdG8gaW5saW5lIGlmIHRoZSBhcmd1bWVudHMgY29udGFpbiBhbnkgdm9s YXRpbGUgZnVuY3Rpb25zIG9yCisJICogc3ViLXNlbGVjdHMuICBWb2xhdGlsZSBmdW5jdGlvbnMg YXJlIHJlamVjdGVkIGJlY2F1c2UgaW5saW5pbmcgbWF5CisJICogcmVzdWx0IGluIHRoZSBhcmd1 bWVudHMgYmVpbmcgZXZhbHVhdGVkIG11bHRpcGxlIHRpbWVzLCByaXNraW5nIGEKKwkgKiBjaGFu Z2UgaW4gYmVoYXZpb3IuICBTdWItc2VsZWN0cyBhcmUgcmVqZWN0ZWQgcGFydGx5IGZvciBpbXBs ZW1lbnRhdGlvbgorCSAqIHJlYXNvbnMgKHB1c2hpbmcgdGhlbSBkb3duIGFub3RoZXIgbGV2ZWwg bWlnaHQgY2hhbmdlIHRoZWlyIGJlaGF2aW9yKQorCSAqIGFuZCBwYXJ0bHkgYmVjYXVzZSB0aGV5 J3JlIGxpa2VseSB0byBiZSBleHBlbnNpdmUgYW5kIHNvIG11bHRpcGxlCisJICogZXZhbHVhdGlv biB3b3VsZCBiZSBiYWQuCisJICovCisJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChO b2RlICopIGZleHByLT5hcmdzKSB8fAorCQljb250YWluX3N1YnBsYW5zKChOb2RlICopIGZleHBy LT5hcmdzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBDaGVjayBwZXJtaXNzaW9uIHRvIGNhbGwg ZnVuY3Rpb24gKGZhaWwgbGF0ZXIsIGlmIG5vdCkgKi8KKwlpZiAob2JqZWN0X2FjbGNoZWNrKFBy b2NlZHVyZVJlbGF0aW9uSWQsIGZ1bmNfb2lkLCBHZXRVc2VySWQoKSwgQUNMX0VYRUNVVEUpICE9 IEFDTENIRUNLX09LKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIENoZWNrIHdoZXRoZXIgYSBwbHVn aW4gd2FudHMgdG8gaG9vayBmdW5jdGlvbiBlbnRyeS9leGl0ICovCisJaWYgKEZtZ3JIb29rSXNO ZWVkZWQoZnVuY19vaWQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT0ssIGxldCdzIHRh a2UgYSBsb29rIGF0IHRoZSBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuCisJICovCisJZnVuY190 dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGZ1bmNfb2lk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ1bmNfdHVwbGUpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gJXUiLCBmdW5jX29pZCk7CisJZnVuY2Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QoZnVuY190dXBsZSk7CisKKwkvKgorCSAqIE1h a2UgYSB0ZW1wb3JhcnkgbWVtb3J5IGNvbnRleHQsIHNvIHRoYXQgd2UgZG9uJ3QgbGVhayBhbGwg dGhlIHN0dWZmCisJICogdGhhdCBwYXJzaW5nIG1pZ2h0IGNyZWF0ZS4KKwkgKi8KKwlteWN4dCA9 IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAi aW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24iLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFV TFRfU0laRVMpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhteWN4dCk7CisKKwkv KiBGZXRjaCB0aGUgZnVuY3Rpb24gYm9keSAqLworCXRtcCA9IFN5c0NhY2hlR2V0QXR0ck5vdE51 bGwoUFJPQ09JRCwgZnVuY190dXBsZSwgQW51bV9wZ19wcm9jX3Byb3NyYyk7CisJc3JjID0gVGV4 dERhdHVtR2V0Q1N0cmluZyh0bXApOworCisJLyoKKwkgKiBTZXR1cCBlcnJvciB0cmFjZWJhY2sg c3VwcG9ydCBmb3IgZXJlcG9ydCgpLiAgVGhpcyBpcyBzbyB0aGF0IHdlIGNhbgorCSAqIGZpbmdl ciB0aGUgZnVuY3Rpb24gdGhhdCBiYWQgaW5mb3JtYXRpb24gY2FtZSBmcm9tLgorCSAqLworCWNh bGxiYWNrX2FyZy5wcm9uYW1lID0gTmFtZVN0cihmdW5jZm9ybS0+cHJvbmFtZSk7CisJY2FsbGJh Y2tfYXJnLnByb3NyYyA9IHNyYzsKKworCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBzcWxfaW5s aW5lX2Vycm9yX2NhbGxiYWNrOworCXNxbGVycmNvbnRleHQuYXJnID0gJmNhbGxiYWNrX2FyZzsK KwlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9j b250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisKKwkvKgorCSAqIElmIHRoZSBmdW5jdGlv biBTRVRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgaW5saW5pbmcgd291bGQgY2F1c2UgdXMK KwkgKiB0byBza2lwIHRob3NlIGNoYW5nZXMuCisJICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChm dW5jX3R1cGxlLCBBbnVtX3BnX3Byb2NfcHJvY29uZmlnLCBOVUxMKSkKKwkJZ290byBmYWlsOwor CisJcXVlcnl0cmVlID0gaW5saW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKHJvb3QsIHJ0 ZSwgcnRmdW5jLCBmZXhwciwKKwkJCQkJCQkJCQkJCSAgZnVuY19vaWQsIGZ1bmNfdHVwbGUsIGZ1 bmNmb3JtLAorCQkJCQkJCQkJCQkJICBzcmMpOworCisJaWYgKCFxdWVyeXRyZWUpCisJCWdvdG8g ZmFpbDsKKworCS8qIE9ubHkgU0VMRUNUcyBhcmUgcGVybWl0dGVkICovCisJQXNzZXJ0KElzQShx dWVyeXRyZWUsIFF1ZXJ5KSk7CisJQXNzZXJ0KHF1ZXJ5dHJlZS0+Y29tbWFuZFR5cGUgPT0gQ01E X1NFTEVDVCk7CisKIAkvKgogCSAqIExvb2tzIGdvb2QgLS0tIHN1YnN0aXR1dGUgcGFyYW1ldGVy cyBpbnRvIHRoZSBxdWVyeS4KIAkgKi8KLS0gCjIuNDUuMAoK --000000000000b3a32e063be18027 Content-Type: application/octet-stream; name="v3-0002-Add-SupportRequestInlineSRF.patch" Content-Disposition: attachment; filename="v3-0002-Add-SupportRequestInlineSRF.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_me3ctdyk1 RnJvbSBkNjQwOWY2ZDYxMDE5ZTU0YWU1YzFhNDllZjU3YjdiZGVkODBkZTdiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUGF1bCBBLiBKdW5nd2lydGgiIDxwakBpbGx1bWluYXRlZGNv bXB1dGluZy5jb20+CkRhdGU6IFR1ZSwgMjQgSnVuIDIwMjUgMjE6MzA6MDIgLTA3MDAKU3ViamVj dDogW1BBVENIIHYzIDIvMl0gQWRkIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGCgpJZiBhIHNldC1y ZXR1cm5pbmcgZnVuY3Rpb24gaGFzIGFuIGF0dGFjaGVkIHN1cHBvcnQgZnVuY3Rpb24gdGhhdCBj YW4KaGFuZGxlIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGLCB0aGVuIHdlIHJlcGxhY2UgdGhlIEZ1 bmNFeHByIHdpdGggYQpRdWVyeSBub2RlIGJ1aWx0IGJ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uLiBU aGVuIHRoZSBwbGFubmVyIGNhbiByZXdyaXRlCnRoZSBRdWVyeSBhcyBpZiBpdCB3ZXJlIGZyb20g YSBTUUwtbGFuZ3VhZ2UgZnVuY3Rpb24sIG1lcmdpbmcgaXQgd2l0aAp0aGUgb3V0ZXIgcXVlcnku CgpBdXRob3I6IFBhdWwgQS4gSnVuZ3dpcnRoIDxwakBpbGx1bWluYXRlZGNvbXB1dGluZy5jb20+ Ci0tLQogZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAxMDEg KysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgICAgICAgICB8 ICA2MyArKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3N1cHBvcnRub2Rlcy5oICAgICAgICAgICAg IHwgIDM0ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQg fCAyMTIgKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzLmMgICAg ICAgICAgICAgICAgICAgfCAxMTQgKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlz Y19mdW5jdGlvbnMuc3FsICAgICAgfCAgODYgKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0ICAgICAgICAgICAgIHwgICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgNjA1IGlu c2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3hm dW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbAppbmRleCAzMDIxOWY0MzJkOS4uZWNk N2NlZDhiZTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC94ZnVuYy5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC94ZnVuYy5zZ21sCkBAIC00MTY2LDYgKzQxNjYsMTA3IEBAIHN1cHBvcnRmbihpbnRl cm5hbCkgcmV0dXJucyBpbnRlcm5hbAogICAgIGV4cHJlc3Npb24gYW5kIGFuIGFjdHVhbCBleGVj dXRpb24gb2YgdGhlIHRhcmdldCBmdW5jdGlvbi4KICAgIDwvcGFyYT4KIAorICAgPHBhcmE+Cisg ICAgU2ltaWxhcmx5LCBhIDxsaW5rIGxpbmtlbmQ9InF1ZXJpZXMtdGFibGVmdW5jdGlvbnMiPnNl dC1yZXR1cm5pbmcgZnVuY3Rpb248L2xpbms+CisgICAgY2FuIGltcGxlbWVudCA8bGl0ZXJhbD5T dXBwb3J0UmVxdWVzdElubGluZVNSRjwvbGl0ZXJhbD4gdG8gcmV0dXJuIGEKKyAgICA8bGl0ZXJh bD5RdWVyeTwvbGl0ZXJhbD4gbm9kZSwgd2hpY2ggdGhlIHBsYW5uZXIgd2lsbCB0cnkgdG8gaW5s aW5lIGludG8KKyAgICB0aGUgb3V0ZXIgcXVlcnksIGp1c3QgYXMgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiBpbmxpbmVzCisgICAgU1FMIGZ1bmN0aW9ucy4gIE5vcm1hbGxs eSBvbmx5IFNRTCBmdW5jdGlvbnMgY2FuIGJlIGlubGluZWQsIGJ1dCB0aGlzIHN1cHBvcnQKKyAg ICByZXF1ZXN0IGFsbG93cyBhIGZ1bmN0aW9uIGluIDxsaW5rIGxpbmtlbmQ9InBscGdzcWwiPlBM L3BnU1FMPC9saW5rPgorICAgIG9yIGFub3RoZXIgbGFuZ3VhZ2UgdG8gYnVpbGQgYSBkeW5hbWlj IFNRTCBxdWVyeSBhbmQgaGF2ZSBpdCBpbmxpbmVkIHRvby4KKyAgICBUaGUgPGxpdGVyYWw+UXVl cnk8L2xpdGVyYWw+IG5vZGUgbXVzdCBiZSBhIDxsaXRlcmFsPlNFTEVDVDwvbGl0ZXJhbD4gcXVl cnkKKyAgICB0aGF0IGhhcyBnb25lIHRocm91Z2ggcGFyc2UgYW5hbHlzaXMgYW5kIHJld3JpdGlu Zy4KKyAgICBZb3UgbWF5IGluY2x1ZGUgPGxpdGVyYWw+UGFyYW08L2xpdGVyYWw+IG5vZGVzIHJl ZmVyZW5jaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbidzCisgICAgcGFyYW1ldGVycywgYW5kIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gd2lsbCBtYXAgdGhvc2UgYXBwcm9w cmlhdGVseQorICAgIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuCisgICAg SXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBzdXBwb3J0IGZ1bmN0aW9uIHRvIHJldHVy bgorICAgIGEgbm9kZSB0aGF0IG1hdGNoZXMgdGhlIHBhcmVudCBmdW5jdGlvbidzIGltcGxlbWVu dGF0aW9uLgorICAgIFdlIG1ha2Ugbm8gZ3VhcmFudGVlIHRoYXQgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiB3aWxsCisgICAgbmV2ZXIgY2FsbCB0aGUgdGFyZ2V0IGZ1bmN0 aW9uIGluIGNhc2VzIHRoYXQgdGhlIHN1cHBvcnQgZnVuY3Rpb24gY291bGQKKyAgICBzaW1wbGlm eS4gIEZ1bmN0aW9ucyBjYWxsZWQgaW4gPGxpdGVyYWw+U0VMRUNUPC9saXRlcmFsPiBhcmUgbm90 IHNpbXBsaWZpZWQuCisgICAgT3IgaWYgdGhlIDxsaXRlcmFsPlJhbmdlVGJsRW50cnk8L2xpdGVy YWw+IGhhcyBtb3JlIHRoYW4gb25lCisgICAgPGxpdGVyYWw+UmFuZ2VUYmxGdW5jdGlvbjwvbGl0 ZXJhbD4gKHN1Y2ggYXMgd2hlbiB1c2luZworICAgIDxsaXRlcmFsPlJPV1MgRlJPTTwvbGl0ZXJh bD4pLCB0aGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgc2ltcGxpZmllZC4KKyAgICBFbnN1cmUgcmln b3JvdXMgZXF1aXZhbGVuY2UgYmV0d2VlbiB0aGUgc2ltcGxpZmllZCBleHByZXNzaW9uIGFuZCBh biBhY3R1YWwKKyAgICBleGVjdXRpb24gb2YgdGhlIHRhcmdldCBmdW5jdGlvbi4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgT25lIHdheSB0byBpbXBsZW1lbnQgYSA8bGl0ZXJhbD5TdXBw b3J0UmVxdWVzdElubGluZVNSRjwvbGl0ZXJhbD4gc3VwcG9ydCBmdW5jdGlvbgorICAgIGlzIHRv IGJ1aWxkIGEgU1FMIHN0cmluZyB0aGVuIHBhcnNlIGl0IHdpdGggPGxpdGVyYWw+cGdfcGFyc2Vf cXVlcnk8L2xpdGVyYWw+LgorICAgIFRoZSBvdXRsaW5lIG9mIHN1Y2ggYSBmdW5jdGlvbiBtaWdo dCBsb29rIGxpa2UgdGhpczoKKzxwcm9ncmFtbGlzdGluZz4KK1BHX0ZVTkNUSU9OX0lORk9fVjEo bXlfc3VwcG9ydF9mdW5jdGlvbik7CitEYXR1bQorbXlfc3VwcG9ydF9mdW5jdGlvbihQR19GVU5D VElPTl9BUkdTKQoreworICAgIE5vZGUgICAgICAgICAgICAgICAgICAgICpyYXdyZXEgPSAoTm9k ZSAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKyAgICBTdXBwb3J0UmVxdWVzdElubGluZVNSRiAq cmVxCisgICAgUmFuZ2VUYmxGdW5jdGlvbiAgICAgICAgKnJ0ZnVuYzsKKyAgICBGdW5jRXhwciAg ICAgICAgICAgICAgICAqZXhwcjsKKyAgICBRdWVyeSAgICAgICAgICAgICAgICAgICAqcXVlcnl0 cmVlOworICAgIFN0cmluZ0luZm9EYXRhICAgICAgICAgICBzcWw7CisgICAgSGVhcFR1cGxlICAg ICAgICAgICAgICAgIGZ1bmNfdHVwbGU7CisgICAgU1FMRnVuY3Rpb25QYXJzZUluZm9QdHIgIHBp bmZvOworICAgIExpc3QgICAgICAgICAgICAgICAgICAgICpyYXdfcGFyc2V0cmVlX2xpc3Q7CisK KyAgICAvKiBSZXR1cm4gaWYgaXQncyBub3QgYSB0eXBlIHdlIGhhbmRsZS4gKi8KKyAgICBpZiAo IUlzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGKSkKKyAgICAgICAgUEdfUkVUVVJO X1BPSU5URVIoTlVMTCk7CisKKyAgICAvKiBHZXQgdGhpbmdzIHdlIG5lZWQgb2ZmIHRoZSBzdXBw b3J0IHJlcXVlc3Qgbm9kZS4gKi8KKyAgICByZXEgPSAoU3VwcG9ydFJlcXVlc3RJbmxpbmVTUkYg KikgcmF3cmVxOworICAgIHJ0ZnVuYyA9IHJlcS0+cnRmdW5jOworICAgIGV4cHIgPSAoRnVuY0V4 cHIgKikgcnRmdW5jLT5mdW5jZXhwcjsKKworICAgIC8qIEdlbmVyYXRlIHRoZSBTUUwgc3RyaW5n LiAqLworICAgIGluaXRTdHJpbmdJbmZvKCZhbXA7c3FsKTsKKyAgICBhcHBlbmRTdHJpbmdJbmZv KCZhbXA7c3FsLCAiU0VMRUNUIC4uLiIpOworCisgICAgLyogQnVpbGQgYSBTUUxGdW5jdGlvblBh cnNlSW5mby4gKi8KKyAgICBmdW5jX3R1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9i amVjdElkR2V0RGF0dW0oZXhwci0+ZnVuY2lkKSk7CisgICAgaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGZ1bmNfdHVwbGUpKQorICAgIHsKKyAgICAgICAgZXJlcG9ydChXQVJOSU5HLCAoZXJybXNnKCJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiAldSIsIGV4cHItPmZ1bmNpZCkpKTsKKyAg ICAgICAgUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisgICAgfQorICAgIHBpbmZvID0gcHJlcGFy ZV9zcWxfZm5fcGFyc2VfaW5mbyhmdW5jX3R1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoTm9kZSAqKSBleHByLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBleHByLT5pbnB1dGNvbGxpZCk7CisgICAgUmVsZWFzZVN5c0NhY2hlKGZ1bmNf dHVwbGUpOworCisgICAgLyogUGFyc2UgdGhlIFNRTC4gKi8KKyAgICByYXdfcGFyc2V0cmVlX2xp c3QgPSBwZ19wYXJzZV9xdWVyeShzcWwuZGF0YSk7CisgICAgaWYgKGxpc3RfbGVuZ3RoKHJhd19w YXJzZXRyZWVfbGlzdCkgIT0gMSkKKyAgICB7CisgICAgICAgIGVyZXBvcnQoV0FSTklORywgKGVy cm1zZygibXlfc3VwcG9ydF9mdW5jIHBhcnNlZCB0byBtb3JlIHRoYW4gb25lIG5vZGUiKSkpOwor ICAgICAgICBQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKyAgICB9CisKKyAgICAvKiBBbmFseXpl IHRoZSBwYXJzZSB0cmVlIGFzIGlmIGl0IHdlcmUgYSBTUUwtbGFuZ3VhZ2UgYm9keS4gKi8KKyAg ICBxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfd2l0aGNiKGxpbml0aWFs KHJhd19wYXJzZXRyZWVfbGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzcWwuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChQYXJzZXJTZXR1cEhvb2spIHNxbF9mbl9wYXJzZXJfc2V0 dXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw aW5mbywgTlVMTCk7CisgICAgaWYgKGxpc3RfbGVuZ3RoKHF1ZXJ5dHJlZV9saXN0KSAhPSAxKQor ICAgIHsKKyAgICAgICAgZXJlcG9ydChXQVJOSU5HLCAoZXJybXNnKCJteV9zdXBwb3J0X2Z1bmMg cmV3cm90ZSB0byBtb3JlIHRoYW4gb25lIG5vZGUiKSkpOworICAgICAgICBQR19SRVRVUk5fUE9J TlRFUihOVUxMKTsKKyAgICB9CisKKyAgICBxdWVyeXRyZWUgPSBsaW5pdGlhbChxdWVyeXRyZWVf bGlzdCk7CisgICAgaWYgKCFJc0EocXVlcnl0cmVlLCBRdWVyeSkpCisgICAgeworICAgICAgICBl cmVwb3J0KFdBUk5JTkcsIChlcnJtc2coIm15X3N1cHBvcnRfZnVuYyBkaWRuJ3QgcGFyc2UgdG8g YSBRdWVyeSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJkZXRhaWwoIkdvdCB0aGlz IGluc3RlYWQ6ICVzIiwgbm9kZVRvU3RyaW5nKHF1ZXJ5dHJlZSkpKSk7CisgICAgICAgIFBHX1JF VFVSTl9QT0lOVEVSKE5VTEwpOworICAgIH0KKworICAgIFBHX1JFVFVSTl9QT0lOVEVSKHF1ZXJ5 dHJlZSk7Cit9Cis8L3Byb2dyYW1saXN0aW5nPgorICAgPC9wYXJhPgorCiAgICA8cGFyYT4KICAg ICBGb3IgdGFyZ2V0IGZ1bmN0aW9ucyB0aGF0IHJldHVybiA8dHlwZT5ib29sZWFuPC90eXBlPiwg aXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIGVzdGltYXRlCiAgICAgdGhlIGZyYWN0aW9uIG9mIHJvd3Mg dGhhdCB3aWxsIGJlIHNlbGVjdGVkIGJ5IGEgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNsYXVz ZSB1c2luZyB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1 c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggNzdmNDhm ZjQwNjkuLjMxMjIzN2E1ZTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBA IC01MTQ1LDYgKzUxNDUsNDcgQEAgZXZhbHVhdGVfZXhwcihFeHByICpleHByLCBPaWQgcmVzdWx0 X3R5cGUsIGludDMyIHJlc3VsdF90eXBtb2QsCiB9CiAKIAorLyoKKyAqIGlubGluZV9zZXRfcmV0 dXJuaW5nX2Z1bmN0aW9uX3dpdGhfc3VwcG9ydAorICoKKyAqIFRoaXMgaW1wbGVtZW50cyBpbmxp bmVfc2V0X3JldHVybmluZ19mdW5jdGlvbiBmb3IgZnVuY3Rpb25zIHdpdGgKKyAqIGEgc3VwcG9y dCBmdW5jdGlvbiB0aGF0IGNhbiBoYW5kbGUgU3VwcG9ydFJlcXVlc3RJbmxpbmVTUkYuCisgKiBX ZSBjaGVjayBmZXdlciB0aGluZ3MgdGhhbiBpbmxpbmVfc3FsX3NldF9yZXR1cm5pbmdfZnVuY3Rp b24sCisgKiBzbyB0aGF0IHN1cHBvcnQgZnVuY3Rpb25zIGNhbiBtYWtlIHRoZWlyIG93biBkZWNp c2lvbnMgYWJvdXQgd2hhdAorICogdG8gaGFuZGxlLiAgRm9yIGluc3RhbmNlIHdlIGRvbid0IGZv cmJpZCBhIFZPTEFUSUxFIGZ1bmN0aW9uLgorICovCitzdGF0aWMgUXVlcnkgKgoraW5saW5lX3Nl dF9yZXR1cm5pbmdfZnVuY3Rpb25fd2l0aF9zdXBwb3J0KFBsYW5uZXJJbmZvICpyb290LCBSYW5n ZVRibEVudHJ5ICpydGUsCisJCQkJCQkJCQkJICAgUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAor CQkJCQkJCQkJCSAgIEZ1bmNFeHByICpmZXhwciwgSGVhcFR1cGxlIGZ1bmNfdHVwbGUsCisJCQkJ CQkJCQkJICAgRm9ybV9wZ19wcm9jIGZ1bmNmb3JtKQoreworCVN1cHBvcnRSZXF1ZXN0SW5saW5l U1JGIHJlcTsKKwlOb2RlCSAgICpuZXdub2RlOworCisJLyogSXQgbXVzdCBoYXZlIGEgc3VwcG9y dCBmdW5jdGlvbi4gKi8KKwlBc3NlcnQoZnVuY2Zvcm0tPnByb3N1cHBvcnQpOworCisJcmVxLnJv b3QgPSByb290OworCXJlcS50eXBlID0gVF9TdXBwb3J0UmVxdWVzdElubGluZVNSRjsKKwlyZXEu cnRmdW5jID0gcnRmdW5jOworCXJlcS5wcm9jID0gZnVuY190dXBsZTsKKworCW5ld25vZGUgPSAo Tm9kZSAqKQorCQlEYXR1bUdldFBvaW50ZXIoT2lkRnVuY3Rpb25DYWxsMShmdW5jZm9ybS0+cHJv c3VwcG9ydCwKKwkJCQkJCQkJCQkgUG9pbnRlckdldERhdHVtKCZyZXEpKSk7CisKKwlpZiAoIW5l d25vZGUpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFJc0EobmV3bm9kZSwgUXVlcnkpKQorCQll bG9nKEVSUk9SLAorCQkJICJHb3QgdW5leHBlY3RlZCBub2RlIHR5cGUgJWQgZnJvbSAlcyBmb3Ig ZnVuY3Rpb24gJXMiLAorCQkJIG5ld25vZGUtPnR5cGUsICJTdXBwb3J0UmVxdWVzdElubGluZVNS RiIsIE5hbWVTdHIoZnVuY2Zvcm0tPnByb25hbWUpKTsKKworCXJldHVybiAoUXVlcnkgKikgbmV3 bm9kZTsKK30KKwogLyoKICAqIGlubGluZV9zcWxfc2V0X3JldHVybmluZ19mdW5jdGlvbgogICoK QEAgLTUzMTAsMTAgKzUzNTEsMTAgQEAgaW5saW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9u KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUsCiAKIC8qCiAgKiBpbmxpbmVf c2V0X3JldHVybmluZ19mdW5jdGlvbgotICoJCUF0dGVtcHQgdG8gImlubGluZSIgYW4gU1FMIHNl dC1yZXR1cm5pbmcgZnVuY3Rpb24gaW4gdGhlIEZST00gY2xhdXNlLgorICoJCUF0dGVtcHQgdG8g ImlubGluZSIgYSBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uIGluIHRoZSBGUk9NIGNsYXVzZS4KICAq CiAgKiAicnRlIiBpcyBhbiBSVEVfRlVOQ1RJT04gcmFuZ2V0YWJsZSBlbnRyeS4gIElmIGl0IHJl cHJlc2VudHMgYSBjYWxsIG9mIGEKLSAqIHNldC1yZXR1cm5pbmcgU1FMIGZ1bmN0aW9uIHRoYXQg Y2FuIHNhZmVseSBiZSBpbmxpbmVkLCBleHBhbmQgdGhlIGZ1bmN0aW9uCisgKiBzZXQtcmV0dXJu aW5nIGZ1bmN0aW9uIHRoYXQgY2FuIHNhZmVseSBiZSBpbmxpbmVkLCBleHBhbmQgdGhlIGZ1bmN0 aW9uCiAgKiBhbmQgcmV0dXJuIHRoZSBzdWJzdGl0dXRlIFF1ZXJ5IHN0cnVjdHVyZS4gIE90aGVy d2lzZSwgcmV0dXJuIE5VTEwuCiAgKgogICogV2UgYXNzdW1lIHRoYXQgdGhlIFJURSdzIGV4cHJl c3Npb24gaGFzIGFscmVhZHkgYmVlbiBwdXQgdGhyb3VnaApAQCAtNTM0MSw3ICs1MzgyLDcgQEAg aW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJs RW50cnkgKnJ0ZSkKIAlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OwogCU1lbW9y eUNvbnRleHQgb2xkY3h0OwogCU1lbW9yeUNvbnRleHQgbXljeHQ7Ci0JUXVlcnkJICAgKnF1ZXJ5 dHJlZTsKKwlRdWVyeQkgICAqcXVlcnl0cmVlID0gTlVMTDsKIAogCUFzc2VydChydGUtPnJ0ZWtp bmQgPT0gUlRFX0ZVTkNUSU9OKTsKIApAQCAtNTQyOSw5ICs1NDcwLDE5IEBAIGlubGluZV9zZXRf cmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUp CiAJaWYgKCFoZWFwX2F0dGlzbnVsbChmdW5jX3R1cGxlLCBBbnVtX3BnX3Byb2NfcHJvY29uZmln LCBOVUxMKSkKIAkJZ290byBmYWlsOwogCi0JcXVlcnl0cmVlID0gaW5saW5lX3NxbF9zZXRfcmV0 dXJuaW5nX2Z1bmN0aW9uKHJvb3QsIHJ0ZSwgcnRmdW5jLCBmZXhwciwKLQkJCQkJCQkJCQkJCSAg ZnVuY19vaWQsIGZ1bmNfdHVwbGUsIGZ1bmNmb3JtLAotCQkJCQkJCQkJCQkJICBzcmMpOworCS8q CisJICogSWYgdGhlIGZ1bmN0aW9uIGhhcyBhbiBhdHRhY2hlZCBzdXBwb3J0IGZ1bmN0aW9uIHRo YXQgY2FuIGhhbmRsZQorCSAqIFN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGLCB0aGVuIGF0dGVtcHQg dG8gaW5saW5lIHdpdGggdGhhdC4gUmV0dXJuIHRoZQorCSAqIHJlc3VsdCBpZiB3ZSBnZXQgb25l LCBvdGhlcndpc2UgcHJvY2VlZC4KKwkgKi8KKwlpZiAoZnVuY2Zvcm0tPnByb3N1cHBvcnQpCisJ CXF1ZXJ5dHJlZSA9IGlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uX3dpdGhfc3VwcG9ydChy b290LCBydGUsIHJ0ZnVuYywgZmV4cHIsCisJCQkJCQkJCQkJCQkJCQkgICBmdW5jX3R1cGxlLCBm dW5jZm9ybSk7CisKKwkvKiBUcnkgdG8gaW5saW5lIGF1dG9tYXRpY2FsbHkgKi8KKwlpZiAoIXF1 ZXJ5dHJlZSkKKwkJcXVlcnl0cmVlID0gaW5saW5lX3NxbF9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9u KHJvb3QsIHJ0ZSwgcnRmdW5jLCBmZXhwciwKKwkJCQkJCQkJCQkJCQkgIGZ1bmNfb2lkLCBmdW5j X3R1cGxlLCBmdW5jZm9ybSwgc3JjKTsKIAogCWlmICghcXVlcnl0cmVlKQogCQlnb3RvIGZhaWw7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL3N1cHBvcnRub2Rlcy5oCmluZGV4IDljMDQ3Y2M0MDFiLi45NGY4YTUyZGUyYiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVzLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpZm5kZWYgU1VQ UE9SVE5PREVTX0gKICNkZWZpbmUgU1VQUE9SVE5PREVTX0gKIAorI2luY2x1ZGUgImNhdGFsb2cv cGdfcHJvYy5oIgogI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgogCiBzdHJ1Y3QgUGxhbm5l ckluZm87CQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwYXRobm9kZXMuaCBoZXJlICovCkBAIC02OSw2 ICs3MCwzOSBAQCB0eXBlZGVmIHN0cnVjdCBTdXBwb3J0UmVxdWVzdFNpbXBsaWZ5CiAJRnVuY0V4 cHIgICAqZmNhbGw7CQkJLyogRnVuY3Rpb24gY2FsbCB0byBiZSBzaW1wbGlmaWVkICovCiB9IFN1 cHBvcnRSZXF1ZXN0U2ltcGxpZnk7CiAKKy8qCisgKiBUaGUgSW5saW5lU1JGIHJlcXVlc3QgYWxs b3dzIHRoZSBzdXBwb3J0IGZ1bmN0aW9uIHRvIHBlcmZvcm0gcGxhbi10aW1lCisgKiBzaW1wbGlm aWNhdGlvbiBvZiBhIGNhbGwgdG8gaXRzIHRhcmdldCBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uLiBG b3IKKyAqIGV4YW1wbGUgYSBQTC9wZ1NRTCBmdW5jdGlvbiBjb3VsZCBidWlsZCBhIGR5bmFtaWMg U1FMIHF1ZXJ5IGFuZCBleGVjdXRlIGl0LgorICogTm9ybWFsbHkgb25seSBTUUwgZnVuY3Rpb25z IGNhbiBiZSBpbmxpbmVkLCBidXQgd2l0aCB0aGlzIHN1cHBvcnQgZnVuY3Rpb24KKyAqIHRoZSBk eW5hbWljIHF1ZXJ5IGNhbiBiZSBpbmxpbmVkIGFzIHdlbGwuCisgKgorICogVGhlIHBsYW5uZXIn cyBQbGFubmVySW5mbyAicm9vdCIgaXMgdHlwaWNhbGx5IG5vdCBuZWVkZWQsIGJ1dCBjYW4gYmUK KyAqIGNvbnN1bHRlZCBpZiBpdCdzIG5lY2Vzc2FyeSB0byBvYnRhaW4gaW5mbyBhYm91dCBWYXJz IHByZXNlbnQgaW4KKyAqIHRoZSBnaXZlbiBub2RlIHRyZWUuICBCZXdhcmUgdGhhdCByb290IGNv dWxkIGJlIE5VTEwgaW4gc29tZSB1c2FnZXMuCisgKgorICogInJ0ZnVuYyIgd2lsbCBiZSBhIFJh bmdlVGJsRnVuY3Rpb24gbm9kZSBmb3IgdGhlIGZ1bmN0aW9uIGJlaW5nIHJlcGxhY2VkLgorICog VGhlIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgcnRmdW5jLT5mdW5jdGlvbnMg Y29udGFpbnMgYQorICogc2luZ2xlIEZ1bmNFeHByIG5vZGUuIChST1dTIEZST00gaXMgb25lIHdh eSB0byBnZXQgbW9yZSB0aGFuIG9uZS4pCisgKgorICogInByb2MiIHdpbGwgYmUgdGhlIEhlYXBU dXBsZSBmb3IgdGhlIHBnX3Byb2MgcmVjb3JkIG9mIHRoZSBmdW5jdGlvbiBiZWluZworICogcmVw bGFjZWQuCisgKgorICogVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBzZW1hbnRpY2FsbHktZXF1aXZh bGVudCB0cmFuc2Zvcm1lZCBub2RlIHRyZWUsCisgKiBvciBOVUxMIGlmIG5vIHNpbXBsaWZpY2F0 aW9uIGNvdWxkIGJlIHBlcmZvcm1lZC4gIEl0IHNob3VsZCBiZSBhbGxvY2F0ZWQKKyAqIGluIHRo ZSBDdXJyZW50TWVtb3J5Q29udGV4dC4gRG8gKm5vdCogcmV0dXJuIG9yIG1vZGlmeSB0aGUgRnVu Y0V4cHIgbm9kZQorICogdHJlZSwgYXMgaXQgaXNuJ3QgcmVhbGx5IGEgc2VwYXJhdGVseSBhbGxv Y2F0ZWQgTm9kZS4gIEJ1dCBpdCdzIG9rYXkgdG8KKyAqIHVzZSBpdHMgYXJncywgb3IgcGFydHMg b2YgaXQsIGluIHRoZSByZXN1bHQgdHJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3VwcG9ydFJl cXVlc3RJbmxpbmVTUkYKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJc3RydWN0IFBsYW5uZXJJbmZv ICpyb290OwkvKiBQbGFubmVyJ3MgaW5mcmFzdHJ1Y3R1cmUgKi8KKwlSYW5nZVRibEZ1bmN0aW9u ICpydGZ1bmM7CS8qIEZ1bmN0aW9uIGNhbGwgdG8gYmUgc2ltcGxpZmllZCAqLworCUhlYXBUdXBs ZQlwcm9jOwkJCS8qIEZ1bmN0aW9uIGRlZmluaXRpb24gZnJvbSBwZ19wcm9jICovCit9IFN1cHBv cnRSZXF1ZXN0SW5saW5lU1JGOworCiAvKgogICogVGhlIFNlbGVjdGl2aXR5IHJlcXVlc3QgYWxs b3dzIHRoZSBzdXBwb3J0IGZ1bmN0aW9uIHRvIHByb3ZpZGUgYQogICogc2VsZWN0aXZpdHkgZXN0 aW1hdGUgZm9yIGEgZnVuY3Rpb24gYXBwZWFyaW5nIGF0IHRvcCBsZXZlbCBvZiBhIFdIRVJFCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0CmluZGV4IGMzYjJi OWQ4NjAzLi4xMzM4OGViYzcxNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9taXNjX2Z1bmN0aW9ucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNj X2Z1bmN0aW9ucy5vdXQKQEAgLTYwMSw2ICs2MDEsMTEgQEAgQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf c3VwcG9ydF9mdW5jKGludGVybmFsKQogICAgIFJFVFVSTlMgaW50ZXJuYWwKICAgICBBUyA6J3Jl Z3Jlc3NsaWInLCAndGVzdF9zdXBwb3J0X2Z1bmMnCiAgICAgTEFOR1VBR0UgQyBTVFJJQ1Q7Cist LSBXaXRoIGEgc3VwcG9ydCBmdW5jdGlvbiB0aGF0IGlubGluZXMgU1JGcworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmMoaW50ZXJuYWwpCisgICAgUkVUVVJOUyBp bnRlcm5hbAorICAgIEFTIDoncmVncmVzc2xpYicsICd0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9m dW5jJworICAgIExBTkdVQUdFIEMgU1RSSUNUOwogQUxURVIgRlVOQ1RJT04gbXlfaW50X2VxKGlu dCwgaW50KSBTVVBQT1JUIHRlc3Rfc3VwcG9ydF9mdW5jOwogRVhQTEFJTiAoQ09TVFMgT0ZGKQog U0VMRUNUICogRlJPTSB0ZW5rMSBhIEpPSU4gdGVuazEgYiBPTiBhLnVuaXF1ZTEgPSBiLnVuaXF1 ZTEKQEAgLTc3Nyw2ICs3ODIsMjEzIEBAIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAgRnVu Y3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZyAgKGNvc3Q9Ti4uTiByb3dzPTEwMDAgd2lk dGg9TikKICgxIHJvdykKIAorLS0KKy0tIFRlc3QgaW5saW5pbmcgUEwvcGdTUUwgZnVuY3Rpb25z CistLQorLS0gUkVUVVJOUyBTRVRPRiBURVhUOgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04g Zm9vX2Zyb21fYmFyKGNvbG5hbWUgVEVYVCwgdGFibGVuYW1lIFRFWFQsIGZpbHRlciBURVhUKQor UkVUVVJOUyBTRVRPRiBURVhUCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkZnVuY3Rpb24kCitERUNM QVJFCisgIHNxbCBURVhUOworQkVHSU4KKyAgc3FsIDo9IGZvcm1hdCgnU0VMRUNUICVJOjp0ZXh0 IEZST00gJUknLCBjb2xuYW1lLCB0YWJsZW5hbWUpOworICBJRiBmaWx0ZXIgSVMgTk9UIE5VTEwg VEhFTgorICAgIHNxbCA6PSBDT05DQVQoc3FsLCBmb3JtYXQoJyBXSEVSRSAlSTo6dGV4dCA9ICQx JywgY29sbmFtZSkpOworICBFTkQgSUY7CisgIFJFVFVSTiBRVUVSWSBFWEVDVVRFIHNxbCBVU0lO RyBmaWx0ZXI7CitFTkQ7CiskZnVuY3Rpb24kIFNUQUJMRSBMRUFLUFJPT0Y7CitTRUxFQ1QgKiBG Uk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsKKyAgIGZvb19mcm9tX2Jh ciAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2ghCisgaGkgZGUgaG8gbmVpZ2hib3IKKygy IHJvd3MpCisKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdk b2ghJyk7CisgZm9vX2Zyb21fYmFyIAorLS0tLS0tLS0tLS0tLS0KKyBkb2ghCisoMSByb3cpCisK K0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVM TCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBmb29f ZnJvbV9iYXIgIChjb3N0PTAuMjUuLjEwLjI1IHJvd3M9MTAwMCB3aWR0aD0zMikKKygxIHJvdykK KworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAn ZG9oIScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24g Zm9vX2Zyb21fYmFyICAoY29zdD0wLjI1Li4xMC4yNSByb3dzPTEwMDAgd2lkdGg9MzIpCisoMSBy b3cpCisKK0FMVEVSIEZVTkNUSU9OIGZvb19mcm9tX2JhcihURVhULCBURVhULCBURVhUKSBTVVBQ T1JUIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmM7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsKKyAgIGZvb19mcm9tX2JhciAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0KKyBkb2ghCisgaGkgZGUgaG8gbmVpZ2hib3IKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7CisgZm9v X2Zyb21fYmFyIAorLS0tLS0tLS0tLS0tLS0KKyBkb2ghCisoMSByb3cpCisKK0VYUExBSU4gU0VM RUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHRleHRfdGJsICAoY29zdD0wLjAwLi4xLjAyIHJvd3M9MiB3aWR0aD0zMikKKygx IHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90 YmwnLCAnZG9oIScpOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZXh0X3RibCAgKGNvc3Q9MC4wMC4uMS4w MiByb3dzPTEgd2lkdGg9MzIpCisgICBGaWx0ZXI6IChmMSA9ICdkb2ghJzo6dGV4dCkKKygyIHJv d3MpCisKK0RST1AgRlVOQ1RJT04gZm9vX2Zyb21fYmFyOworLS0gUkVUVVJOUyBTRVRPRiBSRUNP UkQ6CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29sbmFtZSBURVhU LCB0YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFNFVE9GIFJFQ09SRAorTEFO R1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICBzcWwgVEVYVDsKK0JFR0lO CisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6dGV4dCBGUk9NICVJJywgY29sbmFtZSwgdGFi bGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5PVCBOVUxMIFRIRU4KKyAgICBzcWwgOj0gQ09OQ0FU KHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6OnRleHQgPSAkMScsIGNvbG5hbWUpKTsKKyAgRU5EIElG OworICBSRVRVUk4gUVVFUlkgRVhFQ1VURSBzcWwgVVNJTkcgZmlsdGVyOworRU5EOworJGZ1bmN0 aW9uJCBTVEFCTEUgTEVBS1BST09GOworU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywg J3RleHRfdGJsJywgTlVMTCkgQVMgYmFyKGZvbyBURVhUKTsKKyAgICAgICAgZm9vICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2ghCisgaGkgZGUgaG8gbmVpZ2hib3IKKygyIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJykg QVMgYmFyKGZvbyBURVhUKTsKKyBmb28gIAorLS0tLS0tCisgZG9oIQorKDEgcm93KQorCitFWFBM QUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFT IGJhcihmb28gVEVYVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBG dW5jdGlvbiBTY2FuIG9uIGZvb19mcm9tX2JhciBiYXIgIChjb3N0PTAuMjUuLjEwLjI1IHJvd3M9 MTAwMCB3aWR0aD0zMikKKygxIHJvdykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpIEFTIGJhcihmb28gVEVYVCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9uIGZvb19mcm9t X2JhciBiYXIgIChjb3N0PTAuMjUuLjEwLjI1IHJvd3M9MTAwMCB3aWR0aD0zMikKKygxIHJvdykK KworQUxURVIgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKFRFWFQsIFRFWFQsIFRFWFQpIFNVUFBPUlQg dGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYzsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFy KCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihmb28gVEVYVCk7CisgICAgICAgIGZvbyAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9oIQorIGhpIGRlIGhvIG5laWdoYm9yCiso MiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAn ZG9oIScpIEFTIGJhcihmb28gVEVYVCk7CisgZm9vICAKKy0tLS0tLQorIGRvaCEKKygxIHJvdykK KworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBO VUxMKSBBUyBiYXIoZm9vIFRFWFQpOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZXh0X3RibCAgKGNvc3Q9 MC4wMC4uMS4wMiByb3dzPTIgd2lkdGg9MzIpCisoMSByb3cpCisKK0VYUExBSU4gU0VMRUNUICog RlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKSBBUyBiYXIoZm9vIFRF WFQpOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0ZXh0X3RibCAgKGNvc3Q9MC4wMC4uMS4wMiByb3dzPTEg d2lkdGg9MzIpCisgICBGaWx0ZXI6IChmMSA9ICdkb2ghJzo6dGV4dCkKKygyIHJvd3MpCisKK0RS T1AgRlVOQ1RJT04gZm9vX2Zyb21fYmFyOworLS0gUkVUVVJOUyBUQUJMRToKK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OIGZvb19mcm9tX2Jhcihjb2xuYW1lIFRFWFQsIHRhYmxlbmFtZSBURVhU LCBmaWx0ZXIgVEVYVCkKK1JFVFVSTlMgVEFCTEUoZm9vIFRFWFQpCitMQU5HVUFHRSBwbHBnc3Fs CitBUyAkZnVuY3Rpb24kCitERUNMQVJFCisgIHNxbCBURVhUOworQkVHSU4KKyAgc3FsIDo9IGZv cm1hdCgnU0VMRUNUICVJOjp0ZXh0IEZST00gJUknLCBjb2xuYW1lLCB0YWJsZW5hbWUpOworICBJ RiBmaWx0ZXIgSVMgTk9UIE5VTEwgVEhFTgorICAgIHNxbCA6PSBDT05DQVQoc3FsLCBmb3JtYXQo JyBXSEVSRSAlSTo6dGV4dCA9ICQxJywgY29sbmFtZSkpOworICBFTkQgSUY7CisgIFJFVFVSTiBR VUVSWSBFWEVDVVRFIHNxbCBVU0lORyBmaWx0ZXI7CitFTkQ7CiskZnVuY3Rpb24kIFNUQUJMRSBM RUFLUFJPT0Y7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBO VUxMKTsKKyAgICAgICAgZm9vICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2ghCisg aGkgZGUgaG8gbmVpZ2hib3IKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFy KCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7CisgZm9vICAKKy0tLS0tLQorIGRvaCEKKygxIHJv dykKKworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90Ymwn LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGdW5jdGlvbiBTY2FuIG9u IGZvb19mcm9tX2JhciAgKGNvc3Q9MC4yNS4uMTAuMjUgcm93cz0xMDAwIHdpZHRoPTMyKQorKDEg cm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3Ri bCcsICdkb2ghJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2Nh biBvbiBmb29fZnJvbV9iYXIgIChjb3N0PTAuMjUuLjEwLjI1IHJvd3M9MTAwMCB3aWR0aD0zMikK KygxIHJvdykKKworQUxURVIgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKFRFWFQsIFRFWFQsIFRFWFQp IFNVUFBPUlQgdGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYzsKK1NFTEVDVCAqIEZST00gZm9v X2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworICAgICAgICBmb28gICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLQorIGRvaCEKKyBoaSBkZSBobyBuZWlnaGJvcgorKDIgcm93cykK KworU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsK KyBmb28gIAorLS0tLS0tCisgZG9oIQorKDEgcm93KQorCitFWFBMQUlOIFNFTEVDVCAqIEZST00g Zm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiB0 ZXh0X3RibCAgKGNvc3Q9MC4wMC4uMS4wMiByb3dzPTIgd2lkdGg9MzIpCisoMSByb3cpCisKK0VY UExBSU4gU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEn KTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gdGV4dF90YmwgIChjb3N0PTAuMDAuLjEuMDIgcm93cz0xIHdp ZHRoPTMyKQorICAgRmlsdGVyOiAoZjEgPSAnZG9oISc6OnRleHQpCisoMiByb3dzKQorCitEUk9Q IEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKIC0tIFRlc3QgZnVuY3Rpb25zIGZvciBjb250cm9sIGRh dGEKIFNFTEVDVCBjb3VudCgqKSA+IDAgQVMgb2sgRlJPTSBwZ19jb250cm9sX2NoZWNrcG9pbnQo KTsKICBvayAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcy5jIGIvc3JjL3Rl c3QvcmVncmVzcy9yZWdyZXNzLmMKaW5kZXggM2RiYmEwNjkwMjQuLmVhZGI0MDM2OWQ0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MuYworKysgYi9zcmMvdGVzdC9yZWdyZXNz L3JlZ3Jlc3MuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNl LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFy LmgiCkBAIC0zOSwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIJLyogZm9yIE1BWF9CQUNLRU5EUyAqLwogI2lu Y2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNs dWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZ2VvX2RlY2xzLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUg InV0aWxzL3R5cGNhY2hlLmgiCiAKICNkZWZpbmUgRVhQRUNUX1RSVUUoZXhwcikJXApAQCAtODAz LDYgKzgwNiwxMTcgQEAgdGVzdF9zdXBwb3J0X2Z1bmMoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19S RVRVUk5fUE9JTlRFUihyZXQpOwogfQogCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfaW5saW5l X3NyZl9zdXBwb3J0X2Z1bmMpOworRGF0dW0KK3Rlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmMo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlOb2RlCSAgICpyYXdyZXEgPSAoTm9kZSAqKSBQR19HRVRB UkdfUE9JTlRFUigwKTsKKwlRdWVyeQkgICAqcXVlcnl0cmVlID0gTlVMTDsKKworCWlmIChJc0Eo cmF3cmVxLCBTdXBwb3J0UmVxdWVzdElubGluZVNSRikpCisJeworCQkvKgorCQkgKiBBc3N1bWUg dGhhdCB0aGUgdGFyZ2V0IGlzIGZvb19mcm9tX2JhcjsgdGhhdCdzIHNhZmUgYXMgbG9uZyBhcyB3 ZQorCQkgKiBkb24ndCBhdHRhY2ggdGhpcyB0byBhbnkgb3RoZXIgc2V0LXJldHVybmluZyBmdW5j dGlvbi4KKwkJICovCisJCVN1cHBvcnRSZXF1ZXN0SW5saW5lU1JGICpyZXEgPSAoU3VwcG9ydFJl cXVlc3RJbmxpbmVTUkYgKikgcmF3cmVxOworCQlTdHJpbmdJbmZvRGF0YSBzcWw7CisJCVJhbmdl VGJsRnVuY3Rpb24gKnJ0ZnVuYyA9IHJlcS0+cnRmdW5jOworCQlGdW5jRXhwciAgICpleHByID0g KEZ1bmNFeHByICopIHJ0ZnVuYy0+ZnVuY2V4cHI7CisJCU5vZGUJICAgKm5vZGU7CisJCUNvbnN0 CSAgICpjOworCQljaGFyCSAgICpjb2xuYW1lOworCQljaGFyCSAgICp0YWJsZW5hbWU7CisJCVNR TEZ1bmN0aW9uUGFyc2VJbmZvUHRyIHBpbmZvOworCQlMaXN0CSAgICpyYXdfcGFyc2V0cmVlX2xp c3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0OworCisJCWlmIChsaXN0X2xlbmd0aChleHBy LT5hcmdzKSAhPSAzKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsIChlcnJtc2coInRlc3RfaW5s aW5lX3NyZl9zdXBwb3J0X2Z1bmMgY2FsbGVkIHdpdGggJWQgYXJncyBidXQgZXhwZWN0ZWQgMyIs IGxpc3RfbGVuZ3RoKGV4cHItPmFyZ3MpKSkpOworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7 CisJCX0KKworCQkvKiBHZXQgY29sbmFtZSAqLworCQlub2RlID0gbGluaXRpYWwoZXhwci0+YXJn cyk7CisJCWlmICghSXNBKG5vZGUsIENvbnN0KSkKKwkJeworCQkJZXJlcG9ydChXQVJOSU5HLCAo ZXJybXNnKCJ0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jIGNhbGxlZCB3aXRoIG5vbi1Db25z dCBwYXJhbWV0ZXJzIikpKTsKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCQl9CisKKwkJ YyA9IChDb25zdCAqKSBub2RlOworCQlpZiAoYy0+Y29uc3R0eXBlICE9IFRFWFRPSUQpCisJCXsK KwkJCWVyZXBvcnQoV0FSTklORywgKGVycm1zZygidGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVu YyBjYWxsZWQgd2l0aCBub24tVEVYVCBwYXJhbWV0ZXJzIikpKTsKKwkJCVBHX1JFVFVSTl9QT0lO VEVSKE5VTEwpOworCQl9CisJCWNvbG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGMtPmNvbnN0 dmFsdWUpOworCisJCS8qIEdldCB0YWJsZW5hbWUgKi8KKwkJbm9kZSA9IGxzZWNvbmQoZXhwci0+ YXJncyk7CisJCWlmICghSXNBKG5vZGUsIENvbnN0KSkKKwkJeworCQkJZXJlcG9ydChXQVJOSU5H LCAoZXJybXNnKCJ0ZXN0X2lubGluZV9zcmZfc3VwcG9ydF9mdW5jIGNhbGxlZCB3aXRoIG5vbi1D b25zdCBwYXJhbWV0ZXJzIikpKTsKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCQl9CisK KwkJYyA9IChDb25zdCAqKSBub2RlOworCQlpZiAoYy0+Y29uc3R0eXBlICE9IFRFWFRPSUQpCisJ CXsKKwkJCWVyZXBvcnQoV0FSTklORywgKGVycm1zZygidGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRf ZnVuYyBjYWxsZWQgd2l0aCBub24tVEVYVCBwYXJhbWV0ZXJzIikpKTsKKwkJCVBHX1JFVFVSTl9Q T0lOVEVSKE5VTEwpOworCQl9CisJCXRhYmxlbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYy0+ Y29uc3R2YWx1ZSk7CisKKwkJaW5pdFN0cmluZ0luZm8oJnNxbCk7CisJCWFwcGVuZFN0cmluZ0lu Zm8oJnNxbCwgIlNFTEVDVCAlczo6dGV4dCBGUk9NICVzIiwgcXVvdGVfaWRlbnRpZmllcihjb2xu YW1lKSwgcXVvdGVfaWRlbnRpZmllcih0YWJsZW5hbWUpKTsKKworCQkvKiBHZXQgZmlsdGVyIGlm IHByZXNlbnQgKi8KKwkJbm9kZSA9IGx0aGlyZChleHByLT5hcmdzKTsKKwkJaWYgKCEoSXNBKG5v ZGUsIENvbnN0KSAmJiAoKENvbnN0ICopIG5vZGUpLT5jb25zdGlzbnVsbCkpCisJCXsKKwkJCS8q IE9ubHkgZmlsdGVyIGlmICQzIGlzIENvbnN0ICovCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZzcWws ICIgV0hFUkUgJXM6OnRleHQgPSAkMyIsIHF1b3RlX2lkZW50aWZpZXIoY29sbmFtZSkpOworCQl9 CisKKwkJLyogQnVpbGQgYSBTUUxGdW5jdGlvblBhcnNlSW5mby4gKi8KKworCQlwaW5mbyA9IHBy ZXBhcmVfc3FsX2ZuX3BhcnNlX2luZm8ocmVxLT5wcm9jLAorCQkJCQkJCQkJCSAgKE5vZGUgKikg ZXhwciwKKwkJCQkJCQkJCQkgIGV4cHItPmlucHV0Y29sbGlkKTsKKworCQkvKiBQYXJzZSB0aGUg U1FMLiAqLworCQlyYXdfcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShzcWwuZGF0YSk7 CisJCWlmIChsaXN0X2xlbmd0aChyYXdfcGFyc2V0cmVlX2xpc3QpICE9IDEpCisJCXsKKwkJCWVy ZXBvcnQoV0FSTklORywgKGVycm1zZygidGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYyBwYXJz ZWQgdG8gbW9yZSB0aGFuIG9uZSBub2RlIikpKTsKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwp OworCQl9CisKKwkJLyogQW5hbHl6ZSB0aGUgcGFyc2UgdHJlZSBhcyBpZiBpdCB3ZXJlIGEgU1FM LWxhbmd1YWdlIGJvZHkuICovCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3 cml0ZV93aXRoY2IobGluaXRpYWwocmF3X3BhcnNldHJlZV9saXN0KSwKKwkJCQkJCQkJCQkJCQkg ICBzcWwuZGF0YSwKKwkJCQkJCQkJCQkJCQkgICAoUGFyc2VyU2V0dXBIb29rKSBzcWxfZm5fcGFy c2VyX3NldHVwLAorCQkJCQkJCQkJCQkJCSAgIHBpbmZvLCBOVUxMKTsKKwkJaWYgKGxpc3RfbGVu Z3RoKHF1ZXJ5dHJlZV9saXN0KSAhPSAxKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsIChlcnJt c2coInRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmMgcmV3cm90ZSB0byBtb3JlIHRoYW4gb25l IG5vZGUiKSkpOworCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CisJCX0KKworCQlxdWVyeXRy ZWUgPSBsaW5pdGlhbChxdWVyeXRyZWVfbGlzdCk7CisJCWlmICghSXNBKHF1ZXJ5dHJlZSwgUXVl cnkpKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsIChlcnJtc2coInRlc3RfaW5saW5lX3NyZl9z dXBwb3J0X2Z1bmMgZGlkbid0IHBhcnNlIHRvIGEgUXVlcnkiKSwKKwkJCQkJCQkgIGVycmRldGFp bCgiR290IHRoaXMgaW5zdGVhZDogJXMiLCBub2RlVG9TdHJpbmcocXVlcnl0cmVlKSkpKTsKKwkJ CVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworCQl9CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIo cXVlcnl0cmVlKTsKK30KKwogUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X29wY2xhc3Nfb3B0aW9u c19mdW5jKTsKIERhdHVtCiB0ZXN0X29wY2xhc3Nfb3B0aW9uc19mdW5jKFBHX0ZVTkNUSU9OX0FS R1MpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKaW5kZXggMjM3OTJjNDEz MmEuLjU2YzZlN2E4YTg4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1 bmN0aW9ucy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3Fs CkBAIC0yNDgsNiArMjQ4LDEyIEBAIENSRUFURSBGVU5DVElPTiB0ZXN0X3N1cHBvcnRfZnVuYyhp bnRlcm5hbCkKICAgICBBUyA6J3JlZ3Jlc3NsaWInLCAndGVzdF9zdXBwb3J0X2Z1bmMnCiAgICAg TEFOR1VBR0UgQyBTVFJJQ1Q7CiAKKy0tIFdpdGggYSBzdXBwb3J0IGZ1bmN0aW9uIHRoYXQgaW5s aW5lcyBTUkZzCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYyhp bnRlcm5hbCkKKyAgICBSRVRVUk5TIGludGVybmFsCisgICAgQVMgOidyZWdyZXNzbGliJywgJ3Rl c3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1bmMnCisgICAgTEFOR1VBR0UgQyBTVFJJQ1Q7CisKIEFM VEVSIEZVTkNUSU9OIG15X2ludF9lcShpbnQsIGludCkgU1VQUE9SVCB0ZXN0X3N1cHBvcnRfZnVu YzsKIAogRVhQTEFJTiAoQ09TVFMgT0ZGKQpAQCAtMzQ5LDYgKzM1NSw4NiBAQCBTRUxFQ1QgZXhw bGFpbl9tYXNrX2Nvc3RzKCQkCiBTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygyNS4wLCAy LjAsIDAuMCkgZyhzKTskJCwKIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAKKy0tCistLSBU ZXN0IGlubGluaW5nIFBML3BnU1FMIGZ1bmN0aW9ucworLS0KKworLS0gUkVUVVJOUyBTRVRPRiBU RVhUOgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKGNvbG5hbWUgVEVY VCwgdGFibGVuYW1lIFRFWFQsIGZpbHRlciBURVhUKQorUkVUVVJOUyBTRVRPRiBURVhUCitMQU5H VUFHRSBwbHBnc3FsCitBUyAkZnVuY3Rpb24kCitERUNMQVJFCisgIHNxbCBURVhUOworQkVHSU4K KyAgc3FsIDo9IGZvcm1hdCgnU0VMRUNUICVJOjp0ZXh0IEZST00gJUknLCBjb2xuYW1lLCB0YWJs ZW5hbWUpOworICBJRiBmaWx0ZXIgSVMgTk9UIE5VTEwgVEhFTgorICAgIHNxbCA6PSBDT05DQVQo c3FsLCBmb3JtYXQoJyBXSEVSRSAlSTo6dGV4dCA9ICQxJywgY29sbmFtZSkpOworICBFTkQgSUY7 CisgIFJFVFVSTiBRVUVSWSBFWEVDVVRFIHNxbCBVU0lORyBmaWx0ZXI7CitFTkQ7CiskZnVuY3Rp b24kIFNUQUJMRSBMRUFLUFJPT0Y7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAn dGV4dF90YmwnLCBOVUxMKTsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0 X3RibCcsICdkb2ghJyk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScs ICd0ZXh0X3RibCcsIE5VTEwpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2Jhcign ZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworQUxURVIgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKFRF WFQsIFRFWFQsIFRFWFQpIFNVUFBPUlQgdGVzdF9pbmxpbmVfc3JmX3N1cHBvcnRfZnVuYzsKK1NF TEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpOworU0VMRUNU ICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsKK0VYUExBSU4g U0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CitFWFBM QUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7 CitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKy0tIFJFVFVSTlMgU0VUT0YgUkVDT1JEOgor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZm9vX2Zyb21fYmFyKGNvbG5hbWUgVEVYVCwgdGFi bGVuYW1lIFRFWFQsIGZpbHRlciBURVhUKQorUkVUVVJOUyBTRVRPRiBSRUNPUkQKK0xBTkdVQUdF IHBscGdzcWwKK0FTICRmdW5jdGlvbiQKK0RFQ0xBUkUKKyAgc3FsIFRFWFQ7CitCRUdJTgorICBz cWwgOj0gZm9ybWF0KCdTRUxFQ1QgJUk6OnRleHQgRlJPTSAlSScsIGNvbG5hbWUsIHRhYmxlbmFt ZSk7CisgIElGIGZpbHRlciBJUyBOT1QgTlVMTCBUSEVOCisgICAgc3FsIDo9IENPTkNBVChzcWws IGZvcm1hdCgnIFdIRVJFICVJOjp0ZXh0ID0gJDEnLCBjb2xuYW1lKSk7CisgIEVORCBJRjsKKyAg UkVUVVJOIFFVRVJZIEVYRUNVVEUgc3FsIFVTSU5HIGZpbHRlcjsKK0VORDsKKyRmdW5jdGlvbiQg U1RBQkxFIExFQUtQUk9PRjsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0 X3RibCcsIE5VTEwpIEFTIGJhcihmb28gVEVYVCk7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2Jh cignZjEnLCAndGV4dF90YmwnLCAnZG9oIScpIEFTIGJhcihmb28gVEVYVCk7CitFWFBMQUlOIFNF TEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5VTEwpIEFTIGJhcihm b28gVEVYVCk7CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0 X3RibCcsICdkb2ghJykgQVMgYmFyKGZvbyBURVhUKTsKK0FMVEVSIEZVTkNUSU9OIGZvb19mcm9t X2JhcihURVhULCBURVhULCBURVhUKSBTVVBQT1JUIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0X2Z1 bmM7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKSBB UyBiYXIoZm9vIFRFWFQpOworU0VMRUNUICogRlJPTSBmb29fZnJvbV9iYXIoJ2YxJywgJ3RleHRf dGJsJywgJ2RvaCEnKSBBUyBiYXIoZm9vIFRFWFQpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZv b19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKSBBUyBiYXIoZm9vIFRFWFQpOworRVhQ TEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCAnZG9oIScp IEFTIGJhcihmb28gVEVYVCk7CitEUk9QIEZVTkNUSU9OIGZvb19mcm9tX2JhcjsKKy0tIFJFVFVS TlMgVEFCTEU6CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmb29fZnJvbV9iYXIoY29sbmFt ZSBURVhULCB0YWJsZW5hbWUgVEVYVCwgZmlsdGVyIFRFWFQpCitSRVRVUk5TIFRBQkxFKGZvbyBU RVhUKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICBzcWwgVEVY VDsKK0JFR0lOCisgIHNxbCA6PSBmb3JtYXQoJ1NFTEVDVCAlSTo6dGV4dCBGUk9NICVJJywgY29s bmFtZSwgdGFibGVuYW1lKTsKKyAgSUYgZmlsdGVyIElTIE5PVCBOVUxMIFRIRU4KKyAgICBzcWwg Oj0gQ09OQ0FUKHNxbCwgZm9ybWF0KCcgV0hFUkUgJUk6OnRleHQgPSAkMScsIGNvbG5hbWUpKTsK KyAgRU5EIElGOworICBSRVRVUk4gUVVFUlkgRVhFQ1VURSBzcWwgVVNJTkcgZmlsdGVyOworRU5E OworJGZ1bmN0aW9uJCBTVEFCTEUgTEVBS1BST09GOworU0VMRUNUICogRlJPTSBmb29fZnJvbV9i YXIoJ2YxJywgJ3RleHRfdGJsJywgTlVMTCk7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2Jhcign ZjEnLCAndGV4dF90YmwnLCAnZG9oIScpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9t X2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxMKTsKK0VYUExBSU4gU0VMRUNUICogRlJPTSBmb29f ZnJvbV9iYXIoJ2YxJywgJ3RleHRfdGJsJywgJ2RvaCEnKTsKK0FMVEVSIEZVTkNUSU9OIGZvb19m cm9tX2JhcihURVhULCBURVhULCBURVhUKSBTVVBQT1JUIHRlc3RfaW5saW5lX3NyZl9zdXBwb3J0 X2Z1bmM7CitTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90YmwnLCBOVUxM KTsKK1NFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsICdkb2ghJyk7 CitFWFBMQUlOIFNFTEVDVCAqIEZST00gZm9vX2Zyb21fYmFyKCdmMScsICd0ZXh0X3RibCcsIE5V TEwpOworRVhQTEFJTiBTRUxFQ1QgKiBGUk9NIGZvb19mcm9tX2JhcignZjEnLCAndGV4dF90Ymwn LCAnZG9oIScpOworRFJPUCBGVU5DVElPTiBmb29fZnJvbV9iYXI7CisKIC0tIFRlc3QgZnVuY3Rp b25zIGZvciBjb250cm9sIGRhdGEKIFNFTEVDVCBjb3VudCgqKSA+IDAgQVMgb2sgRlJPTSBwZ19j b250cm9sX2NoZWNrcG9pbnQoKTsKIFNFTEVDVCBjb3VudCgqKSA+IDAgQVMgb2sgRlJPTSBwZ19j b250cm9sX2luaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZTZmMmU5M2IyZDYu LjhiNjgxZTllNDRlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjkwMCw2ICsyOTAw LDcgQEAgU3Vic2NyaXB0aW9uUmVsU3RhdGUKIFN1bW1hcml6ZXJSZWFkTG9jYWxYTG9nUHJpdmF0 ZQogU3VwcG9ydFJlcXVlc3RDb3N0CiBTdXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uCitTdXBw b3J0UmVxdWVzdElubGluZVNSRgogU3VwcG9ydFJlcXVlc3RNb2RpZnlJblBsYWNlCiBTdXBwb3J0 UmVxdWVzdE9wdGltaXplV2luZG93Q2xhdXNlCiBTdXBwb3J0UmVxdWVzdFJvd3MKLS0gCjIuNDUu MAoK --000000000000b3a32e063be18027--