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 1rRvHl-00ABr6-5c for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jan 2024 14:28:26 +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 1rRvHk-004Hsz-8t for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jan 2024 14:28:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rRvHj-004Hsl-Ee for pgsql-hackers@lists.postgresql.org; Mon, 22 Jan 2024 14:28:23 +0000 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rRvHf-0038Kr-4B for pgsql-hackers@postgresql.org; Mon, 22 Jan 2024 14:28:22 +0000 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-28e8c930c01so1232177a91.0 for ; Mon, 22 Jan 2024 06:28:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705933697; x=1706538497; darn=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=i30ne3KImKpYtmgJs4X3D+dDo8wNdPl6ngRK3Xww1DE=; b=HqfnRpD9zKoCm2ZzuhwC5mWsvxTwki0Cayp3w5pWt4vx75MLbMyrYSNQti3kCchRBY FdNawtLaD3110Oni6ygwbd6Y8GK++2VJysmLIkO/gCf4HPNXituS1YPgQIny8OJkHEWc /ComH4RHhP/i6kJg17bsrgN2RgNMVCmXA+z8mbjZMaPBnBE9ddXSOUmmtMUZ6AloPK1D 2Hm12eJ/quBUf+GiwiTAATncABwDpRnCwyY+TaT1v+KIZAgyhrn+4UahX0Ydr3RzkQfq 1B2zUm19fO4GQgdRboWMUQtWP9hfzFFswY1oFpXSvbrytqb3WH3kEywKHA1S3zY1POQV 8XoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705933697; x=1706538497; 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=i30ne3KImKpYtmgJs4X3D+dDo8wNdPl6ngRK3Xww1DE=; b=UW6eLHSfz4+GIoLQFjK49jxlTxkV9fY5HjI6KiWRntR/uK11Sdqb8z+ZllGQ/m048K tva5n4ZyxKTazx7OL6tgIC7KTjnuf5UuyFRW93APTuX2RZTgJQA5HR4SITeTZU88sQry mrvy6xMGt3SAfRSGFv77xVuL0KSz2mx5Xpvpnz7G9nffzZZsPirggZa6TYmXJ4cS2+O1 4TEttS/321WbasD3igeSC+kSz42Vgn77oQjS+RULb7cjO8MC39eYy0lK+VlA9/gkcP5F hoEPpWTtVVU66DG7il4B8TqJc167ekLzNnmzey49+AHRK/J1SLxiJD6EP+dPLmb6mvQ3 M3rg== X-Gm-Message-State: AOJu0Ywwv9eRQ3OMcLGIJ8+M8qh6geE62dcgJazReLoKk6SJhGK4xT7n DV4ADCbywRyyDDKCIXBpMvcsM21+TrNCo0+cVnvqYR97ofd4dsLQTgIR+NieZbNSXwhKdmdnMve /mVb3QeAqXJC2LHRELrNtgXCbiSs= X-Google-Smtp-Source: AGHT+IGjDu/fMmdh762+W98HGW3JJO2IZAnXvidAi0spODACHB89lVDoiH2VlkUhk6HirNZ3HsnZS/WObH6NpO3WFr4= X-Received: by 2002:a17:90a:5b14:b0:290:c2fc:d660 with SMTP id o20-20020a17090a5b1400b00290c2fcd660mr222455pji.78.1705933697016; Mon, 22 Jan 2024 06:28:17 -0800 (PST) MIME-Version: 1.0 References: <202401181146.fuoeskfzriq7@alvherre.pgsql> <202401181711.qxjxpnl3ohnw@alvherre.pgsql> In-Reply-To: From: Amit Langote Date: Mon, 22 Jan 2024 23:27:58 +0900 Message-ID: Subject: Re: remaining sql/json patches To: jian he Cc: Alvaro Herrera , Andres Freund , Erik Rijkers , Andrew Dunstan , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000000586fb060f89a4b0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000586fb060f89a4b0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Fri, Jan 19, 2024 at 7:46=E2=80=AFPM jian he wrote: > play with domain types. > in ExecEvalJsonCoercion, seems func json_populate_type cannot cope > with domain type. > > tests: > drop domain test; > create domain test as int[] check ( array_length(value,1) =3D2 and > (value[1] =3D 1 or value[2] =3D 2)); > SELECT * from JSON_QUERY(jsonb'{"rec": "{1,2,3}"}', '$.rec' returning > test omit quotes); > SELECT * from JSON_QUERY(jsonb'{"rec": "{1,11}"}', '$.rec' returning > test keep quotes); > SELECT * from JSON_QUERY(jsonb'{"rec": "{2,11}"}', '$.rec' returning > test omit quotes error on error); > SELECT * from JSON_QUERY(jsonb'{"rec": "{2,2}"}', '$.rec' returning > test keep quotes error on error); > > SELECT * from JSON_QUERY(jsonb'{"rec": [1,2,3]}', '$.rec' returning > test omit quotes ); > SELECT * from JSON_QUERY(jsonb'{"rec": [1,2,3]}', '$.rec' returning > test omit quotes null on error); > SELECT * from JSON_QUERY(jsonb'{"rec": [1,2,3]}', '$.rec' returning > test null on error); > SELECT * from JSON_QUERY(jsonb'{"rec": [1,11]}', '$.rec' returning > test omit quotes); > SELECT * from JSON_QUERY(jsonb'{"rec": [2,2]}', '$.rec' returning test > omit quotes); > > Many domain related tests seem not right. > like the following, i think it should just return null. > +SELECT JSON_QUERY(jsonb '{"a": 1}', '$.b' RETURNING sqljsonb_int_not_nul= l); > +ERROR: domain sqljsonb_int_not_null does not allow null values > > --another example > SELECT JSON_QUERY(jsonb '{"a": 1}', '$.b' RETURNING > sqljsonb_int_not_null null on error); Hmm, yes, I've thought the same thing, but the patch since it has existed appears to have made an exception for the case when the RETURNING type is a domain for some reason; I couldn't find any mention of why in the old discussions. I suspect it might be because a domain's constraints should always be enforced, irrespective of what the SQL/JSON's ON ERROR says. Though, I'm inclined to classify the domain constraint failure errors into the same class as any other error as far as the ON ERROR clause is concerned, so have adjusted the code to do so. Please check if the attached looks fine. > Maybe in node JsonCoercion, we don't need both via_io and > via_populate, but we can have one bool to indicate either call > InputFunctionCallSafe or json_populate_type in ExecEvalJsonCoercion. I'm not sure if there's a way to set such a bool statically, because the decision between calling input function or json_populate_type() must be made at run-time based on whether the input jsonb datum is a scalar or not. That said, I think we should ideally be able to always use json_populate_type(), but it can't handle OMIT QUOTES for scalars and I haven't been able to refactor it to do so On Mon, Jan 22, 2024 at 9:00=E2=80=AFAM jian he wrote: > > based on v35. > Now I only applied from 0001 to 0007. > For {DEFAULT expression ON EMPTY} | {DEFAULT expression ON ERROR} > restrict DEFAULT expression be either Const node or FuncExpr node. > so these 3 SQL/JSON functions can be used in the btree expression index. I'm not really excited about adding these restrictions into the transformJsonFuncExpr() path. Index or any other code that wants to put restrictions already have those in place, no need to add them here. Moreover, by adding these restrictions, we might end up preventing users from doing useful things with this like specify column references. If there are semantic issues with allowing that, we should discuss them. > I made some big changes on the doc. (see attachment) > list (json_query, json_exists, json_value) as a new may be > a good idea. > > follow these two links, we can see the difference. > only apply v35, 0001 to 0007: https://v35-functions-json-html.vercel.app > apply v35, 0001 to 0007 plus my changes: > https://html-starter-seven-pied.vercel.app Thanks for your patch. I've adapted some of your proposed changes. > minor issues: > + Note that if the path_expression > + is strict, an error is generated if it yields= no > + items, provided the specified ON ERROR behavi= or is > + ERROR. > > how about something like this: > + Note that if the path_expression > + is strict and ON ERROR > behavior is specified > + ERROR, an error is generated if it yields no > + items Sure. > + > + > + SQL/JSON path expression can currently only accept values of the > + jsonb type, so it might be necessary to cast the > + context_item argument of these functions = to > + jsonb. > + > + > here should it be "SQL/JSON query functions"? "path expressions" is not wrong but I agree that "query functions" might be better, so changed. I've also mentioned that the restriction arises from the fact that SQL/JSON path langage expects the input document to be passed as jsonb. On Mon, Jan 22, 2024 at 3:14=E2=80=AFPM jian he wrote: > I found two main issues regarding cocece SQL/JSON function output to > other data types. > * returning typmod influence the returning result of JSON_VALUE | JSON_QU= ERY. > * JSON_VALUE | JSON_QUERY handles returning type domains allowing null > and not allowing null inconsistencies. > > in ExecInitJsonExprCoercion, there is IsA(coercion,JsonCoercion) or > not difference. > for the returning of (JSON_VALUE | JSON_QUERY), > "coercion" is a JsonCoercion or not is set in coerceJsonFuncExprOutput. > > this influence returning type with typmod is not -1. > if set "coercion" as JsonCoercion Node then it may call the > InputFunctionCallSafe to do the coercion. > If not, it may call ExecInitFunc related code which is wrapped in > ExecEvalCoerceViaIOSafe. > > for example: > SELECT JSON_QUERY(jsonb '[1,2]', '$' RETURNING char(3)); > will ExecInitFunc, will init function bpchar(character, integer, > boolean). it will set the third argument to true. > so it will initiate related instructions like: `select > bpchar('[,2]',7,true); ` which in the end will make the result be > `[,2` > However, InputFunctionCallSafe cannot handle that. > simple demo: > create table t(a char(3)); > --fail. > INSERT INTO t values ('test'); > --ok > select 'test'::char(3); > > however current ExecEvalCoerceViaIOSafe cannot handle omit quotes. > > even if I made the changes, still not bullet-proof. > for example: > create domain char3_domain_not_null as char(3) NOT NULL; > create domain hello as text NOT NULL check (value =3D 'hello'); > create domain int42 as int check (value =3D 42); > CREATE TYPE comp_domain_with_typmod AS (a char3_domain_not_null, b int42)= ; > > SELECT JSON_VALUE(jsonb'{"rec": "(abcd,42)"}', '$.rec' returning > comp_domain_with_typmod); > will return NULL > > however > SELECT JSON_VALUE(jsonb'{"rec": "abcd"}', '$.rec' returning > char3_domain_not_null); > will return `abc`. > > I made the modification, you can see the difference. > attached is test_coerce.sql is the test file. > test_coerce_only_v35.out is the test output of only applying v35 0001 > to 0007 plus my previous changes[0]. > test_coerce_v35_plus_change.out is the test output of applying to v35 > 0001 to 0007 plus changes (attachment) and previous changes[0]. > > [0] https://www.postgresql.org/message-id/CACJufxHo1VVk_0th3AsFxqdMgjaUDz= 6s0F7%2Bj9rYA3d%3DURw97A%40mail.gmail.com I'll think about this tomorrow. In the meantime, here are the updated/reorganized patches with the following changes: * I started having second thoughts about introducing json_populate_type(), jspIsMutable, and JsonbUnquote() in commits separate from the commit introducing the SQL/JSON query functions patch where they are needed, so I moved them back into that patch. So there are 2 fewer patches -- 0005, 0006 squashed into 0007. * Boke the test file jsonb_sqljson into 2 files named sqljson_queryfuncs and sqljson_jsontable. Also, the test files under ECPG to sql_jsontable * Some cosmetic improvements in the JSON_TABLE() patch I'll push 0001-0004 tomorrow, barring objections. --=20 Thanks, Amit Langote EDB: http://www.enterprisedb.com --0000000000000586fb060f89a4b0 Content-Type: application/octet-stream; name="v36-0004-Add-jsonpath_exec-APIs-to-use-in-SQL-JSON-query-.patch" Content-Disposition: attachment; filename="v36-0004-Add-jsonpath_exec-APIs-to-use-in-SQL-JSON-query-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrp0uusj3 RnJvbSBhMjMxYTc3ZjFjMmMyYjhiZDkyMWFhZmI0ZGJmZGM0NTFkYjg2NjJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTc6NTc6MjAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz NiA0LzZdIEFkZCBqc29ucGF0aF9leGVjIEFQSXMgdG8gdXNlIGluIFNRTC9KU09OIHF1ZXJ5CiBm dW5jdGlvbnMKClRoaXMgYWRkcyBKc29uUGF0aEV4aXN0cygpLCBKc29uUGF0aFF1ZXJ5KCksIEpz b25QYXRoVmFsdWUoKSB0aGF0CmFyZSB3cmFwcGVycyBvdmVyIGV4ZWN1dGVKc29uUGF0aCgpIHRv IGltcGxlbWVudCBTUUwvSlNPTiBmdW5jdGlvbnMKSlNPTl9FWElTVFMoKSwgSlNPTl9RVUVSWSgp LCBhbmQgSlNPTl9WQUxVRSgpLCByZXNwZWN0aXZlbHkuICBUaG9zZQpmdW5jdGlvbnMgdGhlbXNl bHZlcyB3aWxsIGJlIGFkZGVkIGluIGEgc3Vic2VxdWVudCBjb21taXQgYWxvbmcgd2l0aAp0aGUg bmVjZXNzYXJ5IHBhcnNlci9wbGFubmVyL2V4ZWN1dG9yIHN1cHBvcnQuCgpUaGlzIGFsc28gaW50 cm9kdWNlcyBhIG5ldyBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZSBmb3IgdGhlIGV4ZWN1dG9yCmlt cGxlbWVudGF0aW9uIG9mIHRob3NlIGZ1bmN0aW9ucyB0byBiZSBhYmxlIHRvIHBhc3MgdGhlIHZh bHVlcwpvZiB0aGUgdmFyaWFibGVzIHVzZWQgaW4ganNvbnBhdGggdGhhdCBhcmUgc2VwYXJhdGVs eSBldmFsdWF0ZWQKYnkgdGhlIGV4ZWN1dG9yLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFOYmdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5j IHwgMzIyICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaCAgICAgICAgIHwgIDExICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggICAg ICAgICAgfCAgMjMgKysKIDMgZmlsZXMgY2hhbmdlZCwgMzU2IGluc2VydGlvbnMoKykKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCBjMTYyODIxZTY1Li42ZGE2ZTI3ZWU2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTIzNCw2ICsyMzQsMTIg QEAgc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29sUmVzdWx0KEpzb25QYXRoRXhl Y0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkgICBKc29uUGF0aEl0ZW0gKmpzcCwgSnNvblZhbHVl TGlzdCAqZm91bmQsIEpzb25QYXRoQm9vbCByZXMpOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhJ dGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCQkJCQkJ CUpzb25iVmFsdWUgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpHZXRKc29uUGF0aFZhcih2 b2lkICpjeHQsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJCQkJCQkgIEpzb25i VmFsdWUgKmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVjdElkKTsKK3N0YXRpYyBpbnQgQ291bnRK c29uUGF0aFZhcnModm9pZCAqY3h0KTsKK3N0YXRpYyB2b2lkIEpzb25JdGVtRnJvbURhdHVtKERh dHVtIHZhbCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJICBKc29uYlZhbHVlICpy ZXMpOworc3RhdGljIHZvaWQgSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0oSnNvbmJWYWx1ZSAq amJ2LCBEYXR1bSBudW0pOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhWYXJpYWJsZShKc29uUGF0 aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCUpzb25QYXRoSXRlbSAqdmFyaWFibGUsIEpzb25i VmFsdWUgKnZhbHVlKTsKIHN0YXRpYyBpbnQgY291bnRWYXJpYWJsZXNGcm9tSnNvbmIodm9pZCAq dmFyc0pzb25iKTsKQEAgLTIxMzgsNiArMjE0NCwxNTUgQEAgZ2V0SnNvblBhdGhJdGVtKEpzb25Q YXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCX0KIH0KIAorLyoKKyAq IFJldHVybnMgdGhlIGNvbXB1dGVkIHZhbHVlIG9mIGEgSlNPTiBwYXRoIHZhcmlhYmxlIHdpdGgg Z2l2ZW4gbmFtZS4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorR2V0SnNvblBhdGhWYXIodm9p ZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKKwkJCSAgIEpzb25iVmFsdWUg KmJhc2VPYmplY3QsIGludCAqYmFzZU9iamVjdElkKQoreworCUpzb25QYXRoVmFyaWFibGUgKnZh ciA9IE5VTEw7CisJTGlzdAkgICAqdmFycyA9IGN4dDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlKc29u YlZhbHVlICpyZXN1bHQ7CisJaW50CQkJaWQgPSAxOworCisJZm9yZWFjaChsYywgdmFycykKKwl7 CisJCUpzb25QYXRoVmFyaWFibGUgKmN1cnZhciA9IGxmaXJzdChsYyk7CisKKwkJaWYgKCFzdHJu Y21wKGN1cnZhci0+bmFtZSwgdmFyTmFtZSwgdmFyTmFtZUxlbikpCisJCXsKKwkJCXZhciA9IGN1 cnZhcjsKKwkJCWJyZWFrOworCQl9CisKKwkJaWQrKzsKKwl9CisKKwlpZiAodmFyID09IE5VTEwp CisJeworCQkqYmFzZU9iamVjdElkID0gLTE7CisJCXJldHVybiBOVUxMOworCX0KKworCXJlc3Vs dCA9IHBhbGxvYyhzaXplb2YoSnNvbmJWYWx1ZSkpOworCWlmICh2YXItPmlzbnVsbCkKKwl7CisJ CSpiYXNlT2JqZWN0SWQgPSAwOworCQlyZXN1bHQtPnR5cGUgPSBqYnZOdWxsOworCX0KKwllbHNl CisJCUpzb25JdGVtRnJvbURhdHVtKHZhci0+dmFsdWUsIHZhci0+dHlwaWQsIHZhci0+dHlwbW9k LCByZXN1bHQpOworCisJKmJhc2VPYmplY3QgPSAqcmVzdWx0OworCSpiYXNlT2JqZWN0SWQgPSBp ZDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK0NvdW50SnNvblBhdGhWYXJz KHZvaWQgKmN4dCkKK3sKKwlMaXN0ICp2YXJzID0gKExpc3QgKikgY3h0OworCisJcmV0dXJuIGxp c3RfbGVuZ3RoKHZhcnMpOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIEpzb25iVmFsdWUgdG8g cGFzcyB0byBqc29ucGF0aCBleGVjdXRvciBmcm9tIGdpdmVuCisgKiBkYXR1bSB2YWx1ZSBvZiB0 aGUgc3BlY2lmaWVkIHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCitKc29uSXRlbUZyb21EYXR1bShE YXR1bSB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBKc29uYlZhbHVlICpyZXMpCit7CisJ c3dpdGNoICh0eXBpZCkKKwl7CisJCWNhc2UgQk9PTE9JRDoKKwkJCXJlcy0+dHlwZSA9IGpidkJv b2w7CisJCQlyZXMtPnZhbC5ib29sZWFuID0gRGF0dW1HZXRCb29sKHZhbCk7CisJCQlicmVhazsK KwkJY2FzZSBOVU1FUklDT0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCB2 YWwpOworCQkJYnJlYWs7CisJCWNhc2UgSU5UMk9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJp Y0RhdHVtKHJlcywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQyX251bWVyaWMsIHZhbCkpOworCQkJ YnJlYWs7CisJCWNhc2UgSU5UNE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJl cywgRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ0X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJ CWNhc2UgSU5UOE9JRDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJlcywgRGlyZWN0 RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsIHZhbCkpOworCQkJYnJlYWs7CisJCWNhc2UgRkxP QVQ0T0lEOgorCQkJSnNvbmJWYWx1ZUluaXROdW1lcmljRGF0dW0ocmVzLCBEaXJlY3RGdW5jdGlv bkNhbGwxKGZsb2F0NF9udW1lcmljLCB2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIEZMT0FUOE9J RDoKKwkJCUpzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKHJlcywgRGlyZWN0RnVuY3Rpb25DYWxs MShmbG9hdDhfbnVtZXJpYywgdmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSBURVhUT0lEOgorCQlj YXNlIFZBUkNIQVJPSUQ6CisJCQlyZXMtPnR5cGUgPSBqYnZTdHJpbmc7CisJCQlyZXMtPnZhbC5z dHJpbmcudmFsID0gVkFSREFUQV9BTlkodmFsKTsKKwkJCXJlcy0+dmFsLnN0cmluZy5sZW4gPSBW QVJTSVpFX0FOWV9FWEhEUih2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgREFURU9JRDoKKwkJY2Fz ZSBUSU1FT0lEOgorCQljYXNlIFRJTUVUWk9JRDoKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCWNh c2UgVElNRVNUQU1QVFpPSUQ6CisJCQlyZXMtPnR5cGUgPSBqYnZEYXRldGltZTsKKwkJCXJlcy0+ dmFsLmRhdGV0aW1lLnZhbHVlID0gdmFsOworCQkJcmVzLT52YWwuZGF0ZXRpbWUudHlwaWQgPSB0 eXBpZDsKKwkJCXJlcy0+dmFsLmRhdGV0aW1lLnR5cG1vZCA9IHR5cG1vZDsKKwkJCXJlcy0+dmFs LmRhdGV0aW1lLnR6ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEpTT05CT0lEOgorCQkJeworCQkJ CUpzb25iVmFsdWUgKmpidiA9IHJlczsKKwkJCQlKc29uYgkgICAqamIgPSBEYXR1bUdldEpzb25i UCh2YWwpOworCisJCQkJaWYgKEpzb25Db250YWluZXJJc1NjYWxhcigmamItPnJvb3QpKQorCQkJ CXsKKwkJCQkJYm9vbAkJcmVzdWx0IFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKworCQkJCQly ZXN1bHQgPSBKc29uYkV4dHJhY3RTY2FsYXIoJmpiLT5yb290LCBqYnYpOworCQkJCQlBc3NlcnQo cmVzdWx0KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlKc29uYkluaXRCaW5hcnkoamJ2LCBqYik7 CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgSlNPTk9JRDoKKwkJCXsKKwkJCQl0ZXh0CSAgICp0 eHQgPSBEYXR1bUdldFRleHRQKHZhbCk7CisJCQkJY2hhcgkgICAqc3RyID0gdGV4dF90b19jc3Ry aW5nKHR4dCk7CisJCQkJSnNvbmIJICAgKmpiOworCisJCQkJamIgPSBEYXR1bUdldEpzb25iUChE aXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLAorCQkJCQkJCQkJCQkJCQlDU3RyaW5nR2V0RGF0 dW0oc3RyKSkpOworCQkJCXBmcmVlKHN0cik7CisKKwkJCQlKc29uSXRlbUZyb21EYXR1bShKc29u YlBHZXREYXR1bShqYiksIEpTT05CT0lELCAtMSwgcmVzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ ZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiY291bGQgbm90IGNvbnZlcnQgdmFsdWUg b2YgdHlwZSAlcyB0byBqc29ucGF0aCIsCisJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0eXBpZCkp KTsKKwl9Cit9CisKKy8qIEluaXRpYWxpemUgbnVtZXJpYyB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBk YXR1bSAqLworc3RhdGljIHZvaWQKK0pzb25iVmFsdWVJbml0TnVtZXJpY0RhdHVtKEpzb25iVmFs dWUgKmpidiwgRGF0dW0gbnVtKQoreworCWpidi0+dHlwZSA9IGpidk51bWVyaWM7CisJamJ2LT52 YWwubnVtZXJpYyA9IERhdHVtR2V0TnVtZXJpYyhudW0pOworfQorCiAvKgogICogR2V0IHRoZSB2 YWx1ZSBvZiB2YXJpYWJsZSBwYXNzZWQgdG8ganNvbnBhdGggZXhlY3V0b3IKICAqLwpAQCAtMjg3 NCwzICszMDI5LDE3MCBAQCBjb21wYXJlRGF0ZXRpbWUoRGF0dW0gdmFsMSwgT2lkIHR5cGlkMSwg RGF0dW0gdmFsMiwgT2lkIHR5cGlkMiwKIAogCXJldHVybiBEYXR1bUdldEludDMyKERpcmVjdEZ1 bmN0aW9uQ2FsbDIoY21wZnVuYywgdmFsMSwgdmFsMikpOwogfQorCisvKgorICogRXhlY3V0b3It Y2FsbGFibGUgSlNPTl9FWElTVFMgaW1wbGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIE5VTEwg aW5zdGVhZCBvZiB0aHJvd2luZyBlcnJvcnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVMTCwgc2V0dGlu ZworICogKmVycm9yIHRvIHRydWUuCisgKi8KK2Jvb2wKK0pzb25QYXRoRXhpc3RzKERhdHVtIGpi LCBKc29uUGF0aCAqanAsIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKQoreworCUpzb25QYXRoRXhl Y1Jlc3VsdCByZXM7CisKKwlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsCisJCQkJCQkg IEdldEpzb25QYXRoVmFyLCBDb3VudEpzb25QYXRoVmFycywKKwkJCQkJCSAgRGF0dW1HZXRKc29u YlAoamIpLCAhZXJyb3IsIE5VTEwsIHRydWUpOworCisJQXNzZXJ0KGVycm9yIHx8ICFqcGVySXNF cnJvcihyZXMpKTsKKworCWlmIChlcnJvciAmJiBqcGVySXNFcnJvcihyZXMpKQorCQkqZXJyb3Ig PSB0cnVlOworCisJcmV0dXJuIHJlcyA9PSBqcGVyT2s7Cit9CisKKy8qCisgKiBFeGVjdXRvci1j YWxsYWJsZSBKU09OX1FVRVJZIGltcGxlbWVudGF0aW9uCisgKgorICogUmV0dXJucyBOVUxMIGlu c3RlYWQgb2YgdGhyb3dpbmcgZXJyb3JzIGlmICdlcnJvcicgaXMgbm90IE5VTEwsIHNldHRpbmcK KyAqICplcnJvciB0byB0cnVlLiAgKmVtcHR5IGlzIHNldCB0byB0cnVlIGlmIG5vIG1hdGNoIGlz IGZvdW5kLgorICovCitEYXR1bQorSnNvblBhdGhRdWVyeShEYXR1bSBqYiwgSnNvblBhdGggKmpw LCBKc29uV3JhcHBlciB3cmFwcGVyLCBib29sICplbXB0eSwKKwkJCSAgYm9vbCAqZXJyb3IsIExp c3QgKnZhcnMpCit7CisJSnNvbmJWYWx1ZSAqc2luZ2xldG9uOworCWJvb2wJCXdyYXA7CisJSnNv blZhbHVlTGlzdCBmb3VuZCA9IHswfTsKKwlKc29uUGF0aEV4ZWNSZXN1bHQgcmVzOworCWludAkJ CWNvdW50OworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLAorCQkJCQkJICBHZXRK c29uUGF0aFZhciwgQ291bnRKc29uUGF0aFZhcnMsCisJCQkJCQkgIERhdHVtR2V0SnNvbmJQKGpi KSwgIWVycm9yLCAmZm91bmQsIHRydWUpOworCUFzc2VydChlcnJvciB8fCAhanBlcklzRXJyb3Io cmVzKSk7CisJaWYgKGVycm9yICYmIGpwZXJJc0Vycm9yKHJlcykpCisJeworCQkqZXJyb3IgPSB0 cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwkvKiBX UkFQIG9yIG5vdD8gKi8KKwljb3VudCA9IEpzb25WYWx1ZUxpc3RMZW5ndGgoJmZvdW5kKTsKKwlz aW5nbGV0b24gPSBjb3VudCA+IDAgPyBKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQpIDogTlVMTDsK KwlpZiAoc2luZ2xldG9uID09IE5VTEwpCisJCXdyYXAgPSBmYWxzZTsKKwllbHNlIGlmICh3cmFw cGVyID09IEpTV19OT05FKQorCQl3cmFwID0gZmFsc2U7CisJZWxzZSBpZiAod3JhcHBlciA9PSBK U1dfVU5DT05ESVRJT05BTCkKKwkJd3JhcCA9IHRydWU7CisJZWxzZSBpZiAod3JhcHBlciA9PSBK U1dfQ09ORElUSU9OQUwpCisJCXdyYXAgPSBjb3VudCA+IDEgfHwKKwkJCUlzQUpzb25iU2NhbGFy KHNpbmdsZXRvbikgfHwKKwkJCShzaW5nbGV0b24tPnR5cGUgPT0gamJ2QmluYXJ5ICYmCisJCQkg SnNvbkNvbnRhaW5lcklzU2NhbGFyKHNpbmdsZXRvbi0+dmFsLmJpbmFyeS5kYXRhKSk7CisJZWxz ZQorCXsKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqc29uIHdyYXBwZXIgJWQiLCB3cmFw cGVyKTsKKwkJd3JhcCA9IGZhbHNlOworCX0KKworCWlmICh3cmFwKQorCQlyZXR1cm4gSnNvbmJQ R2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIod3JhcEl0ZW1zSW5BcnJheSgmZm91bmQpKSk7CisK KwkvKiBObyB3cmFwcGluZyBtZWFucyBvbmx5IG9uZSBpdGVtIGlzIGV4cGVjdGVkLiAqLworCWlm IChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJ CQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX01PUkVfVEhBTl9PTkVfU1FMX0pTT05fSVRFTSksCisJCQkJIGVycm1zZygiSlNP TiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9RVUVSWSBzaG91bGQgcmV0dXJuIHNpbmdsZXRvbiBp dGVtIHdpdGhvdXQgd3JhcHBlciIpLAorCQkJCSBlcnJoaW50KCJVc2UgV0lUSCBXUkFQUEVSIGNs YXVzZSB0byB3cmFwIFNRTC9KU09OIGl0ZW0gc2VxdWVuY2UgaW50byBhcnJheS4iKSkpOworCX0K KworCWlmIChzaW5nbGV0b24pCisJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9K c29uYihzaW5nbGV0b24pKTsKKworCSplbXB0eSA9IHRydWU7CisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KKworLyoKKyAqIEV4ZWN1dG9yLWNhbGxhYmxlIEpTT05fVkFMVUUgaW1w bGVtZW50YXRpb24KKyAqCisgKiBSZXR1cm5zIE5VTEwgaW5zdGVhZCBvZiB0aHJvd2luZyBlcnJv cnMgaWYgJ2Vycm9yJyBpcyBub3QgTlVMTCwgc2V0dGluZworICogKmVycm9yIHRvIHRydWUuICAq ZW1wdHkgaXMgc2V0IHRvIHRydWUgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCisgKi8KK0pzb25iVmFs dWUgKgorSnNvblBhdGhWYWx1ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwg Ym9vbCAqZXJyb3IsIExpc3QgKnZhcnMpCit7CisJSnNvbmJWYWx1ZSAqcmVzOworCUpzb25WYWx1 ZUxpc3QgZm91bmQgPSB7MH07CisJSnNvblBhdGhFeGVjUmVzdWx0IGpwZXIgUEdfVVNFRF9GT1Jf QVNTRVJUU19PTkxZOworCWludAkJCWNvdW50OworCisJanBlciA9IGV4ZWN1dGVKc29uUGF0aChq cCwgdmFycywgR2V0SnNvblBhdGhWYXIsIENvdW50SnNvblBhdGhWYXJzLAorCQkJCQkJICAgRGF0 dW1HZXRKc29uYlAoamIpLAorCQkJCQkJICAgIWVycm9yLCAmZm91bmQsIHRydWUpOworCisJQXNz ZXJ0KGVycm9yIHx8ICFqcGVySXNFcnJvcihqcGVyKSk7CisKKwlpZiAoZXJyb3IgJiYganBlcklz RXJyb3IoanBlcikpCisJeworCQkqZXJyb3IgPSB0cnVlOworCQkqZW1wdHkgPSBmYWxzZTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJY291bnQgPSBKc29uVmFsdWVMaXN0TGVuZ3RoKCZmb3VuZCk7 CisKKwkqZW1wdHkgPSAoY291bnQgPT0gMCk7CisKKwlpZiAoKmVtcHR5KQorCQlyZXR1cm4gTlVM TDsKKworCS8qIEpTT05fVkFMVUUgZXhwZWN0cyB0byBnZXQgb25seSBzaW5nbGV0b25zLiAqLwor CWlmIChjb3VudCA+IDEpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9NT1JFX1RIQU5fT05FX1NRTF9KU09OX0lURU0pLAorCQkJCSBlcnJtc2coIkpTT04g cGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5nbGV0b24gc2Nh bGFyIGl0ZW0iKSkpOworCX0KKworCXJlcyA9IEpzb25WYWx1ZUxpc3RIZWFkKCZmb3VuZCk7CisJ aWYgKHJlcy0+dHlwZSA9PSBqYnZCaW5hcnkgJiYgSnNvbkNvbnRhaW5lcklzU2NhbGFyKHJlcy0+ dmFsLmJpbmFyeS5kYXRhKSkKKwkJSnNvbmJFeHRyYWN0U2NhbGFyKHJlcy0+dmFsLmJpbmFyeS5k YXRhLCByZXMpOworCisJLyogSlNPTl9WQUxVRSBleHBlY3RzIHRvIGdldCBvbmx5IHNjYWxhcnMu ICovCisJaWYgKCFJc0FKc29uYlNjYWxhcihyZXMpKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJ CQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fU0NBTEFSX1JFUVVJUkVEKSwKKwkJCQkg ZXJybXNnKCJKU09OIHBhdGggZXhwcmVzc2lvbiBpbiBKU09OX1ZBTFVFIHNob3VsZCByZXR1cm4g c2luZ2xldG9uIHNjYWxhciBpdGVtIikpKTsKKwl9CisKKwlpZiAocmVzLT50eXBlID09IGpidk51 bGwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgK aW5kZXggNGExNTQ2MDZkMi4uNjEyODlkODEyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTE1 NzYsNiArMTU3NiwxNyBAQCB0eXBlZGVmIGVudW0gSnNvbkZvcm1hdFR5cGUKIAkJCQkJCQkJICog anNvbmIgKi8KIH0gSnNvbkZvcm1hdFR5cGU7CiAKKy8qCisgKiBKc29uV3JhcHBlciAtCisgKgkJ cmVwcmVzZW50YXRpb24gb2YgV1JBUFBFUiBjbGF1c2UgZm9yIEpzb25QYXRoUXVlcnkoKQorICov Cit0eXBlZGVmIGVudW0gSnNvbldyYXBwZXIKK3sKKwlKU1dfTk9ORSwKKwlKU1dfQ09ORElUSU9O QUwsCisJSlNXX1VOQ09ORElUSU9OQUwsCit9IEpzb25XcmFwcGVyOworCiAvKgogICogSnNvbkZv cm1hdCAtCiAgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBGT1JNQVQgY2xhdXNlCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNv bnBhdGguaAppbmRleCA5ZDU1YzI1ZWJjLi42ZWFiZGNmYjc1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9qc29ucGF0aC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgK QEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJub2Rlcy9w Z19saXN0LmgiCisjaW5jbHVkZSAibm9kZXMvcHJpbW5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbmIuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTI2OCw0ICsyNjksMjYgQEAgZXh0ZXJuIGJv b2wganNwQ29udmVydFJlZ2V4RmxhZ3ModWludDMyIHhmbGFncywgaW50ICpyZXN1bHQsCiAJCQkJ CQkJCSBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKIAogCisvKgorICogRXZhbHVhdGlvbiBvZiBq c29ucGF0aAorICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxlIHBhc3NlZCBpbnRvIGpzb25wYXRo LiAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhWYXJpYWJsZQoreworCWNoYXIJICAgKm5hbWU7 CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlEYXR1bQkJdmFsdWU7CisJYm9vbAkJ aXNudWxsOworfSBKc29uUGF0aFZhcmlhYmxlOworCisKKy8qIFNRTC9KU09OIGl0ZW0gKi8KK2V4 dGVybiBib29sIEpzb25QYXRoRXhpc3RzKERhdHVtIGpiLCBKc29uUGF0aCAqcGF0aCwgYm9vbCAq ZXJyb3IsIExpc3QgKnZhcnMpOworZXh0ZXJuIERhdHVtIEpzb25QYXRoUXVlcnkoRGF0dW0gamIs IEpzb25QYXRoICpqcCwgSnNvbldyYXBwZXIgd3JhcHBlciwKKwkJCQkJCSAgIGJvb2wgKmVtcHR5 LCBib29sICplcnJvciwgTGlzdCAqdmFycyk7CitleHRlcm4gSnNvbmJWYWx1ZSAqSnNvblBhdGhW YWx1ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwKKwkJCQkJCQkJIGJvb2wg KmVycm9yLCBMaXN0ICp2YXJzKTsKKwogI2VuZGlmCi0tIAoyLjM1LjMKCg== --0000000000000586fb060f89a4b0 Content-Type: application/octet-stream; name="v36-0002-Adjust-populate_record_field-to-handle-errors-so.patch" Content-Disposition: attachment; filename="v36-0002-Adjust-populate_record_field-to-handle-errors-so.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrp0uusd1 RnJvbSAwY2VjMGVmY2MyYmZmN2YzYjJiYzlkZDVhMTViMjJiYjUzYThlNTkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTY6MTY6NTYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz NiAyLzZdIEFkanVzdCBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoKSB0byBoYW5kbGUgZXJyb3JzCiBz b2Z0bHkKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0 PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoYXQgaW5jbHVkZXMgYWRk aW5nIGEgTm9kZSAqZXNjb250ZXh0IHBhcmFtZXRlciB0byBpdCBhbmQgYSBidW5jaApvZiBmdW5j dGlvbnMgY2FsbGVkIGJ5IGl0IGFuZCBhbHNvIGFkZGluZyBjb2RlIHRvIHRob3NlIGZ1bmN0aW9u cwp3aGVyZSBuZWNlc3NhcnkgdG9yZXR1cm4gZWFybHkgb24gZW5jb3VudGVyaW5nIGEgc29mdCBl cnJvci4KClRoZSBjaGFuZ2VzIGhlcmUgYXJlIG1haW5seSBpbnRlbmRlZCB0byBzdXBwcmVzcyBl cnJvcnMgaW4gdGhlCmZ1bmN0aW9ucyBpbiBqc29uZnVuY3MuYywgYnV0IG5vdCB0aGUgZnVuY3Rp b25zIGluIGFueSBleHRlcm5hbAptb2R1bGVzLCBzdWNoIGFzIGFycmF5ZnVuY3MuYywgdGhhdCB0 aG9zZSBmdW5jdGlvbnMgbWF5IGluIHR1cm4gY2FsbC4KVGhleSBhcmUgbm90IGNoYW5nZWQgb24g dGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgdmFyaW91cyBjaGVja3MgaW4KanNvbmZ1bmNzLmMg ZnVuY3Rpb25zIHNob3VsZCBlbnN1cmUgdGhhdCBvbmx5IHZhbHVlcyB0aGF0IGFyZQpzdHJ1Y3R1 cmFsbHkgdmFsaWQgZ2V0IHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zIGluIHRob3NlIGV4dGVybmFs Cm1vZHVsZXMuICBBbiBleGNlcHRpb24gaXMgbWFkZSBob3dldmVyIGZvciBkb21haW5fY2hlY2so KSB0byBlbnN1cmUKdGhhdCBkb21haW4gY29uc3RyYWludCB2aW9sYXRpb25zIGFyZSByZXBvcnRl ZC4KClJldmlld2VkLWJ5OiDDgWx2YXJvIEhlcnJlcmEKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1 bmQKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95 X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFOYmdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvZG9tYWlucy5jICAgfCAgMzMgKystCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbmZ1bmNzLmMgfCAzNDIgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMv aW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvdXRpbHMv anNvbmZ1bmNzLmggICAgIHwgICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgMjk1IGluc2VydGlvbnMo KyksIDg0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9k b21haW5zLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZG9tYWlucy5jCmluZGV4IDlmNmUxYTE1 YWQuLjIxNzkxMTA1ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kb21haW5z LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RvbWFpbnMuYwpAQCAtNDAsNiArNDAsOSBA QAogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUu aCIKIAorc3RhdGljIGJvb2wgZG9tYWluX2NoZWNrX2ludGVybmFsKERhdHVtIHZhbHVlLCBib29s IGlzbnVsbCwgT2lkIGRvbWFpblR5cGUsCisJCQkJCQkJCSAgdm9pZCAqKmV4dHJhLCBNZW1vcnlD b250ZXh0IG1jeHQsCisJCQkJCQkJCSAgTm9kZSAqZXNjb250ZXh0KTsKIAogLyoKICAqIHN0cnVj dHVyZSB0byBjYWNoZSBzdGF0ZSBhY3Jvc3MgbXVsdGlwbGUgY2FsbHMKQEAgLTM0Miw2ICszNDUs MzIgQEAgZG9tYWluX3JlY3YoUEdfRlVOQ1RJT05fQVJHUykKIHZvaWQKIGRvbWFpbl9jaGVjayhE YXR1bSB2YWx1ZSwgYm9vbCBpc251bGwsIE9pZCBkb21haW5UeXBlLAogCQkJIHZvaWQgKipleHRy YSwgTWVtb3J5Q29udGV4dCBtY3h0KQoreworCSh2b2lkKSBkb21haW5fY2hlY2tfaW50ZXJuYWwo dmFsdWUsIGlzbnVsbCwgZG9tYWluVHlwZSwgZXh0cmEsIG1jeHQsCisJCQkJCQkJCSBOVUxMKTsK K30KKworLyogRXJyb3Itc2FmZSB2YXJpYW50IG9mIGRvbWFpbl9jaGVjaygpLiAqLworYm9vbAor ZG9tYWluX2NoZWNrX3NhZmUoRGF0dW0gdmFsdWUsIGJvb2wgaXNudWxsLCBPaWQgZG9tYWluVHlw ZSwKKwkJCQkgIHZvaWQgKipleHRyYSwgTWVtb3J5Q29udGV4dCBtY3h0LAorCQkJCSAgTm9kZSAq ZXNjb250ZXh0KQoreworCXJldHVybiBkb21haW5fY2hlY2tfaW50ZXJuYWwodmFsdWUsIGlzbnVs bCwgZG9tYWluVHlwZSwgZXh0cmEsIG1jeHQsCisJCQkJCQkJCSBlc2NvbnRleHQpOworfQorCisv KgorICogZG9tYWluX2NoZWNrX2ludGVybmFsCisgKiAJCVdvcmtob3JzZSBmb3IgZG9tYWluX2No ZWNrKCkgYW5kIGRvbWFpbl9jaGVja19zYWZlKCkKKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIGFu IGVycm9yIG9jY3VycmVkIGluIGRvbWFpbl9jaGVja19pbnB1dCgpIGFuZCAnZXNjb250ZXh0Jwor ICogcG9pbnRzIHRvIGFuIEVycm9yU2F2ZUNvbnRleHQsIHRydWUgb3RoZXJ3aXNlLgorICovCitz dGF0aWMgYm9vbAorZG9tYWluX2NoZWNrX2ludGVybmFsKERhdHVtIHZhbHVlLCBib29sIGlzbnVs bCwgT2lkIGRvbWFpblR5cGUsCisJCQkJCSAgdm9pZCAqKmV4dHJhLCBNZW1vcnlDb250ZXh0IG1j eHQsCisJCQkJCSAgTm9kZSAqZXNjb250ZXh0KQogewogCURvbWFpbklPRGF0YSAqbXlfZXh0cmEg PSBOVUxMOwogCkBAIC0zNjUsNyArMzk0LDkgQEAgZG9tYWluX2NoZWNrKERhdHVtIHZhbHVlLCBi b29sIGlzbnVsbCwgT2lkIGRvbWFpblR5cGUsCiAJLyoKIAkgKiBEbyB0aGUgbmVjZXNzYXJ5IGNo ZWNrcyB0byBlbnN1cmUgaXQncyBhIHZhbGlkIGRvbWFpbiB2YWx1ZS4KIAkgKi8KLQlkb21haW5f Y2hlY2tfaW5wdXQodmFsdWUsIGlzbnVsbCwgbXlfZXh0cmEsIE5VTEwpOworCWRvbWFpbl9jaGVj a19pbnB1dCh2YWx1ZSwgaXNudWxsLCBteV9leHRyYSwgZXNjb250ZXh0KTsKKworCXJldHVybiAh U09GVF9FUlJPUl9PQ0NVUlJFRChlc2NvbnRleHQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jCmluZGV4IGNhYWFmYjcyYzAuLjYyMzI4OTMwNWEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmZ1bmNzLmMKQEAgLTI2NSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3B1bGF0ZUFy cmF5Q29udGV4dAogCWludAkJICAgKmRpbXM7CQkJLyogZGltZW5zaW9ucyAqLwogCWludAkJICAg KnNpemVzOwkJCS8qIGN1cnJlbnQgZGltZW5zaW9uIGNvdW50ZXJzICovCiAJaW50CQkJbmRpbXM7 CQkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgKi8KKwlOb2RlCSAgICplc2NvbnRleHQ7CQkvKiBG b3Igc29mdC1lcnJvciBoYW5kbGluZyAqLwogfSBQb3B1bGF0ZUFycmF5Q29udGV4dDsKIAogLyog c3RhdGUgZm9yIHBvcHVsYXRlX2FycmF5X2pzb24oKSAqLwpAQCAtMzg5LDcgKzM5MCw4IEBAIHN0 YXRpYyBKc29uUGFyc2VFcnJvclR5cGUgZWxlbWVudHNfYXJyYXlfZWxlbWVudF9lbmQodm9pZCAq c3RhdGUsIGJvb2wgaXNudWxsKTsKIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUgZWxlbWVudHNf c2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUp OwogCiAvKiB0dXJuIGEganNvbiBvYmplY3QgaW50byBhIGhhc2ggdGFibGUgKi8KLXN0YXRpYyBI VEFCICpnZXRfanNvbl9vYmplY3RfYXNfaGFzaChjaGFyICpqc29uLCBpbnQgbGVuLCBjb25zdCBj aGFyICpmdW5jbmFtZSk7CitzdGF0aWMgSFRBQiAqZ2V0X2pzb25fb2JqZWN0X2FzX2hhc2goY2hh ciAqanNvbiwgaW50IGxlbiwgY29uc3QgY2hhciAqZnVuY25hbWUsCisJCQkJCQkJCQkgTm9kZSAq ZXNjb250ZXh0KTsKIAogLyogc2VtYW50aWMgYWN0aW9ucyBmb3IgcG9wdWxhdGVfYXJyYXlfanNv biAqLwogc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSBwb3B1bGF0ZV9hcnJheV9vYmplY3Rfc3Rh cnQodm9pZCAqX3N0YXRlKTsKQEAgLTQzMSwzNyArNDMzLDQyIEBAIHN0YXRpYyBEYXR1bSBwb3B1 bGF0ZV9yZWNvcmRfd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBjb25zdCBjaGFyICpm dW5jbmFtCiAvKiBoZWxwZXIgZnVuY3Rpb25zIGZvciBwb3B1bGF0ZV9yZWNvcmRbc2V0XSAqLwog c3RhdGljIEhlYXBUdXBsZUhlYWRlciBwb3B1bGF0ZV9yZWNvcmQoVHVwbGVEZXNjIHR1cGRlc2Ms IFJlY29yZElPRGF0YSAqKnJlY29yZF9wLAogCQkJCQkJCQkJICAgSGVhcFR1cGxlSGVhZGVyIGRl ZmF1bHR2YWwsIE1lbW9yeUNvbnRleHQgbWN4dCwKLQkJCQkJCQkJCSAgIEpzT2JqZWN0ICpvYmop OworCQkJCQkJCQkJICAgSnNPYmplY3QgKm9iaiwgTm9kZSAqZXNjb250ZXh0KTsKIHN0YXRpYyB2 b2lkIGdldF9yZWNvcmRfdHlwZV9mcm9tX2FyZ3VtZW50KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZv LAogCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqZnVuY25hbWUsCiAJCQkJCQkJCQkJICBQb3B1bGF0 ZVJlY29yZENhY2hlICpjYWNoZSk7CiBzdGF0aWMgdm9pZCBnZXRfcmVjb3JkX3R5cGVfZnJvbV9x dWVyeShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmZ1 bmNuYW1lLAogCQkJCQkJCQkJICAgUG9wdWxhdGVSZWNvcmRDYWNoZSAqY2FjaGUpOwotc3RhdGlj IHZvaWQgSnNWYWx1ZVRvSnNPYmplY3QoSnNWYWx1ZSAqanN2LCBKc09iamVjdCAqanNvKTsKK3N0 YXRpYyBib29sIEpzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUgKmpzdiwgSnNPYmplY3QgKmpzbywg Tm9kZSAqZXNjb250ZXh0KTsKIHN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9jb21wb3NpdGUoQ29tcG9z aXRlSU9EYXRhICppbywgT2lkIHR5cGlkLAogCQkJCQkJCQljb25zdCBjaGFyICpjb2xuYW1lLCBN ZW1vcnlDb250ZXh0IG1jeHQsCi0JCQkJCQkJCUhlYXBUdXBsZUhlYWRlciBkZWZhdWx0dmFsLCBK c1ZhbHVlICpqc3YsIGJvb2wgaXNudWxsKTsKLXN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9zY2FsYXIo U2NhbGFySU9EYXRhICppbywgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzVmFsdWUgKmpzdik7 CisJCQkJCQkJCUhlYXBUdXBsZUhlYWRlciBkZWZhdWx0dmFsLCBKc1ZhbHVlICpqc3YsIGJvb2wg KmlzbnVsbCwKKwkJCQkJCQkJTm9kZSAqZXNjb250ZXh0KTsKK3N0YXRpYyBEYXR1bSBwb3B1bGF0 ZV9zY2FsYXIoU2NhbGFySU9EYXRhICppbywgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzVmFs dWUgKmpzdiwKKwkJCQkJCQkgYm9vbCAqaXNudWxsLCBOb2RlICplc2NvbnRleHQpOwogc3RhdGlj IHZvaWQgcHJlcGFyZV9jb2x1bW5fY2FjaGUoQ29sdW1uSU9EYXRhICpjb2x1bW4sIE9pZCB0eXBp ZCwgaW50MzIgdHlwbW9kLAogCQkJCQkJCQkgTWVtb3J5Q29udGV4dCBtY3h0LCBib29sIG5lZWRf c2NhbGFyKTsKIHN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoQ29sdW1uSU9EYXRh ICpjb2wsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAogCQkJCQkJCQkgICBjb25zdCBjaGFyICpj b2xuYW1lLCBNZW1vcnlDb250ZXh0IG1jeHQsIERhdHVtIGRlZmF1bHR2YWwsCi0JCQkJCQkJCSAg IEpzVmFsdWUgKmpzdiwgYm9vbCAqaXNudWxsKTsKKwkJCQkJCQkJICAgSnNWYWx1ZSAqanN2LCBi b29sICppc251bGwsIE5vZGUgKmVzY29udGV4dCk7CiBzdGF0aWMgUmVjb3JkSU9EYXRhICphbGxv Y2F0ZV9yZWNvcmRfaW5mbyhNZW1vcnlDb250ZXh0IG1jeHQsIGludCBuY29sdW1ucyk7CiBzdGF0 aWMgYm9vbCBKc09iamVjdEdldEZpZWxkKEpzT2JqZWN0ICpvYmosIGNoYXIgKmZpZWxkLCBKc1Zh bHVlICpqc3YpOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfcmVjb3Jkc2V0X3JlY29yZChQb3B1bGF0 ZVJlY29yZHNldFN0YXRlICpzdGF0ZSwgSnNPYmplY3QgKm9iaik7Ci1zdGF0aWMgdm9pZCBwb3B1 bGF0ZV9hcnJheV9qc29uKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGNoYXIgKmpzb24sIGlu dCBsZW4pOwotc3RhdGljIHZvaWQgcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJy YXlDb250ZXh0ICpjdHgsIEpzb25iVmFsdWUgKmpidiwKK3N0YXRpYyBib29sIHBvcHVsYXRlX2Fy cmF5X2pzb24oUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgY2hhciAqanNvbiwgaW50IGxlbik7 CitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRl eHQgKmN0eCwgSnNvbmJWYWx1ZSAqamJ2LAogCQkJCQkJCQkJIGludCBuZGltKTsKIHN0YXRpYyB2 b2lkIHBvcHVsYXRlX2FycmF5X3JlcG9ydF9leHBlY3RlZF9hcnJheShQb3B1bGF0ZUFycmF5Q29u dGV4dCAqY3R4LCBpbnQgbmRpbSk7Ci1zdGF0aWMgdm9pZCBwb3B1bGF0ZV9hcnJheV9hc3NpZ25f bmRpbXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW1zKTsKLXN0YXRpYyB2b2lk IHBvcHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4 LCBpbnQgbmRpbSk7Ci1zdGF0aWMgdm9pZCBwb3B1bGF0ZV9hcnJheV9lbGVtZW50KFBvcHVsYXRl QXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltLCBKc1ZhbHVlICpqc3YpOworc3RhdGljIGJvb2wg cG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGlu dCBuZGltcyk7CitzdGF0aWMgYm9vbCBwb3B1bGF0ZV9hcnJheV9jaGVja19kaW1lbnNpb24oUG9w dWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW0pOworc3RhdGljIGJvb2wgcG9wdWxhdGVf YXJyYXlfZWxlbWVudChQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRpbSwgSnNWYWx1 ZSAqanN2KTsKIHN0YXRpYyBEYXR1bSBwb3B1bGF0ZV9hcnJheShBcnJheUlPRGF0YSAqYWlvLCBj b25zdCBjaGFyICpjb2xuYW1lLAotCQkJCQkJCU1lbW9yeUNvbnRleHQgbWN4dCwgSnNWYWx1ZSAq anN2KTsKKwkJCQkJCQlNZW1vcnlDb250ZXh0IG1jeHQsIEpzVmFsdWUgKmpzdiwKKwkJCQkJCQli b29sICppc251bGwsCisJCQkJCQkJTm9kZSAqZXNjb250ZXh0KTsKIHN0YXRpYyBEYXR1bSBwb3B1 bGF0ZV9kb21haW4oRG9tYWluSU9EYXRhICppbywgT2lkIHR5cGlkLCBjb25zdCBjaGFyICpjb2xu YW1lLAotCQkJCQkJCSBNZW1vcnlDb250ZXh0IG1jeHQsIEpzVmFsdWUgKmpzdiwgYm9vbCBpc251 bGwpOworCQkJCQkJCSBNZW1vcnlDb250ZXh0IG1jeHQsIEpzVmFsdWUgKmpzdiwgYm9vbCAqaXNu dWxsLAorCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCiAvKiBmdW5jdGlvbnMgc3VwcG9ydGlu ZyBqc29uYl9kZWxldGUsIGpzb25iX3NldCBhbmQganNvbmJfY29uY2F0ICovCiBzdGF0aWMgSnNv bmJWYWx1ZSAqSXRlcmF0b3JDb25jYXQoSnNvbmJJdGVyYXRvciAqKml0MSwgSnNvbmJJdGVyYXRv ciAqKml0MiwKQEAgLTI0ODQsMTQgKzI0OTEsMTUgQEAgcG9wdWxhdGVfYXJyYXlfcmVwb3J0X2V4 cGVjdGVkX2FycmF5KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKQogCWlmIChu ZGltIDw9IDApCiAJewogCQlpZiAoY3R4LT5jb2xuYW1lKQotCQkJZXJlcG9ydChFUlJPUiwKKwkJ CWVycnNhdmUoY3R4LT5lc2NvbnRleHQsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9U RVhUX1JFUFJFU0VOVEFUSU9OKSwKIAkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBhcnJheSIp LAogCQkJCQkgZXJyaGludCgiU2VlIHRoZSB2YWx1ZSBvZiBrZXkgXCIlc1wiLiIsIGN0eC0+Y29s bmFtZSkpKTsKIAkJZWxzZQotCQkJZXJlcG9ydChFUlJPUiwKKwkJCWVycnNhdmUoY3R4LT5lc2Nv bnRleHQsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9O KSwKIAkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBhcnJheSIpKSk7CisJCXJldHVybjsKIAl9 CiAJZWxzZQogCXsKQEAgLTI1MDYsMjIgKzI1MTQsMjggQEAgcG9wdWxhdGVfYXJyYXlfcmVwb3J0 X2V4cGVjdGVkX2FycmF5KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltKQogCQkJ YXBwZW5kU3RyaW5nSW5mbygmaW5kaWNlcywgIlslZF0iLCBjdHgtPnNpemVzW2ldKTsKIAogCQlp ZiAoY3R4LT5jb2xuYW1lKQotCQkJZXJlcG9ydChFUlJPUiwKKwkJCWVycnNhdmUoY3R4LT5lc2Nv bnRleHQsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9O KSwKIAkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBhcnJheSIpLAogCQkJCQkgZXJyaGludCgi U2VlIHRoZSBhcnJheSBlbGVtZW50ICVzIG9mIGtleSBcIiVzXCIuIiwKIAkJCQkJCQkgaW5kaWNl cy5kYXRhLCBjdHgtPmNvbG5hbWUpKSk7CiAJCWVsc2UKLQkJCWVyZXBvcnQoRVJST1IsCisJCQll cnJzYXZlKGN0eC0+ZXNjb250ZXh0LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVY VF9SRVBSRVNFTlRBVElPTiksCiAJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gYXJyYXkiKSwK IAkJCQkJIGVycmhpbnQoIlNlZSB0aGUgYXJyYXkgZWxlbWVudCAlcy4iLAogCQkJCQkJCSBpbmRp Y2VzLmRhdGEpKSk7CisJCXJldHVybjsKIAl9CiB9CiAKLS8qIHNldCB0aGUgbnVtYmVyIG9mIGRp bWVuc2lvbnMgb2YgdGhlIHBvcHVsYXRlZCBhcnJheSB3aGVuIGl0IGJlY29tZXMga25vd24gKi8K LXN0YXRpYyB2b2lkCisvKgorICogVmFsaWRhdGUgYW5kIHNldCBuZGltcyBmb3IgcG9wdWxhdGlu ZyBhbiBhcnJheSB3aXRoIHNvbWUKKyAqIHBvcHVsYXRlX2FycmF5XyooKSBmdW5jdGlvbi4KKyAq CisgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBpbnB1dCAobmRpbXMpIGlzIGVycm9uZW91cy4KKyAq Lworc3RhdGljIGJvb2wKIHBvcHVsYXRlX2FycmF5X2Fzc2lnbl9uZGltcyhQb3B1bGF0ZUFycmF5 Q29udGV4dCAqY3R4LCBpbnQgbmRpbXMpCiB7CiAJaW50CQkJaTsKQEAgLTI1MjksNyArMjU0Mywx MiBAQCBwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0 eCwgaW50IG5kaW1zKQogCUFzc2VydChjdHgtPm5kaW1zIDw9IDApOwogCiAJaWYgKG5kaW1zIDw9 IDApCisJewogCQlwb3B1bGF0ZV9hcnJheV9yZXBvcnRfZXhwZWN0ZWRfYXJyYXkoY3R4LCBuZGlt cyk7CisJCS8qIEdldHRpbmcgaGVyZSBtZWFucyB0aGUgZXJyb3Igd2FzIHJlcG9ydGVkIHNvZnRs eS4gKi8KKwkJQXNzZXJ0KFNPRlRfRVJST1JfT0NDVVJSRUQoY3R4LT5lc2NvbnRleHQpKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KIAogCWN0eC0+bmRpbXMgPSBuZGltczsKIAljdHgtPmRpbXMgPSBw YWxsb2Moc2l6ZW9mKGludCkgKiBuZGltcyk7CkBAIC0yNTM3LDEwICsyNTU2LDE2IEBAIHBvcHVs YXRlX2FycmF5X2Fzc2lnbl9uZGltcyhQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBpbnQgbmRp bXMpCiAKIAlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKIAkJY3R4LT5kaW1zW2ldID0gLTE7 CQkvKiBkaW1lbnNpb25zIGFyZSB1bmtub3duIHlldCAqLworCisJcmV0dXJuIHRydWU7CiB9CiAK LS8qIGNoZWNrIHRoZSBwb3B1bGF0ZWQgc3ViYXJyYXkgZGltZW5zaW9uICovCi1zdGF0aWMgdm9p ZAorLyoKKyAqIENoZWNrIHRoZSBwb3B1bGF0ZWQgc3ViYXJyYXkgZGltZW5zaW9uCisgKgorICog UmV0dXJucyBmYWxzZSBpZiB0aGUgaW5wdXQgKG5kaW1zKSBpcyBlcnJvbmVvdXMuCisgKi8KK3N0 YXRpYyBib29sCiBwb3B1bGF0ZV9hcnJheV9jaGVja19kaW1lbnNpb24oUG9wdWxhdGVBcnJheUNv bnRleHQgKmN0eCwgaW50IG5kaW0pCiB7CiAJaW50CQkJZGltID0gY3R4LT5zaXplc1tuZGltXTsg LyogY3VycmVudCBkaW1lbnNpb24gY291bnRlciAqLwpAQCAtMjU0OCwyMSArMjU3MywzMSBAQCBw b3B1bGF0ZV9hcnJheV9jaGVja19kaW1lbnNpb24oUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwg aW50IG5kaW0pCiAJaWYgKGN0eC0+ZGltc1tuZGltXSA9PSAtMSkKIAkJY3R4LT5kaW1zW25kaW1d ID0gZGltOwkvKiBhc3NpZ24gZGltZW5zaW9uIGlmIG5vdCB5ZXQga25vd24gKi8KIAllbHNlIGlm IChjdHgtPmRpbXNbbmRpbV0gIT0gZGltKQotCQllcmVwb3J0KEVSUk9SLAorCQllcnJzYXZlKGN0 eC0+ZXNjb250ZXh0LAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VO VEFUSU9OKSwKIAkJCQkgZXJybXNnKCJtYWxmb3JtZWQgSlNPTiBhcnJheSIpLAogCQkJCSBlcnJk ZXRhaWwoIk11bHRpZGltZW5zaW9uYWwgYXJyYXlzIG11c3QgaGF2ZSAiCiAJCQkJCQkgICAic3Vi LWFycmF5cyB3aXRoIG1hdGNoaW5nIGRpbWVuc2lvbnMuIikpKTsKIAorCS8qIE5vdGhpbmcgdG8g ZG8gb24gYW4gZXJyb3IuICovCisJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoY3R4LT5lc2NvbnRl eHQpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKiByZXNldCB0aGUgY3VycmVudCBhcnJheSBkaW1l bnNpb24gc2l6ZSBjb3VudGVyICovCiAJY3R4LT5zaXplc1tuZGltXSA9IDA7CiAKIAkvKiBpbmNy ZW1lbnQgdGhlIHBhcmVudCBkaW1lbnNpb24gY291bnRlciBpZiBpdCBpcyBhIG5lc3RlZCBzdWIt YXJyYXkgKi8KIAlpZiAobmRpbSA+IDApCiAJCWN0eC0+c2l6ZXNbbmRpbSAtIDFdKys7CisKKwly ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhl IGFycmF5IGVsZW1lbnQgdmFsdWUgd2FzIHN1Y2Nlc3NmdWxseSBleHRyYWN0ZWQgZnJvbSBqc3YK KyAqIGFuZCBhZGRlZCB0byBjdHgtPmFzdGF0ZS4gIEZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVk IHdoZW4gZG9pbmcgc28uCisgKi8KK3N0YXRpYyBib29sCiBwb3B1bGF0ZV9hcnJheV9lbGVtZW50 KFBvcHVsYXRlQXJyYXlDb250ZXh0ICpjdHgsIGludCBuZGltLCBKc1ZhbHVlICpqc3YpCiB7CiAJ RGF0dW0JCWVsZW1lbnQ7CkBAIC0yNTczLDEzICsyNjA4LDE4IEBAIHBvcHVsYXRlX2FycmF5X2Vs ZW1lbnQoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgaW50IG5kaW0sIEpzVmFsdWUgKmpzdikK IAkJCQkJCQkJCWN0eC0+YWlvLT5lbGVtZW50X3R5cGUsCiAJCQkJCQkJCQljdHgtPmFpby0+ZWxl bWVudF90eXBtb2QsCiAJCQkJCQkJCQlOVUxMLCBjdHgtPm1jeHQsIFBvaW50ZXJHZXREYXR1bShO VUxMKSwKLQkJCQkJCQkJCWpzdiwgJmVsZW1lbnRfaXNudWxsKTsKKwkJCQkJCQkJCWpzdiwgJmVs ZW1lbnRfaXNudWxsLCBjdHgtPmVzY29udGV4dCk7CisJLyogTm90aGluZyB0byBkbyBvbiBhbiBl cnJvci4gKi8KKwlpZiAoU09GVF9FUlJPUl9PQ0NVUlJFRChjdHgtPmVzY29udGV4dCkpCisJCXJl dHVybiBmYWxzZTsKIAogCWFjY3VtQXJyYXlSZXN1bHQoY3R4LT5hc3RhdGUsIGVsZW1lbnQsIGVs ZW1lbnRfaXNudWxsLAogCQkJCQkgY3R4LT5haW8tPmVsZW1lbnRfdHlwZSwgY3R4LT5hY3h0KTsK IAogCUFzc2VydChuZGltID4gMCk7CiAJY3R4LT5zaXplc1tuZGltIC0gMV0rKzsJCS8qIGluY3Jl bWVudCBjdXJyZW50IGRpbWVuc2lvbiBjb3VudGVyICovCisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAog LyoganNvbiBvYmplY3Qgc3RhcnQgaGFuZGxlciBmb3IgcG9wdWxhdGVfYXJyYXlfanNvbigpICov CkBAIC0yNTkwLDkgKzI2MzAsMTcgQEAgcG9wdWxhdGVfYXJyYXlfb2JqZWN0X3N0YXJ0KHZvaWQg Kl9zdGF0ZSkKIAlpbnQJCQluZGltID0gc3RhdGUtPmxleC0+bGV4X2xldmVsOwogCiAJaWYgKHN0 YXRlLT5jdHgtPm5kaW1zIDw9IDApCi0JCXBvcHVsYXRlX2FycmF5X2Fzc2lnbl9uZGltcyhzdGF0 ZS0+Y3R4LCBuZGltKTsKKwl7CisJCWlmICghcG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKHN0 YXRlLT5jdHgsIG5kaW0pKQorCQkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7CisJfQog CWVsc2UgaWYgKG5kaW0gPCBzdGF0ZS0+Y3R4LT5uZGltcykKKwl7CiAJCXBvcHVsYXRlX2FycmF5 X3JlcG9ydF9leHBlY3RlZF9hcnJheShzdGF0ZS0+Y3R4LCBuZGltKTsKKwkJLyogR2V0dGluZyBo ZXJlIG1lYW5zIHRoZSBlcnJvciB3YXMgcmVwb3J0ZWQgc29mdGx5LiAqLworCQlBc3NlcnQoU09G VF9FUlJPUl9PQ0NVUlJFRChzdGF0ZS0+Y3R4LT5lc2NvbnRleHQpKTsKKwkJcmV0dXJuIEpTT05f U0VNX0FDVElPTl9GQUlMRUQ7CisJfQogCiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsKIH0KQEAgLTI2 MDYsMTAgKzI2NTQsMTcgQEAgcG9wdWxhdGVfYXJyYXlfYXJyYXlfZW5kKHZvaWQgKl9zdGF0ZSkK IAlpbnQJCQluZGltID0gc3RhdGUtPmxleC0+bGV4X2xldmVsOwogCiAJaWYgKGN0eC0+bmRpbXMg PD0gMCkKLQkJcG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKGN0eCwgbmRpbSArIDEpOworCXsK KwkJaWYgKCFwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoY3R4LCBuZGltICsgMSkpCisJCQly ZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CiAKIAlpZiAobmRpbSA8IGN0eC0+bmRp bXMpCi0JCXBvcHVsYXRlX2FycmF5X2NoZWNrX2RpbWVuc2lvbihjdHgsIG5kaW0pOworCXsKKwkJ LyogUmVwb3J0IGlmIGFuIGVycm9yIG9jY3VycmVkLiAqLworCQlpZiAoIXBvcHVsYXRlX2FycmF5 X2NoZWNrX2RpbWVuc2lvbihjdHgsIG5kaW0pKQorCQkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisJfQogCiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsKIH0KQEAgLTI2NjcsNyArMjcyMiw5 IEBAIHBvcHVsYXRlX2FycmF5X2VsZW1lbnRfZW5kKHZvaWQgKl9zdGF0ZSwgYm9vbCBpc251bGwp CiAJCQkJCQkJCXN0YXRlLT5lbGVtZW50X3N0YXJ0KSAqIHNpemVvZihjaGFyKTsKIAkJfQogCi0J CXBvcHVsYXRlX2FycmF5X2VsZW1lbnQoY3R4LCBuZGltLCAmanN2KTsKKwkJLyogUmVwb3J0IGlm IGFuIGVycm9yIG9jY3VycmVkLiAqLworCQlpZiAoIXBvcHVsYXRlX2FycmF5X2VsZW1lbnQoY3R4 LCBuZGltLCAmanN2KSkKKwkJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOwogCX0KIAog CXJldHVybiBKU09OX1NVQ0NFU1M7CkBAIC0yNjgyLDkgKzI3MzksMTcgQEAgcG9wdWxhdGVfYXJy YXlfc2NhbGFyKHZvaWQgKl9zdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50 eXBlKQogCWludAkJCW5kaW0gPSBzdGF0ZS0+bGV4LT5sZXhfbGV2ZWw7CiAKIAlpZiAoY3R4LT5u ZGltcyA8PSAwKQotCQlwb3B1bGF0ZV9hcnJheV9hc3NpZ25fbmRpbXMoY3R4LCBuZGltKTsKKwl7 CisJCWlmICghcG9wdWxhdGVfYXJyYXlfYXNzaWduX25kaW1zKGN0eCwgbmRpbSkpCisJCQlyZXR1 cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CiAJZWxzZSBpZiAobmRpbSA8IGN0eC0+bmRp bXMpCisJewogCQlwb3B1bGF0ZV9hcnJheV9yZXBvcnRfZXhwZWN0ZWRfYXJyYXkoY3R4LCBuZGlt KTsKKwkJLyogR2V0dGluZyBoZXJlIG1lYW5zIHRoZSBlcnJvciB3YXMgcmVwb3J0ZWQgc29mdGx5 LiAqLworCQlBc3NlcnQoU09GVF9FUlJPUl9PQ0NVUlJFRChjdHgtPmVzY29udGV4dCkpOworCQly ZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CiAKIAlpZiAobmRpbSA9PSBjdHgtPm5k aW1zKQogCXsKQEAgLTI2OTcsOCArMjc2MiwxMiBAQCBwb3B1bGF0ZV9hcnJheV9zY2FsYXIodm9p ZCAqX3N0YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAJcmV0dXJu IEpTT05fU1VDQ0VTUzsKIH0KIAotLyogcGFyc2UgYSBqc29uIGFycmF5IGFuZCBwb3B1bGF0ZSBh cnJheSAqLwotc3RhdGljIHZvaWQKKy8qCisgKiBQYXJzZSBhIGpzb24gYXJyYXkgYW5kIHBvcHVs YXRlIGFycmF5CisgKgorICogUmV0dXJucyBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnMgd2hlbiBw YXJzaW5nLgorICovCitzdGF0aWMgYm9vbAogcG9wdWxhdGVfYXJyYXlfanNvbihQb3B1bGF0ZUFy cmF5Q29udGV4dCAqY3R4LCBjaGFyICpqc29uLCBpbnQgbGVuKQogewogCVBvcHVsYXRlQXJyYXlT dGF0ZSBzdGF0ZTsKQEAgLTI3MTYsMTkgKzI3ODUsMjUgQEAgcG9wdWxhdGVfYXJyYXlfanNvbihQ b3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCBjaGFyICpqc29uLCBpbnQgbGVuKQogCXNlbS5hcnJh eV9lbGVtZW50X2VuZCA9IHBvcHVsYXRlX2FycmF5X2VsZW1lbnRfZW5kOwogCXNlbS5zY2FsYXIg PSBwb3B1bGF0ZV9hcnJheV9zY2FsYXI7CiAKLQlwZ19wYXJzZV9qc29uX29yX2VyZXBvcnQoc3Rh dGUubGV4LCAmc2VtKTsKLQotCS8qIG51bWJlciBvZiBkaW1lbnNpb25zIHNob3VsZCBiZSBhbHJl YWR5IGtub3duICovCi0JQXNzZXJ0KGN0eC0+bmRpbXMgPiAwICYmIGN0eC0+ZGltcyk7CisJaWYg KHBnX3BhcnNlX2pzb25fb3JfZXJyc2F2ZShzdGF0ZS5sZXgsICZzZW0sIGN0eC0+ZXNjb250ZXh0 KSkKKwl7CisJCS8qIG51bWJlciBvZiBkaW1lbnNpb25zIHNob3VsZCBiZSBhbHJlYWR5IGtub3du ICovCisJCUFzc2VydChjdHgtPm5kaW1zID4gMCAmJiBjdHgtPmRpbXMpOworCX0KIAogCWZyZWVK c29uTGV4Q29udGV4dChzdGF0ZS5sZXgpOworCisJcmV0dXJuICFTT0ZUX0VSUk9SX09DQ1VSUkVE KGN0eC0+ZXNjb250ZXh0KTsKIH0KIAogLyoKICAqIHBvcHVsYXRlX2FycmF5X2RpbV9qc29uYigp IC0tIEl0ZXJhdGUgcmVjdXJzaXZlbHkgdGhyb3VnaCBqc29uYiBzdWItYXJyYXkKICAqCQllbGVt ZW50cyBhbmQgYWNjdW11bGF0ZSByZXN1bHQgdXNpbmcgZ2l2ZW4gQXJyYXlCdWlsZFN0YXRlLgor ICoKKyAqIFJldHVybnMgZmFsc2UgaWYgd2UgcmV0dXJuIHBhcnR3YXkgdGhyb3VnaCBiZWNhdXNl IG9mIGFuIGVycm9yIGluIGEKKyAqIHN1YnJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0 aWMgYm9vbAogcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0ICpj dHgsIC8qIGNvbnRleHQgKi8KIAkJCQkJCSBKc29uYlZhbHVlICpqYnYsCS8qIGpzb25iIHN1Yi1h cnJheSAqLwogCQkJCQkJIGludCBuZGltKQkvKiBjdXJyZW50IGRpbWVuc2lvbiAqLwpAQCAtMjc0 MSwxMCArMjgxNiwxNCBAQCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNv bnRleHQgKmN0eCwgLyogY29udGV4dCAqLwogCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKIAotCWlm IChqYnYtPnR5cGUgIT0gamJ2QmluYXJ5IHx8ICFKc29uQ29udGFpbmVySXNBcnJheShqYmMpKQor CWlmIChqYnYtPnR5cGUgIT0gamJ2QmluYXJ5IHx8ICFKc29uQ29udGFpbmVySXNBcnJheShqYmMp IHx8CisJCUpzb25Db250YWluZXJJc1NjYWxhcihqYmMpKQorCXsKIAkJcG9wdWxhdGVfYXJyYXlf cmVwb3J0X2V4cGVjdGVkX2FycmF5KGN0eCwgbmRpbSAtIDEpOwotCi0JQXNzZXJ0KCFKc29uQ29u dGFpbmVySXNTY2FsYXIoamJjKSk7CisJCS8qIEdldHRpbmcgaGVyZSBtZWFucyB0aGUgZXJyb3Ig d2FzIHJlcG9ydGVkIHNvZnRseS4gKi8KKwkJQXNzZXJ0KFNPRlRfRVJST1JfT0NDVVJSRUQoY3R4 LT5lc2NvbnRleHQpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAogCWl0ID0gSnNvbmJJdGVyYXRv ckluaXQoamJjKTsKIApAQCAtMjc2Myw3ICsyODQyLDEwIEBAIHBvcHVsYXRlX2FycmF5X2RpbV9q c29uYihQb3B1bGF0ZUFycmF5Q29udGV4dCAqY3R4LCAvKiBjb250ZXh0ICovCiAJCSAodG9rID09 IFdKQl9FTEVNICYmCiAJCSAgKHZhbC50eXBlICE9IGpidkJpbmFyeSB8fAogCQkgICAhSnNvbkNv bnRhaW5lcklzQXJyYXkodmFsLnZhbC5iaW5hcnkuZGF0YSkpKSkpCi0JCXBvcHVsYXRlX2FycmF5 X2Fzc2lnbl9uZGltcyhjdHgsIG5kaW0pOworCXsKKwkJaWYgKCFwb3B1bGF0ZV9hcnJheV9hc3Np Z25fbmRpbXMoY3R4LCBuZGltKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlqc3YuaXNfanNv biA9IGZhbHNlOwogCWpzdi52YWwuanNvbmIgPSAmdmFsOwpAQCAtMjc3NiwxNiArMjg1OCwyMSBA QCBwb3B1bGF0ZV9hcnJheV9kaW1fanNvbmIoUG9wdWxhdGVBcnJheUNvbnRleHQgKmN0eCwgLyog Y29udGV4dCAqLwogCQkgKiBpdCBpcyBub3QgdGhlIGlubmVybW9zdCBkaW1lbnNpb24uCiAJCSAq LwogCQlpZiAoY3R4LT5uZGltcyA+IDAgJiYgbmRpbSA+PSBjdHgtPm5kaW1zKQotCQkJcG9wdWxh dGVfYXJyYXlfZWxlbWVudChjdHgsIG5kaW0sICZqc3YpOworCQl7CisJCQlpZiAoIXBvcHVsYXRl X2FycmF5X2VsZW1lbnQoY3R4LCBuZGltLCAmanN2KSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0K IAkJZWxzZQogCQl7CiAJCQkvKiBwb3B1bGF0ZSBjaGlsZCBzdWItYXJyYXkgKi8KLQkJCXBvcHVs YXRlX2FycmF5X2RpbV9qc29uYihjdHgsICZ2YWwsIG5kaW0gKyAxKTsKKwkJCWlmICghcG9wdWxh dGVfYXJyYXlfZGltX2pzb25iKGN0eCwgJnZhbCwgbmRpbSArIDEpKQorCQkJCXJldHVybiBmYWxz ZTsKIAogCQkJLyogbnVtYmVyIG9mIGRpbWVuc2lvbnMgc2hvdWxkIGJlIGFscmVhZHkga25vd24g Ki8KIAkJCUFzc2VydChjdHgtPm5kaW1zID4gMCAmJiBjdHgtPmRpbXMpOwogCi0JCQlwb3B1bGF0 ZV9hcnJheV9jaGVja19kaW1lbnNpb24oY3R4LCBuZGltKTsKKwkJCWlmICghcG9wdWxhdGVfYXJy YXlfY2hlY2tfZGltZW5zaW9uKGN0eCwgbmRpbSkpCisJCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAK IAkJdG9rID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdmFsLCB0cnVlKTsKQEAgLTI3OTYsMTQg KzI4ODMsMjIgQEAgcG9wdWxhdGVfYXJyYXlfZGltX2pzb25iKFBvcHVsYXRlQXJyYXlDb250ZXh0 ICpjdHgsIC8qIGNvbnRleHQgKi8KIAkvKiBmcmVlIGl0ZXJhdG9yLCBpdGVyYXRpbmcgdW50aWwg V0pCX0RPTkUgKi8KIAl0b2sgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2YWwsIHRydWUpOwog CUFzc2VydCh0b2sgPT0gV0pCX0RPTkUgJiYgIWl0KTsKKworCXJldHVybiB0cnVlOwogfQogCi0v KiByZWN1cnNpdmVseSBwb3B1bGF0ZSBhbiBhcnJheSBmcm9tIGpzb24vanNvbmIgKi8KKy8qCisg KiBSZWN1cnNpdmVseSBwb3B1bGF0ZSBhbiBhcnJheSBmcm9tIGpzb24vanNvbmIKKyAqCisgKiAq aXNudWxsIGlzIHNldCB0byB0cnVlIGlmIGFuIGVycm9yIGlzIHJlcG9ydGVkIGR1cmluZyBwYXJz aW5nLgorICovCiBzdGF0aWMgRGF0dW0KIHBvcHVsYXRlX2FycmF5KEFycmF5SU9EYXRhICphaW8s CiAJCQkgICBjb25zdCBjaGFyICpjb2xuYW1lLAogCQkJICAgTWVtb3J5Q29udGV4dCBtY3h0LAot CQkJICAgSnNWYWx1ZSAqanN2KQorCQkJICAgSnNWYWx1ZSAqanN2LAorCQkJICAgYm9vbCAqaXNu dWxsLAorCQkJICAgTm9kZSAqZXNjb250ZXh0KQogewogCVBvcHVsYXRlQXJyYXlDb250ZXh0IGN0 eDsKIAlEYXR1bQkJcmVzdWx0OwpAQCAtMjgxOCwxNCArMjkxMywyNyBAQCBwb3B1bGF0ZV9hcnJh eShBcnJheUlPRGF0YSAqYWlvLAogCWN0eC5uZGltcyA9IDA7CQkJCS8qIHVua25vd24geWV0ICov CiAJY3R4LmRpbXMgPSBOVUxMOwogCWN0eC5zaXplcyA9IE5VTEw7CisJY3R4LmVzY29udGV4dCA9 IGVzY29udGV4dDsKIAogCWlmIChqc3YtPmlzX2pzb24pCi0JCXBvcHVsYXRlX2FycmF5X2pzb24o JmN0eCwganN2LT52YWwuanNvbi5zdHIsCi0JCQkJCQkJanN2LT52YWwuanNvbi5sZW4gPj0gMCA/ IGpzdi0+dmFsLmpzb24ubGVuCi0JCQkJCQkJOiBzdHJsZW4oanN2LT52YWwuanNvbi5zdHIpKTsK Kwl7CisJCS8qIFJldHVybiBudWxsIGlmIGFuIGVycm9yIHdhcyBmb3VuZC4gKi8KKwkJaWYgKCFw b3B1bGF0ZV9hcnJheV9qc29uKCZjdHgsIGpzdi0+dmFsLmpzb24uc3RyLAorCQkJCQkJCQkganN2 LT52YWwuanNvbi5sZW4gPj0gMCA/IGpzdi0+dmFsLmpzb24ubGVuCisJCQkJCQkJCSA6IHN0cmxl bihqc3YtPnZhbC5qc29uLnN0cikpKQorCQl7CisJCQkqaXNudWxsID0gdHJ1ZTsKKwkJCXJldHVy biAoRGF0dW0pIDA7CisJCX0KKwl9CiAJZWxzZQogCXsKLQkJcG9wdWxhdGVfYXJyYXlfZGltX2pz b25iKCZjdHgsIGpzdi0+dmFsLmpzb25iLCAxKTsKKwkJLyogUmV0dXJuIG51bGwgaWYgYW4gZXJy b3Igd2FzIGZvdW5kLiAqLworCQlpZiAoIXBvcHVsYXRlX2FycmF5X2RpbV9qc29uYigmY3R4LCBq c3YtPnZhbC5qc29uYiwgMSkpCisJCXsKKwkJCSppc251bGwgPSB0cnVlOworCQkJcmV0dXJuIChE YXR1bSkgMDsKKwkJfQogCQljdHguZGltc1swXSA9IGN0eC5zaXplc1swXTsKIAl9CiAKQEAgLTI4 NDMsMTEgKzI5NTEsMTYgQEAgcG9wdWxhdGVfYXJyYXkoQXJyYXlJT0RhdGEgKmFpbywKIAlwZnJl ZShjdHguc2l6ZXMpOwogCXBmcmVlKGxicyk7CiAKKwkqaXNudWxsID0gZmFsc2U7CiAJcmV0dXJu IHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQKLUpzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUgKmpz diwgSnNPYmplY3QgKmpzbykKKy8qCisgKiBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIG9jY3Vy cywgcHJvdmlkZWQgZXNjb250ZXh0IHBvaW50cyB0byBhbgorICogRXJyb3JTYXZlQ29udGV4dC4K KyAqLworc3RhdGljIGJvb2wKK0pzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUgKmpzdiwgSnNPYmpl Y3QgKmpzbywgTm9kZSAqZXNjb250ZXh0KQogewogCWpzby0+aXNfanNvbiA9IGpzdi0+aXNfanNv bjsKIApAQCAtMjg1OSw3ICsyOTcyLDkgQEAgSnNWYWx1ZVRvSnNPYmplY3QoSnNWYWx1ZSAqanN2 LCBKc09iamVjdCAqanNvKQogCQkJCQkJCQkJanN2LT52YWwuanNvbi5sZW4gPj0gMAogCQkJCQkJ CQkJPyBqc3YtPnZhbC5qc29uLmxlbgogCQkJCQkJCQkJOiBzdHJsZW4oanN2LT52YWwuanNvbi5z dHIpLAotCQkJCQkJCQkJInBvcHVsYXRlX2NvbXBvc2l0ZSIpOworCQkJCQkJCQkJInBvcHVsYXRl X2NvbXBvc2l0ZSIsCisJCQkJCQkJCQllc2NvbnRleHQpOworCQlBc3NlcnQoanNvLT52YWwuanNv bl9oYXNoICE9IE5VTEwgfHwgU09GVF9FUlJPUl9PQ0NVUlJFRChlc2NvbnRleHQpKTsKIAl9CiAJ ZWxzZQogCXsKQEAgLTI4NzcsNyArMjk5Miw3IEBAIEpzVmFsdWVUb0pzT2JqZWN0KEpzVmFsdWUg KmpzdiwgSnNPYmplY3QgKmpzbykKIAkJCWlzX3NjYWxhciA9IElzQUpzb25iU2NhbGFyKGpidikg fHwKIAkJCQkoamJ2LT50eXBlID09IGpidkJpbmFyeSAmJgogCQkJCSBKc29uQ29udGFpbmVySXNT Y2FsYXIoamJ2LT52YWwuYmluYXJ5LmRhdGEpKTsKLQkJCWVyZXBvcnQoRVJST1IsCisJCQllcnJz YXZlKGVzY29udGV4dCwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCiAJCQkJCSBpc19zY2FsYXIKIAkJCQkJID8gZXJybXNnKCJjYW5ub3QgY2FsbCAlcyBv biBhIHNjYWxhciIsCkBAIC0yODg2LDYgKzMwMDEsOCBAQCBKc1ZhbHVlVG9Kc09iamVjdChKc1Zh bHVlICpqc3YsIEpzT2JqZWN0ICpqc28pCiAJCQkJCQkJICAicG9wdWxhdGVfY29tcG9zaXRlIikp KTsKIAkJfQogCX0KKworCXJldHVybiAhU09GVF9FUlJPUl9PQ0NVUlJFRChlc2NvbnRleHQpOwog fQogCiAvKiBhY3F1aXJlIG9yIHVwZGF0ZSBjYWNoZWQgdHVwbGUgZGVzY3JpcHRvciBmb3IgYSBj b21wb3NpdGUgdHlwZSAqLwpAQCAtMjkxMiw3ICszMDI5LDEyIEBAIHVwZGF0ZV9jYWNoZWRfdHVw ZGVzYyhDb21wb3NpdGVJT0RhdGEgKmlvLCBNZW1vcnlDb250ZXh0IG1jeHQpCiAJfQogfQogCi0v KiByZWN1cnNpdmVseSBwb3B1bGF0ZSBhIGNvbXBvc2l0ZSAocm93IHR5cGUpIHZhbHVlIGZyb20g anNvbi9qc29uYiAqLworLyoKKyAqIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGEgY29tcG9zaXRlIChy b3cgdHlwZSkgdmFsdWUgZnJvbSBqc29uL2pzb25iCisgKgorICogUmV0dXJucyBudWxsIGlmIGFu IGVycm9yIG9jY3VycyBpbiBhIHN1YnJvdXRpbmUsIHByb3ZpZGVkIGVzY29udGV4dCBwb2ludHMK KyAqIHRvIGFuIEVycm9yU2F2ZUNvbnRleHQuCisgKi8KIHN0YXRpYyBEYXR1bQogcG9wdWxhdGVf Y29tcG9zaXRlKENvbXBvc2l0ZUlPRGF0YSAqaW8sCiAJCQkJICAgT2lkIHR5cGlkLApAQCAtMjky MCwxNCArMzA0MiwxNSBAQCBwb3B1bGF0ZV9jb21wb3NpdGUoQ29tcG9zaXRlSU9EYXRhICppbywK IAkJCQkgICBNZW1vcnlDb250ZXh0IG1jeHQsCiAJCQkJICAgSGVhcFR1cGxlSGVhZGVyIGRlZmF1 bHR2YWwsCiAJCQkJICAgSnNWYWx1ZSAqanN2LAotCQkJCSAgIGJvb2wgaXNudWxsKQorCQkJCSAg IGJvb2wgKmlzbnVsbCwKKwkJCQkgICBOb2RlICplc2NvbnRleHQpCiB7CiAJRGF0dW0JCXJlc3Vs dDsKIAogCS8qIGFjcXVpcmUvdXBkYXRlIGNhY2hlZCB0dXBsZSBkZXNjcmlwdG9yICovCiAJdXBk YXRlX2NhY2hlZF90dXBkZXNjKGlvLCBtY3h0KTsKIAotCWlmIChpc251bGwpCisJaWYgKCppc251 bGwpCiAJCXJlc3VsdCA9IChEYXR1bSkgMDsKIAllbHNlCiAJewpAQCAtMjkzNSwxMSArMzA1OCwy MSBAQCBwb3B1bGF0ZV9jb21wb3NpdGUoQ29tcG9zaXRlSU9EYXRhICppbywKIAkJSnNPYmplY3QJ anNvOwogCiAJCS8qIHByZXBhcmUgaW5wdXQgdmFsdWUgKi8KLQkJSnNWYWx1ZVRvSnNPYmplY3Qo anN2LCAmanNvKTsKKwkJaWYgKCFKc1ZhbHVlVG9Kc09iamVjdChqc3YsICZqc28sIGVzY29udGV4 dCkpCisJCXsKKwkJCSppc251bGwgPSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQog CiAJCS8qIHBvcHVsYXRlIHJlc3VsdGluZyByZWNvcmQgdHVwbGUgKi8KIAkJdHVwbGUgPSBwb3B1 bGF0ZV9yZWNvcmQoaW8tPnR1cGRlc2MsICZpby0+cmVjb3JkX2lvLAotCQkJCQkJCQlkZWZhdWx0 dmFsLCBtY3h0LCAmanNvKTsKKwkJCQkJCQkJZGVmYXVsdHZhbCwgbWN4dCwgJmpzbywgZXNjb250 ZXh0KTsKKworCQlpZiAoU09GVF9FUlJPUl9PQ0NVUlJFRChlc2NvbnRleHQpKQorCQl7CisJCQkq aXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KIAkJcmVzdWx0ID0gSGVh cFR1cGxlSGVhZGVyR2V0RGF0dW0odHVwbGUpOwogCiAJCUpzT2JqZWN0RnJlZSgmanNvKTsKQEAg LTI5NTEsMTQgKzMwODQsMjcgQEAgcG9wdWxhdGVfY29tcG9zaXRlKENvbXBvc2l0ZUlPRGF0YSAq aW8sCiAJICogbm93LCB3ZSBjYW4gdGVsbCBieSBjb21wYXJpbmcgdHlwaWQgdG8gYmFzZV90eXBp ZC4pCiAJICovCiAJaWYgKHR5cGlkICE9IGlvLT5iYXNlX3R5cGlkICYmIHR5cGlkICE9IFJFQ09S RE9JRCkKLQkJZG9tYWluX2NoZWNrKHJlc3VsdCwgaXNudWxsLCB0eXBpZCwgJmlvLT5kb21haW5f aW5mbywgbWN4dCk7CisJeworCQlpZiAoIWRvbWFpbl9jaGVja19zYWZlKHJlc3VsdCwgKmlzbnVs bCwgdHlwaWQsICZpby0+ZG9tYWluX2luZm8sIG1jeHQsCisJCQkJCQkJICAgZXNjb250ZXh0KSkK KwkJeworCQkJKmlzbnVsbCA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJfQog CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLyogcG9wdWxhdGUgbm9uLW51bGwgc2NhbGFyIHZhbHVl IGZyb20ganNvbi9qc29uYiB2YWx1ZSAqLworLyoKKyAqIFBvcHVsYXRlIG5vbi1udWxsIHNjYWxh ciB2YWx1ZSBmcm9tIGpzb24vanNvbmIgdmFsdWUuCisgKgorICogUmV0dXJucyBudWxsIGlmIGFu IGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGNhbGwgdG8gdHlwZSBpbnB1dCBmdW5jdGlvbiwKKyAq IHByb3ZpZGVkIGVzY29udGV4dCBpcyB2YWxpZC4KKyAqLwogc3RhdGljIERhdHVtCi1wb3B1bGF0 ZV9zY2FsYXIoU2NhbGFySU9EYXRhICppbywgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIEpzVmFs dWUgKmpzdikKK3BvcHVsYXRlX3NjYWxhcihTY2FsYXJJT0RhdGEgKmlvLCBPaWQgdHlwaWQsIGlu dDMyIHR5cG1vZCwgSnNWYWx1ZSAqanN2LAorCQkJCWJvb2wgKmlzbnVsbCwgTm9kZSAqZXNjb250 ZXh0KQogewogCURhdHVtCQlyZXM7CiAJY2hhcgkgICAqc3RyID0gTlVMTDsKQEAgLTMwMjksNyAr MzE3NSwxMiBAQCBwb3B1bGF0ZV9zY2FsYXIoU2NhbGFySU9EYXRhICppbywgT2lkIHR5cGlkLCBp bnQzMiB0eXBtb2QsIEpzVmFsdWUgKmpzdikKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg anNvbmIgdHlwZTogJWQiLCAoaW50KSBqYnYtPnR5cGUpOwogCX0KIAotCXJlcyA9IElucHV0RnVu Y3Rpb25DYWxsKCZpby0+dHlwaW9mdW5jLCBzdHIsIGlvLT50eXBpb3BhcmFtLCB0eXBtb2QpOwor CWlmICghSW5wdXRGdW5jdGlvbkNhbGxTYWZlKCZpby0+dHlwaW9mdW5jLCBzdHIsIGlvLT50eXBp b3BhcmFtLCB0eXBtb2QsCisJCQkJCQkJICAgZXNjb250ZXh0LCAmcmVzKSkKKwl7CisJCXJlcyA9 IChEYXR1bSkgMDsKKwkJKmlzbnVsbCA9IHRydWU7CisJfQogCiAJLyogZnJlZSB0ZW1wb3Jhcnkg YnVmZmVyICovCiAJaWYgKHN0ciAhPSBqc29uKQpAQCAtMzA0NCwyMiArMzE5NSwyOCBAQCBwb3B1 bGF0ZV9kb21haW4oRG9tYWluSU9EYXRhICppbywKIAkJCQljb25zdCBjaGFyICpjb2xuYW1lLAog CQkJCU1lbW9yeUNvbnRleHQgbWN4dCwKIAkJCQlKc1ZhbHVlICpqc3YsCi0JCQkJYm9vbCBpc251 bGwpCisJCQkJYm9vbCAqaXNudWxsLAorCQkJCU5vZGUgKmVzY29udGV4dCkKIHsKIAlEYXR1bQkJ cmVzOwogCi0JaWYgKGlzbnVsbCkKKwlpZiAoKmlzbnVsbCkKIAkJcmVzID0gKERhdHVtKSAwOwog CWVsc2UKIAl7CiAJCXJlcyA9IHBvcHVsYXRlX3JlY29yZF9maWVsZChpby0+YmFzZV9pbywKIAkJ CQkJCQkJCWlvLT5iYXNlX3R5cGlkLCBpby0+YmFzZV90eXBtb2QsCiAJCQkJCQkJCQljb2xuYW1l LCBtY3h0LCBQb2ludGVyR2V0RGF0dW0oTlVMTCksCi0JCQkJCQkJCQlqc3YsICZpc251bGwpOwot CQlBc3NlcnQoIWlzbnVsbCk7CisJCQkJCQkJCQlqc3YsIGlzbnVsbCwgZXNjb250ZXh0KTsKKwkJ QXNzZXJ0KCEqaXNudWxsIHx8IFNPRlRfRVJST1JfT0NDVVJSRUQoZXNjb250ZXh0KSk7CiAJfQog Ci0JZG9tYWluX2NoZWNrKHJlcywgaXNudWxsLCB0eXBpZCwgJmlvLT5kb21haW5faW5mbywgbWN4 dCk7CisJaWYgKCFkb21haW5fY2hlY2tfc2FmZShyZXMsICppc251bGwsIHR5cGlkLCAmaW8tPmRv bWFpbl9pbmZvLCBtY3h0LAorCQkJCQkJICAgZXNjb250ZXh0KSkKKwl7CisJCSppc251bGwgPSB0 cnVlOworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KIAogCXJldHVybiByZXM7CiB9CkBAIC0zMTYw LDcgKzMzMTcsOCBAQCBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoQ29sdW1uSU9EYXRhICpjb2wsCiAJ CQkJCSAgTWVtb3J5Q29udGV4dCBtY3h0LAogCQkJCQkgIERhdHVtIGRlZmF1bHR2YWwsCiAJCQkJ CSAgSnNWYWx1ZSAqanN2LAotCQkJCQkgIGJvb2wgKmlzbnVsbCkKKwkJCQkJICBib29sICppc251 bGwsCisJCQkJCSAgTm9kZSAqZXNjb250ZXh0KQogewogCVR5cGVDYXQJCXR5cGNhdDsKIApAQCAt MzE5MywxMCArMzM1MSwxMiBAQCBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoQ29sdW1uSU9EYXRhICpj b2wsCiAJc3dpdGNoICh0eXBjYXQpCiAJewogCQljYXNlIFRZUEVDQVRfU0NBTEFSOgotCQkJcmV0 dXJuIHBvcHVsYXRlX3NjYWxhcigmY29sLT5zY2FsYXJfaW8sIHR5cGlkLCB0eXBtb2QsIGpzdik7 CisJCQlyZXR1cm4gcG9wdWxhdGVfc2NhbGFyKCZjb2wtPnNjYWxhcl9pbywgdHlwaWQsIHR5cG1v ZCwganN2LAorCQkJCQkJCQkgICBpc251bGwsIGVzY29udGV4dCk7CiAKIAkJY2FzZSBUWVBFQ0FU X0FSUkFZOgotCQkJcmV0dXJuIHBvcHVsYXRlX2FycmF5KCZjb2wtPmlvLmFycmF5LCBjb2xuYW1l LCBtY3h0LCBqc3YpOworCQkJcmV0dXJuIHBvcHVsYXRlX2FycmF5KCZjb2wtPmlvLmFycmF5LCBj b2xuYW1lLCBtY3h0LCBqc3YsCisJCQkJCQkJCSAgaXNudWxsLCBlc2NvbnRleHQpOwogCiAJCWNh c2UgVFlQRUNBVF9DT01QT1NJVEU6CiAJCWNhc2UgVFlQRUNBVF9DT01QT1NJVEVfRE9NQUlOOgpA QCAtMzIwNSwxMSArMzM2NSwxMiBAQCBwb3B1bGF0ZV9yZWNvcmRfZmllbGQoQ29sdW1uSU9EYXRh ICpjb2wsCiAJCQkJCQkJCQkgIERhdHVtR2V0UG9pbnRlcihkZWZhdWx0dmFsKQogCQkJCQkJCQkJ ICA/IERhdHVtR2V0SGVhcFR1cGxlSGVhZGVyKGRlZmF1bHR2YWwpCiAJCQkJCQkJCQkgIDogTlVM TCwKLQkJCQkJCQkJCSAganN2LCAqaXNudWxsKTsKKwkJCQkJCQkJCSAganN2LCBpc251bGwsCisJ CQkJCQkJCQkgIGVzY29udGV4dCk7CiAKIAkJY2FzZSBUWVBFQ0FUX0RPTUFJTjoKIAkJCXJldHVy biBwb3B1bGF0ZV9kb21haW4oJmNvbC0+aW8uZG9tYWluLCB0eXBpZCwgY29sbmFtZSwgbWN4dCwK LQkJCQkJCQkJICAganN2LCAqaXNudWxsKTsKKwkJCQkJCQkJICAganN2LCBpc251bGwsIGVzY29u dGV4dCk7CiAKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHlwZSBj YXRlZ29yeSAnJWMnIiwgdHlwY2F0KTsKQEAgLTMyNjYsNyArMzQyNyw4IEBAIHBvcHVsYXRlX3Jl Y29yZChUdXBsZURlc2MgdHVwZGVzYywKIAkJCQlSZWNvcmRJT0RhdGEgKipyZWNvcmRfcCwKIAkJ CQlIZWFwVHVwbGVIZWFkZXIgZGVmYXVsdHZhbCwKIAkJCQlNZW1vcnlDb250ZXh0IG1jeHQsCi0J CQkJSnNPYmplY3QgKm9iaikKKwkJCQlKc09iamVjdCAqb2JqLAorCQkJCU5vZGUgKmVzY29udGV4 dCkKIHsKIAlSZWNvcmRJT0RhdGEgKnJlY29yZCA9ICpyZWNvcmRfcDsKIAlEYXR1bQkgICAqdmFs dWVzOwpAQCAtMzM1OCw3ICszNTIwLDggQEAgcG9wdWxhdGVfcmVjb3JkKFR1cGxlRGVzYyB0dXBk ZXNjLAogCQkJCQkJCQkJCSAgbWN4dCwKIAkJCQkJCQkJCQkgIG51bGxzW2ldID8gKERhdHVtKSAw IDogdmFsdWVzW2ldLAogCQkJCQkJCQkJCSAgJmZpZWxkLAotCQkJCQkJCQkJCSAgJm51bGxzW2ld KTsKKwkJCQkJCQkJCQkgICZudWxsc1tpXSwKKwkJCQkJCQkJCQkgIGVzY29udGV4dCk7CiAJfQog CiAJcmVzID0gaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOwpAQCAtMzQ0 NSw2ICszNjA4LDcgQEAgcG9wdWxhdGVfcmVjb3JkX3dvcmtlcihGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbywgY29uc3QgY2hhciAqZnVuY25hbWUsCiAJSnNWYWx1ZQkJanN2ID0gezB9OwogCUhlYXBU dXBsZUhlYWRlciByZWM7CiAJRGF0dW0JCXJldHR1cGxlOworCWJvb2wJCWlzbnVsbDsKIAlKc29u YlZhbHVlCWpidjsKIAlNZW1vcnlDb250ZXh0IGZubWN4dCA9IGZjaW5mby0+ZmxpbmZvLT5mbl9t Y3h0OwogCVBvcHVsYXRlUmVjb3JkQ2FjaGUgKmNhY2hlID0gZmNpbmZvLT5mbGluZm8tPmZuX2V4 dHJhOwpAQCAtMzUzMSw4ICszNjk1LDExIEBAIHBvcHVsYXRlX3JlY29yZF93b3JrZXIoRnVuY3Rp b25DYWxsSW5mbyBmY2luZm8sIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLAogCQlqYnYudmFsLmJpbmFy eS5sZW4gPSBWQVJTSVpFKGpiKSAtIFZBUkhEUlNaOwogCX0KIAorCWlzbnVsbCA9IGZhbHNlOwog CXJldHR1cGxlID0gcG9wdWxhdGVfY29tcG9zaXRlKCZjYWNoZS0+Yy5pby5jb21wb3NpdGUsIGNh Y2hlLT5hcmd0eXBlLAotCQkJCQkJCQkgIE5VTEwsIGZubWN4dCwgcmVjLCAmanN2LCBmYWxzZSk7 CisJCQkJCQkJCSAgTlVMTCwgZm5tY3h0LCByZWMsICZqc3YsICZpc251bGwsCisJCQkJCQkJCSAg TlVMTCk7CisJQXNzZXJ0KCFpc251bGwpOwogCiAJUEdfUkVUVVJOX0RBVFVNKHJldHR1cGxlKTsK IH0KQEAgLTM1NDAsMTAgKzM3MDcsMTMgQEAgcG9wdWxhdGVfcmVjb3JkX3dvcmtlcihGdW5jdGlv bkNhbGxJbmZvIGZjaW5mbywgY29uc3QgY2hhciAqZnVuY25hbWUsCiAvKgogICogZ2V0X2pzb25f b2JqZWN0X2FzX2hhc2gKICAqCi0gKiBkZWNvbXBvc2UgYSBqc29uIG9iamVjdCBpbnRvIGEgaGFz aCB0YWJsZS4KKyAqIERlY29tcG9zZXMgYSBqc29uIG9iamVjdCBpbnRvIGEgaGFzaCB0YWJsZS4K KyAqCisgKiBSZXR1cm5zIHRoZSBoYXNoIHRhYmxlIGlmIHRoZSBqc29uIGlzIHBhcnNlZCBzdWNj ZXNzZnVsbHksIE5VTEwgb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgSFRBQiAqCi1nZXRfanNvbl9v YmplY3RfYXNfaGFzaChjaGFyICpqc29uLCBpbnQgbGVuLCBjb25zdCBjaGFyICpmdW5jbmFtZSkK K2dldF9qc29uX29iamVjdF9hc19oYXNoKGNoYXIgKmpzb24sIGludCBsZW4sIGNvbnN0IGNoYXIg KmZ1bmNuYW1lLAorCQkJCQkJTm9kZSAqZXNjb250ZXh0KQogewogCUhBU0hDVEwJCWN0bDsKIAlI VEFCCSAgICp0YWI7CkBAIC0zNTcyLDcgKzM3NDIsMTEgQEAgZ2V0X2pzb25fb2JqZWN0X2FzX2hh c2goY2hhciAqanNvbiwgaW50IGxlbiwgY29uc3QgY2hhciAqZnVuY25hbWUpCiAJc2VtLT5vYmpl Y3RfZmllbGRfc3RhcnQgPSBoYXNoX29iamVjdF9maWVsZF9zdGFydDsKIAlzZW0tPm9iamVjdF9m aWVsZF9lbmQgPSBoYXNoX29iamVjdF9maWVsZF9lbmQ7CiAKLQlwZ19wYXJzZV9qc29uX29yX2Vy ZXBvcnQoc3RhdGUtPmxleCwgc2VtKTsKKwlpZiAoIXBnX3BhcnNlX2pzb25fb3JfZXJyc2F2ZShz dGF0ZS0+bGV4LCBzZW0sIGVzY29udGV4dCkpCisJeworCQloYXNoX2Rlc3Ryb3koc3RhdGUtPmhh c2gpOworCQl0YWIgPSBOVUxMOworCX0KIAogCWZyZWVKc29uTGV4Q29udGV4dChzdGF0ZS0+bGV4 KTsKIApAQCAtMzc0MywxNCArMzkxNywxNiBAQCBwb3B1bGF0ZV9yZWNvcmRzZXRfcmVjb3JkKFBv cHVsYXRlUmVjb3Jkc2V0U3RhdGUgKnN0YXRlLCBKc09iamVjdCAqb2JqKQogCQkJCQkJCSAgJmNh Y2hlLT5jLmlvLmNvbXBvc2l0ZS5yZWNvcmRfaW8sCiAJCQkJCQkJICBzdGF0ZS0+cmVjLAogCQkJ CQkJCSAgY2FjaGUtPmZuX21jeHQsCi0JCQkJCQkJICBvYmopOworCQkJCQkJCSAgb2JqLAorCQkJ CQkJCSAgTlVMTCk7CiAKIAkvKiBpZiBpdCdzIGRvbWFpbiBvdmVyIGNvbXBvc2l0ZSwgY2hlY2sg ZG9tYWluIGNvbnN0cmFpbnRzICovCiAJaWYgKGNhY2hlLT5jLnR5cGNhdCA9PSBUWVBFQ0FUX0NP TVBPU0lURV9ET01BSU4pCi0JCWRvbWFpbl9jaGVjayhIZWFwVHVwbGVIZWFkZXJHZXREYXR1bSh0 dXBoZWFkKSwgZmFsc2UsCi0JCQkJCSBjYWNoZS0+YXJndHlwZSwKLQkJCQkJICZjYWNoZS0+Yy5p by5jb21wb3NpdGUuZG9tYWluX2luZm8sCi0JCQkJCSBjYWNoZS0+Zm5fbWN4dCk7CisJCSh2b2lk KSBkb21haW5fY2hlY2tfc2FmZShIZWFwVHVwbGVIZWFkZXJHZXREYXR1bSh0dXBoZWFkKSwgZmFs c2UsCisJCQkJCQkJCSBjYWNoZS0+YXJndHlwZSwKKwkJCQkJCQkJICZjYWNoZS0+Yy5pby5jb21w b3NpdGUuZG9tYWluX2luZm8sCisJCQkJCQkJCSBjYWNoZS0+Zm5fbWN4dCwKKwkJCQkJCQkJIE5V TEwpOwogCiAJLyogb2ssIHNhdmUgaW50byB0dXBsZXN0b3JlICovCiAJdHVwbGUudF9sZW4gPSBI ZWFwVHVwbGVIZWFkZXJHZXREYXR1bUxlbmd0aCh0dXBoZWFkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCmlu ZGV4IGYyZWJiYzU2MjUuLjM1OWM1NzBmMjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L2J1aWx0aW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApAQCAtMjgsNiAr MjgsOSBAQCBleHRlcm4gYm9vbCBwYXJzZV9ib29sX3dpdGhfbGVuKGNvbnN0IGNoYXIgKnZhbHVl LCBzaXplX3QgbGVuLCBib29sICpyZXN1bHQpOwogLyogZG9tYWlucy5jICovCiBleHRlcm4gdm9p ZCBkb21haW5fY2hlY2soRGF0dW0gdmFsdWUsIGJvb2wgaXNudWxsLCBPaWQgZG9tYWluVHlwZSwK IAkJCQkJCSB2b2lkICoqZXh0cmEsIE1lbW9yeUNvbnRleHQgbWN4dCk7CitleHRlcm4gYm9vbCBk b21haW5fY2hlY2tfc2FmZShEYXR1bSB2YWx1ZSwgYm9vbCBpc251bGwsIE9pZCBkb21haW5UeXBl LAorCQkJCQkJCSAgdm9pZCAqKmV4dHJhLCBNZW1vcnlDb250ZXh0IG1jeHQsCisJCQkJCQkJICBO b2RlICplc2NvbnRleHQpOwogZXh0ZXJuIGludAllcnJkYXRhdHlwZShPaWQgZGF0YXR5cGVPaWQp OwogZXh0ZXJuIGludAllcnJkb21haW5jb25zdHJhaW50KE9pZCBkYXRhdHlwZU9pZCwgY29uc3Qg Y2hhciAqY29ubmFtZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5j cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKaW5kZXggMzFjMWFlNDc2Ny4uOTRj YjZlZGM4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUg SlNPTkZVTkNTX0gKIAogI2luY2x1ZGUgImNvbW1vbi9qc29uYXBpLmgiCisjaW5jbHVkZSAibm9k ZXMvbm9kZXMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgogCiAvKgotLSAKMi4zNS4zCgo= --0000000000000586fb060f89a4b0 Content-Type: application/octet-stream; name="v36-0001-Add-soft-error-handling-to-some-expression-nodes.patch" Content-Disposition: attachment; filename="v36-0001-Add-soft-error-handling-to-some-expression-nodes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrp0uus10 RnJvbSBiZTNhNGRiODk5YjJkYjBmNWUyYjM1MTI1N2U2MDIxNjE2MjA1MDU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTY6MTY6MjEgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz NiAxLzZdIEFkZCBzb2Z0IGVycm9yIGhhbmRsaW5nIHRvIHNvbWUgZXhwcmVzc2lvbiBub2RlcwpN SU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgK Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhpcyBhZGp1c3RzIHRoZSBDb2VyY2VW aWFJTyBhbmQgQ29lcmNlVG9Eb21haW4gZXhwcmVzc2lvbiBldmFsdWF0aW9uCmNvZGUgdG8gaGFu ZGxlIGVycm9ycyBzb2Z0bHkuCgpGb3IgQ29lcmNlVmlhSW8sIHRoaXMgYWRkcyBhIG5ldyBFeHBy RXZhbFN0ZXAgb3Bjb2RlCkVFT1BfSU9DT0VSQ0VfU0FGRSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQg aW4gdGhlIG5ldyBhY2NvbXBhbnlpbmcKZnVuY3Rpb24gRXhlY0V2YWxDb2VyY2VWaWFJT1NhZmUo KS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbQpFRU9QX0lPQ09FUkNFJ3MgaW5saW5lIGltcGxl bWVudGF0aW9uIGlzIHRoYXQgdGhlIGlucHV0IGZ1bmN0aW9uCnJlY2VpdmVzIGFuIEVycm9yU2F2 ZUNvbnRleHQgdmlhIHRoZSBmdW5jdGlvbidzCkZ1bmN0aW9uQ2FsbEluZm8uY29udGV4dCwgd2hp Y2ggaXQgY2FuIHVzZSB0byBoYW5kbGUgZXJyb3JzIHNvZnRseS4KCkZvciBDb2VyY2VUb0RvbWFp biwgdGhpcyBzaW1wbHkgZW50YWlscyByZXBsYWNpbmcgdGhlIGVyZXBvcnQoKSBpbgpFeGVjRXZh bENvbnN0cmFpbnROb3ROdWxsKCkgYW5kIEV4ZWNFdmFsQ29uc3RyYWludENoZWNrKCkgYnkKZXJy c2F2ZSgpIHBhc3NpbmcgaXQgdGhlIEVycm9yU2F2ZUNvbnRleHQgcGFzc2VkIGluIHRoZSBleHBy ZXNzaW9uJ3MKRXhwckV2YWxTdGVwLgoKSW4gYm90aCBjYXNlcywgdGhlIEVycm9yU2F2ZUNvbnRl eHQgdG8gYmUgdXNlZCBpcyBwYXNzZWQgYnkgc2V0dGluZwpFeHByU3RhdGUuZXNjb250ZXh0IHRv IHBvaW50IHRvIGl0IGJlZm9yZSBjYWxsaW5nIEV4ZWNJbml0RXhwclJlYygpCm9uIHRoZSBleHBy ZXNzaW9uIHRyZWUgd2hvc2UgZXJyb3JzIGFyZSB0byBiZSBzdXBwcmVzc2VkLgoKTm90ZSB0aGF0 IG5vIGNhbGwgc2l0ZSBvZiBFeGVjSW5pdEV4cHJSZWMoKSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRo aXMKY29tbWl0LCBzbyB0aGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgVGhpcyBpcyBpbnRl bmRlZCBmb3IKaW1wbGVtZW50aW5nIG5ldyBTUUwvSlNPTiBleHByZXNzaW9uIG5vZGVzIGluIGZ1 dHVyZSBjb21taXRzLgoKUmV2aWV3ZWQtYnk6IMOBbHZhcm8gSGVycmVyYQpSZXZpZXdlZC1ieTog QW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhU ZGZiMW5XPU9qb3lfdFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQot LS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAgfCAgOCArKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgfCA3NCArKysrKysrKysrKysrKysrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jICAgfCAgNiArKysK IHNyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyAgfCAgMSArCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgIHwgIDQgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oICAgICAgICAgfCAgNyArKysKIDYgZmlsZXMgY2hhbmdlZCwgOTcgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCA5MWRmMjAw OWJlLi4zMTgxYjExMzZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTE1NjAsNyArMTU2 MCwxMCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJ CQkgKiBXZSBkb24ndCBjaGVjayBwZXJtaXNzaW9ucyBoZXJlIGFzIGEgdHlwZSdzIGlucHV0L291 dHB1dAogCQkJCSAqIGZ1bmN0aW9uIGFyZSBhc3N1bWVkIHRvIGJlIGV4ZWN1dGFibGUgYnkgZXZl cnlvbmUuCiAJCQkJICovCi0JCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0lPQ09FUkNFOworCQkJ CWlmIChzdGF0ZS0+ZXNjb250ZXh0ID09IE5VTEwpCisJCQkJCXNjcmF0Y2gub3Bjb2RlID0gRUVP UF9JT0NPRVJDRTsKKwkJCQllbHNlCisJCQkJCXNjcmF0Y2gub3Bjb2RlID0gRUVPUF9JT0NPRVJD RV9TQUZFOwogCiAJCQkJLyogbG9va3VwIHRoZSBzb3VyY2UgdHlwZSdzIG91dHB1dCBmdW5jdGlv biAqLwogCQkJCXNjcmF0Y2guZC5pb2NvZXJjZS5maW5mb19vdXQgPSBwYWxsb2MwKHNpemVvZihG bWdySW5mbykpOwpAQCAtMTU5Niw2ICsxNTk5LDggQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5v ZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJZmNpbmZvX2luLT5hcmdzWzJdLnZhbHVlID0gSW50 MzJHZXREYXR1bSgtMSk7CiAJCQkJZmNpbmZvX2luLT5hcmdzWzJdLmlzbnVsbCA9IGZhbHNlOwog CisJCQkJZmNpbmZvX2luLT5jb250ZXh0ID0gKE5vZGUgKikgc3RhdGUtPmVzY29udGV4dDsKKwog CQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIAkJCQlicmVhazsKIAkJCX0K QEAgLTMzMDMsNiArMzMwOCw3IEBAIEV4ZWNJbml0Q29lcmNlVG9Eb21haW4oRXhwckV2YWxTdGVw ICpzY3JhdGNoLCBDb2VyY2VUb0RvbWFpbiAqY3Rlc3QsCiAJLyogd2UnbGwgYWxsb2NhdGUgd29y a3NwYWNlIG9ubHkgaWYgbmVlZGVkICovCiAJc2NyYXRjaC0+ZC5kb21haW5jaGVjay5jaGVja3Zh bHVlID0gTlVMTDsKIAlzY3JhdGNoLT5kLmRvbWFpbmNoZWNrLmNoZWNrbnVsbCA9IE5VTEw7CisJ c2NyYXRjaC0+ZC5kb21haW5jaGVjay5lc2NvbnRleHQgPSBzdGF0ZS0+ZXNjb250ZXh0OwogCiAJ LyoKIAkgKiBFdmFsdWF0ZSBhcmd1bWVudCAtIGl0J3MgZmluZSB0byBkaXJlY3RseSBzdG9yZSBp dCBpbnRvIHJlc3YvcmVzbnVsbCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmlu ZGV4IDNjMTdjYzZiMWUuLmIxN2NhYjA2YjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVTdWJwbGFu LmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAgLTQ1Miw2 ICs0NTMsNyBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAq ZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJJiZDQVNFX0VFT1BfQ0FTRV9URVNUVkFMLAogCQkm JkNBU0VfRUVPUF9NQUtFX1JFQURPTkxZLAogCQkmJkNBU0VfRUVPUF9JT0NPRVJDRSwKKwkJJiZD QVNFX0VFT1BfSU9DT0VSQ0VfU0FGRSwKIAkJJiZDQVNFX0VFT1BfRElTVElOQ1QsCiAJCSYmQ0FT RV9FRU9QX05PVF9ESVNUSU5DVCwKIAkJJiZDQVNFX0VFT1BfTlVMTElGLApAQCAtMTIwNSw2ICsx MjA3LDEyIEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICpl Y29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNF KEVFT1BfSU9DT0VSQ0VfU0FGRSkKKwkJeworCQkJRXhlY0V2YWxDb2VyY2VWaWFJT1NhZmUoc3Rh dGUsIG9wKTsKKwkJCUVFT19ORVhUKCk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0RJU1RJTkNU KQogCQl7CiAJCQkvKgpAQCAtMjUxMCw2ICsyNTE4LDY4IEBAIEV4ZWNFdmFsUGFyYW1FeHRlcm4o RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0 KQogCQkJIGVycm1zZygibm8gdmFsdWUgZm91bmQgZm9yIHBhcmFtZXRlciAlZCIsIHBhcmFtSWQp KSk7CiB9CiAKKy8qCisgKiBFdmFsdWF0ZSBhIENvZXJjZVZpYUlPIG5vZGUgaW4gc29mdC1lcnJv ciBtb2RlLgorICoKKyAqIFRoZSBzb3VyY2UgdmFsdWUgaXMgaW4gb3AncyByZXN1bHQgdmFyaWFi bGUuCisgKi8KK3ZvaWQKK0V4ZWNFdmFsQ29lcmNlVmlhSU9TYWZlKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3ApCit7CisJY2hhcgkgICAqc3RyOworCisJLyogY2FsbCBvdXRwdXQg ZnVuY3Rpb24gKHNpbWlsYXIgdG8gT3V0cHV0RnVuY3Rpb25DYWxsKSAqLworCWlmICgqb3AtPnJl c251bGwpCisJeworCQkvKiBvdXRwdXQgZnVuY3Rpb25zIGFyZSBub3QgY2FsbGVkIG9uIG51bGxz ICovCisJCXN0ciA9IE5VTEw7CisJfQorCWVsc2UKKwl7CisJCUZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvX291dDsKKworCQlmY2luZm9fb3V0ID0gb3AtPmQuaW9jb2VyY2UuZmNpbmZvX2RhdGFfb3V0 OworCQlmY2luZm9fb3V0LT5hcmdzWzBdLnZhbHVlID0gKm9wLT5yZXN2YWx1ZTsKKwkJZmNpbmZv X291dC0+YXJnc1swXS5pc251bGwgPSBmYWxzZTsKKworCQlmY2luZm9fb3V0LT5pc251bGwgPSBm YWxzZTsKKwkJc3RyID0gRGF0dW1HZXRDU3RyaW5nKEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm9f b3V0KSk7CisKKwkJLyogT3V0cHV0RnVuY3Rpb25DYWxsIGFzc3VtZXMgcmVzdWx0IGlzbid0IG51 bGwgKi8KKwkJQXNzZXJ0KCFmY2luZm9fb3V0LT5pc251bGwpOworCX0KKworCS8qIGNhbGwgaW5w dXQgZnVuY3Rpb24gKHNpbWlsYXIgdG8gSW5wdXRGdW5jdGlvbkNhbGwpICovCisJaWYgKCFvcC0+ ZC5pb2NvZXJjZS5maW5mb19pbi0+Zm5fc3RyaWN0IHx8IHN0ciAhPSBOVUxMKQorCXsKKwkJRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm9faW47CisKKwkJZmNpbmZvX2luID0gb3AtPmQuaW9jb2VyY2Uu ZmNpbmZvX2RhdGFfaW47CisJCWZjaW5mb19pbi0+YXJnc1swXS52YWx1ZSA9IFBvaW50ZXJHZXRE YXR1bShzdHIpOworCQlmY2luZm9faW4tPmFyZ3NbMF0uaXNudWxsID0gKm9wLT5yZXNudWxsOwor CQkvKiBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cyBhcmUgYWxyZWFkeSBzZXQgdXAgKi8KKwor CQkvKiBFcnJvclNhdmVDb250ZXh0IG11c3QgYmUgcHJlc2VudC4gKi8KKwkJQXNzZXJ0KElzQShm Y2luZm9faW4tPmNvbnRleHQsIEVycm9yU2F2ZUNvbnRleHQpKTsKKworCQlmY2luZm9faW4tPmlz bnVsbCA9IGZhbHNlOworCQkqb3AtPnJlc3ZhbHVlID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5m b19pbik7CisKKwkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoZmNpbmZvX2luLT5jb250ZXh0KSkK KwkJeworCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0p IDA7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBTaG91bGQgZ2V0IG51bGwgcmVzdWx0IGlmIGFu ZCBvbmx5IGlmIHN0ciBpcyBOVUxMICovCisJCWlmIChzdHIgPT0gTlVMTCkKKwkJCUFzc2VydCgq b3AtPnJlc251bGwpOworCQllbHNlCisJCQlBc3NlcnQoISpvcC0+cmVzbnVsbCk7CisJfQorfQor CiAvKgogICogRXZhbHVhdGUgYSBTUUxWYWx1ZUZ1bmN0aW9uIGV4cHJlc3Npb24uCiAgKi8KQEAg LTM3MzAsNyArMzgwMCw3IEBAIHZvaWQKIEV4ZWNFdmFsQ29uc3RyYWludE5vdE51bGwoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCkKIHsKIAlpZiAoKm9wLT5yZXNudWxsKQotCQll cmVwb3J0KEVSUk9SLAorCQllcnJzYXZlKChOb2RlICopIG9wLT5kLmRvbWFpbmNoZWNrLmVzY29u dGV4dCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX05PVF9OVUxMX1ZJT0xBVElPTiksCiAJCQkJIGVy cm1zZygiZG9tYWluICVzIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzIiwKIAkJCQkJCWZvcm1h dF90eXBlX2JlKG9wLT5kLmRvbWFpbmNoZWNrLnJlc3VsdHR5cGUpKSwKQEAgLTM3NDUsNyArMzgx NSw3IEBAIEV4ZWNFdmFsQ29uc3RyYWludENoZWNrKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFs U3RlcCAqb3ApCiB7CiAJaWYgKCEqb3AtPmQuZG9tYWluY2hlY2suY2hlY2tudWxsICYmCiAJCSFE YXR1bUdldEJvb2woKm9wLT5kLmRvbWFpbmNoZWNrLmNoZWNrdmFsdWUpKQotCQllcmVwb3J0KEVS Uk9SLAorCQllcnJzYXZlKChOb2RlICopIG9wLT5kLmRvbWFpbmNoZWNrLmVzY29udGV4dCwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0NIRUNLX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZygidmFsdWUg Zm9yIGRvbWFpbiAlcyB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50IFwiJXNcIiIsCiAJCQkJCQlm b3JtYXRfdHlwZV9iZShvcC0+ZC5kb21haW5jaGVjay5yZXN1bHR0eXBlKSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xs dm0vbGx2bWppdF9leHByLmMKaW5kZXggMzMxNjFkODEyZi4uMDk5OTQ1MDNiMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTE0MzEsNiArMTQzMSwxMiBAQCBsbHZtX2NvbXBp bGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQlicmVhazsKIAkJCQl9CiAKKwkJCWNhc2Ug RUVPUF9JT0NPRVJDRV9TQUZFOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZh bENvZXJjZVZpYUlPU2FmZSIsCisJCQkJCQkJCXZfc3RhdGUsIG9wKTsKKwkJCQlMTFZNQnVpbGRC cihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOworCiAJCQljYXNlIEVFT1BfRElT VElOQ1Q6CiAJCQljYXNlIEVFT1BfTk9UX0RJU1RJTkNUOgogCQkJCXsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfdHlwZXMuYwppbmRleCA1MjEyZjUyOWM4Li40N2M5ZGFmNDAyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKKysrIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xNjIsNiArMTYyLDcgQEAgdm9pZAkgICAqcmVm ZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxSb3csCiAJRXhlY0V2YWxSb3dOb3ROdWxs LAogCUV4ZWNFdmFsUm93TnVsbCwKKwlFeGVjRXZhbENvZXJjZVZpYUlPU2FmZSwKIAlFeGVjRXZh bFNRTFZhbHVlRnVuY3Rpb24sCiAJRXhlY0V2YWxTY2FsYXJBcnJheU9wLAogCUV4ZWNFdmFsSGFz aGVkU2NhbGFyQXJyYXlPcCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IGEyMGM1MzlhMjUu LmEyOGRkY2RkNzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgK KysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMTYsNiArMTYsNyBAQAog CiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rl cy5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogCiAvKiBmb3J3YXJkIHJlZmVyZW5j ZXMgdG8gYXZvaWQgY2lyY3VsYXJpdHkgKi8KIHN0cnVjdCBFeHByRXZhbFN0ZXA7CkBAIC0xNjgs NiArMTY5LDcgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAogCS8qIGV2YWx1YXRlIGFzc29y dGVkIHNwZWNpYWwtcHVycG9zZSBleHByZXNzaW9uIHR5cGVzICovCiAJRUVPUF9JT0NPRVJDRSwK KwlFRU9QX0lPQ09FUkNFX1NBRkUsCiAJRUVPUF9ESVNUSU5DVCwKIAlFRU9QX05PVF9ESVNUSU5D VCwKIAlFRU9QX05VTExJRiwKQEAgLTU0Nyw2ICs1NDksNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHBy RXZhbFN0ZXAKIAkJCWJvb2wJICAgKmNoZWNrbnVsbDsKIAkJCS8qIE9JRCBvZiBkb21haW4gdHlw ZSAqLwogCQkJT2lkCQkJcmVzdWx0dHlwZTsKKwkJCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4 dDsKIAkJfQkJCWRvbWFpbmNoZWNrOwogCiAJCS8qIGZvciBFRU9QX0NPTlZFUlRfUk9XVFlQRSAq LwpAQCAtNzc2LDYgKzc3OSw3IEBAIGV4dGVybiB2b2lkIEV4ZWNFdmFsUGFyYW1FeGVjKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJICBFeHByQ29udGV4dCAqZWNv bnRleHQpOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxQYXJhbUV4dGVybihFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQpOworZXh0 ZXJuIHZvaWQgRXhlY0V2YWxDb2VyY2VWaWFJT1NhZmUoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbFNRTFZhbHVlRnVuY3Rpb24oRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEN1cnJl bnRPZkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9p ZCBFeGVjRXZhbE5leHRWYWx1ZUV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDU2MWZkZDk4ZjEuLjQ0NGE1ZjBmZDUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2lu Y2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgorI2luY2x1 ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcmFtcy5oIgogI2luY2x1 ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgpAQCAt MTI5LDYgKzEzMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKIAogCURhdHVtCSAgICpp bm5lcm1vc3RfZG9tYWludmFsOwogCWJvb2wJICAgKmlubmVybW9zdF9kb21haW5udWxsOworCisJ LyoKKwkgKiBGb3IgZXhwcmVzc2lvbiBub2RlcyB0aGF0IHN1cHBvcnQgc29mdCBlcnJvcnMuICBT aG91bGQgYmUgc2V0IHRvIE5VTEwKKwkgKiBiZWZvcmUgY2FsbGluZyBFeGVjSW5pdEV4cHJSZWMo KSBpZiB0aGUgY2FsbGVyIHdhbnRzIGVycm9ycyB0aHJvd24uCisJICovCisJRXJyb3JTYXZlQ29u dGV4dCAqZXNjb250ZXh0OwogfSBFeHByU3RhdGU7CiAKIAotLSAKMi4zNS4zCgo= --0000000000000586fb060f89a4b0 Content-Type: application/octet-stream; name="v36-0003-Refactor-code-used-by-jsonpath-executor-to-fetch.patch" Content-Disposition: attachment; filename="v36-0003-Refactor-code-used-by-jsonpath-executor-to-fetch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrp0uusg2 RnJvbSAyY2Q3ZGEyZmI5YmU4NDJmYmZlM2ZjMzE2NGYyNDJiZDRiYmJlNDRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTY6MzA6NTYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz NiAzLzZdIFJlZmFjdG9yIGNvZGUgdXNlZCBieSBqc29ucGF0aCBleGVjdXRvciB0byBmZXRjaAog dmFyaWFibGVzCgpDdXJyZW50bHksIGdldEpzb25QYXRoVmFyaWFibGUoKSBkaXJlY3RseSBleHRy YWN0cyBhIG5hbWVkCnZhcmlhYmxlL2tleSBmcm9tIHRoZSBzb3VyY2UgSnNvbmIgdmFsdWUuICBU aGlzIGNvbW1pdCBwdXRzIHRoYXQKbG9naWMgaW50byBhIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxl ZCBieSBnZXRKc29uUGF0aFZhcmlhYmxlKCkuCk90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUg Y2FsbGJhY2sgbWF5IGFjY2VwdCBkaWZmZXJlbnQgZm9ybXMKb2YgdGhlIHNvdXJjZSB2YWx1ZShz KSwgZm9yIGV4YW1wbGUsIGEgTGlzdCBvZiB2YWx1ZXMgcGFzc2VkIGZyb20Kb3V0c2lkZSBqc29u cGF0aF9leGVjLmMuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBK0hpd3FFNFhU ZGZiMW5XPU9qb3lfdFFTUmhZdC1xX2tiNmk1ZDR4Y0t5ckxDMU5iZ0BtYWlsLmdtYWlsLmNvbQot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgfCAxMzYgKysrKysrKysr KysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCspLCAzNyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhf ZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCBhYzE2 ZjVjODVkLi5jMTYyODIxZTY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bnBhdGhfZXhlYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMK QEAgLTg3LDEyICs4NywxOSBAQCB0eXBlZGVmIHN0cnVjdCBKc29uQmFzZU9iamVjdEluZm8KIAlp bnQJCQlpZDsKIH0gSnNvbkJhc2VPYmplY3RJbmZvOwogCisvKiBDYWxsYmFja3MgZm9yIGV4ZWN1 dGVKc29uUGF0aCgpICovCit0eXBlZGVmIEpzb25iVmFsdWUgKigqSnNvblBhdGhHZXRWYXJDYWxs YmFjaykgKHZvaWQgKnZhcnMsIGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJCQkJ CQkJCQkgICBKc29uYlZhbHVlICpiYXNlT2JqZWN0LCBpbnQgKmJhc2VPYmplY3RJZCk7Cit0eXBl ZGVmIGludCAoKkpzb25QYXRoQ291bnRWYXJzQ2FsbGJhY2spICh2b2lkICp2YXJzKTsKKwogLyoK ICAqIENvbnRleHQgb2YganNvbnBhdGggZXhlY3V0aW9uLgogICovCiB0eXBlZGVmIHN0cnVjdCBK c29uUGF0aEV4ZWNDb250ZXh0CiB7Ci0JSnNvbmIJICAgKnZhcnM7CQkJLyogdmFyaWFibGVzIHRv IHN1YnN0aXR1dGUgaW50byBqc29ucGF0aCAqLworCXZvaWQJICAgKnZhcnM7CQkJLyogdmFyaWFi bGVzIHRvIHN1YnN0aXR1dGUgaW50byBqc29ucGF0aCAqLworCUpzb25QYXRoR2V0VmFyQ2FsbGJh Y2sgZ2V0VmFyOwkvKiBjYWxsYmFjayB0byBleHRyYWN0IGEgZ2l2ZW4gdmFyaWFibGUKKwkJCQkJ CQkJCSAqIGZyb20gJ3ZhcnMnICovCiAJSnNvbmJWYWx1ZSAqcm9vdDsJCQkvKiBmb3IgJCBldmFs dWF0aW9uICovCiAJSnNvbmJWYWx1ZSAqY3VycmVudDsJCS8qIGZvciBAIGV2YWx1YXRpb24gKi8K IAlKc29uQmFzZU9iamVjdEluZm8gYmFzZU9iamVjdDsJLyogImJhc2Ugb2JqZWN0IiBmb3IgLmtl eXZhbHVlKCkKQEAgLTE3NCw3ICsxODEsOSBAQCB0eXBlZGVmIEpzb25QYXRoQm9vbCAoKkpzb25Q YXRoUHJlZGljYXRlQ2FsbGJhY2spIChKc29uUGF0aEl0ZW0gKmpzcCwKIAkJCQkJCQkJCQkJCSAg IHZvaWQgKnBhcmFtKTsKIHR5cGVkZWYgTnVtZXJpYyAoKkJpbmFyeUFyaXRobUZ1bmMpIChOdW1l cmljIG51bTEsIE51bWVyaWMgbnVtMiwgYm9vbCAqZXJyb3IpOwogCi1zdGF0aWMgSnNvblBhdGhF eGVjUmVzdWx0IGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwgSnNvbmIgKnZhcnMsCitz dGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwg dm9pZCAqdmFycywKKwkJCQkJCQkJCQkgIEpzb25QYXRoR2V0VmFyQ2FsbGJhY2sgZ2V0VmFyLAor CQkJCQkJCQkJCSAgSnNvblBhdGhDb3VudFZhcnNDYWxsYmFjayBjb3VudFZhcnMsCiAJCQkJCQkJ CQkJICBKc29uYiAqanNvbiwgYm9vbCB0aHJvd0Vycm9ycywKIAkJCQkJCQkJCQkgIEpzb25WYWx1 ZUxpc3QgKnJlc3VsdCwgYm9vbCB1c2VUeik7CiBzdGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGV4 ZWN1dGVJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKQEAgLTIyNiw3ICsyMzUsMTIgQEAg c3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29sUmVzdWx0KEpzb25QYXRoRXhlY0Nv bnRleHQgKmN4dCwKIHN0YXRpYyB2b2lkIGdldEpzb25QYXRoSXRlbShKc29uUGF0aEV4ZWNDb250 ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqaXRlbSwKIAkJCQkJCQlKc29uYlZhbHVlICp2YWx1ZSk7 CiBzdGF0aWMgdm9pZCBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4 dCwKLQkJCQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmIgKnZhcnMsIEpzb25iVmFs dWUgKnZhbHVlKTsKKwkJCQkJCQkJSnNvblBhdGhJdGVtICp2YXJpYWJsZSwgSnNvbmJWYWx1ZSAq dmFsdWUpOworc3RhdGljIGludCBjb3VudFZhcmlhYmxlc0Zyb21Kc29uYih2b2lkICp2YXJzSnNv bmIpOworc3RhdGljIEpzb25iVmFsdWUgKmdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIodm9p ZCAqdmFyc0pzb25iLCBjaGFyICp2YXJOYW1lLAorCQkJCQkJCQkJCQkJaW50IHZhck5hbWVMZW4s CisJCQkJCQkJCQkJCQlKc29uYlZhbHVlICpiYXNlT2JqZWN0LAorCQkJCQkJCQkJCQkJaW50ICpi YXNlT2JqZWN0SWQpOwogc3RhdGljIGludAlKc29uYkFycmF5U2l6ZShKc29uYlZhbHVlICpqYik7 CiBzdGF0aWMgSnNvblBhdGhCb29sIGV4ZWN1dGVDb21wYXJpc29uKEpzb25QYXRoSXRlbSAqY21w LCBKc29uYlZhbHVlICpsdiwKIAkJCQkJCQkJCSAgSnNvbmJWYWx1ZSAqcnYsIHZvaWQgKnApOwpA QCAtMjg0LDcgKzI5OCw5IEBAIGpzb25iX3BhdGhfZXhpc3RzX2ludGVybmFsKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLCBib29sIHR6KQogCQlzaWxlbnQgPSBQR19HRVRBUkdfQk9PTCgzKTsKIAl9 CiAKLQlyZXMgPSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMsIGpiLCAhc2lsZW50LCBOVUxMLCB0 eik7CisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBnZXRKc29uUGF0aFZhcmlhYmxl RnJvbUpzb25iLAorCQkJCQkJICBjb3VudFZhcmlhYmxlc0Zyb21Kc29uYiwKKwkJCQkJCSAgamIs ICFzaWxlbnQsIE5VTEwsIHR6KTsKIAogCVBHX0ZSRUVfSUZfQ09QWShqYiwgMCk7CiAJUEdfRlJF RV9JRl9DT1BZKGpwLCAxKTsKQEAgLTMzOSw3ICszNTUsOSBAQCBqc29uYl9wYXRoX21hdGNoX2lu dGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIHR6KQogCQlzaWxlbnQgPSBQR19H RVRBUkdfQk9PTCgzKTsKIAl9CiAKLQkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBq YiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CisJKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFy cywgZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29uYiwKKwkJCQkJCSAgIGNvdW50VmFyaWFibGVz RnJvbUpzb25iLAorCQkJCQkJICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOwogCiAJUEdfRlJF RV9JRl9DT1BZKGpiLCAwKTsKIAlQR19GUkVFX0lGX0NPUFkoanAsIDEpOwpAQCAtNDE3LDcgKzQz NSw5IEBAIGpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s IGJvb2wgdHopCiAJCXZhcnMgPSBQR19HRVRBUkdfSlNPTkJfUF9DT1BZKDIpOwogCQlzaWxlbnQg PSBQR19HRVRBUkdfQk9PTCgzKTsKIAotCQkodm9pZCkgZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJz LCBqYiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CisJCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAs IHZhcnMsIGdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkJICAgY291bnRWYXJp YWJsZXNGcm9tSnNvbmIsCisJCQkJCQkJICAgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOwogCiAJ CWZ1bmNjdHgtPnVzZXJfZmN0eCA9IEpzb25WYWx1ZUxpc3RHZXRMaXN0KCZmb3VuZCk7CiAKQEAg LTQ2NCw3ICs0ODQsOSBAQCBqc29uYl9wYXRoX3F1ZXJ5X2FycmF5X2ludGVybmFsKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLCBib29sIHR6KQogCUpzb25iCSAgICp2YXJzID0gUEdfR0VUQVJHX0pT T05CX1AoMik7CiAJYm9vbAkJc2lsZW50ID0gUEdfR0VUQVJHX0JPT0woMyk7CiAKLQkodm9pZCkg ZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBqYiwgIXNpbGVudCwgJmZvdW5kLCB0eik7CisJKHZv aWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgZ2V0SnNvblBhdGhWYXJpYWJsZUZyb21Kc29u YiwKKwkJCQkJCSAgIGNvdW50VmFyaWFibGVzRnJvbUpzb25iLAorCQkJCQkJICAgamIsICFzaWxl bnQsICZmb3VuZCwgdHopOwogCiAJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIo d3JhcEl0ZW1zSW5BcnJheSgmZm91bmQpKSk7CiB9CkBAIC00OTUsNyArNTE3LDkgQEAganNvbmJf cGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCB0 eikKIAlKc29uYgkgICAqdmFycyA9IFBHX0dFVEFSR19KU09OQl9QKDIpOwogCWJvb2wJCXNpbGVu dCA9IFBHX0dFVEFSR19CT09MKDMpOwogCi0JKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFy cywgamIsICFzaWxlbnQsICZmb3VuZCwgdHopOworCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAs IHZhcnMsIGdldEpzb25QYXRoVmFyaWFibGVGcm9tSnNvbmIsCisJCQkJCQkgICBjb3VudFZhcmlh Ymxlc0Zyb21Kc29uYiwKKwkJCQkJCSAgIGpiLCAhc2lsZW50LCAmZm91bmQsIHR6KTsKIAogCWlm IChKc29uVmFsdWVMaXN0TGVuZ3RoKCZmb3VuZCkgPj0gMSkKIAkJUEdfUkVUVVJOX0pTT05CX1Ao SnNvbmJWYWx1ZVRvSnNvbmIoSnNvblZhbHVlTGlzdEhlYWQoJmZvdW5kKSkpOwpAQCAtNTIyLDYg KzU0Niw5IEBAIGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfdHooUEdfRlVOQ1RJT05fQVJHUykKICAq CiAgKiAncGF0aCcgLSBqc29ucGF0aCB0byBiZSBleGVjdXRlZAogICogJ3ZhcnMnIC0gdmFyaWFi bGVzIHRvIGJlIHN1YnN0aXR1dGVkIHRvIGpzb25wYXRoCisgKiAnZ2V0VmFyJyAtIGNhbGxiYWNr IHVzZWQgYnkgZ2V0SnNvblBhdGhWYXJpYWJsZSgpIHRvIGV4dHJhY3QgdmFyaWFibGVzIGZyb20K KyAqCQkndmFycycKKyAqICdjb3VudFZhcnMnIC0gY2FsbGJhY2sgdG8gY291bnQgdGhlIG51bWJl ciBvZiBqc29ucGF0aCB2YXJpYWJsZXMgaW4gJ3ZhcnMnCiAgKiAnanNvbicgLSB0YXJnZXQgZG9j dW1lbnQgZm9yIGpzb25wYXRoIGV2YWx1YXRpb24KICAqICd0aHJvd0Vycm9ycycgLSB3aGV0aGVy IHdlIHNob3VsZCB0aHJvdyBzdXBwcmVzc2libGUgZXJyb3JzCiAgKiAncmVzdWx0JyAtIGxpc3Qg dG8gc3RvcmUgcmVzdWx0IGl0ZW1zIGludG8KQEAgLTUzNyw4ICs1NjQsMTAgQEAganNvbmJfcGF0 aF9xdWVyeV9maXJzdF90eihQR19GVU5DVElPTl9BUkdTKQogICogSW4gb3RoZXIgY2FzZSBpdCB0 cmllcyB0byBmaW5kIGFsbCB0aGUgc2F0aXNmaWVkIHJlc3VsdCBpdGVtcy4KICAqLwogc3RhdGlj IEpzb25QYXRoRXhlY1Jlc3VsdAotZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRoLCBKc29u YiAqdmFycywgSnNvbmIgKmpzb24sIGJvb2wgdGhyb3dFcnJvcnMsCi0JCQkJSnNvblZhbHVlTGlz dCAqcmVzdWx0LCBib29sIHVzZVR6KQorZXhlY3V0ZUpzb25QYXRoKEpzb25QYXRoICpwYXRoLCB2 b2lkICp2YXJzLCBKc29uUGF0aEdldFZhckNhbGxiYWNrIGdldFZhciwKKwkJCQlKc29uUGF0aENv dW50VmFyc0NhbGxiYWNrIGNvdW50VmFycywKKwkJCQlKc29uYiAqanNvbiwgYm9vbCB0aHJvd0Vy cm9ycywgSnNvblZhbHVlTGlzdCAqcmVzdWx0LAorCQkJCWJvb2wgdXNlVHopCiB7CiAJSnNvblBh dGhFeGVjQ29udGV4dCBjeHQ7CiAJSnNvblBhdGhFeGVjUmVzdWx0IHJlczsKQEAgLTU1MCwyMiAr NTc5LDE2IEBAIGV4ZWN1dGVKc29uUGF0aChKc29uUGF0aCAqcGF0aCwgSnNvbmIgKnZhcnMsIEpz b25iICpqc29uLCBib29sIHRocm93RXJyb3JzLAogCWlmICghSnNvbmJFeHRyYWN0U2NhbGFyKCZq c29uLT5yb290LCAmamJ2KSkKIAkJSnNvbmJJbml0QmluYXJ5KCZqYnYsIGpzb24pOwogCi0JaWYg KHZhcnMgJiYgIUpzb25Db250YWluZXJJc09iamVjdCgmdmFycy0+cm9vdCkpCi0JewotCQllcmVw b3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAotCQkJCSBlcnJtc2coIlwidmFyc1wiIGFyZ3VtZW50IGlzIG5vdCBhbiBvYmplY3QiKSwKLQkJ CQkgZXJyZGV0YWlsKCJKc29ucGF0aCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBlbmNvZGVkIGFzIGtl eS12YWx1ZSBwYWlycyBvZiBcInZhcnNcIiBvYmplY3QuIikpKTsKLQl9Ci0KIAljeHQudmFycyA9 IHZhcnM7CisJY3h0LmdldFZhciA9IGdldFZhcjsKIAljeHQubGF4TW9kZSA9IChwYXRoLT5oZWFk ZXIgJiBKU09OUEFUSF9MQVgpICE9IDA7CiAJY3h0Lmlnbm9yZVN0cnVjdHVyYWxFcnJvcnMgPSBj eHQubGF4TW9kZTsKIAljeHQucm9vdCA9ICZqYnY7CiAJY3h0LmN1cnJlbnQgPSAmamJ2OwogCWN4 dC5iYXNlT2JqZWN0LmpiYyA9IE5VTEw7CiAJY3h0LmJhc2VPYmplY3QuaWQgPSAwOwotCWN4dC5s YXN0R2VuZXJhdGVkT2JqZWN0SWQgPSB2YXJzID8gMiA6IDE7CisJLyogMSArIG51bWJlciBvZiBi YXNlIG9iamVjdHMgaW4gdmFycyAqLworCWN4dC5sYXN0R2VuZXJhdGVkT2JqZWN0SWQgPSAxICsg Y291bnRWYXJzKHZhcnMpOwogCWN4dC5pbm5lcm1vc3RBcnJheVNpemUgPSAtMTsKIAljeHQudGhy b3dFcnJvcnMgPSB0aHJvd0Vycm9yczsKIAljeHQudXNlVHogPSB1c2VUejsKQEAgLTIxMDgsNyAr MjEzMSw3IEBAIGdldEpzb25QYXRoSXRlbShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25Q YXRoSXRlbSAqaXRlbSwKIAkJCQkJCQkJCQkJCSAmdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKIAkJ CWJyZWFrOwogCQljYXNlIGpwaVZhcmlhYmxlOgotCQkJZ2V0SnNvblBhdGhWYXJpYWJsZShjeHQs IGl0ZW0sIGN4dC0+dmFycywgdmFsdWUpOworCQkJZ2V0SnNvblBhdGhWYXJpYWJsZShjeHQsIGl0 ZW0sIHZhbHVlKTsKIAkJCXJldHVybjsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4 cGVjdGVkIGpzb25wYXRoIGl0ZW0gdHlwZSIpOwpAQCAtMjEyMCw0MiArMjE0Myw4MSBAQCBnZXRK c29uUGF0aEl0ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0s CiAgKi8KIHN0YXRpYyB2b2lkCiBnZXRKc29uUGF0aFZhcmlhYmxlKEpzb25QYXRoRXhlY0NvbnRl eHQgKmN4dCwgSnNvblBhdGhJdGVtICp2YXJpYWJsZSwKLQkJCQkJSnNvbmIgKnZhcnMsIEpzb25i VmFsdWUgKnZhbHVlKQorCQkJCQlKc29uYlZhbHVlICp2YWx1ZSkKIHsKIAljaGFyCSAgICp2YXJO YW1lOwogCWludAkJCXZhck5hbWVMZW5ndGg7Ci0JSnNvbmJWYWx1ZQl0bXA7CisJSnNvbmJWYWx1 ZQliYXNlT2JqZWN0OworCWludAkJCWJhc2VPYmplY3RJZDsKIAlKc29uYlZhbHVlICp2OwogCi0J aWYgKCF2YXJzKQorCUFzc2VydCh2YXJpYWJsZS0+dHlwZSA9PSBqcGlWYXJpYWJsZSk7CisJdmFy TmFtZSA9IGpzcEdldFN0cmluZyh2YXJpYWJsZSwgJnZhck5hbWVMZW5ndGgpOworCisJaWYgKGN4 dC0+dmFycyA9PSBOVUxMIHx8CisJCSh2ID0gY3h0LT5nZXRWYXIoY3h0LT52YXJzLCB2YXJOYW1l LCB2YXJOYW1lTGVuZ3RoLAorCQkJCQkJICZiYXNlT2JqZWN0LCAmYmFzZU9iamVjdElkKSkgPT0g TlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9P QkpFQ1QpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBmaW5kIGpzb25wYXRoIHZhcmlhYmxlIFwi JXNcIiIsCisJCQkJCQlwbnN0cmR1cCh2YXJOYW1lLCB2YXJOYW1lTGVuZ3RoKSkpKTsKKworCWlm IChiYXNlT2JqZWN0SWQgPiAwKQogCXsKLQkJdmFsdWUtPnR5cGUgPSBqYnZOdWxsOwotCQlyZXR1 cm47CisJCSp2YWx1ZSA9ICp2OworCQlzZXRCYXNlT2JqZWN0KGN4dCwgJmJhc2VPYmplY3QsIGJh c2VPYmplY3RJZCk7CiAJfQorfQorCisvKgorICogRGVmaW5pdGlvbiBvZiBKc29uUGF0aEdldFZh ckNhbGxiYWNrIGZvciB3aGVuIEpzb25QYXRoRXhlY0NvbnRleHQudmFycworICogaXMgc3BlY2lm aWVkIGFzIGEganNvbmIgdmFsdWUuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK2dldEpzb25Q YXRoVmFyaWFibGVGcm9tSnNvbmIodm9pZCAqdmFyc0pzb25iLCBjaGFyICp2YXJOYW1lLCBpbnQg dmFyTmFtZUxlbmd0aCwKKwkJCQkJCQkgSnNvbmJWYWx1ZSAqYmFzZU9iamVjdCwgaW50ICpiYXNl T2JqZWN0SWQpCit7CisJSnNvbmIJICAgKnZhcnMgPSB2YXJzSnNvbmI7CisJSnNvbmJWYWx1ZQl0 bXA7CisJSnNvbmJWYWx1ZSAqcmVzdWx0OwogCi0JQXNzZXJ0KHZhcmlhYmxlLT50eXBlID09IGpw aVZhcmlhYmxlKTsKLQl2YXJOYW1lID0ganNwR2V0U3RyaW5nKHZhcmlhYmxlLCAmdmFyTmFtZUxl bmd0aCk7CiAJdG1wLnR5cGUgPSBqYnZTdHJpbmc7CiAJdG1wLnZhbC5zdHJpbmcudmFsID0gdmFy TmFtZTsKIAl0bXAudmFsLnN0cmluZy5sZW4gPSB2YXJOYW1lTGVuZ3RoOwogCi0JdiA9IGZpbmRK c29uYlZhbHVlRnJvbUNvbnRhaW5lcigmdmFycy0+cm9vdCwgSkJfRk9CSkVDVCwgJnRtcCk7CisJ cmVzdWx0ID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKCZ2YXJzLT5yb290LCBKQl9GT0JK RUNULCAmdG1wKTsKIAotCWlmICh2KQorCWlmIChyZXN1bHQgPT0gTlVMTCkKIAl7Ci0JCSp2YWx1 ZSA9ICp2OwotCQlwZnJlZSh2KTsKKwkJKmJhc2VPYmplY3RJZCA9IC0xOworCQlyZXR1cm4gTlVM TDsKIAl9Ci0JZWxzZQorCisJKmJhc2VPYmplY3RJZCA9IDE7CisJSnNvbmJJbml0QmluYXJ5KGJh c2VPYmplY3QsIHZhcnMpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIERlZmluaXRp b24gb2YgSnNvblBhdGhDb3VudFZhcnNDYWxsYmFjayBmb3Igd2hlbiBKc29uUGF0aEV4ZWNDb250 ZXh0LnZhcnMKKyAqIGlzIHNwZWNpZmllZCBhcyBhIGpzb25iIHZhbHVlLgorICovCitzdGF0aWMg aW50Citjb3VudFZhcmlhYmxlc0Zyb21Kc29uYih2b2lkICp2YXJzSnNvbmIpCit7CisJSnNvbmIJ ICAgKnZhcnMgPSB2YXJzSnNvbmI7CisKKwlpZiAodmFycyAmJiAhSnNvbkNvbnRhaW5lcklzT2Jq ZWN0KCZ2YXJzLT5yb290KSkKIAl7CiAJCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJS Q09ERV9VTkRFRklORURfT0JKRUNUKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmluZCBqc29u cGF0aCB2YXJpYWJsZSBcIiVzXCIiLAotCQkJCQkJcG5zdHJkdXAodmFyTmFtZSwgdmFyTmFtZUxl bmd0aCkpKSk7CisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQllcnJtc2coIlwidmFyc1wiIGFyZ3VtZW50IGlzIG5vdCBhbiBvYmplY3QiKSwKKwkJCQll cnJkZXRhaWwoIkpzb25wYXRoIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGVuY29kZWQgYXMga2V5LXZh bHVlIHBhaXJzIG9mIFwidmFyc1wiIG9iamVjdC4iKSk7CiAJfQogCi0JSnNvbmJJbml0QmluYXJ5 KCZ0bXAsIHZhcnMpOwotCXNldEJhc2VPYmplY3QoY3h0LCAmdG1wLCAxKTsKKwkvKiBjb3VudCBv ZiBiYXNlIG9iamVjdHMgKi8KKwlyZXR1cm4gdmFycyAhPSBOVUxMID8gMSA6IDA7CiB9CiAKIC8q KioqKioqKioqKioqKioqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBKc29uUGF0aCBleGVjdXRpb24g KioqKioqKioqKioqKioqKiovCi0tIAoyLjM1LjMKCg== --0000000000000586fb060f89a4b0 Content-Type: application/octet-stream; name="v36-0005-SQL-JSON-query-functions.patch" Content-Disposition: attachment; filename="v36-0005-SQL-JSON-query-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrp0uuso4 RnJvbSBiMGVmYWZlMjA0YzkzYTdjN2MyY2Q4ODYxM2E1ZjMzODhjNTIzM2ZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTc6NTk6NTYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz NiA1LzZdIFNRTC9KU09OIHF1ZXJ5IGZ1bmN0aW9ucwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50 LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogOGJpdAoKVGhpcyBpbnRyb2R1Y2VzIHRoZSBmb2xsb3dpbmcgU1FML0pTT04gZnVuY3Rpb25z IGZvciBxdWVyeWluZyBKU09OCmRhdGEgdXNpbmcganNvbnBhdGggZXhwcmVzc2lvbnM6CgpKU09O X0VYSVNUUygpCkpTT05fUVVFUlkoKQpKU09OX1ZBTFVFKCkKCkpTT05fRVhJU1RTKCkgdGVzdHMg aWYgdGhlIGpzb25wYXRoIGV4cHJlc3Npb24gYXBwbGllZCB0byB0aGUganNvbmIKdmFsdWUgeWll bGRzIGFueSB2YWx1ZXMuCgpKU09OX1ZBTFVFKCkgbXVzdCByZXR1cm4gYSBzaW5nbGUgdmFsdWUs IGFuZCBhbiBlcnJvciBvY2N1cnMgaWYgaXQKdHJpZXMgdG8gcmV0dXJuIG11bHRpcGxlIHZhbHVl cy4KCkpTT05fUVVFUlkoKSBtdXN0IHJldHVybiBhIGpzb24gb2JqZWN0IG9yIGFycmF5LCBhbmQg dGhlcmUgYXJlCnZhcmlvdXMgV1JBUFBFUiBvcHRpb25zIGZvciBoYW5kbGluZyBzY2FsYXIgb3Ig bXVsdGktdmFsdWUgcmVzdWx0cy4KQm90aCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBvcHRpb25zIGZv ciBoYW5kbGluZyBFTVBUWSBhbmQgRVJST1IKY29uZGl0aW9ucy4KCkFsbCBvZiB0aGVzZSBmdW5j dGlvbnMgb25seSBvcGVyYXRlIG9uIGpzb25iLiBUaGUgd29ya2Fyb3VuZCBmb3Igbm93CmlzIHRv IGNhc3QgdGhlIGFyZ3VtZW50IHRvIGpzb25iLgoKQXV0aG9yOiBOaWtpdGEgR2x1a2hvdiA8bi5n bHVob3ZAcG9zdGdyZXNwcm8ucnU+CkF1dGhvcjogVGVvZG9yIFNpZ2FldiA8dGVvZG9yQHNpZ2Fl di5ydT4KQXV0aG9yOiBPbGVnIEJhcnR1bm92IDxvYmFydHVub3ZAZ21haWwuY29tPgpBdXRob3I6 IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+CkF1dGhvcjogQW5kcmV3 IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CkF1dGhvcjogQW1pdCBMYW5nb3RlIDxhbWl0 bGFuZ290ZTA5QGdtYWlsLmNvbT4KQXV0aG9yOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNl bnRyYXV0Lm9yZz4KQXV0aG9yOiBKaWFuIEhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CgpSZXZpZXdlcnMgaGF2ZSBpbmNsdWRlZCAoaW4gbm8gcGFydGljdWxhciBvcmRlcikgQW5kcmVz IEZyZXVuZCwgQWxleGFuZGVyCktvcm90a292LCBQYXZlbCBTdGVodWxlLCBBbmRyZXcgQWxzdXAs IEVyaWsgUmlqa2VycywgWmlob25nIFl1LApIaW1hbnNodSBVcGFkaHlheWEsIERhbmllbCBHdXN0 YWZzc29uLCBKdXN0aW4gUHJ5emJ5LCDDgWx2YXJvIEhlcnJlcmEsCmppYW4gaGUsIEFudG9uIEEu IE1lbG5pa292LCBOaWtpdGEgTWFsYWtob3YsIFBldGVyIEVpc2VudHJhdXQKCkRpc2N1c3Npb246 IGh0dHBzOi8vcG9zdGdyLmVzL20vY2QwYmI5MzUtMDE1OC03OGE3LTA4YjUtOTA0ODg2ZGVhYzRi QHBvc3RncmVzcHJvLnJ1CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vMjAyMjA2MTYy MzMxMzAucnBhcml2YWZpcHQ2ZG9qM0BhbGFwMy5hbmFyYXplbC5kZQpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2FiZDliODNiLWFhNjYtZjIzMC0zZDZkLTczNDgxN2YwOTk1ZCU0MHBv c3RncmVzcWwub3JnCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ErSGl3cUU0WFRk ZmIxblc9T2pveV90UVNSaFl0LXFfa2I2aTVkNHhjS3lyTEMxTmJnQG1haWwuZ21haWwuY29tCi0t LQogZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE3MyAr KysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCAgICAgICAgICB8ICAgMTIg Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgICAgICAgICAgICB8ICAzNDQg KysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgICAgICAgICB8ICAz NzAgKysrKystCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgICAgICAgICAg fCAgMTQwICsrCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgICAgICAgICAg fCAgICAzICsKIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAgICAgICAgICAgICB8 ICAgMTggKwogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICAgICAgICAgIHwg IDIzMyArKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgICAg fCAgICAzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgICAgICAgICAg fCAgIDE5ICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgICAgICB8 ICAxODggKystCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jICAgICAgICAgICAgICAg fCAgNjExICsrKysrKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jICAgICAg ICAgICAgIHwgICAxNSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jICAgICAg ICAgICAgfCAgIDQ0ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jICAgICAgICAgICAg ICAgICB8ICAgMzEgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgICAgICAg ICAgIHwgICA1NiArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyAgICAgICAgICAg ICAgfCAgMjU5ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgICAg ICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICAg ICAgICB8ICAxMzYgKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggICAgICAgICAg ICAgICB8ICAgMjQgKy0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAgODYgKysKIHNyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oICAgICAgICAgICAg ICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAg ICAgIHwgICA0NyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgMTY0ICsrKwogc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oICAgICAgICAgICAgICAg ICAgIHwgICAxMSArCiBzcmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5nLmggICAgICAgICAgICAg ICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmggICAgICAgICAgICAgICAg IHwgICAgNiArCiBzcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oICAgICAgICAgICAgICAgICAg fCAgICAxICsKIHNyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIgICAgICB8 ICAgMjggKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9xdWVyeWZ1bmNzLm91dCAgIHwg MTE0NSArKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZSAgICAgICAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbl9xdWVy eWZ1bmNzLnNxbCAgIHwgIDM3MSArKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICAgICAgICAgICB8ICAgMTcgKwogMzQgZmlsZXMgY2hhbmdlZCwgNDUyNyBpbnNlcnRp b25zKCspLCAzNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5jcy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggMjEw YzdjMGIwMi4uYTA1ZTUzOTA3NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0xNTQ2MSw2ICsxNTQ2MSwxMSBAQCB0YWJs ZTItbWFwcGluZwogICAgICAgdGhlIFNRTC9KU09OIHBhdGggbGFuZ3VhZ2UKICAgICAgPC9wYXJh PgogICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIHRo ZSBTUUwvSlNPTiBxdWVyeSBmdW5jdGlvbnMKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CiAgICA8L2l0ZW1pemVkbGlzdD4KICAgPC9wYXJhPgogCkBAIC0xODE2Myw2ICsxODE2OCwxNzQg QEAgJC4qID8gKEAgbGlrZV9yZWdleCAiXlxcZCskIikKICAgICA8L3BhcmE+CiAgICA8L3NlY3Qz PgogICA8L3NlY3QyPgorCisgICA8c2VjdDIgaWQ9InNxbGpzb24tcXVlcnktZnVuY3Rpb25zIj4K KyAgICA8dGl0bGU+U1FML0pTT04gUXVlcnkgRnVuY3Rpb25zPC90aXRsZT4KKyAgPHBhcmE+Cisg ICBTUUwvSlNPTiBmdW5jdGlvbnMgPGxpdGVyYWw+SlNPTl9FWElTVFMoKTwvbGl0ZXJhbD4sCisg ICA8bGl0ZXJhbD5KU09OX1FVRVJZKCk8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+SlNPTl9WQUxV RSgpPC9saXRlcmFsPgorICAgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1z cWxqc29uLXF1ZXJ5aW5nIi8+IGNhbiBiZSB1c2VkCisgICB0byBxdWVyeSBKU09OIGRvY3VtZW50 LiAgRWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXBwbHkgYQorICAgPHJlcGxhY2VhYmxlPnBhdGhf ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICh0aGUgcXVlcnkpIHRvIGEKKyAgIDxyZXBsYWNlYWJs ZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiAodGhlIGRvY3VtZW50KTsgc2VlbgorICAgPHhy ZWYgbGlua2VuZD0iZnVuY3Rpb25zLXNxbGpzb24tcGF0aCIvPiBmb3IgbW9yZSBkZXRhaWxzIG9u IHdoYXQKKyAgIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBjYW4g Y29udGFpbi4KKyAgPC9wYXJhPgorCisgIDxub3RlPgorICAgPHBhcmE+CisgICAgU1FML0pTT04g cXVlcnkgZnVuY3Rpb25zIGN1cnJlbnRseSBvbmx5IGFjY2VwdCB2YWx1ZXMgb2YgdGhlCisgICAg PHR5cGU+anNvbmI8L3R5cGU+IHR5cGUsIGJlY2F1c2UgdGhlIFNRTC9KU09OIHBhdGggbGFuZ3Vh Z2Ugb25seQorICAgIHN1cHBvcnRzIHRob3NlLCBzbyBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8g Y2FzdCB0aGUKKyAgICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4gYXJn dW1lbnQgb2YgdGhlc2UgZnVuY3Rpb25zIHRvCisgICAgPHR5cGU+anNvbmI8L3R5cGU+LgorICAg PC9wYXJhPgorICA8L25vdGU+CisKKyAgPHRhYmxlIGlkPSJmdW5jdGlvbnMtc3FsanNvbi1xdWVy eWluZyI+CisgICA8dGl0bGU+U1FML0pTT04gUXVlcnkgRnVuY3Rpb25zPC90aXRsZT4KKyAgIDx0 Z3JvdXAgY29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJv bGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAg ICAgRnVuY3Rpb24gc2lnbmF0dXJlCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBEZXNjcmlwdGlvbgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg RXhhbXBsZShzKQorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhl YWQ+CisgICAgPHRib2R5PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFi bGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVy bT48cHJpbWFyeT5qc29uX2V4aXN0czwvcHJpbWFyeT48L2luZGV4dGVybT4KKyAgICAgICAgPGZ1 bmN0aW9uPmpzb25fZXhpc3RzPC9mdW5jdGlvbj4gKAorICAgICAgICA8cmVwbGFjZWFibGU+Y29u dGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3Jl cGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IHsgPHJlcGxh Y2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxyZXBsYWNl YWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPjwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5UUlVFPC9saXRlcmFsPiB8 IDxsaXRlcmFsPkZBTFNFPC9saXRlcmFsPiB8PGxpdGVyYWw+IFVOS05PV048L2xpdGVyYWw+IHwg PGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IDwv b3B0aW9uYWw+KQorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmV0dXJu cyB0cnVlIGlmIHRoZSBTUUwvSlNPTiA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4KKyAgICAgICAgYXBwbGllZCB0byB0aGUgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRl bTwvcmVwbGFjZWFibGU+IHVzaW5nIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+dmFsdWU8L3Jl cGxhY2VhYmxlPnMgeWllbGRzIGFueSBpdGVtcy4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVS Uk9SPC9saXRlcmFsPiBjbGF1c2Ugc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBpZgorICAgICAgICBh biBlcnJvciBvY2N1cnM7IHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiB0aGUgPHR5cGU+Ym9vbGVh bjwvdHlwZT4KKyAgICAgICAgPGxpdGVyYWw+RkFMU0U8L2xpdGVyYWw+IHZhbHVlLgorICAgICAg ICBOb3RlIHRoYXQgaWYgdGhlIDxyZXBsYWNlYWJsZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2Vh YmxlPgorICAgICAgICBpcyA8bGl0ZXJhbD5zdHJpY3Q8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5P TiBFUlJPUjwvbGl0ZXJhbD4gYmVoYXZpb3IKKyAgICAgICAgaXMgPGxpdGVyYWw+T04gRVJST1I8 L2xpdGVyYWw+LCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQgaWYgaXQgeWllbGRzIG5vCisgICAgICAg IGl0ZW1zLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+ anNvbl9leGlzdHMoanNvbmIgJ3sia2V5MSI6IFsxLDIsM119JywgJ3N0cmljdCAkLmtleTFbKl0g PyAoQCA+IDIpJyk8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT50PC9yZXR1cm52YWx1 ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25f ZXhpc3RzKGpzb25iICd7ImEiOiBbMSwyLDNdfScsICdsYXggJC5hWzVdJyBFUlJPUiBPTiBFUlJP Uik8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT5mPC9yZXR1cm52YWx1ZT4KKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxsaXRlcmFsPmpzb25fZXhpc3RzKGpz b25iICd7ImEiOiBbMSwyLDNdfScsICdzdHJpY3QgJC5hWzVdJyBFUlJPUiBPTiBFUlJPUik8L2xp dGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT5FUlJPUjogIGpzb25wYXRoIGFycmF5IHN1YnNj cmlwdCBpcyBvdXQgb2YgYm91bmRzPC9yZXR1cm52YWx1ZT4KKyAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxl X2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+ PHByaW1hcnk+anNvbl9xdWVyeTwvcHJpbWFyeT48L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0 aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxyZXBsYWNlYWJsZT5jb250ZXh0 X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFj ZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFi bGU+dmFsdWU8L3JlcGxhY2VhYmxlPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxl PnZhcm5hbWU8L3JlcGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRp b25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVyYWw+IDxy ZXBsYWNlYWJsZT5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFsPkZP Uk1BVCBKU09OPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPkVOQ09ESU5HIFVURjg8L2xp dGVyYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRp b25hbD4geyA8bGl0ZXJhbD5XSVRIT1VUPC9saXRlcmFsPiB8IDxsaXRlcmFsPldJVEg8L2xpdGVy YWw+IHsgPGxpdGVyYWw+Q09ORElUSU9OQUw8L2xpdGVyYWw+IHwgPG9wdGlvbmFsPjxsaXRlcmFs PlVOQ09ORElUSU9OQUw8L2xpdGVyYWw+PC9vcHRpb25hbD4gfSB9IDxvcHRpb25hbD4gPGxpdGVy YWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IDxsaXRlcmFsPldSQVBQRVI8L2xpdGVyYWw+ IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5LRUVQPC9saXRlcmFs PiB8IDxsaXRlcmFsPk9NSVQ8L2xpdGVyYWw+IH0gPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFsPiA8 b3B0aW9uYWw+IDxsaXRlcmFsPk9OIFNDQUxBUiBTVFJJTkc8L2xpdGVyYWw+IDwvb3B0aW9uYWw+ IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJh bD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVNUFRZPC9saXRlcmFsPiB7 IDxvcHRpb25hbD4gPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IHwgPGxpdGVy YWw+T0JKRUNUPC9saXRlcmFsPiB9IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxh Y2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVNUFRZPC9saXRl cmFsPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8L2xp dGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5FTVBUWTwvbGl0ZXJh bD4geyA8b3B0aW9uYWw+IDxsaXRlcmFsPkFSUkFZPC9saXRlcmFsPiA8L29wdGlvbmFsPiB8IDxs aXRlcmFsPk9CSkVDVDwvbGl0ZXJhbD4gfSB8IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxy ZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwv bGl0ZXJhbD4gPC9vcHRpb25hbD4pCisgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAg ICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgPHJlcGxhY2Vh YmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHRvIHRoZQorICAgICAgICA8cmVwbGFj ZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4gdXNpbmcgdGhlCisgICAgICAgIDxyZXBs YWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+cy4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0 IHJldHVybiBhIEpTT04gc3RyaW5nLCBzbyBpZiB0aGUgcGF0aCBleHByZXNzaW9uCisgICAgICAg IHJldHVybnMgbXVsdGlwbGUgU1FML0pTT04gaXRlbXMsIHlvdSBtdXN0IHdyYXAgdGhlIHJlc3Vs dCB1c2luZyB0aGUKKyAgICAgICAgPGxpdGVyYWw+V0lUSCBXUkFQUEVSPC9saXRlcmFsPiBjbGF1 c2UuIElmIHRoZSB3cmFwcGVyIGlzCisgICAgICAgIDxsaXRlcmFsPlVOQ09ORElUSU9OQUw8L2xp dGVyYWw+LCBhbiBhcnJheSB3cmFwcGVyIHdpbGwgYWx3YXlzCisgICAgICAgIGJlIGFwcGxpZWQs IGV2ZW4gaWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIGFscmVhZHkgYSBzaW5nbGUgSlNPTiBvYmpl Y3QKKyAgICAgICAgb3IgYW4gYXJyYXksIGJ1dCBpZiBpdCBpcyA8bGl0ZXJhbD5DT05ESVRJT05B TDwvbGl0ZXJhbD4sIGl0IHdpbGwgbm90IGJlCisgICAgICAgIGFwcGxpZWQgdG8gYSBzaW5nbGUg YXJyYXkgb3Igb2JqZWN0LiA8bGl0ZXJhbD5VTkNPTkRJVElPTkFMPC9saXRlcmFsPgorICAgICAg ICBpcyB0aGUgZGVmYXVsdC4gIElmIHRoZSByZXN1bHQgaXMgYSBzY2FsYXIgc3RyaW5nLCBieSBk ZWZhdWx0IHRoZSB2YWx1ZQorICAgICAgICByZXR1cm5lZCB3aWxsIGhhdmUgc3Vycm91bmRpbmcg cXVvdGVzIG1ha2luZyBpdCBhIHZhbGlkIEpTT04gdmFsdWUsCisgICAgICAgIHdoaWNoIGNhbiBi ZSBtYWRlIGV4cGxpY2l0IGJ5IHNwZWNpZnlpbmcgPGxpdGVyYWw+S0VFUCBRVU9URVM8L2xpdGVy YWw+LgorICAgICAgICBDb252ZXJzZWx5LCBxdW90ZXMgY2FuIGJlIG9taXR0ZWQgYnkgc3BlY2lm eWluZyA8bGl0ZXJhbD5PTUlUIFFVT1RFUzwvbGl0ZXJhbD4uCisgICAgICAgIFRoZSA8bGl0ZXJh bD5SRVRVUk5JTkc8L2xpdGVyYWw+IGNsYXVzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZQor ICAgICAgICA8cmVwbGFjZWFibGU+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gb2YgdGhlIHJlc3Vs dCB2YWx1ZS4gIEl0IG11c3QKKyAgICAgICAgYmUgYSB0eXBlIGZvciB3aGljaCB0aGVyZSBpcyBh IGNhc3QgZnJvbSA8dHlwZT50ZXh0PC90eXBlPiB0byB0aGF0IHR5cGUuCisgICAgICAgIElmIG5v IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gaXMgc3BjaWZpZWQsIHRoZSByZXR1cm5lZCB2 YWx1ZSB3aWxsCisgICAgICAgIGJlIG9mIHR5cGUgPHR5cGU+anNvbmI8L3R5cGU+LgorICAgICAg ICBUaGUgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IGNsYXVzZSBzcGVjaWZpZXMgdGhlIGJl aGF2aW9yIGlmIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4geWllbGRzIG5vIHZhbHVlIGF0IGFsbDsgdGhlCisgICAgICAgIGRlZmF1bHQgd2hl biA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gaXMgbm90IHNwZWNpZmllZCBpcyB0byByZXR1 cm4gYQorICAgICAgICBudWxsIHZhbHVlLiAgVGhlIDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFs PiBjbGF1c2Ugc3BlY2lmaWVzIHRoZSBiZWhhdmlvcgorICAgICAgICBpZiBhbiBlcnJvciBvY2N1 cnMgYXMgYSByZXN1bHQgb2YgPHR5cGU+anNvbnBhdGg8L3R5cGU+IGV2YWx1YXRpb24KKyAgICAg ICAgKGluY2x1ZGluZyBjYXN0IHRvIHRoZSBvdXRwdXQgdHlwZSkgb3IgZHVyaW5nIHRoZSBleGVj dXRpb24gb2YKKyAgICAgICAgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IGJlaGF2aW9yICh0 aGF0IHdhcyBjYXVzZWQgYnkgZW1wdHkgcmVzdWx0IG9mCisgICAgICAgIDx0eXBlPmpzb25wYXRo PC90eXBlPiBldmFsdWF0aW9uKTsgdGhlIGRlZmF1bHQgd2hlbgorICAgICAgICA8bGl0ZXJhbD5P TiBFUlJPUjwvbGl0ZXJhbD4gaXMgbm90IHNwZWNpZmllZCBpcyB0byByZXR1cm4gYSBudWxsIHZh bHVlLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNv bl9xdWVyeShqc29uYiAnWzEsWzIsM10sbnVsbF0nLCAnbGF4ICRbKl1bMV0nIFdJVEggQ09ORElU SU9OQUwgV1JBUFBFUik8L2xpdGVyYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT5bM108L3JldHVy bnZhbHVlPgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93Pgor ICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2ln bmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVybT48cHJpbWFyeT5qc29uX3ZhbHVlPC9wcmltYXJ5 PjwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVuY3Rpb24+ICgK KyAgICAgICAgPHJlcGxhY2VhYmxlPmNvbnRleHRfaXRlbTwvcmVwbGFjZWFibGU+LCA8cmVwbGFj ZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgPG9wdGlvbmFsPiA8 bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFi bGU+IDxsaXRlcmFsPkFTPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+dmFybmFtZTwvcmVwbGFjZWFi bGU+IH0gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD48L29wdGlvbmFsPgorICAgICAgICA8b3B0 aW9uYWw+IDxsaXRlcmFsPlJFVFVSTklORzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmRhdGFfdHlw ZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJh bD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkRF RkFVTFQ8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSA8 bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFs PiB7IDxsaXRlcmFsPkVSUk9SPC9saXRlcmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwg PGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxh Y2VhYmxlPiB9IDxsaXRlcmFsPk9OIEVSUk9SPC9saXRlcmFsPiA8L29wdGlvbmFsPikKKyAgICAg ICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBh cHBseWluZyB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlPnBhdGhfZXhwcmVzc2lvbjwvcmVwbGFj ZWFibGU+IHRvIHRoZQorICAgICAgICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNl YWJsZT4gdXNpbmcgdGhlCisgICAgICAgIDxsaXRlcmFsPlBBU1NJTkc8L2xpdGVyYWw+IDxyZXBs YWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+cy4gVGhlCisgICAgICAgIGV4dHJhY3RlZCB2YWx1 ZSBtdXN0IGJlIGEgc2luZ2xlIDxhY3JvbnltPlNRTC9KU09OPC9hY3JvbnltPiBzY2FsYXIKKyAg ICAgICAgaXRlbS4gRm9yIHJlc3VsdHMgdGhhdCBhcmUgb2JqZWN0cyBvciBhcnJheXMsIHVzZSB0 aGUKKyAgICAgICAgPGZ1bmN0aW9uPmpzb25fcXVlcnk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpbnN0 ZWFkLgorICAgICAgICBUaGUgPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiBjbGF1c2UgY2Fu IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAgICAgICAgPHJlcGxhY2VhYmxlPmRhdGFfdHlwZTwv cmVwbGFjZWFibGU+IG9mIHRoZSByZXN1bHQgdmFsdWUuICBJdCBtdXN0CisgICAgICAgIGJlIGEg dHlwZSBmb3Igd2hpY2ggdGhlcmUgYXJlIGNhc3RzIGZyb20gYWxsIHBvc3NpYmxlIEpTT04gc2Nh bGFyCisgICAgICAgIHZhbHVlIHR5cGVzICg8dHlwZT50ZXh0PC90eXBlPiwgPHR5cGU+Ym9vbGVh bjwvdHlwZT4sIDx0eXBlPm51bWVyaWM8L3R5cGU+LAorICAgICAgICBhbmQgdmFyaW91cyBkYXRl dGltZSB0eXBlcykgdG8gdGhhdCB0eXBlLiAgSWYgbm8gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRl cmFsPgorICAgICAgICBpcyBzcGNpZmllZCwgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgb2Yg dHlwZSA8dHlwZT50ZXh0PC90eXBlPi4KKyAgICAgICAgVGhlIDxsaXRlcmFsPk9OIEVSUk9SPC9s aXRlcmFsPiBhbmQgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+CisgICAgICAgIGNsYXVzZXMg aGF2ZSBzaW1pbGFyIHNlbWFudGljcyBhcyBtZW50aW9uZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9m CisgICAgICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uICBOb3RlIHRoYXQgc2Nh bGFyIHN0cmluZ3MgcmV0dXJuZWQKKyAgICAgICAgYnkgPGZ1bmN0aW9uPmpzb25fdmFsdWU8L2Z1 bmN0aW9uPiBhbHdheXMgaGF2ZSB0aGVpciBxdW90ZXMgcmVtb3ZlZCwKKyAgICAgICAgZXF1aXZh bGVudCB0byB3aGF0IG9uZSB3b3VsZCBnZXQgd2l0aCA8bGl0ZXJhbD5PTUlUIFFVT1RFUzwvbGl0 ZXJhbD4KKyAgICAgICAgd2hlbiB1c2luZyA8ZnVuY3Rpb24+anNvbl9xdWVyeTwvZnVuY3Rpb24+ LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgPGxpdGVyYWw+anNvbl92 YWx1ZShqc29uYiAnIjEyMy40NSInLCAnJCcgUkVUVVJOSU5HIGZsb2F0KTwvbGl0ZXJhbD4KKyAg ICAgICAgPHJldHVybnZhbHVlPjEyMy40NTwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0ZXJhbD5qc29uX3ZhbHVlKGpzb25iICciMDM6MDQg MjAxNS0wMi0wMSInLCAnJC5kYXRldGltZSgiSEgyNDpNSSZuYnNwO1lZWVktTU0tREQiKScgUkVU VVJOSU5HIGRhdGUpPC9saXRlcmFsPgorICAgICAgICA8cmV0dXJudmFsdWU+MjAxNS0wMi0wMTwv cmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICA8bGl0 ZXJhbD5qc29uX3ZhbHVlKGpzb25iICdbMSwyXScsICdzdHJpY3QgJFsqXScgREVGQVVMVCA5IE9O IEVSUk9SKTwvbGl0ZXJhbD4KKyAgICAgICAgPHJldHVybnZhbHVlPjk8L3JldHVybnZhbHVlPgor ICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICA8L3Rn cm91cD4KKyAgPC90YWJsZT4KKyAgPC9zZWN0Mj4KICA8L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJm dW5jdGlvbnMtc2VxdWVuY2UiPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxf ZmVhdHVyZXMudHh0IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CmluZGV4 IDgwYzQwZWFmNTcuLjc1OThiZDhmMjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3FsX2ZlYXR1cmVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50 eHQKQEAgLTU0OCwxNSArNTQ4LDE1IEBAIFQ4MTEJQmFzaWMgU1FML0pTT04gY29uc3RydWN0b3Ig ZnVuY3Rpb25zCQkJWUVTCiBUODEyCVNRTC9KU09OOiBKU09OX09CSkVDVEFHRwkJCVlFUwkKIFQ4 MTMJU1FML0pTT046IEpTT05fQVJSQVlBR0cgd2l0aCBPUkRFUiBCWQkJCVlFUwkKIFQ4MTQJQ29s b24gaW4gSlNPTl9PQkpFQ1Qgb3IgSlNPTl9PQkpFQ1RBR0cJCQlZRVMJCi1UODIxCUJhc2ljIFNR TC9KU09OIHF1ZXJ5IG9wZXJhdG9ycwkJCU5PCQorVDgyMQlCYXNpYyBTUUwvSlNPTiBxdWVyeSBv cGVyYXRvcnMJCQlZRVMJCiBUODIyCVNRTC9KU09OOiBJUyBKU09OIFdJVEggVU5JUVVFIEtFWVMg cHJlZGljYXRlCQkJWUVTCQotVDgyMwlTUUwvSlNPTjogUEFTU0lORyBjbGF1c2UJCQlOTwkKK1Q4 MjMJU1FML0pTT046IFBBU1NJTkcgY2xhdXNlCQkJWUVTCQogVDgyNAlKU09OX1RBQkxFOiBzcGVj aWZpYyBQTEFOIGNsYXVzZQkJCU5PCQotVDgyNQlTUUwvSlNPTjogT04gRU1QVFkgYW5kIE9OIEVS Uk9SIGNsYXVzZXMJCQlOTwkKLVQ4MjYJR2VuZXJhbCB2YWx1ZSBleHByZXNzaW9uIGluIE9OIEVS Uk9SIG9yIE9OIEVNUFRZIGNsYXVzZXMJCQlOTwkKK1Q4MjUJU1FML0pTT046IE9OIEVNUFRZIGFu ZCBPTiBFUlJPUiBjbGF1c2VzCQkJWUVTCQorVDgyNglHZW5lcmFsIHZhbHVlIGV4cHJlc3Npb24g aW4gT04gRVJST1Igb3IgT04gRU1QVFkgY2xhdXNlcwkJCVlFUwkKIFQ4MjcJSlNPTl9UQUJMRTog c2libGluZyBORVNURUQgQ09MVU1OUyBjbGF1c2VzCQkJTk8JCi1UODI4CUpTT05fUVVFUlkJCQlO TwkKLVQ4MjkJSlNPTl9RVUVSWTogYXJyYXkgd3JhcHBlciBvcHRpb25zCQkJTk8JCitUODI4CUpT T05fUVVFUlkJCQlZRVMJCitUODI5CUpTT05fUVVFUlk6IGFycmF5IHdyYXBwZXIgb3B0aW9ucwkJ CVlFUwkKIFQ4MzAJRW5mb3JjaW5nIHVuaXF1ZSBrZXlzIGluIFNRTC9KU09OIGNvbnN0cnVjdG9y IGZ1bmN0aW9ucwkJCVlFUwkKIFQ4MzEJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogc3RyaWN0IG1v ZGUJCQlZRVMJCiBUODMyCVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IGl0ZW0gbWV0aG9kCQkJWUVT CQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggMzE4MWIxMTM2YS4uMzdkN2RmOTY0MCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2pz b25mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAjaW5jbHVkZSAidXRpbHMv bHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIKIApAQCAtODgsNiArODks MTIgQEAgc3RhdGljIHZvaWQgRXhlY0J1aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUs IEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAkJCQkJCQkJICBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg QWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKIAkJCQkJCQkJICBpbnQgdHJhbnNubywgaW50IHNl dG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwKIAkJCQkJCQkJICBib29sIG51bGxjaGVjayk7 CitzdGF0aWMgdm9pZCBFeGVjSW5pdEpzb25FeHByKEpzb25FeHByICpqZXhwciwgRXhwclN0YXRl ICpzdGF0ZSwKKwkJCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwsCisJCQkJCQkJIEV4 cHJFdmFsU3RlcCAqc2NyYXRjaCk7CitzdGF0aWMgaW50IEV4ZWNJbml0SnNvbkV4cHJDb2VyY2lv bihFeHByU3RhdGUgKnN0YXRlLCBOb2RlICpjb2VyY2lvbiwKKwkJCQkJCSBFcnJvclNhdmVDb250 ZXh0ICplc2NvbnRleHQsCisJCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOwogCiAK IC8qCkBAIC0yNDEzLDYgKzI0MjAsMTQgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUsIEV4 cHJTdGF0ZSAqc3RhdGUsCiAJCQkJYnJlYWs7CiAJCQl9CiAKKwkJY2FzZSBUX0pzb25FeHByOgor CQkJeworCQkJCUpzb25FeHByICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIG5vZGUpOwor CisJCQkJRXhlY0luaXRKc29uRXhwcihqZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwsICZzY3Jh dGNoKTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQl7CiAJCQkJ TnVsbFRlc3QgICAqbnRlc3QgPSAoTnVsbFRlc3QgKikgbm9kZTsKQEAgLTQxODEsMyArNDE5Niwz MzIgQEAgRXhlY0J1aWxkUGFyYW1TZXRFcXVhbChUdXBsZURlc2MgZGVzYywKIAogCXJldHVybiBz dGF0ZTsKIH0KKworLyoKKyAqIFB1c2ggc3RlcHMgdG8gZXZhbHVhdGUgYSBKc29uRXhwciBhbmQg aXRzIHZhcmlvdXMgc3Vic2lkaWFyeSBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIHZvaWQKK0V4 ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRlLAorCQkJCSBE YXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwKKwkJCQkgRXhwckV2YWxTdGVwICpzY3JhdGNoKQor eworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gcGFsbG9jMChzaXplb2YoSnNvbkV4cHJTdGF0 ZSkpOworCUpzb25FeHByUG9zdEV2YWxTdGF0ZSAqcG9zdF9ldmFsID0gJmpzZXN0YXRlLT5wb3N0 X2V2YWw7CisJTGlzdENlbGwgICAqYXJnZXhwcmxjOworCUxpc3RDZWxsICAgKmFyZ25hbWVsYzsK KwlMaXN0CSAgICpqdW1wc19pZl9za2lwID0gTklMOworCUxpc3QJICAgKmp1bXBzX3RvX2NvZXJj ZV9maW5pc2ggPSBOSUw7CisJTGlzdAkgICAqanVtcHNfdG9fZW5kID0gTklMOworCUxpc3RDZWxs ICAgKmxjOworCUV4cHJFdmFsU3RlcCAqYXM7CisKKwlqc2VzdGF0ZS0+anNleHByID0gamV4cHI7 CisKKwkvKgorCSAqIEV2YWx1YXRlIGZvcm1hdHRlZF9leHByIHN0b3JpbmcgdGhlIHJlc3VsdCBp bnRvCisJICoganNlc3RhdGUtPmZvcm1hdHRlZF9leHByLgorCSAqLworCUV4ZWNJbml0RXhwclJl YygoRXhwciAqKSBqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIHN0YXRlLAorCQkJCQkmanNlc3RhdGUt PmZvcm1hdHRlZF9leHByLnZhbHVlLAorCQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLmlz bnVsbCk7CisKKwkvKiBTdGVwcyB0byBqdW1wIHRvIGVuZCBpZiBmb3JtYXR0ZWRfZXhwciBldmFs dWF0ZXMgdG8gTlVMTCAqLworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlVNUF9JRl9OVUxMOwor CXNjcmF0Y2gtPnJlc251bGwgPSAmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLmlzbnVsbDsKKwlz Y3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJanVtcHNfaWZf c2tpcCA9IGxhcHBlbmRfaW50KGp1bXBzX2lmX3NraXAsIHN0YXRlLT5zdGVwc19sZW4pOworCUV4 cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCisJLyoKKwkgKiBFdmFsdWF0ZSBwYXRo c3BlYyBleHByZXNzaW9uIHN0b3JpbmcgdGhlIHJlc3VsdCBpbnRvCisJICoganNlc3RhdGUtPnBh dGhzcGVjLgorCSAqLworCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+cGF0aF9zcGVj LCBzdGF0ZSwKKwkJCQkJJmpzZXN0YXRlLT5wYXRoc3BlYy52YWx1ZSwKKwkJCQkJJmpzZXN0YXRl LT5wYXRoc3BlYy5pc251bGwpOworCisJLyogU3RlcHMgdG8gSlVNUCB0byBlbmQgaWYgcGF0aHNw ZWMgZXZhbHVhdGVzIHRvIE5VTEwgKi8KKwlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0pVTVBfSUZf TlVMTDsKKwlzY3JhdGNoLT5yZXNudWxsID0gJmpzZXN0YXRlLT5wYXRoc3BlYy5pc251bGw7CisJ c2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxvdyAqLworCWp1bXBzX2lm X3NraXAgPSBsYXBwZW5kX2ludChqdW1wc19pZl9za2lwLCBzdGF0ZS0+c3RlcHNfbGVuKTsKKwlF eHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCS8qIFN0ZXBzIHRvIGNvbXB1dGUg UEFTU0lORyBhcmdzLiAqLworCWpzZXN0YXRlLT5hcmdzID0gTklMOworCWZvcmJvdGgoYXJnZXhw cmxjLCBqZXhwci0+cGFzc2luZ192YWx1ZXMsCisJCQlhcmduYW1lbGMsIGpleHByLT5wYXNzaW5n X25hbWVzKQorCXsKKwkJRXhwcgkgICAqYXJnZXhwciA9IChFeHByICopIGxmaXJzdChhcmdleHBy bGMpOworCQlTdHJpbmcJICAgKmFyZ25hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGFyZ25hbWVs Yyk7CisJCUpzb25QYXRoVmFyaWFibGUgKnZhciA9IHBhbGxvYyhzaXplb2YoKnZhcikpOworCisJ CXZhci0+bmFtZSA9IGFyZ25hbWUtPnN2YWw7CisJCXZhci0+dHlwaWQgPSBleHByVHlwZSgoTm9k ZSAqKSBhcmdleHByKTsKKwkJdmFyLT50eXBtb2QgPSBleHByVHlwbW9kKChOb2RlICopIGFyZ2V4 cHIpOworCisJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBhcmdleHByLCBzdGF0ZSwgJnZhci0+ dmFsdWUsICZ2YXItPmlzbnVsbCk7CisKKwkJanNlc3RhdGUtPmFyZ3MgPSBsYXBwZW5kKGpzZXN0 YXRlLT5hcmdzLCB2YXIpOworCX0KKworCS8qIFN0ZXAgZm9yIEpzb25QYXRoKiBldmFsdWF0aW9u OyBzZWUgRXhlY0V2YWxKc29uRXhwclBhdGgoKS4gKi8KKwlzY3JhdGNoLT5vcGNvZGUgPSBFRU9Q X0pTT05FWFBSX1BBVEg7CisJc2NyYXRjaC0+cmVzdmFsdWUgPSByZXN2OworCXNjcmF0Y2gtPnJl c251bGwgPSByZXNudWxsOworCXNjcmF0Y2gtPmQuanNvbmV4cHIuanNlc3RhdGUgPSBqc2VzdGF0 ZTsKKwlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCS8qCisJICogU3RlcCB0 byBqdW1wIHRvIGVuZCB3aGVuIHRoZXJlJ3MgbmVpdGhlciBhbiBlcnJvciB3aGVuIGV2YWx1YXRp bmcKKwkgKiBKc29uUGF0aCogbm9yIGFueSBuZWVkIHRvIGNvZXJjZSB0aGUgcmVzdWx0IGJlY2F1 c2UgaXQncyBhbHJlYWR5CisJICogb2YgdGhlIHNwZWNpZmllZCB0eXBlLgorCSAqLworCXNjcmF0 Y2gtPm9wY29kZSA9IEVFT1BfSlVNUDsKKwlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJ Lyogc2V0IGJlbG93ICovCisJanVtcHNfdG9fZW5kID0gbGFwcGVuZF9pbnQoanVtcHNfdG9fZW5k LCBzdGF0ZS0+c3RlcHNfbGVuKTsKKwlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsK KworCS8qCisJICogU3RlcHMgdG8gY29lcmNlIHRoZSByZXN1bHQgdmFsdWUgY29tcHV0ZWQgYnkg RUVPUF9KU09ORVhQUl9QQVRILgorCSAqIFRvIGhhbmRsZSBjb2VyY2lvbiBlcnJvcnMgc29mdGx5 LCB1c2UgdGhlIGZvbGxvd2luZyBFcnJvclNhdmVDb250ZXh0CisJICogd2hlbiBpbml0aWFsaXpp bmcgdGhlIGNvZXJjaW9uIGV4cHJlc3Npb25zLCBpbmNsdWRpbmcgYW55IEpzb25Db2VyY2lvbgor CSAqIG5vZGVzLgorCSAqLworCWpzZXN0YXRlLT5lc2NvbnRleHQudHlwZSA9IFRfRXJyb3JTYXZl Q29udGV4dDsKKwlpZiAoamV4cHItPnJlc3VsdF9jb2VyY2lvbiB8fCBqZXhwci0+b21pdF9xdW90 ZXMpCisJeworCQlqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA9CisJCQlFeGVj SW5pdEpzb25FeHByQ29lcmNpb24oc3RhdGUsIGpleHByLT5yZXN1bHRfY29lcmNpb24sCisJCQkJ CQkJCQkgamV4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0VSUk9SID8KKwkJ CQkJCQkJCSAmanNlc3RhdGUtPmVzY29udGV4dCA6IE5VTEwsCisJCQkJCQkJCQkgcmVzdiwgcmVz bnVsbCk7CisJCS8qIEp1bXAgdG8gQ09FUkNJT05fRklOSVNILiAqLworCQlzY3JhdGNoLT5vcGNv ZGUgPSBFRU9QX0pVTVA7CisJCXNjcmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQg YmVsb3cgKi8KKwkJanVtcHNfdG9fY29lcmNlX2ZpbmlzaCA9IGxhcHBlbmRfaW50KGp1bXBzX3Rv X2NvZXJjZV9maW5pc2gsCisJCQkJCQkJCQkJCSBzdGF0ZS0+c3RlcHNfbGVuKTsKKwkJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJfQorCWVsc2UKKwkJanNlc3RhdGUtPmp1bXBf ZXZhbF9yZXN1bHRfY29lcmNpb24gPSAtMTsKKworCS8qIFN0ZXBzIGZvciBjb2VyY2luZyBKc29u SXRlbVR5cGUgdmFsdWVzIHJldHVybmVkIGJ5IEpzb25QYXRoVmFsdWUoKS4gKi8KKwlpZiAoamV4 cHItPml0ZW1fY29lcmNpb25zKQorCXsKKwkJLyoKKwkJICogSGVyZSB3ZSBjcmVhdGUgdGhlIHN0 ZXBzIGZvciBlYWNoIEpzb25JdGVtVHlwZSB0eXBlJ3MgY29lcmNpb24KKwkJICogZXhwcmVzc2lv biBhbmQgYWxzbyBzdG9yZSBhIGZsYWcgd2hldGhlciB0aGUgZXhwcmVzc2lvbiBpcworCQkgKiBh IEpzb25Db2VyY2lvbiBub2RlLiAgRXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKCkgY2FsbGVk IGJ5CisJCSAqIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgd2lsbCBtYXAgYSBnaXZlbiBKc29uYlZh bHVlIHJldHVybmVkIGJ5CisJCSAqIEpzb25QYXRoVmFsdWUoKSB0byBpdHMgIEpzb25JdGVtVHlw ZSdzIGV4cHJlc3Npb24ncyBzdGVwIGFkZHJlc3MKKwkJICogYW5kIHRoZSBmbGFnIGJ5IGluZGV4 aW5nIHRoZSBmb2xsb3dpbmcgYXJyYXlzIHdpdGggSnNvbkl0ZW1UeXBlCisJCSAqIGVudW0gdmFs dWUuCisJCSAqLworCQlqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zID0gbGlzdF9sZW5ndGgo amV4cHItPml0ZW1fY29lcmNpb25zKTsKKwkJanNlc3RhdGUtPmV2YWxfaXRlbV9jb2VyY2lvbl9q dW1wcyA9IChpbnQgKikKKwkJCXBhbGxvYyhqc2VzdGF0ZS0+bnVtX2l0ZW1fY29lcmNpb25zICog c2l6ZW9mKGludCkpOworCQlqc2VzdGF0ZS0+aXRlbV9jb2VyY2lvbl92aWFfZXhwciA9IChib29s ICopCisJCQlwYWxsb2MwKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lvbnMgKiBzaXplb2YoYm9v bCkpOworCQlmb3JlYWNoKGxjLCBqZXhwci0+aXRlbV9jb2VyY2lvbnMpCisJCXsKKwkJCUpzb25J dGVtQ29lcmNpb24gKml0ZW1fY29lcmNpb24gPSBsZmlyc3QobGMpOworCQkJTm9kZSAqY29lcmNp b24gPSBpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbjsKKworCQkJanNlc3RhdGUtPml0ZW1fY29lcmNp b25fdmlhX2V4cHJbaXRlbV9jb2VyY2lvbi0+aXRlbV90eXBlXSA9CisJCQkJKGNvZXJjaW9uICE9 IE5VTEwgJiYgIUlzQShjb2VyY2lvbiwgSnNvbkNvZXJjaW9uKSk7CisJCQlqc2VzdGF0ZS0+ZXZh bF9pdGVtX2NvZXJjaW9uX2p1bXBzW2l0ZW1fY29lcmNpb24tPml0ZW1fdHlwZV0gPQorCQkJCUV4 ZWNJbml0SnNvbkV4cHJDb2VyY2lvbihzdGF0ZSwgY29lcmNpb24sCisJCQkJCQkJCQkJIGpleHBy LT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUiA/CisJCQkJCQkJCQkJICZq c2VzdGF0ZS0+ZXNjb250ZXh0IDogTlVMTCwKKwkJCQkJCQkJCQkgcmVzdiwgcmVzbnVsbCk7CisK KwkJCS8qIEp1bXAgdG8gQ09FUkNJT05fRklOSVNILiAqLworCQkJc2NyYXRjaC0+b3Bjb2RlID0g RUVPUF9KVU1QOworCQkJc2NyYXRjaC0+ZC5qdW1wLmp1bXBkb25lID0gLTE7CS8qIHNldCBiZWxv dyAqLworCQkJanVtcHNfdG9fY29lcmNlX2ZpbmlzaCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2Nv ZXJjZV9maW5pc2gsCisJCQkJCQkJCQkJCQkgc3RhdGUtPnN0ZXBzX2xlbik7CisJCQlFeHByRXZh bFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKwkJfQorCX0KKworCS8qCisJICogQWRkIHN0ZXAg dG8gcmVzZXQgdGhlIEVycm9yU2F2ZUNvbnRleHQgYW5kIHNldCBlcnJvciBmbGFnIGlmIHRoZQor CSAqIGNvZXJjaW9uIHN0ZXBzIGVuY291bnRlcmVkIGFuIGVycm9yIGJ1dCB3YXMgbm90IHRocm93 biBiZWNhdXNlIG9mIHRoZQorCSAqIE9OIEVSUk9SIGJlaGF2aW9yLgorCSAqLworCWlmIChqZXhw ci0+cmVzdWx0X2NvZXJjaW9uIHx8IGpleHByLT5pdGVtX2NvZXJjaW9ucykKKwl7CisJCWZvcmVh Y2gobGMsIGp1bXBzX3RvX2NvZXJjZV9maW5pc2gpCisJCXsKKwkJCWFzID0gJnN0YXRlLT5zdGVw c1tsZmlyc3RfaW50KGxjKV07CisJCQlhcy0+ZC5qdW1wLmp1bXBkb25lID0gc3RhdGUtPnN0ZXBz X2xlbjsKKwkJfQorCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfQ09FUkNJT05f RklOSVNIOworCQlzY3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7CisJCUV4 cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCWpzZXN0YXRlLT5qdW1wX2Vt cHR5ID0ganNlc3RhdGUtPmp1bXBfZXJyb3IgPSAtMTsKKworCS8qCisJICogU3RlcCB0byBoYW5k bGUgT04gRVJST1IgYmVoYXZpb3JzLiAgVGhpcyBoYW5kbGVzIGJvdGggdGhlIGVycm9ycworCSAq IHRoYXQgb2NjdXIgZHVyaW5nIEVFT1BfSlNPTkVYUFJfUEFUSCBldmFsdWF0aW9uIGFuZCBzdWJz ZXF1ZW50IGNvZXJjaW9uCisJICogZXZhbHVhdGlvbi4KKwkgKi8KKwlpZiAoamV4cHItPm9uX2Vy cm9yICYmCisJCWpleHByLT5vbl9lcnJvci0+YnR5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUikK Kwl7CisJCWpzZXN0YXRlLT5qdW1wX2Vycm9yID0gc3RhdGUtPnN0ZXBzX2xlbjsKKwkJc2NyYXRj aC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05PVF9UUlVFOworCisJCS8qCisJCSAqIHBvc3RfZXZh bC5lcnJvciBpcyBzZXQgYnkgRXhlY0V2YWxKc29uRXhwclBhdGgoKSBhbmQKKwkJICogRXhlY0V2 YWxKc29uQ29lcmNpb25GaW5pc2goKS4KKwkJICovCisJCXNjcmF0Y2gtPnJlc3ZhbHVlID0gJnBv c3RfZXZhbC0+ZXJyb3IudmFsdWU7CisJCXNjcmF0Y2gtPnJlc251bGwgPSAmcG9zdF9ldmFsLT5l cnJvci5pc251bGw7CisJCXNjcmF0Y2gtPmQuanVtcC5qdW1wZG9uZSA9IC0xOwkvKiBzZXQgYmVs b3cgKi8KKwkJanVtcHNfdG9fZW5kID0gbGFwcGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+ c3RlcHNfbGVuKTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwkJLyog U3RlcHMgdG8gZXZhbHVhdGUgdGhlIE9OIEVSUk9SIGV4cHJlc3Npb24gKi8KKwkJRXhlY0luaXRF eHByUmVjKChFeHByICopIGpleHByLT5vbl9lcnJvci0+ZXhwciwKKwkJCQkJCXN0YXRlLCByZXN2 LCByZXNudWxsKTsKKworCQkvKiBTdGVwcyB0byBjb2VyY2UgdGhlIE9OIEVSUk9SIGV4cHJlc3Np b24gaWYgbmVlZGVkICovCisJCSh2b2lkKSBFeGVjSW5pdEpzb25FeHByQ29lcmNpb24oc3RhdGUs CisJCQkJCQkJCQkJKE5vZGUgKikgamV4cHItPm9uX2Vycm9yLT5jb2VyY2lvbiwKKwkJCQkJCQkJ CQkgJmpzZXN0YXRlLT5lc2NvbnRleHQsCisJCQkJCQkJCQkJcmVzdiwgcmVzbnVsbCk7CisKKwkJ anVtcHNfdG9fZW5kID0gbGFwcGVuZF9pbnQoanVtcHNfdG9fZW5kLCBzdGF0ZS0+c3RlcHNfbGVu KTsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVt cGRvbmUgPSAtMTsKKwkJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisJfQorCisJ LyogU3RlcCB0byBoYW5kbGUgT04gRU1QVFkgYmVoYXZpb3JzLiAqLworCWlmIChqZXhwci0+b25f ZW1wdHkgIT0gTlVMTCAmJgorCQlqZXhwci0+b25fZW1wdHktPmJ0eXBlICE9IEpTT05fQkVIQVZJ T1JfRVJST1IpCisJeworCQlqc2VzdGF0ZS0+anVtcF9lbXB0eSA9IHN0YXRlLT5zdGVwc19sZW47 CisKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QX0lGX05PVF9UUlVFOworCQlzY3JhdGNo LT5yZXN2YWx1ZSA9ICZwb3N0X2V2YWwtPmVtcHR5LnZhbHVlOworCQlzY3JhdGNoLT5yZXNudWxs ID0gJnBvc3RfZXZhbC0+ZW1wdHkuaXNudWxsOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUg PSAtMTsJLyogc2V0IGJlbG93ICovCisJCWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBz X3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNj cmF0Y2gpOworCisJCS8qIFN0ZXBzIHRvIGV2YWx1YXRlIHRoZSBPTiBFTVBUWSBleHByZXNzaW9u ICovCisJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+b25fZW1wdHktPmV4cHIsCisJ CQkJCQlzdGF0ZSwgcmVzdiwgcmVzbnVsbCk7CisKKwkJLyogU3RlcHMgdG8gY29lcmNlIHRoZSBP TiBFTVBUWSBleHByZXNzaW9uIGlmIG5lZWRlZCAqLworCQkodm9pZCkgRXhlY0luaXRKc29uRXhw ckNvZXJjaW9uKHN0YXRlLAorCQkJCQkJCQkJCShOb2RlICopIGpleHByLT5vbl9lbXB0eS0+Y29l cmNpb24sCisJCQkJCQkJCQkJJmpzZXN0YXRlLT5lc2NvbnRleHQsCisJCQkJCQkJCQkJcmVzdiwg cmVzbnVsbCk7CisKKwkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5k Lmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93ICovCisJCWp1bXBzX3RvX2VuZCA9IGxh cHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVz aFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCWlmIChqc2VzdGF0ZS0+anVtcF9lcnJvciA8 IDAgJiYganNlc3RhdGUtPmp1bXBfZW1wdHkgPCAwKQorCXsKKwkJc2NyYXRjaC0+b3Bjb2RlID0g RUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSAtMTsJLyogc2V0IGJlbG93 ICovCisJCWp1bXBzX3RvX2VuZCA9IGxhcHBlbmRfaW50KGp1bXBzX3RvX2VuZCwgc3RhdGUtPnN0 ZXBzX2xlbik7CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCS8q IFJldHVybiBOVUxMIHdoZW4gZWl0aGVyIGZvcm1hdHRlZF9leHByIG9yIHBhdGhzcGVjIGlzIE5V TEwuICovCisJZm9yZWFjaChsYywganVtcHNfaWZfc2tpcCkKKwl7CisJCWFzID0gJnN0YXRlLT5z dGVwc1tsZmlyc3RfaW50KGxjKV07CisJCWFzLT5kLmp1bXAuanVtcGRvbmUgPSBzdGF0ZS0+c3Rl cHNfbGVuOworCX0KKwlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0NPTlNUOworCXNjcmF0Y2gtPnJl c3ZhbHVlID0gcmVzdjsKKwlzY3JhdGNoLT5yZXNudWxsID0gcmVzbnVsbDsKKwlzY3JhdGNoLT5k LmNvbnN0dmFsLnZhbHVlID0gKERhdHVtKSAwOworCXNjcmF0Y2gtPmQuY29uc3R2YWwuaXNudWxs ID0gdHJ1ZTsKKwlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsKKworCS8qIEp1bXAg dG8gY29lcmNlIHRoZSBOVUxMIHVzaW5nIHJlc3VsdF9jb2VyY2lvbiBpcyBwcmVzZW50LiAqLwor CWlmIChqc2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbiA+PSAwKQorCXsKKwkJc2Ny YXRjaC0+b3Bjb2RlID0gRUVPUF9KVU1QOworCQlzY3JhdGNoLT5kLmp1bXAuanVtcGRvbmUgPSBq c2VzdGF0ZS0+anVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbjsKKwkJRXhwckV2YWxQdXNoU3RlcChz dGF0ZSwgc2NyYXRjaCk7CisJfQorCisJZm9yZWFjaChsYywganVtcHNfdG9fZW5kKQorCXsKKwkJ YXMgPSAmc3RhdGUtPnN0ZXBzW2xmaXJzdF9pbnQobGMpXTsKKwkJYXMtPmQuanVtcC5qdW1wZG9u ZSA9IHN0YXRlLT5zdGVwc19sZW47CisJfQorCisJanNlc3RhdGUtPmp1bXBfZW5kID0gc3RhdGUt PnN0ZXBzX2xlbjsKK30KKworLyogSW5pdGlhbGl6ZSBvbmUgSnNvbkNvZXJjaW9uIGZvciBleGVj dXRpb24uICovCitzdGF0aWMgaW50CitFeGVjSW5pdEpzb25FeHByQ29lcmNpb24oRXhwclN0YXRl ICpzdGF0ZSwgTm9kZSAqY29lcmNpb24sCisJCQkJCQkgRXJyb3JTYXZlQ29udGV4dCAqZXNjb250 ZXh0LAorCQkJCQkJIERhdHVtICpyZXN2LCBib29sICpyZXNudWxsKQoreworCWludAkJCWp1bXBf ZXZhbF9jb2VyY2lvbjsKKwlEYXR1bQkgICAqc2F2ZV9pbm5lcm1vc3RfY2FzZXZhbDsKKwlib29s CSAgICpzYXZlX2lubmVybW9zdF9jYXNlbnVsbDsKKwlFcnJvclNhdmVDb250ZXh0ICpzYXZlX2Vz Y29udGV4dDsKKworCWlmIChjb2VyY2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlqdW1w X2V2YWxfY29lcmNpb24gPSBzdGF0ZS0+c3RlcHNfbGVuOworCWlmIChJc0EoY29lcmNpb24sIEpz b25Db2VyY2lvbikpCisJeworCQlFeHByRXZhbFN0ZXAgc2NyYXRjaCA9IHswfTsKKwkJT2lkCQkJ dHlwaW5wdXQ7CisJCUZtZ3JJbmZvICAgKmZpbmZvOworCQlPaWQJCQl0eXBpb3BhcmFtOworCisJ CWdldFR5cGVJbnB1dEluZm8oKChKc29uQ29lcmNpb24gKikgY29lcmNpb24pLT50YXJnZXR0eXBl LAorCQkJCQkJICZ0eXBpbnB1dCwgJnR5cGlvcGFyYW0pOworCQlmaW5mbyA9IHBhbGxvYzAoc2l6 ZW9mKEZtZ3JJbmZvKSk7CisJCWZtZ3JfaW5mbyh0eXBpbnB1dCwgZmluZm8pOworCisJCXNjcmF0 Y2gub3Bjb2RlID0gRUVPUF9KU09ORVhQUl9DT0VSQ0lPTjsKKwkJc2NyYXRjaC5yZXN2YWx1ZSA9 IHJlc3Y7CisJCXNjcmF0Y2gucmVzbnVsbCA9IHJlc251bGw7CisJCXNjcmF0Y2guZC5qc29uZXhw cl9jb2VyY2lvbi5jb2VyY2lvbiA9IChKc29uQ29lcmNpb24gKikgY29lcmNpb247CisJCXNjcmF0 Y2guZC5qc29uZXhwcl9jb2VyY2lvbi5pbnB1dF9maW5mbyA9IGZpbmZvOworCQlzY3JhdGNoLmQu anNvbmV4cHJfY29lcmNpb24udHlwaW9wYXJhbSA9IHR5cGlvcGFyYW07CisJCXNjcmF0Y2guZC5q c29uZXhwcl9jb2VyY2lvbi5qc29uX3BvcHVsYXRlX3R5cGVfY2FjaGUgPSBOVUxMOworCQlzY3Jh dGNoLmQuanNvbmV4cHJfY29lcmNpb24uZXNjb250ZXh0ID0gZXNjb250ZXh0OworCQlFeHByRXZh bFB1c2hTdGVwKHN0YXRlLCAmc2NyYXRjaCk7CisJCXJldHVybiBqdW1wX2V2YWxfY29lcmNpb247 CisJfQorCisJLyogUHVzaCBzdGVwKHMpIHRvIGNvbXB1dGUgY3N0YXRlLT5jb2VyY2lvbi4gKi8K KwlzYXZlX2lubmVybW9zdF9jYXNldmFsID0gc3RhdGUtPmlubmVybW9zdF9jYXNldmFsOworCXNh dmVfaW5uZXJtb3N0X2Nhc2VudWxsID0gc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbDsKKwlzYXZl X2VzY29udGV4dCA9IHN0YXRlLT5lc2NvbnRleHQ7CisKKwlzdGF0ZS0+aW5uZXJtb3N0X2Nhc2V2 YWwgPSByZXN2OworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZW51bGwgPSByZXNudWxsOworCXN0YXRl LT5lc2NvbnRleHQgPSBlc2NvbnRleHQ7CisKKwlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgY29l cmNpb24sIHN0YXRlLCByZXN2LCByZXNudWxsKTsKKworCXN0YXRlLT5pbm5lcm1vc3RfY2FzZXZh bCA9IHNhdmVfaW5uZXJtb3N0X2Nhc2V2YWw7CisJc3RhdGUtPmlubmVybW9zdF9jYXNlbnVsbCA9 IHNhdmVfaW5uZXJtb3N0X2Nhc2VudWxsOworCXN0YXRlLT5lc2NvbnRleHQgPSBzYXZlX2VzY29u dGV4dDsKKworCXJldHVybiBqdW1wX2V2YWxfY29lcmNpb247Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHJJbnRlcnAuYwppbmRleCBiMTdjYWIwNmI2Li45NjQ0MzNhMGU3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTczLDggKzczLDggQEAKICNpbmNsdWRlICJ1 dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2V4cGFuZGVkcmVjb3JkLmgiCiAjaW5jbHVk ZSAidXRpbHMvanNvbi5oIgotI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRp bHMvanNvbmZ1bmNzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3RpbWVzdGFtcC5oIgpAQCAtMTgxLDYgKzE4MSwxMCBAQCBzdGF0aWMgcGdfYXR0cmli dXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBFeGVjQWdnUGxhaW5UcmFuc0J5UmVmKEFnZ1N0YXRlICph Z2dzdGF0ZQogCQkJCQkJCQkJCQkJCQkJICBBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwLAogCQkJ CQkJCQkJCQkJCQkJICBFeHByQ29udGV4dCAqYWdnY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJCSAg aW50IHNldG5vKTsKK3N0YXRpYyB2b2lkIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29u YlZhbHVlICppdGVtLCBKc29uRXhwclN0YXRlICpqc2VzdGF0ZSwKKwkJCQkJCQlib29sIHRocm93 X2Vycm9yLAorCQkJCQkJCWludCAqanVtcF9ldmFsX2l0ZW1fY29lcmNpb24sCisJCQkJCQkJRGF0 dW0gKnJlc3ZhbHVlLCBib29sICpyZXNudWxsKTsKIAogLyoKICAqIFNjYWxhckFycmF5T3BFeHBy SGFzaEVudHJ5CkBAIC00ODIsNiArNDg2LDkgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpz dGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9Q X1hNTEVYUFIsCiAJCSYmQ0FTRV9FRU9QX0pTT05fQ09OU1RSVUNUT1IsCiAJCSYmQ0FTRV9FRU9Q X0lTX0pTT04sCisJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX1BBVEgsCisJCSYmQ0FTRV9FRU9QX0pT T05FWFBSX0NPRVJDSU9OLAorCQkmJkNBU0VfRUVPUF9KU09ORVhQUl9DT0VSQ0lPTl9GSU5JU0gs CiAJCSYmQ0FTRV9FRU9QX0FHR1JFRiwKIAkJJiZDQVNFX0VFT1BfR1JPVVBJTkdfRlVOQywKIAkJ JiZDQVNFX0VFT1BfV0lORE9XX0ZVTkMsCkBAIC0xNTUxLDYgKzE1NTgsMjggQEAgRXhlY0ludGVy cEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251 bGwpCiAJCQlFRU9fTkVYVCgpOwogCQl9CiAKKwkJRUVPX0NBU0UoRUVPUF9KU09ORVhQUl9QQVRI KQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICov CisJCQlFRU9fSlVNUChFeGVjRXZhbEpzb25FeHByUGF0aChzdGF0ZSwgb3AsIGVjb250ZXh0KSk7 CisJCX0KKworCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSX0NPRVJDSU9OKQorCQl7CisJCQkvKiB0 b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFeGVjRXZhbEpz b25Db2VyY2lvbihzdGF0ZSwgb3AsIGVjb250ZXh0KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQor CisJCUVFT19DQVNFKEVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNIKQorCQl7CisJCQkvKiB0 b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCisJCQlFeGVjRXZhbEpz b25Db2VyY2lvbkZpbmlzaChzdGF0ZSwgb3ApOworCisJCQlFRU9fTkVYVCgpOworCQl9CisKIAkJ RUVPX0NBU0UoRUVPUF9BR0dSRUYpCiAJCXsKIAkJCS8qCkBAIC00MjA4LDYgKzQyMzcsMzQ1IEBA IEV4ZWNFdmFsSnNvbklzUHJlZGljYXRlKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAq b3ApCiAJKm9wLT5yZXN2YWx1ZSA9IEJvb2xHZXREYXR1bShyZXMpOwogfQogCisvKgorICogUGVy Zm9ybXMgSnNvblBhdGh7RXhpc3RzfFF1ZXJ5fFZhbHVlfSgpIGZvciBnaXZlbiBjb250ZXh0IGl0 ZW0gYW5kIEpTT04KKyAqIHBhdGguCisgKgorICogUmVzdWx0IGlzIHNldCBpbiAqb3AtPnJlc3Zh bHVlIGFuZCAqb3AtPnJlc251bGwuICBSZXR1cm4gdmFsdWUgaXMgdGhlCisgKiBzdGVwIGFkZHJl c3MgdG8gYmUgcGVyZm9ybWVkIG5leHQuCisgKgorICogT24gcmV0dXJuLCBKc29uRXhwclBvc3RF dmFsU3RhdGUgaXMgcG9wdWxhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBkZXRhaWxzOgorICoJLSBl cnJvci52YWx1ZTogdHJ1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgSnNvblBhdGggZXZh bHVhdGlvbgorICoJLSBlbXB0eS52YWx1ZTogdHJ1ZSBpZiBKc29uUGF0aHtRdWVyeXxWYWx1ZX0o KSBmb3VuZCBubyBtYXRjaGluZyBpdGVtCisgKgorICogTm8gcmV0dXJuIGlmIHRoZSBPTiBFUlJP Ui9FTVBUWSBiZWhhdmlvciBpcyBFUlJPUi4KKyAqLworaW50CitFeGVjRXZhbEpzb25FeHByUGF0 aChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAorCQkJCQkgRXhwckNvbnRleHQg KmVjb250ZXh0KQoreworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIu anNlc3RhdGU7CisJSnNvbkV4cHJQb3N0RXZhbFN0YXRlICpwb3N0X2V2YWwgPSAmanNlc3RhdGUt PnBvc3RfZXZhbDsKKwlKc29uRXhwciAgICpqZXhwciA9IGpzZXN0YXRlLT5qc2V4cHI7CisJRGF0 dW0JCWl0ZW07CisJSnNvblBhdGggICAqcGF0aDsKKwlib29sCQl0aHJvd19lcnJvciA9IGpleHBy LT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUjsKKwlib29sCQllcnJvciA9 IGZhbHNlLAorCQkJCWVtcHR5ID0gZmFsc2U7CisJLyogTWlnaHQgZ2V0IG92ZXJyaWRkZW4gZm9y IEpTT05fVkFMVUVfT1AgYnkgYW4gcGVyLWl0ZW0gY29lcmNpb24uICovCisJaW50CQkJanVtcF9l dmFsX2NvZXJjaW9uID0ganNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb247CisKKwlp dGVtID0ganNlc3RhdGUtPmZvcm1hdHRlZF9leHByLnZhbHVlOworCXBhdGggPSBEYXR1bUdldEpz b25QYXRoUChqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUpOworCisJLyogUmVzZXQgSnNvbkV4cHJQ b3N0RXZhbFN0YXRlIGZvciB0aGlzIGV2YWx1YXRpb24uICovCisJbWVtc2V0KHBvc3RfZXZhbCwg MCwgc2l6ZW9mKCpwb3N0X2V2YWwpKTsKKwlzd2l0Y2ggKGpleHByLT5vcCkKKwl7CisJCWNhc2Ug SlNPTl9FWElTVFNfT1A6CisJCQl7CisJCQkJYm9vbAkJZXhpc3RzID0gSnNvblBhdGhFeGlzdHMo aXRlbSwgcGF0aCwKKwkJCQkJCQkJCQkJCQkhdGhyb3dfZXJyb3IgPyAmZXJyb3IgOiBOVUxMLAor CQkJCQkJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKKworCQkJCWlmICghZXJyb3IpCisJCQkJewor CQkJCQkqb3AtPnJlc3ZhbHVlID0gQm9vbEdldERhdHVtKGV4aXN0cyk7CisJCQkJCSpvcC0+cmVz bnVsbCA9IGZhbHNlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9RVUVS WV9PUDoKKwkJCSpvcC0+cmVzdmFsdWUgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHBy LT53cmFwcGVyLCAmZW1wdHksCisJCQkJCQkJCQkJICAhdGhyb3dfZXJyb3IgPyAmZXJyb3IgOiBO VUxMLAorCQkJCQkJCQkJCSAganNlc3RhdGUtPmFyZ3MpOworCisJCQlpZiAoIWVycm9yICYmICFl bXB0eSkKKwkJCQkqb3AtPnJlc251bGwgPSAoRGF0dW1HZXRQb2ludGVyKCpvcC0+cmVzdmFsdWUp ID09IE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJeworCQkJ CUpzb25iVmFsdWUgKmpidiA9IEpzb25QYXRoVmFsdWUoaXRlbSwgcGF0aCwgJmVtcHR5LAorCQkJ CQkJCQkJCQkJIXRocm93X2Vycm9yID8gJmVycm9yIDogTlVMTCwKKwkJCQkJCQkJCQkJCWpzZXN0 YXRlLT5hcmdzKTsKKworCQkJCWlmIChqYnYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIFdpbGwg YmUgY29lcmNlZCB3aXRoIHJlc3VsdF9jb2VyY2lvbi4gKi8KKwkJCQkJKm9wLT5yZXN2YWx1ZSA9 IChEYXR1bSkgMDsKKwkJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSBp ZiAoIWVycm9yICYmICFlbXB0eSkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSByZXF1 ZXN0ZWQgb3V0cHV0IHR5cGUgaXMganNvbihiKSwgdXNlCisJCQkJCSAqIHJlc3VsdF9jb2VyY2lv biB0byBkbyB0aGUgY29lcmNpb24uCisJCQkJCSAqLworCQkJCQlpZiAoamV4cHItPnJldHVybmlu Zy0+dHlwaWQgPT0gSlNPTk9JRCB8fAorCQkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0g SlNPTkJPSUQpCisJCQkJCXsKKwkJCQkJCSpvcC0+cmVzdmFsdWUgPSBKc29uYlBHZXREYXR1bShK c29uYlZhbHVlVG9Kc29uYihqYnYpKTsKKwkJCQkJCSpvcC0+cmVzbnVsbCA9IGZhbHNlOworCQkJ CQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEVsc2UsIHVzZSBvbmUg b2YgdGhlIGl0ZW1fY29lcmNpb25zLgorCQkJCQkJICoKKwkJCQkJCSAqIEVycm9yIG91dCBpZiBu byBjYXN0IGV4cHJlc3Npb24gZXhpc3RzLgorCQkJCQkJICovCisJCQkJCQlFeGVjUHJlcGFyZUpz b25JdGVtQ29lcmNpb24oamJ2LCBqc2VzdGF0ZSwgdGhyb3dfZXJyb3IsCisJCQkJCQkJCQkJCQkJ Jmp1bXBfZXZhbF9jb2VyY2lvbiwKKwkJCQkJCQkJCQkJCQlvcC0+cmVzdmFsdWUsIG9wLT5yZXNu dWxsKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQlkZWZhdWx0OgorCQkJ ZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBleHByZXNzaW9uIG9wICVkIiwgamV4 cHItPm9wKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoZW1wdHkpCisJeworCQlpZiAo amV4cHItPm9uX2VtcHR5KQorCQl7CisJCQlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBK U09OX0JFSEFWSU9SX0VSUk9SKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVS UkNPREVfTk9fU1FMX0pTT05fSVRFTSksCisJCQkJCQllcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0i KSk7CisJCQllbHNlCisJCQkJcG9zdF9ldmFsLT5lbXB0eS52YWx1ZSA9IEJvb2xHZXREYXR1bSh0 cnVlKTsKKworCQkJQXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2VtcHR5ID49IDApOworCQkJcmV0dXJu IGpzZXN0YXRlLT5qdW1wX2VtcHR5OworCQl9CisJCWVsc2UgaWYgKGpleHByLT5vbl9lcnJvci0+ YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVy cmNvZGUoRVJSQ09ERV9OT19TUUxfSlNPTl9JVEVNKSwKKwkJCQkJZXJybXNnKCJubyBTUUwvSlNP TiBpdGVtIikpOworCQllbHNlCisJCQlwb3N0X2V2YWwtPmVycm9yLnZhbHVlID0gQm9vbEdldERh dHVtKHRydWUpOworCisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCSpvcC0+cmVzbnVs bCA9IHRydWU7CisKKwkJQXNzZXJ0KGpzZXN0YXRlLT5qdW1wX2Vycm9yID49IDApOworCQlyZXR1 cm4ganNlc3RhdGUtPmp1bXBfZXJyb3I7CisJfQorCisJaWYgKGVycm9yKQorCXsKKwkJQXNzZXJ0 KCF0aHJvd19lcnJvciAmJiBqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKTsKKwkJKm9wLT5yZXN2 YWx1ZSA9IChEYXR1bSkgMDsKKwkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJcG9zdF9ldmFsLT5l cnJvci52YWx1ZSA9IEJvb2xHZXREYXR1bSh0cnVlKTsKKwkJcmV0dXJuIGpzZXN0YXRlLT5qdW1w X2Vycm9yOworCX0KKworCS8qIEVsc2UgcmV0dXJuIHRoZSBjb2VyY2lvbiBzdGVwIGFkZHJlc3Mg b3IgdGhlIGFkZHJlc3MgdG8gc2tpcCB0byBlbmQuICovCisJcmV0dXJuIGp1bXBfZXZhbF9jb2Vy Y2lvbiA+PSAwID8ganVtcF9ldmFsX2NvZXJjaW9uIDoganNlc3RhdGUtPmp1bXBfZW5kOworfQor CisvKgorICogU2VsZWN0cyBhIGNvZXJjaW9uIGZvciBhIGdpdmVuIEpzb25iVmFsdWUgYmFzZWQg b24gaXRzIHR5cGUuCisgKgorICogT24gcmV0dXJuLCAqcmVzdmFsdWUgYW5kICpyZXNudWxsIGFy ZSBzZXQgdG8gdGhlIHZhbHVlIGV4dHJhY3RlZCBmcm9tIHRoZQorICogSnNvbmJWYWx1ZSBhbmQg Kmp1bXBfZXZhbF9pdGVtX2NvZXJjaW9uIGlzIHNldCB0byB0aGUgc3RlcCBhZGRyZXNzIG9mIHRo ZQorICogY29lcmNpb24gZXhwcmVzc2lvbi4KKyAqCisgKiBJZiB0aGUgZm91bmQgZXhwcmVzc2lv biBpcyBhIEpzb25Db2VyY2lvbiBub2RlIHRoYXQgbWVhbnMgdGhlIHBhcnNlcgorICogZGlkbnQn IGZpbmQgYSBjYXN0IHRvIGRvIHRoZSBjb2VyY2lvbiwgc28gdGhyb3cgYW4gZXJyb3IgaWYgdGhl CisgKiBPTiBFUlJPUiBiZWhhdmlvciBzYXlzIHRvIGRvIHNvLgorICovCitzdGF0aWMgdm9pZAor RXhlY1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sIEpzb25FeHByU3Rh dGUgKmpzZXN0YXRlLAorCQkJCQkJCWJvb2wgdGhyb3dfZXJyb3IsCisJCQkJCQkJaW50ICpqdW1w X2V2YWxfaXRlbV9jb2VyY2lvbiwKKwkJCQkJCQlEYXR1bSAqcmVzdmFsdWUsIGJvb2wgKnJlc251 bGwpCit7CisJaW50CQkgICAqZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzID0ganNlc3RhdGUtPmV2 YWxfaXRlbV9jb2VyY2lvbl9qdW1wczsKKwlib29sCSAgICppdGVtX2NvZXJjaW9uX3ZpYV9leHBy ID0ganNlc3RhdGUtPml0ZW1fY29lcmNpb25fdmlhX2V4cHI7CisJYm9vbAkJdmlhX2V4cHI7CisJ aW50CQkJanVtcF90bzsKKwlKc29uYlZhbHVlCWJ1ZjsKKworCWlmIChpdGVtLT50eXBlID09IGpi dkJpbmFyeSAmJiBKc29uQ29udGFpbmVySXNTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhKSkK Kwl7CisJCWJvb2wJaXNfc2NhbGFyIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKKworCQlpc19z Y2FsYXIgPSBKc29uYkV4dHJhY3RTY2FsYXIoaXRlbS0+dmFsLmJpbmFyeS5kYXRhLCAmYnVmKTsK KwkJaXRlbSA9ICZidWY7CisJCUFzc2VydChpc19zY2FsYXIpOworCX0KKworCSpyZXNudWxsID0g ZmFsc2U7CisKKwkvKiBnZXQgY29lcmNpb24gc3RhdGUgcmVmZXJlbmNlIGFuZCBkYXR1bSBvZiB0 aGUgY29ycmVzcG9uZGluZyBTUUwgdHlwZSAqLworCXN3aXRjaCAoaXRlbS0+dHlwZSkKKwl7CisJ CWNhc2UgamJ2TnVsbDoKKwkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFfZXhwcltKc29u SXRlbVR5cGVOdWxsXTsKKwkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNv bkl0ZW1UeXBlTnVsbF07CisJCQkqcmVzdmFsdWUgPSAoRGF0dW0pIDA7CisJCQkqcmVzbnVsbCA9 IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIGpidlN0cmluZzoKKwkJCXZpYV9leHByID0gaXRl bV9jb2VyY2lvbl92aWFfZXhwcltKc29uSXRlbVR5cGVTdHJpbmddOworCQkJanVtcF90byA9IGV2 YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVTdHJpbmddOworCQkJKnJlc3ZhbHVl ID0KKwkJCQlQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKGl0ZW0tPnZh bC5zdHJpbmcudmFsLAorCQkJCQkJCQlpdGVtLT52YWwuc3RyaW5nLmxlbikpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBqYnZOdW1lcmljOgorCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9l eHByW0pzb25JdGVtVHlwZU51bWVyaWNdOworCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lv bl9qdW1wc1tKc29uSXRlbVR5cGVOdW1lcmljXTsKKwkJCSpyZXN2YWx1ZSA9IE51bWVyaWNHZXRE YXR1bShpdGVtLT52YWwubnVtZXJpYyk7CisJCQlicmVhazsKKworCQljYXNlIGpidkJvb2w6CisJ CQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlQm9vbGVhbl07 CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBzW0pzb25JdGVtVHlwZUJvb2xl YW5dOworCQkJKnJlc3ZhbHVlID0gQm9vbEdldERhdHVtKGl0ZW0tPnZhbC5ib29sZWFuKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgamJ2RGF0ZXRpbWU6CisJCQkqcmVzdmFsdWUgPSBpdGVtLT52YWwu ZGF0ZXRpbWUudmFsdWU7CisJCQlzd2l0Y2ggKGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCkKKwkJ CXsKKwkJCQljYXNlIERBVEVPSUQ6CisJCQkJCXZpYV9leHByID0gaXRlbV9jb2VyY2lvbl92aWFf ZXhwcltKc29uSXRlbVR5cGVEYXRlXTsKKwkJCQkJanVtcF90byA9IGV2YWxfaXRlbV9jb2VyY2lv bl9qdW1wc1tKc29uSXRlbVR5cGVEYXRlXTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSU1FT0lE OgorCQkJCQl2aWFfZXhwciA9IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGlt ZV07CisJCQkJCWp1bXBfdG8gPSBldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBl VGltZV07CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVElNRVRaT0lEOgorCQkJCQl2aWFfZXhwciA9 IGl0ZW1fY29lcmNpb25fdmlhX2V4cHJbSnNvbkl0ZW1UeXBlVGltZXR6XTsKKwkJCQkJanVtcF90 byA9IGV2YWxfaXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVUaW1ldHpdOworCQkJCQli cmVhazsKKwkJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJj aW9uX3ZpYV9leHByW0pzb25JdGVtVHlwZVRpbWVzdGFtcF07CisJCQkJCWp1bXBfdG8gPSBldmFs X2l0ZW1fY29lcmNpb25fanVtcHNbSnNvbkl0ZW1UeXBlVGltZXN0YW1wXTsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9u X3ZpYV9leHByW0pzb25JdGVtVHlwZVRpbWVzdGFtcHR6XTsKKwkJCQkJanVtcF90byA9IGV2YWxf aXRlbV9jb2VyY2lvbl9qdW1wc1tKc29uSXRlbVR5cGVUaW1lc3RhbXB0el07CisJCQkJCWJyZWFr OworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIGRhdGV0 aW1lIHR5cGUgb2lkICV1IiwKKwkJCQkJCSBpdGVtLT52YWwuZGF0ZXRpbWUudHlwaWQpOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZBcnJheToKKwkJY2FzZSBqYnZPYmplY3Q6CisJCWNh c2UgamJ2QmluYXJ5OgorCQkJdmlhX2V4cHIgPSBpdGVtX2NvZXJjaW9uX3ZpYV9leHByW0pzb25J dGVtVHlwZUNvbXBvc2l0ZV07CisJCQlqdW1wX3RvID0gZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBz W0pzb25JdGVtVHlwZUNvbXBvc2l0ZV07CisJCQkqcmVzdmFsdWUgPSBKc29uYlBHZXREYXR1bShK c29uYlZhbHVlVG9Kc29uYihpdGVtKSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIgdmFsdWUgdHlwZSAlZCIsIGl0ZW0tPnR5cGUpOwor CX0KKworCS8qIElmIHRoZSBleHByZXNzaW9uIGlzIGEgSnNvbkNvZXJjaW9uLCB0aHJvdyBhbiBl cnJvci4gKi8KKwlpZiAoanVtcF90byA+PSAwICYmICF2aWFfZXhwcikKKwl7CisJCWlmICh0aHJv d19lcnJvcikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9TUUxfSlNP Tl9JVEVNX0NBTk5PVF9CRV9DQVNUX1RPX1RBUkdFVF9UWVBFKSwKKwkJCQkJZXJybXNnKCJTUUwv SlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlIikpOworCisJCSpyZXN2YWx1 ZSA9IChEYXR1bSkgMDsKKwkJKnJlc251bGwgPSB0cnVlOworCX0KKworCSpqdW1wX2V2YWxfaXRl bV9jb2VyY2lvbiA9IGp1bXBfdG87Cit9CisKKy8qCisgKiBDb2VyY2UgYSBqc29uYiB2YWx1ZSBw cm9kdWNlZCBieSBFeGVjRXZhbEpzb25FeHByUGF0aCgpIG9yIGFuIE9OIEVSUk9SIC8KKyAqIEVN UFRZIGJlaGF2aW9yIGV4cHJlc3Npb24gdG8gdGhlIHRhcmdldCB0eXBlIGJ5IGVpdGhlciBjYWxs aW5nCisgKiBqc29uX3BvcHVsYXRlX3R5cGUoKSBvciBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSB0 eXBlJ3MgaW5wdXQgZnVuY3Rpb24gaW4KKyAqIHNvbWUgY2FzZXMuCisgKgorICogQW55IHNvZnQg ZXJyb3JzIHRoYXQgb2NjdXIgd2lsbCBiZSBjaGVja2VkIGJ5IEVFT1BfSlNPTkVYUFJfQ09FUkNJ T05fRklOSVNICisgKiB0aGF0IHdpbGwgcnVuIHJpZ2h0IGFmdGVyIHRoaXMuCisgKi8KK3ZvaWQK K0V4ZWNFdmFsSnNvbkNvZXJjaW9uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3As CisJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpCit7CisJSnNvbkNvZXJjaW9uICpjb2VyY2lv biA9IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmNvZXJjaW9uOworCUVycm9yU2F2ZUNvbnRleHQg KmVzY29udGV4dCA9IG9wLT5kLmpzb25leHByX2NvZXJjaW9uLmVzY29udGV4dDsKKwlEYXR1bQkJ cmVzID0gKm9wLT5yZXN2YWx1ZTsKKwlib29sCQlyZXNudWxsID0gKm9wLT5yZXNudWxsOworCUpz b25iCSAgICpqYiA9ICFyZXNudWxsID8gRGF0dW1HZXRKc29uYlAocmVzKSA6IE5VTEw7CisKKwkv KgorCSAqIENhbid0IGdvIHRvIGpzb25fcG9wdWxhdGVfdHlwZSgpIGZvciBzY2FsYXJzIHdoZW4g T01JVCBRVU9URVMgaXMKKwkgKiBzcGVjaWZpZWQsIGJlY2F1c2UgaXQga2VlcHMgdGhlIHF1b3Rl cyBieSBkZWZhdWx0LiAgU28gbGV0J3MgZG8gdGhlCisJICogZGVlZCBvdXJzZWx2ZXMgYnkgY2Fs bGluZyB0aGUgaW5wdXQgZnVuY3Rpb24sIHRoYXQgaXMsIGFmdGVyIHJlbW92aW5nCisJICogdGhl IHF1b3Rlcy4KKwkgKi8KKwlpZiAoamIgJiYgSkJfUk9PVF9JU19TQ0FMQVIoamIpICYmIGNvZXJj aW9uLT5vbWl0X3F1b3RlcykKKwl7CisJCUZtZ3JJbmZvICAgKmlucHV0X2ZpbmZvID0gb3AtPmQu anNvbmV4cHJfY29lcmNpb24uaW5wdXRfZmluZm87CisJCU9pZAkJCXR5cGlvcGFyYW0gPSBvcC0+ ZC5qc29uZXhwcl9jb2VyY2lvbi50eXBpb3BhcmFtOworCQljaGFyCSAgICp2YWxfc3RyaW5nID0g SnNvbmJVbnF1b3RlKGpiKTsKKworCQkodm9pZCkgSW5wdXRGdW5jdGlvbkNhbGxTYWZlKGlucHV0 X2ZpbmZvLCB2YWxfc3RyaW5nLCB0eXBpb3BhcmFtLAorCQkJCQkJCQkJIGNvZXJjaW9uLT50YXJn ZXR0eXBtb2QsCisJCQkJCQkJCQkgKE5vZGUgKikgZXNjb250ZXh0LAorCQkJCQkJCQkJIG9wLT5y ZXN2YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCXZvaWQgKmNhY2hlID0gb3AtPmQuanNvbmV4cHJf Y29lcmNpb24uanNvbl9wb3B1bGF0ZV90eXBlX2NhY2hlOworCisJCSpvcC0+cmVzdmFsdWUgPSBq c29uX3BvcHVsYXRlX3R5cGUocmVzLCBKU09OQk9JRCwKKwkJCQkJCQkJCQkgICBjb2VyY2lvbi0+ dGFyZ2V0dHlwZSwKKwkJCQkJCQkJCQkgICBjb2VyY2lvbi0+dGFyZ2V0dHlwbW9kLAorCQkJCQkJ CQkJCSAgICZjYWNoZSwKKwkJCQkJCQkJCQkgICBlY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVt b3J5LAorCQkJCQkJCQkJCSAgIG9wLT5yZXNudWxsLCAoTm9kZSAqKSBlc2NvbnRleHQpOworCX0K K30KKworLyoKKyAqIENoZWNrcyBpZiB0aGUgY29lcmNpb24gZXZhbHVhdGlvbiBsZWQgdG8gYW4g ZXJyb3IuICBJZiBhbiBlcnJvciBkaWQgb2NjdXIsCisgKiB0aGlzIHNldHMgcG9zdF9ldmFsLT5l cnJvciB0byB0cmlnZ2VyIHRoZSBzdWJzZXF1ZW50IE9OIEVSUk9SIGhhbmRsaW5nCisgKiBzdGVw cy4KKyAqLwordm9pZAorRXhlY0V2YWxKc29uQ29lcmNpb25GaW5pc2goRXhwclN0YXRlICpzdGF0 ZSwgRXhwckV2YWxTdGVwICpvcCkKK3sKKwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5k Lmpzb25leHByLmpzZXN0YXRlOworCisJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQoJmpzZXN0YXRl LT5lc2NvbnRleHQpKQorCXsKKwkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKKwkJKm9wLT5y ZXNudWxsID0gdHJ1ZTsKKwkJanNlc3RhdGUtPnBvc3RfZXZhbC5lcnJvci52YWx1ZSA9IEJvb2xH ZXREYXR1bSh0cnVlKTsKKworCQkvKgorCQkgKiBBbHNvIG1ha2UgRXJyb3JTYXZlQ29udGV4dCBy ZWFkeSBmb3IgdGhlIG5leHQgcm93LiAgU2luY2Ugd2UgbmV2ZXIKKwkJICogc2V0IGRldGFpbHNf d2FudGVkLCB3ZSBkb24ndCBuZWVkIHRvIGFsc28gcmVzZXQgZXJyb3JfZGF0YSwgd2hpY2gKKwkJ ICogd291bGQgYmUgTlVMTCBhbnl3YXkuCisJCSAqLworCQlBc3NlcnQoIWpzZXN0YXRlLT5lc2Nv bnRleHQuZGV0YWlsc193YW50ZWQgJiYKKwkJCSAgIGpzZXN0YXRlLT5lc2NvbnRleHQuZXJyb3Jf ZGF0YSA9PSBOVUxMKTsKKwkJanNlc3RhdGUtPmVzY29udGV4dC5lcnJvcl9vY2N1cnJlZCA9IGZh bHNlOworCX0KK30KIAogLyoKICAqIEV4ZWNFdmFsR3JvdXBpbmdGdW5jCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jCmluZGV4IDA5OTk0NTAzYjEuLjdhNWZmMmZlZGYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2pp dC9sbHZtL2xsdm1qaXRfZXhwci5jCkBAIC0xOTMwLDYgKzE5MzAsMTQ2IEBAIGxsdm1fY29tcGls ZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3Bu byArIDFdKTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBFRU9QX0pTT05FWFBSX1BBVEg6CisJCQkJ eworCQkJCQlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRl OworCQkJCQlMTFZNVmFsdWVSZWYgdl9yZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogQ2FsbCBFeGVj RXZhbEpzb25FeHByUGF0aCgpLiAgSXQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZgorCQkJCQkgKiB0 aGUgc3RlcCB0byBwZXJmb3JtIG5leHQuCisJCQkJCSAqLworCQkJCQl2X3JldCA9IGJ1aWxkX0V2 YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZhbEpzb25FeHByUGF0aCIsCisJCQkJCQkJCQkJCXZfc3Rh dGUsIG9wLCB2X2Vjb250ZXh0KTsKKworCQkJCQkvKgorCQkJCQkgKiBCdWlsZCBhIHN3aXRjaCB0 byBtYXAgdGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggaXMgYQorCQkJCQkgKiBydW50aW1lIHZhbHVl IG9mIHRoZSBzdGVwIGFkZHJlc3MgdG8gcGVyZm9ybSBuZXh0LCB0bworCQkJCQkgKiBlaXRoZXIg anVtcF9lbXB0eSwganVtcF9lcnJvciwgb3IgdGhlIGNvZXJjaW9uCisJCQkJCSAqIGV4cHJlc3Np b24uCisJCQkJCSAqLworCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZW1wdHkgPj0gMCB8fAorCQkJ CQkJanNlc3RhdGUtPmp1bXBfZXJyb3IgPj0gMCB8fAorCQkJCQkJanNlc3RhdGUtPmp1bXBfZXZh bF9yZXN1bHRfY29lcmNpb24gPj0gMCB8fAorCQkJCQkJanNlc3RhdGUtPm51bV9pdGVtX2NvZXJj aW9ucyA+IDApCisJCQkJCXsKKwkJCQkJCWludAkJCWk7CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9q dW1wX2VtcHR5OworCQkJCQkJTExWTVZhbHVlUmVmIHZfanVtcF9lcnJvcjsKKwkJCQkJCUxMVk1W YWx1ZVJlZiB2X2p1bXBfY29lcmNpb247CisJCQkJCQlMTFZNVmFsdWVSZWYgdl9zd2l0Y2g7CisJ CQkJCQlMTFZNQmFzaWNCbG9ja1JlZiAJYl9kb25lLAorCQkJCQkJCQkJCQliX2VtcHR5LAorCQkJ CQkJCQkJCQliX2Vycm9yLAorCQkJCQkJCQkJCQliX3Jlc3VsdF9jb2VyY2lvbiwKKwkJCQkJCQkJ CQkgICAqYl9pdGVtX2NvZXJjaW9ucyA9IE5VTEw7CisKKwkJCQkJCWJfZW1wdHkgPQorCQkJCQkJ CWxfYmJfYmVmb3JlX3Yob3BibG9ja3Nbb3BubyArIDFdLAorCQkJCQkJCQkJCSAgIm9wLiVkLmpz b25leHByX2VtcHR5Iiwgb3Bubyk7CisJCQkJCQliX2Vycm9yID0KKwkJCQkJCQlsX2JiX2JlZm9y ZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCQkgICJvcC4lZC5qc29uZXhwcl9lcnJv ciIsIG9wbm8pOworCQkJCQkJYl9yZXN1bHRfY29lcmNpb24gPQorCQkJCQkJCWxfYmJfYmVmb3Jl X3Yob3BibG9ja3Nbb3BubyArIDFdLAorCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX3Jlc3Vs dF9jb2VyY2lvbiIsIG9wbm8pOworCQkJCQkJaWYgKGpzZXN0YXRlLT5udW1faXRlbV9jb2VyY2lv bnMgPiAwKQorCQkJCQkJeworCQkJCQkJCWJfaXRlbV9jb2VyY2lvbnMgPSBwYWxsb2Moc2l6ZW9m KExMVk1CYXNpY0Jsb2NrUmVmKSAqCisJCQkJCQkJCQkJCQkJICBqc2VzdGF0ZS0+bnVtX2l0ZW1f Y29lcmNpb25zKTsKKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwganNlc3RhdGUtPm51bV9pdGVtX2Nv ZXJjaW9uczsgaSsrKQorCQkJCQkJCXsKKwkJCQkJCQkJYl9pdGVtX2NvZXJjaW9uc1tpXSA9CisJ CQkJCQkJCQlsX2JiX2JlZm9yZV92KG9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJCQkJCSAg Im9wLiVkLmpzb25leHByX2l0ZW1fY29lcmNpb24uJWQiLAorCQkJCQkJCQkJCQkJICBvcG5vLCBp KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQliX2RvbmUgPQorCQkJCQkJCWxfYmJfYmVmb3Jl X3Yob3BibG9ja3Nbb3BubyArIDFdLAorCQkJCQkJCQkJCSAgIm9wLiVkLmpzb25leHByX2RvbmUi LCBvcG5vKTsKKworCQkJCQkJdl9zd2l0Y2ggPSBMTFZNQnVpbGRTd2l0Y2goYiwKKwkJCQkJCQkJ CQkJCSAgIHZfcmV0LAorCQkJCQkJCQkJCQkJICAgYl9kb25lLAorCQkJCQkJCQkJCQkJICAganNl c3RhdGUtPm51bV9pdGVtX2NvZXJjaW9ucyArIDMpOworCQkJCQkJLyogUmV0dXJuZWQganNlc3Rh dGUtPmp1bXBfZW1wdHk/ICovCisJCQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZW1wdHkgPj0gMCkK KwkJCQkJCXsKKwkJCQkJCQl2X2p1bXBfZW1wdHkgPSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0 ZS0+anVtcF9lbXB0eSk7CisJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9lbXB0 eSwgYl9lbXB0eSk7CisJCQkJCQl9CisJCQkJCQkvKiBSZXR1cm5lZCBqc2VzdGF0ZS0+anVtcF9l cnJvcj8gKi8KKwkJCQkJCWlmIChqc2VzdGF0ZS0+anVtcF9lcnJvciA+PSAwKQorCQkJCQkJewor CQkJCQkJCXZfanVtcF9lcnJvciA9IGxfaW50MzJfY29uc3QobGMsIGpzZXN0YXRlLT5qdW1wX2Vy cm9yKTsKKwkJCQkJCQlMTFZNQWRkQ2FzZSh2X3N3aXRjaCwgdl9qdW1wX2Vycm9yLCBiX2Vycm9y KTsKKwkJCQkJCX0KKwkJCQkJCS8qIFJldHVybmVkIGpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0 X2NvZXJjaW9uPyAqLworCQkJCQkJaWYgKGpzZXN0YXRlLT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJj aW9uID49IDApCisJCQkJCQl7CisJCQkJCQkJdl9qdW1wX2NvZXJjaW9uID0gbF9pbnQzMl9jb25z dChsYywganNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb24pOworCQkJCQkJCUxMVk1B ZGRDYXNlKHZfc3dpdGNoLCB2X2p1bXBfY29lcmNpb24sIGJfcmVzdWx0X2NvZXJjaW9uKTsKKwkJ CQkJCX0KKwkJCQkJCS8qIFJldHVybmVkIG9uZSBvZiBqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJj aW9uX2p1bXBzW10/ICovCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwganNlc3RhdGUtPm51bV9pdGVt X2NvZXJjaW9uczsgaSsrKQorCQkJCQkJeworCQkJCQkJCWlmIChqc2VzdGF0ZS0+ZXZhbF9pdGVt X2NvZXJjaW9uX2p1bXBzW2ldID49IDApCisJCQkJCQkJeworCQkJCQkJCQl2X2p1bXBfY29lcmNp b24gPSBsX2ludDMyX2NvbnN0KGxjLCBqc2VzdGF0ZS0+ZXZhbF9pdGVtX2NvZXJjaW9uX2p1bXBz W2ldKTsKKwkJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIHZfanVtcF9jb2VyY2lvbiwgYl9p dGVtX2NvZXJjaW9uc1tpXSk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvKiBPTiBFTVBU WSBjb2RlICovCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9lbXB0eSk7CisJ CQkJCQlpZiAoanNlc3RhdGUtPmp1bXBfZW1wdHkgPj0gMCkKKwkJCQkJCQlMTFZNQnVpbGRCcihi LCBvcGJsb2Nrc1tqc2VzdGF0ZS0+anVtcF9lbXB0eV0pOworCQkJCQkJZWxzZQorCQkJCQkJCUxM Vk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJLyogT04gRVJST1IgY29kZSAqLworCQkJCQkJ TExWTVBvc2l0aW9uQnVpbGRlckF0RW5kKGIsIGJfZXJyb3IpOworCQkJCQkJaWYgKGpzZXN0YXRl LT5qdW1wX2Vycm9yID49IDApCisJCQkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3NbanNlc3Rh dGUtPmp1bXBfZXJyb3JdKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJs ZShiKTsKKwkJCQkJCS8qIHJlc3VsdF9jb2VyY2lvbiBjb2RlICovCisJCQkJCQlMTFZNUG9zaXRp b25CdWlsZGVyQXRFbmQoYiwgYl9yZXN1bHRfY29lcmNpb24pOworCQkJCQkJaWYgKGpzZXN0YXRl LT5qdW1wX2V2YWxfcmVzdWx0X2NvZXJjaW9uID49IDApCisJCQkJCQkJTExWTUJ1aWxkQnIoYiwg b3BibG9ja3NbanNlc3RhdGUtPmp1bXBfZXZhbF9yZXN1bHRfY29lcmNpb25dKTsKKwkJCQkJCWVs c2UKKwkJCQkJCQlMTFZNQnVpbGRVbnJlYWNoYWJsZShiKTsKKwkJCQkJCS8qIGl0ZW0gY29lcmNp b24gY29kZSBibG9ja3MgKi8KKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBqc2VzdGF0ZS0+bnVtX2l0 ZW1fY29lcmNpb25zOyBpKyspCisJCQkJCQl7CisJCQkJCQkJTExWTVBvc2l0aW9uQnVpbGRlckF0 RW5kKGIsIGJfaXRlbV9jb2VyY2lvbnNbaV0pOworCQkJCQkJCWlmIChqc2VzdGF0ZS0+ZXZhbF9p dGVtX2NvZXJjaW9uX2p1bXBzW2ldID49IDApCisJCQkJCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxv Y2tzW2pzZXN0YXRlLT5ldmFsX2l0ZW1fY29lcmNpb25fanVtcHNbaV1dKTsKKwkJCQkJCQllbHNl CisJCQkJCQkJCUxMVk1CdWlsZFVucmVhY2hhYmxlKGIpOworCQkJCQkJfQorCisJCQkJCQlMTFZN UG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9kb25lKTsKKwkJCQkJfQorCisJCQkJCUxMVk1CdWls ZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2Fz ZSBFRU9QX0pTT05FWFBSX0NPRVJDSU9OOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJF eGVjRXZhbEpzb25Db2VyY2lvbiIsCisJCQkJCQkJCQl2X3N0YXRlLCBvcCwgdl9lY29udGV4dCk7 CisKKwkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOwor CisJCQljYXNlIEVFT1BfSlNPTkVYUFJfQ09FUkNJT05fRklOSVNIOgorCQkJCWJ1aWxkX0V2YWxY RnVuYyhiLCBtb2QsICJFeGVjRXZhbEpzb25Db2VyY2lvbkZpbmlzaCIsCisJCQkJCQkJCXZfc3Rh dGUsIG9wKTsKKworCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJ YnJlYWs7CisKIAkJCWNhc2UgRUVPUF9BR0dSRUY6CiAJCQkJewogCQkJCQlMTFZNVmFsdWVSZWYg dl9hZ2dubzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMu YyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwppbmRleCA0N2M5ZGFmNDAy Li5lZGQxZTE2NzliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5 cGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xNzIs NiArMTcyLDkgQEAgdm9pZAkgICAqcmVmZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxY bWxFeHByLAogCUV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yLAogCUV4ZWNFdmFsSnNvbklzUHJlZGlj YXRlLAorCUV4ZWNFdmFsSnNvbkNvZXJjaW9uLAorCUV4ZWNFdmFsSnNvbkNvZXJjaW9uRmluaXNo LAorCUV4ZWNFdmFsSnNvbkV4cHJQYXRoLAogCU1ha2VFeHBhbmRlZE9iamVjdFJlYWRPbmx5SW50 ZXJuYWwsCiAJc2xvdF9nZXRtaXNzaW5nYXR0cnMsCiAJc2xvdF9nZXRzb21lYXR0cnNfaW50LApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9tYWtlZnVuY3MuYwppbmRleCBhMDIzMzJhMWVjLi4wOWEwNWEwMzczIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9t YWtlZnVuY3MuYwpAQCAtODU3LDYgKzg1NywyNCBAQCBtYWtlSnNvblZhbHVlRXhwcihFeHByICpy YXdfZXhwciwgRXhwciAqZm9ybWF0dGVkX2V4cHIsCiAJcmV0dXJuIGp2ZTsKIH0KIAorLyoKKyAq IG1ha2VKc29uQmVoYXZpb3IgLQorICoJICBjcmVhdGVzIGEgSnNvbkJlaGF2aW9yIG5vZGUKKyAq LworSnNvbkJlaGF2aW9yICoKK21ha2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0eXBl LCBOb2RlICpleHByLCBKc29uQ29lcmNpb24gKmNvZXJjaW9uLAorCQkJCSBpbnQgbG9jYXRpb24p Cit7CisJSnNvbkJlaGF2aW9yICpiZWhhdmlvciA9IG1ha2VOb2RlKEpzb25CZWhhdmlvcik7CisK KwliZWhhdmlvci0+YnR5cGUgPSB0eXBlOworCWJlaGF2aW9yLT5leHByID0gZXhwcjsKKwliZWhh dmlvci0+Y29lcmNpb24gPSBjb2VyY2lvbjsKKwliZWhhdmlvci0+bG9jYXRpb24gPSBsb2NhdGlv bjsKKworCXJldHVybiBiZWhhdmlvcjsKK30KKwogLyoKICAqIG1ha2VKc29uS2V5VmFsdWUgLQog ICoJICBjcmVhdGVzIGEgSnNvbktleVZhbHVlIG5vZGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L25vZGVzL25vZGVGdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKaW5kZXgg ZTFhNWJjN2U5NS4uMTY2YmRkZDRlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9k ZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAgLTIzNCw2ICsy MzQsMzMgQEAgZXhwclR5cGUoY29uc3QgTm9kZSAqZXhwcikKIAkJY2FzZSBUX0pzb25Jc1ByZWRp Y2F0ZToKIAkJCXR5cGUgPSBCT09MT0lEOwogCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uRXhwcjoK KwkJCXsKKwkJCQljb25zdCBKc29uRXhwciAqamV4cHIgPSAoY29uc3QgSnNvbkV4cHIgKikgZXhw cjsKKworCQkJCXR5cGUgPSBqZXhwci0+cmV0dXJuaW5nLT50eXBpZDsKKwkJCQlicmVhazsKKwkJ CX0KKwkJY2FzZSBUX0pzb25Db2VyY2lvbjoKKwkJCXsKKwkJCQljb25zdCBKc29uQ29lcmNpb24g KmNvZXJjaW9uID0gKGNvbnN0IEpzb25Db2VyY2lvbiAqKSBleHByOworCisJCQkJdHlwZSA9IGNv ZXJjaW9uLT50YXJnZXR0eXBlOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFRfSnNvbkl0ZW1D b2VyY2lvbjoKKwkJCXR5cGUgPSBleHByVHlwZSgoKEpzb25JdGVtQ29lcmNpb24gKikgZXhwcikt PmNvZXJjaW9uKTsKKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJ CWNvbnN0IEpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSAoY29uc3QgSnNvbkJlaGF2aW9yICopIGV4 cHI7CisKKwkJCQlpZiAoYmVoYXZpb3ItPmNvZXJjaW9uKQorCQkJCQl0eXBlID0gZXhwclR5cGUo KE5vZGUgKikgYmVoYXZpb3ItPmNvZXJjaW9uKTsKKwkJCQllbHNlCisJCQkJCXR5cGUgPSBleHBy VHlwZShiZWhhdmlvci0+ZXhwcik7CisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgVF9OdWxsVGVz dDoKIAkJCXR5cGUgPSBCT09MT0lEOwogCQkJYnJlYWs7CkBAIC00OTEsOCArNTE4LDMyIEBAIGV4 cHJUeXBtb2QoY29uc3QgTm9kZSAqZXhwcikKIAkJCXJldHVybiAoKGNvbnN0IFNRTFZhbHVlRnVu Y3Rpb24gKikgZXhwciktPnR5cG1vZDsKIAkJY2FzZSBUX0pzb25WYWx1ZUV4cHI6CiAJCQlyZXR1 cm4gZXhwclR5cG1vZCgoTm9kZSAqKSAoKGNvbnN0IEpzb25WYWx1ZUV4cHIgKikgZXhwciktPmZv cm1hdHRlZF9leHByKTsKLQkJY2FzZSBUX0pzb25Db25zdHJ1Y3RvckV4cHI6Ci0JCQlyZXR1cm4g KChjb25zdCBKc29uQ29uc3RydWN0b3JFeHByICopIGV4cHIpLT5yZXR1cm5pbmctPnR5cG1vZDsK KwkJY2FzZSBUX0pzb25FeHByOgorCQkJeworCQkJCWNvbnN0IEpzb25FeHByICpqZXhwciA9IChj b25zdCBKc29uRXhwciAqKSBleHByOworCisJCQkJcmV0dXJuIGpleHByLT5yZXR1cm5pbmctPnR5 cG1vZDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJeworCQkJ CWNvbnN0IEpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoY29uc3QgSnNvbkNvZXJjaW9uICopIGV4 cHI7CisKKwkJCQlyZXR1cm4gY29lcmNpb24tPnRhcmdldHR5cG1vZDsKKwkJCX0KKwkJCWJyZWFr OworCQljYXNlIFRfSnNvbkl0ZW1Db2VyY2lvbjoKKwkJCXJldHVybiBleHByVHlwbW9kKCgoSnNv bkl0ZW1Db2VyY2lvbiAqKSBleHByKS0+Y29lcmNpb24pOworCQljYXNlIFRfSnNvbkJlaGF2aW9y OgorCQkJeworCQkJCWNvbnN0IEpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSAoY29uc3QgSnNvbkJl aGF2aW9yICopIGV4cHI7CisKKwkJCQlpZiAoYmVoYXZpb3ItPmNvZXJjaW9uKQorCQkJCQlyZXR1 cm4gZXhwclR5cG1vZCgoTm9kZSAqKSBiZWhhdmlvci0+Y29lcmNpb24pOworCQkJCWVsc2UKKwkJ CQkJcmV0dXJuIGV4cHJUeXBtb2QoYmVoYXZpb3ItPmV4cHIpOworCQkJfQorCQkJYnJlYWs7CiAJ CWNhc2UgVF9Db2VyY2VUb0RvbWFpbjoKIAkJCXJldHVybiAoKGNvbnN0IENvZXJjZVRvRG9tYWlu ICopIGV4cHIpLT5yZXN1bHR0eXBtb2Q7CiAJCWNhc2UgVF9Db2VyY2VUb0RvbWFpblZhbHVlOgpA QCAtOTY5LDYgKzEwMjAsMjcgQEAgZXhwckNvbGxhdGlvbihjb25zdCBOb2RlICpleHByKQogCQkJ LyogSVMgSlNPTidzIHJlc3VsdCBpcyBib29sZWFuIC4uLiAqLwogCQkJY29sbCA9IEludmFsaWRP aWQ7CS8qIC4uLiBzbyBpdCBoYXMgbm8gY29sbGF0aW9uICovCiAJCQlicmVhazsKKwkJY2FzZSBU X0pzb25FeHByOgorCQkJY29sbCA9IGV4cHJDb2xsYXRpb24oKChKc29uRXhwciAqKSBleHByKS0+ cmVzdWx0X2NvZXJjaW9uKTsKKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9uOgorCQkJ Y29sbCA9ICgoY29uc3QgSnNvbkNvZXJjaW9uICopIGV4cHIpLT5jb2xsYXRpb247CisJCQlicmVh azsKKwkJY2FzZSBUX0pzb25JdGVtQ29lcmNpb246CisJCQljb2xsID0gZXhwckNvbGxhdGlvbigo KEpzb25JdGVtQ29lcmNpb24gKikgZXhwciktPmNvZXJjaW9uKTsKKwkJCWJyZWFrOworCQljYXNl IFRfSnNvbkJlaGF2aW9yOgorCQkJeworCQkJCUpzb25CZWhhdmlvciAqYmVoYXZpb3IgPSAoSnNv bkJlaGF2aW9yICopIGV4cHI7CisKKwkJCQlpZiAoYmVoYXZpb3ItPmNvZXJjaW9uKQorCQkJCQlj b2xsID0gZXhwckNvbGxhdGlvbigoTm9kZSAqKSBiZWhhdmlvci0+Y29lcmNpb24pOworCQkJCWVs c2UgaWYgKGJlaGF2aW9yLT5leHByKQorCQkJCQljb2xsID0gZXhwckNvbGxhdGlvbihiZWhhdmlv ci0+ZXhwcik7CisJCQkJZWxzZQorCQkJCQljb2xsID0gSW52YWxpZE9pZDsKKwkJCX0KKwkJCWJy ZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQkvKiBOdWxsVGVzdCdzIHJlc3VsdCBpcyBib29s ZWFuIC4uLiAqLwogCQkJY29sbCA9IEludmFsaWRPaWQ7CS8qIC4uLiBzbyBpdCBoYXMgbm8gY29s bGF0aW9uICovCkBAIC0xMjA1LDYgKzEyNzcsNDIgQEAgZXhwclNldENvbGxhdGlvbihOb2RlICpl eHByLCBPaWQgY29sbGF0aW9uKQogCQljYXNlIFRfSnNvbklzUHJlZGljYXRlOgogCQkJQXNzZXJ0 KCFPaWRJc1ZhbGlkKGNvbGxhdGlvbikpOyAvKiByZXN1bHQgaXMgYWx3YXlzIGJvb2xlYW4gKi8K IAkJCWJyZWFrOworCQljYXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJSnNvbkV4cHIgICAqamV4 cHIgPSAoSnNvbkV4cHIgKikgZXhwcjsKKworCQkJCWlmIChqZXhwci0+cmVzdWx0X2NvZXJjaW9u KQorCQkJCQlleHByU2V0Q29sbGF0aW9uKChOb2RlICopIGpleHByLT5yZXN1bHRfY29lcmNpb24s IGNvbGxhdGlvbik7CisJCQkJZWxzZQorCQkJCQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9u KSk7IC8qIHJlc3VsdCBpcyBhbHdheXMgYQorCQkJCQkJCQkJCQkJCSAqIGpzb25bYl0gdHlwZSAq LworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uOgorCQkJeworCQkJ CUpzb25JdGVtQ29lcmNpb24gKml0ZW1fY29lcmNpb24gPSAoSnNvbkl0ZW1Db2VyY2lvbiAqKSBl eHByOworCisJCQkJaWYgKGl0ZW1fY29lcmNpb24tPmNvZXJjaW9uKQorCQkJCQlleHByU2V0Q29s bGF0aW9uKGl0ZW1fY29lcmNpb24tPmNvZXJjaW9uLCBjb2xsYXRpb24pOworCQkJfQorCQkJYnJl YWs7CisJCWNhc2UgVF9Kc29uQ29lcmNpb246CisJCQl7CisJCQkJSnNvbkNvZXJjaW9uICpjb2Vy Y2lvbiA9IChKc29uQ29lcmNpb24gKikgZXhwcjsKKworCQkJCWNvZXJjaW9uLT5jb2xsYXRpb24g PSBjb2xsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJ CXsKKwkJCQlKc29uQmVoYXZpb3IgKmJlaGF2aW9yID0gKEpzb25CZWhhdmlvciAqKSBleHByOwor CisJCQkJaWYgKGJlaGF2aW9yLT5leHByKQorCQkJCQlleHByU2V0Q29sbGF0aW9uKGJlaGF2aW9y LT5leHByLCBjb2xsYXRpb24pOworCQkJCWlmIChiZWhhdmlvci0+Y29lcmNpb24pCisJCQkJCWV4 cHJTZXRDb2xsYXRpb24oKE5vZGUgKikgYmVoYXZpb3ItPmNvZXJjaW9uLCBjb2xsYXRpb24pOwor CQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgVF9OdWxsVGVzdDoKIAkJCS8qIE51bGxUZXN0J3MgcmVz dWx0IGlzIGJvb2xlYW4gLi4uICovCiAJCQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7 IC8qIC4uLiBzbyBuZXZlciBzZXQgYSBjb2xsYXRpb24gKi8KQEAgLTE1MDgsNiArMTYxNiwxOCBA QCBleHByTG9jYXRpb24oY29uc3QgTm9kZSAqZXhwcikKIAkJY2FzZSBUX0pzb25Jc1ByZWRpY2F0 ZToKIAkJCWxvYyA9ICgoY29uc3QgSnNvbklzUHJlZGljYXRlICopIGV4cHIpLT5sb2NhdGlvbjsK IAkJCWJyZWFrOworCQljYXNlIFRfSnNvbkV4cHI6CisJCQl7CisJCQkJY29uc3QgSnNvbkV4cHIg KmpzZXhwciA9IChjb25zdCBKc29uRXhwciAqKSBleHByOworCisJCQkJLyogY29uc2lkZXIgYm90 aCBmdW5jdGlvbiBuYW1lIGFuZCBsZWZ0bW9zdCBhcmcgKi8KKwkJCQlsb2MgPSBsZWZ0bW9zdExv Yyhqc2V4cHItPmxvY2F0aW9uLAorCQkJCQkJCQkgIGV4cHJMb2NhdGlvbihqc2V4cHItPmZvcm1h dHRlZF9leHByKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJ CWxvYyA9IGV4cHJMb2NhdGlvbigoKEpzb25CZWhhdmlvciAqKSBleHByKS0+ZXhwcik7CisJCQli cmVhazsKIAkJY2FzZSBUX051bGxUZXN0OgogCQkJewogCQkJCWNvbnN0IE51bGxUZXN0ICpuZXhw ciA9IChjb25zdCBOdWxsVGVzdCAqKSBleHByOwpAQCAtMjI2MCw2ICsyMzgwLDQ1IEBAIGV4cHJl c3Npb25fdHJlZV93YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQkJYnJlYWs7CiAJCWNhc2UgVF9K c29uSXNQcmVkaWNhdGU6CiAJCQlyZXR1cm4gV0FMSygoKEpzb25Jc1ByZWRpY2F0ZSAqKSBub2Rl KS0+ZXhwcik7CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAgICpqZXhw ciA9IChKc29uRXhwciAqKSBub2RlOworCisJCQkJaWYgKFdBTEsoamV4cHItPmZvcm1hdHRlZF9l eHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamV4cHItPnJlc3VsdF9jb2Vy Y2lvbikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5pdGVtX2NvZXJj aW9ucykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGpleHByLT5wYXNzaW5nX3Zh bHVlcykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCS8qIHdlIGFzc3VtZSB3YWxrZXIgZG9lc24n dCBjYXJlIGFib3V0IHBhc3NpbmdfbmFtZXMgKi8KKwkJCQlpZiAoV0FMSyhqZXhwci0+b25fZW1w dHkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZXhwci0+b25fZXJyb3IpKQor CQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfSnNvbkNvZXJjaW9u OgorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uOgorCQkJeworCQkJCUpzb25J dGVtQ29lcmNpb24gICAqaXRlbV9jb2VyY2lvbiA9IChKc29uSXRlbUNvZXJjaW9uICopIG5vZGU7 CisKKwkJCQlpZiAoV0FMSyhpdGVtX2NvZXJjaW9uLT5jb2VyY2lvbikpCisJCQkJCXJldHVybiB0 cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJ SnNvbkJlaGF2aW9yICAgKmJlaGF2aW9yID0gKEpzb25CZWhhdmlvciAqKSBub2RlOworCisJCQkJ aWYgKFdBTEsoYmVoYXZpb3ItPmV4cHIpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FM SyhiZWhhdmlvci0+Y29lcmNpb24pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWJyZWFr OwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQlyZXR1cm4gV0FMSygoKE51bGxUZXN0ICopIG5vZGUp LT5hcmcpOwogCQljYXNlIFRfQm9vbGVhblRlc3Q6CkBAIC0zMjYzLDYgKzM0MjIsNDYgQEAgZXhw cmVzc2lvbl90cmVlX211dGF0b3JfaW1wbChOb2RlICpub2RlLAogCiAJCQkJcmV0dXJuIChOb2Rl ICopIG5ld25vZGU7CiAJCQl9CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhw ciAgICpqZXhwciA9IChKc29uRXhwciAqKSBub2RlOworCQkJCUpzb25FeHByICAgKm5ld25vZGU7 CisKKwkJCQlGTEFUQ09QWShuZXdub2RlLCBqZXhwciwgSnNvbkV4cHIpOworCQkJCU1VVEFURShu ZXdub2RlLT5wYXRoX3NwZWMsIGpleHByLT5wYXRoX3NwZWMsIE5vZGUgKik7CisJCQkJTVVUQVRF KG5ld25vZGUtPmZvcm1hdHRlZF9leHByLCBqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIE5vZGUgKik7 CisJCQkJTVVUQVRFKG5ld25vZGUtPnJlc3VsdF9jb2VyY2lvbiwgamV4cHItPnJlc3VsdF9jb2Vy Y2lvbiwgTm9kZSAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+aXRlbV9jb2VyY2lvbnMsIGpleHBy LT5pdGVtX2NvZXJjaW9ucywgTGlzdCAqKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+cGFzc2luZ192 YWx1ZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywgTGlzdCAqKTsKKwkJCQkvKiBhc3N1bWUgbXV0 YXRvciBkb2VzIG5vdCBjYXJlIGFib3V0IHBhc3NpbmdfbmFtZXMgKi8KKwkJCQlNVVRBVEUobmV3 bm9kZS0+b25fZW1wdHksIGpleHByLT5vbl9lbXB0eSwgSnNvbkJlaGF2aW9yICopOworCQkJCU1V VEFURShuZXdub2RlLT5vbl9lcnJvciwgamV4cHItPm9uX2Vycm9yLCBKc29uQmVoYXZpb3IgKik7 CisJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBU X0pzb25Db2VyY2lvbjoKKwkJCXJldHVybiAoTm9kZSAqKSBjb3B5T2JqZWN0KG5vZGUpOworCQlj YXNlIFRfSnNvbkl0ZW1Db2VyY2lvbjoKKwkJCXsKKwkJCQlKc29uSXRlbUNvZXJjaW9uICAgKml0 ZW1fY29lcmNpb24gPSAoSnNvbkl0ZW1Db2VyY2lvbiAqKSBub2RlOworCQkJCUpzb25JdGVtQ29l cmNpb24gICAqbmV3bm9kZTsKKworCQkJCUZMQVRDT1BZKG5ld25vZGUsIGl0ZW1fY29lcmNpb24s IEpzb25JdGVtQ29lcmNpb24pOworCQkJCU1VVEFURShuZXdub2RlLT5jb2VyY2lvbiwgaXRlbV9j b2VyY2lvbi0+Y29lcmNpb24sIE5vZGUgKik7CisJCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7 CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25CZWhhdmlvcjoKKwkJCXsKKwkJCQlKc29u QmVoYXZpb3IgICAqYmVoYXZpb3IgPSAoSnNvbkJlaGF2aW9yICopIG5vZGU7CisJCQkJSnNvbkJl aGF2aW9yICAgKm5ld25vZGU7CisKKwkJCQlGTEFUQ09QWShuZXdub2RlLCBiZWhhdmlvciwgSnNv bkJlaGF2aW9yKTsKKwkJCQlNVVRBVEUobmV3bm9kZS0+ZXhwciwgYmVoYXZpb3ItPmV4cHIsIE5v ZGUgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPmNvZXJjaW9uLCBiZWhhdmlvci0+Y29lcmNpb24s IEpzb25Db2VyY2lvbiAqKTsKKwkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKKwkJCX0KKwkJ CWJyZWFrOwogCQljYXNlIFRfTnVsbFRlc3Q6CiAJCQl7CiAJCQkJTnVsbFRlc3QgICAqbnRlc3Qg PSAoTnVsbFRlc3QgKikgbm9kZTsKQEAgLTM5NTEsNiArNDE1MCwzNiBAQCByYXdfZXhwcmVzc2lv bl90cmVlX3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQlicmVhazsKIAkJY2FzZSBUX0pzb25J c1ByZWRpY2F0ZToKIAkJCXJldHVybiBXQUxLKCgoSnNvbklzUHJlZGljYXRlICopIG5vZGUpLT5l eHByKTsKKwkJY2FzZSBUX0pzb25Bcmd1bWVudDoKKwkJCXJldHVybiBXQUxLKCgoSnNvbkFyZ3Vt ZW50ICopIG5vZGUpLT52YWwpOworCQljYXNlIFRfSnNvbkZ1bmNFeHByOgorCQkJeworCQkJCUpz b25GdW5jRXhwciAqamZlID0gKEpzb25GdW5jRXhwciAqKSBub2RlOworCisJCQkJaWYgKFdBTEso amZlLT5jb250ZXh0X2l0ZW0pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqZmUt PnBhdGhzcGVjKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamZlLT5wYXNzaW5n KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKGpmZS0+b3V0cHV0ICYmIFdBTEsoamZlLT5v dXRwdXQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoamZlLT5vbl9lbXB0eSkKKwkJCQkJ cmV0dXJuIHRydWU7CisJCQkJaWYgKGpmZS0+b25fZXJyb3IpCisJCQkJCXJldHVybiB0cnVlOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uQmVoYXZpb3I6CisJCQl7CisJCQkJSnNvbkJl aGF2aW9yICpqYiA9IChKc29uQmVoYXZpb3IgKikgbm9kZTsKKworCQkJCWlmIChXQUxLKGpiLT5l eHByKSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoamItPmNvZXJjaW9uKSkKKwkJ CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBUX051bGxUZXN0OgogCQkJ cmV0dXJuIFdBTEsoKChOdWxsVGVzdCAqKSBub2RlKS0+YXJnKTsKIAkJY2FzZSBUX0Jvb2xlYW5U ZXN0OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggOGI3NmU5ODUyOS4u NGNkNjA2Y2E3MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC00ODc5 LDcgKzQ4NzksOCBAQCBjb3N0X3F1YWxfZXZhbF93YWxrZXIoTm9kZSAqbm9kZSwgY29zdF9xdWFs X2V2YWxfY29udGV4dCAqY29udGV4dCkKIAkJCSBJc0Eobm9kZSwgU1FMVmFsdWVGdW5jdGlvbikg fHwKIAkJCSBJc0Eobm9kZSwgWG1sRXhwcikgfHwKIAkJCSBJc0Eobm9kZSwgQ29lcmNlVG9Eb21h aW4pIHx8Ci0JCQkgSXNBKG5vZGUsIE5leHRWYWx1ZUV4cHIpKQorCQkJIElzQShub2RlLCBOZXh0 VmFsdWVFeHByKSB8fAorCQkJIElzQShub2RlLCBKc29uRXhwcikpCiAJewogCQkvKiBUcmVhdCBh bGwgdGhlc2UgYXMgaGF2aW5nIGNvc3QgMSAqLwogCQljb250ZXh0LT50b3RhbC5wZXJfdHVwbGUg Kz0gY3B1X29wZXJhdG9yX2Nvc3Q7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5k ZXggOTRlYjU2YTFlNy4uODg0OTg2NGNhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvY2xhdXNlcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVz ZXMuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5j bHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAi dXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCkBAIC00MTcs NiArNDE4LDI0IEBAIGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlvbnNfd2Fsa2VyKE5vZGUgKm5vZGUs IHZvaWQgKmNvbnRleHQpCiAJCS8qIENoZWNrIGFsbCBzdWJub2RlcyAqLwogCX0KIAorCWlmIChJ c0Eobm9kZSwgSnNvbkV4cHIpKQorCXsKKwkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShK c29uRXhwciwgbm9kZSk7CisJCUNvbnN0CSAgICpjbnN0OworCisJCWlmICghSXNBKGpleHByLT5w YXRoX3NwZWMsIENvbnN0KSkKKwkJCXJldHVybiB0cnVlOworCisJCWNuc3QgPSBjYXN0Tm9kZShD b25zdCwgamV4cHItPnBhdGhfc3BlYyk7CisKKwkJQXNzZXJ0KGNuc3QtPmNvbnN0dHlwZSA9PSBK U09OUEFUSE9JRCk7CisJCWlmIChjbnN0LT5jb25zdGlzbnVsbCkKKwkJCXJldHVybiBmYWxzZTsK KworCQlyZXR1cm4ganNwSXNNdXRhYmxlKERhdHVtR2V0SnNvblBhdGhQKGNuc3QtPmNvbnN0dmFs dWUpLAorCQkJCQkJCWpleHByLT5wYXNzaW5nX25hbWVzLCBqZXhwci0+cGFzc2luZ192YWx1ZXMp OworCX0KKwogCWlmIChJc0Eobm9kZSwgU1FMVmFsdWVGdW5jdGlvbikpCiAJewogCQkvKiBhbGwg dmFyaWFudHMgb2YgU1FMVmFsdWVGdW5jdGlvbiBhcmUgc3RhYmxlICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRl eCAzNDYwZmVhNTZiLi4yNzJhY2M4ODU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIv Z3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY1MiwxMCArNjUyLDE5 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29w dAogCQkJCWpzb25fbmFtZV9hbmRfdmFsdWUKIAkJCQlqc29uX2FnZ3JlZ2F0ZV9mdW5jCisJCQkJ anNvbl9hcmd1bWVudAorCQkJCWpzb25fYmVoYXZpb3IKKwkJCQlqc29uX29uX2Vycm9yX2NsYXVz ZV9vcHQKICV0eXBlIDxsaXN0Pglqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3QKIAkJCQlqc29uX3Zh bHVlX2V4cHJfbGlzdAogCQkJCWpzb25fYXJyYXlfYWdncmVnYXRlX29yZGVyX2J5X2NsYXVzZV9v cHQKLSV0eXBlIDxpdmFsPglqc29uX3ByZWRpY2F0ZV90eXBlX2NvbnN0cmFpbnQKKwkJCQlqc29u X2FyZ3VtZW50cworCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29wdAorCQkJCWpzb25fcGFzc2lu Z19jbGF1c2Vfb3B0CisldHlwZSA8aXZhbD4JanNvbl9iZWhhdmlvcl90eXBlCisJCQkJanNvbl9w cmVkaWNhdGVfdHlwZV9jb25zdHJhaW50CisJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJ CWpzb25fd3JhcHBlcl9iZWhhdmlvcgogJXR5cGUgPGJvb2xlYW4+CWpzb25fa2V5X3VuaXF1ZW5l c3NfY29uc3RyYWludF9vcHQKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVz ZV9vcHQKIAkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdApAQCAtNjk2 LDcgKzcwNSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJQ0FDSEUgQ0FMTCBDQUxMRUQg Q0FTQ0FERSBDQVNDQURFRCBDQVNFIENBU1QgQ0FUQUxPR19QIENIQUlOIENIQVJfUAogCUNIQVJB Q1RFUiBDSEFSQUNURVJJU1RJQ1MgQ0hFQ0sgQ0hFQ0tQT0lOVCBDTEFTUyBDTE9TRQogCUNMVVNU RVIgQ09BTEVTQ0UgQ09MTEFURSBDT0xMQVRJT04gQ09MVU1OIENPTFVNTlMgQ09NTUVOVCBDT01N RU5UUyBDT01NSVQKLQlDT01NSVRURUQgQ09NUFJFU1NJT04gQ09OQ1VSUkVOVExZIENPTkZJR1VS QVRJT04gQ09ORkxJQ1QKKwlDT01NSVRURUQgQ09NUFJFU1NJT04gQ09OQ1VSUkVOVExZIENPTkRJ VElPTkFMIENPTkZJR1VSQVRJT04gQ09ORkxJQ1QKIAlDT05ORUNUSU9OIENPTlNUUkFJTlQgQ09O U1RSQUlOVFMgQ09OVEVOVF9QIENPTlRJTlVFX1AgQ09OVkVSU0lPTl9QIENPUFkKIAlDT1NUIENS RUFURSBDUk9TUyBDU1YgQ1VCRSBDVVJSRU5UX1AKIAlDVVJSRU5UX0NBVEFMT0cgQ1VSUkVOVF9E QVRFIENVUlJFTlRfUk9MRSBDVVJSRU5UX1NDSEVNQQpAQCAtNzA3LDggKzcxNiw4IEBAIHN0YXRp YyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlh c2VzLCBOb2RlICpxdWVyeSk7CiAJREVUQUNIIERJQ1RJT05BUlkgRElTQUJMRV9QIERJU0NBUkQg RElTVElOQ1QgRE8gRE9DVU1FTlRfUCBET01BSU5fUAogCURPVUJMRV9QIERST1AKIAotCUVBQ0gg RUxTRSBFTkFCTEVfUCBFTkNPRElORyBFTkNSWVBURUQgRU5EX1AgRU5VTV9QIEVTQ0FQRSBFVkVO VCBFWENFUFQKLQlFWENMVURFIEVYQ0xVRElORyBFWENMVVNJVkUgRVhFQ1VURSBFWElTVFMgRVhQ TEFJTiBFWFBSRVNTSU9OCisJRUFDSCBFTFNFIEVNUFRZX1AgRU5BQkxFX1AgRU5DT0RJTkcgRU5D UllQVEVEIEVORF9QIEVOVU1fUCBFUlJPUl9QIEVTQ0FQRQorCUVWRU5UIEVYQ0VQVCBFWENMVURF IEVYQ0xVRElORyBFWENMVVNJVkUgRVhFQ1VURSBFWElTVFMgRVhQTEFJTiBFWFBSRVNTSU9OCiAJ RVhURU5TSU9OIEVYVEVSTkFMIEVYVFJBQ1QKIAogCUZBTFNFX1AgRkFNSUxZIEZFVENIIEZJTFRF UiBGSU5BTElaRSBGSVJTVF9QIEZMT0FUX1AgRk9MTE9XSU5HIEZPUgpAQCAtNzIzLDEwICs3MzIs MTAgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUs IExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlJTk5FUl9QIElOT1VUIElOUFVUX1AgSU5T RU5TSVRJVkUgSU5TRVJUIElOU1RFQUQgSU5UX1AgSU5URUdFUgogCUlOVEVSU0VDVCBJTlRFUlZB TCBJTlRPIElOVk9LRVIgSVMgSVNOVUxMIElTT0xBVElPTgogCi0JSk9JTiBKU09OIEpTT05fQVJS QVkgSlNPTl9BUlJBWUFHRyBKU09OX09CSkVDVCBKU09OX09CSkVDVEFHRwotCUpTT05fU0NBTEFS IEpTT05fU0VSSUFMSVpFCisJSk9JTiBKU09OIEpTT05fQVJSQVkgSlNPTl9BUlJBWUFHRyBKU09O X0VYSVNUUyBKU09OX09CSkVDVCBKU09OX09CSkVDVEFHRworCUpTT05fUVVFUlkgSlNPTl9TQ0FM QVIgSlNPTl9TRVJJQUxJWkUgSlNPTl9WQUxVRQogCi0JS0VZIEtFWVMKKwlLRUVQIEtFWSBLRVlT CiAKIAlMQUJFTCBMQU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AKIAlMRUFESU5HIExF QUtQUk9PRiBMRUFTVCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExPQUQgTE9DQUwKQEAg LTc0MCw3ICs3NDksNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hh ciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU5PVCBOT1RISU5HIE5P VElGWSBOT1ROVUxMIE5PV0FJVCBOVUxMX1AgTlVMTElGCiAJTlVMTFNfUCBOVU1FUklDCiAKLQlP QkpFQ1RfUCBPRiBPRkYgT0ZGU0VUIE9JRFMgT0xEIE9OIE9OTFkgT1BFUkFUT1IgT1BUSU9OIE9Q VElPTlMgT1IKKwlPQkpFQ1RfUCBPRiBPRkYgT0ZGU0VUIE9JRFMgT0xEIE9NSVQgT04gT05MWSBP UEVSQVRPUiBPUFRJT04gT1BUSU9OUyBPUgogCU9SREVSIE9SRElOQUxJVFkgT1RIRVJTIE9VVF9Q IE9VVEVSX1AKIAlPVkVSIE9WRVJMQVBTIE9WRVJMQVkgT1ZFUlJJRElORyBPV05FRCBPV05FUgog CkBAIC03NDksNyArNzU4LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0 KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlQT1NJVElPTiBQ UkVDRURJTkcgUFJFQ0lTSU9OIFBSRVNFUlZFIFBSRVBBUkUgUFJFUEFSRUQgUFJJTUFSWQogCVBS SU9SIFBSSVZJTEVHRVMgUFJPQ0VEVVJBTCBQUk9DRURVUkUgUFJPQ0VEVVJFUyBQUk9HUkFNIFBV QkxJQ0FUSU9OCiAKLQlRVU9URQorCVFVT1RFIFFVT1RFUwogCiAJUkFOR0UgUkVBRCBSRUFMIFJF QVNTSUdOIFJFQ0hFQ0sgUkVDVVJTSVZFIFJFRl9QIFJFRkVSRU5DRVMgUkVGRVJFTkNJTkcKIAlS RUZSRVNIIFJFSU5ERVggUkVMQVRJVkVfUCBSRUxFQVNFIFJFTkFNRSBSRVBFQVRBQkxFIFJFUExB Q0UgUkVQTElDQQpAQCAtNzYwLDcgKzc2OSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZl Vmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJ U0VRVUVOQ0UgU0VRVUVOQ0VTCiAJU0VSSUFMSVpBQkxFIFNFUlZFUiBTRVNTSU9OIFNFU1NJT05f VVNFUiBTRVQgU0VUUyBTRVRPRiBTSEFSRSBTSE9XCiAJU0lNSUxBUiBTSU1QTEUgU0tJUCBTTUFM TElOVCBTTkFQU0hPVCBTT01FIFNRTF9QIFNUQUJMRSBTVEFOREFMT05FX1AKLQlTVEFSVCBTVEFU RU1FTlQgU1RBVElTVElDUyBTVERJTiBTVERPVVQgU1RPUkFHRSBTVE9SRUQgU1RSSUNUX1AgU1RS SVBfUAorCVNUQVJUIFNUQVRFTUVOVCBTVEFUSVNUSUNTIFNURElOIFNURE9VVCBTVE9SQUdFIFNU T1JFRCBTVFJJQ1RfUCBTVFJJTkdfUCBTVFJJUF9QCiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBT VVBQT1JUIFNZTU1FVFJJQyBTWVNJRCBTWVNURU1fUCBTWVNURU1fVVNFUgogCiAJVEFCTEUgVEFC TEVTIFRBQkxFU0FNUExFIFRBQkxFU1BBQ0UgVEVNUCBURU1QTEFURSBURU1QT1JBUlkgVEVYVF9Q IFRIRU4KQEAgLTc2OCw3ICs3NzcsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdT ZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVRSRUFU IFRSSUdHRVIgVFJJTSBUUlVFX1AKIAlUUlVOQ0FURSBUUlVTVEVEIFRZUEVfUCBUWVBFU19QCiAK LQlVRVNDQVBFIFVOQk9VTkRFRCBVTkNPTU1JVFRFRCBVTkVOQ1JZUFRFRCBVTklPTiBVTklRVUUg VU5LTk9XTgorCVVFU0NBUEUgVU5CT1VOREVEIFVOQ09ORElUSU9OQUwgVU5DT01NSVRURUQgVU5F TkNSWVBURUQgVU5JT04gVU5JUVVFIFVOS05PV04KIAlVTkxJU1RFTiBVTkxPR0dFRCBVTlRJTCBV UERBVEUgVVNFUiBVU0lORwogCiAJVkFDVVVNIFZBTElEIFZBTElEQVRFIFZBTElEQVRPUiBWQUxV RV9QIFZBTFVFUyBWQVJDSEFSIFZBUklBRElDIFZBUllJTkcKQEAgLTE1NzgyLDYgKzE1NzkxLDYy IEBAIGZ1bmNfZXhwcl9jb21tb25fc3ViZXhwcjoKIAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKIAkJ CQkJJCQgPSAoTm9kZSAqKSBuOwogCQkJCX0KKwkJCXwgSlNPTl9RVUVSWSAnKCcKKwkJCQlqc29u X3ZhbHVlX2V4cHIgJywnIGFfZXhwciBqc29uX3Bhc3NpbmdfY2xhdXNlX29wdAorCQkJCWpzb25f cmV0dXJuaW5nX2NsYXVzZV9vcHQKKwkJCQlqc29uX3dyYXBwZXJfYmVoYXZpb3IKKwkJCQlqc29u X3F1b3Rlc19jbGF1c2Vfb3B0CisJCQkJanNvbl9iZWhhdmlvcl9jbGF1c2Vfb3B0CisJCQknKScK KwkJCQl7CisJCQkJCUpzb25GdW5jRXhwciAqbiA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisK KwkJCQkJbi0+b3AgPSBKU09OX1FVRVJZX09QOworCQkJCQluLT5jb250ZXh0X2l0ZW0gPSAoSnNv blZhbHVlRXhwciAqKSAkMzsKKwkJCQkJbi0+cGF0aHNwZWMgPSAkNTsKKwkJCQkJbi0+cGFzc2lu ZyA9ICQ2OworCQkJCQluLT5vdXRwdXQgPSAoSnNvbk91dHB1dCAqKSAkNzsKKwkJCQkJbi0+d3Jh cHBlciA9ICQ4OworCQkJCQluLT5xdW90ZXMgPSAkOTsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNv bkJlaGF2aW9yICopIGxpbml0aWFsKCQxMCk7CisJCQkJCW4tPm9uX2Vycm9yID0gKEpzb25CZWhh dmlvciAqKSBsc2Vjb25kKCQxMCk7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0g KE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IEpTT05fRVhJU1RTICcoJworCQkJCWpzb25fdmFsdWVf ZXhwciAnLCcgYV9leHByIGpzb25fcGFzc2luZ19jbGF1c2Vfb3B0CisJCQkJanNvbl9vbl9lcnJv cl9jbGF1c2Vfb3B0CisJCQknKScKKwkJCQl7CisJCQkJCUpzb25GdW5jRXhwciAqbiA9IG1ha2VO b2RlKEpzb25GdW5jRXhwcik7CisKKwkJCQkJbi0+b3AgPSBKU09OX0VYSVNUU19PUDsKKwkJCQkJ bi0+Y29udGV4dF9pdGVtID0gKEpzb25WYWx1ZUV4cHIgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVj ID0gJDU7CisJCQkJCW4tPnBhc3NpbmcgPSAkNjsKKwkJCQkJbi0+b3V0cHV0ID0gTlVMTDsKKwkJ CQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopICQ3OworCQkJCQluLT5sb2NhdGlvbiA9 IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBKU09OX1ZBTFVFICcoJwor CQkJCWpzb25fdmFsdWVfZXhwciAnLCcgYV9leHByIGpzb25fcGFzc2luZ19jbGF1c2Vfb3B0CisJ CQkJanNvbl9yZXR1cm5pbmdfY2xhdXNlX29wdAorCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29w dAorCQkJJyknCisJCQkJeworCQkJCQlKc29uRnVuY0V4cHIgKm4gPSBtYWtlTm9kZShKc29uRnVu Y0V4cHIpOworCisJCQkJCW4tPm9wID0gSlNPTl9WQUxVRV9PUDsKKwkJCQkJbi0+Y29udGV4dF9p dGVtID0gKEpzb25WYWx1ZUV4cHIgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVjID0gJDU7CisJCQkJ CW4tPnBhc3NpbmcgPSAkNjsKKwkJCQkJbi0+b3V0cHV0ID0gKEpzb25PdXRwdXQgKikgJDc7CisJ CQkJCW4tPm9uX2VtcHR5ID0gKEpzb25CZWhhdmlvciAqKSBsaW5pdGlhbCgkOCk7CisJCQkJCW4t Pm9uX2Vycm9yID0gKEpzb25CZWhhdmlvciAqKSBsc2Vjb25kKCQ4KTsKKwkJCQkJbi0+bG9jYXRp b24gPSBAMTsKKwkJCQkJJCQgPSAoTm9kZSAqKSBuOworCQkJCX0KIAkJCTsKIAogCkBAIC0xNjUw OCw2ICsxNjU3Myw3NyBAQCBvcHRfYXN5bW1ldHJpYzogQVNZTU1FVFJJQwogCQk7CiAKIC8qIFNR TC9KU09OIHN1cHBvcnQgKi8KK2pzb25fcGFzc2luZ19jbGF1c2Vfb3B0OgorCQkJUEFTU0lORyBq c29uX2FyZ3VtZW50cwkJCQkJeyAkJCA9ICQyOyB9CisJCQl8IC8qRU1QVFkqLwkJCQkJCQkJeyAk JCA9IE5JTDsgfQorCQk7CisKK2pzb25fYXJndW1lbnRzOgorCQkJanNvbl9hcmd1bWVudAkJCQkJ CQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwkJCXwganNvbl9hcmd1bWVudHMgJywnIGpzb25f YXJndW1lbnQJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwkJOworCitqc29uX2FyZ3VtZW50 OgorCQkJanNvbl92YWx1ZV9leHByIEFTIENvbExhYmVsCisJCQl7CisJCQkJSnNvbkFyZ3VtZW50 ICpuID0gbWFrZU5vZGUoSnNvbkFyZ3VtZW50KTsKKworCQkJCW4tPnZhbCA9IChKc29uVmFsdWVF eHByICopICQxOworCQkJCW4tPm5hbWUgPSAkMzsKKwkJCQkkJCA9IChOb2RlICopIG47CisJCQl9 CisJCTsKKworLyogQVJSQVkgaXMgYSBub2lzZSB3b3JkICovCitqc29uX3dyYXBwZXJfYmVoYXZp b3I6CisJCQkgIFdJVEhPVVQgV1JBUFBFUgkJCQkJeyAkJCA9IEpTV19OT05FOyB9CisJCQl8IFdJ VEhPVVQgQVJSQVkJV1JBUFBFUgkJCQl7ICQkID0gSlNXX05PTkU7IH0KKwkJCXwgV0lUSCBXUkFQ UEVSCQkJCQkJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8IFdJVEggQVJSQVkgV1JB UFBFUgkJCQl7ICQkID0gSlNXX1VOQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBDT05ESVRJT05B TCBBUlJBWSBXUkFQUEVSCXsgJCQgPSBKU1dfQ09ORElUSU9OQUw7IH0KKwkJCXwgV0lUSCBVTkNP TkRJVElPTkFMIEFSUkFZIFdSQVBQRVIJeyAkJCA9IEpTV19VTkNPTkRJVElPTkFMOyB9CisJCQl8 IFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUgkJCXsgJCQgPSBKU1dfQ09ORElUSU9OQUw7IH0KKwkJ CXwgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIJCXsgJCQgPSBKU1dfVU5DT05ESVRJT05BTDsg fQorCQkJfCAvKiBlbXB0eSAqLwkJCQkJCXsgJCQgPSBKU1dfVU5TUEVDOyB9CisJCTsKKworanNv bl9iZWhhdmlvcjoKKwkJCURFRkFVTFQgYV9leHByCisJCQkJeyAkJCA9IChOb2RlICopIG1ha2VK c29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9ERUZBVUxULCAkMiwgTlVMTCwgQDEpOyB9CisJCQl8 IGpzb25fYmVoYXZpb3JfdHlwZQorCQkJCXsgJCQgPSAoTm9kZSAqKSBtYWtlSnNvbkJlaGF2aW9y KCQxLCBOVUxMLCBOVUxMLCBAMSk7IH0KKwkJOworCitqc29uX2JlaGF2aW9yX3R5cGU6CisJCQlF UlJPUl9QCQl7ICQkID0gSlNPTl9CRUhBVklPUl9FUlJPUjsgfQorCQkJfCBOVUxMX1AJeyAkJCA9 IEpTT05fQkVIQVZJT1JfTlVMTDsgfQorCQkJfCBUUlVFX1AJeyAkJCA9IEpTT05fQkVIQVZJT1Jf VFJVRTsgfQorCQkJfCBGQUxTRV9QCXsgJCQgPSBKU09OX0JFSEFWSU9SX0ZBTFNFOyB9CisJCQl8 IFVOS05PV04JeyAkJCA9IEpTT05fQkVIQVZJT1JfVU5LTk9XTjsgfQorCQkJfCBFTVBUWV9QIEFS UkFZCXsgJCQgPSBKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOyB9CisJCQl8IEVNUFRZX1AgT0JK RUNUX1AJeyAkJCA9IEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOyB9CisJCQkvKiBub24tc3Rh bmRhcmQsIGZvciBPcmFjbGUgY29tcGF0aWJpbGl0eSBvbmx5ICovCisJCQl8IEVNUFRZX1AJeyAk JCA9IEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVk7IH0KKwkJOworCitqc29uX2JlaGF2aW9yX2Ns YXVzZV9vcHQ6CisJCQlqc29uX2JlaGF2aW9yIE9OIEVNUFRZX1AKKwkJCQl7ICQkID0gbGlzdF9t YWtlMigkMSwgTlVMTCk7IH0KKwkJCXwganNvbl9iZWhhdmlvciBPTiBFUlJPUl9QCisJCQkJeyAk JCA9IGxpc3RfbWFrZTIoTlVMTCwgJDEpOyB9CisJCQl8IGpzb25fYmVoYXZpb3IgT04gRU1QVFlf UCBqc29uX2JlaGF2aW9yIE9OIEVSUk9SX1AKKwkJCQl7ICQkID0gbGlzdF9tYWtlMigkMSwgJDQp OyB9CisJCQl8IC8qIEVNUFRZICovCisJCQkJeyAkJCA9IGxpc3RfbWFrZTIoTlVMTCwgTlVMTCk7 IH0KKwkJOworCitqc29uX29uX2Vycm9yX2NsYXVzZV9vcHQ6CisJCQlqc29uX2JlaGF2aW9yIE9O IEVSUk9SX1AKKwkJCQl7ICQkID0gJDE7IH0KKwkJCXwgLyogRU1QVFkgKi8KKwkJCQl7ICQkID0g TlVMTDsgfQorCQk7CisKIGpzb25fdmFsdWVfZXhwcjoKIAkJCWFfZXhwciBqc29uX2Zvcm1hdF9j bGF1c2Vfb3B0CiAJCQl7CkBAIC0xNjU1Miw2ICsxNjY4OCwxNCBAQCBqc29uX2Zvcm1hdF9jbGF1 c2Vfb3B0OgogCQkJCX0KIAkJOwogCitqc29uX3F1b3Rlc19jbGF1c2Vfb3B0OgorCQkJS0VFUCBR VU9URVMgT04gU0NBTEFSIFNUUklOR19QCQl7ICQkID0gSlNfUVVPVEVTX0tFRVA7IH0KKwkJCXwg S0VFUCBRVU9URVMJCQkJCQl7ICQkID0gSlNfUVVPVEVTX0tFRVA7IH0KKwkJCXwgT01JVCBRVU9U RVMgT04gU0NBTEFSIFNUUklOR19QCXsgJCQgPSBKU19RVU9URVNfT01JVDsgfQorCQkJfCBPTUlU IFFVT1RFUwkJCQkJCXsgJCQgPSBKU19RVU9URVNfT01JVDsgfQorCQkJfCAvKiBFTVBUWSAqLwkJ CQkJCXsgJCQgPSBKU19RVU9URVNfVU5TUEVDOyB9CisJCTsKKwoganNvbl9yZXR1cm5pbmdfY2xh dXNlX29wdDoKIAkJCVJFVFVSTklORyBUeXBlbmFtZSBqc29uX2Zvcm1hdF9jbGF1c2Vfb3B0CiAJ CQkJewpAQCAtMTcxNjgsNiArMTczMTIsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IENP TU1JVAogCQkJfCBDT01NSVRURUQKIAkJCXwgQ09NUFJFU1NJT04KKwkJCXwgQ09ORElUSU9OQUwK IAkJCXwgQ09ORklHVVJBVElPTgogCQkJfCBDT05GTElDVAogCQkJfCBDT05ORUNUSU9OCkBAIC0x NzIwNCwxMCArMTczNDksMTIgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBET1VCTEVfUAog CQkJfCBEUk9QCiAJCQl8IEVBQ0gKKwkJCXwgRU1QVFlfUAogCQkJfCBFTkFCTEVfUAogCQkJfCBF TkNPRElORwogCQkJfCBFTkNSWVBURUQKIAkJCXwgRU5VTV9QCisJCQl8IEVSUk9SX1AKIAkJCXwg RVNDQVBFCiAJCQl8IEVWRU5UCiAJCQl8IEVYQ0xVREUKQEAgLTE3MjU3LDYgKzE3NDA0LDcgQEAg dW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBJTlNURUFECiAJCQl8IElOVk9LRVIKIAkJCXwgSVNP TEFUSU9OCisJCQl8IEtFRVAKIAkJCXwgS0VZCiAJCQl8IEtFWVMKIAkJCXwgTEFCRUwKQEAgLTE3 MzAzLDYgKzE3NDUxLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBPRkYKIAkJCXwgT0lE UwogCQkJfCBPTEQKKwkJCXwgT01JVAogCQkJfCBPUEVSQVRPUgogCQkJfCBPUFRJT04KIAkJCXwg T1BUSU9OUwpAQCAtMTczMzMsNiArMTc0ODIsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8 IFBST0dSQU0KIAkJCXwgUFVCTElDQVRJT04KIAkJCXwgUVVPVEUKKwkJCXwgUVVPVEVTCiAJCQl8 IFJBTkdFCiAJCQl8IFJFQUQKIAkJCXwgUkVBU1NJR04KQEAgLTE3MzkyLDYgKzE3NTQyLDcgQEAg dW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBTVE9SQUdFCiAJCQl8IFNUT1JFRAogCQkJfCBTVFJJ Q1RfUAorCQkJfCBTVFJJTkdfUAogCQkJfCBTVFJJUF9QCiAJCQl8IFNVQlNDUklQVElPTgogCQkJ fCBTVVBQT1JUCkBAIC0xNzQxNCw2ICsxNzU2NSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJ CXwgVUVTQ0FQRQogCQkJfCBVTkJPVU5ERUQKIAkJCXwgVU5DT01NSVRURUQKKwkJCXwgVU5DT05E SVRJT05BTAogCQkJfCBVTkVOQ1JZUFRFRAogCQkJfCBVTktOT1dOCiAJCQl8IFVOTElTVEVOCkBA IC0xNzQ3NCwxMCArMTc2MjYsMTMgQEAgY29sX25hbWVfa2V5d29yZDoKIAkJCXwgSlNPTgogCQkJ fCBKU09OX0FSUkFZCiAJCQl8IEpTT05fQVJSQVlBR0cKKwkJCXwgSlNPTl9FWElTVFMKIAkJCXwg SlNPTl9PQkpFQ1QKIAkJCXwgSlNPTl9PQkpFQ1RBR0cKKwkJCXwgSlNPTl9RVUVSWQogCQkJfCBK U09OX1NDQUxBUgogCQkJfCBKU09OX1NFUklBTElaRQorCQkJfCBKU09OX1ZBTFVFCiAJCQl8IExF QVNUCiAJCQl8IE5BVElPTkFMCiAJCQl8IE5DSEFSCkBAIC0xNzcxMCw2ICsxNzg2NSw3IEBAIGJh cmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgQ09NTUlUVEVECiAJCQl8IENPTVBSRVNTSU9OCiAJCQl8 IENPTkNVUlJFTlRMWQorCQkJfCBDT05ESVRJT05BTAogCQkJfCBDT05GSUdVUkFUSU9OCiAJCQl8 IENPTkZMSUNUCiAJCQl8IENPTk5FQ1RJT04KQEAgLTE3NzYyLDExICsxNzkxOCwxMyBAQCBiYXJl X2xhYmVsX2tleXdvcmQ6CiAJCQl8IERST1AKIAkJCXwgRUFDSAogCQkJfCBFTFNFCisJCQl8IEVN UFRZX1AKIAkJCXwgRU5BQkxFX1AKIAkJCXwgRU5DT0RJTkcKIAkJCXwgRU5DUllQVEVECiAJCQl8 IEVORF9QCiAJCQl8IEVOVU1fUAorCQkJfCBFUlJPUl9QCiAJCQl8IEVTQ0FQRQogCQkJfCBFVkVO VAogCQkJfCBFWENMVURFCkBAIC0xNzgzNiwxMCArMTc5OTQsMTQgQEAgYmFyZV9sYWJlbF9rZXl3 b3JkOgogCQkJfCBKU09OCiAJCQl8IEpTT05fQVJSQVkKIAkJCXwgSlNPTl9BUlJBWUFHRworCQkJ fCBKU09OX0VYSVNUUwogCQkJfCBKU09OX09CSkVDVAogCQkJfCBKU09OX09CSkVDVEFHRworCQkJ fCBKU09OX1FVRVJZCiAJCQl8IEpTT05fU0NBTEFSCiAJCQl8IEpTT05fU0VSSUFMSVpFCisJCQl8 IEpTT05fVkFMVUUKKwkJCXwgS0VFUAogCQkJfCBLRVkKIAkJCXwgS0VZUwogCQkJfCBMQUJFTApA QCAtMTc5MDAsNiArMTgwNjIsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IE9GRgogCQkJ fCBPSURTCiAJCQl8IE9MRAorCQkJfCBPTUlUCiAJCQl8IE9OTFkKIAkJCXwgT1BFUkFUT1IKIAkJ CXwgT1BUSU9OCkBAIC0xNzkzNyw2ICsxODEwMCw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJ CXwgUFJPR1JBTQogCQkJfCBQVUJMSUNBVElPTgogCQkJfCBRVU9URQorCQkJfCBRVU9URVMKIAkJ CXwgUkFOR0UKIAkJCXwgUkVBRAogCQkJfCBSRUFMCkBAIC0xODAwNSw2ICsxODE2OSw3IEBAIGJh cmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgU1RPUkFHRQogCQkJfCBTVE9SRUQKIAkJCXwgU1RSSUNU X1AKKwkJCXwgU1RSSU5HX1AKIAkJCXwgU1RSSVBfUAogCQkJfCBTVUJTQ1JJUFRJT04KIAkJCXwg U1VCU1RSSU5HCkBAIC0xODAzOSw2ICsxODIwNCw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJ CXwgVUVTQ0FQRQogCQkJfCBVTkJPVU5ERUQKIAkJCXwgVU5DT01NSVRURUQKKwkJCXwgVU5DT05E SVRJT05BTAogCQkJfCBVTkVOQ1JZUFRFRAogCQkJfCBVTklRVUUKIAkJCXwgVU5LTk9XTgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMKaW5kZXggOTMwMGM3YjlhYi4uNTQ5M2IwNWFlOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfZXhwci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMu aCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpA QCAtOTAsNiArOTEsMjIgQEAgc3RhdGljIE5vZGUgKnRyYW5zZm9ybUpzb25QYXJzZUV4cHIoUGFy c2VTdGF0ZSAqcHN0YXRlLCBKc29uUGFyc2VFeHByICpleHByKTsKIHN0YXRpYyBOb2RlICp0cmFu c2Zvcm1Kc29uU2NhbGFyRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TY2FsYXJFeHByICpl eHByKTsKIHN0YXRpYyBOb2RlICp0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCQkJCQkJSnNvblNlcmlhbGl6ZUV4cHIgKmV4cHIpOworc3RhdGljIE5v ZGUgKnRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhw ciAqcCk7CitzdGF0aWMgSnNvbkV4cHIgKnRyYW5zZm9ybUpzb25FeHByQ29tbW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpj b25zdHJ1Y3ROYW1lKTsKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybUpzb25QYXNzaW5nQXJncyhQYXJz ZVN0YXRlICpwc3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUsCisJCQkJCQkJCQkgSnNv bkZvcm1hdFR5cGUgZm9ybWF0LCBMaXN0ICphcmdzLAorCQkJCQkJCQkJIExpc3QgKipwYXNzaW5n X3ZhbHVlcywgTGlzdCAqKnBhc3NpbmdfbmFtZXMpOworc3RhdGljIE5vZGUgKmNvZXJjZUpzb25G dW5jRXhwck91dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25FeHByICpqc2V4cHIpOworc3Rh dGljIE9pZAlKc29uRnVuY0V4cHJEZWZhdWx0UmV0dXJuVHlwZShKc29uRXhwciAqanNleHByKTsK K3N0YXRpYyBOb2RlICpjb2VyY2VKc29uRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4 cHIsCisJCQkJCQkJY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKTsKK3N0YXRpYyBKc29u Q29lcmNpb24gKm1ha2VKc29uQ29lcmNpb24oY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5n KTsKK3N0YXRpYyBMaXN0ICpJbml0SnNvbkl0ZW1Db2VyY2lvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCisJCQkJCQkJCSAgIE9pZCBjb250ZXh0 SXRlbVR5cGVJZCk7CitzdGF0aWMgSnNvbkJlaGF2aW9yICp0cmFuc2Zvcm1Kc29uQmVoYXZpb3Io UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkJCQkJCSAg IEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvciwKKwkJCQkJCQkJCQkgICBKc29uUmV0 dXJuaW5nICpyZXR1cm5pbmcpOwogc3RhdGljIE5vZGUgKm1ha2Vfcm93X2NvbXBhcmlzb25fb3Ao UGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpvcG5hbWUsCiAJCQkJCQkJCQlMaXN0ICpsYXJncywg TGlzdCAqcmFyZ3MsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqbWFrZV9yb3dfZGlzdGlu Y3Rfb3AoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpvcG5hbWUsCkBAIC0zNTMsNiArMzcwLDEw IEBAIHRyYW5zZm9ybUV4cHJSZWN1cnNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqZXhwcikK IAkJCXJlc3VsdCA9IHRyYW5zZm9ybUpzb25TZXJpYWxpemVFeHByKHBzdGF0ZSwgKEpzb25TZXJp YWxpemVFeHByICopIGV4cHIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX0pzb25GdW5jRXhwcjoK KwkJCXJlc3VsdCA9IHRyYW5zZm9ybUpzb25GdW5jRXhwcihwc3RhdGUsIChKc29uRnVuY0V4cHIg KikgZXhwcik7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJLyogc2hvdWxkIG5vdCByZWFj aCBoZXJlICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLCAo aW50KSBub2RlVGFnKGV4cHIpKTsKQEAgLTMyMjksNyArMzI1MCw3IEBAIG1ha2VKc29uQnl0ZWFU b1RleHRDb252ZXJzaW9uKE5vZGUgKmV4cHIsIEpzb25Gb3JtYXQgKmZvcm1hdCwgaW50IGxvY2F0 aW9uKQogc3RhdGljIE5vZGUgKgogdHJhbnNmb3JtSnNvblZhbHVlRXhwcihQYXJzZVN0YXRlICpw c3RhdGUsIGNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUsCiAJCQkJCSAgIEpzb25WYWx1ZUV4cHIg KnZlLCBKc29uRm9ybWF0VHlwZSBkZWZhdWx0X2Zvcm1hdCwKLQkJCQkJICAgT2lkIHRhcmdldHR5 cGUpCisJCQkJCSAgIE9pZCB0YXJnZXR0eXBlLCBib29sIGlzYXJnKQogewogCU5vZGUJICAgKmV4 cHIgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShwc3RhdGUsIChOb2RlICopIHZlLT5yYXdfZXhwcik7 CiAJTm9kZQkgICAqcmF3ZXhwcjsKQEAgLTMyNjEsNiArMzI4Miw0MSBAQCB0cmFuc2Zvcm1Kc29u VmFsdWVFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFtZSwK IAkJZWxzZQogCQkJZm9ybWF0ID0gdmUtPmZvcm1hdC0+Zm9ybWF0X3R5cGU7CiAJfQorCWVsc2Ug aWYgKGlzYXJnKQorCXsKKwkJLyoKKwkJICogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIFBBU1NJTkcg YXJndW1lbnRzLgorCQkgKgorCQkgKiBQYXNzIHR5cGVzIHN1cHBvcnRlZCBieSBHZXRKc29uUGF0 aFZhcigpIC8KKwkJICogSnNvbkl0ZW1Gcm9tRGF0dW0oKSBkaXJlY3RseSB3aXRob3V0IGNvbnZl cnRpbmcgdG8ganNvbltiXS4KKwkJICovCisJCXN3aXRjaCAoZXhwcnR5cGUpCisJCXsKKwkJCWNh c2UgQk9PTE9JRDoKKwkJCWNhc2UgTlVNRVJJQ09JRDoKKwkJCWNhc2UgSU5UMk9JRDoKKwkJCWNh c2UgSU5UNE9JRDoKKwkJCWNhc2UgSU5UOE9JRDoKKwkJCWNhc2UgRkxPQVQ0T0lEOgorCQkJY2Fz ZSBGTE9BVDhPSUQ6CisJCQljYXNlIFRFWFRPSUQ6CisJCQljYXNlIFZBUkNIQVJPSUQ6CisJCQlj YXNlIERBVEVPSUQ6CisJCQljYXNlIFRJTUVPSUQ6CisJCQljYXNlIFRJTUVUWk9JRDoKKwkJCWNh c2UgVElNRVNUQU1QT0lEOgorCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlyZXR1cm4gZXhw cjsKKworCQkJZGVmYXVsdDoKKwkJCQlpZiAodHlwY2F0ZWdvcnkgPT0gVFlQQ0FURUdPUllfU1RS SU5HKQorCQkJCQlyZXR1cm4gZXhwcjsKKwkJCQkvKiBlbHNlIGNvbnZlcnQgYXJndW1lbnQgdG8g anNvbltiXSB0eXBlICovCisJCQkJYnJlYWs7CisJCX0KKworCQlmb3JtYXQgPSBkZWZhdWx0X2Zv cm1hdDsKKwl9CiAJZWxzZSBpZiAoZXhwcnR5cGUgPT0gSlNPTk9JRCB8fCBleHBydHlwZSA9PSBK U09OQk9JRCkKIAkJZm9ybWF0ID0gSlNfRk9STUFUX0RFRkFVTFQ7IC8qIGRvIG5vdCBmb3JtYXQg anNvbltiXSB0eXBlcyAqLwogCWVsc2UKQEAgLTMyNzIsNyArMzMyOCwxMiBAQCB0cmFuc2Zvcm1K c29uVmFsdWVFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAqY29uc3RydWN0TmFt ZSwKIAkJTm9kZQkgICAqY29lcmNlZDsKIAkJYm9vbAkJb25seV9hbGxvd19jYXN0ID0gT2lkSXNW YWxpZCh0YXJnZXR0eXBlKTsKIAotCQlpZiAoIW9ubHlfYWxsb3dfY2FzdCAmJgorCQkvKgorCQkg KiBQQVNTSU5HIGFyZ3MgYXJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseSBieSBHZXRKc29uUGF0aFZh cigpIC8KKwkJICogSnNvbkl0ZW1Gcm9tRGF0dW0oKS4KKwkJICovCisJCWlmICghaXNhcmcgJiYK KwkJCSFvbmx5X2FsbG93X2Nhc3QgJiYKIAkJCWV4cHJ0eXBlICE9IEJZVEVBT0lEICYmIHR5cGNh dGVnb3J5ICE9IFRZUENBVEVHT1JZX1NUUklORykKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCWVy cmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCkBAIC0zNDI1LDYgKzM0ODYsMTEgQEAg dHJhbnNmb3JtSnNvbk91dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IEpzb25PdXRwdXQg Km91dHB1dCwKIAkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJ CQllcnJtc2coInJldHVybmluZyBTRVRPRiB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkIGluIFNRTC9K U09OIGZ1bmN0aW9ucyIpKTsKIAorCWlmIChnZXRfdHlwdHlwZShyZXQtPnR5cGlkKSA9PSBUWVBU WVBFX1BTRVVETykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coInJldHVybmluZyBwc2V1ZG8tdHlwZXMgaXMg bm90IHN1cHBvcnRlZCBpbiBTUUwvSlNPTiBmdW5jdGlvbnMiKSk7CisKIAlpZiAocmV0LT5mb3Jt YXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9ERUZBVUxUKQogCQkvKiBhc3NpZ24gSlNPTkIg Zm9ybWF0IHdoZW4gcmV0dXJuaW5nIGpzb25iLCBvciBKU09OIGZvcm1hdCBvdGhlcndpc2UgKi8K IAkJcmV0LT5mb3JtYXQtPmZvcm1hdF90eXBlID0KQEAgLTM2MjEsNyArMzY4Nyw3IEBAIHRyYW5z Zm9ybUpzb25PYmplY3RDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25PYmplY3RD b25zdHJ1Y3RvciAqY3RvcikKIAkJCU5vZGUJICAgKnZhbCA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4 cHIocHN0YXRlLCAiSlNPTl9PQkpFQ1QoKSIsCiAJCQkJCQkJCQkJCQkJIGt2LT52YWx1ZSwKIAkJ CQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJIEludmFsaWRPaWQp OworCQkJCQkJCQkJCQkJCSBJbnZhbGlkT2lkLCBmYWxzZSk7CiAKIAkJCWFyZ3MgPSBsYXBwZW5k KGFyZ3MsIGtleSk7CiAJCQlhcmdzID0gbGFwcGVuZChhcmdzLCB2YWwpOwpAQCAtMzgwOCw3ICsz ODc0LDcgQEAgdHJhbnNmb3JtSnNvbk9iamVjdEFnZyhQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25P YmplY3RBZ2cgKmFnZykKIAl2YWwgPSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgIkpT T05fT0JKRUNUQUdHKCkiLAogCQkJCQkJCQkgYWdnLT5hcmctPnZhbHVlLAogCQkJCQkJCQkgSlNf Rk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCSBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJIEludmFsaWRP aWQsIGZhbHNlKTsKIAlhcmdzID0gbGlzdF9tYWtlMihrZXksIHZhbCk7CiAKIAlyZXR1cm5pbmcg PSB0cmFuc2Zvcm1Kc29uQ29uc3RydWN0b3JPdXRwdXQocHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9y LT5vdXRwdXQsCkBAIC0zODY0LDkgKzM5MzAsOCBAQCB0cmFuc2Zvcm1Kc29uQXJyYXlBZ2coUGFy c2VTdGF0ZSAqcHN0YXRlLCBKc29uQXJyYXlBZ2cgKmFnZykKIAlPaWQJCQlhZ2dmbm9pZDsKIAlP aWQJCQlhZ2d0eXBlOwogCi0JYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3RhdGUsICJK U09OX0FSUkFZQUdHKCkiLAotCQkJCQkJCQkgYWdnLT5hcmcsCi0JCQkJCQkJCSBKU19GT1JNQVRf REVGQVVMVCwgSW52YWxpZE9pZCk7CisJYXJnID0gdHJhbnNmb3JtSnNvblZhbHVlRXhwcihwc3Rh dGUsICJKU09OX0FSUkFZQUdHKCkiLCBhZ2ctPmFyZywKKwkJCQkJCQkJIEpTX0ZPUk1BVF9ERUZB VUxULCBJbnZhbGlkT2lkLCBmYWxzZSk7CiAKIAlyZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29uQ29u c3RydWN0b3JPdXRwdXQocHN0YXRlLCBhZ2ctPmNvbnN0cnVjdG9yLT5vdXRwdXQsCiAJCQkJCQkJ CQkJCSAgIGxpc3RfbWFrZTEoYXJnKSk7CkBAIC0zOTEzLDkgKzM5NzgsOCBAQCB0cmFuc2Zvcm1K c29uQXJyYXlDb25zdHJ1Y3RvcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25BcnJheUNvbnN0cnVj dG9yICpjdG9yKQogCQl7CiAJCQlKc29uVmFsdWVFeHByICpqc3ZhbCA9IGNhc3ROb2RlKEpzb25W YWx1ZUV4cHIsIGxmaXJzdChsYykpOwogCQkJTm9kZQkgICAqdmFsID0gdHJhbnNmb3JtSnNvblZh bHVlRXhwcihwc3RhdGUsICJKU09OX0FSUkFZKCkiLAotCQkJCQkJCQkJCQkJCSBqc3ZhbCwKLQkJ CQkJCQkJCQkJCQkgSlNfRk9STUFUX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJIEludmFsaWRPaWQp OworCQkJCQkJCQkJCQkJCSBqc3ZhbCwgSlNfRk9STUFUX0RFRkFVTFQsCisJCQkJCQkJCQkJCQkJ IEludmFsaWRPaWQsIGZhbHNlKTsKIAogCQkJYXJncyA9IGxhcHBlbmQoYXJncywgdmFsKTsKIAkJ fQpAQCAtNDA3NCw3ICs0MTM4LDcgQEAgdHJhbnNmb3JtSnNvblBhcnNlRXhwcihQYXJzZVN0YXRl ICpwc3RhdGUsIEpzb25QYXJzZUV4cHIgKmpzZXhwcikKIAkJICogZnVuY3Rpb24tbGlrZSBDQVNU cy4KIAkJICovCiAJCWFyZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0YXRlLCAiSlNPTigp IiwganNleHByLT5leHByLAotCQkJCQkJCQkJIEpTX0ZPUk1BVF9KU09OLCByZXR1cm5pbmctPnR5 cGlkKTsKKwkJCQkJCQkJCSBKU19GT1JNQVRfSlNPTiwgcmV0dXJuaW5nLT50eXBpZCwgZmFsc2Up OwogCX0KIAogCXJldHVybiBtYWtlSnNvbkNvbnN0cnVjdG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9K U09OX1BBUlNFLCBsaXN0X21ha2UxKGFyZyksIE5VTEwsCkBAIC00MTE5LDcgKzQxODMsNyBAQCB0 cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TZXJpYWxp emVFeHByICpleHByKQogCU5vZGUJICAgKmFyZyA9IHRyYW5zZm9ybUpzb25WYWx1ZUV4cHIocHN0 YXRlLCAiSlNPTl9TRVJJQUxJWkUoKSIsCiAJCQkJCQkJCQkJCSBleHByLT5leHByLAogCQkJCQkJ CQkJCQkgSlNfRk9STUFUX0pTT04sCi0JCQkJCQkJCQkJCSBJbnZhbGlkT2lkKTsKKwkJCQkJCQkJ CQkJIEludmFsaWRPaWQsIGZhbHNlKTsKIAogCWlmIChleHByLT5vdXRwdXQpCiAJewpAQCAtNDE1 MywzICs0MjE3LDUyNiBAQCB0cmFuc2Zvcm1Kc29uU2VyaWFsaXplRXhwcihQYXJzZVN0YXRlICpw c3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpleHByKQogCXJldHVybiBtYWtlSnNvbkNvbnN0cnVj dG9yRXhwcihwc3RhdGUsIEpTQ1RPUl9KU09OX1NFUklBTElaRSwgbGlzdF9tYWtlMShhcmcpLAog CQkJCQkJCQkgICBOVUxMLCByZXR1cm5pbmcsIGZhbHNlLCBmYWxzZSwgZXhwci0+bG9jYXRpb24p OwogfQorCisvKgorICogVHJhbnNmb3JtIEpTT05fVkFMVUUsIEpTT05fUVVFUlksIEpTT05fRVhJ U1RTIGZ1bmN0aW9ucyBpbnRvIGEgSnNvbkV4cHIgbm9kZS4KKyAqLworc3RhdGljIE5vZGUgKgor dHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpm dW5jKQoreworCUpzb25FeHByICAgKmpzZXhwciA9IE5VTEw7CisJY29uc3QgY2hhciAqZnVuY19u YW1lID0gTlVMTDsKKworCXN3aXRjaCAoZnVuYy0+b3ApCisJeworCQljYXNlIEpTT05fRVhJU1RT X09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fRVhJU1RTIjsKKwkJCWJyZWFrOworCQljYXNlIEpT T05fUVVFUllfT1A6CisJCQlmdW5jX25hbWUgPSAiSlNPTl9RVUVSWSI7CisJCQlicmVhazsKKwkJ Y2FzZSBKU09OX1ZBTFVFX09QOgorCQkJZnVuY19uYW1lID0gIkpTT05fVkFMVUUiOworCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBKc29uRnVuY0V4cHIgb3Ai KTsKKwkJCWJyZWFrOworCX0KKworCS8qIE9ubHkgYWxsb3cgRk9STUFUIHNwZWNpZmljYXRpb24g Zm9yIEpTT05fUVVFUlkoKS4gKi8KKwlpZiAoZnVuYy0+b3V0cHV0ICYmIGZ1bmMtPm9wICE9IEpT T05fUVVFUllfT1ApCisJeworCQlKc29uRm9ybWF0ICpmb3JtYXQgPSBmdW5jLT5vdXRwdXQtPnJl dHVybmluZy0+Zm9ybWF0OworCisJCWlmIChmb3JtYXQtPmZvcm1hdF90eXBlICE9IEpTX0ZPUk1B VF9ERUZBVUxUIHx8CisJCQlmb3JtYXQtPmVuY29kaW5nICE9IEpTX0VOQ19ERUZBVUxUKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ CWVycm1zZygiY2Fubm90IHNwZWNpZnkgRk9STUFUIGluIFJFVFVSTklORyBjbGF1c2Ugb2YgJXMo KSIsCisJCQkJCQkgICBmdW5jX25hbWUpLAorCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRl LCBmb3JtYXQtPmxvY2F0aW9uKSk7CisJfQorCisJaWYgKGZ1bmMtPm9wID09IEpTT05fUVVFUllf T1AgJiYKKwkJZnVuYy0+cXVvdGVzICE9IEpTX1FVT1RFU19VTlNQRUMgJiYKKwkJKGZ1bmMtPndy YXBwZXIgPT0gSlNXX0NPTkRJVElPTkFMIHx8CisJCSBmdW5jLT53cmFwcGVyID09IEpTV19VTkNP TkRJVElPTkFMKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQllcnJtc2coIlNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBtdXN0IG5vdCBi ZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZCIpLAorCQkJCXBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGZ1bmMtPmxvY2F0aW9uKSk7CisKKworCWpzZXhwciA9IHRyYW5zZm9y bUpzb25FeHByQ29tbW9uKHBzdGF0ZSwgZnVuYywgZnVuY19uYW1lKTsKKworCXN3aXRjaCAoZnVu Yy0+b3ApCisJeworCQljYXNlIEpTT05fRVhJU1RTX09QOgorCQkJaWYgKCFPaWRJc1ZhbGlkKGpz ZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpCisJCQl7CisJCQkJanNleHByLT5yZXR1cm5pbmctPnR5 cGlkID0gQk9PTE9JRDsKKwkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwbW9kID0gLTE7CisJCQl9 CisKKwkJCWpzZXhwci0+b25fZXJyb3IgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLCBm dW5jLT5vbl9lcnJvciwKKwkJCQkJCQkJCQkJCQkgSlNPTl9CRUhBVklPUl9GQUxTRSwKKwkJCQkJ CQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBKU09OX1FV RVJZX09QOgorCQkJanNleHByLT53cmFwcGVyID0gZnVuYy0+d3JhcHBlcjsKKworCQkJLyoKKwkJ CSAqIEtlZXAgcXVvdGVzIGJ5IGRlZmF1bHQsIG9taXR0aW5nIHRoZW0gb25seSBpZiBPTUlUIFFV T1RFUyBpcworCQkJICogc3BlY2lmaWVkLgorCQkJICovCisJCQlqc2V4cHItPm9taXRfcXVvdGVz ID0gKGZ1bmMtPnF1b3RlcyA9PSBKU19RVU9URVNfT01JVCk7CisKKwkJCWlmICghT2lkSXNWYWxp ZChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpKQorCQkJeworCQkJCUpzb25SZXR1cm5pbmcgKnJl dCA9IGpzZXhwci0+cmV0dXJuaW5nOworCisJCQkJcmV0LT50eXBpZCA9IEpzb25GdW5jRXhwckRl ZmF1bHRSZXR1cm5UeXBlKGpzZXhwcik7CisJCQkJcmV0LT50eXBtb2QgPSAtMTsKKwkJCX0KKwkJ CWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0 ZSwganNleHByKTsKKworCQkJaWYgKGZ1bmMtPm9uX2VtcHR5KQorCQkJCWpzZXhwci0+b25fZW1w dHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLAorCQkJCQkJCQkJCQkJCQkgZnVuYy0+ b25fZW1wdHksCisJCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX05VTEwsCisJCQkJCQkJCQkJ CQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlqc2V4cHItPm9uX2Vycm9yID0gdHJhbnNmb3Jt SnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJyb3IsCisJCQkJCQkJCQkJCQkJIEpTT05f QkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcpOworCQkJYnJl YWs7CisKKwkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+ cmV0dXJuaW5nLT50eXBpZCkpCisJCQl7CisJCQkJLyogTWFrZSBKU09OX1ZBTFVFIHJldHVybiB0 ZXh0IGJ5IGRlZmF1bHQgKi8KKwkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQgPSBURVhUT0lE OworCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QgPSAtMTsKKwkJCX0KKwkJCWpzZXhwci0+ cmVzdWx0X2NvZXJjaW9uID0gY29lcmNlSnNvbkZ1bmNFeHByT3V0cHV0KHBzdGF0ZSwganNleHBy KTsKKworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgZXhwcmVzc2lvbnMgdG8gY29lcmNlIHRoZSBz Y2FsYXIgdmFsdWUgcmV0dXJuZWQKKwkJCSAqIGJ5IEpzb25QYXRoVmFsdWUoKSB0byB0aGUgInJl dHVybmluZyIgdHlwZS4KKwkJCSAqLworCQkJaWYgKGpzZXhwci0+cmVzdWx0X2NvZXJjaW9uKQor CQkJCWpzZXhwci0+aXRlbV9jb2VyY2lvbnMgPQorCQkJCQlJbml0SnNvbkl0ZW1Db2VyY2lvbnMo cHN0YXRlLCBqc2V4cHItPnJldHVybmluZywKKwkJCQkJCQkJCQkgIGV4cHJUeXBlKGpzZXhwci0+ Zm9ybWF0dGVkX2V4cHIpKTsKKworCQkJaWYgKGZ1bmMtPm9uX2VtcHR5KQorCQkJCWpzZXhwci0+ b25fZW1wdHkgPSB0cmFuc2Zvcm1Kc29uQmVoYXZpb3IocHN0YXRlLAorCQkJCQkJCQkJCQkJCQkg ZnVuYy0+b25fZW1wdHksCisJCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX05VTEwsCisJCQkJ CQkJCQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlqc2V4cHItPm9uX2Vycm9yID0gdHJh bnNmb3JtSnNvbkJlaGF2aW9yKHBzdGF0ZSwgZnVuYy0+b25fZXJyb3IsCisJCQkJCQkJCQkJCQkJ IEpTT05fQkVIQVZJT1JfTlVMTCwKKwkJCQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcpOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEpzb25GdW5j RXhwciBvcCIpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChOb2RlICopIGpzZXhwcjsKK30K KworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBKU09OX1ZBTFVFLCBKU09OX1FVRVJZLCBKU09OX0VY SVNUUyB0cmFuc2Zvcm1hdGlvbgorICogaW50byBhIEpzb25FeHByIG5vZGUuCisgKi8KK3N0YXRp YyBKc29uRXhwciAqCit0cmFuc2Zvcm1Kc29uRXhwckNvbW1vbihQYXJzZVN0YXRlICpwc3RhdGUs IEpzb25GdW5jRXhwciAqZnVuYywKKwkJCQkJCWNvbnN0IGNoYXIgKmNvbnN0cnVjdE5hbWUpCit7 CisJSnNvbkV4cHIgICAqanNleHByID0gbWFrZU5vZGUoSnNvbkV4cHIpOworCU5vZGUJICAgKnBh dGhzcGVjOworCisJanNleHByLT5sb2NhdGlvbiA9IGZ1bmMtPmxvY2F0aW9uOworCWpzZXhwci0+ b3AgPSBmdW5jLT5vcDsKKwlqc2V4cHItPmZvcm1hdHRlZF9leHByID0gdHJhbnNmb3JtSnNvblZh bHVlRXhwcihwc3RhdGUsIGNvbnN0cnVjdE5hbWUsCisJCQkJCQkJCQkJCQkJZnVuYy0+Y29udGV4 dF9pdGVtLAorCQkJCQkJCQkJCQkJCUpTX0ZPUk1BVF9KU09OLAorCQkJCQkJCQkJCQkJCUludmFs aWRPaWQsIGZhbHNlKTsKKworCWlmIChleHByVHlwZShqc2V4cHItPmZvcm1hdHRlZF9leHByKSAh PSBKU09OQk9JRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coIiVzKCkgaXMgbm90IHlldCBpbXBsZW1lbnRl ZCBmb3IgdGhlIGpzb24gdHlwZSIsCisJCQkJCSAgIGNvbnN0cnVjdE5hbWUpLAorCQkJCWVycmhp bnQoIlRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYiIpLAorCQkJCXBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihqc2V4cHItPmZvcm1hdHRlZF9leHByKSkpOwor CisJanNleHByLT5mb3JtYXQgPSBmdW5jLT5jb250ZXh0X2l0ZW0tPmZvcm1hdDsKKworCS8qIEJv dGggc2V0IGluIHRoZSBjYWxsZXIuICovCisJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBOVUxM OworCWpzZXhwci0+b21pdF9xdW90ZXMgPSBmYWxzZTsKKworCXBhdGhzcGVjID0gdHJhbnNmb3Jt RXhwclJlY3Vyc2UocHN0YXRlLCBmdW5jLT5wYXRoc3BlYyk7CisKKwlqc2V4cHItPnBhdGhfc3Bl YyA9CisJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIHBhdGhzcGVjLCBleHByVHlwZShw YXRoc3BlYyksCisJCQkJCQkJICBKU09OUEFUSE9JRCwgLTEsCisJCQkJCQkJICBDT0VSQ0lPTl9F WFBMSUNJVCwgQ09FUkNFX0lNUExJQ0lUX0NBU1QsCisJCQkJCQkJICBleHByTG9jYXRpb24ocGF0 aHNwZWMpKTsKKwlpZiAoIWpzZXhwci0+cGF0aF9zcGVjKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAorCQkJCSBlcnJtc2coIkpTT04g cGF0aCBleHByZXNzaW9uIG11c3QgYmUgb2YgdHlwZSAlcywgbm90IG9mIHR5cGUgJXMiLAorCQkJ CQkJImpzb25wYXRoIiwgZm9ybWF0X3R5cGVfYmUoZXhwclR5cGUocGF0aHNwZWMpKSksCisJCQkJ IHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihwYXRoc3BlYykpKSk7CisK KwkvKgorCSAqIFRyYW5zZm9ybSBhbmQgY29lcmNlIHRvIGpzb25bYl0gcGFzc2luZyBhcmd1bWVu dHMsIHdob3NlIGZvcm1hdCBpcworCSAqIGRldGVybWluZWQgYnkgY29udGV4dCBpdGVtIHR5cGUu CisJICovCisJdHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKHBzdGF0ZSwgY29uc3RydWN0TmFtZSwK KwkJCQkJCQkgZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikgPT0gSlNPTkJPSUQgPwor CQkJCQkJCSBKU19GT1JNQVRfSlNPTkIgOiBKU19GT1JNQVRfSlNPTiwKKwkJCQkJCQkgZnVuYy0+ cGFzc2luZywKKwkJCQkJCQkgJmpzZXhwci0+cGFzc2luZ192YWx1ZXMsCisJCQkJCQkJICZqc2V4 cHItPnBhc3NpbmdfbmFtZXMpOworCisJanNleHByLT5yZXR1cm5pbmcgPSB0cmFuc2Zvcm1Kc29u T3V0cHV0KHBzdGF0ZSwgZnVuYy0+b3V0cHV0LCBmYWxzZSk7CisKKwkvKiBKU09OX1FVRVJZIHN1 cHBvcnRzIHNwZWNpZnlpbmcgRk9STUFUIGV4cGxpY2l0bHkuICovCisJaWYgKGZ1bmMtPm9wICE9 IEpTT05fUVVFUllfT1ApCisJeworCQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0LT5mb3JtYXRf dHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxUOworCQlqc2V4cHItPnJldHVybmluZy0+Zm9ybWF0LT5l bmNvZGluZyA9IEpTX0VOQ19ERUZBVUxUOworCX0KKworCXJldHVybiBqc2V4cHI7Cit9CisKKy8q CisgKiBUcmFuc2Zvcm0gYSBKU09OIFBBU1NJTkcgY2xhdXNlLgorICovCitzdGF0aWMgdm9pZAor dHJhbnNmb3JtSnNvblBhc3NpbmdBcmdzKFBhcnNlU3RhdGUgKnBzdGF0ZSwgY29uc3QgY2hhciAq Y29uc3RydWN0TmFtZSwKKwkJCQkJCSBKc29uRm9ybWF0VHlwZSBmb3JtYXQsIExpc3QgKmFyZ3Ms CisJCQkJCQkgTGlzdCAqKnBhc3NpbmdfdmFsdWVzLCBMaXN0ICoqcGFzc2luZ19uYW1lcykKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKworCSpwYXNzaW5nX3ZhbHVlcyA9IE5JTDsKKwkqcGFzc2luZ19u YW1lcyA9IE5JTDsKKworCWZvcmVhY2gobGMsIGFyZ3MpCisJeworCQlKc29uQXJndW1lbnQgKmFy ZyA9IGNhc3ROb2RlKEpzb25Bcmd1bWVudCwgbGZpcnN0KGxjKSk7CisJCU5vZGUJICAgKmV4cHIg PSB0cmFuc2Zvcm1Kc29uVmFsdWVFeHByKHBzdGF0ZSwgY29uc3RydWN0TmFtZSwKKwkJCQkJCQkJ CQkJCSAgYXJnLT52YWwsIGZvcm1hdCwKKwkJCQkJCQkJCQkJCSAgSW52YWxpZE9pZCwgdHJ1ZSk7 CisKKwkJKnBhc3NpbmdfdmFsdWVzID0gbGFwcGVuZCgqcGFzc2luZ192YWx1ZXMsIGV4cHIpOwor CQkqcGFzc2luZ19uYW1lcyA9IGxhcHBlbmQoKnBhc3NpbmdfbmFtZXMsIG1ha2VTdHJpbmcoYXJn LT5uYW1lKSk7CisJfQorfQorCisvKgorICogQ3JlYXRlIGFuIGV4cHJlc3Npb24gdG8gY29lcmNl IHRoZSBvdXRwdXQgb2YgSlNPTl9WQUxVRSgpIC8gSlNPTl9RVUVSWSgpCisgKiB0byB0aGUgb3V0 cHV0IHR5cGUsIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIE5vZGUgKgorY29lcmNlSnNvbkZ1bmNF eHByT3V0cHV0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwcikKK3sKKwlKc29u UmV0dXJuaW5nICpyZXR1cm5pbmcgPSBqc2V4cHItPnJldHVybmluZzsKKwlOb2RlCSAgICpjb250 ZXh0X2l0ZW0gPSBqc2V4cHItPmZvcm1hdHRlZF9leHByOworCWludAkJCWRlZmF1bHRfdHlwbW9k OworCU9pZAkJCWRlZmF1bHRfdHlwaWQ7CisKKwlBc3NlcnQocmV0dXJuaW5nKTsKKworCS8qCisJ ICogVXNlIGEgSnNvbkNvZXJjaW9uIG5vZGUgdG8gaW1wbGVtZW50IGEgbm9uLWRlZmF1bHQgUVVP VEVTIG9yIFdSQVBQRVIKKwkgKiBiZWhhdmlvci4KKwkgKi8KKwlpZiAoanNleHByLT5vbWl0X3F1 b3RlcyB8fCBqc2V4cHItPndyYXBwZXIgIT0gSlNXX1VOU1BFQykKKwl7CisJCUpzb25Db2VyY2lv biAqY29lcmNpb24gPSBtYWtlSnNvbkNvZXJjaW9uKHJldHVybmluZyk7CisKKwkJY29lcmNpb24t Pm9taXRfcXVvdGVzID0ganNleHByLT5vbWl0X3F1b3RlczsKKworCQlyZXR1cm4gKE5vZGUgKikg Y29lcmNpb247CisJfQorCisJZGVmYXVsdF90eXBpZCA9IEpzb25GdW5jRXhwckRlZmF1bHRSZXR1 cm5UeXBlKGpzZXhwcik7CisJZGVmYXVsdF90eXBtb2QgPSAtMTsKKwlpZiAocmV0dXJuaW5nLT50 eXBpZCAhPSBkZWZhdWx0X3R5cGlkIHx8CisJCXJldHVybmluZy0+dHlwbW9kICE9IGRlZmF1bHRf dHlwbW9kKQorCXsKKwkJLyoKKwkJICogV2UgYWJ1c2UgQ2FzZVRlc3RFeHByIGhlcmUgYXMgcGxh Y2Vob2xkZXIgdG8gcGFzcyB0aGUgcmVzdWx0IG9mCisJCSAqIGV2YWx1YXRpbmcgdGhlIEpTT05f VkFMVUUvUVVFUlkganNvbnBhdGggZXhwcmVzc2lvbiBhcyBpbnB1dCB0byB0aGUKKwkJICogY29l cmNpb24gZXhwcmVzc2lvbi4KKwkJICovCisJCUNhc2VUZXN0RXhwciAqcGxhY2Vob2xkZXIgPSBt YWtlTm9kZShDYXNlVGVzdEV4cHIpOworCisJCXBsYWNlaG9sZGVyLT50eXBlSWQgPSBleHByVHlw ZShjb250ZXh0X2l0ZW0pOworCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IGV4cHJUeXBtb2QoY29u dGV4dF9pdGVtKTsKKwkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oY29u dGV4dF9pdGVtKTsKKworCQlBc3NlcnQocGxhY2Vob2xkZXItPnR5cGVJZCA9PSBkZWZhdWx0X3R5 cGlkKTsKKwkJQXNzZXJ0KHBsYWNlaG9sZGVyLT50eXBlTW9kID09IGRlZmF1bHRfdHlwbW9kKTsK KworCQlyZXR1cm4gY29lcmNlSnNvbkV4cHIocHN0YXRlLCAoTm9kZSAqKSBwbGFjZWhvbGRlciwg cmV0dXJuaW5nKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJucyB0aGUgZGVm YXVsdCB0eXBlIGZvciBhIGdpdmVuIEpzb25FeHByIGZvciBhIGdpdmVuIEpzb25Gb3JtYXQuICov CitzdGF0aWMgT2lkCitKc29uRnVuY0V4cHJEZWZhdWx0UmV0dXJuVHlwZShKc29uRXhwciAqanNl eHByKQoreworCUpzb25Gb3JtYXQgKmZvcm1hdCA9IGpzZXhwci0+Zm9ybWF0OworCU5vZGUJICAg KmNvbnRleHRfaXRlbSA9IGpzZXhwci0+Zm9ybWF0dGVkX2V4cHI7CisKKwlBc3NlcnQoZm9ybWF0 KTsKKwlpZiAoZm9ybWF0LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfSlNPTkIpCisJCXJldHVy biBKU09OQk9JRDsKKwllbHNlIGlmIChmb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9E RUZBVUxUICYmCisJCQkgZXhwclR5cGUoY29udGV4dF9pdGVtKSA9PSBKU09OQk9JRCkKKwkJcmV0 dXJuIEpTT05CT0lEOworCisJcmV0dXJuIEpTT05PSUQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIGEg SnNvbkNvZXJjaW9uIG5vZGUgdG8gY29lcmNlIGEganNvbmItdmFsdWVkIGV4cHJlc3Npb24gdG8g dGhlCisgKiB0YXJnZXQgdHlwZSBnaXZlbiBieSAncmV0dXJuaW5nJyB1c2luZyBlaXRoZXIganNv bl9wb3B1bGF0ZV90eXBlKCkgb3IKKyAqIGJ5IHVzaW5nIHRoZSB0YXJnZXQgdHlwZSdzIGlucHV0 IGZ1bmN0aW9uLgorICovCitzdGF0aWMgSnNvbkNvZXJjaW9uICoKK21ha2VKc29uQ29lcmNpb24o Y29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKQoreworCUpzb25Db2VyY2lvbiAqY29lcmNp b24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOworCisJY29lcmNpb24tPnRhcmdldHR5cGUgPSBy ZXR1cm5pbmctPnR5cGlkOworCWNvZXJjaW9uLT50YXJnZXR0eXBtb2QgPSByZXR1cm5pbmctPnR5 cG1vZDsKKworCXJldHVybiBjb2VyY2lvbjsKK30KKworLyoKKyAqIFNldCB1cCBhIEpzb25Db2Vy Y2lvbiBub2RlIHRvOgorICoKKyAqIAktIGNvZXJjZSBleHByZXNzaW9uIHRvIHRoZSBvdXRwdXQg cmV0dXJuaW5nIHR5cGUsIG9yCisgKiAJLSBjb2VyY2UgdXNpbmcganNvbl9wb3B1bGF0ZV90eXBl KCkgaWYgcmV0dXJuaW5nIHR5cGUgcmVxdWlyZXMgaXQsIG9yCisgKiAJLSBjb2VyY2UgdmlhIEkv Ty4KKyAqLworc3RhdGljIE5vZGUgKgorY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRl LCBOb2RlICpleHByLCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCit7CisJTm9kZQkg ICAqY29lcmNlZF9leHByOworCisJY29lcmNlZF9leHByID0gY29lcmNlSnNvbkZ1bmNFeHByKHBz dGF0ZSwgZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7CisJaWYgKGNvZXJjZWRfZXhwcikKKwl7CisJ CWlmIChjb2VyY2VkX2V4cHIgPT0gZXhwcikKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gY29l cmNlZF9leHByOworCX0KKworCXJldHVybiAoTm9kZSAqKSBtYWtlSnNvbkNvZXJjaW9uKHJldHVy bmluZyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIEpzb25Db2VyY2lvbiBub2RlcyBmb3IgY29l cmNpbmcgYSBnaXZlbiBKU09OIGl0ZW0gdmFsdWUgcHJvZHVjZWQKKyAqIGJ5IEpTT05fVkFMVUUg dG8gdGhlIHRhcmdldCAicmV0dXJuaW5nIiB0eXBlOyBhbHNvIHNlZQorICogRXhlY1ByZXBhcmVK c29uSXRlbUNvZXJjaW9uKCkuCisgKi8KK3N0YXRpYyBMaXN0ICoKK0luaXRKc29uSXRlbUNvZXJj aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIGNvbnN0IEpzb25SZXR1cm5pbmcgKnJldHVybmluZywK KwkJCQkJICBPaWQgY29udGV4dEl0ZW1UeXBlSWQpCit7CisJTGlzdAkgICAqaXRlbV9jb2VyY2lv bnMgPSBOSUw7CisJaW50CQkJaTsKKwlPaWQJCQl0eXBlb2lkOworCXN0cnVjdAorCXsKKwkJSnNv bkl0ZW1UeXBlIGl0ZW1fdHlwZTsKKwkJT2lkCQl0eXBlb2lkOworCX0JCWl0ZW1fdHlwZXNbXSA9 CisJeworCQl7SnNvbkl0ZW1UeXBlTnVsbCwgVU5LTk9XTk9JRH0sCisJCXtKc29uSXRlbVR5cGVT dHJpbmcsIFRFWFRPSUR9LAorCQl7SnNvbkl0ZW1UeXBlTnVtZXJpYywgTlVNRVJJQ09JRH0sCisJ CXtKc29uSXRlbVR5cGVCb29sZWFuLCBCT09MT0lEfSwKKwkJe0pzb25JdGVtVHlwZURhdGUsIERB VEVPSUR9LAorCQl7SnNvbkl0ZW1UeXBlVGltZSwgVElNRU9JRH0sCisJCXtKc29uSXRlbVR5cGVU aW1ldHosIFRJTUVUWk9JRH0sCisJCXtKc29uSXRlbVR5cGVUaW1lc3RhbXAsIFRJTUVTVEFNUE9J RH0sCisJCXtKc29uSXRlbVR5cGVUaW1lc3RhbXB0eiwgVElNRVNUQU1QVFpPSUR9LAorCQl7SnNv bkl0ZW1UeXBlQ29tcG9zaXRlLCBjb250ZXh0SXRlbVR5cGVJZH0sCisJCXtKc29uSXRlbVR5cGVJ bnZhbGlkLCBJbnZhbGlkT2lkfQorCX07CisKKwlmb3IgKGkgPSAwOyBPaWRJc1ZhbGlkKHR5cGVv aWQgPSBpdGVtX3R5cGVzW2ldLnR5cGVvaWQpOyBpKyspCisJeworCQlOb2RlCSAgICpleHByOwor CQlKc29uSXRlbUNvZXJjaW9uICppdGVtX2NvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkl0ZW1Db2Vy Y2lvbik7CisKKwkJaWYgKHR5cGVvaWQgPT0gVU5LTk9XTk9JRCkKKwkJeworCQkJZXhwciA9IChO b2RlICopIG1ha2VOdWxsQ29uc3QoVU5LTk9XTk9JRCwgLTEsIEludmFsaWRPaWQpOworCQl9CisJ CWVsc2UKKwkJeworCQkJQ2FzZVRlc3RFeHByICpwbGFjZWhvbGRlciA9IG1ha2VOb2RlKENhc2VU ZXN0RXhwcik7CisKKwkJCS8qCisJCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBw bGFjZWhvbGRlciB0byBwYXNzIHRoZSByZXN1bHQgb2YKKwkJCSAqIEpTT05fVkFMVUUganNvbnBh dGggZXhwcmVzc2lvbiB0byB0aGUgY29lcmNpb24gZnVuY3Rpb24uCisJCQkgKi8KKwkJCXBsYWNl aG9sZGVyLT50eXBlSWQgPSBpdGVtX3R5cGVzW2ldLnR5cGVvaWQ7CisJCQlwbGFjZWhvbGRlci0+ dHlwZU1vZCA9IC0xOworCQkJcGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisK KwkJCWV4cHIgPSAoTm9kZSAqKSBwbGFjZWhvbGRlcjsKKwkJfQorCisJCWl0ZW1fY29lcmNpb24t Pml0ZW1fdHlwZSA9IGl0ZW1fdHlwZXNbaV0uaXRlbV90eXBlOworCQlpdGVtX2NvZXJjaW9uLT5j b2VyY2lvbiA9IGNvZXJjZUpzb25FeHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nKTsKKwkJaXRl bV9jb2VyY2lvbnMgPSBsYXBwZW5kKGl0ZW1fY29lcmNpb25zLCBpdGVtX2NvZXJjaW9uKTsKKwl9 CisKKwlyZXR1cm4gaXRlbV9jb2VyY2lvbnM7Cit9CisKKy8qCisgKiBSZXR1cm5zIGNvbnN0YW50 IHZhbHVlcyB0byBiZSByZXR1cm5lZCB0byB0aGUgdXNlciBmb3IgdmFyaW91cworICogbm9uLUVS Uk9SIE9OIEVSUk9SL0VNUFRZIGJlaGF2aW9ycy4KKyAqCisgKiBOb3RlIHRoYXQgSlNPTl9CRUhB VklPUl9ERUZBVUxUIGV4cHJlc3Npb24gaXMgaGFuZGxlZCBieSB0aGUKKyAqIGNhbGxlciBzZXBh cmF0ZWx5LgorICovCitzdGF0aWMgTm9kZSAqCitHZXRKc29uQmVoYXZpb3JDb25zdEV4cHIoSnNv bkJlaGF2aW9yVHlwZSBidHlwZSwgaW50IGxvY2F0aW9uKQoreworCURhdHVtCXZhbCA9IChEYXR1 bSkgMDsKKwlPaWQJCXR5cGlkID0gSlNPTkJPSUQ7CisJaW50CQlsZW4gPSAtMTsKKwlib29sCWlz Ynl2YWwgPSBmYWxzZTsKKwlib29sCWlzbnVsbCA9IGZhbHNlOworCUNvbnN0ICAqY29uOworCisJ c3dpdGNoIChidHlwZSkKKwl7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWV9BUlJBWToKKwkJ CXZhbCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIENTdHJpbmdHZXREYXR1bSgiW10i KSk7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOgorCQkJ dmFsID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgQ1N0cmluZ0dldERhdHVtKCJ7fSIp KTsKKwkJCWJyZWFrOworCisJCWNhc2UgSlNPTl9CRUhBVklPUl9UUlVFOgorCQkJdmFsID0gQm9v bEdldERhdHVtKHRydWUpOworCQkJdHlwaWQgPSBCT09MT0lEOworCQkJbGVuID0gc2l6ZW9mKGJv b2wpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVIQVZJ T1JfRkFMU0U6CisJCQl2YWwgPSBCb29sR2V0RGF0dW0oZmFsc2UpOworCQkJdHlwaWQgPSBCT09M T0lEOworCQkJbGVuID0gc2l6ZW9mKGJvb2wpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVh azsKKworCQljYXNlIEpTT05fQkVIQVZJT1JfTlVMTDoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX1VO S05PV046CisJCWNhc2UgSlNPTl9CRUhBVklPUl9FTVBUWToKKwkJCXZhbCA9IChEYXR1bSkgMDsK KwkJCWlzbnVsbCA9IHRydWU7CisJCQl0eXBpZCA9IElOVDRPSUQ7CisJCQlsZW4gPSBzaXplb2Yo aW50MzIpOworCQkJaXNieXZhbCA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIEpTT05fQkVI QVZJT1JfREVGQVVMVDoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VSUk9SOgorCQkJLyogQWx3YXlz IGhhbmRsZWQgaW4gdGhlIGNhbGxlci4gKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsK KworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhh dmlvciAlZCIsIGJ0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCWNvbiA9IG1ha2VDb25zdCh0eXBp ZCwgLTEsIEludmFsaWRPaWQsIGxlbiwgdmFsLCBpc251bGwsIGlzYnl2YWwpOworCWNvbi0+bG9j YXRpb24gPSBsb2NhdGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBjb247Cit9CisKKy8qCisgKiBU cmFuc2Zvcm0gYSBKU09OIEJFSEFWSU9SIGNsYXVzZS4KKyAqLworc3RhdGljIEpzb25CZWhhdmlv ciAqCit0cmFuc2Zvcm1Kc29uQmVoYXZpb3IoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uQmVoYXZp b3IgKmJlaGF2aW9yLAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUgZGVmYXVsdF9iZWhhdmlvciwK KwkJCQkJICBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCit7CisJSnNvbkJlaGF2aW9yVHlwZSBi ZWhhdmlvcl90eXBlID0gZGVmYXVsdF9iZWhhdmlvcjsKKwlOb2RlCSAgICpleHByID0gTlVMTDsK KwlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gTlVMTDsKKwlpbnQJCQlsb2NhdGlvbiA9IC0xOwor CisJaWYgKGJlaGF2aW9yKQorCXsKKwkJYmVoYXZpb3JfdHlwZSA9IGJlaGF2aW9yLT5idHlwZTsK KwkJbG9jYXRpb24gPSBiZWhhdmlvci0+bG9jYXRpb247CisJCWlmIChiZWhhdmlvcl90eXBlID09 IEpTT05fQkVIQVZJT1JfREVGQVVMVCkKKwkJCWV4cHIgPSB0cmFuc2Zvcm1FeHByUmVjdXJzZShw c3RhdGUsIGJlaGF2aW9yLT5leHByKTsKKwl9CisKKwlpZiAoZXhwciA9PSBOVUxMICYmIGJlaGF2 aW9yX3R5cGUgIT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJZXhwciA9IAlHZXRKc29uQmVoYXZp b3JDb25zdEV4cHIoYmVoYXZpb3JfdHlwZSwgbG9jYXRpb24pOworCisJaWYgKGV4cHIpCisJewor CQlOb2RlICAgKmNvZXJjZWRfZXhwciA9IGV4cHI7CisJCWJvb2wJaXNudWxsID0gKElzQShleHBy LCBDb25zdCkgJiYgKChDb25zdCAqKSBleHByKS0+Y29uc3Rpc251bGwpOworCisJCS8qCisJCSAq IENvZXJjZSBOVUxMcyBhbmQgImRlZmF1bHQiICh0aGF0IGlzLCBub3Qgc3BlY2lmaWVkIGJ5IHRo ZSB1c2VyKQorCQkgKiBqc29uYi12YWx1ZWQgZXhwcmVzc2lvbnMgdXNpbmcgYSBKc29uQ29lcmNp b24gbm9kZS4KKwkJICoKKwkJICogRm9yIG90aGVyICh1c2VyLXNwZWNpZmllZCkgbm9uLU5VTEwg dmFsdWVzLCB0cnkgdG8gZmluZCBhIGNhc3QKKwkJICogYW5kIGVycm9yIG91dCBpZiBvbmUgaXMg bm90IGZvdW5kLgorCQkgKi8KKwkJaWYgKGlzbnVsbCB8fAorCQkJKGV4cHJUeXBlKGV4cHIpID09 IEpTT05CT0lEICYmCisJCQkgYmVoYXZpb3JfdHlwZSA9PSBkZWZhdWx0X2JlaGF2aW9yKSkKKwkJ CWNvZXJjaW9uID0gbWFrZUpzb25Db2VyY2lvbihyZXR1cm5pbmcpOworCQllbHNlCisJCQljb2Vy Y2VkX2V4cHIgPQorCQkJCWNvZXJjZV90b190YXJnZXRfdHlwZShwc3RhdGUsIGV4cHIsIGV4cHJU eXBlKGV4cHIpLAorCQkJCQkJCQkJICByZXR1cm5pbmctPnR5cGlkLCByZXR1cm5pbmctPnR5cG1v ZCwKKwkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsIENPRVJDRV9FWFBMSUNJVF9DQVNULAor CQkJCQkJCQkJICBleHByTG9jYXRpb24oKE5vZGUgKikgYmVoYXZpb3IpKTsKKworCQlpZiAoY29l cmNlZF9leHByID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNP REVfQ0FOTk9UX0NPRVJDRSksCisJCQkJCWVycm1zZygiY2Fubm90IGNhc3QgYmVoYXZpb3IgZXhw cmVzc2lvbiBvZiB0eXBlICVzIHRvICVzIiwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKGV4cHJU eXBlKGV4cHIpKSwKKwkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKHJldHVybmluZy0+dHlwaWQpKSwK KwkJCQkJCSAgIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkp OworCQllbHNlCisJCQlleHByID0gY29lcmNlZF9leHByOworCX0KKworCXJldHVybiBtYWtlSnNv bkJlaGF2aW9yKGJlaGF2aW9yX3R5cGUsIGV4cHIsIGNvZXJjaW9uLCBsb2NhdGlvbik7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKaW5kZXggMGNkOTA0ZjhkYS4uZWE1YWM2YmFmZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMTk4OSw2ICsxOTg5LDIxIEBAIEZpZ3VyZUNv bG5hbWVJbnRlcm5hbChOb2RlICpub2RlLCBjaGFyICoqbmFtZSkKIAkJCS8qIG1ha2UgSlNPTl9B UlJBWUFHRyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KIAkJCSpuYW1lID0gImpzb25f YXJyYXlhZ2ciOwogCQkJcmV0dXJuIDI7CisJCWNhc2UgVF9Kc29uRnVuY0V4cHI6CisJCQkvKiBt YWtlIFNRTC9KU09OIGZ1bmN0aW9ucyBhY3QgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gKi8KKwkJ CXN3aXRjaCAoKChKc29uRnVuY0V4cHIgKikgbm9kZSktPm9wKQorCQkJeworCQkJCWNhc2UgSlNP Tl9FWElTVFNfT1A6CisJCQkJCSpuYW1lID0gImpzb25fZXhpc3RzIjsKKwkJCQkJcmV0dXJuIDI7 CisJCQkJY2FzZSBKU09OX1FVRVJZX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3F1ZXJ5IjsKKwkJ CQkJcmV0dXJuIDI7CisJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJCQkqbmFtZSA9ICJqc29u X3ZhbHVlIjsKKwkJCQkJcmV0dXJuIDI7CisJCQl9CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJ CWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5n LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDgzZTFmMTI2NWMu LjQxYmIwZTA1NDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5n LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNDQyNiw2ICs0 NDI2LDUwIEBAIHBhcnNlX2RhdGV0aW1lKHRleHQgKmRhdGVfdHh0LCB0ZXh0ICpmbXQsIE9pZCBj b2xsaWQsIGJvb2wgc3RyaWN0LAogCX0KIH0KIAorLyoKKyAqIFBhcnNlcyB0aGUgZGF0ZXRpbWUg Zm9ybWF0IHN0cmluZyBpbiAnZm10X3N0cicgYW5kIHJldHVybnMgdHJ1ZSBpZiBpdAorICogY29u dGFpbnMgYSB0aW1lem9uZSBzcGVjaWZpZXIsIGZhbHNlIGlmIG5vdC4KKyAqLworYm9vbAorZGF0 ZXRpbWVfZm9ybWF0X2hhc190eihjb25zdCBjaGFyICpmbXRfc3RyKQoreworCWJvb2wJCWluY2Fj aGU7CisJaW50CQkJZm10X2xlbiA9IHN0cmxlbihmbXRfc3RyKTsKKwlpbnQJCQlyZXN1bHQ7CisJ Rm9ybWF0Tm9kZSAqZm9ybWF0OworCisJaWYgKGZtdF9sZW4gPiBEQ0hfQ0FDSEVfU0laRSkKKwl7 CisJCS8qCisJCSAqIEFsbG9jYXRlIG5ldyBtZW1vcnkgaWYgZm9ybWF0IHBpY3R1cmUgaXMgYmln Z2VyIHRoYW4gc3RhdGljIGNhY2hlCisJCSAqIGFuZCBkbyBub3QgdXNlIGNhY2hlIChjYWxsIHBh cnNlciBhbHdheXMpCisJCSAqLworCQlpbmNhY2hlID0gZmFsc2U7CisKKwkJZm9ybWF0ID0gKEZv cm1hdE5vZGUgKikgcGFsbG9jKChmbXRfbGVuICsgMSkgKiBzaXplb2YoRm9ybWF0Tm9kZSkpOwor CisJCXBhcnNlX2Zvcm1hdChmb3JtYXQsIGZtdF9zdHIsIERDSF9rZXl3b3JkcywKKwkJCQkJIERD SF9zdWZmLCBEQ0hfaW5kZXgsIERDSF9GTEFHLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkJLyoK KwkJICogVXNlIGNhY2hlIGJ1ZmZlcnMKKwkJICovCisJCURDSENhY2hlRW50cnkgKmVudCA9IERD SF9jYWNoZV9mZXRjaChmbXRfc3RyLCBmYWxzZSk7CisKKwkJaW5jYWNoZSA9IHRydWU7CisJCWZv cm1hdCA9IGVudC0+Zm9ybWF0OworCX0KKworCXJlc3VsdCA9IERDSF9kYXRldGltZV90eXBlKGZv cm1hdCk7CisKKwlpZiAoIWluY2FjaGUpCisJCXBmcmVlKGZvcm1hdCk7CisKKwlyZXR1cm4gcmVz dWx0ICYgRENIX1pPTkVEOworfQorCiAvKgogICogZG9fdG9fdGltZXN0YW1wOiBzaGFyZWQgY29k ZSBmb3IgdG9fdGltZXN0YW1wIGFuZCB0b19kYXRlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRl eCBjMTBiM2ZiZWRmLi42ZDc5N2MwOTUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpAQCAtMjE2Mywz ICsyMTYzLDM0IEBAIGpzb25iX2Zsb2F0OChQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJO X0RBVFVNKHJldFZhbHVlKTsKIH0KKworLyoKKyAqIENvbnZlcnQganNvbmIgdG8gYSBDLXN0cmlu ZyBzdHJpcHBpbmcgcXVvdGVzIGZyb20gc2NhbGFyIHN0cmluZ3MuCisgKi8KK2NoYXIgKgorSnNv bmJVbnF1b3RlKEpzb25iICpqYikKK3sKKwlpZiAoSkJfUk9PVF9JU19TQ0FMQVIoamIpKQorCXsK KwkJSnNvbmJWYWx1ZQl2OworCisJCSh2b2lkKSBKc29uYkV4dHJhY3RTY2FsYXIoJmpiLT5yb290 LCAmdik7CisKKwkJaWYgKHYudHlwZSA9PSBqYnZTdHJpbmcpCisJCQlyZXR1cm4gcG5zdHJkdXAo di52YWwuc3RyaW5nLnZhbCwgdi52YWwuc3RyaW5nLmxlbik7CisJCWVsc2UgaWYgKHYudHlwZSA9 PSBqYnZCb29sKQorCQkJcmV0dXJuIHBzdHJkdXAodi52YWwuYm9vbGVhbiA/ICJ0cnVlIiA6ICJm YWxzZSIpOworCQllbHNlIGlmICh2LnR5cGUgPT0gamJ2TnVtZXJpYykKKwkJCXJldHVybiBEYXR1 bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJ CQkgICBQb2ludGVyR2V0RGF0dW0odi52YWwubnVtZXJpYykpKTsKKwkJZWxzZSBpZiAodi50eXBl ID09IGpidk51bGwpCisJCQlyZXR1cm4gcHN0cmR1cCgibnVsbCIpOworCQllbHNlCisJCXsKKwkJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQganNvbmIgdmFsdWUgdHlwZSAlZCIsIHYudHlwZSk7 CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwllbHNlCisJCXJldHVybiBKc29uYlRvQ1N0cmlu ZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVu Y3MuYwppbmRleCA2MjMyODkzMDVhLi41ZWJlZjAyNmM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25m dW5jcy5jCkBAIC0zMzA4LDYgKzMzMDgsNjIgQEAgcHJlcGFyZV9jb2x1bW5fY2FjaGUoQ29sdW1u SU9EYXRhICpjb2x1bW4sCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CiB9CiAKKy8qCisgKiBQb3B1 bGF0ZSBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiBzcGVjaWZpZWQgdHlwZSBmcm9tIGEgZ2l2ZW4g anNvbi9qc29uYgorICogdmFsdWUgJ2pzb25fdmFsJy4gICdjYWNoZScgaXMgY2FsbGVyLXNwZWNp ZmllZCBwb2ludGVyIHRvIHNhdmUgdGhlCisgKiBDb2x1bW5JT0RhdGEgdGhhdCB3aWxsIGJlIGlu aXRpYWxpemVkIG9uIHRoZSAxc3QgY2FsbCBhbmQgdGhlbiByZXVzZWQKKyAqIGR1cmluZyBhbnkg c3Vic2VxdWVudCBjYWxscy4gICdtY3h0JyBnaXZlcyB0aGUgbWVtb3J5IGNvbnRleHQgdG8gYWxs b2NhdGUKKyAqIHRoZSBDb2x1bW5JT0RhdGEgYW5kIGFueSBvdGhlciBzdWJzaWRpYXJ5IG1lbW9y eSBpbi4gICdlc2NvbnRleHQnLAorICogaWYgbm90IE5VTEwsIHRlbGxzIHRoYXQgYW55IGVycm9y cyB0aGF0IG9jY3VyIHNob3VsZCBiZSBoYW5kbGVkIHNvZnRseS4KKyAqLworRGF0dW0KK2pzb25f cG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwKKwkJCQkgICBPaWQg dHlwaWQsIGludDMyIHR5cG1vZCwKKwkJCQkgICB2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRleHQg bWN4dCwKKwkJCQkgICBib29sICppc251bGwsCisJCQkJICAgTm9kZSAqZXNjb250ZXh0KQorewor CUpzVmFsdWUJCWpzdiA9IHswfTsKKwlKc29uYlZhbHVlCWpidjsKKworCWpzdi5pc19qc29uID0g anNvbl90eXBlID09IEpTT05PSUQ7CisKKwlpZiAoKmlzbnVsbCkKKwl7CisJCWlmIChqc3YuaXNf anNvbikKKwkJCWpzdi52YWwuanNvbi5zdHIgPSBOVUxMOworCQllbHNlCisJCQlqc3YudmFsLmpz b25iID0gTlVMTDsKKwl9CisJZWxzZSBpZiAoanN2LmlzX2pzb24pCisJeworCQl0ZXh0CSAgICpq c29uID0gRGF0dW1HZXRUZXh0UFAoanNvbl92YWwpOworCisJCWpzdi52YWwuanNvbi5zdHIgPSBW QVJEQVRBX0FOWShqc29uKTsKKwkJanN2LnZhbC5qc29uLmxlbiA9IFZBUlNJWkVfQU5ZX0VYSERS KGpzb24pOworCQlqc3YudmFsLmpzb24udHlwZSA9IEpTT05fVE9LRU5fSU5WQUxJRDsgLyogbm90 IHVzZWQgaW4KKwkJCQkJCQkJCQkJCSAqIHBvcHVsYXRlX2NvbXBvc2l0ZSgpICovCisJfQorCWVs c2UKKwl7CisJCUpzb25iCSAgICpqc29uYiA9IERhdHVtR2V0SnNvbmJQKGpzb25fdmFsKTsKKwor CQlqc3YudmFsLmpzb25iID0gJmpidjsKKworCQkvKiBmaWxsIGJpbmFyeSBqc29uYiB2YWx1ZSBw b2ludGluZyB0byBqYiAqLworCQlqYnYudHlwZSA9IGpidkJpbmFyeTsKKwkJamJ2LnZhbC5iaW5h cnkuZGF0YSA9ICZqc29uYi0+cm9vdDsKKwkJamJ2LnZhbC5iaW5hcnkubGVuID0gVkFSU0laRShq c29uYikgLSBWQVJIRFJTWjsKKwl9CisKKwlpZiAoKmNhY2hlID09IE5VTEwpCisJCSpjYWNoZSA9 IE1lbW9yeUNvbnRleHRBbGxvY1plcm8obWN4dCwgc2l6ZW9mKENvbHVtbklPRGF0YSkpOworCisJ cmV0dXJuIHBvcHVsYXRlX3JlY29yZF9maWVsZCgqY2FjaGUsIHR5cGlkLCB0eXBtb2QsIE5VTEws IG1jeHQsCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0dW0oTlVMTCksICZqc3YsIGlzbnVsbCwKKwkJ CQkJCQkJIGVzY29udGV4dCk7Cit9CisKIC8qIHJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGEgcmVjb3Jk IGZpZWxkIG9yIGFuIGFycmF5IGVsZW1lbnQgZnJvbSBhIGpzb24vanNvbmIgdmFsdWUgKi8KIHN0 YXRpYyBEYXR1bQogcG9wdWxhdGVfcmVjb3JkX2ZpZWxkKENvbHVtbklPRGF0YSAqY29sLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbnBhdGguYwppbmRleCBkMDJjMDNlMDE0Li43Y2VhNmFkNDVjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbnBhdGguYwpAQCAtNjgsNyArNjgsOSBAQAogI2luY2x1ZGUgImxpYnBxL3Bx Zm9ybWF0LmgiCiAjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mb3JtYXR0aW5nLmgiCiAjaW5jbHVkZSAidXRpbHMv anNvbi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25wYXRoLmgiCiAKQEAgLTExMTAsMyArMTExMiwy NjAgQEAganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0ZW0g KmZyb20sIEpzb25QYXRoSXRlbSAqdG8sCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworLyogU1FML0pT T04gZGF0YXR5cGUgc3RhdHVzOiAqLworZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzCit7CisJ anBkc05vbkRhdGVUaW1lLAkJCS8qIG51bGwsIGJvb2wsIG51bWVyaWMsIHN0cmluZywgYXJyYXks IG9iamVjdCAqLworCWpwZHNVbmtub3duRGF0ZVRpbWUsCQkvKiB1bmtub3duIGRhdGV0aW1lIHR5 cGUgKi8KKwlqcGRzRGF0ZVRpbWVab25lZCwJCQkvKiB0aW1ldHosIHRpbWVzdGFtcHR6ICovCisJ anBkc0RhdGVUaW1lTm9uWm9uZWQsCQkvKiB0aW1lLCB0aW1lc3RhbXAsIGRhdGUgKi8KK307CisK Ky8qIENvbnRleHQgZm9yIGpzcElzTXV0YWJsZVdhbGtlcigpICovCitzdHJ1Y3QgSnNvblBhdGhN dXRhYmxlQ29udGV4dAoreworCUxpc3QJICAgKnZhcm5hbWVzOwkJLyogbGlzdCBvZiB2YXJpYWJs ZSBuYW1lcyAqLworCUxpc3QJICAgKnZhcmV4cHJzOwkJLyogbGlzdCBvZiB2YXJpYWJsZSBleHBy ZXNzaW9ucyAqLworCWVudW0gSnNvblBhdGhEYXRhdHlwZVN0YXR1cyBjdXJyZW50OyAvKiBzdGF0 dXMgb2YgQCBpdGVtICovCisJYm9vbAkJbGF4OwkJCS8qIGpzb25wYXRoIGlzIGxheCBvciBzdHJp Y3QgKi8KKwlib29sCQltdXRhYmxlOwkJLyogcmVzdWx0aW5nIG11dGFiaWxpdHkgc3RhdHVzICov Cit9OworCitzdGF0aWMgZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzIGpzcElzTXV0YWJsZVdh bGtlcihKc29uUGF0aEl0ZW0gKmpwaSwKKwkJCQkJCQkJCQkJCQkgIHN0cnVjdCBKc29uUGF0aE11 dGFibGVDb250ZXh0ICpjeHQpOworCisvKgorICogRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBq c29ucGF0aCBleHByZXNzaW9uIGlzIG11dGFibGUgdG8gYmUgdXNlZCBpbiB0aGUKKyAqIHBsYW5u ZXIgZnVuY3Rpb24gY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9ucygpLgorICovCitib29sCitqc3BJ c011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZhcm5hbWVzLCBMaXN0ICp2YXJleHBycykK K3sKKwlzdHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dCBjeHQ7CisJSnNvblBhdGhJdGVtIGpw aTsKKworCWN4dC52YXJuYW1lcyA9IHZhcm5hbWVzOworCWN4dC52YXJleHBycyA9IHZhcmV4cHJz OworCWN4dC5jdXJyZW50ID0ganBkc05vbkRhdGVUaW1lOworCWN4dC5sYXggPSAocGF0aC0+aGVh ZGVyICYgSlNPTlBBVEhfTEFYKSAhPSAwOworCWN4dC5tdXRhYmxlID0gZmFsc2U7CisKKwlqc3BJ bml0KCZqcGksIHBhdGgpOworCSh2b2lkKSBqc3BJc011dGFibGVXYWxrZXIoJmpwaSwgJmN4dCk7 CisKKwlyZXR1cm4gY3h0Lm11dGFibGU7Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgd2Fsa2VyIGZv ciBqc3BJc011dGFibGUoKQorICovCitzdGF0aWMgZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVz Citqc3BJc011dGFibGVXYWxrZXIoSnNvblBhdGhJdGVtICpqcGksIHN0cnVjdCBKc29uUGF0aE11 dGFibGVDb250ZXh0ICpjeHQpCit7CisJSnNvblBhdGhJdGVtIG5leHQ7CisJZW51bSBKc29uUGF0 aERhdGF0eXBlU3RhdHVzIHN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsKKworCXdoaWxlICghY3h0 LT5tdXRhYmxlKQorCXsKKwkJSnNvblBhdGhJdGVtIGFyZzsKKwkJZW51bSBKc29uUGF0aERhdGF0 eXBlU3RhdHVzIGxlZnRTdGF0dXM7CisJCWVudW0gSnNvblBhdGhEYXRhdHlwZVN0YXR1cyByaWdo dFN0YXR1czsKKworCQlzd2l0Y2ggKGpwaS0+dHlwZSkKKwkJeworCQkJY2FzZSBqcGlSb290Ogor CQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBqcGlDdXJyZW50OgorCQkJCUFzc2VydChzdGF0dXMgPT0ganBkc05vbkRhdGVUaW1lKTsK KwkJCQlzdGF0dXMgPSBjeHQtPmN1cnJlbnQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UganBpRmls dGVyOgorCQkJCXsKKwkJCQkJZW51bSBKc29uUGF0aERhdGF0eXBlU3RhdHVzIHByZXZTdGF0dXMg PSBjeHQtPmN1cnJlbnQ7CisKKwkJCQkJY3h0LT5jdXJyZW50ID0gc3RhdHVzOworCQkJCQlqc3BH ZXRBcmcoanBpLCAmYXJnKTsKKwkJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisK KwkJCQkJY3h0LT5jdXJyZW50ID0gcHJldlN0YXR1czsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJ CQljYXNlIGpwaVZhcmlhYmxlOgorCQkJCXsKKwkJCQkJaW50MzIJCWxlbjsKKwkJCQkJY29uc3Qg Y2hhciAqbmFtZSA9IGpzcEdldFN0cmluZyhqcGksICZsZW4pOworCQkJCQlMaXN0Q2VsbCAgICps YzE7CisJCQkJCUxpc3RDZWxsICAgKmxjMjsKKworCQkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNO b25EYXRlVGltZSk7CisKKwkJCQkJZm9yYm90aChsYzEsIGN4dC0+dmFybmFtZXMsIGxjMiwgY3h0 LT52YXJleHBycykKKwkJCQkJeworCQkJCQkJU3RyaW5nCSAgICp2YXJuYW1lID0gbGZpcnN0X25v ZGUoU3RyaW5nLCBsYzEpOworCQkJCQkJTm9kZQkgICAqdmFyZXhwciA9IGxmaXJzdChsYzIpOwor CisJCQkJCQlpZiAoc3RybmNtcCh2YXJuYW1lLT5zdmFsLCBuYW1lLCBsZW4pKQorCQkJCQkJCWNv bnRpbnVlOworCisJCQkJCQlzd2l0Y2ggKGV4cHJUeXBlKHZhcmV4cHIpKQorCQkJCQkJeworCQkJ CQkJCWNhc2UgREFURU9JRDoKKwkJCQkJCQljYXNlIFRJTUVPSUQ6CisJCQkJCQkJY2FzZSBUSU1F U1RBTVBPSUQ6CisJCQkJCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZU5vblpvbmVkOworCQkJCQkJ CQlicmVhazsKKworCQkJCQkJCWNhc2UgVElNRVRaT0lEOgorCQkJCQkJCWNhc2UgVElNRVNUQU1Q VFpPSUQ6CisJCQkJCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZVpvbmVkOworCQkJCQkJCQlicmVh azsKKworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXN0YXR1cyA9IGpwZHNOb25EYXRlVGltZTsK KwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWJy ZWFrOworCQkJCX0KKworCQkJY2FzZSBqcGlFcXVhbDoKKwkJCWNhc2UganBpTm90RXF1YWw6CisJ CQljYXNlIGpwaUxlc3M6CisJCQljYXNlIGpwaUdyZWF0ZXI6CisJCQljYXNlIGpwaUxlc3NPckVx dWFsOgorCQkJY2FzZSBqcGlHcmVhdGVyT3JFcXVhbDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpw ZHNOb25EYXRlVGltZSk7CisJCQkJanNwR2V0TGVmdEFyZyhqcGksICZhcmcpOworCQkJCWxlZnRT dGF0dXMgPSBqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKworCQkJCWpzcEdldFJpZ2h0 QXJnKGpwaSwgJmFyZyk7CisJCQkJcmlnaHRTdGF0dXMgPSBqc3BJc011dGFibGVXYWxrZXIoJmFy ZywgY3h0KTsKKworCQkJCS8qCisJCQkJICogQ29tcGFyaXNvbiBvZiBkYXRldGltZSB0eXBlIHdp dGggZGlmZmVyZW50IHRpbWV6b25lIHN0YXR1cworCQkJCSAqIGlzIG11dGFibGUuCisJCQkJICov CisJCQkJaWYgKGxlZnRTdGF0dXMgIT0ganBkc05vbkRhdGVUaW1lICYmCisJCQkJCXJpZ2h0U3Rh dHVzICE9IGpwZHNOb25EYXRlVGltZSAmJgorCQkJCQkobGVmdFN0YXR1cyA9PSBqcGRzVW5rbm93 bkRhdGVUaW1lIHx8CisJCQkJCSByaWdodFN0YXR1cyA9PSBqcGRzVW5rbm93bkRhdGVUaW1lIHx8 CisJCQkJCSBsZWZ0U3RhdHVzICE9IHJpZ2h0U3RhdHVzKSkKKwkJCQkJY3h0LT5tdXRhYmxlID0g dHJ1ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlOb3Q6CisJCQljYXNlIGpwaUlzVW5rbm93 bjoKKwkJCWNhc2UganBpRXhpc3RzOgorCQkJY2FzZSBqcGlQbHVzOgorCQkJY2FzZSBqcGlNaW51 czoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGltZSk7CisJCQkJanNwR2V0QXJn KGpwaSwgJmFyZyk7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UganBpQW5kOgorCQkJY2FzZSBqcGlPcjoKKwkJCWNhc2UganBpQWRkOgor CQkJY2FzZSBqcGlTdWI6CisJCQljYXNlIGpwaU11bDoKKwkJCWNhc2UganBpRGl2OgorCQkJY2Fz ZSBqcGlNb2Q6CisJCQljYXNlIGpwaVN0YXJ0c1dpdGg6CisJCQkJQXNzZXJ0KHN0YXR1cyA9PSBq cGRzTm9uRGF0ZVRpbWUpOworCQkJCWpzcEdldExlZnRBcmcoanBpLCAmYXJnKTsKKwkJCQlqc3BJ c011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKwkJCQlqc3BHZXRSaWdodEFyZyhqcGksICZhcmcp OworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOworCQkJCWJyZWFrOworCisJCQlj YXNlIGpwaUluZGV4QXJyYXk6CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBqcGktPmNvbnRlbnQu YXJyYXkubmVsZW1zOyBpKyspCisJCQkJeworCQkJCQlKc29uUGF0aEl0ZW0gZnJvbTsKKwkJCQkJ SnNvblBhdGhJdGVtIHRvOworCisJCQkJCWlmIChqc3BHZXRBcnJheVN1YnNjcmlwdChqcGksICZm cm9tLCAmdG8sIGkpKQorCQkJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZ0bywgY3h0KTsKKworCQkJ CQlqc3BJc011dGFibGVXYWxrZXIoJmZyb20sIGN4dCk7CisJCQkJfQorCQkJCS8qIEZBTExUSFJP VUdIICovCisKKwkJCWNhc2UganBpQW55QXJyYXk6CisJCQkJaWYgKCFjeHQtPmxheCkKKwkJCQkJ c3RhdHVzID0ganBkc05vbkRhdGVUaW1lOworCQkJCWJyZWFrOworCisJCQljYXNlIGpwaUFueToK KwkJCQlpZiAoanBpLT5jb250ZW50LmFueWJvdW5kcy5maXJzdCA+IDApCisJCQkJCXN0YXR1cyA9 IGpwZHNOb25EYXRlVGltZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlEYXRldGltZToKKwkJ CQlpZiAoanBpLT5jb250ZW50LmFyZykKKwkJCQl7CisJCQkJCWNoYXIJICAgKnRlbXBsYXRlOwor CisJCQkJCWpzcEdldEFyZyhqcGksICZhcmcpOworCQkJCQlpZiAoYXJnLnR5cGUgIT0ganBpU3Ry aW5nKQorCQkJCQl7CisJCQkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJCQlicmVh azsJLyogdGhlcmUgd2lsbCBiZSBydW50aW1lIGVycm9yICovCisJCQkJCX0KKworCQkJCQl0ZW1w bGF0ZSA9IGpzcEdldFN0cmluZygmYXJnLCBOVUxMKTsKKwkJCQkJaWYgKGRhdGV0aW1lX2Zvcm1h dF9oYXNfdHoodGVtcGxhdGUpKQorCQkJCQkJc3RhdHVzID0ganBkc0RhdGVUaW1lWm9uZWQ7CisJ CQkJCWVsc2UKKwkJCQkJCXN0YXR1cyA9IGpwZHNEYXRlVGltZU5vblpvbmVkOworCQkJCX0KKwkJ CQllbHNlCisJCQkJeworCQkJCQlzdGF0dXMgPSBqcGRzVW5rbm93bkRhdGVUaW1lOworCQkJCX0K KwkJCQlicmVhazsKKworCQkJY2FzZSBqcGlMaWtlUmVnZXg6CisJCQkJQXNzZXJ0KHN0YXR1cyA9 PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJCWpzcEluaXRCeUJ1ZmZlcigmYXJnLCBqcGktPmJhc2Us IGpwaS0+Y29udGVudC5saWtlX3JlZ2V4LmV4cHIpOworCQkJCWpzcElzTXV0YWJsZVdhbGtlcigm YXJnLCBjeHQpOworCQkJCWJyZWFrOworCisJCQkJLyogbGl0ZXJhbHMgKi8KKwkJCWNhc2UganBp TnVsbDoKKwkJCWNhc2UganBpU3RyaW5nOgorCQkJY2FzZSBqcGlOdW1lcmljOgorCQkJY2FzZSBq cGlCb29sOgorCQkJCS8qIGFjY2Vzc29ycyAqLworCQkJY2FzZSBqcGlLZXk6CisJCQljYXNlIGpw aUFueUtleToKKwkJCQkvKiBzcGVjaWFsIGl0ZW1zICovCisJCQljYXNlIGpwaVN1YnNjcmlwdDoK KwkJCWNhc2UganBpTGFzdDoKKwkJCQkvKiBpdGVtIG1ldGhvZHMgKi8KKwkJCWNhc2UganBpVHlw ZToKKwkJCWNhc2UganBpU2l6ZToKKwkJCWNhc2UganBpQWJzOgorCQkJY2FzZSBqcGlGbG9vcjoK KwkJCWNhc2UganBpQ2VpbGluZzoKKwkJCWNhc2UganBpRG91YmxlOgorCQkJY2FzZSBqcGlLZXlW YWx1ZToKKwkJCQlzdGF0dXMgPSBqcGRzTm9uRGF0ZVRpbWU7CisJCQkJYnJlYWs7CisJCX0KKwor CQlpZiAoIWpzcEdldE5leHQoanBpLCAmbmV4dCkpCisJCQlicmVhazsKKworCQlqcGkgPSAmbmV4 dDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9l eGVjLmMKaW5kZXggNmRhNmUyN2VlNi4uNmQ2MWQ4N2YwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbnBhdGhfZXhlYy5jCkBAIC0zMDg1LDcgKzMwODUsNyBAQCBKc29uUGF0aFF1ZXJ5KERhdHVt IGpiLCBKc29uUGF0aCAqanAsIEpzb25XcmFwcGVyIHdyYXBwZXIsIGJvb2wgKmVtcHR5LAogCXNp bmdsZXRvbiA9IGNvdW50ID4gMCA/IEpzb25WYWx1ZUxpc3RIZWFkKCZmb3VuZCkgOiBOVUxMOwog CWlmIChzaW5nbGV0b24gPT0gTlVMTCkKIAkJd3JhcCA9IGZhbHNlOwotCWVsc2UgaWYgKHdyYXBw ZXIgPT0gSlNXX05PTkUpCisJZWxzZSBpZiAod3JhcHBlciA9PSBKU1dfTk9ORSB8fCB3cmFwcGVy ID09IEpTV19VTlNQRUMpCiAJCXdyYXAgPSBmYWxzZTsKIAllbHNlIGlmICh3cmFwcGVyID09IEpT V19VTkNPTkRJVElPTkFMKQogCQl3cmFwID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwppbmRleCAwYjJhMTY0MDU3Li4yNzM1MzQ4NDE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCkBAIC00NzYsNiArNDc2LDggQEAgc3RhdGljIHZvaWQgZ2V0X2NvbnN0X2V4cHIoQ29uc3Qg KmNvbnN0dmFsLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkgICBpbnQgc2hvd3R5 cGUpOwogc3RhdGljIHZvaWQgZ2V0X2NvbnN0X2NvbGxhdGlvbihDb25zdCAqY29uc3R2YWwsIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9mb3JtYXQoSnNv bkZvcm1hdCAqZm9ybWF0LCBTdHJpbmdJbmZvIGJ1Zik7CitzdGF0aWMgdm9pZCBnZXRfanNvbl9y ZXR1cm5pbmcoSnNvblJldHVybmluZyAqcmV0dXJuaW5nLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CQkgICBib29sIGpzb25fZm9ybWF0X2J5X2RlZmF1bHQpOwogc3RhdGljIHZvaWQgZ2V0X2pzb25f Y29uc3RydWN0b3IoSnNvbkNvbnN0cnVjdG9yRXhwciAqY3RvciwKIAkJCQkJCQkJIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpOwogc3RhdGljIHZvaWQgZ2V0X2pz b25fY29uc3RydWN0b3Jfb3B0aW9ucyhKc29uQ29uc3RydWN0b3JFeHByICpjdG9yLApAQCAtNTE4 LDYgKzUyMCw4IEBAIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9p ZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKIHN0YXRp YyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9y ZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKK3N0YXRpYyB2b2lk IGdldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwKKwkJCQkJCQkgICBib29sIHNob3dpbXBsaWNpdCk7CiAKICNkZWZpbmUgb25seV9tYXJr ZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCiAKQEAgLTgzMDAsNiArODMwNCw3 IEBAIGlzU2ltcGxlTm9kZShOb2RlICpub2RlLCBOb2RlICpwYXJlbnROb2RlLCBpbnQgcHJldHR5 RmxhZ3MpCiAJCWNhc2UgVF9XaW5kb3dGdW5jOgogCQljYXNlIFRfRnVuY0V4cHI6CiAJCWNhc2Ug VF9Kc29uQ29uc3RydWN0b3JFeHByOgorCQljYXNlIFRfSnNvbkV4cHI6CiAJCQkvKiBmdW5jdGlv bi1saWtlOiBuYW1lKC4uKSBvciBuYW1lWy4uXSAqLwogCQkJcmV0dXJuIHRydWU7CiAKQEAgLTg0 NzEsNiArODQ3Niw3IEBAIGlzU2ltcGxlTm9kZShOb2RlICpub2RlLCBOb2RlICpwYXJlbnROb2Rl LCBpbnQgcHJldHR5RmxhZ3MpCiAJCQkJY2FzZSBUX0dyb3VwaW5nRnVuYzoJLyogb3duIHBhcmVu dGhlc2VzICovCiAJCQkJY2FzZSBUX1dpbmRvd0Z1bmM6CS8qIG93biBwYXJlbnRoZXNlcyAqLwog CQkJCWNhc2UgVF9DYXNlRXhwcjoJLyogb3RoZXIgc2VwYXJhdG9ycyAqLworCQkJCWNhc2UgVF9K c29uRXhwcjoJLyogb3duIHBhcmVudGhlc2VzICovCiAJCQkJCXJldHVybiB0cnVlOwogCQkJCWRl ZmF1bHQ6CiAJCQkJCXJldHVybiBmYWxzZTsKQEAgLTg1ODYsNiArODU5Miw2NCBAQCBnZXRfcnVs ZV9leHByX3BhcmVuKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOwogfQogCitzdGF0aWMgdm9pZAor Z2V0X2pzb25fYmVoYXZpb3IoSnNvbkJlaGF2aW9yICpiZWhhdmlvciwgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0LAorCQkJCSAgY29uc3QgY2hhciAqb24pCit7CisJLyoKKwkgKiBUaGUgb3JkZXIg b2YgYXJyYXkgZWxlbWVudHMgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBvcmRlciBvZgorCSAqIEpz b25CZWhhdmlvclR5cGUgbWVtYmVycy4KKwkgKi8KKwljb25zdCBjaGFyICpiZWhhdmlvcl9uYW1l c1tdID0KKwl7CisJCSIgTlVMTCIsCisJCSIgRVJST1IiLAorCQkiIEVNUFRZIiwKKwkJIiBUUlVF IiwKKwkJIiBGQUxTRSIsCisJCSIgVU5LTk9XTiIsCisJCSIgRU1QVFkgQVJSQVkiLAorCQkiIEVN UFRZIE9CSkVDVCIsCisJCSIgREVGQVVMVCAiCisJfTsKKworCWlmICgoaW50KSBiZWhhdmlvci0+ YnR5cGUgPCAwIHx8IGJlaGF2aW9yLT5idHlwZSA+PSBsZW5ndGhvZihiZWhhdmlvcl9uYW1lcykp CisJCWVsb2coRVJST1IsICJpbnZhbGlkIGpzb24gYmVoYXZpb3IgdHlwZTogJWQiLCBiZWhhdmlv ci0+YnR5cGUpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIGJlaGF2 aW9yX25hbWVzW2JlaGF2aW9yLT5idHlwZV0pOworCisJaWYgKGJlaGF2aW9yLT5idHlwZSA9PSBK U09OX0JFSEFWSU9SX0RFRkFVTFQpCisJCWdldF9ydWxlX2V4cHIoYmVoYXZpb3ItPmV4cHIsIGNv bnRleHQsIGZhbHNlKTsKKworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiIE9OICVz Iiwgb24pOworfQorCisvKgorICogZ2V0X2pzb25fZXhwcl9vcHRpb25zCisgKgorICogUGFyc2Ug YmFjayBjb21tb24gb3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElT VFMuCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfanNvbl9leHByX29wdGlvbnMoSnNvbkV4cHIgKmpz ZXhwciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkgIEpzb25CZWhhdmlvclR5cGUg ZGVmYXVsdF9iZWhhdmlvcikKK3sKKwlpZiAoanNleHByLT5vcCA9PSBKU09OX1FVRVJZX09QKQor CXsKKwkJaWYgKGpzZXhwci0+d3JhcHBlciA9PSBKU1dfQ09ORElUSU9OQUwpCisJCQlhcHBlbmRT dHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIiKTsKKwkJ ZWxzZSBpZiAoanNleHByLT53cmFwcGVyID09IEpTV19VTkNPTkRJVElPTkFMKQorCQkJYXBwZW5k U3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQRVIiKTsK KworCQlpZiAoanNleHByLT5vbWl0X3F1b3RlcykKKwkJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC0+YnVmLCAiIE9NSVQgUVVPVEVTIik7CisJfQorCisJaWYgKGpzZXhwci0+b25fZW1wdHkgJiYg anNleHByLT5vbl9lbXB0eS0+YnR5cGUgIT0gZGVmYXVsdF9iZWhhdmlvcikKKwkJZ2V0X2pzb25f YmVoYXZpb3IoanNleHByLT5vbl9lbXB0eSwgY29udGV4dCwgIkVNUFRZIik7CisKKwlpZiAoanNl eHByLT5vbl9lcnJvciAmJiBqc2V4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBkZWZhdWx0X2JlaGF2 aW9yKQorCQlnZXRfanNvbl9iZWhhdmlvcihqc2V4cHItPm9uX2Vycm9yLCBjb250ZXh0LCAiRVJS T1IiKTsKK30KIAogLyogLS0tLS0tLS0tLQogICogZ2V0X3J1bGVfZXhwcgkJCS0gUGFyc2UgYmFj ayBhbiBleHByZXNzaW9uCkBAIC05NzQ1LDYgKzk4MDksNyBAQCBnZXRfcnVsZV9leHByKE5vZGUg Km5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwogCisKIAkJ Y2FzZSBUX0pzb25WYWx1ZUV4cHI6CiAJCQl7CiAJCQkJSnNvblZhbHVlRXhwciAqanZlID0gKEpz b25WYWx1ZUV4cHIgKikgbm9kZTsKQEAgLTk3OTQsNiArOTg1OSw2NCBAQCBnZXRfcnVsZV9leHBy KE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCX0KIAkJCWJyZWFrOwog CisJCWNhc2UgVF9Kc29uRXhwcjoKKwkJCXsKKwkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29u RXhwciAqKSBub2RlOworCisJCQkJc3dpdGNoIChqZXhwci0+b3ApCisJCQkJeworCQkJCQljYXNl IEpTT05fRVhJU1RTX09QOgorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJKU09O X0VYSVNUUygiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEpTT05fUVVFUllfT1A6CisJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIkpTT05fUVVFUlkoIik7CisJCQkJCQlicmVh azsKKwkJCQkJY2FzZSBKU09OX1ZBTFVFX09QOgorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICJKU09OX1ZBTFVFKCIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZ2V0X3J1 bGVfZXhwcihqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CisK KwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7CisKKwkJCQlnZXRfanNvbl9w YXRoX3NwZWMoamV4cHItPnBhdGhfc3BlYywgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQkJ CWlmIChqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJCQkJeworCQkJCQlMaXN0Q2VsbCAgICpsYzEs CisJCQkJCQkJICAgKmxjMjsKKwkJCQkJYm9vbAkJbmVlZGNvbW1hID0gZmFsc2U7CisKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgUEFTU0lORyAiKTsKKworCQkJCQlmb3Jib3Ro KGxjMSwgamV4cHItPnBhc3NpbmdfbmFtZXMsCisJCQkJCQkJbGMyLCBqZXhwci0+cGFzc2luZ192 YWx1ZXMpCisJCQkJCXsKKwkJCQkJCWlmIChuZWVkY29tbWEpCisJCQkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIsICIpOworCQkJCQkJbmVlZGNvbW1hID0gdHJ1ZTsKKworCQkJCQkJ Z2V0X3J1bGVfZXhwcigoTm9kZSAqKSBsZmlyc3QobGMyKSwgY29udGV4dCwgc2hvd2ltcGxpY2l0 KTsKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEFTICVzIiwKKwkJCQkJCQkJCQkgKChT dHJpbmcgKikgbGZpcnN0X25vZGUoU3RyaW5nLCBsYzEpKS0+c3ZhbCk7CisJCQkJCX0KKwkJCQl9 CisKKwkJCQlpZiAoamV4cHItPm9wICE9IEpTT05fRVhJU1RTX09QIHx8CisJCQkJCWpleHByLT5y ZXR1cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQkJCWdldF9qc29uX3JldHVybmluZyhqZXhw ci0+cmV0dXJuaW5nLCBjb250ZXh0LT5idWYsCisJCQkJCQkJCQkgICBqZXhwci0+b3AgPT0gSlNP Tl9RVUVSWV9PUCk7CisKKwkJCQlnZXRfanNvbl9leHByX29wdGlvbnMoamV4cHIsIGNvbnRleHQs CisJCQkJCQkJCQkgIGpleHByLT5vcCAhPSBKU09OX0VYSVNUU19PUCA/CisJCQkJCQkJCQkgIEpT T05fQkVIQVZJT1JfTlVMTCA6CisJCQkJCQkJCQkgIEpTT05fQkVIQVZJT1JfRkFMU0UpOworCisJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIpIik7CisJCQl9CisJCQlicmVhazsKKwog CQljYXNlIFRfTGlzdDoKIAkJCXsKIAkJCQljaGFyCSAgICpzZXA7CkBAIC05OTE3LDYgKzEwMDQw LDcgQEAgbG9va3NfbGlrZV9mdW5jdGlvbihOb2RlICpub2RlKQogCQljYXNlIFRfTWluTWF4RXhw cjoKIAkJY2FzZSBUX1NRTFZhbHVlRnVuY3Rpb246CiAJCWNhc2UgVF9YbWxFeHByOgorCQljYXNl IFRfSnNvbkV4cHI6CiAJCQkvKiB0aGVzZSBhcmUgYWxsIGFjY2VwdGVkIGJ5IGZ1bmNfZXhwcl9j b21tb25fc3ViZXhwciAqLwogCQkJcmV0dXJuIHRydWU7CiAJCWRlZmF1bHQ6CkBAIC0xMDc4Niw2 ICsxMDkxMCwxOCBAQCBnZXRfY29uc3RfY29sbGF0aW9uKENvbnN0ICpjb25zdHZhbCwgZGVwYXJz ZV9jb250ZXh0ICpjb250ZXh0KQogCX0KIH0KIAorLyoKKyAqIGdldF9qc29uX3BhdGhfc3BlYwkJ LSBQYXJzZSBiYWNrIGEgSlNPTiBwYXRoIHNwZWNpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQK K2dldF9qc29uX3BhdGhfc3BlYyhOb2RlICpwYXRoX3NwZWMsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCit7CisJaWYgKElzQShwYXRoX3NwZWMsIENvbnN0KSkK KwkJZ2V0X2NvbnN0X2V4cHIoKENvbnN0ICopIHBhdGhfc3BlYywgY29udGV4dCwgLTEpOworCWVs c2UKKwkJZ2V0X3J1bGVfZXhwcihwYXRoX3NwZWMsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7Cit9 CisKIC8qCiAgKiBnZXRfanNvbl9mb3JtYXQJCQktIFBhcnNlIGJhY2sgYSBKc29uRm9ybWF0IG5v ZGUKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggYTI4ZGRjZGQ3Ny4uNWRiMzU0ZjIy MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMv aW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC0yNDAsNiArMjQwLDkgQEAgdHlwZWRlZiBl bnVtIEV4cHJFdmFsT3AKIAlFRU9QX1hNTEVYUFIsCiAJRUVPUF9KU09OX0NPTlNUUlVDVE9SLAog CUVFT1BfSVNfSlNPTiwKKwlFRU9QX0pTT05FWFBSX1BBVEgsCisJRUVPUF9KU09ORVhQUl9DT0VS Q0lPTiwKKwlFRU9QX0pTT05FWFBSX0NPRVJDSU9OX0ZJTklTSCwKIAlFRU9QX0FHR1JFRiwKIAlF RU9QX0dST1VQSU5HX0ZVTkMsCiAJRUVPUF9XSU5ET1dfRlVOQywKQEAgLTY5Miw2ICs2OTUsMjEg QEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJCQlKc29uSXNQcmVkaWNhdGUgKnByZWQ7 CS8qIG9yaWdpbmFsIGV4cHJlc3Npb24gbm9kZSAqLwogCQl9CQkJaXNfanNvbjsKIAorCQkvKiBm b3IgRUVPUF9KU09ORVhQUl9QQVRIICovCisJCXN0cnVjdAorCQl7CisJCQlzdHJ1Y3QgSnNvbkV4 cHJTdGF0ZSAqanNlc3RhdGU7CisJCX0JCQlqc29uZXhwcjsKKworCQkvKiBmb3IgRUVPUF9KU09O RVhQUl9DT0VSQ0lPTiAqLworCQlzdHJ1Y3QKKwkJeworCQkJSnNvbkNvZXJjaW9uICAgKmNvZXJj aW9uOworCQkJRm1nckluZm8JICAgKmlucHV0X2ZpbmZvOworCQkJT2lkCQkJCXR5cGlvcGFyYW07 CisJCQl2b2lkCQkgICAqanNvbl9wb3B1bGF0ZV90eXBlX2NhY2hlOworCQkJRXJyb3JTYXZlQ29u dGV4dCAqZXNjb250ZXh0OworCQl9CQkJanNvbmV4cHJfY29lcmNpb247CiAJfQkJCWQ7CiB9IEV4 cHJFdmFsU3RlcDsKIApAQCAtNzU1LDcgKzc3Myw2IEBAIHR5cGVkZWYgc3RydWN0IEpzb25Db25z dHJ1Y3RvckV4cHJTdGF0ZQogCWludAkJCW5hcmdzOwogfSBKc29uQ29uc3RydWN0b3JFeHByU3Rh dGU7CiAKLQogLyogZnVuY3Rpb25zIGluIGV4ZWNFeHByLmMgKi8KIGV4dGVybiB2b2lkIEV4cHJF dmFsUHVzaFN0ZXAoRXhwclN0YXRlICplcywgY29uc3QgRXhwckV2YWxTdGVwICpzKTsKIApAQCAt ODA5LDYgKzgyNiwxMSBAQCBleHRlcm4gdm9pZCBFeGVjRXZhbFhtbEV4cHIoRXhwclN0YXRlICpz dGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEpzb25Db25zdHJ1 Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQkJRXhwckNv bnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbklzUHJlZGljYXRlKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOworZXh0ZXJuIHZvaWQJRXhlY0V2YWxK c29uQ29lcmNpb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKKwkJCQkJCQkJ IEV4cHJDb250ZXh0ICplY29udGV4dCk7CitleHRlcm4gdm9pZAlFeGVjRXZhbEpzb25Db2VyY2lv bkZpbmlzaChFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKK2V4dGVybiBpbnQg RXhlY0V2YWxKc29uRXhwclBhdGgoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwK KwkJCQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsR3Jv dXBpbmdGdW5jKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApOwogZXh0ZXJuIHZv aWQgRXhlY0V2YWxTdWJQbGFuKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJ CQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNDQ0 YTVmMGZkNS4uMmU4ZGYyMzAxZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTEwMDgsNiArMTAw OCw5MiBAQCB0eXBlZGVmIHN0cnVjdCBEb21haW5Db25zdHJhaW50U3RhdGUKIAlFeHByU3RhdGUg ICpjaGVja19leHByc3RhdGU7CS8qIGNoZWNrX2V4cHIncyBldmFsIHN0YXRlLCBvciBOVUxMICov CiB9IERvbWFpbkNvbnN0cmFpbnRTdGF0ZTsKIAorLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IHRo ZSBzdGF0ZSBvZiBKc29uUGF0aCogZXZhbHVhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNv bkV4cHJQb3N0RXZhbFN0YXRlCit7CisJLyogRGlkIEpzb25QYXRoKiBldmFsdWF0aW9uIGNhdXNl IGFuIGVycm9yPyAqLworCU51bGxhYmxlRGF0dW0JZXJyb3I7CisKKwkvKiBJcyB0aGUgcmVzdWx0 IG9mIEpzb25QYXRoKiBldmFsdWF0aW9uIGVtcHR5PyAqLworCU51bGxhYmxlRGF0dW0JZW1wdHk7 CisKKwkvKgorCSAqIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgd2lsbCBzZXQgdGhpcyB0byB0aGUg YWRkcmVzcyBvZiB0aGUgc3RlcCB0bworCSAqIHVzZSB0byBjb2VyY2UgdGhlIHJlc3VsdCBvZiBK c29uUGF0aCogZXZhbHVhdGlvbiB0byB0aGUgUkVUVVJOSU5HIHR5cGUuCisJICogQWxzbyBzZWUg dGhlIGRlc2NyaXB0aW9uIG9mIHBvc3NpYmxlIHN0ZXAgYWRkcmVzc2VzIHRoYXQgdGhpcyBjb3Vs ZCBiZQorCSAqIHNldCB0byBpbiB0aGUgZGVmaW5pdGlvbiBvZiBKc29uRXhwclN0YXRlLgorCSAq LworCWludAkJCWp1bXBfZXZhbF9jb2VyY2lvbjsKK30gSnNvbkV4cHJQb3N0RXZhbFN0YXRlOwor CisvKiBTdGF0ZSBmb3IgZXZhbHVhdGluZyBhIEpzb25FeHByLCB0b28gYmlnIHRvIGlubGluZSAq LwordHlwZWRlZiBzdHJ1Y3QgSnNvbkV4cHJTdGF0ZQoreworCS8qIG9yaWdpbmFsIGV4cHJlc3Np b24gbm9kZSAqLworCUpzb25FeHByICAgKmpzZXhwcjsKKworCS8qIHZhbHVlL2lzbnVsbCBmb3Ig Zm9ybWF0dGVkX2V4cHIgKi8KKwlOdWxsYWJsZURhdHVtIGZvcm1hdHRlZF9leHByOworCisJLyog dmFsdWUvaXNudWxsIGZvciBwYXRoc3BlYyAqLworCU51bGxhYmxlRGF0dW0gcGF0aHNwZWM7CisK KwkvKiBKc29uUGF0aFZhcmlhYmxlIGVudHJpZXMgZm9yIHBhc3NpbmdfdmFsdWVzICovCisJTGlz dAkgICAqYXJnczsKKworCS8qCisJICogUGVyLXJvdyByZXN1bHQgc3RhdHVzIGluZm8gcG9wdWxh dGVkIGJ5IEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkKKwkgKiBhbmQgRXhlY0V2YWxKc29uQ29lcmNp b25GaW5pc2goKS4KKwkgKi8KKwlKc29uRXhwclBvc3RFdmFsU3RhdGUgcG9zdF9ldmFsOworCisJ LyoKKwkgKiBBZGRyZXNzZXMgb2YgdGhlIHN0ZXBzIHRoYXQgaW1wbGVtZW50cyB0aGUgbm9uLUVS Uk9SIHZhcmlhbnQgb2YgT04gRU1QVFkKKwkgKiBhbmQgT04gRVJST1IgYmVoYXZpb3JzLCByZXNw ZWN0aXZlbHkuCisJICovCisJaW50CQkJanVtcF9lbXB0eTsKKwlpbnQJCQlqdW1wX2Vycm9yOwor CisJLyoKKwkgKiBBZGRyZXNzZXMgb2Ygc3RlcHMgdG8gcGVyZm9ybSB0aGUgY29lcmNpb24gb2Yg dGhlIEpzb25QYXRoKiByZXN1bHQgdmFsdWUKKwkgKiB0byB0aGUgUkVUVVJOSU5HIHR5cGUuICBF YWNoIGFkZHJlc3MgcG9pbnRzIHRvIGVpdGhlciAxKSBhIHNwZWNpYWwKKwkgKiBFRU9QX0pTT05F WFBSX0NPRVJDSU9OIHN0ZXAgdGhhdCBoYW5kbGVzIGNvZXJjaW9uIHVzaW5nIHRoZSBSRVRVUk5J TkcKKwkgKiB0eXBlJ3MgaW5wdXQgZnVuY3Rpb24gb3IgYnkgdXNpbmcganNvbl92aWFfcG9wdWxh dGUoKSwgb3IgMikgYW4KKwkgKiBleHByZXNzaW9uIHN1Y2ggYXMgQ29lcmNlVmlhSU8uICBJdCBt YXkgYmUgLTEgaWYgbm8gY29lcmNpb24gaXMKKwkgKiBuZWNlc3NhcnkuCisJICoKKwkgKiBqdW1w X2V2YWxfcmVzdWx0X2NvZXJjaW9uIHBvaW50cyB0byB0aGUgc3RlcCB0byBldmFsdWF0ZSB0aGUg Y29lcmNpb24KKwkgKiBnaXZlbiBpbiBKc29uRXhwci5yZXN1bHRfY29lcmNpb24uCisJICovCisJ aW50CQkJanVtcF9ldmFsX3Jlc3VsdF9jb2VyY2lvbjsKKworCS8qIEp1bXAgdG8gZW5kIHRvIHNr aXAgYWxsIHRoZSBzdGVwcyBhZnRlciBFRU9QX0pTT05FWFBSX1BBVEguICovCisJaW50CQkJanVt cF9lbmQ7CisKKwkvKiBldmFsX2l0ZW1fY29lcmNpb25fanVtcHMgaXMgYW4gYXJyYXkgb2YgbnVt X2l0ZW1fY29lcmNpb25zIGVsZW1lbnRzCisJICogZWFjaCBjb250YWluaW5nIGEgc3RlcCBhZGRy ZXNzIHRvIGV2YWx1YXRlIHRoZSBjb2VyY2lvbiBmcm9tIGEgdmFsdWUgb2YKKwkgKiB0aGUgZ2l2 ZW4gSnNvbkl0ZW1UeXBlIHRvIHRoZSBSRVRVUk5JTkcgdHlwZSwgb3IgLTEgaWYgbm8gY29lcmNp b24gaXMKKwkgKiBuZWNlc3NhcnkuICBpdGVtX2NvZXJjaW9uX3ZpYV9leHByIGlzIGFuIGFycmF5 IG9mIGJvb2xlYW4gZmxhZ3Mgb2YgdGhlCisJICogc2FtZSBsZW5ndGggdGhhdCBpbmRpY2F0ZXMg d2hldGhlciBlYWNoIHZhbGlkIHN0ZXAgYWRkcmVzcyBpbiB0aGUKKwkgKiBldmFsX2l0ZW1fY29l cmNpb25fanVtcHMgYXJyYXkgcG9pbnRzIHRvIGFuIGV4cHJlc3Npb24gb3IgYQorCSAqIEVFT1Bf SlNPTkVYUFJfQ09FUkNJT04gc3RlcC4gIEV4ZWNFdmFsSnNvbkV4cHJQYXRoKCkgd2lsbCBjYXVz ZSBhbgorCSAqIGVycm9yIGlmIGl0J3MgdGhlIGxhdHRlciwgYmVjYXVzZSB0aGF0IG1vZGUgb2Yg Y29lcmNpb24gaXMgbm90CisJICogc3VwcG9ydGVkIGZvciBhbGwgSnNvbkl0ZW1UeXBlcy4KKwkg Ki8KKwlpbnQJCQludW1faXRlbV9jb2VyY2lvbnM7CisJaW50CQkgICAqZXZhbF9pdGVtX2NvZXJj aW9uX2p1bXBzOworCWJvb2wJICAgKml0ZW1fY29lcmNpb25fdmlhX2V4cHI7CisKKwkvKgorCSAq IEZvciBwYXNzaW5nIHdoZW4gaW5pdGlhbGl6aW5nIGEgRUVPUF9JT0NPRVJDRV9TQUZFIHN0ZXAg Zm9yIGFueQorCSAqIENvZXJjZVZpYUlPIG5vZGVzIGluIHRoZSBleHByZXNzaW9uIHRoYXQgbXVz dCBiZSBldmFsdWF0ZWQgaW4gYW4KKwkgKiBlcnJvci1zYWZlIG1hbm5lci4KKwkgKi8KKwlFcnJv clNhdmVDb250ZXh0IGVzY29udGV4dDsKK30gSnNvbkV4cHJTdGF0ZTsKKwogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKgkJCQkgRXhlY3V0b3IgU3RhdGUgVHJlZXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL21ha2VmdW5jcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggMmRj Nzk2NDhkMi4uYTk2ZmQ2MmQ3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1 bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTExMiw2ICsxMTIs OCBAQCBleHRlcm4gSnNvbkZvcm1hdCAqbWFrZUpzb25Gb3JtYXQoSnNvbkZvcm1hdFR5cGUgdHlw ZSwgSnNvbkVuY29kaW5nIGVuY29kaW5nLAogCQkJCQkJCQkgIGludCBsb2NhdGlvbik7CiBleHRl cm4gSnNvblZhbHVlRXhwciAqbWFrZUpzb25WYWx1ZUV4cHIoRXhwciAqcmF3X2V4cHIsIEV4cHIg KmZvcm1hdHRlZF9leHByLAogCQkJCQkJCQkJCUpzb25Gb3JtYXQgKmZvcm1hdCk7CitleHRlcm4g SnNvbkJlaGF2aW9yICptYWtlSnNvbkJlaGF2aW9yKEpzb25CZWhhdmlvclR5cGUgdHlwZSwgTm9k ZSAqZXhwciwKKwkJCQkgSnNvbkNvZXJjaW9uICpjb2VyY2lvbiwgaW50IGxvY2F0aW9uKTsKIGV4 dGVybiBOb2RlICptYWtlSnNvbktleVZhbHVlKE5vZGUgKmtleSwgTm9kZSAqdmFsdWUpOwogZXh0 ZXJuIE5vZGUgKm1ha2VKc29uSXNQcmVkaWNhdGUoTm9kZSAqZXhwciwgSnNvbkZvcm1hdCAqZm9y bWF0LAogCQkJCQkJCQkgSnNvblZhbHVlVHlwZSBpdGVtX3R5cGUsIGJvb2wgdW5pcXVlX2tleXMs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggYjMxODFmMzRhZS4uMDE4NGM3NmNlNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaApAQCAtMTY5Miw2ICsxNjkyLDIzIEBAIHR5cGVkZWYgc3RydWN0IFRy aWdnZXJUcmFuc2l0aW9uCiAKIC8qIE5vZGVzIGZvciBTUUwvSlNPTiBzdXBwb3J0ICovCiAKKy8q CisgKiBKc29uUXVvdGVzIC0KKyAqCQlyZXByZXNlbnRhdGlvbiBvZiBbS0VFUHxPTUlUXSBRVU9U RVMgY2xhdXNlIGZvciBKU09OX1FVRVJZKCkKKyAqLwordHlwZWRlZiBlbnVtIEpzb25RdW90ZXMK K3sKKwlKU19RVU9URVNfVU5TUEVDLAkJCS8qIHVuc3BlY2lmaWVkICovCisJSlNfUVVPVEVTX0tF RVAsCQkJCS8qIEtFRVAgUVVPVEVTICovCisJSlNfUVVPVEVTX09NSVQsCQkJCS8qIE9NSVQgUVVP VEVTICovCit9IEpzb25RdW90ZXM7CisKKy8qCisgKiBKc29uUGF0aFNwZWMgLQorICoJCXJlcHJl c2VudGF0aW9uIG9mIEpTT04gcGF0aCBjb25zdGFudAorICovCit0eXBlZGVmIGNoYXIgKkpzb25Q YXRoU3BlYzsKKwogLyoKICAqIEpzb25PdXRwdXQgLQogICoJCXJlcHJlc2VudGF0aW9uIG9mIEpT T04gb3V0cHV0IGNsYXVzZSAoUkVUVVJOSU5HIHR5cGUgW0ZPUk1BVCBmb3JtYXRdKQpAQCAtMTcw Myw2ICsxNzIwLDM2IEBAIHR5cGVkZWYgc3RydWN0IEpzb25PdXRwdXQKIAlKc29uUmV0dXJuaW5n ICpyZXR1cm5pbmc7CS8qIFJFVFVSTklORyBGT1JNQVQgY2xhdXNlIGFuZCB0eXBlIE9pZHMgKi8K IH0gSnNvbk91dHB1dDsKIAorLyoKKyAqIEpzb25Bcmd1bWVudCAtCisgKgkJcmVwcmVzZW50YXRp b24gb2YgYXJndW1lbnQgZnJvbSBKU09OIFBBU1NJTkcgY2xhdXNlCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEpzb25Bcmd1bWVudAoreworCU5vZGVUYWcJCXR5cGU7CisJSnNvblZhbHVlRXhwciAqdmFs OwkJCS8qIGFyZ3VtZW50IHZhbHVlIGV4cHJlc3Npb24gKi8KKwljaGFyCSAgICpuYW1lOwkJCS8q IGFyZ3VtZW50IG5hbWUgKi8KK30gSnNvbkFyZ3VtZW50OworCisvKgorICogSnNvbkZ1bmNFeHBy IC0KKyAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT04gZnVuY3Rpb24gZXhw cmVzc2lvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvbkZ1bmNFeHByCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlKc29uRXhwck9wCW9wOwkJCQkvKiBleHByZXNzaW9uIHR5cGUgKi8KKwlKc29uVmFs dWVFeHByICpjb250ZXh0X2l0ZW07CS8qIGNvbnRleHQgaXRlbSBleHByZXNzaW9uICovCisJTm9k ZQkgICAqcGF0aHNwZWM7CQkvKiBKU09OIHBhdGggc3BlY2lmaWNhdGlvbiBleHByZXNzaW9uICov CisJTGlzdAkgICAqcGFzc2luZzsJCS8qIGxpc3Qgb2YgUEFTU0lORyBjbGF1c2UgYXJndW1lbnRz LCBpZiBhbnkgKi8KKwlKc29uT3V0cHV0ICpvdXRwdXQ7CQkJLyogb3V0cHV0IGNsYXVzZSwgaWYg c3BlY2lmaWVkICovCisJSnNvbkJlaGF2aW9yICpvbl9lbXB0eTsJCS8qIE9OIEVNUFRZIGJlaGF2 aW9yICovCisJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJCS8qIE9OIEVSUk9SIGJlaGF2aW9yICov CisJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8qIGFycmF5IHdyYXBwZXIgYmVoYXZpb3IgKEpTT05f UVVFUlkgb25seSkgKi8KKwlKc29uUXVvdGVzCXF1b3RlczsJCQkvKiBvbWl0IG9yIGtlZXAgcXVv dGVzPyAoSlNPTl9RVUVSWSBvbmx5KSAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9j YXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvbkZ1bmNFeHByOworCiAvKgogICogSnNv bktleVZhbHVlIC0KICAqCQl1bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT04gb2Jq ZWN0IGtleS12YWx1ZSBwYWlyIGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJp bW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCA2MTI4OWQ4MTI0 Li5mZTlkZmJiMDJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtMTU1Miw2ICsxNTUyLDE3IEBA IHR5cGVkZWYgc3RydWN0IFhtbEV4cHIKIAlpbnQJCQlsb2NhdGlvbjsKIH0gWG1sRXhwcjsKIAor LyoKKyAqIEpzb25FeHByT3AgLQorICoJCWVudW1lcmF0aW9uIG9mIEpTT04gZnVuY3Rpb25zIHVz aW5nIEpTT04gcGF0aAorICovCit0eXBlZGVmIGVudW0gSnNvbkV4cHJPcAoreworCUpTT05fVkFM VUVfT1AsCQkJCS8qIEpTT05fVkFMVUUoKSAqLworCUpTT05fUVVFUllfT1AsCQkJCS8qIEpTT05f UVVFUlkoKSAqLworCUpTT05fRVhJU1RTX09QLAkJCQkvKiBKU09OX0VYSVNUUygpICovCit9IEpz b25FeHByT3A7CisKIC8qCiAgKiBKc29uRW5jb2RpbmcgLQogICoJCXJlcHJlc2VudGF0aW9uIG9m IEpTT04gRU5DT0RJTkcgY2xhdXNlCkBAIC0xNTgyLDExICsxNTkzLDMyIEBAIHR5cGVkZWYgZW51 bSBKc29uRm9ybWF0VHlwZQogICovCiB0eXBlZGVmIGVudW0gSnNvbldyYXBwZXIKIHsKKwlKU1df VU5TUEVDLAogCUpTV19OT05FLAogCUpTV19DT05ESVRJT05BTCwKIAlKU1dfVU5DT05ESVRJT05B TCwKIH0gSnNvbldyYXBwZXI7CiAKKy8qCisgKiBKc29uQmVoYXZpb3JUeXBlIC0KKyAqCQllbnVt ZXJhdGlvbiBvZiBiZWhhdmlvciB0eXBlcyB1c2VkIGluIEpTT04gT04gLi4uIEJFSEFWSU9SIGNs YXVzZQorICoKKyAqIAkJSWYgZW51bSBtZW1iZXJzIGFyZSByZW9yZGVyZWQsIGdldF9qc29uX2Jl aGF2aW9yKCkgZnJvbSBydWxldXRpbHMuYworICogCQltdXN0IGJlIHVwZGF0ZWQgYWNjb3JkaW5n bHkuCisgKi8KK3R5cGVkZWYgZW51bSBKc29uQmVoYXZpb3JUeXBlCit7CisJSlNPTl9CRUhBVklP Ul9OVUxMID0gMCwKKwlKU09OX0JFSEFWSU9SX0VSUk9SLAorCUpTT05fQkVIQVZJT1JfRU1QVFks CisJSlNPTl9CRUhBVklPUl9UUlVFLAorCUpTT05fQkVIQVZJT1JfRkFMU0UsCisJSlNPTl9CRUhB VklPUl9VTktOT1dOLAorCUpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVksCisJSlNPTl9CRUhBVklP Ul9FTVBUWV9PQkpFQ1QsCisJSlNPTl9CRUhBVklPUl9ERUZBVUxULAorfSBKc29uQmVoYXZpb3JU eXBlOworCiAvKgogICogSnNvbkZvcm1hdCAtCiAgKgkJcmVwcmVzZW50YXRpb24gb2YgSlNPTiBG T1JNQVQgY2xhdXNlCkBAIC0xNjgxLDYgKzE3MTMsMTM4IEBAIHR5cGVkZWYgc3RydWN0IEpzb25J c1ByZWRpY2F0ZQogCWludAkJCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlm IHVua25vd24gKi8KIH0gSnNvbklzUHJlZGljYXRlOwogCisvKgorICogSnNvbkNvZXJjaW9uCisg KgkJSW5mb3JtYXRpb24gYWJvdXQgY29lcmNpbmcgYSBTUUwvSlNPTiB2YWx1ZSB0byB0aGUgc3Bl Y2lmaWVkCisgKgkJdHlwZSBhdCBydW50aW1lIHVzaW5nIGpzb25fcG9wdWxhdGVfdHlwZSgpIG9y IGJ5IGNhbGxpbmcgdGhlIHR5cGUncworICoJCWlucHV0IGZ1bnRpb24uCisgKgorICogQSBub2Rl IG9mIHRoaXMgdHlwZSBpcyBjcmVhdGVkIGlmIHRoZSBwYXJzZXIgY2Fubm90IGZpbmQgYSBjYXN0 IGV4cHJlc3Npb24KKyAqIHVzaW5nIGNvZXJjZV90eXBlKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0 IEpzb25Db2VyY2lvbgoreworCU5vZGVUYWcJCXR5cGU7CisKKwlPaWQJCQl0YXJnZXR0eXBlOwor CWludDMyCQl0YXJnZXR0eXBtb2Q7CisJYm9vbAkJb21pdF9xdW90ZXM7CS8qIG9taXQgcXVvdGVz IGZyb20gc2NhbGFyIG91dHB1dCBzdHJpbmdzPyAqLworCU9pZAkJCWNvbGxhdGlvbjsJCS8qIGNv bGxhdGlvbiBmb3IgY29lcmNpb24gdmlhIEkvTyBvciBwb3B1bGF0ZSAqLworfSBKc29uQ29lcmNp b247CisKKy8qCisgKiBKc29uSXRlbVR5cGUKKyAqCQlQb3NzaWJsZSB0eXBlcyBmb3Igc2NhbGFy IHZhbHVlcyByZXR1cm5lZCBieSBKU09OX1ZBTFVFKCkKKyAqCisgKiBUaGUgY29tbWVudCBuZXh0 IHRvIGVhY2ggaXRlbSB0eXBlIG1lbnRpb25zIHRoZSBjb3JyZXNwb25kaW5nCisgKiBKc29uYlZh bHVlLmpidlR5cGUuCisgKi8KK3R5cGVkZWYgZW51bSBKc29uSXRlbVR5cGUKK3sKKwlKc29uSXRl bVR5cGVOdWxsLAkJLyogamJ2TnVsbCAqLworCUpzb25JdGVtVHlwZVN0cmluZywJCS8qIGpidlN0 cmluZyAqLworCUpzb25JdGVtVHlwZU51bWVyaWMsCS8qIGpidk51bWVyaWMgKi8KKwlKc29uSXRl bVR5cGVCb29sZWFuLAkvKiBqYnZCb29sICovCisJSnNvbkl0ZW1UeXBlRGF0ZSwJCS8qIGpidkRh dGV0aW1lOiBEQVRFT0lEICovCisJSnNvbkl0ZW1UeXBlVGltZSwJCS8qIGpidkRhdGV0aW1lOiBU SU1FT0lEICovCisJSnNvbkl0ZW1UeXBlVGltZXR6LAkJLyogamJ2RGF0ZXRpbWU6IFRJTUVUWk9J RCAqLworCUpzb25JdGVtVHlwZVRpbWVzdGFtcCwJLyogamJ2RGF0ZXRpbWU6IFRJTUVTVEFNUE9J RCAqLworCUpzb25JdGVtVHlwZVRpbWVzdGFtcHR6LC8qIGpidkRhdGV0aW1lOiBUSU1FU1RBTVBU Wk9JRCAqLworCUpzb25JdGVtVHlwZUNvbXBvc2l0ZSwJLyogamJ2QXJyYXksIGpidk9iamVjdCwg amJ2QmluYXJ5ICovCisJSnNvbkl0ZW1UeXBlSW52YWxpZCwKK30gSnNvbkl0ZW1UeXBlOworCisv KgorICogSnNvbkl0ZW1Db2VyY2lvbgorICoJCUNvZXJjaW9uIGV4cHJlc3Npb24gZm9yIHRoZSBn aXZlbiBKc29uSXRlbVR5cGUKKyAqCisgKiBJZiBub3QgTlVMTCwgJ2NvZXJjaW9uJyBnaXZlbiB0 aGUgZXhwcmVzc2lvbiBub2RlIHRvIGNvbnZlcnQgYSBzY2FsYXIgdmFsdWUKKyAqIGV4dHJhY3Rl ZCBmcm9tIGEgSnNvbmJWYWx1ZSBvZiB0aGUgZ2l2ZW4gdHlwZSB0byB0aGUgdGFyZ2V0IHR5cGUg Z2l2ZW4gYnkKKyAqIEpzb25FeHByLnJldHVybmluZy4gIE5VTEwgbWVhbnMgdGhlIGNvZXJjaW9u IGlzIHVubmVjZXNzYXJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uSXRlbUNvZXJjaW9uCit7 CisJTm9kZVRhZwkJdHlwZTsKKworCUpzb25JdGVtVHlwZSBpdGVtX3R5cGU7CisJTm9kZQkgICAq Y29lcmNpb247Cit9IEpzb25JdGVtQ29lcmNpb247CisKKy8qCisgKiBKc29uQmVoYXZpb3IKKyAq CQlJbmZvcm1hdGlvbiBhYm91dCBPTiBFUlJPUiAvIE9OIEVNUFRZIGJlaGF2aW9ycyBvZiBKU09O X1ZBTFVFKCksCisgKgkJSlNPTl9RVUVSWSgpLCBhbmQgSlNPTl9FWElTVFMoKQorICoKKyAqICdl eHByJyBpcyB0aGUgZXhwcmVzc2lvbiB0byBlbWl0IHdoZW4gYSBnaXZlbiBiZWhhdmlvciAoRU1Q VFkgb3IgRVJST1IpCisgKiBvY2N1cnMgb24gZXZhbHVhdGluZyB0aGUgU1FML0pTT04gcXVlcnkg ZnVuY3Rpb24uICAnY29lcmNpb24nIGlzIHNldAorICogaWYgJ2V4cHInIGlzbid0IGFscmVhZHkg b2YgdGhlIGV4cGVjdGVkIHRhcmdldCB0eXBlIGdpdmVuIGJ5CisgKiBKc29uRXhwci5yZXR1cm5p bmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25CZWhhdmlvcgoreworCU5vZGVUYWcJCXR5cGU7 CisKKwlKc29uQmVoYXZpb3JUeXBlIGJ0eXBlOworCU5vZGUJICAgKmV4cHI7CisJSnNvbkNvZXJj aW9uICpjb2VyY2lvbjsJCS8qIHRvIGNvZXJjZSBiZWhhdmlvciBleHByZXNzaW9uIHdoZW4gdGhl cmUgaXMKKwkJCQkJCQkJICogbm8gY2FzdCB0byB0aGUgdGFyZ2V0IHR5cGUgKi8KKwlpbnQJCQls b2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25C ZWhhdmlvcjsKKworLyoKKyAqIEpzb25FeHByIC0KKyAqCQlUcmFuc2Zvcm1lZCByZXByZXNlbnRh dGlvbiBvZiBKU09OX1ZBTFVFKCksIEpTT05fUVVFUlkoKSwgYW5kCisgKgkJSlNPTl9FWElTVFMo KQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uRXhwcgoreworCUV4cHIJCXhwcjsKKworCS8qIEpT T05fKiBmdW5jdGlvbiBpZGVudGlmaWVyICovCisJSnNvbkV4cHJPcAlvcDsKKworCS8qIGpzb24o YiktdmFsdWVkIGV4cHJlc3Npb24gdG8gcXVlcnkgKi8KKwlOb2RlCSAgICpmb3JtYXR0ZWRfZXhw cjsKKworCS8qIEZvcm1hdCBvZiB0aGUgYWJvdmUgZXhwcmVzc2lvbiBuZWVkZWQgYnkgcnVsZXV0 aWxzLmMgKi8KKwlKc29uRm9ybWF0ICpmb3JtYXQ7CisKKwkvKiBqc29wYXRoLXZhbHVlZCBleHBy ZXNzaW9uIGNvbnRhaW5pbmcgdGhlIHF1ZXJ5IHBhdHRlcm4gKi8KKwlOb2RlCSAgICpwYXRoX3Nw ZWM7CisKKwkvKiBFeHBlY3RlZCB0eXBlL2Zvcm1hdCBvZiB0aGUgb3V0cHV0LiAqLworCUpzb25S ZXR1cm5pbmcgKnJldHVybmluZzsKKworCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBQQVNTSU5H IGFyZ3VtZW50IGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqcGFzc2luZ19uYW1lczsKKwlMaXN0 CSAgICpwYXNzaW5nX3ZhbHVlczsKKworCS8qIFVzZS1zcGVjaWZpZWQgb3IgZGVmYXVsdCBPTiBF TVBUWSBhbmQgT04gRVJST1IgYmVoYXZpb3JzICovCisJSnNvbkJlaGF2aW9yICpvbl9lbXB0eTsK KwlKc29uQmVoYXZpb3IgKm9uX2Vycm9yOworCisJLyoKKwkgKiBFeHByZXNzaW9uIHRvIGNvbnZl cnQgdGhlIHJlc3VsdCBvZiBKU09OXyogZnVuY3Rpb24gdG8gdGhlCisJICogUkVUVVJOSU5HIHR5 cGUKKwkgKi8KKwlOb2RlCSAgICpyZXN1bHRfY29lcmNpb247CisKKwkvKgorCSAqIExpc3Qgb2Yg ZXhwcmVzc2lvbnMgZm9yIGNvZXJjaW5nIEpTT05fVkFMVUUoKSByZXN1bHQgdmFsdWVzLCBjb250 YWluaW5nCisJICogb25lIGVsZW1lbnQgZm9yIGV2ZXJ5IEpzb25JdGVtVHlwZS4KKwkgKi8KKwlM aXN0CSAgICppdGVtX2NvZXJjaW9uczsKKworCS8qIFdSQVBQRVIgc3BlY2lmaWNhdGlvbiBmb3Ig SlNPTl9RVUVSWSAqLworCUpzb25XcmFwcGVyIHdyYXBwZXI7CisKKwkvKiBLRUVQIG9yIE9NSVQg UVVPVEVTIGZvciBzaW5nbGV0b24gc2NhbGFycyByZXR1cm5lZCBieSBKU09OX1FVRVJZKCkgKi8K Kwlib29sCQlvbWl0X3F1b3RlczsKKworCS8qIE9yaWdpbmFsIEpzb25GdW5jRXhwcidzIGxvY2F0 aW9uICovCisJaW50CQkJbG9jYXRpb247Cit9IEpzb25FeHByOworCiAvKiAtLS0tLS0tLS0tLS0t LS0tCiAgKiBOdWxsVGVzdAogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xp c3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCAyMzMxYWNhYzA5Li45NGUx Y2I0ZGNlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3Jj L2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC05Myw2ICs5Myw3IEBAIFBHX0tFWVdPUkQoImNv bW1pdCIsIENPTU1JVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgiY29tbWl0dGVkIiwgQ09NTUlUVEVELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJjb21wcmVzc2lvbiIsIENPTVBSRVNTSU9OLCBVTlJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJjb25jdXJyZW50bHkiLCBDT05DVVJSRU5UTFks IFRZUEVfRlVOQ19OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJjb25kaXRp b25hbCIsIENPTkRJVElPTkFMLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJjb25maWd1cmF0aW9uIiwgQ09ORklHVVJBVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29uZmxpY3QiLCBDT05GTElDVCwgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiY29ubmVjdGlvbiIsIENPTk5FQ1RJ T04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTE0NywxMSArMTQ4LDEzIEBA IFBHX0tFWVdPUkQoImRvdWJsZSIsIERPVUJMRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJkcm9wIiwgRFJPUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgiZWFjaCIsIEVBQ0gsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKIFBHX0tFWVdPUkQoImVsc2UiLCBFTFNFLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQorUEdfS0VZV09SRCgiZW1wdHkiLCBFTVBUWV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbmFibGUiLCBFTkFCTEVfUCwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5jb2RpbmciLCBFTkNPRElORywgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5jcnlwdGVkIiwgRU5D UllQVEVELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJlbmQi LCBFTkRfUCwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVudW0i LCBFTlVNX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImVy cm9yIiwgRVJST1JfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09S RCgiZXNjYXBlIiwgRVNDQVBFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJldmVudCIsIEVWRU5ULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJleGNlcHQiLCBFWENFUFQsIFJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQpA QCAtMjMzLDEwICsyMzYsMTQgQEAgUEdfS0VZV09SRCgiam9pbiIsIEpPSU4sIFRZUEVfRlVOQ19O QU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uIiwgSlNPTiwgQ09MX05B TUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fYXJyYXkiLCBKU09OX0FS UkFZLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9hcnJh eWFnZyIsIEpTT05fQVJSQVlBR0csIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19L RVlXT1JEKCJqc29uX2V4aXN0cyIsIEpTT05fRVhJU1RTLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgianNvbl9vYmplY3QiLCBKU09OX09CSkVDVCwgQ09MX05BTUVf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImpzb25fb2JqZWN0YWdnIiwgSlNPTl9P QkpFQ1RBR0csIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJqc29u X3F1ZXJ5IiwgSlNPTl9RVUVSWSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImpzb25fc2NhbGFyIiwgSlNPTl9TQ0FMQVIsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX3NlcmlhbGl6ZSIsIEpTT05fU0VSSUFMSVpFLCBDT0xf TkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl92YWx1ZSIsIEpTT05f VkFMVUUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJrZWVwIiwg S0VFUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgia2V5Iiwg S0VZLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJrZXlzIiwg S0VZUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibGFiZWwi LCBMQUJFTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAtMzAyLDYgKzMwOSw3 IEBAIFBHX0tFWVdPUkQoIm9mZiIsIE9GRiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgib2Zmc2V0IiwgT0ZGU0VULCBSRVNFUlZFRF9LRVlXT1JELCBBU19MQUJF TCkKIFBHX0tFWVdPUkQoIm9pZHMiLCBPSURTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJvbGQiLCBPTEQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKK1BHX0tFWVdPUkQoIm9taXQiLCBPTUlULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJvbiIsIE9OLCBSRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBH X0tFWVdPUkQoIm9ubHkiLCBPTkxZLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgib3BlcmF0b3IiLCBPUEVSQVRPUiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQpAQCAtMzQ0LDYgKzM1Miw3IEBAIFBHX0tFWVdPUkQoInByb2NlZHVyZXMiLCBQUk9DRURV UkVTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwcm9ncmFt IiwgUFJPR1JBTSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi cHVibGljYXRpb24iLCBQVUJMSUNBVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgicXVvdGUiLCBRVU9URSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQorUEdfS0VZV09SRCgicXVvdGVzIiwgUVVPVEVTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyYW5nZSIsIFJBTkdFLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZWFkIiwgUkVBRCwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVhbCIsIFJFQUwsIENPTF9OQU1FX0tFWVdPUkQs IEJBUkVfTEFCRUwpCkBAIC00MTQsNiArNDIzLDcgQEAgUEdfS0VZV09SRCgic3Rkb3V0IiwgU1RE T1VULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzdG9yYWdl IiwgU1RPUkFHRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi c3RvcmVkIiwgU1RPUkVELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJzdHJpY3QiLCBTVFJJQ1RfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQor UEdfS0VZV09SRCgic3RyaW5nIiwgU1RSSU5HX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoInN0cmlwIiwgU1RSSVBfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgic3Vic2NyaXB0aW9uIiwgU1VCU0NSSVBUSU9OLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzdWJzdHJpbmciLCBTVUJT VFJJTkcsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC00NDksNiArNDU5LDcgQEAg UEdfS0VZV09SRCgidHlwZXMiLCBUWVBFU19QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJ1ZXNjYXBlIiwgVUVTQ0FQRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgidW5ib3VuZGVkIiwgVU5CT1VOREVELCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmNvbW1pdHRlZCIsIFVOQ09NTUlU VEVELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJ1bmNvbmRp dGlvbmFsIiwgVU5DT05ESVRJT05BTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgidW5lbmNyeXB0ZWQiLCBVTkVOQ1JZUFRFRCwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgidW5pb24iLCBVTklPTiwgUkVTRVJWRURfS0VZV09S RCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJ1bmlxdWUiLCBVTklRVUUsIFJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5n LmggYi9zcmMvaW5jbHVkZS91dGlscy9mb3JtYXR0aW5nLmgKaW5kZXggN2VhMWE3MGY3MS4uY2Rl MDMwNDE0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2Zvcm1hdHRpbmcuaApAQCAtMjksNSArMjksNiBAQCBleHRlcm4g Y2hhciAqYXNjX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7CiBleHRl cm4gRGF0dW0gcGFyc2VfZGF0ZXRpbWUodGV4dCAqZGF0ZV90eHQsIHRleHQgKmZtdCwgT2lkIGNv bGxpZCwgYm9vbCBzdHJpY3QsCiAJCQkJCQkJT2lkICp0eXBpZCwgaW50MzIgKnR5cG1vZCwgaW50 ICp0eiwKIAkJCQkJCQlzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKK2V4dGVybiBib29sIGRhdGV0 aW1lX2Zvcm1hdF9oYXNfdHooY29uc3QgY2hhciAqZm10X3N0cik7CiAKICNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25i LmgKaW5kZXggZTM4ZGZkNDkwMS4uZDU4OWFjZTVhMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvanNvbmIuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCkBAIC00MjIsNiAr NDIyLDcgQEAgZXh0ZXJuIGNoYXIgKkpzb25iVG9DU3RyaW5nKFN0cmluZ0luZm8gb3V0LCBKc29u YkNvbnRhaW5lciAqaW4sCiAJCQkJCQkJaW50IGVzdGltYXRlZF9sZW4pOwogZXh0ZXJuIGNoYXIg Kkpzb25iVG9DU3RyaW5nSW5kZW50KFN0cmluZ0luZm8gb3V0LCBKc29uYkNvbnRhaW5lciAqaW4s CiAJCQkJCQkJCSAgaW50IGVzdGltYXRlZF9sZW4pOworZXh0ZXJuIGNoYXIgKkpzb25iVW5xdW90 ZShKc29uYiAqamIpOwogZXh0ZXJuIGJvb2wgSnNvbmJFeHRyYWN0U2NhbGFyKEpzb25iQ29udGFp bmVyICpqYmMsIEpzb25iVmFsdWUgKnJlcyk7CiBleHRlcm4gY29uc3QgY2hhciAqSnNvbmJUeXBl TmFtZShKc29uYlZhbHVlICp2YWwpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9q c29uZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oCmluZGV4IDk0Y2I2ZWRj OGYuLjE5MGUxMzI4NGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oCkBAIC04OSw0ICs4OSwxMCBAQCBl eHRlcm4gRGF0dW0gZGF0dW1fdG9fanNvbmIoRGF0dW0gdmFsLCBKc29uVHlwZUNhdGVnb3J5IHRj YXRlZ29yeSwKIAkJCQkJCQlPaWQgb3V0ZnVuY29pZCk7CiBleHRlcm4gRGF0dW0ganNvbmJfZnJv bV90ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKTsKIAorZXh0ZXJuIERhdHVtIGpzb25f cG9wdWxhdGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwKKwkJCQkJCQkJT2lk IHR5cGlkLCBpbnQzMiB0eXBtb2QsCisJCQkJCQkJCXZvaWQgKipjYWNoZSwgTWVtb3J5Q29udGV4 dCBtY3h0LAorCQkJCQkJCQlib29sICppc251bGwsCisJCQkJCQkJCU5vZGUgKmVzY29udGV4dCk7 CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKaW5kZXggNmVhYmRjZmI3NS4uODk3ZGUyMWE1MSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9qc29ucGF0aC5oCkBAIC0xOTIsNiArMTkyLDcgQEAgZXh0ZXJuIGJvb2wganNwR2V0 Qm9vbChKc29uUGF0aEl0ZW0gKnYpOwogZXh0ZXJuIGNoYXIgKmpzcEdldFN0cmluZyhKc29uUGF0 aEl0ZW0gKnYsIGludDMyICpsZW4pOwogZXh0ZXJuIGJvb2wganNwR2V0QXJyYXlTdWJzY3JpcHQo SnNvblBhdGhJdGVtICp2LCBKc29uUGF0aEl0ZW0gKmZyb20sCiAJCQkJCQkJCSBKc29uUGF0aEl0 ZW0gKnRvLCBpbnQgaSk7CitleHRlcm4gYm9vbCBqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgs IExpc3QgKnZhcm5hbWVzLCBMaXN0ICp2YXJleHBycyk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpq c3BPcGVyYXRpb25OYW1lKEpzb25QYXRoSXRlbVR5cGUgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIgYi9zcmMvaW50ZXJmYWNlcy9l Y3BnL3ByZXByb2MvZWNwZy50cmFpbGVyCmluZGV4IDQzNWMxMzllYzIuLmIyYWE0NGYzNmQgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLnRyYWlsZXIKKysrIGIv c3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcudHJhaWxlcgpAQCAtNjUxLDYgKzY1MSwz NCBAQCB2YXJfdHlwZToJc2ltcGxlX3R5cGUKIAkJCSQkLnR5cGVfaW5kZXggPSBtbV9zdHJkdXAo Ii0xIik7CiAJCQkkJC50eXBlX3NpemVvZiA9IE5VTEw7CiAJCX0KKwkJfCBTVFJJTkdfUAorCQl7 CisJCQlpZiAoSU5GT1JNSVhfTU9ERSkKKwkJCXsKKwkJCQkvKiBJbiBJbmZvcm1peCBtb2RlLCAi c3RyaW5nIiBpcyBhdXRvbWF0aWNhbGx5IGEgdHlwZWRlZiAqLworCQkJCSQkLnR5cGVfZW51bSA9 IEVDUEd0X3N0cmluZzsKKwkJCQkkJC50eXBlX3N0ciA9IG1tX3N0cmR1cCgiY2hhciIpOworCQkJ CSQkLnR5cGVfZGltZW5zaW9uID0gbW1fc3RyZHVwKCItMSIpOworCQkJCSQkLnR5cGVfaW5kZXgg PSBtbV9zdHJkdXAoIi0xIik7CisJCQkJJCQudHlwZV9zaXplb2YgPSBOVUxMOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCS8qIE90aGVyd2lzZSwgbGVnYWwgb25seSBpZiB1c2VyIHR5cGVkZWYn ZWQgaXQgKi8KKwkJCQlzdHJ1Y3QgdHlwZWRlZnMgKnRoaXMgPSBnZXRfdHlwZWRlZigic3RyaW5n IiwgZmFsc2UpOworCisJCQkJJCQudHlwZV9zdHIgPSAodGhpcy0+dHlwZS0+dHlwZV9lbnVtID09 IEVDUEd0X3ZhcmNoYXIgfHwgdGhpcy0+dHlwZS0+dHlwZV9lbnVtID09IEVDUEd0X2J5dGVhKSA/ IEVNUFRZIDogbW1fc3RyZHVwKHRoaXMtPm5hbWUpOworCQkJCSQkLnR5cGVfZW51bSA9IHRoaXMt PnR5cGUtPnR5cGVfZW51bTsKKwkJCQkkJC50eXBlX2RpbWVuc2lvbiA9IHRoaXMtPnR5cGUtPnR5 cGVfZGltZW5zaW9uOworCQkJCSQkLnR5cGVfaW5kZXggPSB0aGlzLT50eXBlLT50eXBlX2luZGV4 OworCQkJCWlmICh0aGlzLT50eXBlLT50eXBlX3NpemVvZiAmJiBzdHJsZW4odGhpcy0+dHlwZS0+ dHlwZV9zaXplb2YpICE9IDApCisJCQkJCSQkLnR5cGVfc2l6ZW9mID0gdGhpcy0+dHlwZS0+dHlw ZV9zaXplb2Y7CisJCQkJZWxzZQorCQkJCQkkJC50eXBlX3NpemVvZiA9IGNhdF9zdHIoMywgbW1f c3RyZHVwKCJzaXplb2YoIiksIG1tX3N0cmR1cCh0aGlzLT5uYW1lKSwgbW1fc3RyZHVwKCIpIikp OworCisJCQkJc3RydWN0X21lbWJlcl9saXN0W3N0cnVjdF9sZXZlbF0gPSBFQ1BHc3RydWN0X21l bWJlcl9kdXAodGhpcy0+c3RydWN0X21lbWJlcl9saXN0KTsKKwkJCX0KKwkJfQogCQl8IElOVEVS VkFMIGVjcGdfaW50ZXJ2YWwKIAkJewogCQkJJCQudHlwZV9lbnVtID0gRUNQR3RfaW50ZXJ2YWw7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5j cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb25fcXVlcnlmdW5jcy5vdXQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZjAyMzgxZGUyNQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9xdWVyeWZ1bmNz Lm91dApAQCAtMCwwICsxLDExNDUgQEAKKy0tIEpTT05fRVhJU1RTCistLSBqc29uIGFyZ3VtZW50 cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorU0VMRUNUIEpTT05fRVhJU1RTKE5VTEwgRk9STUFU IEpTT04sICckJyk7CitFUlJPUjogIEpTT05fRVhJU1RTKCkgaXMgbm90IHlldCBpbXBsZW1lbnRl ZCBmb3IgdGhlIGpzb24gdHlwZQorTElORSAxOiBTRUxFQ1QgSlNPTl9FWElTVFMoTlVMTCBGT1JN QVQgSlNPTiwgJyQnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0hJTlQ6ICBUcnkg Y2FzdGluZyB0aGUgYXJndW1lbnQgdG8ganNvbmIKK1NFTEVDVCBKU09OX0VYSVNUUyhOVUxMOjpq c29uYiwgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbXScsICckJyk7CisganNvbl9leGlzdHMgCistLS0t LS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoSlNPTl9PQkpFQ1Qo UkVUVVJOSU5HIGpzb25iKSwgJyQnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckJyk7CisganNvbl9l eGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMo anNvbmIgJ251bGwnLCAnJCcpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbXScsICckJyk7CisganNvbl9leGlz dHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJzEnLCAnJC5hJyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93 KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScpOyAtLSBGQUxT RSBvbiBlcnJvcgorIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwor U0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIEVSUk9SIE9OIEVSUk9S KTsKK0VSUk9SOiAganNvbnBhdGggbWVtYmVyIGFjY2Vzc29yIGNhbiBvbmx5IGJlIGFwcGxpZWQg dG8gYW4gb2JqZWN0CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ251bGwnLCAnJC5hJyk7Cisg anNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9F WElTVFMoanNvbmIgJ1tdJywgJyQuYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQor IGYKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICdbMSwgImFhYSIsIHsiYSI6 IDF9XScsICdzdHJpY3QgJC5hJyk7IC0tIEZBTFNFIG9uIGVycm9yCisganNvbl9leGlzdHMgCist LS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1sx LCAiYWFhIiwgeyJhIjogMX1dJywgJ2xheCAkLmEnKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0t LS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAne30nLCAnJC5h Jyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJ3siYiI6IDEsICJhIjogMn0nLCAnJC5hJyk7CisganNvbl9leGlz dHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9FWElTVFMoanNv bmIgJzEnLCAnJC5hLmInKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogeyJiIjogMX19JywgJyQuYS5i Jyk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IDEsICJiIjogMn0nLCAnJC5hLmInKTsKKyBqc29uX2V4 aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCBKU09OX0VYSVNUUyhq c29uYiAneyJhIjogMSwgImIiOiAyfScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAxIEFTIHgp OworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNT SU5HICcxJyBBUyB4KTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cp CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLiogPyAo QCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4LCAyIEFTIHkpOworIGpzb25fZXhpc3Rz IAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHggJiYgQCA8ICR5KScgUEFTU0lORyAw IEFTIHgsIDEgQVMgeSk7CisganNvbl9leGlzdHMgCistLS0tLS0tLS0tLS0tCisgZgorKDEgcm93 KQorCistLSBleHRlbnNpb246IGJvb2xlYW4gZXhwcmVzc2lvbnMKK1NFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAnMScsICckID4gMicpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQK KygxIHJvdykKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQuYSA+IDInIEVSUk9S IE9OIEVSUk9SKTsKKyBqc29uX2V4aXN0cyAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisK Ky0tIEpTT05fVkFMVUUKKy0tIGpzb24gYXJndW1lbnRzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVk CitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworRVJST1I6ICBKU09O X1ZBTFVFKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIGpzb24gdHlwZQorTElORSAx OiBTRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworICAgICAgICAgICAg ICAgICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvIGpzb25i CitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywg JyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBpbnQpOworIGpzb25fdmFsdWUg CistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICd0cnVlJywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgdHJ1ZQor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAndHJ1ZScsICckJyBSRVRVUk5JTkcg Ym9vbCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorIDEyMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJF VFVSTklORyBpbnQpICsgMjM0OworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgMzU3Ciso MSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIHRl eHQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAxMjMKKygxIHJvdykKKworLyoganNv bmIgYnl0ZWEgPz8/ICovCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVS TklORyBieXRlYSBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIFNRTC9KU09OIGl0ZW0gY2Fubm90 IGJlIGNhc3QgdG8gdGFyZ2V0IHR5cGUKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxLjIzJywg JyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMS4yMworKDEgcm93KQorCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMS4yMycsICckJyBSRVRVUk5JTkcgaW50KTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKKyBqc29uX3ZhbHVl IAorLS0tLS0tLS0tLS0tCisgICAgICAgMS4yMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworRVJS T1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiMS4yMyIKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorIGFhYQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIHRleHQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBhYWEKKygx IHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBj aGFyKDUpKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgYWFhICAKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDIpKTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgYWEKKygxIHJvdykKKworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uKTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICck JyBSRVRVUk5JTkcganNvbiBFUlJPUiBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorICJhYWEiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIics ICckJyBSRVRVUk5JTkcganNvbmIgRVJST1IgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAiYWFhIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwi YWFhXCIiJywgJyQnIFJFVFVSTklORyBqc29uKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0t CisgIlwiYWFhXCIiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciXCJhYWFc IiInLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg IlwiYWFhXCIiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICck JyBSRVRVUk5JTkcgaW50KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAg IAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJO SU5HIGludCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlIGludGVnZXI6ICJhYWEiCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImFhYSInLCAn JCcgUkVUVVJOSU5HIGludCBERUZBVUxUIDExMSBPTiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAgICAgICAxMTEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJyIxMjMiJywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorICAgICAgMzU3CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMjAx Ny0wMi0yMCInLCAnJCcgUkVUVVJOSU5HIGRhdGUpICsgOTsKKyAgP2NvbHVtbj8gIAorLS0tLS0t LS0tLS0tCisgMDMtMDEtMjAxNworKDEgcm93KQorCistLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1 dGlvbiBpbiBkb21haW4gdHlwZXMKK0NSRUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxs IEFTIGludCBOT1QgTlVMTDsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0t LS0KKyAgICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxs JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwgRVJST1IgT04gRVJST1IpOwor RVJST1I6ICBkb21haW4gc3FsanNvbmJfaW50X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwg dmFsdWVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckJyBSRVRVUk5JTkcgc3Fs anNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CitF UlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRfbm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2 YWx1ZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgICckLmEnIFJFVFVSTklORyBzcWxq c29uYl9pbnRfbm90X251bGwgREVGQVVMVCAyIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKKyBq c29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMgorKDEgcm93KQorCitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9u dWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUik7CisganNvbl92YWx1ZSAK Ky0tLS0tLS0tLS0tLQorICAgICAgICAgICAKKygxIHJvdykKKworQ1JFQVRFIFRZUEUgcmFpbmJv dyBBUyBFTlVNICgncmVkJywgJ29yYW5nZScsICd5ZWxsb3cnLCAnZ3JlZW4nLCAnYmx1ZScsICdw dXJwbGUnKTsKK0NSRUFURSBET01BSU4gcmdiIEFTIHJhaW5ib3cgQ0hFQ0sgKFZBTFVFIElOICgn cmVkJywgJ2dyZWVuJywgJ2JsdWUnKSk7CitTRUxFQ1QgSlNPTl9WQUxVRSgnInB1cnBsZSInOjpq c29uYiwgJ2xheCAkWypdJyBSRVRVUk5JTkcgcmdiKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKCcicHVycGxlIic6Ompzb25iLCAn bGF4ICRbKl0nIFJFVFVSTklORyByZ2IgRVJST1IgT04gRVJST1IpOworRVJST1I6ICB2YWx1ZSBm b3IgZG9tYWluIHJnYiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJyZ2JfY2hlY2siCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0t LS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1tdJywgJyQnIEVSUk9S IE9OIEVSUk9SKTsKK0VSUk9SOiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9WQUxVRSBz aG91bGQgcmV0dXJuIHNpbmdsZXRvbiBzY2FsYXIgaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ3t9JywgJyQnKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7CitFUlJP UjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fVkFMVUUgc2hvdWxkIHJldHVybiBzaW5n bGV0b24gc2NhbGFyIGl0ZW0KK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBqc29u cGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBvYmplY3QKK1NF TEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgJ2Vycm9yJyBP TiBFUlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIGVycm9yCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsK K0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAn bGF4ICQuYScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworRVJST1I6ICBubyBTUUwv SlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdzdHJpY3QgJC5hJyBERUZB VUxUIDIgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIERFRkFVTFQgMiBPTiBF UlJPUik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRVJST1IpOwor IGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJ2xheCAkLmEnIE5VTEwgT04gRU1QVFkgREVGQVVMVCAnMicgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRU1QVFkgREVGQVVM VCAnMycgT04gRVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAyCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZ IERFRkFVTFQgJzMnIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRlbQorU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9S OiAgSlNPTiBwYXRoIGV4cHJlc3Npb24gaW4gSlNPTl9WQUxVRSBzaG91bGQgcmV0dXJuIHNpbmds ZXRvbiBzY2FsYXIgaXRlbQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1sxLDJdJywgJyRbKl0n IERFRkFVTFQgJzAnIE9OIEVSUk9SKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIgIl0nLCAnJFsqXScgUkVUVVJO SU5HIGludCBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlIGludGVnZXI6ICIgIgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJdJywgJyRb Kl0nIFJFVFVSTklORyBpbnQgREVGQVVMVCAyICsgMyBPTiBFUlJPUik7CisganNvbl92YWx1ZSAK Ky0tLS0tLS0tLS0tLQorICAgICAgICAgIDUKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgREVGQVVMVCAyICsgMyBPTiBFUlJP Uik7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siMSJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgRk9S TUFUIEpTT04pOyAtLSBSRVRVUk5JTkcgRk9STUFUIG5vdCBhbGxvd2VkCitFUlJPUjogIGNhbm5v dCBzcGVjaWZ5IEZPUk1BVCBpbiBSRVRVUk5JTkcgY2xhdXNlIG9mIEpTT05fVkFMVUUoKQorTElO RSAxOiAuLi5DVCBKU09OX1ZBTFVFKGpzb25iICdbIjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50 IEZPUk1BVCBKU08uLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxv d2VkCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIHJl Y29yZCk7CitFUlJPUjogIHJldHVybmluZyBwc2V1ZG8tdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBp biBTUUwvSlNPTiBmdW5jdGlvbnMKK1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNvbmIg J3siYSI6IDEsICJiIjogMn0nLAorCQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBBUyB4CisJ CVJFVFVSTklORyBpbnQKKwkJREVGQVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxUIC0yIE9OIEVS Uk9SCisJKSB5CitGUk9NCisJZ2VuZXJhdGVfc2VyaWVzKDAsIDIpIHg7CisgeCB8IHkgIAorLS0t Ky0tLS0KKyAwIHwgLTIKKyAxIHwgIDIKKyAyIHwgLTEKKygzIHJvd3MpCisKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSk7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICgxLDIpCisoMSByb3cpCisKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMg YSBSRVRVUk5JTkcgcG9pbnQpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAoMSwyKQor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBw b2ludCAnICgxLCAyICknIEFTIGEgUkVUVVJOSU5HIHBvaW50IEVSUk9SIE9OIEVSUk9SKTsKKyBq c29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgKDEsMikKKygxIHJvdykKKworLS0gVGVzdCBQQVNT SU5HIGFuZCBSRVRVUk5JTkcgZGF0ZS90aW1lIHR5cGVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYg KzEwJyBBUyB0cyk7CisgICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFR1ZSBGZWIgMjAgMTg6MzQ6NTYgMjAxOCBQU1QKKygxIHJv dykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVz dGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFt cHR6KTsKKyAgICAgICAgICBqc29uX3ZhbHVlICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgVHVlIEZlYiAyMCAxODozNDo1NiAyMDE4IFBTVAorKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHog JzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKKyAg ICAgICAganNvbl92YWx1ZSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFR1 ZSBGZWIgMjAgMTg6MzQ6NTYgMjAxOAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckdHMnIFBBU1NJTkcgZGF0ZSAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFT IHRzIFJFVFVSTklORyBkYXRlKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMDItMjEt MjAxOAorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBB U1NJTkcgdGltZSAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1l KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgMTI6MzQ6NTYKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWV0eiAnMjAxOC0w Mi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyB0aW1ldHopOworIGpzb25fdmFsdWUg IAorLS0tLS0tLS0tLS0tLQorIDEyOjM0OjU2KzEwCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXAgJzIwMTgtMDItMjEgMTI6 MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKKyAgICAgICAganNvbl92YWx1 ZSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdlZCBGZWIgMjEgMTI6MzQ6 NTYgMjAxOAorKDEgcm93KQorCistLSBBbHNvIHRlc3QgUkVUVVJOSU5HIGpzb25bYl0KK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzIFJFVFVSTklORyBqc29uKTsKKyAgICAgICAgIGpz b25fdmFsdWUgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4 LTAyLTIxVDAyOjM0OjU2KzAwOjAwIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYg KzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOworICAgICAgICAganNvbl92YWx1ZSAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIjIwMTgtMDItMjFUMDI6MzQ6NTYr MDA6MDAiCisoMSByb3cpCisKKy0tIEpTT05fUVVFUlkKKy0tIGpzb24gYXJndW1lbnRzIGN1cnJl bnRseSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAn JCcpOworRVJST1I6ICBKU09OX1FVRVJZKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhl IGpzb24gdHlwZQorTElORSAxOiBTRUxFQ1QgSlNPTl9RVUVSWShOVUxMIEZPUk1BVCBKU09OLCAn JCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICBeCitISU5UOiAgVHJ5IGNhc3RpbmcgdGhl IGFyZ3VtZW50IHRvIGpzb25iCitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsK KyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVAorCUpTT05f UVVFUlkoanMsICckJyksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEhPVVQgV1JBUFBFUiksCisJ SlNPTl9RVUVSWShqcywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiksCisJSlNPTl9RVUVS WShqcywgJyQnIFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBXUkFQUEVSKSwKKwlKU09OX1FVRVJZ KGpzLCAnJCcgV0lUSCBBUlJBWSBXUkFQUEVSKQorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICdu dWxsJyksCisJCSgnMTIuMycpLAorCQkoJ3RydWUnKSwKKwkJKCciYWFhIicpLAorCQkoJ1sxLCBu dWxsLCAiMiJdJyksCisJCSgneyJhIjogMSwgImIiOiBbMl19JykKKwkpIGZvbyhqcyk7CisgICAg IGpzb25fcXVlcnkgICAgIHwgICAgIGpzb25fcXVlcnkgICAgIHwgICAgIGpzb25fcXVlcnkgICAg IHwgICAgICBqc29uX3F1ZXJ5ICAgICAgfCAgICAgIGpzb25fcXVlcnkgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG51bGwgICAgICAg ICAgICAgICB8IG51bGwgICAgICAgICAgICAgICB8IFtudWxsXSAgICAgICAgICAgICB8IFtudWxs XSAgICAgICAgICAgICAgIHwgW251bGxdCisgMTIuMyAgICAgICAgICAgICAgIHwgMTIuMyAgICAg ICAgICAgICAgIHwgWzEyLjNdICAgICAgICAgICAgIHwgWzEyLjNdICAgICAgICAgICAgICAgfCBb MTIuM10KKyB0cnVlICAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgICAgICAgfCBbdHJ1ZV0g ICAgICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICAgICAgICB8IFt0cnVlXQorICJhYWEiICAgICAg ICAgICAgICB8ICJhYWEiICAgICAgICAgICAgICB8IFsiYWFhIl0gICAgICAgICAgICB8IFsiYWFh Il0gICAgICAgICAgICAgIHwgWyJhYWEiXQorIFsxLCBudWxsLCAiMiJdICAgICB8IFsxLCBudWxs LCAiMiJdICAgICB8IFsxLCBudWxsLCAiMiJdICAgICB8IFtbMSwgbnVsbCwgIjIiXV0gICAgIHwg W1sxLCBudWxsLCAiMiJdXQorIHsiYSI6IDEsICJiIjogWzJdfSB8IHsiYSI6IDEsICJiIjogWzJd fSB8IHsiYSI6IDEsICJiIjogWzJdfSB8IFt7ImEiOiAxLCAiYiI6IFsyXX1dIHwgW3siYSI6IDEs ICJiIjogWzJdfV0KKyg2IHJvd3MpCisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICdzdHJpY3Qg JFsqXScpIEFTICJ1bnNwZWMiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSE9V VCBXUkFQUEVSKSBBUyAid2l0aG91dCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBX SVRIIENPTkRJVElPTkFMIFdSQVBQRVIpIEFTICJ3aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMs ICdzdHJpY3QgJFsqXScgV0lUSCBVTkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRo IHVuY29uZCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQ RVIpIEFTICJ3aXRoIgorRlJPTQorCShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgnW10nKSwK KwkJKCdbbnVsbF0nKSwKKwkJKCdbMTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJd JyksCisJCSgnW1sxLCAyLCAzXV0nKSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScpLAorCQko J1sxLCAiMiIsIG51bGwsIFszXV0nKQorCSkgZm9vKGpzKTsKKyAgICAgICB1bnNwZWMgICAgICAg fCAgICAgIHdpdGhvdXQgICAgICAgfCAgICAgIHdpdGggY29uZCAgICAgIHwgICAgIHdpdGggdW5j b25kICAgICAgfCAgICAgICAgIHdpdGggICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgfCAKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAKKyBudWxsICAgICAgICAgICAg ICAgfCBudWxsICAgICAgICAgICAgICAgfCBbbnVsbF0gICAgICAgICAgICAgIHwgW251bGxdICAg ICAgICAgICAgICAgfCBbbnVsbF0KKyAxMi4zICAgICAgICAgICAgICAgfCAxMi4zICAgICAgICAg ICAgICAgfCBbMTIuM10gICAgICAgICAgICAgIHwgWzEyLjNdICAgICAgICAgICAgICAgfCBbMTIu M10KKyB0cnVlICAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgICAgICAgfCBbdHJ1ZV0gICAg ICAgICAgICAgIHwgW3RydWVdICAgICAgICAgICAgICAgfCBbdHJ1ZV0KKyAiYWFhIiAgICAgICAg ICAgICAgfCAiYWFhIiAgICAgICAgICAgICAgfCBbImFhYSJdICAgICAgICAgICAgIHwgWyJhYWEi XSAgICAgICAgICAgICAgfCBbImFhYSJdCisgWzEsIDIsIDNdICAgICAgICAgIHwgWzEsIDIsIDNd ICAgICAgICAgIHwgWzEsIDIsIDNdICAgICAgICAgICB8IFtbMSwgMiwgM11dICAgICAgICAgIHwg W1sxLCAyLCAzXV0KKyB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7ImEiOiAxLCAiYiI6IFsyXX0gfCB7 ImEiOiAxLCAiYiI6IFsyXX0gIHwgW3siYSI6IDEsICJiIjogWzJdfV0gfCBbeyJhIjogMSwgImIi OiBbMl19XQorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8IFsxLCAi MiIsIG51bGwsIFszXV0gfCBbMSwgIjIiLCBudWxsLCBbM11dICB8IFsxLCAiMiIsIG51bGwsIFsz XV0KKyg5IHJvd3MpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgdGV4dCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBL RUVQIFFVT1RFUyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJhYWEiCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgdGV4dCBL RUVQIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgImFhYSIKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQn IFJFVFVSTklORyB0ZXh0IE9NSVQgUVVPVEVTKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0t CisgYWFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBS RVRVUk5JTkcgdGV4dCBPTUlUIFFVT1RFUyBPTiBTQ0FMQVIgU1RSSU5HKTsKKyBqc29uX3F1ZXJ5 IAorLS0tLS0tLS0tLS0tCisgYWFhCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICciYWFhIicsICckJyBPTUlUIFFVT1RFUyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFs aWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGpzb24KK0RFVEFJTDogIFRva2VuICJhYWEiIGlzIGlu dmFsaWQuCitDT05URVhUOiAgSlNPTiBkYXRhLCBsaW5lIDE6IGFhYQorU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uIE9NSVQgUVVPVEVTIEVSUk9SIE9O IEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUganNvbgorREVU QUlMOiAgVG9rZW4gImFhYSIgaXMgaW52YWxpZC4KK0NPTlRFWFQ6ICBKU09OIGRhdGEsIGxpbmUg MTogYWFhCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGJ5 dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5 IAorLS0tLS0tLS0tLS0tCisgXHg2MTYxNjEKKygxIHJvdykKKworLS0gUVVPVEVTIGJlaGF2aW9y IHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVzZWQ6CistLSBTaG91 bGQgZmFpbAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIg T01JVCBRVU9URVMpOworRVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3Qg YmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIFdSQVBQRVIgT01JVCBRVU9URVMpLi4uCisg ICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEgg V1JBUFBFUiBLRUVQIFFVT1RFUyk7CitFUlJPUjogIFNRTC9KU09OIFFVT1RFUyBiZWhhdmlvciBt dXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZAorTElORSAxOiBT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzFdJywgJyQnIFdJVEggV1JBUFBFUiBLRUVQIFFVT1RF UykuLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAn JCcgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKK0VSUk9SOiAgU1FML0pT T04gUVVPVEVTIGJlaGF2aW9yIG11c3Qgbm90IGJlIHNwZWNpZmllZCB3aGVuIFdJVEggV1JBUFBF UiBpcyB1c2VkCitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMV0nLCAnJCcgV0lU SCBDT05ESVRJT05BTCBXUkFQUEVSIC4uLgorICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05f UVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgT01JVCBRVU9U RVMpOworRVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3QgYmUgc3BlY2lm aWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlko anNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgLi4uCisgICAgICAgICAg ICAgICBeCistLSBTaG91bGQgc3VjY2VlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScs ICckJyBXSVRIT1VUIFdSQVBQRVIgT01JVCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0t LS0tLS0KKyBbMV0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICck JyBXSVRIT1VUIFdSQVBQRVIgS0VFUCBRVU9URVMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0t LS0KKyBbMV0KKygxIHJvdykKKworLS0gdGVzdCBRVU9URVMgYmVoYXZpb3IuCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRb XSBvbWl0IHF1b3Rlcyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHsxLDIsM30KKygx IHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiezEsMiwzfSJ9JywgJyQu cmVjJyByZXR1cm5pbmcgaW50W10ga2VlcCBxdW90ZXMpOworIGpzb25fcXVlcnkgCistLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiezEs MiwzfSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50W10ga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJy b3IpOworRVJST1I6ICBleHBlY3RlZCBKU09OIGFycmF5CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u Yid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1cm5pbmcgaW50NHJhbmdlIG9taXQgcXVv dGVzKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsMykKKygxIHJvdykKKworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgcmV0dXJuaW5n IGludDRyYW5nZSBrZWVwIHF1b3Rlcyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQu cmVjJyAJcmV0dXJuaW5nIGludDRyYW5nZSBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcik7CitF UlJPUjogIG1hbGZvcm1lZCByYW5nZSBsaXRlcmFsOiAiIlsxLDJdIiIKK0RFVEFJTDogIE1pc3Np bmcgbGVmdCBwYXJlbnRoZXNpcyBvciBicmFja2V0LgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1tdJywgJyRbKl0nKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBOVUxMIE9OIEVNUFRZKTsKKyBq c29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbXScsICckWypdJyBFTVBUWSBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0t LS0tLS0tLQorIFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICck WypdJyBFTVBUWSBBUlJBWSBPTiBFTVBUWSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQor IFtdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFTVBU WSBPQkpFQ1QgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyB7fQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1Q VFkpOworRVJST1I6ICBubyBTUUwvSlNPTiBpdGVtCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRU1QVFkpOworIGpzb25fcXVlcnkgCist LS0tLS0tLS0tLS0KKyAiZW1wdHkiCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBOVUxMIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8g U1FML0pTT04gaXRlbQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9S IE9OIEVNUFRZIEVNUFRZIEFSUkFZIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8gU1FML0pTT04gaXRl bQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVN UFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJP Uik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb XScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBFUlJPUiBPTiBFUlJPUik7CitF UlJPUjogIEpTT04gcGF0aCBleHByZXNzaW9uIGluIEpTT05fUVVFUlkgc2hvdWxkIHJldHVybiBz aW5nbGV0b24gaXRlbSB3aXRob3V0IHdyYXBwZXIKK0hJTlQ6ICBVc2UgV0lUSCBXUkFQUEVSIGNs YXVzZSB0byB3cmFwIFNRTC9KU09OIGl0ZW0gc2VxdWVuY2UgaW50byBhcnJheS4KK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBPTiBFUlJP Uik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorICJlbXB0eSIKKygxIHJvdykKKworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBqc29uKTsKKyBqc29u X3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbiBGT1JNQVQgSlNPTik7CisganNv bl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLCAyXQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGpzb25iKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdbMSwyXScsICckJyBSRVRVUk5JTkcganNvbmIgRk9STUFUIEpTT04pOworIGpzb25fcXVlcnkg CistLS0tLS0tLS0tLS0KKyBbMSwgMl0KKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyB0ZXh0KTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0t LS0tCisgWzEsIDJdCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScs ICckJyBSRVRVUk5JTkcgY2hhcigxMCkpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBb MSwgMl0gICAgCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICck JyBSRVRVUk5JTkcgY2hhcigzKSk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxLAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5H IHRleHQgRk9STUFUIEpTT04pOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyBbMSwgMl0K KygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklO RyBieXRlYSk7CisgICBqc29uX3F1ZXJ5ICAgCistLS0tLS0tLS0tLS0tLS0tCisgXHg1YjMxMmMy MDMyNWQKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQnIFJF VFVSTklORyBieXRlYSBGT1JNQVQgSlNPTik7CisgICBqc29uX3F1ZXJ5ICAgCistLS0tLS0tLS0t LS0tLS0tCisgXHg1YjMxMmMyMDMyNWQKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBUWSBPQkpFQ1QgT04gRVJST1Ip OworRVJST1I6ICBjYW5ub3QgY2FzdCBiZWhhdmlvciBleHByZXNzaW9uIG9mIHR5cGUganNvbmIg dG8gYnl0ZWEKK0xJTkUgMTogLi4uIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJF VFVSTklORyBieXRlYSBFTVBUWSBPQkpFLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpF Q1QgT04gRVJST1IpOworRVJST1I6ICBjYW5ub3QgY2FzdCBiZWhhdmlvciBleHByZXNzaW9uIG9m IHR5cGUganNvbmIgdG8gYnl0ZWEKK0xJTkUgMTogLi4uanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJF VFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpFLi4uCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpT T05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uIEVNUFRZIE9CSkVD VCBPTiBFUlJPUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIHt9CisoMSByb3cpCisK K1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBSRVRVUk5JTkcganNvbmIg RU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisge30K KygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0nIFJFVFVS TklORyBiaWdpbnRbXSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOworRVJST1I6ICBjYW5ub3QgY2Fz dCBiZWhhdmlvciBleHByZXNzaW9uIG9mIHR5cGUganNvbmIgdG8gYmlnaW50W10KK0xJTkUgMTog Li4uT05fUVVFUlkoanNvbmIgJ1szLDRdJywgJyRbKl0nIFJFVFVSTklORyBiaWdpbnRbXSBFTVBU WSBPQkpFLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJbMyw0XSInLCAnJFsq XScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIGNh bm5vdCBjYXN0IGJlaGF2aW9yIGV4cHJlc3Npb24gb2YgdHlwZSBqc29uYiB0byBiaWdpbnRbXQor TElORSAxOiAuLi5fUVVFUlkoanNvbmIgJyJbMyw0XSInLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2lu dFtdIEVNUFRZIE9CSkUuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBh bGxvd2VkCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5H IGFueWFycmF5IEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitFUlJPUjogIHJldHVybmluZyBwc2V1 ZG8tdHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiBTUUwvSlNPTiBmdW5jdGlvbnMKK1NFTEVDVAor CXgsIHksCisJSlNPTl9RVUVSWSgKKwkJanNvbmIgJ1sxLDIsMyw0LDUsbnVsbF0nLAorCQknJFsq XSA/IChAID49ICR4ICYmIEAgPD0gJHkpJworCQlQQVNTSU5HIHggQVMgeCwgeSBBUyB5CisJCVdJ VEggQ09ORElUSU9OQUwgV1JBUFBFUgorCQlFTVBUWSBBUlJBWSBPTiBFTVBUWQorCSkgbGlzdAor RlJPTQorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB4LAorCWdlbmVyYXRlX3NlcmllcygwLCA0KSB5 OworIHggfCB5IHwgICAgIGxpc3QgICAgIAorLS0tKy0tLSstLS0tLS0tLS0tLS0tLQorIDAgfCAw IHwgW10KKyAwIHwgMSB8IFsxXQorIDAgfCAyIHwgWzEsIDJdCisgMCB8IDMgfCBbMSwgMiwgM10K KyAwIHwgNCB8IFsxLCAyLCAzLCA0XQorIDEgfCAwIHwgW10KKyAxIHwgMSB8IFsxXQorIDEgfCAy IHwgWzEsIDJdCisgMSB8IDMgfCBbMSwgMiwgM10KKyAxIHwgNCB8IFsxLCAyLCAzLCA0XQorIDIg fCAwIHwgW10KKyAyIHwgMSB8IFtdCisgMiB8IDIgfCBbMl0KKyAyIHwgMyB8IFsyLCAzXQorIDIg fCA0IHwgWzIsIDMsIDRdCisgMyB8IDAgfCBbXQorIDMgfCAxIHwgW10KKyAzIHwgMiB8IFtdCisg MyB8IDMgfCBbM10KKyAzIHwgNCB8IFszLCA0XQorIDQgfCAwIHwgW10KKyA0IHwgMSB8IFtdCisg NCB8IDIgfCBbXQorIDQgfCAzIHwgW10KKyA0IHwgNCB8IFs0XQorKDI1IHJvd3MpCisKKy0tIHJl Y29yZCB0eXBlIHJldHVybmluZyB3aXRoIHF1b3RlcyBiZWhhdmlvci4KK0NSRUFURSBUWVBFIGNv bXBfYWJjIEFTIChhIHRleHQsIGIgaW50LCBjIHRpbWVzdGFtcCk7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYid7InJlYyI6ICIoYWJjLDQyLDAxLjAyLjIwMDMpIn0nLCAnJC5yZWMnIHJldHVybmlu ZyBjb21wX2FiYyBvbWl0IHF1b3Rlcyk7CisgICAgICAgICAgICAganNvbl9xdWVyeSAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKGFiYyw0Miwi VGh1IEphbiAwMiAwMDowMDowMCAyMDAzIikKKygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlko anNvbmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4yMDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcg Y29tcF9hYmMga2VlcCBxdW90ZXMpOworIGpzb25fcXVlcnkgCistLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiKGFiYyw0MiwwMS4wMi4y MDAzKSJ9JywgJyQucmVjJyByZXR1cm5pbmcgY29tcF9hYmMga2VlcCBxdW90ZXMgZXJyb3Igb24g ZXJyb3IpOworRVJST1I6ICBjYW5ub3QgY2FsbCBwb3B1bGF0ZV9jb21wb3NpdGUgb24gYSBzY2Fs YXIKK0RST1AgVFlQRSBjb21wX2FiYzsKKy0tIEV4dGVuc2lvbjogcmVjb3JkIHR5cGVzIHJldHVy bmluZworQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0LCBqcyBqc29u LCBqYiBqc29uYiwganNhIGpzb25bXSk7CitDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWNhIEFTIChy ZWNhIHNxbGpzb25iX3JlY1tdKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwg ImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBb MSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVj KTsKKyAgICAgICAgICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICgxLGFhYSwiWzEsICIiMiIiLCB7fV0iLCJ7IiJ4IiI6IFsxLCAiIjIiIiwge31dfSIsKQorKDEg cm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwg InQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19 fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjIEVSUk9SIE9OIEVS Uk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImEi CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAi YWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsi YSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjKTsKKyBqc29uX3F1ZXJ5IAor LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FV RVJZKGpzb25iICd7ImpzYSI6ICBbeyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMi OiB7fX0sIDEyM119JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2EpOworICAgICAg ICAgdW5uZXN0ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAxLCAi YiI6IFsiZm9vIl19CisgeyJhIjogMiwgImMiOiB7fX0KKyAxMjMKKygzIHJvd3MpCisKK1NFTEVD VCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpzb25iICd7InJlY2EiOiBbeyJhIjogMSwgInQi OiBbImZvbyIsIFtdXX0sIHsiYSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XX0nLCAnJCcgUkVUVVJO SU5HIHNxbGpzb25iX3JlY2EpKS5yZWNhKTsKKyBhIHwgICAgICB0ICAgICAgfCBqcyB8ICAgICBq YiAgICAgfCBqc2EgCistLS0rLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLSstLS0tLQor IDEgfCBbImZvbyIsIFtdXSB8ICAgIHwgICAgICAgICAgICB8IAorIDIgfCAgICAgICAgICAgICB8 ICAgIHwgW3t9LCB0cnVlXSB8IAorKDIgcm93cykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0sICJq YiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklORyBq c29ucGF0aCk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJq cyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0n LCAnJFswXScgUkVUVVJOSU5HIGpzb25wYXRoIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgc3lu dGF4IGVycm9yIGF0IG9yIG5lYXIgInsiIG9mIGpzb25wYXRoIGlucHV0CistLSBFeHRlbnNpb246 IGFycmF5IHR5cGVzIHJldHVybmluZworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVs bCwiMyJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOworICBqc29uX3F1 ZXJ5ICAKKy0tLS0tLS0tLS0tLS0tCisgezEsMixOVUxMLDN9CisoMSByb3cpCisKK1NFTEVDVCBK U09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsImEiXScsICckWypdJyBSRVRVUk5JTkcgaW50W10g V0lUSCBXUkFQUEVSIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50 YXggZm9yIHR5cGUgaW50ZWdlcjogImEiCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixu dWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CisganNvbl9x dWVyeSAKKy0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdChK U09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgInQiOiBbImZvbyIsIFtdXX0sIHsiYSI6IDIsICJq YiI6IFt7fSwgdHJ1ZV19XScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjW10pKTsKKyBhIHwg ICAgICB0ICAgICAgfCBqcyB8ICAgICBqYiAgICAgfCBqc2EgCistLS0rLS0tLS0tLS0tLS0tLSst LS0tKy0tLS0tLS0tLS0tLSstLS0tLQorIDEgfCBbImZvbyIsIFtdXSB8ICAgIHwgICAgICAgICAg ICB8IAorIDIgfCAgICAgICAgICAgICB8ICAgIHwgW3t9LCB0cnVlXSB8IAorKDIgcm93cykKKwor LS0gRXh0ZW5zaW9uOiBkb21haW4gdHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAneyJhIjogMX0nLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsK KyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgMQorKDEgcm93KQorCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRVUk5JTkcgc3FsanNvbmJf aW50X25vdF9udWxsKTsKKyBqc29uX3F1ZXJ5IAorLS0tLS0tLS0tLS0tCisgICAgICAgICAgIAor KDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRV Uk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgbm8g U1FML0pTT04gaXRlbQorLS0gVGVzdCB0aW1lc3RhbXB0eiBwYXNzaW5nIGFuZCBvdXRwdXQKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAn MjAxOC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKKyAgICAgICAgIGpzb25fcXVlcnkgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICIyMDE4LTAyLTIxVDAyOjM0 OjU2KzAwOjAwIgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICck dHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBS RVRVUk5JTkcganNvbik7CisgICAgICAgICBqc29uX3F1ZXJ5ICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAiMjAxOC0wMi0yMVQwMjozNDo1NiswMDowMCIKKygxIHJv dykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVz dGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb25iKTsK KyAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICIyMDE4LTAyLTIxVDAyOjM0OjU2KzAwOjAwIgorKDEgcm93KQorCistLSBUZXN0IGNv bnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJhaW50cyAoCisJanMgdGV4 dCwKKwlpIGludCwKKwl4IGpzb25iIERFRkFVTFQgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAn JFsqXScgV0lUSCBXUkFQUEVSKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MQor CQlDSEVDSyAoanMgSVMgSlNPTikKKwlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDIK KwkJQ0hFQ0sgKEpTT05fRVhJU1RTKGpzOjpqc29uYiwgJyQuYScgUEFTU0lORyBpICsgNSBBUyBp bnQsIGk6OnRleHQgQVMgdHh0LCBhcnJheVsxLDIsM10gYXMgYXJyKSkKKwlDT05TVFJBSU5UIHRl c3RfanNvbmJfY29uc3RyYWludDMKKwkJQ0hFQ0sgKEpTT05fVkFMVUUoanM6Ompzb25iLCAnJC5h JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJzEyJyBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBp KQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50NAorCQlDSEVDSyAoSlNPTl9RVUVS WShqczo6anNvbmIsICckLmEnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpFQ1Qg T04gRVJST1IpIDwganNvbmIgJ1sxMF0nKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJh aW50NQorCQlDSEVDSyAoSlNPTl9RVUVSWShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBjaGFy KDUpIE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9OIEVNUFRZKSA+ICAnYScgQ09MTEFURSAiQyIp CispOworXGQgdGVzdF9qc29uYl9jb25zdHJhaW50cworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0X2pzb25iX2NvbnN0cmFpbnRzIgor IENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisganMgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgCisgaSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgeCAg ICAgIHwganNvbmIgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgSlNPTl9RVUVSWSgnWzEsIDJd Jzo6anNvbmIsICckWypdJyBSRVRVUk5JTkcganNvbmIgV0lUSCBVTkNPTkRJVElPTkFMIFdSQVBQ RVIpCitDaGVjayBjb25zdHJhaW50czoKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MSIgQ0hF Q0sgKGpzIElTIEpTT04pCisgICAgInRlc3RfanNvbmJfY29uc3RyYWludDIiIENIRUNLIChKU09O X0VYSVNUUyhqczo6anNvbmIsICckLiJhIicgUEFTU0lORyBpICsgNSBBUyBpbnQsIGk6OnRleHQg QVMgdHh0LCBBUlJBWVsxLCAyLCAzXSBBUyBhcnIpKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFp bnQzIiBDSEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVn ZXIgREVGQVVMVCAxMiBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBpKQorICAgICJ0ZXN0X2pz b25iX2NvbnN0cmFpbnQ0IiBDSEVDSyAoSlNPTl9RVUVSWShqczo6anNvbmIsICckLiJhIicgUkVU VVJOSU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpFQ1QgT04gRVJS T1IpIDwgJ1sxMF0nOjpqc29uYikKKyAgICAidGVzdF9qc29uYl9jb25zdHJhaW50NSIgQ0hFQ0sg KEpTT05fUVVFUlkoanM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBjaGFyYWN0ZXIoNSkgT01J VCBRVU9URVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gKCdhJzo6YnBjaGFyIENPTExBVEUgIkMi KSkKKworU0VMRUNUIGNoZWNrX2NsYXVzZQorRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY2hlY2tf Y29uc3RyYWludHMKK1dIRVJFIGNvbnN0cmFpbnRfbmFtZSBMSUtFICd0ZXN0X2pzb25iX2NvbnN0 cmFpbnQlJworT1JERVIgQlkgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoZWNrX2NsYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKEpTT05fUVVFUlkoKGpzKTo6 anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGNoYXJhY3Rlcig1KSBPTUlUIFFVT1RFUyBFTVBUWSBB UlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpicGNoYXIgQ09MTEFURSAiQyIpKQorIChKU09OX1FVRVJZ KChqcyk6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBqc29uYiBXSVRIIENPTkRJVElPTkFMIFdS QVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8ICdbMTBdJzo6anNvbmIpCisgKEpTT05fVkFM VUUoKGpzKTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgREVGQVVMVCAxMiBPTiBF TVBUWSBFUlJPUiBPTiBFUlJPUikgPiBpKQorIChqcyBJUyBKU09OKQorIEpTT05fRVhJU1RTKChq cyk6Ompzb25iLCAnJC4iYSInIFBBU1NJTkcgKGkgKyA1KSBBUyBpbnQsIChpKTo6dGV4dCBBUyB0 eHQsIEFSUkFZWzEsIDIsIDNdIEFTIGFycikKKyg1IHJvd3MpCisKK1NFTEVDVCBwZ19nZXRfZXhw cihhZGJpbiwgYWRyZWxpZCkKK0ZST00gcGdfYXR0cmRlZgorV0hFUkUgYWRyZWxpZCA9ICd0ZXN0 X2pzb25iX2NvbnN0cmFpbnRzJzo6cmVnY2xhc3MKK09SREVSIEJZIDE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBKU09OX1FVRVJZKCdbMSwgMl0n Ojpqc29uYiwgJyRbKl0nIFJFVFVSTklORyBqc29uYiBXSVRIIFVOQ09ORElUSU9OQUwgV1JBUFBF UikKKygxIHJvdykKKworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMg KCcnLCAxKTsKK0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3Ry YWludHMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDEi CitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoLCAxLCBbMSwgMl0pLgorSU5TRVJUIElO VE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcxJywgMSk7CitFUlJPUjogIG5ldyBy b3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBj b25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQyIgorREVUQUlMOiAgRmFpbGluZyByb3cg Y29udGFpbnMgKDEsIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5UTyB0ZXN0X2pzb25iX2NvbnN0cmFp bnRzIFZBTFVFUyAoJ1tdJyk7CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pz b25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2Nv bnN0cmFpbnQyIgorREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKFtdLCBudWxsLCBbMSwg Ml0pLgorSU5TRVJUIElOVE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImIiOiAx fScsIDEpOworRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGVzdF9qc29uYl9jb25zdHJh aW50cyIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidGVzdF9qc29uYl9jb25zdHJhaW50MiIK K0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICh7ImIiOiAxfSwgMSwgWzEsIDJdKS4KK0lO U0VSVCBJTlRPIHRlc3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgneyJhIjogMX0nLCAxKTsK K0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZp b2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDMiCitERVRBSUw6 ICBGYWlsaW5nIHJvdyBjb250YWlucyAoeyJhIjogMX0sIDEsIFsxLCAyXSkuCitJTlNFUlQgSU5U TyB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIFZBTFVFUyAoJ3siYSI6IDd9JywgMSk7CitFUlJPUjog IG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnRzIiB2aW9sYXRlcyBj aGVjayBjb25zdHJhaW50ICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1IgorREVUQUlMOiAgRmFpbGlu ZyByb3cgY29udGFpbnMgKHsiYSI6IDd9LCAxLCBbMSwgMl0pLgorSU5TRVJUIElOVE8gdGVzdF9q c29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKK0VSUk9SOiAgbmV3IHJv dyBmb3IgcmVsYXRpb24gInRlc3RfanNvbmJfY29uc3RyYWludHMiIHZpb2xhdGVzIGNoZWNrIGNv bnN0cmFpbnQgInRlc3RfanNvbmJfY29uc3RyYWludDQiCitERVRBSUw6ICBGYWlsaW5nIHJvdyBj b250YWlucyAoeyJhIjogMTB9LCAxLCBbMSwgMl0pLgorRFJPUCBUQUJMRSB0ZXN0X2pzb25iX2Nv bnN0cmFpbnRzOworLS0gVGVzdCBtdXRhYmlsaWx5IG9mIHF1ZXJ5IGZ1bmN0aW9ucworQ1JFQVRF IFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eShqcyBqc29uYik7CitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJCcpKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmFbMF0nKSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5k YXRldGltZSgpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyQuYSA/IChAIDwgJC5kYXRldGltZSgpKScpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmEgPyAoQC5kYXRldGlt ZSgpIDwgJC5kYXRldGltZSgpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJl c3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoKSA8ICQuZGF0 ZXRpbWUoIkhIOk1JIFRaSCIpKScpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJl c3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIFRa SCIpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJISDpN SSIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUo IkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu ZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmRhdGV0aW1lKCJISDpNSSBUWkgiKSA8ICR5JyBQQVNTSU5HICcxMjozNCc6OnRpbWV0eiBB UyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgpKTsK K0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1N VVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZ KGpzLCAnJC5kYXRldGltZSgpIDwgJHgnIFBBU1NJTkcgJzEyMzQnOjppbnQgQVMgeCkpOworQ1JF QVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0 ZXRpbWUoKSA/IChAID09ICR4KScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKK0VSUk9S OiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxF CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAn JC5kYXRldGltZSgiWVktTU0tREQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0xNCc6 OmRhdGUgQVMgeCkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcx MjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lv biBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211 dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9 PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRVJST1I6ICBmdW5jdGlvbnMg aW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEsICQuYSA/IChA LmRhdGV0aW1lKCJISDpNSSIpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7 CitEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKKy0tIEV4dGVuc2lvbjogbm9uLWNv bnN0YW50IEpTT04gcGF0aAorU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxMjN9Jywg JyQnIHx8ICcuJyB8fCAnYScpOworIGpzb25fZXhpc3RzIAorLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4n IHx8ICdhJyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorIDEyMworKDEgcm93KQorCitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2InIERF RkFVTFQgJ2ZvbycgT04gRU1QVFkpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyBmb28K KygxIHJvdykKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwg Jy4nIHx8ICdhJyk7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIDEyMworKDEgcm93KQor CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2En IFdJVEggV1JBUFBFUik7CisganNvbl9xdWVyeSAKKy0tLS0tLS0tLS0tLQorIFsxMjNdCisoMSBy b3cpCisKKy0tIFNob3VsZCBmYWlsIChpbnZhbGlkIHBhdGgpCitTRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAneyJhIjogMTIzfScsICdlcnJvcicgfHwgJyAnIHx8ICdlcnJvcicpOworRVJST1I6ICBz eW50YXggZXJyb3IgYXQgb3IgbmVhciAiICIgb2YganNvbnBhdGggaW5wdXQKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlCmluZGV4IGYwOTg3ZmY1MzcuLmY0ODhhZmVmYTUgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTAzLDcgKzEwMyw3IEBAIHRlc3Q6IHNlbGVjdF92aWV3 cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5jeSBndWMgYml0bWFwb3Bz IGNvbWJvCiAjIC0tLS0tLS0tLS0KICMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cyAo SlNPTiByZWxhdGVkKQogIyAtLS0tLS0tLS0tCi10ZXN0OiBqc29uIGpzb25iIGpzb25fZW5jb2Rp bmcganNvbnBhdGgganNvbnBhdGhfZW5jb2RpbmcganNvbmJfanNvbnBhdGggc3FsanNvbgordGVz dDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRoX2VuY29kaW5nIGpz b25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9xdWVyeWZ1bmNzCiAKICMgLS0tLS0tLS0tLQog IyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zcWxqc29uX3F1ZXJ5ZnVuY3Muc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3FsanNvbl9xdWVyeWZ1bmNzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi44MmVkODcyNzVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3FsanNvbl9xdWVyeWZ1bmNzLnNxbApAQCAtMCwwICsxLDM3MSBAQAorLS0gSlNPTl9FWElTVFMK KworLS0ganNvbiBhcmd1bWVudHMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQKK1NFTEVDVCBKU09O X0VYSVNUUyhOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCitTRUxFQ1QgSlNPTl9FWElTVFMoTlVM TDo6anNvbmIsICckJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1tdJywgJyQnKTsKK1NF TEVDVCBKU09OX0VYSVNUUyhKU09OX09CSkVDVChSRVRVUk5JTkcganNvbmIpLCAnJCcpOworCitT RUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJCcpOworU0VMRUNUIEpTT05fRVhJU1RTKGpz b25iICdudWxsJywgJyQnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnW10nLCAnJCcpOwor CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElT VFMoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScpOyAtLSBGQUxTRSBvbiBlcnJvcgorU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVD VCBKU09OX0VYSVNUUyhqc29uYiAnbnVsbCcsICckLmEnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhq c29uYiAnW10nLCAnJC5hJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ1sxLCAiYWFhIiwg eyJhIjogMX1dJywgJ3N0cmljdCAkLmEnKTsgLS0gRkFMU0Ugb24gZXJyb3IKK1NFTEVDVCBKU09O X0VYSVNUUyhqc29uYiAnWzEsICJhYWEiLCB7ImEiOiAxfV0nLCAnbGF4ICQuYScpOworU0VMRUNU IEpTT05fRVhJU1RTKGpzb25iICd7fScsICckLmEnKTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29u YiAneyJiIjogMSwgImEiOiAyfScsICckLmEnKTsKKworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICcxJywgJyQuYS5iJyk7CitTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJ3siYSI6IHsiYiI6IDF9 fScsICckLmEuYicpOworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9 JywgJyQuYS5iJyk7CisKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAy fScsICckLiogPyAoQCA+ICR4KScgUEFTU0lORyAxIEFTIHgpOworU0VMRUNUIEpTT05fRVhJU1RT KGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHgpJyBQQVNTSU5HICcxJyBB UyB4KTsKK1NFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAneyJhIjogMSwgImIiOiAyfScsICckLiog PyAoQCA+ICR4ICYmIEAgPCAkeSknIFBBU1NJTkcgMCBBUyB4LCAyIEFTIHkpOworU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywgJyQuKiA/IChAID4gJHggJiYgQCA8 ICR5KScgUEFTU0lORyAwIEFTIHgsIDEgQVMgeSk7CisKKy0tIGV4dGVuc2lvbjogYm9vbGVhbiBl eHByZXNzaW9ucworU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJyQgPiAyJyk7CitTRUxF Q1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJC5hID4gMicgRVJST1IgT04gRVJST1IpOworCist LSBKU09OX1ZBTFVFCisKKy0tIGpzb24gYXJndW1lbnRzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVk CitTRUxFQ1QgSlNPTl9WQUxVRShOVUxMIEZPUk1BVCBKU09OLCAnJCcpOworCitTRUxFQ1QgSlNP Tl9WQUxVRShOVUxMOjpqc29uYiwgJyQnKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJCcpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5H IGludCk7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnKTsKK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICd0cnVlJywgJyQnIFJFVFVSTklORyBib29sKTsKKworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEyMycsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMTIz JywgJyQnIFJFVFVSTklORyBpbnQpICsgMjM0OworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEy MycsICckJyBSRVRVUk5JTkcgdGV4dCk7CisvKiBqc29uYiBieXRlYSA/Pz8gKi8KK1NFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEVSUk9SIE9OIEVSUk9S KTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcpOworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJzEuMjMnLCAnJCcgUkVUVVJOSU5HIGludCk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGludCBFUlJPUiBPTiBFUlJPUik7CisK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQpOworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBjaGFyKDUpKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcgY2hhcigyKSk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIGpzb24gRVJST1IgT04gRVJST1IpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyBqc29uYiBFUlJPUiBPTiBF UlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIlwiYWFhXCIiJywgJyQnIFJFVFVSTklO RyBqc29uKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciXCJhYWFcIiInLCAnJCcgUkVUVVJO SU5HIGpzb25iKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5J TkcgaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcg aW50IEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciYWFhIicsICck JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgMTExIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVF KGpzb25iICciMTIzIicsICckJyBSRVRVUk5JTkcgaW50KSArIDIzNDsKKworU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5JTkcgZGF0ZSkgKyA5OworCist LSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21haW4gdHlwZXMKK0NSRUFURSBET01B SU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICdudWxsJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVs bCcsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFTVBU WSBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICAnJC5hJyBS RVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgMiBPTiBFTVBUWSBFUlJPUiBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICAnJC5hJyBSRVRVUk5JTkcg c3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFTVBUWSBFUlJPUiBPTiBFUlJP Uik7CitDUkVBVEUgVFlQRSByYWluYm93IEFTIEVOVU0gKCdyZWQnLCAnb3JhbmdlJywgJ3llbGxv dycsICdncmVlbicsICdibHVlJywgJ3B1cnBsZScpOworQ1JFQVRFIERPTUFJTiByZ2IgQVMgcmFp bmJvdyBDSEVDSyAoVkFMVUUgSU4gKCdyZWQnLCAnZ3JlZW4nLCAnYmx1ZScpKTsKK1NFTEVDVCBK U09OX1ZBTFVFKCcicHVycGxlIic6Ompzb25iLCAnbGF4ICRbKl0nIFJFVFVSTklORyByZ2IpOwor U0VMRUNUIEpTT05fVkFMVUUoJyJwdXJwbGUiJzo6anNvbmIsICdsYXggJFsqXScgUkVUVVJOSU5H IHJnYiBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICck Jyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnW10nLCAnJCcgRVJST1IgT04gRVJST1IpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ3t9JywgJyQnKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICd7fScsICckJyBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICcxJywgJyQuYScpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQuYScg RVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnc3RyaWN0ICQu YScgREVGQVVMVCAnZXJyb3InIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJ2xheCAkLmEnIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcx JywgJ2xheCAkLmEnIEVSUk9SIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICcxJywgJ3N0cmljdCAkLmEnIERFRkFVTFQgMiBPTiBFUlJPUik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBERUZBVUxUIDIgT04gRVJST1IpOwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRVJS T1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnbGF4ICQuYScgTlVMTCBPTiBFTVBU WSBERUZBVUxUICcyJyBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICds YXggJC5hJyBERUZBVUxUICcyJyBPTiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBERUZBVUxU ICczJyBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbMSwyXScsICckWypd JyBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWzEsMl0nLCAnJFsq XScgREVGQVVMVCAnMCcgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ1siICJd JywgJyRbKl0nIFJFVFVSTklORyBpbnQgRVJST1IgT04gRVJST1IpOworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ1siICJdJywgJyRbKl0nIFJFVFVSTklORyBpbnQgREVGQVVMVCAyICsgMyBPTiBF UlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5H IGludCBERUZBVUxUIDIgKyAzIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdb IjEiXScsICckWypdJyBSRVRVUk5JTkcgaW50IEZPUk1BVCBKU09OKTsgLS0gUkVUVVJOSU5HIEZP Uk1BVCBub3QgYWxsb3dlZAorCistLSBSRVRVR05JTkcgcHNldWRvLXR5cGVzIG5vdCBhbGxvd2Vk CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnWyIxIl0nLCAnJFsqXScgUkVUVVJOSU5HIHJlY29y ZCk7CisKK1NFTEVDVAorCXgsCisJSlNPTl9WQUxVRSgKKwkJanNvbmIgJ3siYSI6IDEsICJiIjog Mn0nLAorCQknJC4qID8gKEAgPiAkeCknIFBBU1NJTkcgeCBBUyB4CisJCVJFVFVSTklORyBpbnQK KwkJREVGQVVMVCAtMSBPTiBFTVBUWQorCQlERUZBVUxUIC0yIE9OIEVSUk9SCisJKSB5CitGUk9N CisJZ2VuZXJhdGVfc2VyaWVzKDAsIDIpIHg7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyRhJyBQQVNTSU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSk7CitTRUxFQ1QgSlNPTl9W QUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEgUkVU VVJOSU5HIHBvaW50KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyRhJyBQQVNT SU5HIHBvaW50ICcgKDEsIDIgKScgQVMgYSBSRVRVUk5JTkcgcG9pbnQgRVJST1IgT04gRVJST1Ip OworCistLSBUZXN0IFBBU1NJTkcgYW5kIFJFVFVSTklORyBkYXRlL3RpbWUgdHlwZXMKK1NFTEVD VCBKU09OX1ZBTFVFKGpzb25iICdudWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAx OC0wMi0yMSAxMjozNDo1NiArMTAnIEFTIHRzKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArMTAn IEFTIHRzIFJFVFVSTklORyB0aW1lc3RhbXB0eik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn bnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEw JyBBUyB0cyBSRVRVUk5JTkcgdGltZXN0YW1wKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdu dWxsJywgJyR0cycgUEFTU0lORyBkYXRlICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMg UkVUVVJOSU5HIGRhdGUpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQ QVNTSU5HIHRpbWUgJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcgdGlt ZSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXR6 ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWV0eik7CitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wICcyMDE4 LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIHRpbWVzdGFtcCk7CisKKy0tIEFs c28gdGVzdCBSRVRVUk5JTkcganNvbltiXQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwn LCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMg dHMgUkVUVVJOSU5HIGpzb24pOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRz JyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVU VVJOSU5HIGpzb25iKTsKKworLS0gSlNPTl9RVUVSWQorCistLSBqc29uIGFyZ3VtZW50cyBjdXJy ZW50bHkgbm90IHN1cHBvcnRlZAorU0VMRUNUIEpTT05fUVVFUlkoTlVMTCBGT1JNQVQgSlNPTiwg JyQnKTsKKworU0VMRUNUIEpTT05fVkFMVUUoTlVMTDo6anNvbmIsICckJyk7CisKK1NFTEVDVAor CUpTT05fUVVFUlkoanMsICckJyksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEhPVVQgV1JBUFBF UiksCisJSlNPTl9RVUVSWShqcywgJyQnIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiksCisJSlNP Tl9RVUVSWShqcywgJyQnIFdJVEggVU5DT05ESVRJT05BTCBBUlJBWSBXUkFQUEVSKSwKKwlKU09O X1FVRVJZKGpzLCAnJCcgV0lUSCBBUlJBWSBXUkFQUEVSKQorRlJPTQorCShWQUxVRVMKKwkJKGpz b25iICdudWxsJyksCisJCSgnMTIuMycpLAorCQkoJ3RydWUnKSwKKwkJKCciYWFhIicpLAorCQko J1sxLCBudWxsLCAiMiJdJyksCisJCSgneyJhIjogMSwgImIiOiBbMl19JykKKwkpIGZvbyhqcyk7 CisKK1NFTEVDVAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScpIEFTICJ1bnNwZWMiLAor CUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSE9VVCBXUkFQUEVSKSBBUyAid2l0aG91 dCIsCisJSlNPTl9RVUVSWShqcywgJ3N0cmljdCAkWypdJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQ RVIpIEFTICJ3aXRoIGNvbmQiLAorCUpTT05fUVVFUlkoanMsICdzdHJpY3QgJFsqXScgV0lUSCBV TkNPTkRJVElPTkFMIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIHVuY29uZCIsCisJSlNPTl9RVUVS WShqcywgJ3N0cmljdCAkWypdJyBXSVRIIEFSUkFZIFdSQVBQRVIpIEFTICJ3aXRoIgorRlJPTQor CShWQUxVRVMKKwkJKGpzb25iICcxJyksCisJCSgnW10nKSwKKwkJKCdbbnVsbF0nKSwKKwkJKCdb MTIuM10nKSwKKwkJKCdbdHJ1ZV0nKSwKKwkJKCdbImFhYSJdJyksCisJCSgnW1sxLCAyLCAzXV0n KSwKKwkJKCdbeyJhIjogMSwgImIiOiBbMl19XScpLAorCQkoJ1sxLCAiMiIsIG51bGwsIFszXV0n KQorCSkgZm9vKGpzKTsKKworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJF VFVSTklORyB0ZXh0KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICciYWFhIicsICckJyBSRVRV Uk5JTkcgdGV4dCBLRUVQIFFVT1RFUyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSIn LCAnJCcgUkVUVVJOSU5HIHRleHQgS0VFUCBRVU9URVMgT04gU0NBTEFSIFNUUklORyk7CitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5HIHRleHQgT01JVCBRVU9U RVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJyJhYWEiJywgJyQnIFJFVFVSTklORyB0ZXh0 IE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg JyJhYWEiJywgJyQnIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FV RVJZKGpzb25iICciYWFhIicsICckJyBSRVRVUk5JTkcganNvbiBPTUlUIFFVT1RFUyBFUlJPUiBP TiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnImFhYSInLCAnJCcgUkVUVVJOSU5H IGJ5dGVhIEZPUk1BVCBKU09OIE9NSVQgUVVPVEVTIEVSUk9SIE9OIEVSUk9SKTsKKworLS0gUVVP VEVTIGJlaGF2aW9yIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIHVz ZWQ6CistLSBTaG91bGQgZmFpbAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBX SVRIIFdSQVBQRVIgT01JVCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxXScs ICckJyBXSVRIIFdSQVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgS0VFUCBRVU9URVMpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1sxXScsICckJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgT01J VCBRVU9URVMpOworLS0gU2hvdWxkIHN1Y2NlZWQKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQgUVVPVEVTKTsKK1NFTEVDVCBKU09OX1FVRVJZ KGpzb25iICdbMV0nLCAnJCcgV0lUSE9VVCBXUkFQUEVSIEtFRVAgUVVPVEVTKTsKKworLS0gdGVz dCBRVU9URVMgYmVoYXZpb3IuCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwy LDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBvbWl0IHF1b3Rlcyk7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRb XSBrZWVwIHF1b3Rlcyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJ7MSwyLDN9 In0nLCAnJC5yZWMnIHJldHVybmluZyBpbnRbXSBrZWVwIHF1b3RlcyBlcnJvciBvbiBlcnJvcik7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYid7InJlYyI6ICJbMSwyXSJ9JywgJyQucmVjJyByZXR1 cm5pbmcgaW50NHJhbmdlIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3si cmVjIjogIlsxLDJdIn0nLCAnJC5yZWMnIHJldHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMp OworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIneyJyZWMiOiAiWzEsMl0ifScsICckLnJlYycgCXJl dHVybmluZyBpbnQ0cmFuZ2Uga2VlcCBxdW90ZXMgZXJyb3Igb24gZXJyb3IpOworCitTRUxFQ1Qg SlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J1tdJywgJyRbKl0nIE5VTEwgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1td JywgJyRbKl0nIEVNUFRZIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScs ICckWypdJyBFTVBUWSBBUlJBWSBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn W10nLCAnJFsqXScgRU1QVFkgT0JKRUNUIE9OIEVNUFRZKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnW10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRU1QVFkpOworCitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgTlVMTCBPTiBFUlJPUik7 CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRU1Q VFkgQVJSQVkgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0n IEVSUk9SIE9OIEVNUFRZIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKKworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIEVSUk9SIE9OIEVSUk9SKTsKK1NF TEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBERUZBVUxUICciZW1wdHkiJyBP TiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckJyBSRVRVUk5J TkcganNvbik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5H IGpzb24gRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyQn IFJFVFVSTklORyBqc29uYik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAnJCcg UkVUVVJOSU5HIGpzb25iIEZPUk1BVCBKU09OKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MSwyXScsICckJyBSRVRVUk5JTkcgdGV4dCk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs Ml0nLCAnJCcgUkVUVVJOSU5HIGNoYXIoMTApKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdb MSwyXScsICckJyBSRVRVUk5JTkcgY2hhcigzKSk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAn WzEsMl0nLCAnJCcgUkVUVVJOSU5HIHRleHQgRk9STUFUIEpTT04pOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1sxLDJdJywgJyQnIFJFVFVSTklORyBieXRlYSk7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnWzEsMl0nLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEZPUk1BVCBKU09OKTsKKworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBieXRlYSBFTVBU WSBPQkpFQ1QgT04gRVJST1IpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRb Kl0nIFJFVFVSTklORyBieXRlYSBGT1JNQVQgSlNPTiBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOwor U0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDJdJywgJyRbKl0nIFJFVFVSTklORyBqc29uIEVN UFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMl0nLCAn JFsqXScgUkVUVVJOSU5HIGpzb25iIEVNUFRZIE9CSkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnWzMsNF0nLCAnJFsqXScgUkVUVVJOSU5HIGJpZ2ludFtdIEVNUFRZIE9C SkVDVCBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnIlszLDRdIicsICckWypd JyBSRVRVUk5JTkcgYmlnaW50W10gRU1QVFkgT0JKRUNUIE9OIEVSUk9SKTsKKworLS0gUkVUVUdO SU5HIHBzZXVkby10eXBlcyBub3QgYWxsb3dlZAorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sz LDRdJywgJyRbKl0nIFJFVFVSTklORyBhbnlhcnJheSBFTVBUWSBPQkpFQ1QgT04gRVJST1IpOwor CitTRUxFQ1QKKwl4LCB5LAorCUpTT05fUVVFUlkoCisJCWpzb25iICdbMSwyLDMsNCw1LG51bGxd JywKKwkJJyRbKl0gPyAoQCA+PSAkeCAmJiBAIDw9ICR5KScKKwkJUEFTU0lORyB4IEFTIHgsIHkg QVMgeQorCQlXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIKKwkJRU1QVFkgQVJSQVkgT04gRU1QVFkK KwkpIGxpc3QKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMCwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJp ZXMoMCwgNCkgeTsKKworLS0gcmVjb3JkIHR5cGUgcmV0dXJuaW5nIHdpdGggcXVvdGVzIGJlaGF2 aW9yLgorQ1JFQVRFIFRZUEUgY29tcF9hYmMgQVMgKGEgdGV4dCwgYiBpbnQsIGMgdGltZXN0YW1w KTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMyki fScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJjIG9taXQgcXVvdGVzKTsKK1NFTEVDVCBKU09O X1FVRVJZKGpzb25iJ3sicmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0 dXJuaW5nIGNvbXBfYWJjIGtlZXAgcXVvdGVzKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iJ3si cmVjIjogIihhYmMsNDIsMDEuMDIuMjAwMykifScsICckLnJlYycgcmV0dXJuaW5nIGNvbXBfYWJj IGtlZXAgcXVvdGVzIGVycm9yIG9uIGVycm9yKTsKK0RST1AgVFlQRSBjb21wX2FiYzsKKworLS0g RXh0ZW5zaW9uOiByZWNvcmQgdHlwZXMgcmV0dXJuaW5nCitDUkVBVEUgVFlQRSBzcWxqc29uYl9y ZWMgQVMgKGEgaW50LCB0IHRleHQsIGpzIGpzb24sIGpiIGpzb25iLCBqc2EganNvbltdKTsKK0NS RUFURSBUWVBFIHNxbGpzb25iX3JlY2EgQVMgKHJlY2Egc3FsanNvbmJfcmVjW10pOworCitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICJq cyI6IFsxLCAiMiIsIHt9XSwgImpiIjogeyJ4IjogWzEsICIyIiwge31dfX0sICB7ImEiOiAyfV0n LCAnJFswXScgUkVUVVJOSU5HIHNxbGpzb25iX3JlYyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnW3siYSI6ICJhIiwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31d LCAiamIiOiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5J Tkcgc3FsanNvbmJfcmVjIEVSUk9SIE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25i ICdbeyJhIjogImEiLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAianMiOiBbMSwgIjIiLCB7fV0s ICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1dJywgJyRbMF0nIFJFVFVSTklO RyBzcWxqc29uYl9yZWMpOworU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIg J3sianNhIjogIFt7ImEiOiAxLCAiYiI6IFsiZm9vIl19LCB7ImEiOiAyLCAiYyI6IHt9fSwgMTIz XX0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3JlYykpLmpzYSk7CitTRUxFQ1QgKiBGUk9NIHVu bmVzdCgoSlNPTl9RVUVSWShqc29uYiAneyJyZWNhIjogW3siYSI6IDEsICJ0IjogWyJmb28iLCBb XV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV19JywgJyQnIFJFVFVSTklORyBzcWxqc29u Yl9yZWNhKSkucmVjYSk7CisKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIi OiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBbMSwg IjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcganNvbnBhdGgpOworU0VM RUNUIEpTT05fUVVFUlkoanNvbmIgJ1t7ImEiOiAxLCAiYiI6ICJmb28iLCAidCI6ICJhYWEiLCAi anMiOiBbMSwgIjIiLCB7fV0sICJqYiI6IHsieCI6IFsxLCAiMiIsIHt9XX19LCAgeyJhIjogMn1d JywgJyRbMF0nIFJFVFVSTklORyBqc29ucGF0aCBFUlJPUiBPTiBFUlJPUik7CisKKy0tIEV4dGVu c2lvbjogYXJyYXkgdHlwZXMgcmV0dXJuaW5nCitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnWzEs MixudWxsLCIzIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7CitTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAnWzEsMixudWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGlu dFtdIFdJVEggV1JBUFBFUiBFUlJPUiBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnWzEsMixudWxsLCJhIl0nLCAnJFsqXScgUkVUVVJOSU5HIGludFtdIFdJVEggV1JBUFBFUik7 CitTRUxFQ1QgKiBGUk9NIHVubmVzdChKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgInQiOiBb ImZvbyIsIFtdXX0sIHsiYSI6IDIsICJqYiI6IFt7fSwgdHJ1ZV19XScsICckJyBSRVRVUk5JTkcg c3FsanNvbmJfcmVjW10pKTsKKworLS0gRXh0ZW5zaW9uOiBkb21haW4gdHlwZXMgcmV0dXJuaW5n CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5hJyBSRVRVUk5JTkcgc3Fs anNvbmJfaW50X25vdF9udWxsKTsKK1NFTEVDVCBKU09OX1FVRVJZKGpzb25iICd7ImEiOiAxfScs ICckLmInIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOworU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVs bCBFUlJPUiBPTiBFUlJPUik7CisKKy0tIFRlc3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0 cHV0CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0 YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKzEwJyBBUyB0cyk7CitTRUxFQ1QgSlNPTl9RVUVS WShqc29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6 MzQ6NTYgKzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbik7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29u YiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYg KzEwJyBBUyB0cyBSRVRVUk5JTkcganNvbmIpOworCistLSBUZXN0IGNvbnN0cmFpbnRzCisKK0NS RUFURSBUQUJMRSB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzICgKKwlqcyB0ZXh0LAorCWkgaW50LAor CXgganNvbmIgREVGQVVMVCBKU09OX1FVRVJZKGpzb25iICdbMSwyXScsICckWypdJyBXSVRIIFdS QVBQRVIpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQxCisJCUNIRUNLIChqcyBJ UyBKU09OKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MgorCQlDSEVDSyAoSlNP Tl9FWElTVFMoanM6Ompzb25iLCAnJC5hJyBQQVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBB UyB0eHQsIGFycmF5WzEsMiwzXSBhcyBhcnIpKQorCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25z dHJhaW50MworCQlDSEVDSyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBp bnQgREVGQVVMVCAnMTInIE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisJQ09OU1RSQUlO VCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0CisJCUNIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwg JyQuYScgV0lUSCBDT05ESVRJT05BTCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCBq c29uYiAnWzEwXScpCisJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1CisJCUNIRUNL IChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGNoYXIoNSkgT01JVCBRVU9U RVMgRU1QVFkgQVJSQVkgT04gRU1QVFkpID4gICdhJyBDT0xMQVRFICJDIikKKyk7CisKK1xkIHRl c3RfanNvbmJfY29uc3RyYWludHMKKworU0VMRUNUIGNoZWNrX2NsYXVzZQorRlJPTSBpbmZvcm1h dGlvbl9zY2hlbWEuY2hlY2tfY29uc3RyYWludHMKK1dIRVJFIGNvbnN0cmFpbnRfbmFtZSBMSUtF ICd0ZXN0X2pzb25iX2NvbnN0cmFpbnQlJworT1JERVIgQlkgMTsKKworU0VMRUNUIHBnX2dldF9l eHByKGFkYmluLCBhZHJlbGlkKQorRlJPTSBwZ19hdHRyZGVmCitXSEVSRSBhZHJlbGlkID0gJ3Rl c3RfanNvbmJfY29uc3RyYWludHMnOjpyZWdjbGFzcworT1JERVIgQlkgMTsKKworSU5TRVJUIElO VE8gdGVzdF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCcnLCAxKTsKK0lOU0VSVCBJTlRPIHRl c3RfanNvbmJfY29uc3RyYWludHMgVkFMVUVTICgnMScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9q c29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCdbXScpOworSU5TRVJUIElOVE8gdGVzdF9qc29uYl9j b25zdHJhaW50cyBWQUxVRVMgKCd7ImIiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9qc29u Yl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxfScsIDEpOworSU5TRVJUIElOVE8gdGVzdF9q c29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiA3fScsIDEpOworSU5TRVJUIElOVE8gdGVz dF9qc29uYl9jb25zdHJhaW50cyBWQUxVRVMgKCd7ImEiOiAxMH0nLCAxKTsKKworRFJPUCBUQUJM RSB0ZXN0X2pzb25iX2NvbnN0cmFpbnRzOworCistLSBUZXN0IG11dGFiaWxpbHkgb2YgcXVlcnkg ZnVuY3Rpb25zCitDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9tdXRhYmlsaXR5KGpzIGpzb25iKTsK K0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICck JykpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShq cywgJyQuYVswXScpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpT T05fUVVFUlkoanMsICckLmRhdGV0aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAgPCAkLmRhdGV0aW1lKCkpJykp OworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywg JyQuYSA/IChALmRhdGV0aW1lKCkgPCAkLmRhdGV0aW1lKCkpJykpOworQ1JFQVRFIElOREVYIE9O IHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1l KCkgPCAkLmRhdGV0aW1lKCJISDpNSSBUWkgiKSknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1J IFRaSCIpIDwgJC5kYXRldGltZSgiSEg6TUkgVFpIIikpJykpOworQ1JFQVRFIElOREVYIE9OIHRl c3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuYSA/IChALmRhdGV0aW1lKCJI SDpNSSIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVBVEUgSU5ERVgg T04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5hID8gKEAuZGF0ZXRp bWUoIkhIOk1JIFRaSCIpIDwgJC5kYXRldGltZSgiWVktTU0tREQgSEg6TUkiKSknKSk7CitDUkVB VEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRl dGltZSgiSEg6TUkgVFpIIikgPCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOwor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQu ZGF0ZXRpbWUoIkhIOk1JIFRaSCIpIDwgJHknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZXR6IEFTIHgp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMs ICckLmRhdGV0aW1lKCkgPCAkeCcgUEFTU0lORyAnMTI6MzQnOjp0aW1ldHogQVMgeCkpOworQ1JF QVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0 ZXRpbWUoKSA8ICR4JyBQQVNTSU5HICcxMjM0Jzo6aW50IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCkgPyAo QCA9PSAkeCknIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1FVRVJZKGpzLCAnJC5kYXRldGltZSgiWVktTU0t REQiKSA/IChAID09ICR4KScgUEFTU0lORyAnMjAyMC0wNy0xNCc6OmRhdGUgQVMgeCkpOworQ1JF QVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwg JC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkp OworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywg JyRbMSwgMCB0byAkLmEgPyAoQC5kYXRldGltZSgpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6 dGltZSBBUyB4KSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09O X1FVRVJZKGpzLCAnJFsxLCAkLmEgPyAoQC5kYXRldGltZSgiSEg6TUkiKSA9PSAkeCldJyBQQVNT SU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOworRFJPUCBUQUJMRSB0ZXN0X2pzb25iX211dGFiaWxp dHk7CisKKy0tIEV4dGVuc2lvbjogbm9uLWNvbnN0YW50IEpTT04gcGF0aAorU0VMRUNUIEpTT05f RVhJU1RTKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAnYScpOworU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2InIERFRkFVTFQg J2ZvbycgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAn JCcgfHwgJy4nIHx8ICdhJyk7CitTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMTIzfScs ICckJyB8fCAnLicgfHwgJ2EnIFdJVEggV1JBUFBFUik7CistLSBTaG91bGQgZmFpbCAoaW52YWxp ZCBwYXRoKQorU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30nLCAnZXJyb3InIHx8 ICcgJyB8fCAnZXJyb3InKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggN2U4NjZlM2Mz ZC4uNTNlMTNmZTcyOSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyNTYsNiArMTI1 Niw3IEBAIEpvaW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgorSnNv bkZ1bmNFeHByCiBKb2luSGFzaEVudHJ5CiBKb2luUGF0aAogSm9pblBhdGhFeHRyYURhdGEKQEAg LTEyNjYsMTggKzEyNjcsMjcgQEAgSnNPYmplY3QKIEpzVmFsdWUKIEpzb25BZ2dDb25zdHJ1Y3Rv cgogSnNvbkFnZ1N0YXRlCitKc29uQXJndW1lbnQKIEpzb25BcnJheUFnZwogSnNvbkFycmF5Q29u c3RydWN0b3IKIEpzb25BcnJheVF1ZXJ5Q29uc3RydWN0b3IKIEpzb25CYXNlT2JqZWN0SW5mbwor SnNvbkJlaGF2aW9yCitKc29uQmVoYXZpb3JUeXBlCitKc29uQ29lcmNpb24KIEpzb25Db25zdHJ1 Y3RvckV4cHIKIEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogSnNvbkNvbnN0cnVjdG9yVHlwZQog SnNvbkVuY29kaW5nCitKc29uRXhwcgorSnNvbkV4cHJPcAorSnNvbkV4cHJQb3N0RXZhbFN0YXRl CitKc29uRXhwclN0YXRlCiBKc29uRm9ybWF0CiBKc29uRm9ybWF0VHlwZQogSnNvbkhhc2hFbnRy eQogSnNvbklzUHJlZGljYXRlCitKc29uSXRlbVR5cGUKIEpzb25JdGVyYXRlU3RyaW5nVmFsdWVz QWN0aW9uCiBKc29uS2V5VmFsdWUKIEpzb25MZXhDb250ZXh0CkBAIC0xMjk1LDYgKzEzMDUsNyBA QCBKc29uUGFyc2VDb250ZXh0CiBKc29uUGFyc2VFcnJvclR5cGUKIEpzb25QYXRoCiBKc29uUGF0 aEJvb2wKK0pzb25QYXRoRGF0YXR5cGVTdGF0dXMKIEpzb25QYXRoRXhlY0NvbnRleHQKIEpzb25Q YXRoRXhlY1Jlc3VsdAogSnNvblBhdGhHaW5BZGRQYXRoSXRlbUZ1bmMKQEAgLTEzMDcsMTAgKzEz MTgsMTUgQEAgSnNvblBhdGhHaW5QYXRoSXRlbQogSnNvblBhdGhJdGVtCiBKc29uUGF0aEl0ZW1U eXBlCiBKc29uUGF0aEtleXdvcmQKK0pzb25QYXRoTXV0YWJsZUNvbnRleHQKIEpzb25QYXRoUGFy c2VJdGVtCiBKc29uUGF0aFBhcnNlUmVzdWx0CiBKc29uUGF0aFByZWRpY2F0ZUNhbGxiYWNrCiBK c29uUGF0aFN0cmluZworSnNvblBhdGhWYXJDYWxsYmFjaworSnNvblBhdGhWYXJpYWJsZQorSnNv blBhdGhWYXJpYWJsZUV2YWxDb250ZXh0CitKc29uUXVvdGVzCiBKc29uUmV0dXJuaW5nCiBKc29u U2NhbGFyRXhwcgogSnNvblNlbUFjdGlvbgpAQCAtMTMyNyw2ICsxMzQzLDcgQEAgSnNvblZhbHVl RXhwcgogSnNvblZhbHVlTGlzdAogSnNvblZhbHVlTGlzdEl0ZXJhdG9yCiBKc29uVmFsdWVUeXBl CitKc29uV3JhcHBlcgogSnNvbmIKIEpzb25iQWdnU3RhdGUKIEpzb25iQ29udGFpbmVyCi0tIAoy LjM1LjMKCg== --0000000000000586fb060f89a4b0 Content-Type: application/octet-stream; name="v36-0006-JSON_TABLE.patch" Content-Disposition: attachment; filename="v36-0006-JSON_TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrp0uuss5 RnJvbSAwMjQ3OWU4MWM5NmQwNDcxZTRmYTRiMThlYzhiZGM0NzcyNzM2ODBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTggSmFuIDIwMjQgMTg6MDA6MDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHYz NiA2LzZdIEpTT05fVEFCTEUKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMg ZmVhdHVyZSBhbGxvd3MganNvbmIgZGF0YSB0byBiZSB0cmVhdGVkIGFzIGEgdGFibGUgYW5kIHRo dXMKdXNlZCBpbiBhIEZST00gY2xhdXNlIGxpa2Ugb3RoZXIgdGFidWxhciBkYXRhLiBEYXRhIGNh biBiZSBzZWxlY3RlZApmcm9tIHRoZSBqc29uYiB1c2luZyBqc29ucGF0aCBleHByZXNzaW9ucywg YW5kIGhvaXN0ZWQgb3V0IG9mIG5lc3RlZApzdHJ1Y3R1cmVzIGluIHRoZSBqc29uYiB0byBmb3Jt IG11bHRpcGxlIHJvd3MsIG1vcmUgb3IgbGVzcyBsaWtlIGFuCm91dGVyIGpvaW4uCgpUaGlzIGFs c28gYWRkcyB0aGUgUExBTiBjbGF1c2VzIGZvciBKU09OX1RBQkxFLCB3aGljaCBhbGxvdyB0aGUg dXNlcgp0byBzcGVjaWZ5IGhvdyBkYXRhIGZyb20gbmVzdGVkIHBhdGhzIGFyZSBqb2luZWQsIGFs bG93aW5nCmNvbnNpZGVyYWJsZSBmcmVlZG9tIGluIHNoYXBpbmcgdGhlIHRhYnVsYXIgb3V0cHV0 IG9mIEpTT05fVEFCTEUuClBMQU4gREVGQVVMVCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0 aGUgZ2xvYmFsIHN0cmF0ZWdpZXMgd2hlbgpkZWFsaW5nIHdpdGggc2libGluZyBvciBjaGlsZCBu ZXN0ZWQgcGF0aHMuIFRoZSBpcyBvZnRlbiBzdWZmaWNpZW50CnRvIGFjaGlldmUgdGhlIG5lY2Vz c2FyeSBnb2FsLCBhbmQgaXMgY29uc2lkZXJhYmx5IHNpbXBsZXIgdGhhbiB0aGUKZnVsbCBQTEFO IGNsYXVzZSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIHN0cmF0ZWd5IHRv IGJlCnVzZWQgZm9yIGVhY2ggbmFtZWQgbmVzdGVkIHBhdGguCgpBdXRob3I6IE5pa2l0YSBHbHVr aG92IDxuLmdsdWhvdkBwb3N0Z3Jlc3Byby5ydT4KQXV0aG9yOiBUZW9kb3IgU2lnYWV2IDx0ZW9k b3JAc2lnYWV2LnJ1PgpBdXRob3I6IE9sZWcgQmFydHVub3YgPG9iYXJ0dW5vdkBnbWFpbC5jb20+ CkF1dGhvcjogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KQXV0aG9y OiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KQXV0aG9yOiBBbWl0IExhbmdv dGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpBdXRob3I6IEppYW4gSGUgPGppYW4udW5pdmVy c2FsaXR5QGdtYWlsLmNvbT4KClJldmlld2VycyBoYXZlIGluY2x1ZGVkIChpbiBubyBwYXJ0aWN1 bGFyIG9yZGVyKSBBbmRyZXMgRnJldW5kLCBBbGV4YW5kZXIKS29yb3Rrb3YsIFBhdmVsIFN0ZWh1 bGUsIEFuZHJldyBBbHN1cCwgRXJpayBSaWprZXJzLCBaaWhvbmcgWXUsCkhpbWFuc2h1IFVwYWRo eWF5YSwgRGFuaWVsIEd1c3RhZnNzb24sIEp1c3RpbiBQcnl6YnksIMOBbHZhcm8gSGVycmVyYSwK amlhbiBoZQoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZDBiYjkzNS0wMTU4LTc4 YTctMDhiNS05MDQ4ODZkZWFjNGJAcG9zdGdyZXNwcm8ucnUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS8yMDIyMDYxNjIzMzEzMC5ycGFyaXZhZmlwdDZkb2ozQGFsYXAzLmFuYXJhemVs LmRlCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYWJkOWI4M2ItYWE2Ni1mMjMwLTNk NmQtNzM0ODE3ZjA5OTVkJTQwcG9zdGdyZXNxbC5vcmcKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRTRYVGRmYjFuVz1Pam95X3RRU1JoWXQtcV9rYjZpNWQ0eGNLeXJMQzFO YmdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNTEwICsrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1 cmVzLnR4dCAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YyAgICAgICAgICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxl RnVuY3NjYW4uYyAgICAgIHwgICAyNyArLQogc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgIDEwOCArKwogc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg ICAgICAgICAgICAgICAgIHwgICAzOCArCiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICAgICAgICAgICB8ICAyOTkgKysrKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWls ZCAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVz ZS5jICAgICAgICAgICAgIHwgICAxNCArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIu YyAgICAgICAgICAgICAgIHwgICA1MyArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2pzb250 YWJsZS5jICAgICAgICAgIHwgIDcxOCArKysrKysrKysrCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfcmVsYXRpb24uYyAgICAgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfdGFyZ2V0LmMgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29ucGF0aF9leGVjLmMgICAgICAgICB8ICA1NDcgKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYyAgICAgICAgICAgICB8ICAyNzkgKysrLQogc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rl cy9tYWtlZnVuY3MuaCAgICAgICAgICAgICAgICAgfCAgICA5ICsKIHNyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAxMDkgKysKIHNyYy9pbmNsdWRlL25vZGVz L3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNjAgKy0KIHNyYy9pbmNsdWRlL3BhcnNl ci9rd2xpc3QuaCAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2luY2x1ZGUvcGFyc2Vy L3BhcnNlX2NsYXVzZS5oICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS91dGlscy9q c29ucGF0aC5oICAgICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbnRlcmZhY2VzL2VjcGcv dGVzdC9lY3BnX3NjaGVkdWxlICAgICAgICB8ICAgIDEgKwogLi4uL3Rlc3QvZXhwZWN0ZWQvc3Fs LXNxbGpzb25fanNvbnRhYmxlLmMgICAgIHwgIDEzMiArKwogLi4uL2V4cGVjdGVkL3NxbC1zcWxq c29uX2pzb250YWJsZS5zdGRlcnIgICAgIHwgICAyMCArCiAuLi4vZXhwZWN0ZWQvc3FsLXNxbGpz b25fanNvbnRhYmxlLnN0ZG91dCAgICAgfCAgICAwCiBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qv c3FsL01ha2VmaWxlICAgICAgICAgfCAgICAxICsKIHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9z cWwvbWVzb24uYnVpbGQgICAgICB8ICAgIDEgKwogLi4uL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9q c29udGFibGUucGdjICAgICAgIHwgICAzMiArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9zcWxqc29u X2pzb250YWJsZS5vdXQgICAgfCAxMTkxICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9zcWxqc29uX2pzb250YWJsZS5zcWwgICAgfCAgNjc1ICsrKysrKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMTYgKwogMzUgZmls ZXMgY2hhbmdlZCwgNDgzNyBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfanNvbnRhYmxlLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25f anNvbnRhYmxlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qv ZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLnN0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUu c3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9z cWxqc29uX2pzb250YWJsZS5wZ2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3NxbGpzb25fanNvbnRhYmxlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IGEwNWU1Mzkw NzcuLjRhYzFhNGYwMTQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMTgzMzYsNiArMTgzMzYsNTE2IEBAICQuKiA/IChA IGxpa2VfcmVnZXggIl5cXGQrJCIpCiAgICA8L3Rncm91cD4KICAgPC90YWJsZT4KICAgPC9zZWN0 Mj4KKworIDxzZWN0MiBpZD0iZnVuY3Rpb25zLXNxbGpzb24tdGFibGUiPgorICA8dGl0bGU+SlNP Tl9UQUJMRTwvdGl0bGU+CisgIDxpbmRleHRlcm0+CisgICA8cHJpbWFyeT5qc29uX3RhYmxlPC9w cmltYXJ5PgorICA8L2luZGV4dGVybT4KKworICA8cGFyYT4KKyAgIDxmdW5jdGlvbj5qc29uX3Rh YmxlPC9mdW5jdGlvbj4gaXMgYW4gU1FML0pTT04gZnVuY3Rpb24gd2hpY2gKKyAgIHF1ZXJpZXMg PGFjcm9ueW0+SlNPTjwvYWNyb255bT4gZGF0YQorICAgYW5kIHByZXNlbnRzIHRoZSByZXN1bHRz IGFzIGEgcmVsYXRpb25hbCB2aWV3LCB3aGljaCBjYW4gYmUgYWNjZXNzZWQgYXMgYQorICAgcmVn dWxhciBTUUwgdGFibGUuIFlvdSBjYW4gb25seSB1c2UgPGZ1bmN0aW9uPmpzb25fdGFibGU8L2Z1 bmN0aW9uPiBpbnNpZGUgdGhlCisgICA8bGl0ZXJhbD5GUk9NPC9saXRlcmFsPiBjbGF1c2Ugb2Yg YSA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+IHN0YXRlbWVudC4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGFraW5nIEpTT04gZGF0YSBhcyBpbnB1dCwgPGZ1bmN0aW9uPmpzb25fdGFibGU8 L2Z1bmN0aW9uPiB1c2VzCisgICBhIHBhdGggZXhwcmVzc2lvbiB0byBleHRyYWN0IGEgcGFydCBv ZiB0aGUgcHJvdmlkZWQgZGF0YSB0aGF0CisgICB3aWxsIGJlIHVzZWQgYXMgYSA8Zmlyc3R0ZXJt PnJvdyBwYXR0ZXJuPC9maXJzdHRlcm0+IGZvciB0aGUKKyAgIGNvbnN0cnVjdGVkIHZpZXcuIEVh Y2ggU1FML0pTT04gaXRlbSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSByb3cgcGF0dGVybiBzZXJ2 ZXMKKyAgIGFzIHRoZSBzb3VyY2UgZm9yIGEgc2VwYXJhdGUgcm93IGluIHRoZSBjb25zdHJ1Y3Rl ZCByZWxhdGlvbmFsIHZpZXcuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRvIHNwbGl0IHRo ZSByb3cgcGF0dGVybiBpbnRvIGNvbHVtbnMsIDxmdW5jdGlvbj5qc29uX3RhYmxlPC9mdW5jdGlv bj4KKyAgIHByb3ZpZGVzIHRoZSA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiBjbGF1c2UgdGhh dCBkZWZpbmVzIHRoZQorICAgc2NoZW1hIG9mIHRoZSBjcmVhdGVkIHZpZXcuIEZvciBlYWNoIGNv bHVtbiB0byBiZSBjb25zdHJ1Y3RlZCwKKyAgIHRoaXMgY2xhdXNlIHByb3ZpZGVzIGEgc2VwYXJh dGUgcGF0aCBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzCisgICB0aGUgcm93IHBhdHRlcm4sIGV4 dHJhY3RzIGEgSlNPTiBpdGVtLCBhbmQgcmV0dXJucyBpdCBhcyBhCisgICBzZXBhcmF0ZSBTUUwg dmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgY29sdW1uLiBJZiB0aGUgcmVxdWlyZWQgdmFsdWUKKyAg IGlzIHN0b3JlZCBpbiBhIG5lc3RlZCBsZXZlbCBvZiB0aGUgcm93IHBhdHRlcm4sIGl0IGNhbiBi ZSBleHRyYWN0ZWQKKyAgIHVzaW5nIHRoZSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4g c3ViY2xhdXNlLiBKb2luaW5nIHRoZQorICAgY29sdW1ucyByZXR1cm5lZCBieSA8bGl0ZXJhbD5O RVNURUQgUEFUSDwvbGl0ZXJhbD4gY2FuIGFkZCBtdWx0aXBsZQorICAgbmV3IHJvd3MgdG8gdGhl IGNvbnN0cnVjdGVkIHZpZXcuIFN1Y2ggcm93cyBhcmUgY2FsbGVkCisgICA8Zmlyc3R0ZXJtPmNo aWxkIHJvd3M8L2ZpcnN0dGVybT4sIGFzIG9wcG9zZWQgdG8gdGhlIDxmaXJzdHRlcm0+cGFyZW50 IHJvdzwvZmlyc3R0ZXJtPgorICAgdGhhdCBnZW5lcmF0ZXMgdGhlbS4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIHJvd3MgcHJvZHVjZWQgYnkgPGZ1bmN0aW9uPkpTT05fVEFCTEU8L2Z1 bmN0aW9uPiBhcmUgbGF0ZXJhbGx5CisgICBqb2luZWQgdG8gdGhlIHJvdyB0aGF0IGdlbmVyYXRl ZCB0aGVtLCBzbyB5b3UgZG8gbm90IGhhdmUgdG8gZXhwbGljaXRseSBqb2luCisgICB0aGUgY29u c3RydWN0ZWQgdmlldyB3aXRoIHRoZSBvcmlnaW5hbCB0YWJsZSBob2xkaW5nIDxhY3JvbnltPkpT T048L2Fjcm9ueW0+CisgICBkYXRhLiBPcHRpb25hbGx5LCB5b3UgY2FuIHNwZWNpZnkgaG93IHRv IGpvaW4gdGhlIGNvbHVtbnMgcmV0dXJuZWQKKyAgIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9s aXRlcmFsPiB1c2luZyB0aGUgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gY2xhdXNlLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBFYWNoIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBj bGF1c2UgY2FuIGdlbmVyYXRlIG9uZSBvciBtb3JlCisgICBjb2x1bW5zLiBDb2x1bW5zIHByb2R1 Y2VkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPnMgYXQgdGhlCisgICBzYW1lIGxl dmVsIGFyZSBjb25zaWRlcmVkIHRvIGJlIDxmaXJzdHRlcm0+c2libGluZ3M8L2ZpcnN0dGVybT4s CisgICB3aGlsZSBhIGNvbHVtbiBwcm9kdWNlZCBieSBhIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9s aXRlcmFsPiBpcworICAgY29uc2lkZXJlZCB0byBiZSBhIGNoaWxkIG9mIHRoZSBjb2x1bW4gcHJv ZHVjZWQgYnkgYQorICAgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IG9yIHJvdyBleHBy ZXNzaW9uIGF0IGEgaGlnaGVyIGxldmVsLgorICAgU2libGluZyBjb2x1bW5zIGFyZSBhbHdheXMg am9pbmVkIGZpcnN0LiBPbmNlIHRoZXkgYXJlIHByb2Nlc3NlZCwKKyAgIHRoZSByZXN1bHRpbmcg cm93cyBhcmUgam9pbmVkIHRvIHRoZSBwYXJlbnQgcm93LgorICA8L3BhcmE+CisKKyAgPHBhcmE+ CisgICBUaGUgc3ludGF4IGlzOgorICA8L3BhcmE+CisKKzxzeW5vcHNpcz4KK0pTT05fVEFCTEUg KAorICA8cmVwbGFjZWFibGU+Y29udGV4dF9pdGVtPC9yZXBsYWNlYWJsZT4sIDxyZXBsYWNlYWJs ZT5wYXRoX2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IEFTIDxyZXBsYWNlYWJs ZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxvcHRpb25hbD4gUEFT U0lORyB7IDxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IEFTIDxyZXBsYWNlYWJsZT52 YXJuYW1lPC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+LCAuLi48L29wdGlvbmFsPiA8L29wdGlv bmFsPgorICBDT0xVTU5TICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmpzb25fdGFi bGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQorICA8 b3B0aW9uYWw+IHsgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+RU1QVFk8L2xp dGVyYWw+IH0gPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IDwvb3B0aW9uYWw+CisgIDxvcHRp b25hbD4KKyAgICBQTEFOICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmpzb25fdGFi bGVfcGxhbjwvcmVwbGFjZWFibGU+ICkgfAorICAgIFBMQU4gREVGQVVMVCAoIHsgSU5ORVIgfCBP VVRFUiB9IDxvcHRpb25hbD4gLCB7IENST1NTIHwgVU5JT04gfSA8L29wdGlvbmFsPgorICAgICAg ICAgICAgICAgICB8IHsgQ1JPU1MgfCBVTklPTiB9IDxvcHRpb25hbD4gLCB7IElOTkVSIHwgT1VU RVIgfSA8L29wdGlvbmFsPiApCisgIDwvb3B0aW9uYWw+CispCisKKzxwaHJhc2U+Cit3aGVyZSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+anNvbl90YWJsZV9jb2x1bW48L3JlcGxhY2Vh YmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4g PHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IFBBVEggPHJlcGxhY2Vh YmxlPmpzb25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KKyAg ICAgICAgPG9wdGlvbmFsPiB7IFdJVEhPVVQgfCBXSVRIIHsgQ09ORElUSU9OQUwgfCA8b3B0aW9u YWw+VU5DT05ESVRJT05BTDwvb3B0aW9uYWw+IH0gfSA8b3B0aW9uYWw+IEFSUkFZIDwvb3B0aW9u YWw+IFdSQVBQRVIgPC9vcHRpb25hbD4KKyAgICAgICAgPG9wdGlvbmFsPiB7IEtFRVAgfCBPTUlU IH0gUVVPVEVTIDxvcHRpb25hbD4gT04gU0NBTEFSIFNUUklORyA8L29wdGlvbmFsPiA8L29wdGlv bmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgREVGQVVMVCA8cmVwbGFj ZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IH0gT04gRU1QVFkgPC9vcHRpb25hbD4KKyAg ICAgICAgPG9wdGlvbmFsPiB7IEVSUk9SIHwgTlVMTCB8IERFRkFVTFQgPHJlcGxhY2VhYmxlPmV4 cHJlc3Npb248L3JlcGxhY2VhYmxlPiB9IE9OIEVSUk9SIDwvb3B0aW9uYWw+CisgIHwgPHJlcGxh Y2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+ IEZPUk1BVCBKU09OIDxvcHRpb25hbD5FTkNPRElORyA8bGl0ZXJhbD5VVEY4PC9saXRlcmFsPjwv b3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4gUEFUSCA8cmVwbGFjZWFibGU+anNvbl9wYXRo X3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9u YWw+IHsgV0lUSE9VVCB8IFdJVEggeyBDT05ESVRJT05BTCB8IDxvcHRpb25hbD5VTkNPTkRJVElP TkFMPC9vcHRpb25hbD4gfSB9IDxvcHRpb25hbD4gQVJSQVkgPC9vcHRpb25hbD4gV1JBUFBFUiA8 L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgS0VFUCB8IE9NSVQgfSBRVU9URVMgPG9w dGlvbmFsPiBPTiBTQ0FMQVIgU1RSSU5HIDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CisgICAgICAg IDxvcHRpb25hbD4geyBFUlJPUiB8IE5VTEwgfCBFTVBUWSB7IEFSUkFZIHwgT0JKRUNUIH0gfCBE RUZBVUxUIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gfSBPTiBFTVBUWSA8 L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBOVUxMIHwgRU1QVFkgeyBB UlJBWSB8IE9CSkVDVCB9IHwgREVGQVVMVCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFj ZWFibGU+IH0gT04gRVJST1IgPC9vcHRpb25hbD4KKyAgfCA8cmVwbGFjZWFibGU+bmFtZTwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4gRVhJU1RTIDxvcHRpb25h bD4gUEFUSCA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxl PiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IHsgRVJST1IgfCBUUlVFIHwgRkFMU0Ug fCBVTktOT1dOIH0gT04gRVJST1IgPC9vcHRpb25hbD4KKyAgfCBORVNURUQgUEFUSCA8cmVwbGFj ZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IEFT IDxyZXBsYWNlYWJsZT5wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAg ICBDT0xVTU5TICggPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4g PG9wdGlvbmFsPiwgLi4uPC9vcHRpb25hbD4gKQorICB8IDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBs YWNlYWJsZT4gRk9SIE9SRElOQUxJVFkKKzxwaHJhc2U+Cis8cmVwbGFjZWFibGU+anNvbl90YWJs ZV9wbGFuPC9yZXBsYWNlYWJsZT4gaXM6Cis8L3BocmFzZT4KKyAgICA8cmVwbGFjZWFibGU+anNv bl9wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IHsgT1VURVIgfCBJTk5FUiB9IDxy ZXBsYWNlYWJsZT5qc29uX3RhYmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFjZWFibGU+IDwvb3B0aW9u YWw+CisgIHwgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJs ZT4geyBVTklPTiA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxhY2Vh YmxlPiB9IDxvcHRpb25hbD4uLi48L29wdGlvbmFsPgorICB8IDxyZXBsYWNlYWJsZT5qc29uX3Rh YmxlX3BsYW5fcHJpbWFyeTwvcmVwbGFjZWFibGU+IHsgQ1JPU1MgPHJlcGxhY2VhYmxlPmpzb25f dGFibGVfcGxhbl9wcmltYXJ5PC9yZXBsYWNlYWJsZT4gfSA8b3B0aW9uYWw+Li4uPC9vcHRpb25h bD4KKzxwaHJhc2U+Cis8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuX3ByaW1hcnk8L3JlcGxh Y2VhYmxlPiBpczoKKzwvcGhyYXNlPgorICAgIDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwv cmVwbGFjZWFibGU+IHwgKCA8cmVwbGFjZWFibGU+anNvbl90YWJsZV9wbGFuPC9yZXBsYWNlYWJs ZT4gKQorPC9zeW5vcHNpcz4KKworICA8cGFyYT4KKyAgIEVhY2ggc3ludGF4IGVsZW1lbnQgaXMg ZGVzY3JpYmVkIGJlbG93IGluIG1vcmUgZGV0YWlsLgorICA8L3BhcmE+CisKKyAgPHZhcmlhYmxl bGlzdD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPjxyZXBs YWNlYWJsZT5jb250ZXh0X2l0ZW08L3JlcGxhY2VhYmxlPiwgPHJlcGxhY2VhYmxlPnBhdGhfZXhw cmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4gPGxpdGVyYWw+QVM8L2xpdGVyYWw+IDxy ZXBsYWNlYWJsZT5qc29uX3BhdGhfbmFtZTwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+IDxvcHRp b25hbD4gPGxpdGVyYWw+UEFTU0lORzwvbGl0ZXJhbD4geyA8cmVwbGFjZWFibGU+dmFsdWU8L3Jl cGxhY2VhYmxlPiA8bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnZhcm5hbWU8L3Jl cGxhY2VhYmxlPiB9IDxvcHRpb25hbD4sIC4uLjwvb3B0aW9uYWw+PC9vcHRpb25hbD48L2xpdGVy YWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgVGhlIGlu cHV0IGRhdGEgdG8gcXVlcnksIHRoZSBKU09OIHBhdGggZXhwcmVzc2lvbiBkZWZpbmluZyB0aGUg cXVlcnksCisgICAgIGFuZCBhbiBvcHRpb25hbCA8bGl0ZXJhbD5QQVNTSU5HPC9saXRlcmFsPiBj bGF1c2UsIHdoaWNoIGNhbiBwcm92aWRlIGRhdGEKKyAgICAgdmFsdWVzIHRvIHRoZSA8cmVwbGFj ZWFibGU+cGF0aF9leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4uCisgICAgIFRoZSByZXN1bHQgb2Yg dGhlIGlucHV0IGRhdGEKKyAgICAgZXZhbHVhdGlvbiBpcyBjYWxsZWQgdGhlIDxmaXJzdHRlcm0+ cm93IHBhdHRlcm48L2ZpcnN0dGVybT4uIFRoZSByb3cKKyAgICAgcGF0dGVybiBpcyB1c2VkIGFz IHRoZSBzb3VyY2UgZm9yIHJvdyB2YWx1ZXMgaW4gdGhlIGNvbnN0cnVjdGVkIHZpZXcuCisgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxp c3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4oIDxy ZXBsYWNlYWJsZT5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIC4u Ljwvb3B0aW9uYWw+ICkKKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+ CisgICAgIFRoZSA8bGl0ZXJhbD5DT0xVTU5TPC9saXRlcmFsPiBjbGF1c2UgZGVmaW5pbmcgdGhl IHNjaGVtYSBvZiB0aGUKKyAgICAgY29uc3RydWN0ZWQgdmlldy4gSW4gdGhpcyBjbGF1c2UsIHlv dSBtdXN0IHNwZWNpZnkgYWxsIHRoZSBjb2x1bW5zCisgICAgIHRvIGJlIGZpbGxlZCB3aXRoIFNR TC9KU09OIGl0ZW1zLgorICAgICBUaGUgPHJlcGxhY2VhYmxlPmpzb25fdGFibGVfY29sdW1uPC9y ZXBsYWNlYWJsZT4KKyAgICAgZXhwcmVzc2lvbiBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXggdmFy aWFudHM6CisgICAgPC9wYXJhPgorCisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD48cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFi bGU+IDxyZXBsYWNlYWJsZT50eXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICA8b3B0aW9uYWw+ IDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5qc29uX3BhdGhfc3BlY2lmaWNh dGlvbjwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+PC9saXRlcmFsPgorICAgIDwvdGVybT4KKyAg ICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgSW5zZXJ0cyBhIHNpbmdsZSBTUUwvSlNP TiBpdGVtIGludG8gdGhlIG91dHB1dCByb3cuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAg ICBUaGUgcHJvdmlkZWQgPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gZXhwcmVzc2lvbiBpcyBldmFs dWF0ZWQgYW5kCisgICAgIHRoZSBjb2x1bW4gaXMgZmlsbGVkIHdpdGggdGhlIHByb2R1Y2VkIFNR TC9KU09OIGl0ZW0sIG9uZSBmb3IgZWFjaCByb3cuCisgICAgIElmIHRoZSA8bGl0ZXJhbD5QQVRI PC9saXRlcmFsPiBleHByZXNzaW9uIGlzIG9taXR0ZWQsCisgICAgIDxmdW5jdGlvbj5KU09OX1RB QkxFPC9mdW5jdGlvbj4gdXNlcyB0aGUKKyAgICAgPGxpdGVyYWw+JC48cmVwbGFjZWFibGU+bmFt ZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPiBwYXRoIGV4cHJlc3Npb24sCisgICAgIHdoZXJlIDxy ZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1l LgorICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjb2x1bW4gbmFtZSBtdXN0IGNvcnJlc3BvbmQgdG8g b25lIG9mIHRoZQorICAgICBrZXlzIHdpdGhpbiB0aGUgU1FML0pTT04gaXRlbSBwcm9kdWNlZCBi eSB0aGUgcm93IHBhdHRlcm4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICBPcHRpb25h bGx5LCB5b3UgY2FuIHNwZWNpZnkgPGxpdGVyYWw+V1JBUFBFUjwvbGl0ZXJhbD4sCisgICAgIDxs aXRlcmFsPlFVT1RFUzwvbGl0ZXJhbD4gY2xhdXNlcyB0byBmb3JtYXQgdGhlIG91dHB1dCBhbmQK KyAgICAgPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5PTiBFUlJPUjwv bGl0ZXJhbD4gdG8gaGFuZGxlCisgICAgIHRob3NlIG1pc3NpbmcgdmFsdWVzIGFuZCBzdHJ1Y3R1 cmFsIGVycm9ycywgcmVzcGVjdGl2ZWx5LgorICAgIDwvcGFyYT4KKyAgICA8bm90ZT4KKyAgICAg PHBhcmE+CisgICAgICBUaGlzIGNsYXVzZSBpcyBpbnRlcm5hbGx5IHR1cm5lZCBpbnRvIGFuZCBo YXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzCisgICAgICA8ZnVuY3Rpb24+anNvbl92YWx1ZTwvZnVu Y3Rpb24+IGFuZCA8ZnVuY3Rpb24+anNvbl9xdWVyeTwvZnVuY3Rpb24+LgorICAgICAgVGhlIGxh dHRlciBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgbm90IGEgc2NhbGFyIHR5cGUgb3IgaWYKKyAg ICAgIDxsaXRlcmFsPldSQVBQRVI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlFVT1RFUzwvbGl0ZXJh bD4gY2xhdXNlIGlzCisgICAgICBwcmVzZW50LgorICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgor ICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+dHlwZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkZPUk1BVCBKU09OPC9saXRlcmFsPiA8 b3B0aW9uYWw+RU5DT0RJTkcgPGxpdGVyYWw+VVRGODwvbGl0ZXJhbD48L29wdGlvbmFsPgorICAg ICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UEFUSDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpz b25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4KKyAgICA8L3Rl cm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIEluc2VydHMgYSBjb21wb3Np dGUgU1FML0pTT04gaXRlbSBpbnRvIHRoZSBvdXRwdXQgcm93LgorICAgIDwvcGFyYT4KKyAgICA8 cGFyYT4KKyAgICAgVGhlIHByb3ZpZGVkIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+IGV4cHJlc3Np b24gaXMgZXZhbHVhdGVkIGFuZAorICAgICB0aGUgY29sdW1uIGlzIGZpbGxlZCB3aXRoIHRoZSBw cm9kdWNlZCBTUUwvSlNPTiBpdGVtLiAgSWYgdGhlCisgICAgIDxsaXRlcmFsPlBBVEg8L2xpdGVy YWw+IGV4cHJlc3Npb24gaXMgb21pdHRlZCwgcGF0aCBleHByZXNzaW9uCisgICAgIDxsaXRlcmFs PiQuPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD4gaXMgdXNlZCwKKyAg ICAgd2hlcmUgPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcHJvdmlkZWQg Y29sdW1uIG5hbWUuCisgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNvbHVtbiBuYW1lIG11c3QgY29y cmVzcG9uZCB0byBvbmUgb2YgdGhlCisgICAgIGtleXMgd2l0aGluIHRoZSBTUUwvSlNPTiBpdGVt IHByb2R1Y2VkIGJ5IHRoZSByb3cgcGF0dGVybi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+Cisg ICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSA8bGl0ZXJhbD5XUkFQUEVSPC9saXRlcmFs PiwKKyAgICAgPGxpdGVyYWw+UVVPVEVTPC9saXRlcmFsPiBjbGF1c2VzIHRvIGZvcm1hdCB0aGUg b3V0cHV0IGFuZAorICAgICA8bGl0ZXJhbD5PTiBFTVBUWTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFs Pk9OIEVSUk9SPC9saXRlcmFsPiB0byBoYW5kbGUKKyAgICAgdGhvc2Ugc2NlbmFyaW9zIGFwcHJv cHJpYXRlbHkuCisgICAgPC9wYXJhPgorICAgIDxub3RlPgorICAgICA8cGFyYT4KKyAgICAgIFRo aXMgY2xhdXNlIGlzIGludGVybmFsbHkgdHVybmVkIGludG8gYW5kIGhhcyB0aGUgc2FtZSBzZW1h bnRpY3MgYXMKKyAgICAgIDxmdW5jdGlvbj5qc29uX3F1ZXJ5PC9mdW5jdGlvbj4uCisgICAgIDwv cGFyYT4KKyAgICA8L25vdGU+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICAgIDxyZXBsYWNlYWJsZT5uYW1l PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnR5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgIDxs aXRlcmFsPkVYSVNUUzwvbGl0ZXJhbD4gPG9wdGlvbmFsPiA8bGl0ZXJhbD5QQVRIPC9saXRlcmFs PiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8L29w dGlvbmFsPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAg SW5zZXJ0cyBhIGJvb2xlYW4gaXRlbSBpbnRvIGVhY2ggb3V0cHV0IHJvdy4KKyAgICA8L3BhcmE+ CisgICAgPHBhcmE+CisgICAgIFRoZSB2YWx1ZSBjb3JyZXNwb25kcyB0byB3aGV0aGVyIGV2YWx1 YXRpbmcgdGhlIDxsaXRlcmFsPlBBVEg8L2xpdGVyYWw+CisgICAgIGV4cHJlc3Npb24geWllbGRz IGFueSBTUUwvSlNPTiBpdGVtcy4gIElmIHRoZSA8bGl0ZXJhbD5QQVRIPC9saXRlcmFsPgorICAg ICBleHByZXNzaW9uIGlzIG9taXR0ZWQsIHBhdGggZXhwcmVzc2lvbgorICAgICA8bGl0ZXJhbD4k LjxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+IGlzIHVzZWQsCisgICAg IHdoZXJlIDxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHByb3ZpZGVkIGNv bHVtbiBuYW1lLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhlIHNwZWNpZmllZCA8 cGFyYW1ldGVyPnR5cGU8L3BhcmFtZXRlcj4gc2hvdWxkIGhhdmUgYSBjYXN0IGZyb20gdGhlCisg ICAgIDx0eXBlPmJvb2xlYW48L3R5cGU+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAg T3B0aW9uYWxseSwgeW91IGNhbiBhZGQgPGxpdGVyYWw+T04gRVJST1I8L2xpdGVyYWw+IGNsYXVz ZSB0byBkZWZpbmUKKyAgICAgZXJyb3IgYmVoYXZpb3IuCisgICAgPC9wYXJhPgorICAgIDxub3Rl PgorICAgICA8cGFyYT4KKyAgICAgIFRoaXMgY2xhdXNlIGlzIGludGVybmFsbHkgdHVybmVkIGlu dG8gYW5kIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKKyAgICAgIDxmdW5jdGlvbj5qc29uX2V4 aXN0czwvZnVuY3Rpb24+LgorICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorICAgIDwvbGlzdGl0 ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4K KyAgICAgIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9w YXRoX3NwZWNpZmljYXRpb248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+IDxsaXRlcmFsPkFTPC9s aXRlcmFsPiA8cmVwbGFjZWFibGU+anNvbl9wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiA8L29wdGlv bmFsPgorICAgICAgICAgIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+ICggPHJlcGxhY2VhYmxl Pmpzb25fdGFibGVfY29sdW1uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgLi4uPC9vcHRpb25h bD4gKQorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgRXh0 cmFjdHMgU1FML0pTT04gaXRlbXMgZnJvbSBuZXN0ZWQgbGV2ZWxzIG9mIHRoZSByb3cgcGF0dGVy biwKKyAgICAgZ2VuZXJhdGVzIG9uZSBvciBtb3JlIGNvbHVtbnMgYXMgZGVmaW5lZCBieSB0aGUg PGxpdGVyYWw+Q09MVU1OUzwvbGl0ZXJhbD4KKyAgICAgc3ViY2xhdXNlLCBhbmQgaW5zZXJ0cyB0 aGUgZXh0cmFjdGVkIFNRTC9KU09OIGl0ZW1zIGludG8gZWFjaCByb3cgb2YgdGhlc2UgY29sdW1u cy4KKyAgICAgVGhlIDxyZXBsYWNlYWJsZT5qc29uX3RhYmxlX2NvbHVtbjwvcmVwbGFjZWFibGU+ IGV4cHJlc3Npb24gaW4gdGhlCisgICAgIDxsaXRlcmFsPkNPTFVNTlM8L2xpdGVyYWw+IHN1YmNs YXVzZSB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyBpbiB0aGUKKyAgICAgcGFyZW50IDxsaXRlcmFs PkNPTFVNTlM8L2xpdGVyYWw+IGNsYXVzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAg ICAgVGhlIDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPiBzeW50YXggaXMgcmVjdXJzaXZl LAorICAgICBzbyB5b3UgY2FuIGdvIGRvd24gbXVsdGlwbGUgbmVzdGVkIGxldmVscyBieSBzcGVj aWZ5aW5nIHNldmVyYWwKKyAgICAgPGxpdGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+IHN1YmNs YXVzZXMgd2l0aGluIGVhY2ggb3RoZXIuCisgICAgIEl0IGFsbG93cyB0byB1bm5lc3QgdGhlIGhp ZXJhcmNoeSBvZiBKU09OIG9iamVjdHMgYW5kIGFycmF5cworICAgICBpbiBhIHNpbmdsZSBmdW5j dGlvbiBpbnZvY2F0aW9uIHJhdGhlciB0aGFuIGNoYWluaW5nIHNldmVyYWwKKyAgICAgPGZ1bmN0 aW9uPkpTT05fVEFCTEU8L2Z1bmN0aW9uPiBleHByZXNzaW9ucyBpbiBhbiBTUUwgc3RhdGVtZW50 LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBZb3UgY2FuIHVzZSB0aGUgPGxpdGVy YWw+UExBTjwvbGl0ZXJhbD4gY2xhdXNlIHRvIGRlZmluZSBob3cKKyAgICAgdG8gam9pbiB0aGUg Y29sdW1ucyByZXR1cm5lZCBieSA8bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4gY2xhdXNl cy4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8cmVwbGFjZWFibGU+bmFtZTwvcmVw bGFjZWFibGU+IDxsaXRlcmFsPkZPUiBPUkRJTkFMSVRZPC9saXRlcmFsPgorICAgIDwvdGVybT4K KyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAgQWRkcyBhbiBvcmRpbmFsaXR5IGNv bHVtbiB0aGF0IHByb3ZpZGVzIHNlcXVlbnRpYWwgcm93IG51bWJlcmluZy4KKyAgICAgWW91IGNh biBoYXZlIG9ubHkgb25lIG9yZGluYWxpdHkgY29sdW1uIHBlciB0YWJsZS4gUm93IG51bWJlcmlu ZworICAgICBpcyAxLWJhc2VkLiBGb3IgY2hpbGQgcm93cyB0aGF0IHJlc3VsdCBmcm9tIHRoZSA8 bGl0ZXJhbD5ORVNURUQgUEFUSDwvbGl0ZXJhbD4KKyAgICAgY2xhdXNlcywgdGhlIHBhcmVudCBy b3cgbnVtYmVyIGlzIHJlcGVhdGVkLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorCisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8 bGl0ZXJhbD5BUzwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPmpzb25fcGF0aF9uYW1lPC9yZXBsYWNl YWJsZT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIFRo ZSBvcHRpb25hbCA8cmVwbGFjZWFibGU+anNvbl9wYXRoX25hbWU8L3JlcGxhY2VhYmxlPiBzZXJ2 ZXMgYXMgYW4KKyAgICAgaWRlbnRpZmllciBvZiB0aGUgcHJvdmlkZWQgPHJlcGxhY2VhYmxlPmpz b25fcGF0aF9zcGVjaWZpY2F0aW9uPC9yZXBsYWNlYWJsZT4uCisgICAgIFRoZSBwYXRoIG5hbWUg bXVzdCBiZSB1bmlxdWUgYW5kIGRpc3RpbmN0IGZyb20gdGhlIGNvbHVtbiBuYW1lcy4KKyAgICAg V2hlbiB1c2luZyB0aGUgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4gY2xhdXNlLCB5b3UgbXVzdCBz cGVjaWZ5IHRoZSBuYW1lcworICAgICBmb3IgYWxsIHRoZSBwYXRocywgaW5jbHVkaW5nIHRoZSBy b3cgcGF0dGVybi4gRWFjaCBwYXRoIG5hbWUgY2FuIGFwcGVhciBpbgorICAgICB0aGUgPGxpdGVy YWw+UExBTjwvbGl0ZXJhbD4gY2xhdXNlIG9ubHkgb25jZS4KKyAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0 ZXJtPgorICAgICA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiAoIDxyZXBsYWNlYWJsZT5qc29uX3Rh YmxlX3BsYW48L3JlcGxhY2VhYmxlPiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKwor ICAgIDxwYXJhPgorICAgICBEZWZpbmVzIGhvdyB0byBqb2luIHRoZSBkYXRhIHJldHVybmVkIGJ5 IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPgorICAgICBjbGF1c2VzIHRvIHRoZSBjb25z dHJ1Y3RlZCB2aWV3LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVG8gam9pbiBjb2x1 bW5zIHdpdGggcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCwgeW91IGNhbiB1c2U6CisgICAgPC9w YXJhPgorICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAg ICAgPGxpdGVyYWw+SU5ORVI8L2xpdGVyYWw+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KworICAgIDxwYXJhPgorICAgICBVc2UgPGxpdGVyYWw+SU5ORVIgSk9JTjwvbGl0ZXJhbD4sIHNv IHRoYXQgdGhlIHBhcmVudCByb3cKKyAgICAgaXMgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQgaWYg aXQgZG9lcyBub3QgaGF2ZSBhbnkgY2hpbGQgcm93cworICAgICBhZnRlciBqb2luaW5nIHRoZSBk YXRhIHJldHVybmVkIGJ5IDxsaXRlcmFsPk5FU1RFRCBQQVRIPC9saXRlcmFsPi4KKyAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5PVVRFUjwvbGl0ZXJhbD4KKyAgICA8L3Rl cm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIFVzZSA8bGl0ZXJhbD5MRUZU IE9VVEVSIEpPSU48L2xpdGVyYWw+LCBzbyB0aGF0IHRoZSBwYXJlbnQgcm93CisgICAgIGlzIGFs d2F5cyBpbmNsdWRlZCBpbnRvIHRoZSBvdXRwdXQgZXZlbiBpZiBpdCBkb2VzIG5vdCBoYXZlIGFu eSBjaGlsZCByb3dzCisgICAgIGFmdGVyIGpvaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgPGxp dGVyYWw+TkVTVEVEIFBBVEg8L2xpdGVyYWw+LCB3aXRoIE5VTEwgdmFsdWVzCisgICAgIGluc2Vy dGVkIGludG8gdGhlIGNoaWxkIGNvbHVtbnMgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgdmFs dWVzIGFyZSBtaXNzaW5nLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgVGhpcyBpcyB0 aGUgZGVmYXVsdCBvcHRpb24gZm9yIGpvaW5pbmcgY29sdW1ucyB3aXRoIHBhcmVudC9jaGlsZCBy ZWxhdGlvbnNoaXAuCisgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgPHBhcmE+CisgICAgIFRvIGpvaW4gc2li bGluZyBjb2x1bW5zLCB5b3UgY2FuIHVzZToKKyAgICA8L3BhcmE+CisKKyAgPHZhcmlhYmxlbGlz dD4KKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxsaXRlcmFsPlVOSU9OPC9s aXRlcmFsPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisKKyAgICA8cGFyYT4KKyAgICAg R2VuZXJhdGUgb25lIHJvdyBmb3IgZWFjaCB2YWx1ZSBwcm9kdWNlZCBieSBlYWNoIG9mIHRoZSBz aWJsaW5nCisgICAgIGNvbHVtbnMuIFRoZSBjb2x1bW5zIGZyb20gdGhlIG90aGVyIHNpYmxpbmdz IGFyZSBzZXQgdG8gbnVsbC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIFRoaXMgaXMg dGhlIGRlZmF1bHQgb3B0aW9uIGZvciBqb2luaW5nIHNpYmxpbmcgY29sdW1ucy4KKyAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5DUk9TUzwvbGl0ZXJhbD4KKyAgICA8L3Rl cm0+CisgICAgPGxpc3RpdGVtPgorCisgICAgPHBhcmE+CisgICAgIEdlbmVyYXRlIG9uZSByb3cg Zm9yIGVhY2ggY29tYmluYXRpb24gb2YgdmFsdWVzIGZyb20gdGhlIHNpYmxpbmcgY29sdW1ucy4K KyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwv dmFyaWFibGVsaXN0PgorCisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8bGl0ZXJhbD5QTEFOIERFRkFVTFQ8 L2xpdGVyYWw+ICggPGxpdGVyYWw+PHJlcGxhY2VhYmxlPk9VVEVSIHwgSU5ORVI8L3JlcGxhY2Vh YmxlPiA8b3B0aW9uYWw+LCA8cmVwbGFjZWFibGU+VU5JT04gfCBDUk9TUzwvcmVwbGFjZWFibGU+ IDwvb3B0aW9uYWw+PC9saXRlcmFsPiApCisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAg ICAgPHBhcmE+CisgICAgICBUaGUgdGVybXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluIHJldmVy c2Ugb3JkZXIuIFRoZQorICAgICAgPGxpdGVyYWw+SU5ORVI8L2xpdGVyYWw+IG9yIDxsaXRlcmFs Pk9VVEVSPC9saXRlcmFsPiBvcHRpb24gZGVmaW5lcyB0aGUKKyAgICAgIGpvaW5pbmcgcGxhbiBm b3IgcGFyZW50L2NoaWxkIGNvbHVtbnMsIHdoaWxlIDxsaXRlcmFsPlVOSU9OPC9saXRlcmFsPiBv cgorICAgICAgPGxpdGVyYWw+Q1JPU1M8L2xpdGVyYWw+IGFmZmVjdHMgam9pbnMgb2Ygc2libGlu ZyBjb2x1bW5zLiBUaGlzIGZvcm0KKyAgICAgIG9mIDxsaXRlcmFsPlBMQU48L2xpdGVyYWw+IG92 ZXJyaWRlcyB0aGUgZGVmYXVsdCBwbGFuIGZvcgorICAgICAgYWxsIGNvbHVtbnMgYXQgb25jZS4g RXZlbiB0aG91Z2ggdGhlIHBhdGggbmFtZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUKKyAgICAg IDxsaXRlcmFsPlBMQU4gREVGQVVMVDwvbGl0ZXJhbD4gZm9ybSwgdG8gY29uZm9ybSB0byB0aGUg U1FML0pTT04gc3RhbmRhcmQKKyAgICAgIHRoZXkgbXVzdCBiZSBwcm92aWRlZCBmb3IgYWxsIHRo ZSBwYXRocyBpZiB0aGUgPGxpdGVyYWw+UExBTjwvbGl0ZXJhbD4KKyAgICAgIGNsYXVzZSBpcyB1 c2VkLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+UExBTiBERUZB VUxUPC9saXRlcmFsPiBpcyBzaW1wbGVyIHRoYW4gc3BlY2lmeWluZyBhIGNvbXBsZXRlCisgICAg ICA8bGl0ZXJhbD5QTEFOPC9saXRlcmFsPiwgYW5kIGlzIG9mdGVuIGFsbCB0aGF0IGlzIHJlcXVp cmVkIHRvIGdldCB0aGUgZGVzaXJlZAorICAgICAgb3V0cHV0LgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKworICA8 cGFyYT5FeGFtcGxlczwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgSW4gdGhlc2UgZXhhbXBs ZXMgdGhlIGZvbGxvd2luZyBzbWFsbCB0YWJsZSBzdG9yaW5nIHNvbWUgSlNPTiBkYXRhIHdpbGwg YmUgdXNlZDoKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFURSBUQUJMRSBteV9maWxtcyAoIGpzIGpz b25iICk7CisKK0lOU0VSVCBJTlRPIG15X2ZpbG1zIFZBTFVFUyAoCisneyAiZmF2b3JpdGVzIiA6 IFsKKyAgIHsgImtpbmQiIDogImNvbWVkeSIsICJmaWxtcyIgOiBbCisgICAgIHsgInRpdGxlIiA6 ICJCYW5hbmFzIiwKKyAgICAgICAiZGlyZWN0b3IiIDogIldvb2R5IEFsbGVuIn0sCisgICAgIHsg InRpdGxlIiA6ICJUaGUgRGlubmVyIEdhbWUiLAorICAgICAgICJkaXJlY3RvciIgOiAiRnJhbmNp cyBWZWJlciIgfSBdIH0sCisgICB7ICJraW5kIiA6ICJob3Jyb3IiLCAiZmlsbXMiIDogWworICAg ICB7ICJ0aXRsZSIgOiAiUHN5Y2hvIiwKKyAgICAgICAiZGlyZWN0b3IiIDogIkFsZnJlZCBIaXRj aGNvY2siIH0gXSB9LAorICAgeyAia2luZCIgOiAidGhyaWxsZXIiLCAiZmlsbXMiIDogWworICAg ICB7ICJ0aXRsZSIgOiAiVmVydGlnbyIsCisgICAgICAgImRpcmVjdG9yIiA6ICJBbGZyZWQgSGl0 Y2hjb2NrIiB9IF0gfSwKKyAgIHsgImtpbmQiIDogImRyYW1hIiwgImZpbG1zIiA6IFsKKyAgICAg eyAidGl0bGUiIDogIllvamltYm8iLAorICAgICAgICJkaXJlY3RvciIgOiAiQWtpcmEgS3Vyb3Nh d2EiIH0gXSB9CisgIF0gfScpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgPC9wYXJhPgorICAg ICA8cGFyYT4KKyAgICAgIFF1ZXJ5IHRoZSA8c3RydWN0bmFtZT5teV9maWxtczwvc3RydWN0bmFt ZT4gdGFibGUgaG9sZGluZworICAgICAgc29tZSBKU09OIGRhdGEgYWJvdXQgdGhlIGZpbG1zIGFu ZCBjcmVhdGUgYSB2aWV3IHRoYXQKKyAgICAgIGRpc3RyaWJ1dGVzIHRoZSBmaWxtIGdlbnJlLCB0 aXRsZSwgYW5kIGRpcmVjdG9yIGJldHdlZW4gc2VwYXJhdGUgY29sdW1uczoKKzxzY3JlZW4+CitT RUxFQ1QganQuKiBGUk9NCisgbXlfZmlsbXMsCisgSlNPTl9UQUJMRSAoIGpzLCAnJC5mYXZvcml0 ZXNbKl0nIENPTFVNTlMgKAorICAgaWQgRk9SIE9SRElOQUxJVFksCisgICBraW5kIHRleHQgUEFU SCAnJC5raW5kJywKKyAgIE5FU1RFRCBQQVRIICckLmZpbG1zWypdJyBDT0xVTU5TICgKKyAgICAg dGl0bGUgdGV4dCBQQVRIICckLnRpdGxlJywKKyAgICAgZGlyZWN0b3IgdGV4dCBQQVRIICckLmRp cmVjdG9yJykpKSBBUyBqdDsKKy0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLQorIGlkIHwgICBraW5kICAgfCAgICAgICB0aXRsZSAgICAgIHwgICAg ZGlyZWN0b3IKKy0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLQorIDEgIHwgY29tZWR5ICAgfCBCYW5hbmFzICAgICAgICAgIHwgV29vZHkgQWxsZW4K KyAxICB8IGNvbWVkeSAgIHwgVGhlIERpbm5lciBHYW1lICB8IEZyYW5jaXMgVmViZXIKKyAyICB8 IGhvcnJvciAgIHwgUHN5Y2hvICAgICAgICAgICB8IEFsZnJlZCBIaXRjaGNvY2sKKyAzICB8IHRo cmlsbGVyIHwgVmVydGlnbyAgICAgICAgICB8IEFsZnJlZCBIaXRjaGNvY2sKKyA0ICB8IGRyYW1h ICAgIHwgWW9qaW1ibyAgICAgICAgICB8IEFraXJhIEt1cm9zYXdhCisgKDUgcm93cykKKzwvc2Ny ZWVuPgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICBGaW5kIGEgZGlyZWN0b3Ig dGhhdCBoYXMgZG9uZSBmaWxtcyBpbiB0d28gZGlmZmVyZW50IGdlbnJlczoKKzxzY3JlZW4+CitT RUxFQ1QKKyAgZGlyZWN0b3IxIEFTIGRpcmVjdG9yLCB0aXRsZTEsIGtpbmQxLCB0aXRsZTIsIGtp bmQyCitGUk9NCisgIG15X2ZpbG1zLAorICBKU09OX1RBQkxFICgganMsICckLmZhdm9yaXRlcycg QVMgZmF2cyBDT0xVTU5TICgKKyAgICBORVNURUQgUEFUSCAnJFsqXScgQVMgZmlsbXMxIENPTFVN TlMgKAorICAgICAga2luZDEgdGV4dCBQQVRIICckLmtpbmQnLAorICAgICAgTkVTVEVEIFBBVEgg JyQuZmlsbXNbKl0nIEFTIGZpbG0xIENPTFVNTlMgKAorICAgICAgICB0aXRsZTEgdGV4dCBQQVRI ICckLnRpdGxlJywKKyAgICAgICAgZGlyZWN0b3IxIHRleHQgUEFUSCAnJC5kaXJlY3RvcicpCisg ICAgKSwKKyAgICBORVNURUQgUEFUSCAnJFsqXScgQVMgZmlsbXMyIENPTFVNTlMgKAorICAgICAg a2luZDIgdGV4dCBQQVRIICckLmtpbmQnLAorICAgICAgTkVTVEVEIFBBVEggJyQuZmlsbXNbKl0n IEFTIGZpbG0yIENPTFVNTlMgKAorICAgICAgICB0aXRsZTIgdGV4dCBQQVRIICckLnRpdGxlJywK KyAgICAgICAgZGlyZWN0b3IyIHRleHQgUEFUSCAnJC5kaXJlY3RvcicKKyAgICAgICkKKyAgICAp CisgICApCisgICBQTEFOIChmYXZzIE9VVEVSICgoZmlsbXMxIElOTkVSIGZpbG0xKSBDUk9TUyAo ZmlsbXMyIElOTkVSIGZpbG0yKSkpCisgICkgQVMganQKKyBXSEVSRSBraW5kMSA+IGtpbmQyIEFO RCBkaXJlY3RvcjEgPSBkaXJlY3RvcjI7CisKKyAgICAgZGlyZWN0b3IgICAgIHwgdGl0bGUxICB8 ICBraW5kMSAgIHwgdGl0bGUyIHwga2luZDIKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLQorIEFsZnJlZCBIaXRjaGNvY2sgfCBWZXJ0aWdv IHwgdGhyaWxsZXIgfCBQc3ljaG8gfCBob3Jyb3IKKygxIHJvdykKKzwvc2NyZWVuPgorICAgICA8 L3BhcmE+CisgIDwvc2VjdDI+CisKICA8L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJmdW5jdGlvbnMt c2VxdWVuY2UiPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMu dHh0IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CmluZGV4IDc1OThiZDhm MjIuLjk1MDBhODBmNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1 cmVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKQEAgLTU1 MSwxMCArNTUxLDEwIEBAIFQ4MTQJQ29sb24gaW4gSlNPTl9PQkpFQ1Qgb3IgSlNPTl9PQkpFQ1RB R0cJCQlZRVMKIFQ4MjEJQmFzaWMgU1FML0pTT04gcXVlcnkgb3BlcmF0b3JzCQkJWUVTCQogVDgy MglTUUwvSlNPTjogSVMgSlNPTiBXSVRIIFVOSVFVRSBLRVlTIHByZWRpY2F0ZQkJCVlFUwkKIFQ4 MjMJU1FML0pTT046IFBBU1NJTkcgY2xhdXNlCQkJWUVTCQotVDgyNAlKU09OX1RBQkxFOiBzcGVj aWZpYyBQTEFOIGNsYXVzZQkJCU5PCQorVDgyNAlKU09OX1RBQkxFOiBzcGVjaWZpYyBQTEFOIGNs YXVzZQkJCVlFUwkKIFQ4MjUJU1FML0pTT046IE9OIEVNUFRZIGFuZCBPTiBFUlJPUiBjbGF1c2Vz CQkJWUVTCQogVDgyNglHZW5lcmFsIHZhbHVlIGV4cHJlc3Npb24gaW4gT04gRVJST1Igb3IgT04g RU1QVFkgY2xhdXNlcwkJCVlFUwkKLVQ4MjcJSlNPTl9UQUJMRTogc2libGluZyBORVNURUQgQ09M VU1OUyBjbGF1c2VzCQkJTk8JCitUODI3CUpTT05fVEFCTEU6IHNpYmxpbmcgTkVTVEVEIENPTFVN TlMgY2xhdXNlcwkJCVlFUwkKIFQ4MjgJSlNPTl9RVUVSWQkJCVlFUwkKIFQ4MjkJSlNPTl9RVUVS WTogYXJyYXkgd3JhcHBlciBvcHRpb25zCQkJWUVTCQogVDgzMAlFbmZvcmNpbmcgdW5pcXVlIGtl eXMgaW4gU1FML0pTT04gY29uc3RydWN0b3IgZnVuY3Rpb25zCQkJWUVTCQpAQCAtNTY1LDcgKzU2 NSw3IEBAIFQ4MzQJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogd2lsZGNhcmQgbWVtYmVyIGFjY2Vz c29yCQkJWUVTCiBUODM1CVNRTC9KU09OIHBhdGggbGFuZ3VhZ2U6IGZpbHRlciBleHByZXNzaW9u cwkJCVlFUwkKIFQ4MzYJU1FML0pTT04gcGF0aCBsYW5ndWFnZTogc3RhcnRzIHdpdGggcHJlZGlj YXRlCQkJWUVTCQogVDgzNwlTUUwvSlNPTiBwYXRoIGxhbmd1YWdlOiByZWdleF9saWtlIHByZWRp Y2F0ZQkJCVlFUwkKLVQ4MzgJSlNPTl9UQUJMRTogUExBTiBERUZBVUxUIGNsYXVzZQkJCU5PCQor VDgzOAlKU09OX1RBQkxFOiBQTEFOIERFRkFVTFQgY2xhdXNlCQkJWUVTCQogVDgzOQlGb3JtYXR0 ZWQgY2FzdCBvZiBkYXRldGltZXMgdG8vZnJvbSBjaGFyYWN0ZXIgc3RyaW5ncwkJCU5PCQogVDg0 MAlIZXggaW50ZWdlciBsaXRlcmFscyBpbiBTUUwvSlNPTiBwYXRoIGxhbmd1YWdlCQkJWUVTCQog VDg1MQlTUUwvSlNPTjogb3B0aW9uYWwga2V5d29yZHMgZm9yIGRlZmF1bHQgc3ludGF4CQkJWUVT CQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDg0MzQ3MmU2ZGQuLmY3YWY4OWUxOTcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKQEAgLTM4OTIsNyArMzg5MiwxMyBAQCBFeHBsYWluVGFyZ2V0UmVs KFBsYW4gKnBsYW4sIEluZGV4IHJ0aSwgRXhwbGFpblN0YXRlICplcykKIAkJCWJyZWFrOwogCQlj YXNlIFRfVGFibGVGdW5jU2NhbjoKIAkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1RBQkxF RlVOQyk7Ci0JCQlvYmplY3RuYW1lID0gInhtbHRhYmxlIjsKKwkJCWlmIChydGUtPnRhYmxlZnVu YykKKwkJCQlpZiAocnRlLT50YWJsZWZ1bmMtPmZ1bmN0eXBlID09IFRGVF9YTUxUQUJMRSkKKwkJ CQkJb2JqZWN0bmFtZSA9ICJ4bWx0YWJsZSI7CisJCQkJZWxzZQkJCS8qIE11c3QgYmUgVEZUX0pT T05fVEFCTEUgKi8KKwkJCQkJb2JqZWN0bmFtZSA9ICJqc29uX3RhYmxlIjsKKwkJCWVsc2UKKwkJ CQlvYmplY3RuYW1lID0gTlVMTDsKIAkJCW9iamVjdHRhZyA9ICJUYWJsZSBGdW5jdGlvbiBOYW1l IjsKIAkJCWJyZWFrOwogCQljYXNlIFRfVmFsdWVzU2NhbjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jCmluZGV4IDk2NDQzM2EwZTcuLjNkNGRmYjgyYjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNDMzNCw2ICs0MzM0LDEyIEBAIEV4ZWNFdmFsSnNv bkV4cHJQYXRoKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJYnJlYWs7 CiAJCQl9CiAKKwkJY2FzZSBKU09OX1RBQkxFX09QOgorCQkJcG9zdF9ldmFsLT5qdW1wX2V2YWxf Y29lcmNpb24gPSAtMTsKKwkJCSpvcC0+cmVzdmFsdWUgPSBpdGVtOworCQkJKm9wLT5yZXNudWxs ID0gZmFsc2U7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBTUUwvSlNPTiBleHByZXNzaW9uIG9wICVkIiwgamV4cHItPm9wKTsKIAkJCXJldHVy biBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVUYWJsZUZ1bmNz Y2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlVGFibGVGdW5jc2Nhbi5jCmluZGV4IDcy Y2EzNGEyMjguLjk5ZmI5Mjg5NGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVUYWJsZUZ1bmNzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVRhYmxlRnVu Y3NjYW4uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5j bHVkZSAidXRpbHMvanNvbnBhdGguaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3htbC5oIgpAQCAtMTYx LDggKzE2Miw5IEBAIEV4ZWNJbml0VGFibGVGdW5jU2NhbihUYWJsZUZ1bmNTY2FuICpub2RlLCBF U3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlzY2Fuc3RhdGUtPnNzLnBzLnF1YWwgPQogCQlF eGVjSW5pdFF1YWwobm9kZS0+c2Nhbi5wbGFuLnF1YWwsICZzY2Fuc3RhdGUtPnNzLnBzKTsKIAot CS8qIE9ubHkgWE1MVEFCTEUgaXMgc3VwcG9ydGVkIGN1cnJlbnRseSAqLwotCXNjYW5zdGF0ZS0+ cm91dGluZSA9ICZYbWxUYWJsZVJvdXRpbmU7CisJLyogT25seSBYTUxUQUJMRSBhbmQgSlNPTl9U QUJMRSBhcmUgc3VwcG9ydGVkIGN1cnJlbnRseSAqLworCXNjYW5zdGF0ZS0+cm91dGluZSA9CisJ CXRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUgPyAmWG1sVGFibGVSb3V0aW5lIDogJkpzb25i VGFibGVSb3V0aW5lOwogCiAJc2NhbnN0YXRlLT5wZXJUYWJsZUN4dCA9CiAJCUFsbG9jU2V0Q29u dGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKQEAgLTE4Miw2ICsxODQsMTAgQEAgRXhl Y0luaXRUYWJsZUZ1bmNTY2FuKFRhYmxlRnVuY1NjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5jb2xleHBycywgKFBsYW5TdGF0ZSAq KSBzY2Fuc3RhdGUpOwogCXNjYW5zdGF0ZS0+Y29sZGVmZXhwcnMgPQogCQlFeGVjSW5pdEV4cHJM aXN0KHRmLT5jb2xkZWZleHBycywgKFBsYW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOworCXNjYW5zdGF0 ZS0+Y29sdmFsZXhwcnMgPQorCQlFeGVjSW5pdEV4cHJMaXN0KHRmLT5jb2x2YWxleHBycywgKFBs YW5TdGF0ZSAqKSBzY2Fuc3RhdGUpOworCXNjYW5zdGF0ZS0+cGFzc2luZ3ZhbGV4cHJzID0KKwkJ RXhlY0luaXRFeHByTGlzdCh0Zi0+cGFzc2luZ3ZhbGV4cHJzLCAoUGxhblN0YXRlICopIHNjYW5z dGF0ZSk7CiAKIAlzY2Fuc3RhdGUtPm5vdG51bGxzID0gdGYtPm5vdG51bGxzOwogCkBAIC0zNjks MTQgKzM3NSwxNyBAQCB0ZnVuY0luaXRpYWxpemUoVGFibGVGdW5jU2NhblN0YXRlICp0c3RhdGUs IEV4cHJDb250ZXh0ICplY29udGV4dCwgRGF0dW0gZG9jKQogCQlyb3V0aW5lLT5TZXROYW1lc3Bh Y2UodHN0YXRlLCBuc19uYW1lLCBuc191cmkpOwogCX0KIAotCS8qIEluc3RhbGwgdGhlIHJvdyBm aWx0ZXIgZXhwcmVzc2lvbiBpbnRvIHRoZSB0YWJsZSBidWlsZGVyIGNvbnRleHQgKi8KLQl2YWx1 ZSA9IEV4ZWNFdmFsRXhwcih0c3RhdGUtPnJvd2V4cHIsIGVjb250ZXh0LCAmaXNudWxsKTsKLQlp ZiAoaXNudWxsKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfTlVMTF9W QUxVRV9OT1RfQUxMT1dFRCksCi0JCQkJIGVycm1zZygicm93IGZpbHRlciBleHByZXNzaW9uIG11 c3Qgbm90IGJlIG51bGwiKSkpOworCWlmIChyb3V0aW5lLT5TZXRSb3dGaWx0ZXIpCisJeworCQkv KiBJbnN0YWxsIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb24gaW50byB0aGUgdGFibGUgYnVpbGRl ciBjb250ZXh0ICovCisJCXZhbHVlID0gRXhlY0V2YWxFeHByKHRzdGF0ZS0+cm93ZXhwciwgZWNv bnRleHQsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKKwkJCQkJIGVycm1zZygi cm93IGZpbHRlciBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwiKSkpOwogCi0Jcm91dGluZS0+ U2V0Um93RmlsdGVyKHRzdGF0ZSwgVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlyb3V0 aW5lLT5TZXRSb3dGaWx0ZXIodHN0YXRlLCBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJ fQogCiAJLyoKIAkgKiBJbnN0YWxsIHRoZSBjb2x1bW4gZmlsdGVyIGV4cHJlc3Npb25zIGludG8g dGhlIHRhYmxlIGJ1aWxkZXIgY29udGV4dC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKaW5kZXggMDlhMDVh MDM3My4uYjhkMzQ3NzBlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTUzOCw2ICs1MzgsMjIg QEAgbWFrZUZ1bmNFeHByKE9pZCBmdW5jaWQsIE9pZCByZXR0eXBlLCBMaXN0ICphcmdzLAogCXJl dHVybiBmdW5jZXhwcjsKIH0KIAorLyoKKyAqIG1ha2VTdHJpbmdDb25zdCAtCisgKiAJYnVpbGQg YSBBX0NvbnN0IG5vZGUgb2YgdHlwZSBUX1N0cmluZyBmb3IgZ2l2ZW4gc3RyaW5nCisgKi8KK05v ZGUgKgorbWFrZVN0cmluZ0NvbnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKQoreworCUFfQ29u c3QJICAgKm4gPSBtYWtlTm9kZShBX0NvbnN0KTsKKworCW4tPnZhbC5zdmFsLnR5cGUgPSBUX1N0 cmluZzsKKwluLT52YWwuc3ZhbC5zdmFsID0gc3RyOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247 CisKKyAgIHJldHVybiAoTm9kZSAqKSBuOworfQorCiAvKgogICogbWFrZURlZkVsZW0gLQogICoJ YnVpbGQgYSBEZWZFbGVtIG5vZGUKQEAgLTg3NSw2ICs4OTEsOTggQEAgbWFrZUpzb25CZWhhdmlv cihKc29uQmVoYXZpb3JUeXBlIHR5cGUsIE5vZGUgKmV4cHIsIEpzb25Db2VyY2lvbiAqY29lcmNp b24sCiAJcmV0dXJuIGJlaGF2aW9yOwogfQogCisvKgorICogbWFrZUpzb25UYWJsZVBhdGggLQor ICoJCU1ha2UgSnNvblRhYmxlUGF0aCBub2RlIGZyb20gZ2l2ZW4gcGF0aCBzdHJpbmcgYW5kIG5h bWUgKGlmIGFueSkKKyAqLworSnNvblRhYmxlUGF0aCAqCittYWtlSnNvblRhYmxlUGF0aChDb25z dCAqcGF0aHZhbHVlLCBjaGFyICpwYXRobmFtZSkKK3sKKwlKc29uVGFibGVQYXRoICpwYXRoID0g bWFrZU5vZGUoSnNvblRhYmxlUGF0aCk7CisKKwlBc3NlcnQoSXNBKHBhdGh2YWx1ZSwgQ29uc3Qp KTsKKwlwYXRoLT52YWx1ZSA9IHBhdGh2YWx1ZTsKKwlpZiAocGF0aG5hbWUpCisJCXBhdGgtPm5h bWUgPSBwYXRobmFtZTsKKworCXJldHVybiBwYXRoOworfQorCisvKgorICogbWFrZUpzb25UYWJs ZVBhdGhTcGVjIC0KKyAqCQlNYWtlIEpzb25UYWJsZVBhdGhTcGVjIG5vZGUgZnJvbSBnaXZlbiBw YXRoIHN0cmluZyBhbmQgbmFtZSAoaWYgYW55KQorICovCitOb2RlICoKK21ha2VKc29uVGFibGVQ YXRoU3BlYyhjaGFyICpzdHJpbmcsIGNoYXIgKm5hbWUsIGludCBzdHJpbmdfbG9jYXRpb24sCisJ CQkJCSAgaW50IG5hbWVfbG9jYXRpb24pCit7CisJSnNvblRhYmxlUGF0aFNwZWMgKnBhdGhzcGVj ID0gbWFrZU5vZGUoSnNvblRhYmxlUGF0aFNwZWMpOworCisJQXNzZXJ0KHN0cmluZyAhPSBOVUxM KTsKKwlwYXRoc3BlYy0+c3RyaW5nID0gbWFrZVN0cmluZ0NvbnN0KHN0cmluZywgc3RyaW5nX2xv Y2F0aW9uKTsKKwlpZiAobmFtZSAhPSBOVUxMKQorCQlwYXRoc3BlYy0+bmFtZSA9IHBzdHJkdXAo bmFtZSk7CisKKwlwYXRoc3BlYy0+bmFtZV9sb2NhdGlvbiA9IG5hbWVfbG9jYXRpb247CisJcGF0 aHNwZWMtPmxvY2F0aW9uID0gc3RyaW5nX2xvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIHBh dGhzcGVjOworfQorCisvKgorICogbWFrZUpzb25UYWJsZURlZmF1bHRQbGFuIC0KKyAqCSAgIGNy ZWF0ZXMgYSBKc29uVGFibGVQbGFuU3BlYyBub2RlIHRvIHJlcHJlc2VudCBhICJkZWZhdWx0IiBK U09OX1RBQkxFIHBsYW4KKyAqCSAgIHdpdGggZ2l2ZW4gam9pbiBzdHJhdGVneQorICovCitOb2Rl ICoKK21ha2VKc29uVGFibGVEZWZhdWx0UGxhbihKc29uVGFibGVQbGFuSm9pblR5cGUgam9pbl90 eXBlLCBpbnQgbG9jYXRpb24pCit7CisJSnNvblRhYmxlUGxhblNwZWMgKm4gPSBtYWtlTm9kZShK c29uVGFibGVQbGFuU3BlYyk7CisKKwluLT5wbGFuX3R5cGUgPSBKU1RQX0RFRkFVTFQ7CisJbi0+ am9pbl90eXBlID0gam9pbl90eXBlOworCW4tPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlyZXR1 cm4gKE5vZGUgKikgbjsKK30KKworLyoKKyAqIG1ha2VKc29uVGFibGVTaW1wbGVQbGFuIC0KKyAq CSAgIGNyZWF0ZXMgYSBKc29uVGFibGVQbGFuU3BlYyBub2RlIHRvIHJlcHJlc2VudCBhICJzaW1w bGUiIEpTT05fVEFCTEUgcGxhbgorICoJICAgZm9yIGdpdmVuIFBBVEgKKyAqLworTm9kZSAqCitt YWtlSnNvblRhYmxlU2ltcGxlUGxhbihjaGFyICpwYXRobmFtZSwgaW50IGxvY2F0aW9uKQorewor CUpzb25UYWJsZVBsYW5TcGVjICpuID0gbWFrZU5vZGUoSnNvblRhYmxlUGxhblNwZWMpOworCisJ bi0+cGxhbl90eXBlID0gSlNUUF9TSU1QTEU7CisJbi0+cGF0aG5hbWUgPSBwYXRobmFtZTsKKwlu LT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCisJcmV0dXJuIChOb2RlICopIG47Cit9CisKKy8qCisg KiBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbiAtCisgKgkgICBjcmVhdGVzIGEgSnNvblRhYmxlUGxh blNwZWMgbm9kZSB0byByZXByZXNlbnQgam9pbiBiZXR3ZWVuIHRoZSBnaXZlbgorICoJICAgcGFp ciBvZiBwbGFucworICovCitOb2RlICoKK21ha2VKc29uVGFibGVKb2luZWRQbGFuKEpzb25UYWJs ZVBsYW5Kb2luVHlwZSB0eXBlLCBOb2RlICpwbGFuMSwgTm9kZSAqcGxhbjIsCisJCQkJCQlpbnQg bG9jYXRpb24pCit7CisJSnNvblRhYmxlUGxhblNwZWMgKm4gPSBtYWtlTm9kZShKc29uVGFibGVQ bGFuU3BlYyk7CisKKwluLT5wbGFuX3R5cGUgPSBKU1RQX0pPSU5FRDsKKwluLT5qb2luX3R5cGUg PSB0eXBlOworCW4tPnBsYW4xID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhblNwZWMsIHBsYW4xKTsK KwluLT5wbGFuMiA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW5TcGVjLCBwbGFuMik7CisJbi0+bG9j YXRpb24gPSBsb2NhdGlvbjsKKworCXJldHVybiAoTm9kZSAqKSBuOworfQorCiAvKgogICogbWFr ZUpzb25LZXlWYWx1ZSAtCiAgKgkgIGNyZWF0ZXMgYSBKc29uS2V5VmFsdWUgbm9kZQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYwppbmRleCAxNjZiZGRkNGVjLi5hNTgyMmI2MzE0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYwpAQCAtMjY5Miw2ICsyNjkyLDEwIEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXJfaW1wbChO b2RlICpub2RlLAogCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQlpZiAoV0FMSyh0Zi0+Y29sZGVmZXhw cnMpKQogCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyh0Zi0+Y29sdmFsZXhwcnMpKQor CQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyh0Zi0+cGFzc2luZ3ZhbGV4cHJzKSkKKwkJ CQkJcmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTM3NTUsNiAr Mzc1OSw4IEBAIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yX2ltcGwoTm9kZSAqbm9kZSwKIAkJCQlN VVRBVEUobmV3bm9kZS0+cm93ZXhwciwgdGYtPnJvd2V4cHIsIE5vZGUgKik7CiAJCQkJTVVUQVRF KG5ld25vZGUtPmNvbGV4cHJzLCB0Zi0+Y29sZXhwcnMsIExpc3QgKik7CiAJCQkJTVVUQVRFKG5l d25vZGUtPmNvbGRlZmV4cHJzLCB0Zi0+Y29sZGVmZXhwcnMsIExpc3QgKik7CisJCQkJTVVUQVRF KG5ld25vZGUtPmNvbHZhbGV4cHJzLCB0Zi0+Y29sdmFsZXhwcnMsIExpc3QgKik7CisJCQkJTVVU QVRFKG5ld25vZGUtPnBhc3Npbmd2YWxleHBycywgdGYtPnBhc3Npbmd2YWxleHBycywgTGlzdCAq KTsKIAkJCQlyZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDE4 MCw2ICs0MTg2LDM4IEBAIHJhd19leHByZXNzaW9uX3RyZWVfd2Fsa2VyX2ltcGwoTm9kZSAqbm9k ZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBUX0pzb25UYWJs ZToKKwkJCXsKKwkJCQlKc29uVGFibGUgICpqdCA9IChKc29uVGFibGUgKikgbm9kZTsKKworCQkJ CWlmIChXQUxLKGp0LT5jb250ZXh0X2l0ZW0pKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAo V0FMSyhqdC0+cGF0aHNwZWMpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAoV0FMSyhqdC0+ cGFzc2luZykpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChXQUxLKGp0LT5jb2x1bW5zKSkK KwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEsoanQtPm9uX2Vycm9yKSkKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0pzb25UYWJsZUNvbHVtbjoKKwkJ CXsKKwkJCQlKc29uVGFibGVDb2x1bW4gKmp0YyA9IChKc29uVGFibGVDb2x1bW4gKikgbm9kZTsK KworCQkJCWlmIChXQUxLKGp0Yy0+dHlwZU5hbWUpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlp ZiAoV0FMSyhqdGMtPm9uX2VtcHR5KSkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJaWYgKFdBTEso anRjLT5vbl9lcnJvcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJCWlmIChqdGMtPmNvbHR5cGUg PT0gSlRDX05FU1RFRCAmJiBXQUxLKGp0Yy0+Y29sdW1ucykpCisJCQkJCXJldHVybiB0cnVlOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9Kc29uVGFibGVQYXRoU3BlYzoKKwkJCXJldHVybiBX QUxLKCgoSnNvblRhYmxlUGF0aFNwZWMgKikgbm9kZSktPnN0cmluZyk7CiAJCWNhc2UgVF9OdWxs VGVzdDoKIAkJCXJldHVybiBXQUxLKCgoTnVsbFRlc3QgKikgbm9kZSktPmFyZyk7CiAJCWNhc2Ug VF9Cb29sZWFuVGVzdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL3BhcnNlci9NYWtlZmlsZQppbmRleCA0MDFjMTY2ODZjLi4zMTYyYTAxZjMw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBAIE9CSlMgPSBcCiAJcGFyc2VfZW5y Lm8gXAogCXBhcnNlX2V4cHIubyBcCiAJcGFyc2VfZnVuYy5vIFwKKwlwYXJzZV9qc29udGFibGUu byBcCiAJcGFyc2VfbWVyZ2UubyBcCiAJcGFyc2Vfbm9kZS5vIFwKIAlwYXJzZV9vcGVyLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKaW5kZXggMjcyYWNjODg1Ni4uMmQxN2U5NzA5OSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0x NzAsNyArMTcwLDYgQEAgc3RhdGljIHZvaWQgdXBkYXRlUmF3U3RtdEVuZChSYXdTdG10ICpycywg aW50IGVuZF9sb2NhdGlvbik7CiBzdGF0aWMgTm9kZSAqbWFrZUNvbHVtblJlZihjaGFyICpjb2xu YW1lLCBMaXN0ICppbmRpcmVjdGlvbiwKIAkJCQkJCSAgIGludCBsb2NhdGlvbiwgY29yZV95eXNj YW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIE5vZGUgKm1ha2VUeXBlQ2FzdChOb2RlICphcmcsIFR5 cGVOYW1lICp0eXBlbmFtZSwgaW50IGxvY2F0aW9uKTsKLXN0YXRpYyBOb2RlICptYWtlU3RyaW5n Q29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIE5vZGUgKm1ha2VTdHJpbmdD b25zdENhc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24sIFR5cGVOYW1lICp0eXBlbmFtZSk7CiBz dGF0aWMgTm9kZSAqbWFrZUludENvbnN0KGludCB2YWwsIGludCBsb2NhdGlvbik7CiBzdGF0aWMg Tm9kZSAqbWFrZUZsb2F0Q29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24pOwpAQCAtNjU1LDE1 ICs2NTQsMzEgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQlqc29uX2FyZ3VtZW50CiAJ CQkJanNvbl9iZWhhdmlvcgogCQkJCWpzb25fb25fZXJyb3JfY2xhdXNlX29wdAorCQkJCWpzb25f dGFibGUKKwkJCQlqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uCisJCQkJanNvbl90YWJsZV9j b2x1bW5fcGF0aF9jbGF1c2Vfb3B0CisJCQkJanNvbl90YWJsZV9wbGFuX2NsYXVzZV9vcHQKKwkJ CQlqc29uX3RhYmxlX3BsYW4KKwkJCQlqc29uX3RhYmxlX3BsYW5fc2ltcGxlCisJCQkJanNvbl90 YWJsZV9wbGFuX291dGVyCisJCQkJanNvbl90YWJsZV9wbGFuX2lubmVyCisJCQkJanNvbl90YWJs ZV9wbGFuX3VuaW9uCisJCQkJanNvbl90YWJsZV9wbGFuX2Nyb3NzCisJCQkJanNvbl90YWJsZV9w bGFuX3ByaW1hcnkKICV0eXBlIDxsaXN0Pglqc29uX25hbWVfYW5kX3ZhbHVlX2xpc3QKIAkJCQlq c29uX3ZhbHVlX2V4cHJfbGlzdAogCQkJCWpzb25fYXJyYXlfYWdncmVnYXRlX29yZGVyX2J5X2Ns YXVzZV9vcHQKIAkJCQlqc29uX2FyZ3VtZW50cwogCQkJCWpzb25fYmVoYXZpb3JfY2xhdXNlX29w dAogCQkJCWpzb25fcGFzc2luZ19jbGF1c2Vfb3B0CisJCQkJanNvbl90YWJsZV9jb2x1bW5fZGVm aW5pdGlvbl9saXN0CisldHlwZSA8c3RyPgkJanNvbl90YWJsZV9wYXRoX25hbWVfb3B0CiAldHlw ZSA8aXZhbD4JanNvbl9iZWhhdmlvcl90eXBlCiAJCQkJanNvbl9wcmVkaWNhdGVfdHlwZV9jb25z dHJhaW50CiAJCQkJanNvbl9xdW90ZXNfY2xhdXNlX29wdAorCQkJCWpzb25fdGFibGVfZGVmYXVs dF9wbGFuX2Nob2ljZXMKKwkJCQlqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgor CQkJCWpzb25fdGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzCiAJCQkJanNvbl93cmFwcGVy X2JlaGF2aW9yCiAldHlwZSA8Ym9vbGVhbj4JanNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50 X29wdAogCQkJCWpzb25fb2JqZWN0X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdApAQCAtNzMz LDcgKzc0OCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJSU5URVJTRUNUIElOVEVSVkFM IElOVE8gSU5WT0tFUiBJUyBJU05VTEwgSVNPTEFUSU9OCiAKIAlKT0lOIEpTT04gSlNPTl9BUlJB WSBKU09OX0FSUkFZQUdHIEpTT05fRVhJU1RTIEpTT05fT0JKRUNUIEpTT05fT0JKRUNUQUdHCi0J SlNPTl9RVUVSWSBKU09OX1NDQUxBUiBKU09OX1NFUklBTElaRSBKU09OX1ZBTFVFCisJSlNPTl9R VUVSWSBKU09OX1NDQUxBUiBKU09OX1NFUklBTElaRSBKU09OX1RBQkxFIEpTT05fVkFMVUUKIAog CUtFRVAgS0VZIEtFWVMKIApAQCAtNzQ0LDggKzc1OSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJTUFQUElORyBNQVRDSCBNQVRDSEVEIE1BVEVSSUFMSVpFRCBNQVhWQUxVRSBNRVJHRSBN RVRIT0QKIAlNSU5VVEVfUCBNSU5WQUxVRSBNT0RFIE1PTlRIX1AgTU9WRQogCi0JTkFNRV9QIE5B TUVTIE5BVElPTkFMIE5BVFVSQUwgTkNIQVIgTkVXIE5FWFQgTkZDIE5GRCBORktDIE5GS0QgTk8g Tk9ORQotCU5PUk1BTElaRSBOT1JNQUxJWkVECisJTkFNRV9QIE5BTUVTIE5BVElPTkFMIE5BVFVS QUwgTkNIQVIgTkVTVEVEIE5FVyBORVhUIE5GQyBORkQgTkZLQyBORktEIE5PCisJTk9ORSBOT1JN QUxJWkUgTk9STUFMSVpFRAogCU5PVCBOT1RISU5HIE5PVElGWSBOT1ROVUxMIE5PV0FJVCBOVUxM X1AgTlVMTElGCiAJTlVMTFNfUCBOVU1FUklDCiAKQEAgLTc1Myw4ICs3NjgsOCBAQCBzdGF0aWMg Tm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogCU9SREVSIE9SRElOQUxJVFkgT1RIRVJTIE9VVF9QIE9VVEVSX1AK IAlPVkVSIE9WRVJMQVBTIE9WRVJMQVkgT1ZFUlJJRElORyBPV05FRCBPV05FUgogCi0JUEFSQUxM RUwgUEFSQU1FVEVSIFBBUlNFUiBQQVJUSUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JECi0J UExBQ0lORyBQTEFOUyBQT0xJQ1kKKwlQQVJBTExFTCBQQVJBTUVURVIgUEFSU0VSIFBBUlRJQUwg UEFSVElUSU9OIFBBU1NJTkcgUEFTU1dPUkQgUEFUSAorCVBMQUNJTkcgUExBTiBQTEFOUyBQT0xJ Q1kKIAlQT1NJVElPTiBQUkVDRURJTkcgUFJFQ0lTSU9OIFBSRVNFUlZFIFBSRVBBUkUgUFJFUEFS RUQgUFJJTUFSWQogCVBSSU9SIFBSSVZJTEVHRVMgUFJPQ0VEVVJBTCBQUk9DRURVUkUgUFJPQ0VE VVJFUyBQUk9HUkFNIFBVQkxJQ0FUSU9OCiAKQEAgLTg3MiwxMCArODg3LDEzIEBAIHN0YXRpYyBO b2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2Vz LCBOb2RlICpxdWVyeSk7CiAgKiB0aGUgc2FtZSBwcmVjZWRlbmNlIGFzIElERU5ULiAgVGhpcyBh bGxvd3MgcmVzb2x2aW5nIGNvbmZsaWN0cyBpbiB0aGUKICAqIGpzb25fcHJlZGljYXRlX3R5cGVf Y29uc3RyYWludCBhbmQganNvbl9rZXlfdW5pcXVlbmVzc19jb25zdHJhaW50X29wdAogICogcHJv ZHVjdGlvbnMgKHNlZSBjb21tZW50cyB0aGVyZSkuCisgKgorICogTGlrZSB0aGUgVU5CT1VOREVE IFBSRUNFRElORy9GT0xMT1dJTkcgY2FzZSwgTkVTVEVEIGlzIGFzc2lnbmVkIGEgbG93ZXIKKyAq IHByZWNlZGVuY2UgdGhhbiBQQVRIIHRvIGZpeCBhbWJpZ3VpdHkgaW4gdGhlIGpzb25fdGFibGUg cHJvZHVjdGlvbi4KICAqLwotJW5vbmFzc29jCVVOQk9VTkRFRAkJLyogaWRlYWxseSB3b3VsZCBo YXZlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVCAqLworJW5vbmFzc29jCVVOQk9VTkRFRCBORVNU RUQgLyogaWRlYWxseSB3b3VsZCBoYXZlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVCAqLwogJW5v bmFzc29jCUlERU5UIFBBUlRJVElPTiBSQU5HRSBST1dTIEdST1VQUyBQUkVDRURJTkcgRk9MTE9X SU5HIENVQkUgUk9MTFVQCi0JCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FMQVIgVkFMVUVfUCBXSVRI IFdJVEhPVVQKKwkJCVNFVCBLRVlTIE9CSkVDVF9QIFNDQUxBUiBWQUxVRV9QIFdJVEggV0lUSE9V VCBQQVRICiAlbGVmdAkJT3AgT1BFUkFUT1IJCS8qIG11bHRpLWNoYXJhY3RlciBvcHMgYW5kIHVz ZXItZGVmaW5lZCBvcGVyYXRvcnMgKi8KICVsZWZ0CQknKycgJy0nCiAlbGVmdAkJJyonICcvJyAn JScKQEAgLTg5Niw3ICs5MTQsNiBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxl Y3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogICogbGVmdC1h c3NvY2lhdGl2aXR5IGFtb25nIHRoZSBKT0lOIHJ1bGVzIHRoZW1zZWx2ZXMuCiAgKi8KICVsZWZ0 CQlKT0lOIENST1NTIExFRlQgRlVMTCBSSUdIVCBJTk5FUl9QIE5BVFVSQUwKLQogJSUKIAogLyoK QEAgLTEzNDM4LDYgKzEzNDU1LDIxIEBAIHRhYmxlX3JlZjoJcmVsYXRpb25fZXhwciBvcHRfYWxp YXNfY2xhdXNlCiAJCQkJCSQyLT5hbGlhcyA9ICQ0OwogCQkJCQkkJCA9IChOb2RlICopICQyOwog CQkJCX0KKwkJCXwganNvbl90YWJsZSBvcHRfYWxpYXNfY2xhdXNlCisJCQkJeworCQkJCQlKc29u VGFibGUgICpqdCA9IGNhc3ROb2RlKEpzb25UYWJsZSwgJDEpOworCisJCQkJCWp0LT5hbGlhcyA9 ICQyOworCQkJCQkkJCA9IChOb2RlICopIGp0OworCQkJCX0KKwkJCXwgTEFURVJBTF9QIGpzb25f dGFibGUgb3B0X2FsaWFzX2NsYXVzZQorCQkJCXsKKwkJCQkJSnNvblRhYmxlICAqanQgPSBjYXN0 Tm9kZShKc29uVGFibGUsICQyKTsKKworCQkJCQlqdC0+YWxpYXMgPSAkMzsKKwkJCQkJanQtPmxh dGVyYWwgPSB0cnVlOworCQkJCQkkJCA9IChOb2RlICopIGp0OworCQkJCX0KIAkJOwogCiAKQEAg LTE0MDA1LDYgKzE0MDM3LDggQEAgeG1sdGFibGVfY29sdW1uX29wdGlvbl9lbDoKIAkJCQl7ICQk ID0gbWFrZURlZkVsZW0oImlzX25vdF9udWxsIiwgKE5vZGUgKikgbWFrZUJvb2xlYW4odHJ1ZSks IEAxKTsgfQogCQkJfCBOVUxMX1AKIAkJCQl7ICQkID0gbWFrZURlZkVsZW0oImlzX25vdF9udWxs IiwgKE5vZGUgKikgbWFrZUJvb2xlYW4oZmFsc2UpLCBAMSk7IH0KKwkJCXwgUEFUSCBiX2V4cHIK KwkJCQl7ICQkID0gbWFrZURlZkVsZW0oInBhdGgiLCAkMiwgQDEpOyB9CiAJCTsKIAogeG1sX25h bWVzcGFjZV9saXN0OgpAQCAtMTQwMzMsNiArMTQwNjcsMjMzIEBAIHhtbF9uYW1lc3BhY2VfZWw6 CiAJCQkJfQogCQk7CiAKK2pzb25fdGFibGU6CisJCQlKU09OX1RBQkxFICcoJworCQkJCWpzb25f dmFsdWVfZXhwciAnLCcgYV9leHByIGpzb25fdGFibGVfcGF0aF9uYW1lX29wdAorCQkJCWpzb25f cGFzc2luZ19jbGF1c2Vfb3B0CisJCQkJQ09MVU1OUyAnKCcganNvbl90YWJsZV9jb2x1bW5fZGVm aW5pdGlvbl9saXN0ICcpJworCQkJCWpzb25fdGFibGVfcGxhbl9jbGF1c2Vfb3B0CisJCQkJanNv bl9vbl9lcnJvcl9jbGF1c2Vfb3B0CisJCQknKScKKwkJCQl7CisJCQkJCUpzb25UYWJsZSAqbiA9 IG1ha2VOb2RlKEpzb25UYWJsZSk7CisJCQkJCWNoYXIJICAqcGF0aHN0cmluZzsKKworCQkJCQlu LT5jb250ZXh0X2l0ZW0gPSAoSnNvblZhbHVlRXhwciAqKSAkMzsKKwkJCQkJaWYgKCFJc0EoJDUs IEFfQ29uc3QpIHx8CisJCQkJCQljYXN0Tm9kZShBX0NvbnN0LCAkNSktPnZhbC5ub2RlLnR5cGUg IT0gVF9TdHJpbmcpCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQllcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCQkJZXJybXNnKCJvbmx5IHN0cmluZyBj b25zdGFudHMgYXJlIHN1cHBvcnRlZCBpbiBKU09OX1RBQkxFIgorCQkJCQkJCQkJICAgIiBwYXRo IHNwZWNpZmljYXRpb24iKSwKKwkJCQkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKEA1KSk7CisJCQkJ CXBhdGhzdHJpbmcgPSBjYXN0Tm9kZShBX0NvbnN0LCAkNSktPnZhbC5zdmFsLnN2YWw7CisJCQkJ CW4tPnBhdGhzcGVjID0gKEpzb25UYWJsZVBhdGhTcGVjICopCisJCQkJCQltYWtlSnNvblRhYmxl UGF0aFNwZWMocGF0aHN0cmluZywgJDYsIEA1LCBANik7CisJCQkJCW4tPnBhc3NpbmcgPSAkNzsK KwkJCQkJbi0+Y29sdW1ucyA9ICQxMDsKKwkJCQkJbi0+cGxhbnNwZWMgPSAoSnNvblRhYmxlUGxh blNwZWMgKikgJDEyOworCQkJCQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3IgKikgJDEzOwor CQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQk7 CisKK2pzb25fdGFibGVfcGF0aF9uYW1lX29wdDoKKwkJCUFTIG5hbWUJCQl7ICQkID0gJDI7IH0K KwkJCXwgLyogZW1wdHkgKi8JeyAkJCA9IE5VTEw7IH0KKwkJOworCitqc29uX3RhYmxlX2NvbHVt bl9kZWZpbml0aW9uX2xpc3Q6CisJCQlqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uCisJCQkJ eyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGpzb25fdGFibGVfY29sdW1uX2RlZmluaXRp b25fbGlzdCAnLCcganNvbl90YWJsZV9jb2x1bW5fZGVmaW5pdGlvbgorCQkJCXsgJCQgPSBsYXBw ZW5kKCQxLCAkMyk7IH0KKwkJOworCitqc29uX3RhYmxlX2NvbHVtbl9kZWZpbml0aW9uOgorCQkJ Q29sSWQgRk9SIE9SRElOQUxJVFkKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1h a2VOb2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19GT1JfT1JE SU5BTElUWTsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJ CQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBDb2xJZCBUeXBlbmFtZQorCQkJCWpzb25f dGFibGVfY29sdW1uX3BhdGhfY2xhdXNlX29wdAorCQkJCWpzb25fd3JhcHBlcl9iZWhhdmlvcgor CQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCQlqc29uX2JlaGF2aW9yX2NsYXVzZV9vcHQK KwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VOb2RlKEpzb25UYWJsZUNvbHVt bik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19SRUdVTEFSOworCQkJCQluLT5uYW1lID0gJDE7 CisJCQkJCW4tPnR5cGVOYW1lID0gJDI7CisJCQkJCW4tPmZvcm1hdCA9IG1ha2VKc29uRm9ybWF0 KEpTX0ZPUk1BVF9ERUZBVUxULCBKU19FTkNfREVGQVVMVCwgLTEpOworCQkJCQluLT5wYXRoc3Bl YyA9IChKc29uVGFibGVQYXRoU3BlYyAqKSAkMzsKKwkJCQkJbi0+d3JhcHBlciA9ICQ0OyAvKiBk aXNhbGxvd2VkIGR1cmluZyBwYXJzZS1hbmFseXNpcyEgKi8KKwkJCQkJbi0+cXVvdGVzID0gJDU7 IC8qIGRpc2FsbG93ZWQgZHVyaW5nIHBhcnNlLWFuYWx5c2lzISAqLworCQkJCQluLT5vbl9lbXB0 eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRpYWwoJDYpOworCQkJCQluLT5vbl9lcnJvciA9IChK c29uQmVoYXZpb3IgKikgbHNlY29uZCgkNik7CisJCQkJCW4tPmxvY2F0aW9uID0gQDE7CisJCQkJ CSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IENvbElkIFR5cGVuYW1lIGpzb25fZm9ybWF0 X2NsYXVzZQorCQkJCWpzb25fdGFibGVfY29sdW1uX3BhdGhfY2xhdXNlX29wdAorCQkJCWpzb25f d3JhcHBlcl9iZWhhdmlvcgorCQkJCWpzb25fcXVvdGVzX2NsYXVzZV9vcHQKKwkJCQlqc29uX2Jl aGF2aW9yX2NsYXVzZV9vcHQKKwkJCQl7CisJCQkJCUpzb25UYWJsZUNvbHVtbiAqbiA9IG1ha2VO b2RlKEpzb25UYWJsZUNvbHVtbik7CisKKwkJCQkJbi0+Y29sdHlwZSA9IEpUQ19GT1JNQVRURUQ7 CisJCQkJCW4tPm5hbWUgPSAkMTsKKwkJCQkJbi0+dHlwZU5hbWUgPSAkMjsKKwkJCQkJbi0+Zm9y bWF0ID0gKEpzb25Gb3JtYXQgKikgJDM7CisJCQkJCW4tPnBhdGhzcGVjID0gKEpzb25UYWJsZVBh dGhTcGVjICopICQ0OworCQkJCQluLT53cmFwcGVyID0gJDU7CisJCQkJCW4tPnF1b3RlcyA9ICQ2 OworCQkJCQluLT5vbl9lbXB0eSA9IChKc29uQmVoYXZpb3IgKikgbGluaXRpYWwoJDcpOworCQkJ CQluLT5vbl9lcnJvciA9IChKc29uQmVoYXZpb3IgKikgbHNlY29uZCgkNyk7CisJCQkJCW4tPmxv Y2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IENvbElkIFR5 cGVuYW1lCisJCQkJRVhJU1RTIGpzb25fdGFibGVfY29sdW1uX3BhdGhfY2xhdXNlX29wdAorCQkJ CWpzb25fYmVoYXZpb3JfY2xhdXNlX29wdAorCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpu ID0gbWFrZU5vZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX0VY SVNUUzsKKwkJCQkJbi0+bmFtZSA9ICQxOworCQkJCQluLT50eXBlTmFtZSA9ICQyOworCQkJCQlu LT5mb3JtYXQgPSBtYWtlSnNvbkZvcm1hdChKU19GT1JNQVRfREVGQVVMVCwgSlNfRU5DX0RFRkFV TFQsIC0xKTsKKwkJCQkJbi0+d3JhcHBlciA9IEpTV19OT05FOworCQkJCQluLT5xdW90ZXMgPSBK U19RVU9URVNfVU5TUEVDOworCQkJCQluLT5wYXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAq KSAkNDsKKwkJCQkJbi0+b25fZW1wdHkgPSAoSnNvbkJlaGF2aW9yICopIGxpbml0aWFsKCQ1KTsK KwkJCQkJbi0+b25fZXJyb3IgPSAoSnNvbkJlaGF2aW9yICopIGxzZWNvbmQoJDUpOworCQkJCQlu LT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBORVNU RUQgcGF0aF9vcHQgU2NvbnN0CisJCQkJQ09MVU1OUyAnKCcganNvbl90YWJsZV9jb2x1bW5fZGVm aW5pdGlvbl9saXN0ICcpJworCQkJCXsKKwkJCQkJSnNvblRhYmxlQ29sdW1uICpuID0gbWFrZU5v ZGUoSnNvblRhYmxlQ29sdW1uKTsKKworCQkJCQluLT5jb2x0eXBlID0gSlRDX05FU1RFRDsKKwkJ CQkJbi0+cGF0aHNwZWMgPSAoSnNvblRhYmxlUGF0aFNwZWMgKikKKwkJCQkJCW1ha2VKc29uVGFi bGVQYXRoU3BlYygkMywgTlVMTCwgQDMsIC0xKTsKKwkJCQkJbi0+Y29sdW1ucyA9ICQ2OworCQkJ CQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBO RVNURUQgcGF0aF9vcHQgU2NvbnN0IEFTIG5hbWUKKwkJCQlDT0xVTU5TICcoJyBqc29uX3RhYmxl X2NvbHVtbl9kZWZpbml0aW9uX2xpc3QgJyknCisJCQkJeworCQkJCQlKc29uVGFibGVDb2x1bW4g Km4gPSBtYWtlTm9kZShKc29uVGFibGVDb2x1bW4pOworCisJCQkJCW4tPmNvbHR5cGUgPSBKVENf TkVTVEVEOworCQkJCQluLT5wYXRoc3BlYyA9IChKc29uVGFibGVQYXRoU3BlYyAqKQorCQkJCQkJ bWFrZUpzb25UYWJsZVBhdGhTcGVjKCQzLCAkNSwgQDMsIEA1KTsKKwkJCQkJbi0+Y29sdW1ucyA9 ICQ4OworCQkJCQluLT5sb2NhdGlvbiA9IEAxOworCQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJ fQorCQk7CisKK3BhdGhfb3B0OgorCQkJUEFUSAorCQkJfCAvKiBFTVBUWSAqLworCQk7CisKK2pz b25fdGFibGVfY29sdW1uX3BhdGhfY2xhdXNlX29wdDoKKwkJCVBBVEggU2NvbnN0CisJCQkJeyAk JCA9IG1ha2VKc29uVGFibGVQYXRoU3BlYygkMiwgTlVMTCwgQDIsIC0xKTsgfQorCQkJfCAvKiBF TVBUWSAqLworCQkJCXsgJCQgPSBOVUxMOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFuX2NsYXVz ZV9vcHQ6CisJCQlQTEFOICcoJyBqc29uX3RhYmxlX3BsYW4gJyknCisJCQkJeyAkJCA9ICQzOyB9 CisJCQl8IFBMQU4gREVGQVVMVCAnKCcganNvbl90YWJsZV9kZWZhdWx0X3BsYW5fY2hvaWNlcyAn KScKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZURlZmF1bHRQbGFuKCQ0LCBAMSk7IH0KKwkJCXwg LyogRU1QVFkgKi8KKwkJCQl7ICQkID0gTlVMTDsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbjoK KwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUKKwkJCXwganNvbl90YWJsZV9wbGFuX291dGVyCisJ CQl8IGpzb25fdGFibGVfcGxhbl9pbm5lcgorCQkJfCBqc29uX3RhYmxlX3BsYW5fdW5pb24KKwkJ CXwganNvbl90YWJsZV9wbGFuX2Nyb3NzCisJCTsKKworanNvbl90YWJsZV9wbGFuX3NpbXBsZToK KwkJCW5hbWUKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZVNpbXBsZVBsYW4oJDEsIEAxKTsgfQor CQk7CisKK2pzb25fdGFibGVfcGxhbl9vdXRlcjoKKwkJCWpzb25fdGFibGVfcGxhbl9zaW1wbGUg T1VURVJfUCBqc29uX3RhYmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxl Sm9pbmVkUGxhbihKU1RQX0pPSU5fT1VURVIsICQxLCAkMywgQDEpOyB9CisJCTsKKworanNvbl90 YWJsZV9wbGFuX2lubmVyOgorCQkJanNvbl90YWJsZV9wbGFuX3NpbXBsZSBJTk5FUl9QIGpzb25f dGFibGVfcGxhbl9wcmltYXJ5CisJCQkJeyAkJCA9IG1ha2VKc29uVGFibGVKb2luZWRQbGFuKEpT VFBfSk9JTl9JTk5FUiwgJDEsICQzLCBAMSk7IH0KKwkJOworCitqc29uX3RhYmxlX3BsYW5fdW5p b246CisJCQlqc29uX3RhYmxlX3BsYW5fcHJpbWFyeSBVTklPTiBqc29uX3RhYmxlX3BsYW5fcHJp bWFyeQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQX0pPSU5fVU5JT04s ICQxLCAkMywgQDEpOyB9CisJCQl8IGpzb25fdGFibGVfcGxhbl91bmlvbiBVTklPTiBqc29uX3Rh YmxlX3BsYW5fcHJpbWFyeQorCQkJCXsgJCQgPSBtYWtlSnNvblRhYmxlSm9pbmVkUGxhbihKU1RQ X0pPSU5fVU5JT04sICQxLCAkMywgQDEpOyB9CisJCTsKKworanNvbl90YWJsZV9wbGFuX2Nyb3Nz OgorCQkJanNvbl90YWJsZV9wbGFuX3ByaW1hcnkgQ1JPU1MganNvbl90YWJsZV9wbGFuX3ByaW1h cnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUF9KT0lOX0NST1NTLCAk MSwgJDMsIEAxKTsgfQorCQkJfCBqc29uX3RhYmxlX3BsYW5fY3Jvc3MgQ1JPU1MganNvbl90YWJs ZV9wbGFuX3ByaW1hcnkKKwkJCQl7ICQkID0gbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSlNUUF9K T0lOX0NST1NTLCAkMSwgJDMsIEAxKTsgfQorCQk7CisKK2pzb25fdGFibGVfcGxhbl9wcmltYXJ5 OgorCQkJanNvbl90YWJsZV9wbGFuX3NpbXBsZQorCQkJCXsgJCQgPSAkMTsgfQorCQkJfCAnKCcg anNvbl90YWJsZV9wbGFuICcpJworCQkJCXsKKwkJCQkJY2FzdE5vZGUoSnNvblRhYmxlUGxhblNw ZWMsICQyKS0+bG9jYXRpb24gPSBAMTsKKwkJCQkJJCQgPSAkMjsKKwkJCQl9CisJCTsKKworanNv bl90YWJsZV9kZWZhdWx0X3BsYW5fY2hvaWNlczoKKwkJCWpzb25fdGFibGVfZGVmYXVsdF9wbGFu X2lubmVyX291dGVyCisJCQkJeyAkJCA9ICQxIHwgSlNUUF9KT0lOX1VOSU9OOyB9CisJCQl8IGpz b25fdGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzCisJCQkJeyAkJCA9ICQxIHwgSlNUUF9K T0lOX09VVEVSOyB9CisJCQl8IGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX2lubmVyX291dGVyICcs JyBqc29uX3RhYmxlX2RlZmF1bHRfcGxhbl91bmlvbl9jcm9zcworCQkJCXsgJCQgPSAkMSB8ICQz OyB9CisJCQl8IGpzb25fdGFibGVfZGVmYXVsdF9wbGFuX3VuaW9uX2Nyb3NzICcsJyBqc29uX3Rh YmxlX2RlZmF1bHRfcGxhbl9pbm5lcl9vdXRlcgorCQkJCXsgJCQgPSAkMSB8ICQzOyB9CisJCTsK KworanNvbl90YWJsZV9kZWZhdWx0X3BsYW5faW5uZXJfb3V0ZXI6CisJCQlJTk5FUl9QCQkJCQkJ eyAkJCA9IEpTVFBfSk9JTl9JTk5FUjsgfQorCQkJfCBPVVRFUl9QCQkJCQl7ICQkID0gSlNUUF9K T0lOX09VVEVSOyB9CisJCTsKKworanNvbl90YWJsZV9kZWZhdWx0X3BsYW5fdW5pb25fY3Jvc3M6 CisJCQlVTklPTgkJCQkJCXsgJCQgPSBKU1RQX0pPSU5fVU5JT047IH0KKwkJCXwgQ1JPU1MJCQkJ CQl7ICQkID0gSlNUUF9KT0lOX0NST1NTOyB9CisJCTsKKwogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CiAgKgogICoJVHlwZSBzeW50YXgKQEAgLTE3NDM0LDYgKzE3Njk1LDcgQEAgdW5yZXNlcnZlZF9r ZXl3b3JkOgogCQkJfCBNT1ZFCiAJCQl8IE5BTUVfUAogCQkJfCBOQU1FUworCQkJfCBORVNURUQK IAkJCXwgTkVXCiAJCQl8IE5FWFQKIAkJCXwgTkZDCkBAIC0xNzQ2OCw2ICsxNzczMCw4IEBAIHVu cmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgUEFSVElUSU9OCiAJCQl8IFBBU1NJTkcKIAkJCXwgUEFT U1dPUkQKKwkJCXwgUEFUSAorCQkJfCBQTEFOCiAJCQl8IFBMQU5TCiAJCQl8IFBPTElDWQogCQkJ fCBQUkVDRURJTkcKQEAgLTE3NjMyLDYgKzE3ODk2LDcgQEAgY29sX25hbWVfa2V5d29yZDoKIAkJ CXwgSlNPTl9RVUVSWQogCQkJfCBKU09OX1NDQUxBUgogCQkJfCBKU09OX1NFUklBTElaRQorCQkJ fCBKU09OX1RBQkxFCiAJCQl8IEpTT05fVkFMVUUKIAkJCXwgTEVBU1QKIAkJCXwgTkFUSU9OQUwK QEAgLTE4MDAwLDYgKzE4MjY1LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBKU09OX1FV RVJZCiAJCQl8IEpTT05fU0NBTEFSCiAJCQl8IEpTT05fU0VSSUFMSVpFCisJCQl8IEpTT05fVEFC TEUKIAkJCXwgSlNPTl9WQUxVRQogCQkJfCBLRUVQCiAJCQl8IEtFWQpAQCAtMTgwMzksNiArMTgz MDUsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IE5BVElPTkFMCiAJCQl8IE5BVFVSQUwK IAkJCXwgTkNIQVIKKwkJCXwgTkVTVEVECiAJCQl8IE5FVwogCQkJfCBORVhUCiAJCQl8IE5GQwpA QCAtMTgwODMsNyArMTgzNTAsOSBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElP TgogCQkJfCBQQVNTSU5HCiAJCQl8IFBBU1NXT1JECisJCQl8IFBBVEgKIAkJCXwgUExBQ0lORwor CQkJfCBQTEFOCiAJCQl8IFBMQU5TCiAJCQl8IFBPTElDWQogCQkJfCBQT1NJVElPTgpAQCAtMTgz NTEsMTggKzE4NjIwLDYgQEAgbWFrZVR5cGVDYXN0KE5vZGUgKmFyZywgVHlwZU5hbWUgKnR5cGVu YW1lLCBpbnQgbG9jYXRpb24pCiAJcmV0dXJuIChOb2RlICopIG47CiB9CiAKLXN0YXRpYyBOb2Rl ICoKLW1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbikKLXsKLQlBX0NvbnN0 CSAgICpuID0gbWFrZU5vZGUoQV9Db25zdCk7Ci0KLQluLT52YWwuc3ZhbC50eXBlID0gVF9TdHJp bmc7Ci0Jbi0+dmFsLnN2YWwuc3ZhbCA9IHN0cjsKLQluLT5sb2NhdGlvbiA9IGxvY2F0aW9uOwot Ci0gICByZXR1cm4gKE5vZGUgKikgbjsKLX0KLQogc3RhdGljIE5vZGUgKgogbWFrZVN0cmluZ0Nv bnN0Q2FzdChjaGFyICpzdHIsIGludCBsb2NhdGlvbiwgVHlwZU5hbWUgKnR5cGVuYW1lKQogewpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv cGFyc2VyL21lc29uLmJ1aWxkCmluZGV4IDhlODI5NTY0MGIuLjU3M2Q3MGIzZDEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvbWVzb24uYnVpbGQKQEAgLTEwLDYgKzEwLDcgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVz KAogICAncGFyc2VfZW5yLmMnLAogICAncGFyc2VfZXhwci5jJywKICAgJ3BhcnNlX2Z1bmMuYycs CisgICdwYXJzZV9qc29udGFibGUuYycsCiAgICdwYXJzZV9tZXJnZS5jJywKICAgJ3BhcnNlX25v ZGUuYycsCiAgICdwYXJzZV9vcGVyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2NsYXVzZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCmluZGV4 IDRiNTAyNzhmZDAuLjM4ZTI3ZTg0NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9jbGF1c2UuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMKQEAg LTY5Nyw3ICs2OTcsMTEgQEAgdHJhbnNmb3JtUmFuZ2VUYWJsZUZ1bmMoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBSYW5nZVRhYmxlRnVuYyAqcnRmKQogCWNoYXIJICAqKm5hbWVzOwogCWludAkJCWNvbG5v OwogCi0JLyogQ3VycmVudGx5IG9ubHkgWE1MVEFCTEUgaXMgc3VwcG9ydGVkICovCisJLyoKKwkg KiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IFhNTFRBQkxFIGhlcmUuICBTZWUgdHJhbnNmb3Jt SnNvblRhYmxlKCkgZm9yCisJICogSlNPTl9UQUJMRSBzdXBwb3J0LgorCSAqLworCXRmLT5mdW5j dHlwZSA9IFRGVF9YTUxUQUJMRTsKIAljb25zdHJ1Y3ROYW1lID0gIlhNTFRBQkxFIjsKIAlkb2NU eXBlID0gWE1MT0lEOwogCkBAIC0xMTA0LDEzICsxMTA4LDE3IEBAIHRyYW5zZm9ybUZyb21DbGF1 c2VJdGVtKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqbiwKIAkJcnRyLT5ydGluZGV4ID0gbnNp dGVtLT5wX3J0aW5kZXg7CiAJCXJldHVybiAoTm9kZSAqKSBydHI7CiAJfQotCWVsc2UgaWYgKElz QShuLCBSYW5nZVRhYmxlRnVuYykpCisJZWxzZSBpZiAoSXNBKG4sIFJhbmdlVGFibGVGdW5jKSB8 fCBJc0EobiwgSnNvblRhYmxlKSkKIAl7CiAJCS8qIHRhYmxlIGZ1bmN0aW9uIGlzIGxpa2UgYSBw bGFpbiByZWxhdGlvbiAqLwogCQlSYW5nZVRibFJlZiAqcnRyOwogCQlQYXJzZU5hbWVzcGFjZUl0 ZW0gKm5zaXRlbTsKIAotCQluc2l0ZW0gPSB0cmFuc2Zvcm1SYW5nZVRhYmxlRnVuYyhwc3RhdGUs IChSYW5nZVRhYmxlRnVuYyAqKSBuKTsKKwkJaWYgKElzQShuLCBSYW5nZVRhYmxlRnVuYykpCisJ CQluc2l0ZW0gPSB0cmFuc2Zvcm1SYW5nZVRhYmxlRnVuYyhwc3RhdGUsIChSYW5nZVRhYmxlRnVu YyAqKSBuKTsKKwkJZWxzZQorCQkJbnNpdGVtID0gdHJhbnNmb3JtSnNvblRhYmxlKHBzdGF0ZSwg KEpzb25UYWJsZSAqKSBuKTsKKwogCQkqdG9wX25zaXRlbSA9IG5zaXRlbTsKIAkJKm5hbWVzcGFj ZSA9IGxpc3RfbWFrZTEobnNpdGVtKTsKIAkJcnRyID0gbWFrZU5vZGUoUmFuZ2VUYmxSZWYpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9leHByLmMKaW5kZXggNTQ5M2IwNWFlOC4uYjE5MDhjMzY5YiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCkBAIC00MjE5LDcgKzQyMTksOCBAQCB0cmFuc2Zvcm1Kc29uU2Vy aWFsaXplRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25TZXJpYWxpemVFeHByICpleHByKQog fQogCiAvKgotICogVHJhbnNmb3JtIEpTT05fVkFMVUUsIEpTT05fUVVFUlksIEpTT05fRVhJU1RT IGZ1bmN0aW9ucyBpbnRvIGEgSnNvbkV4cHIgbm9kZS4KKyAqIFRyYW5zZm9ybSBKU09OX1ZBTFVF LCBKU09OX1FVRVJZLCBKU09OX0VYSVNUUywgSlNPTl9UQUJMRSBmdW5jdGlvbnMgaW50bworICog YSBKc29uRXhwciBub2RlLgogICovCiBzdGF0aWMgTm9kZSAqCiB0cmFuc2Zvcm1Kc29uRnVuY0V4 cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCkBAIC00MjM4LDYgKzQy MzksOSBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVu Y0V4cHIgKmZ1bmMpCiAJCWNhc2UgSlNPTl9WQUxVRV9PUDoKIAkJCWZ1bmNfbmFtZSA9ICJKU09O X1ZBTFVFIjsKIAkJCWJyZWFrOworCQljYXNlIEpTT05fVEFCTEVfT1A6CisJCQlmdW5jX25hbWUg PSAiSlNPTl9UQUJMRSI7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJp bnZhbGlkIEpzb25GdW5jRXhwciBvcCIpOwogCQkJYnJlYWs7CkBAIC00Mjc3LDYgKzQyODEsNDIg QEAgdHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHBy ICpmdW5jKQogCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IEJPT0xPSUQ7CiAJCQkJanNl eHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOwogCQkJfQorCQkJLyogSlNPTl9UQUJMRSgpIENP TFVNTlMgY2FuIHNwZWNpZnkgYSBub24tYm9vbGVhbiB0eXBlLiAqLworCQkJZWxzZSBpZiAoanNl eHByLT5yZXR1cm5pbmctPnR5cGlkICE9IEJPT0xPSUQpCisJCQl7CisJCQkJTm9kZQkgICAqY29l cmNpb25fZXhwcjsKKwkJCQlDYXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2Fz ZVRlc3RFeHByKTsKKwkJCQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBq c2V4cHIpOworCisJCQkJLyoKKwkJCQkgKiBXZSBhYnVzZSBDYXNlVGVzdEV4cHIgaGVyZSBhcyBw bGFjZWhvbGRlciB0byBwYXNzIHRoZQorCQkJCSAqIHJlc3VsdCBvZiBldmFsdWF0aW5nIEpTT05f RVhJU1RTIHRvIHRoZSBjb2VyY2lvbgorCQkJCSAqIGV4cHJlc3Npb24uCisJCQkJICovCisJCQkJ cGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7CisJCQkJcGxhY2Vob2xkZXItPnR5cGVNb2Qg PSAtMTsKKwkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsKKworCQkJCWNv ZXJjaW9uX2V4cHIgPQorCQkJCQljb2VyY2VfdG9fdGFyZ2V0X3R5cGUocHN0YXRlLCAoTm9kZSAq KSBwbGFjZWhvbGRlciwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50 eXBpZCwKKwkJCQkJCQkJCQkgIGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCisJCQkJCQkJCQkJ ICBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkgIENPRVJDRV9JTVBMSUNJVF9DQVNULAor CQkJCQkJCQkJCSAgbG9jYXRpb24pOworCisJCQkJaWYgKGNvZXJjaW9uX2V4cHIgPT0gTlVMTCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT0VS Q0UpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBjYXN0IHR5cGUgJXMgdG8gJXMiLAorCQkJCQkJ CQkJZm9ybWF0X3R5cGVfYmUoQk9PTE9JRCksCisJCQkJCQkJCQlmb3JtYXRfdHlwZV9iZShqc2V4 cHItPnJldHVybmluZy0+dHlwaWQpKSwKKwkJCQkJCQkgcGFyc2VyX2NvZXJjaW9uX2VycnBvc2l0 aW9uKHBzdGF0ZSwgbG9jYXRpb24sIChOb2RlICopIGpzZXhwcikpKTsKKworCQkJCWlmIChjb2Vy Y2lvbl9leHByICE9IChOb2RlICopIHBsYWNlaG9sZGVyKQorCQkJCQlqc2V4cHItPnJlc3VsdF9j b2VyY2lvbiA9IGNvZXJjaW9uX2V4cHI7CisJCQl9CisKIAogCQkJanNleHByLT5vbl9lcnJvciA9 IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1bmMtPm9uX2Vycm9yLAogCQkJCQkJCQkJ CQkJCSBKU09OX0JFSEFWSU9SX0ZBTFNFLApAQCAtNDMzOSw2ICs0Mzc5LDE3IEBAIHRyYW5zZm9y bUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJ CQkJCQkJCQkJCQkganNleHByLT5yZXR1cm5pbmcpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBKU09O X1RBQkxFX09QOgorCQkJaWYgKCFPaWRJc1ZhbGlkKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkp CisJCQl7CisJCQkJanNleHByLT5yZXR1cm5pbmctPnR5cGlkID0gZXhwclR5cGUoanNleHByLT5m b3JtYXR0ZWRfZXhwcik7CisJCQkJanNleHByLT5yZXR1cm5pbmctPnR5cG1vZCA9IC0xOworCQkJ fQorCQkJanNleHByLT5vbl9lcnJvciA9IHRyYW5zZm9ybUpzb25CZWhhdmlvcihwc3RhdGUsIGZ1 bmMtPm9uX2Vycm9yLAorCQkJCQkJCQkJCQkJCSBKU09OX0JFSEFWSU9SX0VNUFRZLAorCQkJCQkJ CQkJCQkJCSBqc2V4cHItPnJldHVybmluZyk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgSnNvbkZ1bmNFeHByIG9wIik7CiAJCQlicmVhazsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9qc29udGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4yNWI4MjA0ZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2pzb250YWJsZS5jCkBAIC0wLDAgKzEsNzE4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBwYXJzZV9qc29udGFibGUuYworICoJICBwYXJzaW5nIG9mIEpTT05fVEFCTEUKKyAq CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9qc29udGFibGUuYworICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgi CisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jb2xsYXRlLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2V4cHIuaCIKKyNpbmNsdWRlICJw YXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgor I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbi5oIgorI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisvKiBDb250ZXh0IGZvciBKU09OX1RBQkxFIHRy YW5zZm9ybWF0aW9uICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQYXJzZUNvbnRleHQKK3sK KwlQYXJzZVN0YXRlICpwc3RhdGU7CQkJLyogcGFyc2luZyBzdGF0ZSAqLworCUpzb25UYWJsZSAg KnRhYmxlOwkJCS8qIHVudHJhbnNmb3JtZWQgbm9kZSAqLworCVRhYmxlRnVuYyAgKnRhYmxlZnVu YzsJCS8qIHRyYW5zZm9ybWVkIG5vZGUJKi8KKwlMaXN0CSAgICpwYXRoTmFtZXM7CQkvKiBsaXN0 IG9mIGFsbCBwYXRoIGFuZCBjb2x1bW5zIG5hbWVzICovCisJaW50CQkJcGF0aE5hbWVJZDsJCS8q IHBhdGggbmFtZSBpZCBjb3VudGVyICovCisJT2lkCQkJY29udGV4dEl0ZW1UeXBpZDsJLyogdHlw ZSBvaWQgb2YgY29udGV4dCBpdGVtIChqc29uL2pzb25iKSAqLworfQkJCUpzb25UYWJsZVBhcnNl Q29udGV4dDsKKworc3RhdGljIEpzb25UYWJsZVBsYW4gKnRyYW5zZm9ybUpzb25UYWJsZUNvbHVt bnMoSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LAorCQkJCQkJCQkJCQkJSnNvblRhYmxlUGxh blNwZWMgKnBsYW5zcGVjLAorCQkJCQkJCQkJCQkJTGlzdCAqY29sdW1ucywKKwkJCQkJCQkJCQkJ CUpzb25UYWJsZVBhdGhTcGVjICpwYXRoc3BlYyk7CisKKy8qCisgKiBUcmFuc2Zvcm0gSlNPTl9U QUJMRSBjb2x1bW4KKyAqICAgLSByZWd1bGFyIGNvbHVtbiBpbnRvIEpTT05fVkFMVUUoKQorICog ICAtIEZPUk1BVCBKU09OIGNvbHVtbiBpbnRvIEpTT05fUVVFUlkoKQorICogICAtIEVYSVNUUyBj b2x1bW4gaW50byBKU09OX0VYSVNUUygpCisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5zZm9ybUpz b25UYWJsZUNvbHVtbihKc29uVGFibGVDb2x1bW4gKmp0YywgTm9kZSAqY29udGV4dEl0ZW1FeHBy LAorCQkJCQkJIExpc3QgKnBhc3NpbmdBcmdzLCBib29sIGVycm9yT25FcnJvcikKK3sKKwlKc29u RnVuY0V4cHIgKmpmZXhwciA9IG1ha2VOb2RlKEpzb25GdW5jRXhwcik7CisJTm9kZQkgICAqcGF0 aHNwZWM7CisJSnNvbkZvcm1hdCAqZGVmYXVsdF9mb3JtYXQ7CisKKwlpZiAoanRjLT5jb2x0eXBl ID09IEpUQ19SRUdVTEFSKQorCQlqZmV4cHItPm9wID0gSlNPTl9WQUxVRV9PUDsKKwllbHNlIGlm IChqdGMtPmNvbHR5cGUgPT0gSlRDX0VYSVNUUykKKwkJamZleHByLT5vcCA9IEpTT05fRVhJU1RT X09QOworCWVsc2UKKwkJamZleHByLT5vcCA9IEpTT05fUVVFUllfT1A7CisJamZleHByLT5vdXRw dXQgPSBtYWtlTm9kZShKc29uT3V0cHV0KTsKKwlqZmV4cHItPm9uX2VtcHR5ID0ganRjLT5vbl9l bXB0eTsKKwlqZmV4cHItPm9uX2Vycm9yID0ganRjLT5vbl9lcnJvcjsKKwlpZiAoamZleHByLT5v bl9lcnJvciA9PSBOVUxMICYmIGVycm9yT25FcnJvcikKKwkJamZleHByLT5vbl9lcnJvciA9IG1h a2VKc29uQmVoYXZpb3IoSlNPTl9CRUhBVklPUl9FUlJPUiwgTlVMTCwKKwkJCQkJCQkJCQkJTlVM TCwgLTEpOworCWpmZXhwci0+cXVvdGVzID0ganRjLT5xdW90ZXM7CisJamZleHByLT53cmFwcGVy ID0ganRjLT53cmFwcGVyOworCWpmZXhwci0+bG9jYXRpb24gPSBqdGMtPmxvY2F0aW9uOworCisJ amZleHByLT5vdXRwdXQtPnR5cGVOYW1lID0ganRjLT50eXBlTmFtZTsKKwlqZmV4cHItPm91dHB1 dC0+cmV0dXJuaW5nID0gbWFrZU5vZGUoSnNvblJldHVybmluZyk7CisJamZleHByLT5vdXRwdXQt PnJldHVybmluZy0+Zm9ybWF0ID0ganRjLT5mb3JtYXQ7CisKKwlkZWZhdWx0X2Zvcm1hdCA9IG1h a2VKc29uRm9ybWF0KEpTX0ZPUk1BVF9ERUZBVUxULCBKU19FTkNfREVGQVVMVCwgLTEpOworCisJ aWYgKGp0Yy0+cGF0aHNwZWMpCisJCXBhdGhzcGVjID0gKE5vZGUgKikganRjLT5wYXRoc3BlYy0+ c3RyaW5nOworCWVsc2UKKwl7CisJCS8qIENvbnN0cnVjdCBkZWZhdWx0IHBhdGggYXMgJyQuImNv bHVtbl9uYW1lIicgKi8KKwkJU3RyaW5nSW5mb0RhdGEgcGF0aDsKKworCQlpbml0U3RyaW5nSW5m bygmcGF0aCk7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcGF0aCwgIiQuIik7CisJCWVz Y2FwZV9qc29uKCZwYXRoLCBqdGMtPm5hbWUpOworCisJCXBhdGhzcGVjID0gbWFrZVN0cmluZ0Nv bnN0KHBhdGguZGF0YSwgLTEpOworCX0KKworCWpmZXhwci0+Y29udGV4dF9pdGVtID0JbWFrZUpz b25WYWx1ZUV4cHIoKEV4cHIgKikgY29udGV4dEl0ZW1FeHByLCBOVUxMLAorCQkJCQkJCQkJCQkg IGRlZmF1bHRfZm9ybWF0KTsKKwlqZmV4cHItPnBhdGhzcGVjID0gcGF0aHNwZWM7CisJamZleHBy LT5wYXRobmFtZSA9IE5VTEw7CisJamZleHByLT5wYXNzaW5nID0gcGFzc2luZ0FyZ3M7CisKKwly ZXR1cm4gKE5vZGUgKikgamZleHByOworfQorCisvKgorICogUmVnaXN0ZXIgYSBjb2x1bW4vcGF0 aCBuYW1lIGluIHRoZSBwYXRoIG5hbWUgbGlzdCwgZmxhZ2dpbmcgaWYgdGhlIG5hbWUgaXMKKyAq IGFscmVhZHkgdGFrZW4gYnkgYW5vdGhlciBjb2x1bW4vcGF0aC4KKyAqLworc3RhdGljIHZvaWQK K3JlZ2lzdGVySnNvblRhYmxlQ29sdW1uKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgY2hh ciAqY29sbmFtZSwKKwkJCQkJCWludCBsb2NhdGlvbikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwor CWZvcmVhY2gobGMsIGN4dC0+cGF0aE5hbWVzKQorCXsKKwkJaWYgKHN0cmNtcChjb2xuYW1lLCAo Y29uc3QgY2hhciAqKSBsZmlyc3QobGMpKSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ ZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9BTElBUyksCisJCQkJCWVycm1zZygiZHVwbGljYXRl IEpTT05fVEFCTEUgY29sdW1uIG5hbWU6ICVzIiwgY29sbmFtZSksCisJCQkJCXBhcnNlcl9lcnJw b3NpdGlvbihjeHQtPnBzdGF0ZSwgbG9jYXRpb24pKTsKKwl9CisKKwljeHQtPnBhdGhOYW1lcyA9 IGxhcHBlbmQoY3h0LT5wYXRoTmFtZXMsIGNvbG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorcmVn aXN0ZXJKc29uVGFibGVQYXRoKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgY2hhciAqcGF0 aG5hbWUsCisJCQkJCSAgaW50IGxvY2F0aW9uKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9y ZWFjaChsYywgY3h0LT5wYXRoTmFtZXMpCisJeworCQlpZiAoc3RyY21wKHBhdGhuYW1lLCAoY29u c3QgY2hhciAqKSBsZmlyc3QobGMpKSA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJy Y29kZShFUlJDT0RFX0RVUExJQ0FURV9BTElBUyksCisJCQkJCWVycm1zZygiZHVwbGljYXRlIEpT T05fVEFCTEUgcGF0aCBuYW1lOiAlcyIsIHBhdGhuYW1lKSwKKwkJCQkJcGFyc2VyX2VycnBvc2l0 aW9uKGN4dC0+cHN0YXRlLCBsb2NhdGlvbikpOworCX0KKworCWN4dC0+cGF0aE5hbWVzID0gbGFw cGVuZChjeHQtPnBhdGhOYW1lcywgcGF0aG5hbWUpOworfQorCisvKgorICogUmVjdXJzaXZlbHkg cmVnaXN0ZXIgYWxsIG5lc3RlZCBjb2x1bW4gbmFtZXMgaW4gdGhlIHNoYXJlZCBjb2x1bW5zL3Bh dGggbmFtZQorICogbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3JlZ2lzdGVyQWxsSnNvblRhYmxl Q29sdW1uc0FuZFBhdGhzKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwKKwkJCQkJCQkJCUxp c3QgKmNvbHVtbnMpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBjb2x1bW5z KQorCXsKKwkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9kZShKc29uVGFibGVDb2x1bW4s IGxmaXJzdChsYykpOworCisJCWlmIChqdGMtPmNvbHR5cGUgPT0gSlRDX05FU1RFRCkKKwkJewor CQkJaWYgKGp0Yy0+cGF0aHNwZWMtPm5hbWUpCisJCQkJcmVnaXN0ZXJKc29uVGFibGVQYXRoKGN4 dCwganRjLT5wYXRoc3BlYy0+bmFtZSwKKwkJCQkJCQkJCSAganRjLT5wYXRoc3BlYy0+bmFtZV9s b2NhdGlvbik7CisKKwkJCXJlZ2lzdGVyQWxsSnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKGN4dCwg anRjLT5jb2x1bW5zKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJlZ2lzdGVySnNvblRhYmxlQ29s dW1uKGN4dCwganRjLT5uYW1lLCBqdGMtPmxvY2F0aW9uKTsKKwkJfQorCX0KK30KKworLyogR2Vu ZXJhdGUgYSBuZXcgdW5pcXVlIEpTT05fVEFCTEUgcGF0aCBuYW1lLiAqLworc3RhdGljIGNoYXIg KgorZ2VuZXJhdGVKc29uVGFibGVQYXRoTmFtZShKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQp Cit7CisJY2hhcgkJbmFtZWJ1ZlszMl07CisJY2hhcgkgICAqbmFtZSA9IG5hbWVidWY7CisKKwlz bnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICJqc29uX3RhYmxlX3BhdGhfJWQiLAor CQkJIGN4dC0+cGF0aE5hbWVJZCsrKTsKKworCW5hbWUgPSBwc3RyZHVwKG5hbWUpOworCWN4dC0+ cGF0aE5hbWVzID0gbGFwcGVuZChjeHQtPnBhdGhOYW1lcywgbmFtZSk7CisKKwlyZXR1cm4gbmFt ZTsKK30KKworLyogQ29sbGVjdCBzaWJsaW5nIHBhdGggbmFtZXMgZnJvbSBwbGFuIHRvIHRoZSBz cGVjaWZpZWQgbGlzdC4gKi8KK3N0YXRpYyB2b2lkCitjb2xsZWN0U2libGluZ1BhdGhzSW5Kc29u VGFibGVQbGFuKEpzb25UYWJsZVBsYW5TcGVjICpwbGFuLCBMaXN0ICoqcGF0aHMpCit7CisJaWYg KHBsYW4tPnBsYW5fdHlwZSA9PSBKU1RQX1NJTVBMRSkKKwkJKnBhdGhzID0gbGFwcGVuZCgqcGF0 aHMsIHBsYW4tPnBhdGhuYW1lKTsKKwllbHNlIGlmIChwbGFuLT5wbGFuX3R5cGUgPT0gSlNUUF9K T0lORUQpCisJeworCQlpZiAocGxhbi0+am9pbl90eXBlID09IEpTVFBfSk9JTl9JTk5FUiB8fAor CQkJcGxhbi0+am9pbl90eXBlID09IEpTVFBfSk9JTl9PVVRFUikKKwkJeworCQkJQXNzZXJ0KHBs YW4tPnBsYW4xLT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1QTEUpOworCQkJKnBhdGhzID0gbGFwcGVu ZCgqcGF0aHMsIHBsYW4tPnBsYW4xLT5wYXRobmFtZSk7CisJCX0KKwkJZWxzZSBpZiAocGxhbi0+ am9pbl90eXBlID09IEpTVFBfSk9JTl9DUk9TUyB8fAorCQkJCSBwbGFuLT5qb2luX3R5cGUgPT0g SlNUUF9KT0lOX1VOSU9OKQorCQl7CisJCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFibGVQ bGFuKHBsYW4tPnBsYW4xLCBwYXRocyk7CisJCQljb2xsZWN0U2libGluZ1BhdGhzSW5Kc29uVGFi bGVQbGFuKHBsYW4tPnBsYW4yLCBwYXRocyk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgSlNPTl9UQUJMRSBqb2luIHR5cGUgJWQiLAorCQkJCSBwbGFuLT5qb2luX3R5cGUp OworCX0KK30KKworLyoKKyAqIFZhbGlkYXRlIGNoaWxkIEpTT05fVEFCTEUgcGxhbiBieSBjaGVj a2luZyB0aGF0OgorICogIC0gYWxsIG5lc3RlZCBjb2x1bW5zIGhhdmUgcGF0aCBuYW1lcyBzcGVj aWZpZWQKKyAqICAtIGFsbCBuZXN0ZWQgY29sdW1ucyBoYXZlIGNvcnJlc3BvbmRpbmcgbm9kZSBp biB0aGUgc2libGluZyBwbGFuCisgKiAgLSBwbGFuIGRvZXMgbm90IGNvbnRhaW4gZHVwbGljYXRl IG9yIGV4dHJhIG5vZGVzCisgKi8KK3N0YXRpYyB2b2lkCit2YWxpZGF0ZUpzb25UYWJsZUNoaWxk UGxhbihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25UYWJsZVBsYW5TcGVjICpwbGFuLAorCQkJCQkJ ICAgTGlzdCAqY29sdW1ucykKK3sKKwlMaXN0Q2VsbCAgICpsYzE7CisJTGlzdAkgICAqc2libGlu Z3MgPSBOSUw7CisJaW50CQkJbmNoaWxkcmVuID0gMDsKKworCWlmIChwbGFuKQorCQljb2xsZWN0 U2libGluZ1BhdGhzSW5Kc29uVGFibGVQbGFuKHBsYW4sICZzaWJsaW5ncyk7CisKKwlmb3JlYWNo KGxjMSwgY29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNvbHVtbiAqanRjID0gY2FzdE5vZGUoSnNv blRhYmxlQ29sdW1uLCBsZmlyc3QobGMxKSk7CisKKwkJaWYgKGp0Yy0+Y29sdHlwZSA9PSBKVENf TkVTVEVEKQorCQl7CisJCQlMaXN0Q2VsbCAgICpsYzI7CisJCQlib29sCQlmb3VuZCA9IGZhbHNl OworCisJCQlpZiAoanRjLT5wYXRoc3BlYy0+bmFtZSA9PSBOVUxMKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCWVycm1zZygi bmVzdGVkIEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRhaW4iCisJCQkJCQkJCSIgYW4gZXhw bGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNhdGlvbiIKKwkJCQkJCQkJIiBpZiBhbiBleHBsaWNp dCBQTEFOIGNsYXVzZSBpcyB1c2VkIiksCisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRl LCBqdGMtPmxvY2F0aW9uKSk7CisKKwkJCS8qIGZpbmQgbmVzdGVkIHBhdGggbmFtZSBpbiB0aGUg bGlzdCBvZiBzaWJsaW5nIHBhdGggbmFtZXMgKi8KKwkJCWZvcmVhY2gobGMyLCBzaWJsaW5ncykK KwkJCXsKKwkJCQlpZiAoKGZvdW5kID0gIXN0cmNtcChqdGMtPnBhdGhzcGVjLT5uYW1lLCBsZmly c3QobGMyKSkpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCFmb3VuZCkKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQll cnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uIiksCisJCQkJCQllcnJkZXRh aWwoIlBMQU4gY2xhdXNlIGZvciBuZXN0ZWQgcGF0aCAlcyB3YXMgbm90IGZvdW5kLiIsCisJCQkJ CQkJCSAganRjLT5wYXRoc3BlYy0+bmFtZSksCisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0 YXRlLCBqdGMtPmxvY2F0aW9uKSk7CisKKwkJCW5jaGlsZHJlbisrOworCQl9CisJfQorCisJaWYg KGxpc3RfbGVuZ3RoKHNpYmxpbmdzKSA+IG5jaGlsZHJlbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQllcnJtc2coImludmFsaWQgSlNP Tl9UQUJMRSBwbGFuIGNsYXVzZSIpLAorCQkJCWVycmRldGFpbCgiUExBTiBjbGF1c2UgY29udGFp bnMgc29tZSBleHRyYSBvciBkdXBsaWNhdGUgc2libGluZyBub2Rlcy4iKSwKKwkJCQlwYXJzZXJf ZXJycG9zaXRpb24ocHN0YXRlLCBwbGFuID8gcGxhbi0+bG9jYXRpb24gOiAtMSkpOworfQorCitz dGF0aWMgSnNvblRhYmxlQ29sdW1uICoKK2ZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4oTGlzdCAq Y29sdW1ucywgY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlm b3JlYWNoKGxjLCBjb2x1bW5zKQorCXsKKwkJSnNvblRhYmxlQ29sdW1uICpqdGMgPSBjYXN0Tm9k ZShKc29uVGFibGVDb2x1bW4sIGxmaXJzdChsYykpOworCisJCWlmIChqdGMtPmNvbHR5cGUgPT0g SlRDX05FU1RFRCAmJgorCQkJanRjLT5wYXRoc3BlYy0+bmFtZSAmJgorCQkJIXN0cmNtcChqdGMt PnBhdGhzcGVjLT5uYW1lLCBwYXRobmFtZSkpCisJCQlyZXR1cm4ganRjOworCX0KKworCXJldHVy biBOVUxMOworfQorCitzdGF0aWMgTm9kZSAqCit0cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVDb2x1 bW4oSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LCBKc29uVGFibGVDb2x1bW4gKmp0YywKKwkJ CQkJCQkgICBKc29uVGFibGVQbGFuU3BlYyAqcGxhbnNwZWMpCit7CisJaWYgKGp0Yy0+cGF0aHNw ZWMtPm5hbWUgPT0gTlVMTCkKKwl7CisJCWlmIChjeHQtPnRhYmxlLT5wbGFuc3BlYyAhPSBOVUxM KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIEpTT05fVEFCTEUgZXhwcmVzc2lvbiIpLAorCQkJCQkg ZXJyZGV0YWlsKCJKU09OX1RBQkxFIHBhdGggbXVzdCBjb250YWluIgorCQkJCQkJCSAgICIgZXhw bGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNhdGlvbiBpZiIKKwkJCQkJCQkgICAiIGV4cGxpY2l0 IFBMQU4gY2xhdXNlIGlzIHVzZWQiKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBz dGF0ZSwganRjLT5sb2NhdGlvbikpKTsKKworCQlqdGMtPnBhdGhzcGVjLT5uYW1lID0gZ2VuZXJh dGVKc29uVGFibGVQYXRoTmFtZShjeHQpOworCX0KKworCXJldHVybiAoTm9kZSAqKSB0cmFuc2Zv cm1Kc29uVGFibGVDb2x1bW5zKGN4dCwgcGxhbnNwZWMsIGp0Yy0+Y29sdW1ucywKKwkJCQkJCQkJ CQkJICBqdGMtPnBhdGhzcGVjKTsKK30KKworc3RhdGljIE5vZGUgKgorbWFrZUpzb25UYWJsZVNp YmxpbmdKb2luKGJvb2wgY3Jvc3MsIE5vZGUgKmxub2RlLCBOb2RlICpybm9kZSkKK3sKKwlKc29u VGFibGVTaWJsaW5nICpqb2luID0gbWFrZU5vZGUoSnNvblRhYmxlU2libGluZyk7CisKKwlqb2lu LT5sYXJnID0gbG5vZGU7CisJam9pbi0+cmFyZyA9IHJub2RlOworCWpvaW4tPmNyb3NzID0gY3Jv c3M7CisKKwlyZXR1cm4gKE5vZGUgKikgam9pbjsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHRy YW5zZm9ybSBjaGlsZCBKU09OX1RBQkxFIHBsYW4uCisgKgorICogRGVmYXVsdCBwbGFuIGlzIHRy YW5zZm9ybWVkIGludG8gYSBjcm9zcy91bmlvbiBqb2luIG9mIGl0cyBuZXN0ZWQgY29sdW1ucy4K KyAqIFNpbXBsZSBhbmQgb3V0ZXIvaW5uZXIgcGxhbnMgYXJlIHRyYW5zZm9ybWVkIGludG8gYSBK c29uVGFibGVQbGFuIGJ5CisgKiBmaW5kaW5nIGFuZCB0cmFuc2Zvcm1pbmcgY29ycmVzcG9uZGlu ZyBuZXN0ZWQgY29sdW1uLgorICogU2libGluZyBwbGFucyBhcmUgcmVjdXJzaXZlbHkgdHJhbnNm b3JtZWQgaW50byBhIEpzb25UYWJsZVNpYmxpbmcuCisgKi8KK3N0YXRpYyBOb2RlICoKK3RyYW5z Zm9ybUpzb25UYWJsZUNoaWxkUGxhbihKc29uVGFibGVQYXJzZUNvbnRleHQgKiBjeHQsCisJCQkJ CQkJSnNvblRhYmxlUGxhblNwZWMgKnBsYW4sCisJCQkJCQkJTGlzdCAqY29sdW1ucykKK3sKKwlK c29uVGFibGVDb2x1bW4gKmp0YyA9IE5VTEw7CisKKwlpZiAoIXBsYW4gfHwgcGxhbi0+cGxhbl90 eXBlID09IEpTVFBfREVGQVVMVCkKKwl7CisJCS8qIHVuc3BlY2lmaWVkIG9yIGRlZmF1bHQgcGxh biAqLworCQlOb2RlCSAgICpyZXMgPSBOVUxMOworCQlMaXN0Q2VsbCAgICpsYzsKKwkJYm9vbAkJ Y3Jvc3MgPSBwbGFuICYmIChwbGFuLT5qb2luX3R5cGUgJiBKU1RQX0pPSU5fQ1JPU1MpOworCisJ CS8qIHRyYW5zZm9ybSBhbGwgbmVzdGVkIGNvbHVtbnMgaW50byBjcm9zcy91bmlvbiBqb2luICov CisJCWZvcmVhY2gobGMsIGNvbHVtbnMpCisJCXsKKwkJCUpzb25UYWJsZUNvbHVtbiAqY29sID0g Y2FzdE5vZGUoSnNvblRhYmxlQ29sdW1uLCBsZmlyc3QobGMpKTsKKwkJCU5vZGUJICAgKm5vZGU7 CisKKwkJCWlmIChjb2wtPmNvbHR5cGUgIT0gSlRDX05FU1RFRCkKKwkJCQljb250aW51ZTsKKwor CQkJbm9kZSA9IHRyYW5zZm9ybU5lc3RlZEpzb25UYWJsZUNvbHVtbihjeHQsIGNvbCwgcGxhbik7 CisKKwkJCS8qIGpvaW4gdHJhbnNmb3JtZWQgbm9kZSB3aXRoIHByZXZpb3VzIHNpYmxpbmcgbm9k ZXMgKi8KKwkJCXJlcyA9IHJlcyA/IG1ha2VKc29uVGFibGVTaWJsaW5nSm9pbihjcm9zcywgcmVz LCBub2RlKSA6IG5vZGU7CisJCX0KKworCQlyZXR1cm4gcmVzOworCX0KKwllbHNlIGlmIChwbGFu LT5wbGFuX3R5cGUgPT0gSlNUUF9TSU1QTEUpCisJeworCQlqdGMgPSBmaW5kTmVzdGVkSnNvblRh YmxlQ29sdW1uKGNvbHVtbnMsIHBsYW4tPnBhdGhuYW1lKTsKKwl9CisJZWxzZSBpZiAocGxhbi0+ cGxhbl90eXBlID09IEpTVFBfSk9JTkVEKQorCXsKKwkJaWYgKHBsYW4tPmpvaW5fdHlwZSA9PSBK U1RQX0pPSU5fSU5ORVIgfHwKKwkJCXBsYW4tPmpvaW5fdHlwZSA9PSBKU1RQX0pPSU5fT1VURVIp CisJCXsKKwkJCUFzc2VydChwbGFuLT5wbGFuMS0+cGxhbl90eXBlID09IEpTVFBfU0lNUExFKTsK KwkJCWp0YyA9IGZpbmROZXN0ZWRKc29uVGFibGVDb2x1bW4oY29sdW1ucywgcGxhbi0+cGxhbjEt PnBhdGhuYW1lKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU5vZGUJICAgKm5vZGUxID0gdHJhbnNm b3JtSnNvblRhYmxlQ2hpbGRQbGFuKGN4dCwgcGxhbi0+cGxhbjEsCisJCQkJCQkJCQkJCQkJCQlj b2x1bW5zKTsKKwkJCU5vZGUJICAgKm5vZGUyID0gdHJhbnNmb3JtSnNvblRhYmxlQ2hpbGRQbGFu KGN4dCwgcGxhbi0+cGxhbjIsCisJCQkJCQkJCQkJCQkJCQljb2x1bW5zKTsKKworCQkJcmV0dXJu IG1ha2VKc29uVGFibGVTaWJsaW5nSm9pbihwbGFuLT5qb2luX3R5cGUgPT0gSlNUUF9KT0lOX0NS T1NTLAorCQkJCQkJCQkJCQlub2RlMSwgbm9kZTIpOworCQl9CisJfQorCWVsc2UKKwkJZWxvZyhF UlJPUiwgImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIHR5cGUgJWQiLCBwbGFuLT5wbGFuX3R5cGUp OworCisJaWYgKCFqdGMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkJCSBlcnJtc2coImludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVz ZSIpLAorCQkJCSBlcnJkZXRhaWwoIlBBVEggbmFtZSB3YXMgJXMgbm90IGZvdW5kIGluIG5lc3Rl ZCBjb2x1bW5zIGxpc3QuIiwKKwkJCQkJCSAgIHBsYW4tPnBhdGhuYW1lKSwKKwkJCQkgcGFyc2Vy X2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBwbGFuLT5sb2NhdGlvbikpKTsKKworCXJldHVybiB0 cmFuc2Zvcm1OZXN0ZWRKc29uVGFibGVDb2x1bW4oY3h0LCBqdGMsIHBsYW4pOworfQorCisvKiBD aGVjayB3aGV0aGVyIHR5cGUgaXMganNvbi9qc29uYiwgYXJyYXksIG9yIHJlY29yZC4gKi8KK3N0 YXRpYyBib29sCit0eXBlSXNDb21wb3NpdGUoT2lkIHR5cGlkKQoreworCWNoYXIJCXR5cHR5cGU7 CisKKwlpZiAodHlwaWQgPT0gSlNPTk9JRCB8fAorCQl0eXBpZCA9PSBKU09OQk9JRCB8fAorCQl0 eXBpZCA9PSBSRUNPUkRPSUQgfHwKKwkJdHlwZV9pc19hcnJheSh0eXBpZCkpCisJCXJldHVybiB0 cnVlOworCisJdHlwdHlwZSA9IGdldF90eXB0eXBlKHR5cGlkKTsKKworCWlmICh0eXB0eXBlID09 IFRZUFRZUEVfQ09NUE9TSVRFKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICh0eXB0eXBlID09IFRZ UFRZUEVfRE9NQUlOKQorCQlyZXR1cm4gdHlwZUlzQ29tcG9zaXRlKGdldEJhc2VUeXBlKHR5cGlk KSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIEFwcGVuZCB0cmFuc2Zvcm1lZCBub24tbmVz dGVkIEpTT05fVEFCTEUgY29sdW1ucyB0byB0aGUgVGFibGVGdW5jIG5vZGUgKi8KK3N0YXRpYyB2 b2lkCithcHBlbmRKc29uVGFibGVDb2x1bW5zKEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwg TGlzdCAqY29sdW1ucykKK3sKKwlMaXN0Q2VsbCAgICpjb2w7CisJUGFyc2VTdGF0ZSAqcHN0YXRl ID0gY3h0LT5wc3RhdGU7CisJSnNvblRhYmxlICAqanQgPSBjeHQtPnRhYmxlOworCVRhYmxlRnVu YyAgKnRmID0gY3h0LT50YWJsZWZ1bmM7CisJYm9vbAkJb3JkaW5hbGl0eV9mb3VuZCA9IGZhbHNl OworCUpzb25CZWhhdmlvciAqb25fZXJyb3IgPSBqdC0+b25fZXJyb3I7CisJYm9vbAkJZXJyb3JP bkVycm9yID0gb25fZXJyb3IgJiYKKwkJb25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1Jf RVJST1I7CisKKwlmb3JlYWNoKGNvbCwgY29sdW1ucykKKwl7CisJCUpzb25UYWJsZUNvbHVtbiAq cmF3YyA9IGNhc3ROb2RlKEpzb25UYWJsZUNvbHVtbiwgbGZpcnN0KGNvbCkpOworCQlPaWQJCQl0 eXBpZDsKKwkJaW50MzIJCXR5cG1vZDsKKwkJTm9kZQkgICAqY29sZXhwcjsKKworCQlpZiAocmF3 Yy0+bmFtZSkKKwkJCXRmLT5jb2xuYW1lcyA9IGxhcHBlbmQodGYtPmNvbG5hbWVzLAorCQkJCQkJ CQkgICBtYWtlU3RyaW5nKHBzdHJkdXAocmF3Yy0+bmFtZSkpKTsKKworCQkvKgorCQkgKiBEZXRl cm1pbmUgdGhlIHR5cGUgYW5kIHR5cG1vZCBmb3IgdGhlIG5ldyBjb2x1bW4uIEZPUiBPUkRJTkFM SVRZCisJCSAqIGNvbHVtbnMgYXJlIElOVEVHRVIgYnkgc3RhbmRhcmQ7IHRoZSBvdGhlcnMgYXJl IHVzZXItc3BlY2lmaWVkLgorCQkgKi8KKwkJc3dpdGNoIChyYXdjLT5jb2x0eXBlKQorCQl7CisJ CQljYXNlIEpUQ19GT1JfT1JESU5BTElUWToKKwkJCQlpZiAob3JkaW5hbGl0eV9mb3VuZCkKKwkJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CisJCQkJCQkJIGVycm1zZygiY2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIEZPUiBPUkRJTkFMSVRZ IGNvbHVtbiIpLAorCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCByYXdjLT5sb2Nh dGlvbikpKTsKKwkJCQlvcmRpbmFsaXR5X2ZvdW5kID0gdHJ1ZTsKKwkJCQljb2xleHByID0gTlVM TDsKKwkJCQl0eXBpZCA9IElOVDRPSUQ7CisJCQkJdHlwbW9kID0gLTE7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgSlRDX1JFR1VMQVI6CisJCQkJdHlwZW5hbWVUeXBlSWRBbmRNb2QocHN0YXRlLCBy YXdjLT50eXBlTmFtZSwgJnR5cGlkLCAmdHlwbW9kKTsKKworCQkJCS8qCisJCQkJICogVXNlIGlt cGxpY2l0IEZPUk1BVCBKU09OIGZvciBjb21wb3NpdGUgdHlwZXMgKGFycmF5cyBhbmQKKwkJCQkg KiByZWNvcmRzKSBvciBpZiBhIG5vbi1kZWZhdWx0IFdSQVBQRVIgLyBRVU9URVMgYmVoYXZpb3IK KwkJCQkgKiBpcyBzcGVjaWZpZWQuCisJCQkJICovCisJCQkJaWYgKHR5cGVJc0NvbXBvc2l0ZSh0 eXBpZCkgfHwKKwkJCQkJcmF3Yy0+cXVvdGVzICE9IEpTX1FVT1RFU19VTlNQRUMgfHwKKwkJCQkJ cmF3Yy0+d3JhcHBlciAhPSBKU1dfVU5TUEVDKQorCQkJCQlyYXdjLT5jb2x0eXBlID0gSlRDX0ZP Uk1BVFRFRDsKKworCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQljYXNlIEpUQ19GT1JNQVRURUQ6 CisJCQljYXNlIEpUQ19FWElTVFM6CisJCQkJeworCQkJCQlOb2RlCSAgICpqZTsKKwkJCQkJQ2Fz ZVRlc3RFeHByICpwYXJhbSA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisKKwkJCQkJcGFyYW0t PmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisJCQkJCXBhcmFtLT50eXBlSWQgPSBjeHQtPmNvbnRl eHRJdGVtVHlwaWQ7CisJCQkJCXBhcmFtLT50eXBlTW9kID0gLTE7CisKKwkJCQkJamUgPSB0cmFu c2Zvcm1Kc29uVGFibGVDb2x1bW4ocmF3YywgKE5vZGUgKikgcGFyYW0sCisJCQkJCQkJCQkJCQkg IE5JTCwgZXJyb3JPbkVycm9yKTsKKworCQkJCQljb2xleHByID0gdHJhbnNmb3JtRXhwcihwc3Rh dGUsIGplLCBFWFBSX0tJTkRfRlJPTV9GVU5DVElPTik7CisJCQkJCWFzc2lnbl9leHByX2NvbGxh dGlvbnMocHN0YXRlLCBjb2xleHByKTsKKworCQkJCQl0eXBpZCA9IGV4cHJUeXBlKGNvbGV4cHIp OworCQkJCQl0eXBtb2QgPSBleHByVHlwbW9kKGNvbGV4cHIpOworCQkJCQlicmVhazsKKwkJCQl9 CisKKwkJCWNhc2UgSlRDX05FU1RFRDoKKwkJCQljb250aW51ZTsKKworCQkJZGVmYXVsdDoKKwkJ CQllbG9nKEVSUk9SLCAidW5rbm93biBKU09OX1RBQkxFIGNvbHVtbiB0eXBlOiAlZCIsIHJhd2Mt PmNvbHR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJdGYtPmNvbHR5cGVzID0gbGFwcGVuZF9v aWQodGYtPmNvbHR5cGVzLCB0eXBpZCk7CisJCXRmLT5jb2x0eXBtb2RzID0gbGFwcGVuZF9pbnQo dGYtPmNvbHR5cG1vZHMsIHR5cG1vZCk7CisJCXRmLT5jb2xjb2xsYXRpb25zID0gbGFwcGVuZF9v aWQodGYtPmNvbGNvbGxhdGlvbnMsIGdldF90eXBjb2xsYXRpb24odHlwaWQpKTsKKwkJdGYtPmNv bHZhbGV4cHJzID0gbGFwcGVuZCh0Zi0+Y29sdmFsZXhwcnMsIGNvbGV4cHIpOworCX0KK30KKwor LyoKKyAqIENyZWF0ZSB0cmFuc2Zvcm1lZCBKU09OX1RBQkxFIHBhcmVudCBwbGFuIG5vZGUgYnkg YXBwZW5kaW5nIGFsbCBub24tbmVzdGVkCisgKiBjb2x1bW5zIHRvIHRoZSBUYWJsZUZ1bmMgbm9k ZSBhbmQgcmVtZW1iZXJpbmcgdGhlaXIgaW5kaWNlcyBpbiB0aGUKKyAqIGNvbHZhbGV4cHJzIGxp c3QuCisgKi8KK3N0YXRpYyBKc29uVGFibGVQbGFuICoKK21ha2VQYXJlbnRKc29uVGFibGVQbGFu KEpzb25UYWJsZVBhcnNlQ29udGV4dCAqIGN4dCwgSnNvblRhYmxlUGF0aFNwZWMgKnBhdGhzcGVj LAorCQkJCQkJTGlzdCAqY29sdW1ucykKK3sKKwlKc29uVGFibGVQbGFuICpwbGFuID0gbWFrZU5v ZGUoSnNvblRhYmxlUGxhbik7CisJSnNvbkJlaGF2aW9yICpvbl9lcnJvciA9IGN4dC0+dGFibGUt Pm9uX2Vycm9yOworCWNoYXIJCSAqcGF0aHN0cmluZzsKKwlDb25zdAkJICp2YWx1ZTsKKworCUFz c2VydChJc0EocGF0aHNwZWMtPnN0cmluZywgQV9Db25zdCkpOworCXBhdGhzdHJpbmcgPSBjYXN0 Tm9kZShBX0NvbnN0LCBwYXRoc3BlYy0+c3RyaW5nKS0+dmFsLnN2YWwuc3ZhbDsKKwl2YWx1ZSA9 IG1ha2VDb25zdChKU09OUEFUSE9JRCwgLTEsIEludmFsaWRPaWQsIC0xLAorCQkJCQkgIERpcmVj dEZ1bmN0aW9uQ2FsbDEoanNvbnBhdGhfaW4sCisJCQkJCQkJCQkJICBDU3RyaW5nR2V0RGF0dW0o cGF0aHN0cmluZykpLAorCQkJCQkgIGZhbHNlLCBmYWxzZSk7CisJcGxhbi0+cGF0aCA9IG1ha2VK c29uVGFibGVQYXRoKHZhbHVlLCBwYXRoc3BlYy0+bmFtZSk7CisKKwkvKiBzYXZlIHN0YXJ0IG9m IGNvbHVtbiByYW5nZSAqLworCXBsYW4tPmNvbE1pbiA9IGxpc3RfbGVuZ3RoKGN4dC0+dGFibGVm dW5jLT5jb2x2YWxleHBycyk7CisKKwlhcHBlbmRKc29uVGFibGVDb2x1bW5zKGN4dCwgY29sdW1u cyk7CisKKwkvKiBzYXZlIGVuZCBvZiBjb2x1bW4gcmFuZ2UgKi8KKwlwbGFuLT5jb2xNYXggPSBs aXN0X2xlbmd0aChjeHQtPnRhYmxlZnVuYy0+Y29sdmFsZXhwcnMpIC0gMTsKKworCXBsYW4tPmVy cm9yT25FcnJvciA9IG9uX2Vycm9yICYmIG9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9S X0VSUk9SOworCisJcmV0dXJuIHBsYW47Cit9CisKK3N0YXRpYyBKc29uVGFibGVQbGFuICoKK3Ry YW5zZm9ybUpzb25UYWJsZUNvbHVtbnMoSnNvblRhYmxlUGFyc2VDb250ZXh0ICogY3h0LAorCQkJ CQkJICBKc29uVGFibGVQbGFuU3BlYyAqcGxhbnNwZWMsCisJCQkJCQkgIExpc3QgKmNvbHVtbnMs CisJCQkJCQkgIEpzb25UYWJsZVBhdGhTcGVjICpwYXRoc3BlYykKK3sKKwlKc29uVGFibGVQbGFu ICpwbGFuOworCUpzb25UYWJsZVBsYW5TcGVjICpjaGlsZFBsYW5TcGVjOworCWJvb2wJCWRlZmF1 bHRQbGFuID0gcGxhbnNwZWMgPT0gTlVMTCB8fAorCQlwbGFuc3BlYy0+cGxhbl90eXBlID09IEpT VFBfREVGQVVMVDsKKworCWlmIChkZWZhdWx0UGxhbikKKwkJY2hpbGRQbGFuU3BlYyA9IHBsYW5z cGVjOworCWVsc2UKKwl7CisJCS8qIHZhbGlkYXRlIHBhcmVudCBhbmQgY2hpbGQgcGxhbnMgKi8K KwkJSnNvblRhYmxlUGxhblNwZWMgKnBhcmVudFBsYW5TcGVjOworCisJCWlmIChwbGFuc3BlYy0+ cGxhbl90eXBlID09IEpTVFBfSk9JTkVEKQorCQl7CisJCQlpZiAocGxhbnNwZWMtPmpvaW5fdHlw ZSAhPSBKU1RQX0pPSU5fSU5ORVIgJiYKKwkJCQlwbGFuc3BlYy0+am9pbl90eXBlICE9IEpTVFBf Sk9JTl9PVVRFUikKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xh dXNlIiksCisJCQkJCQkgZXJyZGV0YWlsKCJFeHBlY3RlZCBJTk5FUiBvciBPVVRFUi4iKSwKKwkJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsIHBsYW5zcGVjLT5sb2NhdGlvbikp KTsKKworCQkJcGFyZW50UGxhblNwZWMgPSBwbGFuc3BlYy0+cGxhbjE7CisJCQljaGlsZFBsYW5T cGVjID0gcGxhbnNwZWMtPnBsYW4yOworCisJCQlBc3NlcnQocGFyZW50UGxhblNwZWMtPnBsYW5f dHlwZSAhPSBKU1RQX0pPSU5FRCk7CisJCQlBc3NlcnQocGFyZW50UGxhblNwZWMtPnBhdGhuYW1l KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBhcmVudFBsYW5TcGVjID0gcGxhbnNwZWM7CisJCQlj aGlsZFBsYW5TcGVjID0gTlVMTDsKKwkJfQorCisJCWlmIChzdHJjbXAocGFyZW50UGxhblNwZWMt PnBhdGhuYW1lLCBwYXRoc3BlYy0+bmFtZSkgIT0gMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBK U09OX1RBQkxFIHBsYW4iKSwKKwkJCQkJIGVycmRldGFpbCgiUEFUSCBuYW1lIG1pc21hdGNoOiBl eHBlY3RlZCAlcyBidXQgJXMgaXMgZ2l2ZW4uIiwKKwkJCQkJCQkgICBwYXRoc3BlYy0+bmFtZSwg cGFyZW50UGxhblNwZWMtPnBhdGhuYW1lKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQt PnBzdGF0ZSwgcGxhbnNwZWMtPmxvY2F0aW9uKSkpOworCisJCXZhbGlkYXRlSnNvblRhYmxlQ2hp bGRQbGFuKGN4dC0+cHN0YXRlLCBjaGlsZFBsYW5TcGVjLCBjb2x1bW5zKTsKKwl9CisKKwkvKiB0 cmFuc2Zvcm0gb25seSBub24tbmVzdGVkIGNvbHVtbnMgKi8KKwlwbGFuID0gbWFrZVBhcmVudEpz b25UYWJsZVBsYW4oY3h0LCBwYXRoc3BlYywgY29sdW1ucyk7CisKKwlpZiAoY2hpbGRQbGFuU3Bl YyB8fCBkZWZhdWx0UGxhbikKKwl7CisJCS8qIHRyYW5zZm9ybSByZWN1cnNpdmVseSBuZXN0ZWQg Y29sdW1ucyAqLworCQlwbGFuLT5jaGlsZCA9IHRyYW5zZm9ybUpzb25UYWJsZUNoaWxkUGxhbihj eHQsIGNoaWxkUGxhblNwZWMsIGNvbHVtbnMpOworCQlpZiAocGxhbi0+Y2hpbGQpCisJCQlwbGFu LT5vdXRlckpvaW4gPSBwbGFuc3BlYyA9PSBOVUxMIHx8CisJCQkJKHBsYW5zcGVjLT5qb2luX3R5 cGUgJiBKU1RQX0pPSU5fT1VURVIpOworCQkvKiBlbHNlOiBkZWZhdWx0IHBsYW4gY2FzZSwgbm8g Y2hpbGRyZW4gZm91bmQgKi8KKwl9CisKKwlyZXR1cm4gcGxhbjsKK30KKworLyoKKyAqIHRyYW5z Zm9ybUpzb25UYWJsZSAtCisgKgkJCVRyYW5zZm9ybSBhIHJhdyBKc29uVGFibGUgaW50byBUYWJs ZUZ1bmMuCisgKgorICogVHJhbnNmb3JtIHRoZSBkb2N1bWVudC1nZW5lcmF0aW5nIGV4cHJlc3Np b24sIHRoZSByb3ctZ2VuZXJhdGluZyBleHByZXNzaW9uLAorICogdGhlIGNvbHVtbi1nZW5lcmF0 aW5nIGV4cHJlc3Npb25zLCBhbmQgdGhlIGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbnMuCisgKi8K K1BhcnNlTmFtZXNwYWNlSXRlbSAqCit0cmFuc2Zvcm1Kc29uVGFibGUoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBKc29uVGFibGUgKmp0KQoreworCUpzb25UYWJsZVBhcnNlQ29udGV4dCBjeHQ7CisJVGFi bGVGdW5jICAqdGYgPSBtYWtlTm9kZShUYWJsZUZ1bmMpOworCUpzb25GdW5jRXhwciAqamZlID0g bWFrZU5vZGUoSnNvbkZ1bmNFeHByKTsKKwlKc29uRXhwciAgICpqZTsKKwlKc29uVGFibGVQbGFu U3BlYyAqcGxhbiA9IGp0LT5wbGFuc3BlYzsKKwlKc29uVGFibGVQYXRoU3BlYyAqcm9vdFBhdGhT cGVjID0ganQtPnBhdGhzcGVjOworCWJvb2wJCWlzX2xhdGVyYWw7CisKKwlBc3NlcnQoSXNBKHJv b3RQYXRoU3BlYy0+c3RyaW5nLCBBX0NvbnN0KSAmJgorCQkgICBjYXN0Tm9kZShBX0NvbnN0LCBy b290UGF0aFNwZWMtPnN0cmluZyktPnZhbC5ub2RlLnR5cGUgPT0gVF9TdHJpbmcpOworCisJY3h0 LnBzdGF0ZSA9IHBzdGF0ZTsKKwljeHQudGFibGUgPSBqdDsKKwljeHQudGFibGVmdW5jID0gdGY7 CisJY3h0LnBhdGhOYW1lcyA9IE5JTDsKKwljeHQucGF0aE5hbWVJZCA9IDA7CisKKwlpZiAocm9v dFBhdGhTcGVjLT5uYW1lKQorCQlyZWdpc3Rlckpzb25UYWJsZVBhdGgoJmN4dCwgcm9vdFBhdGhT cGVjLT5uYW1lLAorCQkJCQkJCSAgcm9vdFBhdGhTcGVjLT5uYW1lX2xvY2F0aW9uKTsKKwllbHNl CisJeworCQlpZiAoanQtPnBsYW5zcGVjICE9IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImludmFsaWQg SlNPTl9UQUJMRSBleHByZXNzaW9uIiksCisJCQkJCSBlcnJkZXRhaWwoIkpTT05fVEFCTEUgcGF0 aCBtdXN0IGNvbnRhaW4iCisJCQkJCQkJICAgIiBleHBsaWNpdCBBUyBwYXRobmFtZSBzcGVjaWZp Y2F0aW9uIGlmIgorCQkJCQkJCSAgICIgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCIpLAor CQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgcm9vdFBhdGhTcGVjLT5sb2NhdGlvbikp KTsKKworCQlyb290UGF0aFNwZWMtPm5hbWUgPSBnZW5lcmF0ZUpzb25UYWJsZVBhdGhOYW1lKCZj eHQpOworCX0KKworCXJlZ2lzdGVyQWxsSnNvblRhYmxlQ29sdW1uc0FuZFBhdGhzKCZjeHQsIGp0 LT5jb2x1bW5zKTsKKworCWpmZS0+b3AgPSBKU09OX1RBQkxFX09QOworCWpmZS0+Y29udGV4dF9p dGVtID0JanQtPmNvbnRleHRfaXRlbTsKKwlqZmUtPnBhdGhzcGVjID0gKE5vZGUgKikgcm9vdFBh dGhTcGVjLT5zdHJpbmc7CisJamZlLT5wYXRobmFtZSA9IHJvb3RQYXRoU3BlYy0+bmFtZTsKKwlq ZmUtPnBhc3NpbmcgPSBqdC0+cGFzc2luZzsKKwlqZmUtPm9uX2VtcHR5ID0gTlVMTDsKKwlqZmUt Pm9uX2Vycm9yID0ganQtPm9uX2Vycm9yOworCWpmZS0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247 CisKKwkvKgorCSAqIFdlIG1ha2UgbGF0ZXJhbF9vbmx5IG5hbWVzIG9mIHRoaXMgbGV2ZWwgdmlz aWJsZSwgd2hldGhlciBvciBub3QgdGhlCisJICogUmFuZ2VUYWJsZUZ1bmMgaXMgZXhwbGljaXRs eSBtYXJrZWQgTEFURVJBTC4gIFRoaXMgaXMgbmVlZGVkIGZvciBTUUwKKwkgKiBzcGVjIGNvbXBs aWFuY2UgYW5kIHNlZW1zIHVzZWZ1bCBvbiBjb252ZW5pZW5jZSBncm91bmRzIGZvciBhbGwKKwkg KiBmdW5jdGlvbnMgaW4gRlJPTS4KKwkgKgorCSAqIChMQVRFUkFMIGNhbid0IG5lc3Qgd2l0aGlu IGEgc2luZ2xlIHBzdGF0ZSBsZXZlbCwgc28gd2UgZG9uJ3QgbmVlZAorCSAqIHNhdmUvcmVzdG9y ZSBsb2dpYyBoZXJlLikKKwkgKi8KKwlBc3NlcnQoIXBzdGF0ZS0+cF9sYXRlcmFsX2FjdGl2ZSk7 CisJcHN0YXRlLT5wX2xhdGVyYWxfYWN0aXZlID0gdHJ1ZTsKKworCXRmLT5mdW5jdHlwZSA9IFRG VF9KU09OX1RBQkxFOworCXRmLT5kb2NleHByID0gdHJhbnNmb3JtRXhwcihwc3RhdGUsIChOb2Rl ICopIGpmZSwgRVhQUl9LSU5EX0ZST01fRlVOQ1RJT04pOworCisJY3h0LmNvbnRleHRJdGVtVHlw aWQgPSBleHByVHlwZSh0Zi0+ZG9jZXhwcik7CisKKwl0Zi0+cGxhbiA9IChOb2RlICopIHRyYW5z Zm9ybUpzb25UYWJsZUNvbHVtbnMoJmN4dCwgcGxhbiwganQtPmNvbHVtbnMsCisJCQkJCQkJCQkJ CQkgIHJvb3RQYXRoU3BlYyk7CisKKwkvKiBBbHNvIHNhdmUgYSBjb3B5IG9mIHRoZSBQQVNTSU5H IGFyZ3VtZW50cyBpbiB0aGUgVGFibGVGdW5jIG5vZGUuICovCisJamUgPSAoSnNvbkV4cHIgKikg dGYtPmRvY2V4cHI7CisJdGYtPnBhc3Npbmd2YWxleHBycyA9IGNvcHlPYmplY3QoamUtPnBhc3Np bmdfdmFsdWVzKTsKKworCXRmLT5vcmRpbmFsaXR5Y29sID0gLTE7CQkvKiB1bmRlZmluZSBvcmRp bmFsaXR5IGNvbHVtbiBudW1iZXIgKi8KKwl0Zi0+bG9jYXRpb24gPSBqdC0+bG9jYXRpb247CisK Kwlwc3RhdGUtPnBfbGF0ZXJhbF9hY3RpdmUgPSBmYWxzZTsKKworCS8qCisJICogTWFyayB0aGUg UlRFIGFzIExBVEVSQUwgaWYgdGhlIHVzZXIgc2FpZCBMQVRFUkFMIGV4cGxpY2l0bHksIG9yIGlm CisJICogdGhlcmUgYXJlIGFueSBsYXRlcmFsIGNyb3NzLXJlZmVyZW5jZXMgaW4gaXQuCisJICov CisJaXNfbGF0ZXJhbCA9IGp0LT5sYXRlcmFsIHx8IGNvbnRhaW5fdmFyc19vZl9sZXZlbCgoTm9k ZSAqKSB0ZiwgMCk7CisKKwlyZXR1cm4gYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yVGFibGVGdW5jKHBz dGF0ZSwKKwkJCQkJCQkJCQkgIHRmLCBqdC0+YWxpYXMsIGlzX2xhdGVyYWwsIHRydWUpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMgYi9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwppbmRleCAzNGEwZWM1OTAxLi42MjUxYzMwOTM5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYworKysgYi9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24uYwpAQCAtMjA3Myw3ICsyMDczLDggQEAg YWRkUmFuZ2VUYWJsZUVudHJ5Rm9yVGFibGVGdW5jKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlBc3Nl cnQobGlzdF9sZW5ndGgodGYtPmNvbHR5cG1vZHMpID09IGxpc3RfbGVuZ3RoKHRmLT5jb2xuYW1l cykpOwogCUFzc2VydChsaXN0X2xlbmd0aCh0Zi0+Y29sY29sbGF0aW9ucykgPT0gbGlzdF9sZW5n dGgodGYtPmNvbG5hbWVzKSk7CiAKLQlyZWZuYW1lID0gYWxpYXMgPyBhbGlhcy0+YWxpYXNuYW1l IDogcHN0cmR1cCgieG1sdGFibGUiKTsKKwlyZWZuYW1lID0gYWxpYXMgPyBhbGlhcy0+YWxpYXNu YW1lIDoKKwkJcHN0cmR1cCh0Zi0+ZnVuY3R5cGUgPT0gVEZUX1hNTFRBQkxFID8gInhtbHRhYmxl IiA6ICJqc29uX3RhYmxlIik7CiAKIAlydGUtPnJ0ZWtpbmQgPSBSVEVfVEFCTEVGVU5DOwogCXJ0 ZS0+cmVsaWQgPSBJbnZhbGlkT2lkOwpAQCAtMjA5Niw3ICsyMDk3LDcgQEAgYWRkUmFuZ2VUYWJs ZUVudHJ5Rm9yVGFibGVGdW5jKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCiAJCQkJIGVy cm1zZygiJXMgZnVuY3Rpb24gaGFzICVkIGNvbHVtbnMgYXZhaWxhYmxlIGJ1dCAlZCBjb2x1bW5z IHNwZWNpZmllZCIsCi0JCQkJCQkiWE1MVEFCTEUiLAorCQkJCQkJdGYtPmZ1bmN0eXBlID09IFRG VF9YTUxUQUJMRSA/ICJYTUxUQUJMRSIgOiAiSlNPTl9UQUJMRSIsCiAJCQkJCQlsaXN0X2xlbmd0 aCh0Zi0+Y29sbmFtZXMpLCBudW1hbGlhc2VzKSkpOwogCiAJcnRlLT5lcmVmID0gZXJlZjsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyBiL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV90YXJnZXQuYwppbmRleCBlYTVhYzZiYWZlLi5hMzMxZWEzMjcwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdGFyZ2V0LmMKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCkBAIC0yMDAyLDYgKzIwMDIsOSBAQCBGaWd1cmVDb2xu YW1lSW50ZXJuYWwoTm9kZSAqbm9kZSwgY2hhciAqKm5hbWUpCiAJCQkJY2FzZSBKU09OX1ZBTFVF X09QOgogCQkJCQkqbmFtZSA9ICJqc29uX3ZhbHVlIjsKIAkJCQkJcmV0dXJuIDI7CisJCQkJY2Fz ZSBKU09OX1RBQkxFX09QOgorCQkJCQkqbmFtZSA9ICJqc29uX3RhYmxlIjsKKwkJCQkJcmV0dXJu IDI7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBh dGhfZXhlYy5jCmluZGV4IDZkNjFkODdmMDEuLjdhNGZiM2QyN2MgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoX2V4ZWMuYwpAQCAtNjEsMTAgKzYxLDEyIEBACiAKICNpbmNsdWRlICJjYXRh bG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNFeHByLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUg ImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAi cmVnZXgvcmVnZXguaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL2RhdGUuaCIKQEAgLTc1LDYgKzc3LDggQEAKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKICNp bmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbnBhdGguaCIKKyNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2lu Y2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIApA QCAtMTU5LDYgKzE2Myw2MCBAQCB0eXBlZGVmIHN0cnVjdCBKc29uVmFsdWVMaXN0SXRlcmF0b3IK IAlMaXN0Q2VsbCAgICpuZXh0OwogfSBKc29uVmFsdWVMaXN0SXRlcmF0b3I7CiAKKy8qIFN0cnVj dHVyZXMgZm9yIEpTT05fVEFCTEUgZXhlY3V0aW9uICAqLworCit0eXBlZGVmIGVudW0gSnNvblRh YmxlUGxhblN0YXRlVHlwZQoreworCUpTT05fVEFCTEVfU0NBTl9TVEFURSA9IDAsCisJSlNPTl9U QUJMRV9KT0lOX1NUQVRFLAorfQkJCUpzb25UYWJsZVBsYW5TdGF0ZVR5cGU7CisKK3R5cGVkZWYg c3RydWN0IEpzb25UYWJsZVBsYW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5TdGF0ZVR5cGUgdHlw ZTsKKworCXN0cnVjdCBKc29uVGFibGVQbGFuU3RhdGUgKnBhcmVudDsKKwlzdHJ1Y3QgSnNvblRh YmxlUGxhblN0YXRlICpuZXN0ZWQ7Cit9CQkJSnNvblRhYmxlUGxhblN0YXRlOworCit0eXBlZGVm IHN0cnVjdCBKc29uVGFibGVTY2FuU3RhdGUKK3sKKwlKc29uVGFibGVQbGFuU3RhdGUgcGxhbjsK KworCU1lbW9yeUNvbnRleHQgbWN4dDsKKwlKc29uUGF0aCAgICpwYXRoOworCUxpc3QJICAgKmFy Z3M7CisJSnNvblZhbHVlTGlzdCBmb3VuZDsKKwlKc29uVmFsdWVMaXN0SXRlcmF0b3IgaXRlcjsK KwlEYXR1bQkJY3VycmVudDsKKwlpbnQJCQlvcmRpbmFsOworCWJvb2wJCWN1cnJlbnRJc051bGw7 CisJYm9vbAkJb3V0ZXJKb2luOworCWJvb2wJCWVycm9yT25FcnJvcjsKKwlib29sCQlhZHZhbmNl TmVzdGVkOworCWJvb2wJCXJlc2V0OworfSBKc29uVGFibGVTY2FuU3RhdGU7CisKK3R5cGVkZWYg c3RydWN0IEpzb25UYWJsZUpvaW5TdGF0ZQoreworCUpzb25UYWJsZVBsYW5TdGF0ZSBwbGFuOwor CisJSnNvblRhYmxlUGxhblN0YXRlICpsZWZ0OworCUpzb25UYWJsZVBsYW5TdGF0ZSAqcmlnaHQ7 CisJYm9vbAkJY3Jvc3M7CisJYm9vbAkJYWR2YW5jZVJpZ2h0OworfSBKc29uVGFibGVKb2luU3Rh dGU7CisKKy8qIHJhbmRvbSBudW1iZXIgdG8gaWRlbnRpZnkgSnNvblRhYmxlRXhlY0NvbnRleHQg Ki8KKyNkZWZpbmUgSlNPTl9UQUJMRV9FWEVDX0NPTlRFWFRfTUFHSUMJCTQxODM1Mjg2NworCit0 eXBlZGVmIHN0cnVjdCBKc29uVGFibGVFeGVjQ29udGV4dAoreworCWludAkJCW1hZ2ljOworCUpz b25UYWJsZVNjYW5TdGF0ZSAqKmNvbGV4cHJzY2FuczsKKwlKc29uVGFibGVTY2FuU3RhdGUgKnJv b3Q7Cit9CQkJSnNvblRhYmxlRXhlY0NvbnRleHQ7CisKIC8qIHN0cmljdC9sYXggZmxhZ3MgaXMg ZGVjb21wb3NlZCBpbnRvIGZvdXIgW3VuXXdyYXAvZXJyb3IgZmxhZ3MgKi8KICNkZWZpbmUganNw U3RyaWN0QWJzZW5jZU9mRXJyb3JzKGN4dCkJKCEoY3h0KS0+bGF4TW9kZSkKICNkZWZpbmUganNw QXV0b1Vud3JhcChjeHQpCQkJCSgoY3h0KS0+bGF4TW9kZSkKQEAgLTI1OCw2ICszMTYsNyBAQCBz dGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGdldEFycmF5SW5kZXgoSnNvblBhdGhFeGVjQ29udGV4 dCAqY3h0LAogCQkJCQkJCQkJCUpzb25QYXRoSXRlbSAqanNwLCBKc29uYlZhbHVlICpqYiwgaW50 MzIgKmluZGV4KTsKIHN0YXRpYyBKc29uQmFzZU9iamVjdEluZm8gc2V0QmFzZU9iamVjdChKc29u UGF0aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJSnNvbmJWYWx1ZSAqamJ2LCBpbnQzMiBp ZCk7CitzdGF0aWMgdm9pZCBKc29uVmFsdWVMaXN0Q2xlYXIoSnNvblZhbHVlTGlzdCAqanZsKTsK IHN0YXRpYyB2b2lkIEpzb25WYWx1ZUxpc3RBcHBlbmQoSnNvblZhbHVlTGlzdCAqanZsLCBKc29u YlZhbHVlICpqYnYpOwogc3RhdGljIGludAlKc29uVmFsdWVMaXN0TGVuZ3RoKGNvbnN0IEpzb25W YWx1ZUxpc3QgKmp2bCk7CiBzdGF0aWMgYm9vbCBKc29uVmFsdWVMaXN0SXNFbXB0eShKc29uVmFs dWVMaXN0ICpqdmwpOwpAQCAtMjc1LDYgKzMzNCwzMiBAQCBzdGF0aWMgSnNvbmJWYWx1ZSAqd3Jh cEl0ZW1zSW5BcnJheShjb25zdCBKc29uVmFsdWVMaXN0ICppdGVtcyk7CiBzdGF0aWMgaW50CWNv bXBhcmVEYXRldGltZShEYXR1bSB2YWwxLCBPaWQgdHlwaWQxLCBEYXR1bSB2YWwyLCBPaWQgdHlw aWQyLAogCQkJCQkJCWJvb2wgdXNlVHosIGJvb2wgKmNhc3RfZXJyb3IpOwogCisKK3N0YXRpYyBK c29uVGFibGVQbGFuU3RhdGUgKiBKc29uVGFibGVJbml0UGxhblN0YXRlKEpzb25UYWJsZUV4ZWND b250ZXh0ICogY3h0LAorCQkJCQkJCQkJCQkJICAgTm9kZSAqcGxhbiwKKwkJCQkJCQkJCQkJCSAg IEpzb25UYWJsZVBsYW5TdGF0ZSAqIHBhcmVudCk7CitzdGF0aWMgYm9vbCBKc29uVGFibGVQbGFu TmV4dFJvdyhKc29uVGFibGVQbGFuU3RhdGUgKiBzdGF0ZSk7CitzdGF0aWMgYm9vbCBKc29uVGFi bGVTY2FuTmV4dFJvdyhKc29uVGFibGVTY2FuU3RhdGUgKnNjYW4pOworCitzdGF0aWMgdm9pZCBK c29uVGFibGVJbml0T3BhcXVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUsIGludCBuYXR0cyk7 CitzdGF0aWMgdm9pZCBKc29uVGFibGVTZXREb2N1bWVudChUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0 YXRlLCBEYXR1bSB2YWx1ZSk7CitzdGF0aWMgYm9vbCBKc29uVGFibGVGZXRjaFJvdyhUYWJsZUZ1 bmNTY2FuU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyBEYXR1bSBKc29uVGFibGVHZXRWYWx1ZShUYWJs ZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBpbnQgY29sbnVtLAorCQkJCSAgT2lkIHR5cGlkLCBpbnQz MiB0eXBtb2QsIGJvb2wgKmlzbnVsbCk7CitzdGF0aWMgdm9pZCBKc29uVGFibGVEZXN0cm95T3Bh cXVlKFRhYmxlRnVuY1NjYW5TdGF0ZSAqc3RhdGUpOworCitjb25zdCBUYWJsZUZ1bmNSb3V0aW5l IEpzb25iVGFibGVSb3V0aW5lID0KK3sKKwlKc29uVGFibGVJbml0T3BhcXVlLAorCUpzb25UYWJs ZVNldERvY3VtZW50LAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCUpzb25UYWJsZUZldGNoUm93 LAorCUpzb25UYWJsZUdldFZhbHVlLAorCUpzb25UYWJsZURlc3Ryb3lPcGFxdWUKK307CisKIC8q KioqKioqKioqKioqKioqKiogVXNlciBpbnRlcmZhY2UgdG8gSnNvblBhdGggZXhlY3V0b3IgKioq KioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC0yNjYxLDYgKzI3NDYsMTMgQEAgc2V0QmFzZU9i amVjdChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsIEpzb25iVmFsdWUgKmpidiwgaW50MzIgaWQp CiAJcmV0dXJuIGJhc2VPYmplY3Q7CiB9CiAKK3N0YXRpYyB2b2lkCitKc29uVmFsdWVMaXN0Q2xl YXIoSnNvblZhbHVlTGlzdCAqanZsKQoreworCWp2bC0+c2luZ2xldG9uID0gTlVMTDsKKwlqdmwt Pmxpc3QgPSBOVUxMOworfQorCiBzdGF0aWMgdm9pZAogSnNvblZhbHVlTGlzdEFwcGVuZChKc29u VmFsdWVMaXN0ICpqdmwsIEpzb25iVmFsdWUgKmpidikKIHsKQEAgLTMxOTYsMyArMzI4OCw0NTgg QEAgSnNvblBhdGhWYWx1ZShEYXR1bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwgYm9v bCAqZXJyb3IsIExpc3QgKnZhcnMpCiAKIAlyZXR1cm4gcmVzOwogfQorCisvKioqKioqKioqKioq KioqKioqKioqKioqIEpTT05fVEFCTEUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworLyoKKyAqIFJldHVybnMgcHJpdmF0ZSBkYXRhIGZyb20gZXhlY3V0b3Igc3RhdGUu IEVuc3VyZSB2YWxpZGl0eSBieSBjaGVjayB3aXRoCisgKiBNQUdJQyBudW1iZXIuCisgKi8KK3N0 YXRpYyBpbmxpbmUgSnNvblRhYmxlRXhlY0NvbnRleHQgKgorR2V0SnNvblRhYmxlRXhlY0NvbnRl eHQoVGFibGVGdW5jU2NhblN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqZm5hbWUpCit7CisJSnNv blRhYmxlRXhlY0NvbnRleHQgKnJlc3VsdDsKKworCWlmICghSXNBKHN0YXRlLCBUYWJsZUZ1bmNT Y2FuU3RhdGUpKQorCQllbG9nKEVSUk9SLCAiJXMgY2FsbGVkIHdpdGggaW52YWxpZCBUYWJsZUZ1 bmNTY2FuU3RhdGUiLCBmbmFtZSk7CisJcmVzdWx0ID0gKEpzb25UYWJsZUV4ZWNDb250ZXh0ICop IHN0YXRlLT5vcGFxdWU7CisJaWYgKHJlc3VsdC0+bWFnaWMgIT0gSlNPTl9UQUJMRV9FWEVDX0NP TlRFWFRfTUFHSUMpCisJCWVsb2coRVJST1IsICIlcyBjYWxsZWQgd2l0aCBpbnZhbGlkIFRhYmxl RnVuY1NjYW5TdGF0ZSIsIGZuYW1lKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJlY3Vy c2l2ZWx5IGluaXRpYWxpemUgSlNPTl9UQUJMRSBzY2FuIC8gam9pbiBzdGF0ZSAqLworc3RhdGlj IEpzb25UYWJsZUpvaW5TdGF0ZSAqCitKc29uVGFibGVJbml0Sm9pblN0YXRlKEpzb25UYWJsZUV4 ZWNDb250ZXh0ICogY3h0LCBKc29uVGFibGVTaWJsaW5nICpwbGFuLAorCQkJCQkgICBKc29uVGFi bGVQbGFuU3RhdGUgKiBwYXJlbnQpCit7CisJSnNvblRhYmxlSm9pblN0YXRlICpqb2luID0gcGFs bG9jMChzaXplb2YoKmpvaW4pKTsKKworCWpvaW4tPnBsYW4udHlwZSA9IEpTT05fVEFCTEVfSk9J Tl9TVEFURTsKKwkvKiBwYXJlbnQgYW5kIG5lc3RlZCBub3Qgc2V0LiAqLworCisJam9pbi0+Y3Jv c3MgPSBwbGFuLT5jcm9zczsKKwlqb2luLT5sZWZ0ID0gSnNvblRhYmxlSW5pdFBsYW5TdGF0ZShj eHQsIHBsYW4tPmxhcmcsIHBhcmVudCk7CisJam9pbi0+cmlnaHQgPSBKc29uVGFibGVJbml0UGxh blN0YXRlKGN4dCwgcGxhbi0+cmFyZywgcGFyZW50KTsKKworCXJldHVybiBqb2luOworfQorCitz dGF0aWMgSnNvblRhYmxlU2NhblN0YXRlICoKK0pzb25UYWJsZUluaXRTY2FuU3RhdGUoSnNvblRh YmxlRXhlY0NvbnRleHQgKiBjeHQsCisJCQkJCSAgIEpzb25UYWJsZVBsYW4gKnBsYW4sCisJCQkJ CSAgIEpzb25UYWJsZVBsYW5TdGF0ZSAqcGFyZW50LAorCQkJCQkgICBMaXN0ICphcmdzLCBNZW1v cnlDb250ZXh0IG1jeHQpCit7CisJSnNvblRhYmxlU2NhblN0YXRlICpzY2FuID0gcGFsbG9jMChz aXplb2YoKnNjYW4pKTsKKwlpbnQJCQlpOworCisJc2Nhbi0+cGxhbi50eXBlID0gSlNPTl9UQUJM RV9TQ0FOX1NUQVRFOworCXNjYW4tPnBsYW4ucGFyZW50ID0gcGFyZW50OworCisJc2Nhbi0+b3V0 ZXJKb2luID0gcGxhbi0+b3V0ZXJKb2luOworCXNjYW4tPmVycm9yT25FcnJvciA9IHBsYW4tPmVy cm9yT25FcnJvcjsKKwlzY2FuLT5wYXRoID0gRGF0dW1HZXRKc29uUGF0aFAocGxhbi0+cGF0aC0+ dmFsdWUtPmNvbnN0dmFsdWUpOworCXNjYW4tPmFyZ3MgPSBhcmdzOworCXNjYW4tPm1jeHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUobWN4dCwgIkpzb25UYWJsZUV4ZWNDb250ZXh0IiwKKwkJCQkJ CQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoKKwkgKiBTZXQgYWZ0ZXIgc2V0 dGluZ3Mgc2Nhbi0+YXJncyBhbmQgc2Nhbi0+bWN4dCwgYmVjYXVzZSB0aGUgcmVjdXJzaXZlCisJ ICogY2FsbCB3YW50cyB0byB1c2UgdGhvc2UgdmFsdWVzLgorCSAqLworCXNjYW4tPnBsYW4ubmVz dGVkID0gcGxhbi0+Y2hpbGQgPworCQlKc29uVGFibGVJbml0UGxhblN0YXRlKGN4dCwgcGxhbi0+ Y2hpbGQsIChKc29uVGFibGVQbGFuU3RhdGUgKikgc2NhbikgOgorCQlOVUxMOworCisJc2Nhbi0+ Y3VycmVudCA9IFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwlzY2FuLT5jdXJyZW50SXNOdWxsID0g dHJ1ZTsKKworCWZvciAoaSA9IHBsYW4tPmNvbE1pbjsgaSA8PSBwbGFuLT5jb2xNYXg7IGkrKykK KwkJY3h0LT5jb2xleHByc2NhbnNbaV0gPSBzY2FuOworCisJcmV0dXJuIHNjYW47Cit9CisKKy8q IFJlY3Vyc2l2ZWx5IGluaXRpYWxpemUgSlNPTl9UQUJMRSBzY2FuIHN0YXRlICovCitzdGF0aWMg SnNvblRhYmxlUGxhblN0YXRlICoKK0pzb25UYWJsZUluaXRQbGFuU3RhdGUoSnNvblRhYmxlRXhl Y0NvbnRleHQgKiBjeHQsIE5vZGUgKnBsYW4sCisJCQkJCSAgIEpzb25UYWJsZVBsYW5TdGF0ZSAq IHBhcmVudCkKK3sKKwlKc29uVGFibGVQbGFuU3RhdGUgKnN0YXRlOworCisJaWYgKElzQShwbGFu LCBKc29uVGFibGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxpbmcgKmpvaW4gPSAoSnNv blRhYmxlU2libGluZyAqKSBwbGFuOworCisJCXN0YXRlID0gKEpzb25UYWJsZVBsYW5TdGF0ZSAq KQorCQkJSnNvblRhYmxlSW5pdEpvaW5TdGF0ZShjeHQsIGpvaW4sIHBhcmVudCk7CisJfQorCWVs c2UKKwl7CisJCUpzb25UYWJsZVBsYW4gKnNjYW4gPSBjYXN0Tm9kZShKc29uVGFibGVQbGFuLCBw bGFuKTsKKwkJSnNvblRhYmxlU2NhblN0YXRlICpwYXJlbnRfc2NhbiA9IChKc29uVGFibGVTY2Fu U3RhdGUgKikgcGFyZW50OworCisJCUFzc2VydChwYXJlbnRfc2Nhbik7CisJCXN0YXRlID0gKEpz b25UYWJsZVBsYW5TdGF0ZSAqKQorCQkJSnNvblRhYmxlSW5pdFNjYW5TdGF0ZShjeHQsIHNjYW4s IHBhcmVudCwgcGFyZW50X3NjYW4tPmFyZ3MsCisJCQkJCQkJCSAgIHBhcmVudF9zY2FuLT5tY3h0 KTsKKwl9CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBKc29uVGFibGVJbml0T3BhcXVl CisgKgkJRmlsbCBpbiBUYWJsZUZ1bmNTY2FuU3RhdGUtPm9wYXF1ZSBmb3IgSnNvblRhYmxlIHBy b2Nlc3NvcgorICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlSW5pdE9wYXF1ZShUYWJsZUZ1bmNT Y2FuU3RhdGUgKnN0YXRlLCBpbnQgbmF0dHMpCit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKmN4 dDsKKwlQbGFuU3RhdGUgICpwcyA9ICZzdGF0ZS0+c3MucHM7CisJVGFibGVGdW5jU2NhbiAqdGZz ID0gY2FzdE5vZGUoVGFibGVGdW5jU2NhbiwgcHMtPnBsYW4pOworCVRhYmxlRnVuYyAgKnRmID0g dGZzLT50YWJsZWZ1bmM7CisJSnNvblRhYmxlUGxhbiAqcm9vdCA9IGNhc3ROb2RlKEpzb25UYWJs ZVBsYW4sIHRmLT5wbGFuKTsKKwlKc29uRXhwciAgICpqZSA9IGNhc3ROb2RlKEpzb25FeHByLCB0 Zi0+ZG9jZXhwcik7CisJTGlzdAkgICAqYXJncyA9IE5JTDsKKworCWN4dCA9IHBhbGxvYzAoc2l6 ZW9mKEpzb25UYWJsZUV4ZWNDb250ZXh0KSk7CisJY3h0LT5tYWdpYyA9IEpTT05fVEFCTEVfRVhF Q19DT05URVhUX01BR0lDOworCisJaWYgKHN0YXRlLT5wYXNzaW5ndmFsZXhwcnMpCisJeworCQlM aXN0Q2VsbCAgICpleHBybGM7CisJCUxpc3RDZWxsICAgKm5hbWVsYzsKKworCQlBc3NlcnQobGlz dF9sZW5ndGgoc3RhdGUtPnBhc3Npbmd2YWxleHBycykgPT0KKwkJCSAgIGxpc3RfbGVuZ3RoKGpl LT5wYXNzaW5nX25hbWVzKSk7CisJCWZvcmJvdGgoZXhwcmxjLCBzdGF0ZS0+cGFzc2luZ3ZhbGV4 cHJzLAorCQkJCW5hbWVsYywgamUtPnBhc3NpbmdfbmFtZXMpCisJCXsKKwkJCUV4cHJTdGF0ZSAg KnN0YXRlID0gbGZpcnN0X25vZGUoRXhwclN0YXRlLCBleHBybGMpOworCQkJU3RyaW5nCSAgICpu YW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBuYW1lbGMpOworCQkJSnNvblBhdGhWYXJpYWJsZSAq dmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7CisKKwkJCXZhci0+bmFtZSA9IHBzdHJkdXAobmFt ZS0+c3ZhbCk7CisJCQl2YXItPnR5cGlkID0gZXhwclR5cGUoKE5vZGUgKikgc3RhdGUtPmV4cHIp OworCQkJdmFyLT50eXBtb2QgPSBleHByVHlwbW9kKChOb2RlICopIHN0YXRlLT5leHByKTsKKwor CQkJLyoKKwkJCSAqIEV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGFuZCBzYXZlIHRoZSB2YWx1ZSB0 byBiZSByZXR1cm5lZCBieQorCQkJICogR2V0SnNvblBhdGhWYXIoKS4KKwkJCSAqLworCQkJdmFy LT52YWx1ZSA9IEV4ZWNFdmFsRXhwcihzdGF0ZSwgcHMtPnBzX0V4cHJDb250ZXh0LAorCQkJCQkJ CQkJICAmdmFyLT5pc251bGwpOworCisJCQlhcmdzID0gbGFwcGVuZChhcmdzLCB2YXIpOworCQl9 CisJfQorCisJY3h0LT5jb2xleHByc2NhbnMgPSBwYWxsb2Moc2l6ZW9mKEpzb25UYWJsZVNjYW5T dGF0ZSAqKSAqCisJCQkJCQkJICAgbGlzdF9sZW5ndGgodGYtPmNvbHZhbGV4cHJzKSk7CisKKwlj eHQtPnJvb3QgPSBKc29uVGFibGVJbml0U2NhblN0YXRlKGN4dCwgcm9vdCwgTlVMTCwgYXJncywK KwkJCQkJCQkJCSAgIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlzdGF0ZS0+b3BhcXVlID0gY3h0 OworfQorCisvKiBSZXNldCBzY2FuIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGl0 ZW0gbGlzdCAqLworc3RhdGljIHZvaWQKK0pzb25UYWJsZVJlc2NhbihKc29uVGFibGVTY2FuU3Rh dGUgKnNjYW4pCit7CisJSnNvblZhbHVlTGlzdEluaXRJdGVyYXRvcigmc2Nhbi0+Zm91bmQsICZz Y2FuLT5pdGVyKTsKKwlzY2FuLT5jdXJyZW50ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCXNj YW4tPmN1cnJlbnRJc051bGwgPSB0cnVlOworCXNjYW4tPmFkdmFuY2VOZXN0ZWQgPSBmYWxzZTsK KwlzY2FuLT5vcmRpbmFsID0gMDsKK30KKworLyogUmVzZXQgY29udGV4dCBpdGVtIG9mIGEgc2Nh biwgZXhlY3V0ZSBKU09OIHBhdGggYW5kIHJlc2V0IGEgc2NhbiAqLworc3RhdGljIHZvaWQKK0pz b25UYWJsZVJlc2V0Q29udGV4dEl0ZW0oSnNvblRhYmxlU2NhblN0YXRlICpzY2FuLCBEYXR1bSBp dGVtKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUpzb25QYXRoRXhlY1Jlc3VsdCByZXM7 CisJSnNvbmIJICAgKmpzID0gKEpzb25iICopIERhdHVtR2V0SnNvbmJQKGl0ZW0pOworCisJSnNv blZhbHVlTGlzdENsZWFyKCZzY2FuLT5mb3VuZCk7CisKKwlNZW1vcnlDb250ZXh0UmVzZXRPbmx5 KHNjYW4tPm1jeHQpOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNjYW4tPm1j eHQpOworCisJcmVzID0gZXhlY3V0ZUpzb25QYXRoKHNjYW4tPnBhdGgsIHNjYW4tPmFyZ3MsCisJ CQkJCQkgIEdldEpzb25QYXRoVmFyLCBDb3VudEpzb25QYXRoVmFycywKKwkJCQkJCSAganMsIHNj YW4tPmVycm9yT25FcnJvciwgJnNjYW4tPmZvdW5kLAorCQkJCQkJICBmYWxzZSAvKiBGSVhNRSAq LyApOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwlpZiAoanBlcklzRXJy b3IocmVzKSkKKwl7CisJCUFzc2VydCghc2Nhbi0+ZXJyb3JPbkVycm9yKTsKKwkJSnNvblZhbHVl TGlzdENsZWFyKCZzY2FuLT5mb3VuZCk7CS8qIEVNUFRZIE9OIEVSUk9SIGNhc2UgKi8KKwl9CisK KwlKc29uVGFibGVSZXNjYW4oc2Nhbik7Cit9CisKKy8qCisgKiBKc29uVGFibGVTZXREb2N1bWVu dAorICoJCUluc3RhbGwgdGhlIGlucHV0IGRvY3VtZW50CisgKi8KK3N0YXRpYyB2b2lkCitKc29u VGFibGVTZXREb2N1bWVudChUYWJsZUZ1bmNTY2FuU3RhdGUgKnN0YXRlLCBEYXR1bSB2YWx1ZSkK K3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0ID0KKwkJR2V0SnNvblRhYmxlRXhlY0NvbnRl eHQoc3RhdGUsICJKc29uVGFibGVTZXREb2N1bWVudCIpOworCisJSnNvblRhYmxlUmVzZXRDb250 ZXh0SXRlbShjeHQtPnJvb3QsIHZhbHVlKTsKK30KKworLyogUmVjdXJzaXZlbHkgcmVzZXQgc2Nh biBhbmQgaXRzIGNoaWxkIG5vZGVzICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlUmVzY2FuUmVj dXJzaXZlKEpzb25UYWJsZVBsYW5TdGF0ZSAqIHN0YXRlKQoreworCWlmIChzdGF0ZS0+dHlwZSA9 PSBKU09OX1RBQkxFX0pPSU5fU1RBVEUpCisJeworCQlKc29uVGFibGVKb2luU3RhdGUgKmpvaW4g PSAoSnNvblRhYmxlSm9pblN0YXRlICopIHN0YXRlOworCisJCUpzb25UYWJsZVJlc2NhblJlY3Vy c2l2ZShqb2luLT5sZWZ0KTsKKwkJSnNvblRhYmxlUmVzY2FuUmVjdXJzaXZlKGpvaW4tPnJpZ2h0 KTsKKwkJam9pbi0+YWR2YW5jZVJpZ2h0ID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCUpzb25U YWJsZVNjYW5TdGF0ZSAqc2NhbiA9IChKc29uVGFibGVTY2FuU3RhdGUgKikgc3RhdGU7CisKKwkJ QXNzZXJ0KHN0YXRlLT50eXBlID09IEpTT05fVEFCTEVfU0NBTl9TVEFURSk7CisJCUpzb25UYWJs ZVJlc2NhbihzY2FuKTsKKwkJaWYgKHNjYW4tPnBsYW4ubmVzdGVkKQorCQkJSnNvblRhYmxlUmVz Y2FuUmVjdXJzaXZlKHNjYW4tPnBsYW4ubmVzdGVkKTsKKwl9Cit9CisKKy8qCisgKiBGZXRjaCBu ZXh0IHJvdyBmcm9tIGEgY3Jvc3MvdW5pb24gam9pbmVkIHNjYW4uCisgKgorICogUmV0dXJucyBm YWxzZSBhdCB0aGUgZW5kIG9mIGEgc2NhbiwgdHJ1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBi b29sCitKc29uVGFibGVQbGFuTmV4dFJvdyhKc29uVGFibGVQbGFuU3RhdGUgKiBzdGF0ZSkKK3sK KwlKc29uVGFibGVKb2luU3RhdGUgKmpvaW47CisKKwlpZiAoc3RhdGUtPnR5cGUgPT0gSlNPTl9U QUJMRV9TQ0FOX1NUQVRFKQorCQlyZXR1cm4gSnNvblRhYmxlU2Nhbk5leHRSb3coKEpzb25UYWJs ZVNjYW5TdGF0ZSAqKSBzdGF0ZSk7CisKKwlqb2luID0gKEpzb25UYWJsZUpvaW5TdGF0ZSAqKSBz dGF0ZTsKKwlpZiAoam9pbi0+YWR2YW5jZVJpZ2h0KQorCXsKKwkJLyogZmV0Y2ggbmV4dCBpbm5l ciByb3cgKi8KKwkJaWYgKEpzb25UYWJsZVBsYW5OZXh0Um93KGpvaW4tPnJpZ2h0KSkKKwkJCXJl dHVybiB0cnVlOworCisJCS8qIGlubmVyIHJvd3MgYXJlIGV4aGF1c3RlZCAqLworCQlpZiAoam9p bi0+Y3Jvc3MpCisJCQlqb2luLT5hZHZhbmNlUmlnaHQgPSBmYWxzZTsgLyogbmV4dCBvdXRlciBy b3cgKi8KKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOwkJLyogZW5kIG9mIHNjYW4gKi8KKwl9CisK Kwl3aGlsZSAoIWpvaW4tPmFkdmFuY2VSaWdodCkKKwl7CisJCS8qIGZldGNoIG5leHQgb3V0ZXIg cm93ICovCisJCWJvb2wJCW1vcmUgPSBKc29uVGFibGVQbGFuTmV4dFJvdyhqb2luLT5sZWZ0KTsK KworCQlpZiAoam9pbi0+Y3Jvc3MpCisJCXsKKwkJCWlmICghbW9yZSkKKwkJCQlyZXR1cm4gZmFs c2U7CS8qIGVuZCBvZiBzY2FuICovCisKKwkJCUpzb25UYWJsZVJlc2NhblJlY3Vyc2l2ZShqb2lu LT5yaWdodCk7CisKKwkJCWlmICghSnNvblRhYmxlUGxhbk5leHRSb3coam9pbi0+cmlnaHQpKQor CQkJCWNvbnRpbnVlOwkJLyogbmV4dCBvdXRlciByb3cgKi8KKworCQkJam9pbi0+YWR2YW5jZVJp Z2h0ID0gdHJ1ZTsJLyogbmV4dCBpbm5lciByb3cgKi8KKwkJfQorCQllbHNlIGlmICghbW9yZSkK KwkJeworCQkJaWYgKCFKc29uVGFibGVQbGFuTmV4dFJvdyhqb2luLT5yaWdodCkpCisJCQkJcmV0 dXJuIGZhbHNlOwkvKiBlbmQgb2Ygc2NhbiAqLworCisJCQlqb2luLT5hZHZhbmNlUmlnaHQgPSB0 cnVlOwkvKiBuZXh0IGlubmVyIHJvdyAqLworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJu IHRydWU7Cit9CisKKy8qIFJlY3Vyc2l2ZWx5IHNldCAncmVzZXQnIGZsYWcgb2Ygc2NhbiBhbmQg aXRzIGNoaWxkIG5vZGVzICovCitzdGF0aWMgdm9pZAorSnNvblRhYmxlUGxhblJlc2V0KEpzb25U YWJsZVBsYW5TdGF0ZSAqIHN0YXRlKQoreworCWlmIChzdGF0ZS0+dHlwZSA9PSBKU09OX1RBQkxF X0pPSU5fU1RBVEUpCisJeworCQlKc29uVGFibGVKb2luU3RhdGUgKmpvaW4gPSAoSnNvblRhYmxl Sm9pblN0YXRlICopIHN0YXRlOworCisJCUpzb25UYWJsZVBsYW5SZXNldChqb2luLT5sZWZ0KTsK KwkJSnNvblRhYmxlUGxhblJlc2V0KGpvaW4tPnJpZ2h0KTsKKwkJam9pbi0+YWR2YW5jZVJpZ2h0 ID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCUpzb25UYWJsZVNjYW5TdGF0ZSAqc2NhbjsKKwor CQlBc3NlcnQoc3RhdGUtPnR5cGUgPT0gSlNPTl9UQUJMRV9TQ0FOX1NUQVRFKTsKKwkJc2NhbiA9 IChKc29uVGFibGVTY2FuU3RhdGUgKikgc3RhdGU7CisJCXNjYW4tPnJlc2V0ID0gdHJ1ZTsKKwkJ c2Nhbi0+YWR2YW5jZU5lc3RlZCA9IGZhbHNlOworCisJCWlmIChzY2FuLT5wbGFuLm5lc3RlZCkK KwkJCUpzb25UYWJsZVBsYW5SZXNldChzY2FuLT5wbGFuLm5lc3RlZCk7CisJfQorfQorCisvKgor ICogRmV0Y2ggbmV4dCByb3cgZnJvbSBhIHNpbXBsZSBzY2FuIHdpdGggb3V0ZXIvaW5uZXIgam9p bmVkIG5lc3RlZCBzdWJzY2Fucy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGF0IHRoZSBlbmQgb2Yg YSBzY2FuLCB0cnVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK0pzb25UYWJsZVNjYW5O ZXh0Um93KEpzb25UYWJsZVNjYW5TdGF0ZSAqc2NhbikKK3sKKwkvKiByZXNldCBjb250ZXh0IGl0 ZW0gaWYgcmVxdWVzdGVkICovCisJaWYgKHNjYW4tPnJlc2V0KQorCXsKKwkJSnNvblRhYmxlU2Nh blN0YXRlICpwYXJlbnRfc2NhbiA9CisJCQkoSnNvblRhYmxlU2NhblN0YXRlICopIHNjYW4tPnBs YW4ucGFyZW50OworCisJCUFzc2VydChwYXJlbnRfc2NhbiAmJiAhcGFyZW50X3NjYW4tPmN1cnJl bnRJc051bGwpOworCQlKc29uVGFibGVSZXNldENvbnRleHRJdGVtKHNjYW4sIHBhcmVudF9zY2Fu LT5jdXJyZW50KTsKKwkJc2Nhbi0+cmVzZXQgPSBmYWxzZTsKKwl9CisKKwlpZiAoc2Nhbi0+YWR2 YW5jZU5lc3RlZCkKKwl7CisJCS8qIGZldGNoIG5leHQgbmVzdGVkIHJvdyAqLworCQlzY2FuLT5h ZHZhbmNlTmVzdGVkID0gSnNvblRhYmxlUGxhbk5leHRSb3coc2Nhbi0+cGxhbi5uZXN0ZWQpOwor CisJCWlmIChzY2FuLT5hZHZhbmNlTmVzdGVkKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJZm9y ICg7OykKKwl7CisJCS8qIGZldGNoIG5leHQgcm93ICovCisJCUpzb25iVmFsdWUgKmpidiA9IEpz b25WYWx1ZUxpc3ROZXh0KCZzY2FuLT5mb3VuZCwgJnNjYW4tPml0ZXIpOworCQlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKKworCQlpZiAoIWpidikKKwkJeworCQkJc2Nhbi0+Y3VycmVudCA9IFBvaW50 ZXJHZXREYXR1bShOVUxMKTsKKwkJCXNjYW4tPmN1cnJlbnRJc051bGwgPSB0cnVlOworCQkJcmV0 dXJuIGZhbHNlOwkJLyogZW5kIG9mIHNjYW4gKi8KKwkJfQorCisJCS8qIHNldCBjdXJyZW50IHJv dyBpdGVtICovCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzY2FuLT5tY3h0KTsK KwkJc2Nhbi0+Y3VycmVudCA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGpidikp OworCQlzY2FuLT5jdXJyZW50SXNOdWxsID0gZmFsc2U7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworCisJCXNjYW4tPm9yZGluYWwrKzsKKworCQlpZiAoIXNjYW4tPnBsYW4ubmVz dGVkKQorCQkJYnJlYWs7CisKKwkJSnNvblRhYmxlUGxhblJlc2V0KHNjYW4tPnBsYW4ubmVzdGVk KTsKKworCQlzY2FuLT5hZHZhbmNlTmVzdGVkID0gSnNvblRhYmxlUGxhbk5leHRSb3coc2Nhbi0+ cGxhbi5uZXN0ZWQpOworCisJCWlmIChzY2FuLT5hZHZhbmNlTmVzdGVkIHx8IHNjYW4tPm91dGVy Sm9pbikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogSnNvblRh YmxlRmV0Y2hSb3cKKyAqCQlQcmVwYXJlIHRoZSBuZXh0ICJjdXJyZW50IiB0dXBsZSBmb3IgdXBj b21pbmcgR2V0VmFsdWUgY2FsbHMuCisgKgkJUmV0dXJucyBmYWxzZSBpZiBubyBtb3JlIHJvd3Mg Y2FuIGJlIHJldHVybmVkLgorICovCitzdGF0aWMgYm9vbAorSnNvblRhYmxlRmV0Y2hSb3coVGFi bGVGdW5jU2NhblN0YXRlICpzdGF0ZSkKK3sKKwlKc29uVGFibGVFeGVjQ29udGV4dCAqY3h0ID0K KwkJR2V0SnNvblRhYmxlRXhlY0NvbnRleHQoc3RhdGUsICJKc29uVGFibGVGZXRjaFJvdyIpOwor CisJcmV0dXJuIEpzb25UYWJsZVNjYW5OZXh0Um93KGN4dC0+cm9vdCk7Cit9CisKKy8qCisgKiBK c29uVGFibGVHZXRWYWx1ZQorICoJCVJldHVybiB0aGUgdmFsdWUgZm9yIGNvbHVtbiBudW1iZXIg J2NvbG51bScgZm9yIHRoZSBjdXJyZW50IHJvdy4KKyAqCisgKiBUaGlzIGxlYWtzIG1lbW9yeSwg c28gYmUgc3VyZSB0byByZXNldCBvZnRlbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzCisgKiBj YWxsZWQuCisgKi8KK3N0YXRpYyBEYXR1bQorSnNvblRhYmxlR2V0VmFsdWUoVGFibGVGdW5jU2Nh blN0YXRlICpzdGF0ZSwgaW50IGNvbG51bSwKKwkJCQkgIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9k LCBib29sICppc251bGwpCit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKmN4dCA9CisJCUdldEpz b25UYWJsZUV4ZWNDb250ZXh0KHN0YXRlLCAiSnNvblRhYmxlR2V0VmFsdWUiKTsKKwlFeHByQ29u dGV4dCAqZWNvbnRleHQgPSBzdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisJRXhwclN0YXRl ICAqZXN0YXRlID0gbGlzdF9udGgoc3RhdGUtPmNvbHZhbGV4cHJzLCBjb2xudW0pOworCUpzb25U YWJsZVNjYW5TdGF0ZSAqc2NhbiA9IGN4dC0+Y29sZXhwcnNjYW5zW2NvbG51bV07CisJRGF0dW0J CXJlc3VsdDsKKworCWlmIChzY2FuLT5jdXJyZW50SXNOdWxsKQkvKiBOVUxMIGZyb20gb3V0ZXIv dW5pb24gam9pbiAqLworCXsKKwkJcmVzdWx0ID0gKERhdHVtKSAwOworCQkqaXNudWxsID0gdHJ1 ZTsKKwl9CisJZWxzZSBpZiAoZXN0YXRlKQkJCS8qIHJlZ3VsYXIgY29sdW1uICovCisJeworCQlE YXR1bQkJc2F2ZWRfY2FzZVZhbHVlID0gZWNvbnRleHQtPmNhc2VWYWx1ZV9kYXR1bTsKKwkJYm9v bAkJc2F2ZWRfY2FzZUlzTnVsbCA9IGVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxsOworCisJCS8q IFBhc3MgdGhlIHZhbHVlIGZvciBDYXNlVGVzdEV4cHIgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiBj b2xleHByICovCisJCWVjb250ZXh0LT5jYXNlVmFsdWVfZGF0dW0gPSBzY2FuLT5jdXJyZW50Owor CQllY29udGV4dC0+Y2FzZVZhbHVlX2lzTnVsbCA9IGZhbHNlOworCisJCXJlc3VsdCA9IEV4ZWNF dmFsRXhwcihlc3RhdGUsIGVjb250ZXh0LCBpc251bGwpOworCisJCWVjb250ZXh0LT5jYXNlVmFs dWVfZGF0dW0gPSBzYXZlZF9jYXNlVmFsdWU7CisJCWVjb250ZXh0LT5jYXNlVmFsdWVfaXNOdWxs ID0gc2F2ZWRfY2FzZUlzTnVsbDsKKwl9CisJZWxzZQorCXsKKwkJcmVzdWx0ID0gSW50MzJHZXRE YXR1bShzY2FuLT5vcmRpbmFsKTsJLyogb3JkaW5hbGl0eSBjb2x1bW4gKi8KKwkJKmlzbnVsbCA9 IGZhbHNlOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBKc29uVGFibGVEZXN0 cm95T3BhcXVlCisgKi8KK3N0YXRpYyB2b2lkCitKc29uVGFibGVEZXN0cm95T3BhcXVlKFRhYmxl RnVuY1NjYW5TdGF0ZSAqc3RhdGUpCit7CisJSnNvblRhYmxlRXhlY0NvbnRleHQgKmN4dCA9CisJ CUdldEpzb25UYWJsZUV4ZWNDb250ZXh0KHN0YXRlLCAiSnNvblRhYmxlRGVzdHJveU9wYXF1ZSIp OworCisJLyogbm90IHZhbGlkIGFueW1vcmUgKi8KKwljeHQtPm1hZ2ljID0gMDsKKworCXN0YXRl LT5vcGFxdWUgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDI3MzUz NDg0MTYuLmEyN2M3YTM1MGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTUyMiw2 ICs1MjIsOCBAQCBzdGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBz dGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9u cyk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9wYXRoX3NwZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJICAgYm9vbCBzaG93aW1wbGljaXQpOworc3Rh dGljIHZvaWQgZ2V0X2pzb25fdGFibGVfY29sdW1ucyhUYWJsZUZ1bmMgKnRmLCBKc29uVGFibGVQ bGFuICpub2RlLAorCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hv d2ltcGxpY2l0KTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIi IDogIk9OTFkgIikKIApAQCAtODYyNyw3ICs4NjI5LDggQEAgZ2V0X2pzb25fYmVoYXZpb3IoSnNv bkJlaGF2aW9yICpiZWhhdmlvciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogLyoKICAqIGdl dF9qc29uX2V4cHJfb3B0aW9ucwogICoKLSAqIFBhcnNlIGJhY2sgY29tbW9uIG9wdGlvbnMgZm9y IEpTT05fUVVFUlksIEpTT05fVkFMVUUsIEpTT05fRVhJU1RTLgorICogUGFyc2UgYmFjayBjb21t b24gb3B0aW9ucyBmb3IgSlNPTl9RVUVSWSwgSlNPTl9WQUxVRSwgSlNPTl9FWElTVFMgYW5kCisg KiBKU09OX1RBQkxFIGNvbHVtbnMuCiAgKi8KIHN0YXRpYyB2b2lkCiBnZXRfanNvbl9leHByX29w dGlvbnMoSnNvbkV4cHIgKmpzZXhwciwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LApAQCAtOTg3 NCw2ICs5ODc3LDkgQEAgZ2V0X3J1bGVfZXhwcihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQsCiAJCQkJCWNhc2UgSlNPTl9WQUxVRV9PUDoKIAkJCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiSlNPTl9WQUxVRSgiKTsKIAkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0 OgorCQkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgSnNvbkV4cHIgdHlwZTogJWQiLCBqZXhw ci0+b3ApOworCQkJCQkJYnJlYWs7CiAJCQkJfQogCiAJCQkJZ2V0X3J1bGVfZXhwcihqZXhwci0+ Zm9ybWF0dGVkX2V4cHIsIGNvbnRleHQsIHNob3dpbXBsaWNpdCk7CkBAIC0xMTI0MCwxNiArMTEy NDYsMTQgQEAgZ2V0X3N1YmxpbmtfZXhwcihTdWJMaW5rICpzdWJsaW5rLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpCiAKIAogLyogLS0tLS0tLS0tLQotICogZ2V0X3RhYmxlZnVuYwkJCS0gUGFy c2UgYmFjayBhIHRhYmxlIGZ1bmN0aW9uCisgKiBnZXRfeG1sdGFibGUJCQktIFBhcnNlIGJhY2sg YSBYTUxUQUJMRSBmdW5jdGlvbgogICogLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZAotZ2V0 X3RhYmxlZnVuYyhUYWJsZUZ1bmMgKnRmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wg c2hvd2ltcGxpY2l0KQorZ2V0X3htbHRhYmxlKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCwgYm9vbCBzaG93aW1wbGljaXQpCiB7CiAJU3RyaW5nSW5mbwlidWYgPSBjb250 ZXh0LT5idWY7CiAKLQkvKiBYTUxUQUJMRSBpcyB0aGUgb25seSBleGlzdGluZyBpbXBsZW1lbnRh dGlvbi4gICovCi0KIAlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlhNTFRBQkxFKCIpOwog CiAJaWYgKHRmLT5uc191cmlzICE9IE5JTCkKQEAgLTExMzQwLDYgKzExMzQ0LDI3MSBAQCBnZXRf dGFibGVmdW5jKFRhYmxlRnVuYyAqdGYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwgYm9vbCBz aG93aW1wbGljaXQpCiAJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOwogfQogCisvKgor ICogZ2V0X2pzb25fbmVzdGVkX2NvbHVtbnMgLSBQYXJzZSBiYWNrIG5lc3RlZCBKU09OX1RBQkxF IGNvbHVtbnMKKyAqLworc3RhdGljIHZvaWQKK2dldF9qc29uX3RhYmxlX25lc3RlZF9jb2x1bW5z KFRhYmxlRnVuYyAqdGYsIE5vZGUgKm5vZGUsCisJCQkJCQkJICBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0LAorCQkJCQkJCSAgYm9vbCBuZWVkY29tbWEpCit7CisJ aWYgKElzQShub2RlLCBKc29uVGFibGVTaWJsaW5nKSkKKwl7CisJCUpzb25UYWJsZVNpYmxpbmcg Km4gPSAoSnNvblRhYmxlU2libGluZyAqKSBub2RlOworCisJCWdldF9qc29uX3RhYmxlX25lc3Rl ZF9jb2x1bW5zKHRmLCBuLT5sYXJnLCBjb250ZXh0LCBzaG93aW1wbGljaXQsCisJCQkJCQkJCQkg IG5lZWRjb21tYSk7CisJCWdldF9qc29uX3RhYmxlX25lc3RlZF9jb2x1bW5zKHRmLCBuLT5yYXJn LCBjb250ZXh0LCBzaG93aW1wbGljaXQsIHRydWUpOworCX0KKwllbHNlCisJeworCQlKc29uVGFi bGVQbGFuICpuID0gY2FzdE5vZGUoSnNvblRhYmxlUGxhbiwgbm9kZSk7CisKKwkJaWYgKG5lZWRj b21tYSkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJywnKTsKKworCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCWFwcGVuZENvbnRleHRL ZXl3b3JkKGNvbnRleHQsICJORVNURUQgUEFUSCAiLCAwLCAwLCAwKTsKKwkJZ2V0X2NvbnN0X2V4 cHIobi0+cGF0aC0+dmFsdWUsIGNvbnRleHQsIC0xKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhjb250 ZXh0LT5idWYsICIgQVMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKG4tPnBhdGgtPm5hbWUpKTsKKwkJ Z2V0X2pzb25fdGFibGVfY29sdW1ucyh0ZiwgbiwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwl9 Cit9CisKKy8qCisgKiBnZXRfanNvbl90YWJsZV9wbGFuIC0gUGFyc2UgYmFjayBhIEpTT05fVEFC TEUgcGxhbgorICovCitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfcGxhbihUYWJsZUZ1bmMg KnRmLCBOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCisJCQkJCWJvb2wgcGFy ZW50aGVzaXplKQoreworCWlmIChwYXJlbnRoZXNpemUpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJygnKTsKKworCWlmIChJc0Eobm9kZSwgSnNvblRhYmxlU2libGluZykp CisJeworCQlKc29uVGFibGVTaWJsaW5nICpuID0gKEpzb25UYWJsZVNpYmxpbmcgKikgbm9kZTsK KworCQlnZXRfanNvbl90YWJsZV9wbGFuKHRmLCBuLT5sYXJnLCBjb250ZXh0LAorCQkJCQkJCUlz QShuLT5sYXJnLCBKc29uVGFibGVTaWJsaW5nKSB8fAorCQkJCQkJCWNhc3ROb2RlKEpzb25UYWJs ZVBsYW4sIG4tPmxhcmcpLT5jaGlsZCk7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250 ZXh0LT5idWYsIG4tPmNyb3NzID8gIiBDUk9TUyAiIDogIiBVTklPTiAiKTsKKworCQlnZXRfanNv bl90YWJsZV9wbGFuKHRmLCBuLT5yYXJnLCBjb250ZXh0LAorCQkJCQkJCUlzQShuLT5yYXJnLCBK c29uVGFibGVTaWJsaW5nKSB8fAorCQkJCQkJCWNhc3ROb2RlKEpzb25UYWJsZVBsYW4sIG4tPnJh cmcpLT5jaGlsZCk7CisJfQorCWVsc2UKKwl7CisJCUpzb25UYWJsZVBsYW4gKm4gPSBjYXN0Tm9k ZShKc29uVGFibGVQbGFuLCBub2RlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRl eHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihuLT5wYXRoLT5uYW1lKSk7CisKKwkJaWYgKG4tPmNo aWxkKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwKKwkJCQkJ CQkJICAgbi0+b3V0ZXJKb2luID8gIiBPVVRFUiAiIDogIiBJTk5FUiAiKTsKKwkJCWdldF9qc29u X3RhYmxlX3BsYW4odGYsIG4tPmNoaWxkLCBjb250ZXh0LAorCQkJCQkJCQlJc0Eobi0+Y2hpbGQs IEpzb25UYWJsZVNpYmxpbmcpKTsKKwkJfQorCX0KKworCWlmIChwYXJlbnRoZXNpemUpCisJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIGdldF9q c29uX3RhYmxlX2NvbHVtbnMgLSBQYXJzZSBiYWNrIEpTT05fVEFCTEUgY29sdW1ucworICovCitz dGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGVfY29sdW1ucyhUYWJsZUZ1bmMgKnRmLCBKc29uVGFi bGVQbGFuICpwbGFuLAorCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hv d2ltcGxpY2l0KQoreworCVN0cmluZ0luZm8JYnVmID0gY29udGV4dC0+YnVmOworCUpzb25FeHBy ICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIHRmLT5kb2NleHByKTsKKwlMaXN0Q2VsbCAg ICpsY19jb2xuYW1lOworCUxpc3RDZWxsICAgKmxjX2NvbHR5cGU7CisJTGlzdENlbGwgICAqbGNf Y29sdHlwbW9kOworCUxpc3RDZWxsICAgKmxjX2NvbHZhbGV4cHI7CisJaW50CQkJY29sbnVtID0g MDsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwlhcHBlbmRDb250ZXh0S2V5 d29yZChjb250ZXh0LCAiQ09MVU1OUyAoIiwgMCwgMCwgMCk7CisKKwlpZiAoUFJFVFRZX0lOREVO VChjb250ZXh0KSkKKwkJY29udGV4dC0+aW5kZW50TGV2ZWwgKz0gUFJFVFRZSU5ERU5UX1ZBUjsK KworCWZvcmZvdXIobGNfY29sbmFtZSwgdGYtPmNvbG5hbWVzLAorCQkJbGNfY29sdHlwZSwgdGYt PmNvbHR5cGVzLAorCQkJbGNfY29sdHlwbW9kLCB0Zi0+Y29sdHlwbW9kcywKKwkJCWxjX2NvbHZh bGV4cHIsIHRmLT5jb2x2YWxleHBycykKKwl7CisJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwo bGZpcnN0KGxjX2NvbG5hbWUpKTsKKwkJSnNvbkV4cHIgICAqY29sZXhwcjsKKwkJT2lkCQkJdHlw aWQ7CisJCWludDMyCQl0eXBtb2Q7CisJCWJvb2wJCW9yZGluYWxpdHk7CisJCUpzb25CZWhhdmlv clR5cGUgZGVmYXVsdF9iZWhhdmlvcjsKKworCQl0eXBpZCA9IGxmaXJzdF9vaWQobGNfY29sdHlw ZSk7CisJCXR5cG1vZCA9IGxmaXJzdF9pbnQobGNfY29sdHlwbW9kKTsKKwkJY29sZXhwciA9IGNh c3ROb2RlKEpzb25FeHByLCBsZmlyc3QobGNfY29sdmFsZXhwcikpOworCisJCWlmIChjb2xudW0g PCBwbGFuLT5jb2xNaW4pCisJCXsKKwkJCWNvbG51bSsrOworCQkJY29udGludWU7CisJCX0KKwor CQlpZiAoY29sbnVtID4gcGxhbi0+Y29sTWF4KQorCQkJYnJlYWs7CisKKwkJaWYgKGNvbG51bSA+ IHBsYW4tPmNvbE1pbikKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwor CQljb2xudW0rKzsKKworCQlvcmRpbmFsaXR5ID0gIWNvbGV4cHI7CisKKwkJYXBwZW5kQ29udGV4 dEtleXdvcmQoY29udGV4dCwgIiIsIDAsIDAsIDApOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJXMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKGNvbG5hbWUpLAorCQkJCQkJIG9yZGluYWxpdHkg PyAiRk9SIE9SRElOQUxJVFkiIDoKKwkJCQkJCSBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QodHlw aWQsIHR5cG1vZCkpOworCQlpZiAob3JkaW5hbGl0eSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChj b2xleHByLT5vcCA9PSBKU09OX0VYSVNUU19PUCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICIgRVhJU1RTIik7CisJCQlkZWZhdWx0X2JlaGF2aW9yID0gSlNPTl9CRUhBVklP Ul9GQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChjb2xleHByLT5vcCA9PSBKU09OX1FV RVJZX09QKQorCQkJeworCQkJCWNoYXIJCXR5cGNhdGVnb3J5OworCQkJCWJvb2wJCXR5cGlzcHJl ZmVycmVkOworCisJCQkJZ2V0X3R5cGVfY2F0ZWdvcnlfcHJlZmVycmVkKHR5cGlkLCAmdHlwY2F0 ZWdvcnksICZ0eXBpc3ByZWZlcnJlZCk7CisKKwkJCQlpZiAodHlwY2F0ZWdvcnkgPT0gVFlQQ0FU RUdPUllfU1RSSU5HKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJCQkJ CQkgICBjb2xleHByLT5mb3JtYXQtPmZvcm1hdF90eXBlID09IEpTX0ZPUk1BVF9KU09OQiA/CisJ CQkJCQkJCQkJICAgIiBGT1JNQVQgSlNPTkIiIDogIiBGT1JNQVQgSlNPTiIpOworCQkJfQorCisJ CQlkZWZhdWx0X2JlaGF2aW9yID0gSlNPTl9CRUhBVklPUl9OVUxMOworCQl9CisKKwkJaWYgKGpl eHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJCWRlZmF1bHRf YmVoYXZpb3IgPSBKU09OX0JFSEFWSU9SX0VSUk9SOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCAiIFBBVEggIik7CisKKwkJZ2V0X2pzb25fcGF0aF9zcGVjKGNvbGV4cHItPnBhdGhf c3BlYywgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKworCQlnZXRfanNvbl9leHByX29wdGlvbnMo Y29sZXhwciwgY29udGV4dCwgZGVmYXVsdF9iZWhhdmlvcik7CisJfQorCisJaWYgKHBsYW4tPmNo aWxkKQorCQlnZXRfanNvbl90YWJsZV9uZXN0ZWRfY29sdW1ucyh0ZiwgcGxhbi0+Y2hpbGQsIGNv bnRleHQsIHNob3dpbXBsaWNpdCwKKwkJCQkJCQkJCSAgcGxhbi0+Y29sTWF4ID49IHBsYW4tPmNv bE1pbik7CisKKwlpZiAoUFJFVFRZX0lOREVOVChjb250ZXh0KSkKKwkJY29udGV4dC0+aW5kZW50 TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsKKworCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRl eHQsICIpIiwgMCwgMCwgMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0KKyAqIGdldF9qc29uX3RhYmxl CQkJLSBQYXJzZSBiYWNrIGEgSlNPTl9UQUJMRSBmdW5jdGlvbgorICogLS0tLS0tLS0tLQorICov CitzdGF0aWMgdm9pZAorZ2V0X2pzb25fdGFibGUoVGFibGVGdW5jICp0ZiwgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0LCBib29sIHNob3dpbXBsaWNpdCkKK3sKKwlTdHJpbmdJbmZvCWJ1ZiA9IGNv bnRleHQtPmJ1ZjsKKwlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCB0Zi0+ ZG9jZXhwcik7CisJSnNvblRhYmxlUGxhbiAqcm9vdCA9IGNhc3ROb2RlKEpzb25UYWJsZVBsYW4s IHRmLT5wbGFuKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSlNPTl9UQUJMRSgi KTsKKworCWlmIChQUkVUVFlfSU5ERU5UKGNvbnRleHQpKQorCQljb250ZXh0LT5pbmRlbnRMZXZl bCArPSBQUkVUVFlJTkRFTlRfVkFSOworCisJYXBwZW5kQ29udGV4dEtleXdvcmQoY29udGV4dCwg IiIsIDAsIDAsIDApOworCisJZ2V0X3J1bGVfZXhwcihqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIGNv bnRleHQsIHNob3dpbXBsaWNpdCk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwg Iik7CisKKwlnZXRfY29uc3RfZXhwcihyb290LT5wYXRoLT52YWx1ZSwgY29udGV4dCwgLTEpOwor CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQVMgJXMiLCBxdW90ZV9pZGVudGlmaWVyKHJvb3Qt PnBhdGgtPm5hbWUpKTsKKworCWlmIChqZXhwci0+cGFzc2luZ192YWx1ZXMpCisJeworCQlMaXN0 Q2VsbCAgICpsYzEsCisJCQkJICAgKmxjMjsKKwkJYm9vbAkJbmVlZGNvbW1hID0gZmFsc2U7CisK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCQlhcHBlbmRDb250ZXh0S2V5d29y ZChjb250ZXh0LCAiUEFTU0lORyAiLCAwLCAwLCAwKTsKKworCQlpZiAoUFJFVFRZX0lOREVOVChj b250ZXh0KSkKKwkJCWNvbnRleHQtPmluZGVudExldmVsICs9IFBSRVRUWUlOREVOVF9WQVI7CisK KwkJZm9yYm90aChsYzEsIGpleHByLT5wYXNzaW5nX25hbWVzLAorCQkJCWxjMiwgamV4cHItPnBh c3NpbmdfdmFsdWVzKQorCQl7CisJCQlpZiAobmVlZGNvbW1hKQorCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJCW5lZWRjb21tYSA9IHRydWU7CisKKwkJCWFwcGVuZENv bnRleHRLZXl3b3JkKGNvbnRleHQsICIiLCAwLCAwLCAwKTsKKworCQkJZ2V0X3J1bGVfZXhwcigo Tm9kZSAqKSBsZmlyc3QobGMyKSwgY29udGV4dCwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIgQVMgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKChsZmlyc3Rfbm9kZShT dHJpbmcsIGxjMSkpLT5zdmFsKQorCQkJCSk7CisJCX0KKworCQlpZiAoUFJFVFRZX0lOREVOVChj b250ZXh0KSkKKwkJCWNvbnRleHQtPmluZGVudExldmVsIC09IFBSRVRUWUlOREVOVF9WQVI7CisJ fQorCisJZ2V0X2pzb25fdGFibGVfY29sdW1ucyh0Ziwgcm9vdCwgY29udGV4dCwgc2hvd2ltcGxp Y2l0KTsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwlhcHBlbmRDb250ZXh0 S2V5d29yZChjb250ZXh0LCAiUExBTiAiLCAwLCAwLCAwKTsKKwlnZXRfanNvbl90YWJsZV9wbGFu KHRmLCAoTm9kZSAqKSByb290LCBjb250ZXh0LCB0cnVlKTsKKworCWlmIChqZXhwci0+b25fZXJy b3ItPmJ0eXBlICE9IEpTT05fQkVIQVZJT1JfRU1QVFkpCisJCWdldF9qc29uX2JlaGF2aW9yKGpl eHByLT5vbl9lcnJvciwgY29udGV4dCwgIkVSUk9SIik7CisKKwlpZiAoUFJFVFRZX0lOREVOVChj b250ZXh0KSkKKwkJY29udGV4dC0+aW5kZW50TGV2ZWwgLT0gUFJFVFRZSU5ERU5UX1ZBUjsKKwor CWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICIpIiwgMCwgMCwgMCk7Cit9CisKKy8qIC0t LS0tLS0tLS0KKyAqIGdldF90YWJsZWZ1bmMJCQktIFBhcnNlIGJhY2sgYSB0YWJsZSBmdW5jdGlv bgorICogLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorZ2V0X3RhYmxlZnVuYyhUYWJsZUZ1 bmMgKnRmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsIGJvb2wgc2hvd2ltcGxpY2l0KQorewor CS8qIFhNTFRBQkxFIGFuZCBKU09OX1RBQkxFIGFyZSB0aGUgb25seSBleGlzdGluZyBpbXBsZW1l bnRhdGlvbnMuICAqLworCisJaWYgKHRmLT5mdW5jdHlwZSA9PSBURlRfWE1MVEFCTEUpCisJCWdl dF94bWx0YWJsZSh0ZiwgY29udGV4dCwgc2hvd2ltcGxpY2l0KTsKKwllbHNlIGlmICh0Zi0+ZnVu Y3R5cGUgPT0gVEZUX0pTT05fVEFCTEUpCisJCWdldF9qc29uX3RhYmxlKHRmLCBjb250ZXh0LCBz aG93aW1wbGljaXQpOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBnZXRfZnJvbV9jbGF1c2UJCQkt IFBhcnNlIGJhY2sgYSBGUk9NIGNsYXVzZQogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMmU4 ZGYyMzAxZi4uZmJiYTc5Zjk0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE5NjgsNiArMTk2 OCw4IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlRnVuY1NjYW5TdGF0ZQogCUV4cHJTdGF0ZSAgKnJv d2V4cHI7CQkvKiBzdGF0ZSBmb3Igcm93LWdlbmVyYXRpbmcgZXhwcmVzc2lvbiAqLwogCUxpc3QJ ICAgKmNvbGV4cHJzOwkJLyogc3RhdGUgZm9yIGNvbHVtbi1nZW5lcmF0aW5nIGV4cHJlc3Npb24g Ki8KIAlMaXN0CSAgICpjb2xkZWZleHByczsJLyogc3RhdGUgZm9yIGNvbHVtbiBkZWZhdWx0IGV4 cHJlc3Npb25zICovCisJTGlzdAkgICAqY29sdmFsZXhwcnM7CS8qIHN0YXRlIGZvciBjb2x1bW4g dmFsdWUgZXhwcmVzc2lvbiAqLworCUxpc3QJICAgKnBhc3Npbmd2YWxleHByczsJLyogc3RhdGUg Zm9yIFBBU1NJTkcgYXJndW1lbnQgZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKm5zX25hbWVzOwkJ Lyogc2FtZSBhcyBUYWJsZUZ1bmMubnNfbmFtZXMgKi8KIAlMaXN0CSAgICpuc191cmlzOwkJLyog bGlzdCBvZiBzdGF0ZXMgb2YgbmFtZXNwYWNlIFVSSSBleHBycyAqLwogCUJpdG1hcHNldCAgKm5v dG51bGxzOwkJLyogbnVsbGFiaWxpdHkgZmxhZyBmb3IgZWFjaCBvdXRwdXQgY29sdW1uICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL21ha2VmdW5jcy5oCmluZGV4IGE5NmZkNjJkN2YuLjY0ZDVlNDU2YmEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL21h a2VmdW5jcy5oCkBAIC0xMDAsNiArMTAwLDcgQEAgZXh0ZXJuIEluZGV4SW5mbyAqbWFrZUluZGV4 SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLAogCQkJCQkJCQli b29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJpemluZyk7 CiAKK2V4dGVybiBOb2RlICptYWtlU3RyaW5nQ29uc3QoY2hhciAqc3RyLCBpbnQgbG9jYXRpb24p OwogZXh0ZXJuIERlZkVsZW0gKm1ha2VEZWZFbGVtKGNoYXIgKm5hbWUsIE5vZGUgKmFyZywgaW50 IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxlbUV4dGVuZGVkKGNoYXIgKm5h bWVTcGFjZSwgY2hhciAqbmFtZSwgTm9kZSAqYXJnLAogCQkJCQkJCQkJRGVmRWxlbUFjdGlvbiBk ZWZhY3Rpb24sIGludCBsb2NhdGlvbik7CkBAIC0xMTQsNiArMTE1LDE0IEBAIGV4dGVybiBKc29u VmFsdWVFeHByICptYWtlSnNvblZhbHVlRXhwcihFeHByICpyYXdfZXhwciwgRXhwciAqZm9ybWF0 dGVkX2V4cHIsCiAJCQkJCQkJCQkJSnNvbkZvcm1hdCAqZm9ybWF0KTsKIGV4dGVybiBKc29uQmVo YXZpb3IgKm1ha2VKc29uQmVoYXZpb3IoSnNvbkJlaGF2aW9yVHlwZSB0eXBlLCBOb2RlICpleHBy LAogCQkJCSBKc29uQ29lcmNpb24gKmNvZXJjaW9uLCBpbnQgbG9jYXRpb24pOworZXh0ZXJuIEpz b25UYWJsZVBhdGggKm1ha2VKc29uVGFibGVQYXRoKENvbnN0ICpwYXRodmFsdWUsIGNoYXIgKnBh dGhuYW1lKTsKK2V4dGVybiBOb2RlICptYWtlSnNvblRhYmxlUGF0aFNwZWMoY2hhciAqc3RyaW5n LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgICBpbnQgc3RyaW5nX2xvY2F0aW9uLCBpbnQgbmFtZV9s b2NhdGlvbik7CitleHRlcm4gTm9kZSAqbWFrZUpzb25UYWJsZURlZmF1bHRQbGFuKEpzb25UYWJs ZVBsYW5Kb2luVHlwZSBqb2luX3R5cGUsCisJCQkJCQkJCQkgIGludCBsb2NhdGlvbik7CitleHRl cm4gTm9kZSAqbWFrZUpzb25UYWJsZVNpbXBsZVBsYW4oY2hhciAqcGF0aG5hbWUsIGludCBsb2Nh dGlvbik7CitleHRlcm4gTm9kZSAqbWFrZUpzb25UYWJsZUpvaW5lZFBsYW4oSnNvblRhYmxlUGxh bkpvaW5UeXBlIHR5cGUsCisJCQkJCQkJCQkgTm9kZSAqcGxhbjEsIE5vZGUgKnBsYW4yLCBpbnQg bG9jYXRpb24pOwogZXh0ZXJuIE5vZGUgKm1ha2VKc29uS2V5VmFsdWUoTm9kZSAqa2V5LCBOb2Rl ICp2YWx1ZSk7CiBleHRlcm4gTm9kZSAqbWFrZUpzb25Jc1ByZWRpY2F0ZShOb2RlICpleHByLCBK c29uRm9ybWF0ICpmb3JtYXQsCiAJCQkJCQkJCSBKc29uVmFsdWVUeXBlIGl0ZW1fdHlwZSwgYm9v bCB1bmlxdWVfa2V5cywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAwMTg0Yzc2Y2U2Li43NGMw NmE1ZWQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNzQxLDYgKzE3NDEsNyBAQCB0eXBl ZGVmIHN0cnVjdCBKc29uRnVuY0V4cHIKIAlKc29uRXhwck9wCW9wOwkJCQkvKiBleHByZXNzaW9u IHR5cGUgKi8KIAlKc29uVmFsdWVFeHByICpjb250ZXh0X2l0ZW07CS8qIGNvbnRleHQgaXRlbSBl eHByZXNzaW9uICovCiAJTm9kZQkgICAqcGF0aHNwZWM7CQkvKiBKU09OIHBhdGggc3BlY2lmaWNh dGlvbiBleHByZXNzaW9uICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkvKiBwYXRoIG5hbWUsIGlm IGFueSAqLwogCUxpc3QJICAgKnBhc3Npbmc7CQkvKiBsaXN0IG9mIFBBU1NJTkcgY2xhdXNlIGFy Z3VtZW50cywgaWYgYW55ICovCiAJSnNvbk91dHB1dCAqb3V0cHV0OwkJCS8qIG91dHB1dCBjbGF1 c2UsIGlmIHNwZWNpZmllZCAqLwogCUpzb25CZWhhdmlvciAqb25fZW1wdHk7CQkvKiBPTiBFTVBU WSBiZWhhdmlvciAqLwpAQCAtMTc1MCw2ICsxNzUxLDExNCBAQCB0eXBlZGVmIHN0cnVjdCBKc29u RnVuY0V4cHIKIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1 bmtub3duICovCiB9IEpzb25GdW5jRXhwcjsKIAorLyoKKyAqIEpzb25UYWJsZVBhdGhTcGVjCisg KgkJdW50cmFuc2Zvcm1lZCBzcGVjaWZpY2F0aW9uIG9mIEpTT04gcGF0aCBleHByZXNzaW9uIHdp dGggYW4gb3B0aW9uYWwKKyAqCQluYW1lCisgKi8KK3R5cGVkZWYgc3RydWN0IEpzb25UYWJsZVBh dGhTcGVjCit7CisJTm9kZVRhZwkJdHlwZTsKKworCU5vZGUJICAgKnN0cmluZzsKKwljaGFyCSAg ICpuYW1lOworCWludAkJCW5hbWVfbG9jYXRpb247CisJaW50CQkJbG9jYXRpb247CS8qIGxvY2F0 aW9uIG9mICdzdHJpbmcnICovCit9IEpzb25UYWJsZVBhdGhTcGVjOworCisvKgorICogSnNvblRh YmxlQ29sdW1uVHlwZSAtCisgKgkJZW51bWVyYXRpb24gb2YgSlNPTl9UQUJMRSBjb2x1bW4gdHlw ZXMKKyAqLwordHlwZWRlZiBlbnVtIEpzb25UYWJsZUNvbHVtblR5cGUKK3sKKwlKVENfRk9SX09S RElOQUxJVFksCisJSlRDX1JFR1VMQVIsCisJSlRDX0VYSVNUUywKKwlKVENfRk9STUFUVEVELAor CUpUQ19ORVNURUQsCit9IEpzb25UYWJsZUNvbHVtblR5cGU7CisKKy8qCisgKiBKc29uVGFibGVD b2x1bW4gLQorICoJCXVudHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9UQUJMRSBj b2x1bW4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSnNvblRhYmxlQ29sdW1uCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlKc29uVGFibGVDb2x1bW5UeXBlIGNvbHR5cGU7CS8qIGNvbHVtbiB0eXBlICovCisJ Y2hhcgkgICAqbmFtZTsJCQkvKiBjb2x1bW4gbmFtZSAqLworCVR5cGVOYW1lICAgKnR5cGVOYW1l OwkJLyogY29sdW1uIHR5cGUgbmFtZSAqLworCUpzb25UYWJsZVBhdGhTcGVjICpwYXRoc3BlYzsg LyogSlNPTiBwYXRoIHNwZWNpZmljYXRpb24gKi8KKwlKc29uRm9ybWF0ICpmb3JtYXQ7CQkJLyog SlNPTiBmb3JtYXQgY2xhdXNlLCBpZiBzcGVjaWZpZWQgKi8KKwlKc29uV3JhcHBlciB3cmFwcGVy OwkJLyogV1JBUFBFUiBiZWhhdmlvciBmb3IgZm9ybWF0dGVkIGNvbHVtbnMgKi8KKwlKc29uUXVv dGVzCXF1b3RlczsJCQkvKiBvbWl0IG9yIGtlZXAgcXVvdGVzIG9uIHNjYWxhciBzdHJpbmdzPyAq LworCUxpc3QJICAgKmNvbHVtbnM7CQkvKiBuZXN0ZWQgY29sdW1ucyAqLworCUpzb25CZWhhdmlv ciAqb25fZW1wdHk7CQkvKiBPTiBFTVBUWSBiZWhhdmlvciAqLworCUpzb25CZWhhdmlvciAqb25f ZXJyb3I7CQkvKiBPTiBFUlJPUiBiZWhhdmlvciAqLworCWludAkJCWxvY2F0aW9uOwkJLyogdG9r ZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNvblRhYmxlQ29sdW1uOworCisv KgorICogSnNvblRhYmxlUGxhblR5cGUgLQorICoJCWZsYWdzIGZvciBKU09OX1RBQkxFIHBsYW4g bm9kZSB0eXBlcyByZXByZXNlbnRhdGlvbgorICovCit0eXBlZGVmIGVudW0gSnNvblRhYmxlUGxh blR5cGUKK3sKKwlKU1RQX0RFRkFVTFQsCisJSlNUUF9TSU1QTEUsCisJSlNUUF9KT0lORUQsCit9 IEpzb25UYWJsZVBsYW5UeXBlOworCisvKgorICogSnNvblRhYmxlUGxhbkpvaW5UeXBlIC0KKyAq CQlKU09OX1RBQkxFIGpvaW4gdHlwZXMgZm9yIEpTVFBfSk9JTkVEIHBsYW5zCisgKi8KK3R5cGVk ZWYgZW51bSBKc29uVGFibGVQbGFuSm9pblR5cGUKK3sKKwlKU1RQX0pPSU5fSU5ORVIsCisJSlNU UF9KT0lOX09VVEVSLAorCUpTVFBfSk9JTl9DUk9TUywKKwlKU1RQX0pPSU5fVU5JT04sCit9IEpz b25UYWJsZVBsYW5Kb2luVHlwZTsKKworLyoKKyAqIEpzb25UYWJsZVBsYW5TcGVjIC0KKyAqCQl1 bnRyYW5zZm9ybWVkIHJlcHJlc2VudGF0aW9uIG9mIEpTT05fVEFCTEUncyBQTEFOIGNsYXVzZQor ICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQbGFuU3BlYworeworCU5vZGVUYWcJCXR5cGU7 CisKKwlKc29uVGFibGVQbGFuVHlwZSBwbGFuX3R5cGU7CS8qIHBsYW4gdHlwZSAqLworCUpzb25U YWJsZVBsYW5Kb2luVHlwZSBqb2luX3R5cGU7CS8qIGpvaW4gdHlwZSAoZm9yIGpvaW5lZCBwbGFu IG9ubHkpICovCisJY2hhcgkgICAqcGF0aG5hbWU7CQkvKiBwYXRoIG5hbWUgKGZvciBzaW1wbGUg cGxhbiBvbmx5KSAqLworCisJLyogRm9yIGpvaW5lZCBwbGFucyAqLworCXN0cnVjdCBKc29uVGFi bGVQbGFuU3BlYyAqcGxhbjE7CQkvKiBmaXJzdCBqb2luZWQgcGxhbiAqLworCXN0cnVjdCBKc29u VGFibGVQbGFuU3BlYyAqcGxhbjI7CQkvKiBzZWNvbmQgam9pbmVkIHBsYW4gKi8KKworCWludAkJ CWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KK30gSnNv blRhYmxlUGxhblNwZWM7CisKKy8qCisgKiBKc29uVGFibGUgLQorICoJCXVudHJhbnNmb3JtZWQg cmVwcmVzZW50YXRpb24gb2YgSlNPTl9UQUJMRQorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFi bGUKK3sKKwlOb2RlVGFnCQl0eXBlOworCUpzb25WYWx1ZUV4cHIgKmNvbnRleHRfaXRlbTsJLyog Y29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KKwlKc29uVGFibGVQYXRoU3BlYyAqcGF0aHNwZWM7 CS8qIEpTT04gcGF0aCBzcGVjaWZpY2F0aW9uICovCisJTGlzdAkgICAqcGFzc2luZzsJCS8qIGxp c3Qgb2YgUEFTU0lORyBjbGF1c2UgYXJndW1lbnRzLCBpZiBhbnkgKi8KKwlMaXN0CSAgICpjb2x1 bW5zOwkJLyogbGlzdCBvZiBKc29uVGFibGVDb2x1bW4gKi8KKwlKc29uVGFibGVQbGFuU3BlYyAq cGxhbnNwZWM7IC8qIGpvaW4gcGxhbiwgaWYgc3BlY2lmaWVkICovCisJSnNvbkJlaGF2aW9yICAq b25fZXJyb3I7CS8qIE9OIEVSUk9SIGJlaGF2aW9yICovCisJQWxpYXMJICAgKmFsaWFzOwkJCS8q IHRhYmxlIGFsaWFzIGluIEZST00gY2xhdXNlICovCisJYm9vbAkJbGF0ZXJhbDsJCS8qIGRvZXMg aXQgaGF2ZSBMQVRFUkFMIHByZWZpeD8gKi8KKwlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxv Y2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCit9IEpzb25UYWJsZTsKKwogLyoKICAqIEpzb25L ZXlWYWx1ZSAtCiAgKgkJdW50cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OIG9iamVj dCBrZXktdmFsdWUgcGFpciBmb3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1u b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggZmU5ZGZiYjAyYS4u ZDdjZmUzNGI4ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTk0LDggKzk0LDE0IEBAIHR5cGVk ZWYgc3RydWN0IFJhbmdlVmFyCiAJaW50CQkJbG9jYXRpb247CiB9IFJhbmdlVmFyOwogCit0eXBl ZGVmIGVudW0gVGFibGVGdW5jVHlwZQoreworCVRGVF9YTUxUQUJMRSwKKwlURlRfSlNPTl9UQUJM RSwKK30gVGFibGVGdW5jVHlwZTsKKwogLyoKLSAqIFRhYmxlRnVuYyAtIG5vZGUgZm9yIGEgdGFi bGUgZnVuY3Rpb24sIHN1Y2ggYXMgWE1MVEFCTEUuCisgKiBUYWJsZUZ1bmMgLSBub2RlIGZvciBh IHRhYmxlIGZ1bmN0aW9uLCBzdWNoIGFzIFhNTFRBQkxFIG9yIEpTT05fVEFCTEUuCiAgKgogICog RW50cmllcyBpbiB0aGUgbnNfbmFtZXMgbGlzdCBhcmUgZWl0aGVyIFN0cmluZyBub2RlcyBjb250 YWluaW5nCiAgKiBsaXRlcmFsIG5hbWVzcGFjZSBuYW1lcywgb3IgTlVMTCBwb2ludGVycyB0byBy ZXByZXNlbnQgREVGQVVMVC4KQEAgLTEwMyw2ICsxMDksOCBAQCB0eXBlZGVmIHN0cnVjdCBSYW5n ZVZhcgogdHlwZWRlZiBzdHJ1Y3QgVGFibGVGdW5jCiB7CiAJTm9kZVRhZwkJdHlwZTsKKwkvKiBY TUxUQUJMRSBvciBKU09OX1RBQkxFICovCisJVGFibGVGdW5jVHlwZSBmdW5jdHlwZTsKIAkvKiBs aXN0IG9mIG5hbWVzcGFjZSBVUkkgZXhwcmVzc2lvbnMgKi8KIAlMaXN0CSAgICpuc191cmlzIHBn X25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiBsaXN0IG9mIG5hbWVzcGFjZSBu YW1lcyBvciBOVUxMICovCkBAIC0xMjMsOCArMTMxLDE0IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxl RnVuYwogCUxpc3QJICAgKmNvbGV4cHJzOwogCS8qIGxpc3Qgb2YgY29sdW1uIGRlZmF1bHQgZXhw cmVzc2lvbnMgKi8KIAlMaXN0CSAgICpjb2xkZWZleHBycyBwZ19ub2RlX2F0dHIocXVlcnlfanVt YmxlX2lnbm9yZSk7CisJLyogbGlzdCBvZiBjb2x1bW4gdmFsdWUgZXhwcmVzc2lvbnMgKi8KKwlM aXN0CSAgICpjb2x2YWxleHBycyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CisJ LyogbGlzdCBvZiBQQVNTSU5HIGFyZ3VtZW50IGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqcGFz c2luZ3ZhbGV4cHJzIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiBudWxs YWJpbGl0eSBmbGFnIGZvciBlYWNoIG91dHB1dCBjb2x1bW4gKi8KIAlCaXRtYXBzZXQgICpub3Ru dWxscyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CisJLyogSlNPTl9UQUJMRSBw bGFuICovCisJTm9kZQkgICAqcGxhbiBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7 CiAJLyogY291bnRzIGZyb20gMDsgLTEgaWYgbm9uZSBzcGVjaWZpZWQgKi8KIAlpbnQJCQlvcmRp bmFsaXR5Y29sIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiB0b2tlbiBs b2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwpAQCAtMTU2MSw2ICsxNTc1LDcgQEAgdHlwZWRl ZiBlbnVtIEpzb25FeHByT3AKIAlKU09OX1ZBTFVFX09QLAkJCQkvKiBKU09OX1ZBTFVFKCkgKi8K IAlKU09OX1FVRVJZX09QLAkJCQkvKiBKU09OX1FVRVJZKCkgKi8KIAlKU09OX0VYSVNUU19PUCwJ CQkJLyogSlNPTl9FWElTVFMoKSAqLworCUpTT05fVEFCTEVfT1AsCQkJCS8qIEpTT05fVEFCTEUo KSAqLwogfSBKc29uRXhwck9wOwogCiAvKgpAQCAtMTg0NSw2ICsxODYwLDQ5IEBAIHR5cGVkZWYg c3RydWN0IEpzb25FeHByCiAJaW50CQkJbG9jYXRpb247CiB9IEpzb25FeHByOwogCisvKgorICog SnNvblRhYmxlUGF0aAorICoJCUEgSlNPTiBwYXRoIGV4cHJlc3Npb24gdG8gYmUgY29tcHV0ZWQg YXMgcGFydCBvZiBldmFsdWF0aW5nCisgKgkJYSBKU09OX1RBQkxFIHBsYW4gbm9kZQorICovCit0 eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQYXRoCit7CisJTm9kZVRhZwkJdHlwZTsKKworCUNvbnN0 CSAgICp2YWx1ZTsKKwljaGFyCSAgICpuYW1lOworfQkJCUpzb25UYWJsZVBhdGg7CisKKy8qCisg KiBKc29uVGFibGVTcGVjIC0KKyAqCQl0cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBhIEpT T05fVEFCTEUgcGxhbgorICovCit0eXBlZGVmIHN0cnVjdCBKc29uVGFibGVQbGFuCit7CisJTm9k ZVRhZwkJdHlwZTsKKworCUpzb25UYWJsZVBhdGggKnBhdGg7CisJTm9kZQkgICAqY2hpbGQ7CQkJ LyogbmVzdGVkIGNvbHVtbnMsIGlmIGFueSAqLworCWJvb2wJCW91dGVySm9pbjsJCS8qIG91dGVy IG9yIGlubmVyIGpvaW4gZm9yIG5lc3RlZCBjb2x1bW5zPyAqLworCWludAkJCWNvbE1pbjsJCQkv KiBtaW4gY29sdW1uIGluZGV4IGluIHRoZSByZXN1bHRpbmcgY29sdW1uCisJCQkJCQkJCSAqIGxp c3QgKi8KKwlpbnQJCQljb2xNYXg7CQkJLyogbWF4IGNvbHVtbiBpbmRleCBpbiB0aGUgcmVzdWx0 aW5nIGNvbHVtbgorCQkJCQkJCQkgKiBsaXN0ICovCisJYm9vbAkJZXJyb3JPbkVycm9yOwkvKiBF UlJPUi9FTVBUWSBPTiBFUlJPUiBiZWhhdmlvciAqLworfSBKc29uVGFibGVQbGFuOworCisvKgor ICogSnNvblRhYmxlU2libGluZyAtCisgKgkJdHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2Yg am9pbmVkIHNpYmxpbmcgSlNPTl9UQUJMRSBwbGFuIG5vZGUKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg SnNvblRhYmxlU2libGluZworeworCU5vZGVUYWcJCXR5cGU7CisJTm9kZQkgICAqbGFyZzsJCQkv KiBsZWZ0IGpvaW4gbm9kZSAqLworCU5vZGUJICAgKnJhcmc7CQkJLyogcmlnaHQgam9pbiBub2Rl ICovCisJYm9vbAkJY3Jvc3M7CQkJLyogY3Jvc3Mgb3IgdW5pb24gam9pbj8gKi8KK30gSnNvblRh YmxlU2libGluZzsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICogTnVsbFRlc3QKICAqCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKaW5kZXggOTRlMWNiNGRjZS4uZTJiYmVlYjIwOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcGFyc2VyL2t3bGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApA QCAtMjQyLDYgKzI0Miw3IEBAIFBHX0tFWVdPUkQoImpzb25fb2JqZWN0YWdnIiwgSlNPTl9PQkpF Q1RBR0csIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX3F1 ZXJ5IiwgSlNPTl9RVUVSWSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImpzb25fc2NhbGFyIiwgSlNPTl9TQ0FMQVIsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJqc29uX3NlcmlhbGl6ZSIsIEpTT05fU0VSSUFMSVpFLCBDT0xfTkFN RV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgianNvbl90YWJsZSIsIEpTT05fVEFC TEUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJqc29uX3ZhbHVl IiwgSlNPTl9WQUxVRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQo ImtlZXAiLCBLRUVQLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJrZXkiLCBLRVksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTI4NCw2ICsy ODUsNyBAQCBQR19LRVlXT1JEKCJuYW1lcyIsIE5BTUVTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuYXRpb25hbCIsIE5BVElPTkFMLCBDT0xfTkFNRV9LRVlX T1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgibmF0dXJhbCIsIE5BVFVSQUwsIFRZUEVfRlVO Q19OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuY2hhciIsIE5DSEFSLCBD T0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgibmVzdGVkIiwgTkVTVEVE LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuZXciLCBORVcs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoIm5leHQiLCBORVhU LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJuZmMiLCBORkMs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTMzNCw3ICszMzYsOSBAQCBQR19L RVlXT1JEKCJwYXJ0aWFsIiwgUEFSVElBTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQogUEdfS0VZV09SRCgicGFydGl0aW9uIiwgUEFSVElUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXNzaW5nIiwgUEFTU0lORywgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicGFzc3dvcmQiLCBQQVNTV09SRCwgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgicGF0aCIsIFBBVEgsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBsYWNpbmciLCBQTEFD SU5HLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgicGxhbiIsIFBM QU4sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBsYW5zIiwg UExBTlMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBvbGlj eSIsIFBPTElDWSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi cG9zaXRpb24iLCBQT1NJVElPTiwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9jbGF1c2UuaCBiL3NyYy9pbmNsdWRlL3Bh cnNlci9wYXJzZV9jbGF1c2UuaAppbmRleCAzODI5ZGIwZmM0Li5lNzE3NjJiMTBjIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgKKysrIGIvc3JjL2luY2x1ZGUv cGFyc2VyL3BhcnNlX2NsYXVzZS5oCkBAIC01MSw0ICs1MSw3IEBAIGV4dGVybiBMaXN0ICphZGRU YXJnZXRUb1NvcnRMaXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVGFyZ2V0RW50cnkgKnRsZSwKIGV4 dGVybiBJbmRleCBhc3NpZ25Tb3J0R3JvdXBSZWYoVGFyZ2V0RW50cnkgKnRsZSwgTGlzdCAqdGxp c3QpOwogZXh0ZXJuIGJvb2wgdGFyZ2V0SXNJblNvcnRMaXN0KFRhcmdldEVudHJ5ICp0bGUsIE9p ZCBzb3J0b3AsIExpc3QgKnNvcnRMaXN0KTsKIAorLyogZnVuY3Rpb25zIGluIHBhcnNlX2pzb250 YWJsZS5jICovCitleHRlcm4gUGFyc2VOYW1lc3BhY2VJdGVtICp0cmFuc2Zvcm1Kc29uVGFibGUo UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVGFibGUgKmp0KTsKKwogI2VuZGlmCQkJCQkJCS8qIFBB UlNFX0NMQVVTRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAppbmRleCA4OTdkZTIxYTUxLi44MzhkYzhl MGZlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL2pzb25wYXRoLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgSlNPTlBB VEhfSAogCiAjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL3RhYmxlZnVuYy5o IgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMu aCIKICNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgpAQCAtMjkyLDQgKzI5Myw2IEBAIGV4dGVybiBE YXR1bSBKc29uUGF0aFF1ZXJ5KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIEpzb25XcmFwcGVyIHdy YXBwZXIsCiBleHRlcm4gSnNvbmJWYWx1ZSAqSnNvblBhdGhWYWx1ZShEYXR1bSBqYiwgSnNvblBh dGggKmpwLCBib29sICplbXB0eSwKIAkJCQkJCQkJIGJvb2wgKmVycm9yLCBMaXN0ICp2YXJzKTsK IAorZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IFRhYmxlRnVuY1JvdXRpbmUgSnNvbmJUYWJsZVJv dXRpbmU7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2Vj cGdfc2NoZWR1bGUgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZQppbmRl eCAzOTgxNGEzOWMxLi4yMjA4ZjQwZDY3IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9lY3Bn L3Rlc3QvZWNwZ19zY2hlZHVsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19z Y2hlZHVsZQpAQCAtNTEsNiArNTEsNyBAQCB0ZXN0OiBzcWwvb2xkZXhlYwogdGVzdDogc3FsL3F1 b3RlCiB0ZXN0OiBzcWwvc2hvdwogdGVzdDogc3FsL3NxbGpzb24KK3Rlc3Q6IHNxbC9zcWxqc29u X2pzb250YWJsZQogdGVzdDogc3FsL2luc3VwZAogdGVzdDogc3FsL3BhcnNlcgogdGVzdDogc3Fs L3ByZXBhcmVhcwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVk L3NxbC1zcWxqc29uX2pzb250YWJsZS5jIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVj dGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjBiYmY0NDQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLmMKQEAgLTAsMCArMSwxMzIg QEAKKy8qIFByb2Nlc3NlZCBieSBlY3BnIChyZWdyZXNzaW9uIG1vZGUpICovCisvKiBUaGVzZSBp bmNsdWRlIGZpbGVzIGFyZSBhZGRlZCBieSB0aGUgcHJlcHJvY2Vzc29yICovCisjaW5jbHVkZSA8 ZWNwZ2xpYi5oPgorI2luY2x1ZGUgPGVjcGdlcnJuby5oPgorI2luY2x1ZGUgPHNxbGNhLmg+Cisv KiBFbmQgb2YgYXV0b21hdGljIGluY2x1ZGUgc2VjdGlvbiAqLworI2RlZmluZSBFQ1BHZGVidWco WCxZKSBFQ1BHZGVidWcoKFgpKzEwMCwoWSkpCisKKyNsaW5lIDEgInNxbGpzb25fanNvbnRhYmxl LnBnYyIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisKKyNsaW5lIDEgInNxbGNhLmgiCisjaWZuZGVm IFBPU1RHUkVTX1NRTENBX0gKKyNkZWZpbmUgUE9TVEdSRVNfU1FMQ0FfSAorCisjaWZuZGVmIFBH RExMSU1QT1JUCisjaWYgIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKKyNk ZWZpbmUgUEdETExJTVBPUlQgX19kZWNsc3BlYyAoZGxsaW1wb3J0KQorI2Vsc2UKKyNkZWZpbmUg UEdETExJTVBPUlQKKyNlbmRpZgkJCQkJCQkvKiBfX0NZR1dJTl9fICovCisjZW5kaWYJCQkJCQkJ LyogUEdETExJTVBPUlQgKi8KKworI2RlZmluZSBTUUxFUlJNQ19MRU4JMTUwCisKKyNpZmRlZiBf X2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKK3N0cnVjdCBzcWxjYV90Cit7CisJ Y2hhcgkJc3FsY2FpZFs4XTsKKwlsb25nCQlzcWxhYmM7CisJbG9uZwkJc3FsY29kZTsKKwlzdHJ1 Y3QKKwl7CisJCWludAkJCXNxbGVycm1sOworCQljaGFyCQlzcWxlcnJtY1tTUUxFUlJNQ19MRU5d OworCX0JCQlzcWxlcnJtOworCWNoYXIJCXNxbGVycnBbOF07CisJbG9uZwkJc3FsZXJyZFs2XTsK KwkvKiBFbGVtZW50IDA6IGVtcHR5CQkJCQkJKi8KKwkvKiAxOiBPSUQgb2YgcHJvY2Vzc2VkIHR1 cGxlIGlmIGFwcGxpY2FibGUJCQkqLworCS8qIDI6IG51bWJlciBvZiByb3dzIHByb2Nlc3NlZAkJ CQkqLworCS8qIGFmdGVyIGFuIElOU0VSVCwgVVBEQVRFIG9yCQkJCSovCisJLyogREVMRVRFIHN0 YXRlbWVudAkJCQkJKi8KKwkvKiAzOiBlbXB0eQkJCQkJCSovCisJLyogNDogZW1wdHkJCQkJCQkq LworCS8qIDU6IGVtcHR5CQkJCQkJKi8KKwljaGFyCQlzcWx3YXJuWzhdOworCS8qIEVsZW1lbnQg MDogc2V0IHRvICdXJyBpZiBhdCBsZWFzdCBvbmUgb3RoZXIgaXMgJ1cnCSovCisJLyogMTogaWYg J1cnIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgc3RyaW5nCQkqLworCS8qIHZhbHVlIHdhcyB0cnVu Y2F0ZWQgd2hlbiBpdCB3YXMJCQkqLworCS8qIHN0b3JlZCBpbnRvIGEgaG9zdCB2YXJpYWJsZS4g ICAgICAgICAgICAgKi8KKworCS8qCisJICogMjogaWYgJ1cnIGEgKGhvcGVmdWxseSkgbm9uLWZh dGFsIG5vdGljZSBvY2N1cnJlZAorCSAqLwkvKiAzOiBlbXB0eSAqLworCS8qIDQ6IGVtcHR5CQkJ CQkJKi8KKwkvKiA1OiBlbXB0eQkJCQkJCSovCisJLyogNjogZW1wdHkJCQkJCQkqLworCS8qIDc6 IGVtcHR5CQkJCQkJKi8KKworCWNoYXIJCXNxbHN0YXRlWzVdOworfTsKKworc3RydWN0IHNxbGNh X3QgKkVDUEdnZXRfc3FsY2Eodm9pZCk7CisKKyNpZm5kZWYgUE9TVEdSRVNfRUNQR19JTlRFUk5B TAorI2RlZmluZSBzcWxjYSAoKkVDUEdnZXRfc3FsY2EoKSkKKyNlbmRpZgorCisjaWZkZWYgX19j cGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKworI2xpbmUgMyAic3FsanNvbl9qc29udGFi bGUucGdjIgorCisKKyNsaW5lIDEgInJlZ3Jlc3Npb24uaCIKKworCisKKworCisKKyNsaW5lIDQg InNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworCisvKiBleGVjIHNxbCB3aGVuZXZlciBzcWxlcnJv ciAgc3FscHJpbnQgOyAqLworI2xpbmUgNiAic3FsanNvbl9qc29udGFibGUucGdjIgorCisKK2lu dAorbWFpbiAoKQoreworICBFQ1BHZGVidWcgKDEsIHN0ZGVycik7CisKKyAgeyBFQ1BHY29ubmVj dChfX0xJTkVfXywgMCwgImVjcGcxX3JlZ3Jlc3Npb24iICwgTlVMTCwgTlVMTCAsIE5VTEwsIDAp OyAKKyNsaW5lIDEzICJzcWxqc29uX2pzb250YWJsZS5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2Rl IDwgMCkgc3FscHJpbnQoKTt9CisjbGluZSAxMyAic3FsanNvbl9qc29udGFibGUucGdjIgorCisg IHsgRUNQR3NldGNvbW1pdChfX0xJTkVfXywgIm9uIiwgTlVMTCk7CisjbGluZSAxNCAic3FsanNv bl9qc29udGFibGUucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50KCk7fQor I2xpbmUgMTQgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworCisgIHsgRUNQR2RvKF9fTElORV9f LCAwLCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAic2VsZWN0ICogZnJvbSBqc29uX3RhYmxl ICgganNvbmIgJ251bGwnICwgJyRbKl0nIGFzIHAwIGNvbHVtbnMgKCBuZXN0ZWQgJyQnIGFzIHAx IGNvbHVtbnMgKCBuZXN0ZWQgcGF0aCAnJCcgYXMgcDExIGNvbHVtbnMgKCBmb28gaW50ICkgLCBu ZXN0ZWQgcGF0aCAnJCcgYXMgcDEyIGNvbHVtbnMgKCBiYXIgaW50ICkgKSAsIG5lc3RlZCBwYXRo ICckJyBhcyBwMiBjb2x1bW5zICggbmVzdGVkIHBhdGggJyQnIGFzIHAyMSBjb2x1bW5zICggYmF6 IGludCApICkgKSBwbGFuICggcDEgKSApIGp0IiwgRUNQR3RfRU9JVCwgRUNQR3RfRU9SVCk7Cisj bGluZSAyNiAic3FsanNvbl9qc29udGFibGUucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDAp IHNxbHByaW50KCk7fQorI2xpbmUgMjYgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworICAvLyBl cnJvcgorCisgIHsgRUNQR2Rpc2Nvbm5lY3QoX19MSU5FX18sICJDVVJSRU5UIik7CisjbGluZSAy OSAic3FsanNvbl9qc29udGFibGUucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHBy aW50KCk7fQorI2xpbmUgMjkgInNxbGpzb25fanNvbnRhYmxlLnBnYyIKKworCisgIHJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1z cWxqc29uX2pzb250YWJsZS5zdGRlcnIgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0 ZWQvc3FsLXNxbGpzb25fanNvbnRhYmxlLnN0ZGVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi41ODgxZmRiNWVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFj ZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1zcWxqc29uX2pzb250YWJsZS5zdGRlcnIKQEAgLTAs MCArMSwyMCBAQAorW05PX1BJRF06IEVDUEdkZWJ1Zzogc2V0IHRvIDEKK1tOT19QSURdOiBzcWxj YTogY29kZTogMCwgc3RhdGU6IDAwMDAwCitbTk9fUElEXTogRUNQR2Nvbm5lY3Q6IG9wZW5pbmcg ZGF0YWJhc2UgZWNwZzFfcmVncmVzc2lvbiBvbiA8REVGQVVMVD4gcG9ydCA8REVGQVVMVD4gIAor W05PX1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBFQ1BHc2V0 Y29tbWl0IG9uIGxpbmUgMTQ6IGFjdGlvbiAib24iOyBjb25uZWN0aW9uICJlY3BnMV9yZWdyZXNz aW9uIgorW05PX1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBl Y3BnX2V4ZWN1dGUgb24gbGluZSAxNjogcXVlcnk6IHNlbGVjdCAqIGZyb20ganNvbl90YWJsZSAo IGpzb25iICdudWxsJyAsICckWypdJyBhcyBwMCBjb2x1bW5zICggbmVzdGVkICckJyBhcyBwMSBj b2x1bW5zICggbmVzdGVkIHBhdGggJyQnIGFzIHAxMSBjb2x1bW5zICggZm9vIGludCApICwgbmVz dGVkIHBhdGggJyQnIGFzIHAxMiBjb2x1bW5zICggYmFyIGludCApICkgLCBuZXN0ZWQgcGF0aCAn JCcgYXMgcDIgY29sdW1ucyAoIG5lc3RlZCBwYXRoICckJyBhcyBwMjEgY29sdW1ucyAoIGJheiBp bnQgKSApICkgcGxhbiAoIHAxICkgKSBqdDsgd2l0aCAwIHBhcmFtZXRlcihzKSBvbiBjb25uZWN0 aW9uIGVjcGcxX3JlZ3Jlc3Npb24KK1tOT19QSURdOiBzcWxjYTogY29kZTogMCwgc3RhdGU6IDAw MDAwCitbTk9fUElEXTogZWNwZ19leGVjdXRlIG9uIGxpbmUgMTY6IHVzaW5nIFBRZXhlYworW05P X1BJRF06IHNxbGNhOiBjb2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiBlY3BnX2NoZWNr X1BRcmVzdWx0IG9uIGxpbmUgMTY6IGJhZCByZXNwb25zZSAtIEVSUk9SOiAgaW52YWxpZCBKU09O X1RBQkxFIHBsYW4KK0xJTkUgMTogLi4udGVkIHBhdGggJyQnIGFzIHAyMSBjb2x1bW5zICggYmF6 IGludCApICkgKSBwbGFuICggcDEgKSApIGp0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIFBBVEggbmFtZSBt aXNtYXRjaDogZXhwZWN0ZWQgcDAgYnV0IHAxIGlzIGdpdmVuLgorW05PX1BJRF06IHNxbGNhOiBj b2RlOiAwLCBzdGF0ZTogMDAwMDAKK1tOT19QSURdOiByYWlzaW5nIHNxbHN0YXRlIDQyNjAxIChz cWxjb2RlIC00MDApOiBpbnZhbGlkIEpTT05fVEFCTEUgcGxhbiBvbiBsaW5lIDE2CitbTk9fUElE XTogc3FsY2E6IGNvZGU6IC00MDAsIHN0YXRlOiA0MjYwMQorU1FMIGVycm9yOiBpbnZhbGlkIEpT T05fVEFCTEUgcGxhbiBvbiBsaW5lIDE2CitbTk9fUElEXTogZWNwZ19maW5pc2g6IGNvbm5lY3Rp b24gZWNwZzFfcmVncmVzc2lvbiBjbG9zZWQKK1tOT19QSURdOiBzcWxjYTogY29kZTogMCwgc3Rh dGU6IDAwMDAwCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQv c3FsLXNxbGpzb25fanNvbnRhYmxlLnN0ZG91dCBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9l eHBlY3RlZC9zcWwtc3FsanNvbl9qc29udGFibGUuc3Rkb3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmU2OWRlMjliYjIKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9zcWwvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01h a2VmaWxlCmluZGV4IGQ4MjEzYjI1Y2UuLjdmMDMyNjU5YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2VjcGcvdGVzdC9zcWwvTWFrZWZpbGUKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90 ZXN0L3NxbC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQCBURVNUUyA9IGFycmF5IGFycmF5LmMg XAogICAgICAgICBxdW90ZSBxdW90ZS5jIFwKICAgICAgICAgc2hvdyBzaG93LmMgXAogICAgICAg ICBzcWxqc29uIHNxbGpzb24uYyBcCisgICAgICAgIHNxbGpzb25fanNvbnRhYmxlIHNxbGpzb25f anNvbnRhYmxlLmMgXAogICAgICAgICBpbnN1cGQgaW5zdXBkLmMgXAogICAgICAgICB0d29waGFz ZSB0d29waGFzZS5jIFwKICAgICAgICAgaW5zdXBkIGluc3VwZC5jIFwKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkCmluZGV4IDEyZjI4ZTBhMjQuLjg4YTNhY2I5YWYgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvbWVzb24uYnVpbGQKKysrIGIv c3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9tZXNvbi5idWlsZApAQCAtMjYsNiArMjYsNyBA QCBwZ2NfZmlsZXMgPSBbCiAgICdzaG93JywKICAgJ3NxbGRhJywKICAgJ3NxbGpzb24nLAorICAn c3FsanNvbl9qc29udGFibGUnLAogICAndHdvcGhhc2UnLAogXQogCmRpZmYgLS1naXQgYS9zcmMv aW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL3NxbGpzb25fanNvbnRhYmxlLnBnYyBiL3NyYy9pbnRl cmZhY2VzL2VjcGcvdGVzdC9zcWwvc3FsanNvbl9qc29udGFibGUucGdjCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA2ZjhhMmI2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL3NxbGpzb25fanNvbnRhYmxlLnBnYwpAQCAtMCww ICsxLDMyIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworRVhFQyBTUUwgSU5DTFVERSBzcWxjYTsK K2V4ZWMgc3FsIGluY2x1ZGUgLi4vcmVncmVzc2lvbjsKKworRVhFQyBTUUwgV0hFTkVWRVIgU1FM RVJST1Igc3FscHJpbnQ7CisKK2ludAorbWFpbiAoKQoreworICBFQ1BHZGVidWcgKDEsIHN0ZGVy cik7CisKKyAgRVhFQyBTUUwgQ09OTkVDVCBUTyBSRUdSRVNTREIxOworICBFWEVDIFNRTCBTRVQg QVVUT0NPTU1JVCA9IE9OOworCisgIEVYRUMgU1FMIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgJyQnIEFTIHAx IENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCAp LAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJ CU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBw MjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAxKSkganQ7CisgIC8vIGVy cm9yCisKKyAgRVhFQyBTUUwgRElTQ09OTkVDVDsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9qc29udGFibGUub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uX2pzb250YWJsZS5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzM0Y2Q2NzdlNQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbl9qc29udGFibGUub3V0CkBAIC0wLDAg KzEsMTE5MSBAQAorLS0gSlNPTl9UQUJMRQorLS0gU2hvdWxkIGZhaWwgKEpTT05fVEFCTEUgY2Fu IGJlIHVzZWQgb25seSBpbiBGUk9NIGNsYXVzZSkKK1NFTEVDVCBKU09OX1RBQkxFKCdbXScsICck Jyk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIoIgorTElORSAxOiBTRUxFQ1Qg SlNPTl9UQUJMRSgnW10nLCAnJCcpOworICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIFNo b3VsZCBmYWlsIChqc29uIGFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQpCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoTlVMTCBGT1JNQVQgSlNPTiwgJyQnIENPTFVNTlMgKGZvbyB0ZXh0KSk7CitFUlJP UjogIEpTT05fVEFCTEUoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUganNvbiB0eXBl CitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxMIEZPUk1BVCBKU09OLCAnJCcg Q09MVU1OUyAoZm9vIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorSElO VDogIFRyeSBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byBqc29uYgorLS0gU2hvdWxkIGZhaWwgKG5v IGNvbHVtbnMpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTCwgJyQnIENPTFVNTlMgKCkp OworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKSIKK0xJTkUgMTogU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKE5VTEwsICckJyBDT0xVTU5TICgpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUgKE5VTEw6Ompzb25iLCAnJCcgQ09MVU1OUyAodjEgdGltZXN0YW1wKSkgQVMgZiAodjEs IHYyKTsKK0VSUk9SOiAgSlNPTl9UQUJMRSBmdW5jdGlvbiBoYXMgMSBjb2x1bW5zIGF2YWlsYWJs ZSBidXQgMiBjb2x1bW5zIHNwZWNpZmllZAorLS0gTlVMTCA9PiBlbXB0eSB0YWJsZQorU0VMRUNU ICogRlJPTSBKU09OX1RBQkxFKE5VTEw6Ompzb25iLCAnJCcgQ09MVU1OUyAoZm9vIGludCkpIGJh cjsKKyBmb28gCistLS0tLQorKDAgcm93cykKKworLS0KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnMTIzJywgJyQnCisJQ09MVU1OUyAoaXRlbSBpbnQgUEFUSCAnJCcsIGZvbyBpbnQp KSBiYXI7CisgaXRlbSB8IGZvbyAKKy0tLS0tLSstLS0tLQorICAxMjMgfCAgICAKKygxIHJvdykK KworLS0gSlNPTl9UQUJMRTogYmFzaWMgZnVuY3Rpb25hbGl0eQorQ1JFQVRFIERPTUFJTiBqc29u Yl90ZXN0X2RvbWFpbiBBUyB0ZXh0IENIRUNLICh2YWx1ZSA8PiAnZm9vJyk7CitDUkVBVEUgVEVN UCBUQUJMRSBqc29uX3RhYmxlX3Rlc3QgKGpzKSBBUworCShWQUxVRVMKKwkJKCcxJyksCisJCSgn W10nKSwKKwkJKCd7fScpLAorCQkoJ1sxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51 bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0nKQorCSk7 CistLSBSZWd1bGFyICJ1bmZvcm1hdHRlZCIgY29sdW1ucworU0VMRUNUICoKK0ZST00ganNvbl90 YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpz Ojpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAor CQkJImludCIgaW50IFBBVEggJyQnLAorCQkJInRleHQiIHRleHQgUEFUSCAnJCcsCisJCQkiY2hh cig0KSIgY2hhcig0KSBQQVRIICckJywKKwkJCSJib29sIiBib29sIFBBVEggJyQnLAorCQkJIm51 bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCisJCQkiZG9tYWluIiBqc29uYl90ZXN0X2RvbWFpbiBQ QVRIICckJywKKwkJCWpzIGpzb24gUEFUSCAnJCcsCisJCQlqYiBqc29uYiBQQVRIICckJworCQkp CisJKSBqdAorCU9OIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwg aW50IHwgIHRleHQgICB8IGNoYXIoNCkgfCBib29sIHwgbnVtZXJpYyB8IGRvbWFpbiAgfCAgICAg IGpzICAgICAgfCAgICAgIGpiICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAxIHwgICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAgIHwgICAgICAgMSB8IDEg ICAgICAgfCAxICAgICAgICAgICAgfCAxCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIHwgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAg fCAgICAgICAgICAgICAgfCAKKyB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgfCAg ICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IHt9ICAg ICAgICAgICB8IHt9CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFs c2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAxIHwgICAxIHwg MSAgICAgICB8IDEgICAgICAgfCAgICAgIHwgICAgICAgMSB8IDEgICAgICAgfCAxICAgICAgICAg ICAgfCAxCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAyIHwgICAxIHwgMS4yMyAg ICB8IDEuMjMgICAgfCAgICAgIHwgICAgMS4yMyB8IDEuMjMgICAgfCAxLjIzICAgICAgICAgfCAx LjIzCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUs IHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAzIHwgICAyIHwgMiAgICAgICB8 IDIgICAgICAgfCAgICAgIHwgICAgICAgMiB8IDIgICAgICAgfCAiMiIgICAgICAgICAgfCAiMiIK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDQgfCAgICAgfCBhYWFhYWFhIHwgYWFh YSAgICB8ICAgICAgfCAgICAgICAgIHwgYWFhYWFhYSB8ICJhYWFhYWFhIiAgICB8ICJhYWFhYWFh IgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7 ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNSB8ICAgICB8IGZvbyAgICAgfCBm b28gICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgImZvbyIgICAgICAgIHwgImZvbyIK KyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCAgICAgfCAgICAgICAgIHwgICAg ICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IG51bGwgICAgICAgICB8IG51bGwKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDcgfCAgIDAgfCBmYWxzZSAgIHwgZmFscyAg ICB8IGYgICAgfCAgICAgICAgIHwgZmFsc2UgICB8IGZhbHNlICAgICAgICB8IGZhbHNlCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjog MTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgICAxIHwgdHJ1ZSAgICB8IHRydWUgICAg fCB0ICAgIHwgICAgICAgICB8IHRydWUgICAgfCB0cnVlICAgICAgICAgfCB0cnVlCisgWzEsIDEu MjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA5IHwgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAg ICAgIHwgICAgICAgICB8ICAgICAgICAgfCB7ImFhYSI6IDEyM30gfCB7ImFhYSI6IDEyM30KKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgICAgfCBbMSwyXSAgIHwgWzEsMiAg ICB8ICAgICAgfCAgICAgICAgIHwgWzEsMl0gICB8ICJbMSwyXSIgICAgICB8ICJbMSwyXSIKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTEgfCAgICAgfCAic3RyIiAgIHwgInN0ciAg ICB8ICAgICAgfCAgICAgICAgIHwgInN0ciIgICB8ICJcInN0clwiIiAgICB8ICJcInN0clwiIgor KDE0IHJvd3MpCisKKy0tICJmb3JtYXR0ZWQiIGNvbHVtbnMKK1NFTEVDVCAqCitGUk9NIGpzb25f dGFibGVfdGVzdCB2YWxzCisJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSgKKwkJdmFscy5q czo6anNvbmIsICdsYXggJFsqXScKKwkJQ09MVU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwK KwkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzYyBjaGFyKDQpIEZP Uk1BVCBKU09OICBQQVRIICckJywKKwkJCWpzdiB2YXJjaGFyKDQpIEZPUk1BVCBKU09OICBQQVRI ICckJywKKwkJCWpzYiBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJywKKwkJCWpzYnEganNvbmIg Rk9STUFUIEpTT04gUEFUSCAnJCcgT01JVCBRVU9URVMKKwkJKQorCSkganQKKwlPTiB0cnVlOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpZCB8ICAgICBqc3QgICAgICB8IGpzYyAg fCBqc3YgIHwgICAgIGpzYiAgICAgIHwgICAgIGpzYnEgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLQorIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8 IDEgICAgICAgICAgICB8IDEgICAgfCAxICAgIHwgMSAgICAgICAgICAgIHwgMQorIFtdICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwg ICAgICAgICAgICAgIHwgCisge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwge30g ICAgICAgICAgIHwge30gICB8IHt9ICAgfCB7fSAgICAgICAgICAgfCB7fQorIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJb MSwyXSIsICJcInN0clwiIl0gfCAgMSB8IDEgICAgICAgICAgICB8IDEgICAgfCAxICAgIHwgMSAg ICAgICAgICAgIHwgMQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMiB8IDEuMjMg ICAgICAgICB8IDEuMjMgfCAxLjIzIHwgMS4yMyAgICAgICAgIHwgMS4yMworIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJb MSwyXSIsICJcInN0clwiIl0gfCAgMyB8ICIyIiAgICAgICAgICB8ICIyIiAgfCAiMiIgIHwgIjIi ICAgICAgICAgIHwgMgorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNCB8ICJhYWFh YWFhIiAgICB8ICJhYWEgfCAiYWFhIHwgImFhYWFhYWEiICAgIHwgCisgWzEsIDEuMjMsICIyIiwg ImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJd IiwgIlwic3RyXCIiXSB8ICA1IHwgImZvbyIgICAgICAgIHwgImZvbyB8ICJmb28gfCAiZm9vIiAg ICAgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCBudWxsICAgICAg ICAgfCBudWxsIHwgbnVsbCB8IG51bGwgICAgICAgICB8IG51bGwKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDcgfCBmYWxzZSAgICAgICAgfCBmYWxzIHwgZmFscyB8IGZhbHNlICAg ICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFs c2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA4IHwgdHJ1ZSAg ICAgICAgIHwgdHJ1ZSB8IHRydWUgfCB0cnVlICAgICAgICAgfCB0cnVlCisgWzEsIDEuMjMsICIy IiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsx LDJdIiwgIlwic3RyXCIiXSB8ICA5IHwgeyJhYWEiOiAxMjN9IHwgeyJhYSB8IHsiYWEgfCB7ImFh YSI6IDEyM30gfCB7ImFhYSI6IDEyM30KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg MTAgfCAiWzEsMl0iICAgICAgfCAiWzEsIHwgIlsxLCB8ICJbMSwyXSIgICAgICB8IFsxLCAyXQor IFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICJcInN0clwiIiAgICB8ICJcInMg fCAiXCJzIHwgIlwic3RyXCIiICAgIHwgInN0ciIKKygxNCByb3dzKQorCistLSBFWElTVFMgY29s dW1ucworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpP SU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5T ICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJZXhpc3RzMSBib29sIEVYSVNUUyBQQVRIICck LmFhYScsCisJCQlleGlzdHMyIGludCBFWElTVFMgUEFUSCAnJC5hYWEnLAorCQkJZXhpc3RzMyBp bnQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLmFhYScgVU5LTk9XTiBPTiBFUlJPUiwKKwkJCWV4aXN0 czQgdGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBGQUxTRSBPTiBFUlJPUgorCQkpCisJ KSBqdAorCU9OIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBqcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgZXhp c3RzMSB8IGV4aXN0czIgfCBleGlzdHMzIHwgZXhpc3RzNCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLQor IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSB8IGYgICAgICAgfCAgICAgICAwIHwg ICAgICAgICB8IGZhbHNlCisgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgICAg ICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgCisge30gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAxIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAi WzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBm YWxzZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMiB8IGYgICAgICAgfCAgICAg ICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAz IHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDQgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQor IFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNSB8IGYgICAgICAgfCAgICAgICAwIHwg ICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwg ZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA2IHwgZiAg ICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2UKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFh YSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgIDcgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZQorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEy M30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOCB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAg ICB8IGZhbHNlCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA5IHwgdCAgICAgICB8 ICAgICAgIDEgfCAgICAgICAxIHwgdHJ1ZQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZv byIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0g fCAxMCB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlCisgWzEsIDEuMjMsICIy IiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsx LDJdIiwgIlwic3RyXCIiXSB8IDExIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFs c2UKKygxNCByb3dzKQorCistLSBPdGhlciBtaXNjZWxsYW5vdXMgY2hlY2tzCitTRUxFQ1QgKgor RlJPTSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUo CisJCXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9S RElOQUxJVFksCisJCQlhYWEgaW50LCAtLSAiYWFhIiBoYXMgaW1wbGljaXQgcGF0aCAnJC4iYWFh IicKKwkJCWFhYTEgaW50IFBBVEggJyQuYWFhJywKKwkJCWpzMiBqc29uIFBBVEggJyQnLAorCQkJ anNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVSLAorCQkJanNiMnEganNvbmIgUEFUSCAn JCcgT01JVCBRVU9URVMsCisJCQlpYSBpbnRbXSBQQVRIICckJywKKwkJCXRhIHRleHRbXSBQQVRI ICckJywKKwkJCWpiYSBqc29uYltdIFBBVEggJyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBhYWEgfCBhYWExIHwgICAgIGpzMiAg ICAgIHwgICAgIGpzYjJ3ICAgICAgfCAgICBqc2IycSAgICAgfCBpYSB8IHRhIHwgamJhIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0tCisgMSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgICAgIHwgICAgICB8IDEgICAgICAgICAg ICB8IFsxXSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgfCAgICB8IAorIFtdICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIHwgICAgfCAKKyB7fSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDEgfCAgICAgfCAgICAgIHwge30gICAgICAgICAgIHwgW3t9XSAg ICAgICAgICAgfCB7fSAgICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFh YWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwg Ilwic3RyXCIiXSB8ICAxIHwgICAgIHwgICAgICB8IDEgICAgICAgICAgICB8IFsxXSAgICAgICAg ICAgIHwgMSAgICAgICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFh IiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0 clwiIl0gfCAgMiB8ICAgICB8ICAgICAgfCAxLjIzICAgICAgICAgfCBbMS4yM10gICAgICAgICB8 IDEuMjMgICAgICAgICB8ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJm b28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJd IHwgIDMgfCAgICAgfCAgICAgIHwgIjIiICAgICAgICAgIHwgWyIyIl0gICAgICAgICAgfCAyICAg ICAgICAgICAgfCAgICB8ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwg bnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0 IHwgICAgIHwgICAgICB8ICJhYWFhYWFhIiAgICB8IFsiYWFhYWFhYSJdICAgIHwgICAgICAgICAg ICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGws IGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNSB8ICAg ICB8ICAgICAgfCAiZm9vIiAgICAgICAgfCBbImZvbyJdICAgICAgICB8ICAgICAgICAgICAgICB8 ICAgIHwgICAgfCAKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxz ZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCAgICAgfCAg ICAgIHwgbnVsbCAgICAgICAgIHwgW251bGxdICAgICAgICAgfCBudWxsICAgICAgICAgfCAgICB8 ICAgIHwgCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRy dWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA3IHwgICAgIHwgICAgICB8 IGZhbHNlICAgICAgICB8IFtmYWxzZV0gICAgICAgIHwgZmFsc2UgICAgICAgIHwgICAgfCAgICB8 IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7 ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOCB8ICAgICB8ICAgICAgfCB0cnVl ICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICB8IHRydWUgICAgICAgICB8ICAgIHwgICAgfCAKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDkgfCAxMjMgfCAgMTIzIHwgeyJhYWEiOiAx MjN9IHwgW3siYWFhIjogMTIzfV0gfCB7ImFhYSI6IDEyM30gfCAgICB8ICAgIHwgCisgWzEsIDEu MjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIz fSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8IDEwIHwgICAgIHwgICAgICB8ICJbMSwyXSIgICAgICB8 IFsiWzEsMl0iXSAgICAgIHwgWzEsIDJdICAgICAgIHwgICAgfCAgICB8IAorIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJb MSwyXSIsICJcInN0clwiIl0gfCAxMSB8ICAgICB8ICAgICAgfCAiXCJzdHJcIiIgICAgfCBbIlwi c3RyXCIiXSAgICB8ICJzdHIiICAgICAgICB8ICAgIHwgICAgfCAKKygxNCByb3dzKQorCistLSBK U09OX1RBQkxFOiBUZXN0IGJhY2t3YXJkIHBhcnNpbmcKK0NSRUFURSBWSUVXIGpzb25iX3RhYmxl X3ZpZXcgQVMKK1NFTEVDVCAqIEZST00KKwlKU09OX1RBQkxFKAorCQlqc29uYiAnbnVsbCcsICds YXggJFsqXScgUEFTU0lORyAxICsgMiBBUyBhLCBqc29uICciZm9vIicgQVMgImIgYyIKKwkJQ09M VU1OUyAoCisJCQlpZCBGT1IgT1JESU5BTElUWSwKKwkJCSJpbnQiIGludCBQQVRIICckJywKKwkJ CSJ0ZXh0IiB0ZXh0IFBBVEggJyQnLAorCQkJImNoYXIoNCkiIGNoYXIoNCkgUEFUSCAnJCcsCisJ CQkiYm9vbCIgYm9vbCBQQVRIICckJywKKwkJCSJudW1lcmljIiBudW1lcmljIFBBVEggJyQnLAor CQkJImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFUSCAnJCcsCisJCQlqcyBqc29uIFBBVEgg JyQnLAorCQkJamIganNvbmIgUEFUSCAnJCcsCisJCQlqc3QgdGV4dCAgICBGT1JNQVQgSlNPTiAg UEFUSCAnJCcsCisJCQlqc2MgY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc3Yg dmFyY2hhcig0KSBGT1JNQVQgSlNPTiAgUEFUSCAnJCcsCisJCQlqc2IganNvbmIgICBGT1JNQVQg SlNPTiBQQVRIICckJywKKwkJCWpzYnEganNvbmIgRk9STUFUIEpTT04gUEFUSCAnJCcgT01JVCBR VU9URVMsCisJCQlhYWEgaW50LCAtLSBpbXBsaWNpdCBwYXRoICckLiJhYWEiJywKKwkJCWFhYTEg aW50IFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czEgYm9vbCBFWElTVFMgUEFUSCAnJC5hYWEnLAor CQkJZXhpc3RzMiBpbnQgRVhJU1RTIFBBVEggJyQuYWFhJyBUUlVFIE9OIEVSUk9SLAorCQkJZXhp c3RzMyB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC5hYWEnIFVOS05PV04gT04gRVJST1IsCisJ CQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBF UiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFU SCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywK KwkJCU5FU1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TICgKKwkJCQlhMSBpbnQsCisJCQkJ TkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMSAxIiBDT0xVTU5TICgKKwkJCQkJYTExIHRleHQKKwkJ CQkpLAorCQkJCWIxIHRleHQKKwkJCSksCisJCQlORVNURUQgUEFUSCAnJFsyXScgQVMgcDIgQ09M VU1OUyAoCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMjoxIiBDT0xVTU5TICgKKwkJCQkJ YTIxIHRleHQKKwkJCQkpLAorCQkJCU5FU1RFRCBQQVRIICckWypdJyBBUyBwMjIgQ09MVU1OUyAo CisJCQkJCWEyMiB0ZXh0CisJCQkJKQorCQkJKQorCQkpCisJKTsKK1xzdiBqc29uYl90YWJsZV92 aWV3CitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3IEFTCisg U0VMRUNUIGlkLAorICAgICJpbnQiLAorICAgIHRleHQsCisgICAgImNoYXIoNCkiLAorICAgIGJv b2wsCisgICAgIm51bWVyaWMiLAorICAgIGRvbWFpbiwKKyAgICBqcywKKyAgICBqYiwKKyAgICBq c3QsCisgICAganNjLAorICAgIGpzdiwKKyAgICBqc2IsCisgICAganNicSwKKyAgICBhYWEsCisg ICAgYWFhMSwKKyAgICBleGlzdHMxLAorICAgIGV4aXN0czIsCisgICAgZXhpc3RzMywKKyAgICBq czIsCisgICAganNiMncsCisgICAganNiMnEsCisgICAgaWEsCisgICAgdGEsCisgICAgamJhLAor ICAgIGExLAorICAgIGIxLAorICAgIGExMSwKKyAgICBhMjEsCisgICAgYTIyCisgICBGUk9NIEpT T05fVEFCTEUoCisgICAgICAgICAgICAnbnVsbCc6Ompzb25iLCAnJFsqXScgQVMganNvbl90YWJs ZV9wYXRoXzAKKyAgICAgICAgICAgIFBBU1NJTkcKKyAgICAgICAgICAgICAgICAxICsgMiBBUyBh LAorICAgICAgICAgICAgICAgICciZm9vIic6Ompzb24gQVMgImIgYyIKKyAgICAgICAgICAgIENP TFVNTlMgKAorICAgICAgICAgICAgICAgIGlkIEZPUiBPUkRJTkFMSVRZLAorICAgICAgICAgICAg ICAgICJpbnQiIGludGVnZXIgUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgdGV4dCB0ZXh0IFBB VEggJyQnLAorICAgICAgICAgICAgICAgICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcs CisgICAgICAgICAgICAgICAgYm9vbCBib29sZWFuIFBBVEggJyQnLAorICAgICAgICAgICAgICAg ICJudW1lcmljIiBudW1lcmljIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGRvbWFpbiBqc29u Yl90ZXN0X2RvbWFpbiBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqcyBqc29uIFBBVEggJyQn LAorICAgICAgICAgICAgICAgIGpiIGpzb25iIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpz dCB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYyBjaGFyYWN0 ZXIoNCkgRk9STUFUIEpTT04gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAganN2IGNoYXJhY3Rl ciB2YXJ5aW5nKDQpIEZPUk1BVCBKU09OIFBBVEggJyQnLAorICAgICAgICAgICAgICAgIGpzYiBq c29uYiBQQVRIICckJywKKyAgICAgICAgICAgICAgICBqc2JxIGpzb25iIFBBVEggJyQnIE9NSVQg UVVPVEVTLAorICAgICAgICAgICAgICAgIGFhYSBpbnRlZ2VyIFBBVEggJyQuImFhYSInLAorICAg ICAgICAgICAgICAgIGFhYTEgaW50ZWdlciBQQVRIICckLiJhYWEiJywKKyAgICAgICAgICAgICAg ICBleGlzdHMxIGJvb2xlYW4gRVhJU1RTIFBBVEggJyQuImFhYSInLAorICAgICAgICAgICAgICAg IGV4aXN0czIgaW50ZWdlciBFWElTVFMgUEFUSCAnJC4iYWFhIicgVFJVRSBPTiBFUlJPUiwKKyAg ICAgICAgICAgICAgICBleGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLiJhYWEiJyBV TktOT1dOIE9OIEVSUk9SLAorICAgICAgICAgICAgICAgIGpzMiBqc29uIFBBVEggJyQnLAorICAg ICAgICAgICAgICAgIGpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggVU5DT05ESVRJT05BTCBXUkFQ UEVSLAorICAgICAgICAgICAgICAgIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAor ICAgICAgICAgICAgICAgIGlhIGludGVnZXJbXSBQQVRIICckJywKKyAgICAgICAgICAgICAgICB0 YSB0ZXh0W10gUEFUSCAnJCcsCisgICAgICAgICAgICAgICAgamJhIGpzb25iW10gUEFUSCAnJCcs CisgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxCisgICAgICAgICAgICAg ICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgIGExIGludGVnZXIgUEFUSCAnJC4iYTEi JywKKyAgICAgICAgICAgICAgICAgICAgYjEgdGV4dCBQQVRIICckLiJiMSInLAorICAgICAgICAg ICAgICAgICAgICBORVNURUQgUEFUSCAnJFsqXScgQVMgInAxIDEiCisgICAgICAgICAgICAgICAg ICAgIENPTFVNTlMgKAorICAgICAgICAgICAgICAgICAgICAgICAgYTExIHRleHQgUEFUSCAnJC4i YTExIicKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICksCisgICAgICAg ICAgICAgICAgTkVTVEVEIFBBVEggJyRbMl0nIEFTIHAyCisgICAgICAgICAgICAgICAgQ09MVU1O UyAoCisgICAgICAgICAgICAgICAgICAgIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDI6MSIKKyAg ICAgICAgICAgICAgICAgICAgQ09MVU1OUyAoCisgICAgICAgICAgICAgICAgICAgICAgICBhMjEg dGV4dCBQQVRIICckLiJhMjEiJworICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAg ICAgICAgICBORVNURUQgUEFUSCAnJFsqXScgQVMgcDIyCisgICAgICAgICAgICAgICAgICAgIENP TFVNTlMgKAorICAgICAgICAgICAgICAgICAgICAgICAgYTIyIHRleHQgUEFUSCAnJC4iYTIyIicK KyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkK KyAgICAgICAgICAgIFBMQU4gKGpzb25fdGFibGVfcGF0aF8wIE9VVEVSICgocDEgT1VURVIgInAx IDEiKSBVTklPTiAocDIgT1VURVIgKCJwMjoxIiBVTklPTiBwMjIpKSkpCisgICAgICAgICkKK0VY UExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkgU0VMRUNUICogRlJPTSBqc29uYl90YWJsZV92aWV3 OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgVGFibGUgRnVuY3Rpb24gU2NhbiBvbiAianNvbl90YWJsZSIK KyAgIE91dHB1dDogImpzb25fdGFibGUiLmlkLCAianNvbl90YWJsZSIuImludCIsICJqc29uX3Rh YmxlIi50ZXh0LCAianNvbl90YWJsZSIuImNoYXIoNCkiLCAianNvbl90YWJsZSIuYm9vbCwgImpz b25fdGFibGUiLiJudW1lcmljIiwgImpzb25fdGFibGUiLmRvbWFpbiwgImpzb25fdGFibGUiLmpz LCAianNvbl90YWJsZSIuamIsICJqc29uX3RhYmxlIi5qc3QsICJqc29uX3RhYmxlIi5qc2MsICJq c29uX3RhYmxlIi5qc3YsICJqc29uX3RhYmxlIi5qc2IsICJqc29uX3RhYmxlIi5qc2JxLCAianNv bl90YWJsZSIuYWFhLCAianNvbl90YWJsZSIuYWFhMSwgImpzb25fdGFibGUiLmV4aXN0czEsICJq c29uX3RhYmxlIi5leGlzdHMyLCAianNvbl90YWJsZSIuZXhpc3RzMywgImpzb25fdGFibGUiLmpz MiwgImpzb25fdGFibGUiLmpzYjJ3LCAianNvbl90YWJsZSIuanNiMnEsICJqc29uX3RhYmxlIi5p YSwgImpzb25fdGFibGUiLnRhLCAianNvbl90YWJsZSIuamJhLCAianNvbl90YWJsZSIuYTEsICJq c29uX3RhYmxlIi5iMSwgImpzb25fdGFibGUiLmExMSwgImpzb25fdGFibGUiLmEyMSwgImpzb25f dGFibGUiLmEyMgorICAgVGFibGUgRnVuY3Rpb24gQ2FsbDogSlNPTl9UQUJMRSgnbnVsbCc6Ompz b25iLCAnJFsqXScgQVMganNvbl90YWJsZV9wYXRoXzAgUEFTU0lORyAzIEFTIGEsICciZm9vIic6 Ompzb25iIEFTICJiIGMiIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCAiaW50IiBpbnRlZ2Vy IFBBVEggJyQnLCB0ZXh0IHRleHQgUEFUSCAnJCcsICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFU SCAnJCcsIGJvb2wgYm9vbGVhbiBQQVRIICckJywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcs IGRvbWFpbiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywganMganNvbiBQQVRIICckJywgamIg anNvbmIgUEFUSCAnJCcsIGpzdCB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc2MgY2hhcmFj dGVyKDQpIEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9S TUFUIEpTT04gUEFUSCAnJCcsIGpzYiBqc29uYiBQQVRIICckJywganNicSBqc29uYiBQQVRIICck JyBPTUlUIFFVT1RFUywgYWFhIGludGVnZXIgUEFUSCAnJC4iYWFhIicsIGFhYTEgaW50ZWdlciBQ QVRIICckLiJhYWEiJywgZXhpc3RzMSBib29sZWFuIEVYSVNUUyBQQVRIICckLiJhYWEiJywgZXhp c3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLCBleGlzdHMz IHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLiJhYWEiJyBVTktOT1dOIE9OIEVSUk9SLCBqczIg anNvbiBQQVRIICckJywganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFMIFdS QVBQRVIsIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLCBpYSBpbnRlZ2VyW10gUEFU SCAnJCcsIHRhIHRleHRbXSBQQVRIICckJywgamJhIGpzb25iW10gUEFUSCAnJCcsIE5FU1RFRCBQ QVRIICckWzFdJyBBUyBwMSBDT0xVTU5TIChhMSBpbnRlZ2VyIFBBVEggJyQuImExIicsIGIxIHRl eHQgUEFUSCAnJC4iYjEiJywgTkVTVEVEIFBBVEggJyRbKl0nIEFTICJwMSAxIiBDT0xVTU5TIChh MTEgdGV4dCBQQVRIICckLiJhMTEiJykpLCBORVNURUQgUEFUSCAnJFsyXScgQVMgcDIgQ09MVU1O UyAoIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDI6MSIgQ09MVU1OUyAoYTIxIHRleHQgUEFUSCAn JC4iYTIxIicpLCBORVNURUQgUEFUSCAnJFsqXScgQVMgcDIyIENPTFVNTlMgKGEyMiB0ZXh0IFBB VEggJyQuImEyMiInKSkpIFBMQU4gKGpzb25fdGFibGVfcGF0aF8wIE9VVEVSICgocDEgT1VURVIg InAxIDEiKSBVTklPTiAocDIgT1VURVIgKCJwMjoxIiBVTklPTiBwMjIpKSkpKQorKDMgcm93cykK KworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc7CitEUk9QIERPTUFJTiBqc29uYl90ZXN0X2Rv bWFpbjsKKy0tIEpTT05fVEFCTEU6IG9ubHkgb25lIEZPUiBPUkRJTkFMSVRZIGNvbHVtbnMgYWxs b3dlZAorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGlk IEZPUiBPUkRJTkFMSVRZLCBpZDIgRk9SIE9SRElOQUxJVFksIGEgaW50IFBBVEggJyQuYScgRVJS T1IgT04gRU1QVFkpKSBqdDsKK0VSUk9SOiAgY2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIEZPUiBP UkRJTkFMSVRZIGNvbHVtbgorTElORSAxOiAuLi5fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1O UyAoaWQgRk9SIE9SRElOQUxJVFksIGlkMiBGT1IgT1IuLi4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoaWQgRk9SIE9SRElOQUxJVFksIGEg aW50IFBBVEggJyQnIEVSUk9SIE9OIEVNUFRZKSkganQ7CisgaWQgfCBhIAorLS0tLSstLS0KKyAg MSB8IDEKKygxIHJvdykKKworLS0gSlNPTl9UQUJMRTogT04gRU1QVFkvT04gRVJST1IgYmVoYXZp b3IKK1NFTEVDVCAqCitGUk9NCisJKFZBTFVFUyAoJzEnKSwgKCciZXJyIicpKSB2YWxzKGpzKSwK KwlKU09OX1RBQkxFKHZhbHMuanM6Ompzb25iLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJCcp KSBqdDsKKyAganMgICB8IGEgCistLS0tLS0tKy0tLQorIDEgICAgIHwgMQorICJlcnIiIHwgIAor KDIgcm93cykKKworU0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZh bHMoanMpCisJCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUodmFscy5qczo6anNvbmIsICck JyBDT0xVTU5TIChhIGludCBQQVRIICckJykgRVJST1IgT04gRVJST1IpIGp0CisJCU9OIHRydWU7 CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJlcnIiCitT RUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykKKwkJTEVG VCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVNTlMgKGEg aW50IFBBVEggJyQnIEVSUk9SIE9OIEVSUk9SKSkganQKKwkJT04gdHJ1ZTsKK0VSUk9SOiAgaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVyciIKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckLmEnIEVSUk9S IE9OIEVNUFRZKSkganQ7CitFUlJPUjogIG5vIFNRTC9KU09OIGl0ZW0KK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5h JyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0OworRVJST1I6ICBqc29ucGF0aCBt ZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBhbiBvYmplY3QKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdsYXgg JC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJST1IpIGp0OworRVJST1I6ICBubyBTUUwv SlNPTiBpdGVtCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xV TU5TIChhIGludCBQQVRIICckJyAgIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJS T1IpKSBqdDsKKyBhIAorLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5hJyBERUZB VUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CisgYSAKKy0tLQorIDIKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1O UyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBF UlJPUikpIGp0OworIGEgCistLS0KKyAxCisoMSByb3cpCisKKy0tIEpTT05fVEFCTEU6IEVYSVNU UyBQQVRIIHR5cGVzCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBD T0xVTU5TIChhIGludDQgRVhJU1RTIFBBVEggJyQuYScpKTsKKyBhIAorLS0tCisgMAorKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChh IGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKK0VSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29s ZWFuIHRvIHNtYWxsaW50CitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSS4uLgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50OCBFWElTVFMgUEFUSCAn JC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4gdG8gYmlnaW50CitMSU5F IDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAo YSBpbnQ4IEVYSS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEi JywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEnKSk7CitFUlJPUjogIGNh bm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byByZWFsCitMSU5FIDE6IC4uLkVMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBmbG9hdDQgRS4uLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgY2hh cigzKSBFWElTVFMgUEFUSCAnJC5hJykpOworICBhICAKKy0tLS0tCisgZmFsCisoMSByb3cpCisK K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNv biBFWElTVFMgUEFUSCAnJC5hJykpOworRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4g dG8ganNvbgorTElORSAxOiAuLi5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywg JyQnIENPTFVNTlMgKGEganNvbiBFWEkuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb25iIEVYSVNUUyBQQVRIICckLmEnKSk7 CitFUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byBqc29uYgorTElORSAxOiAuLi5F TEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEganNvbmIg RVguLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCistLSBKU09OX1RBQkxFOiBXUkFQUEVSL1FVT1RFUyBjbGF1c2VzIG9uIHNj YWxhciBjb2x1bW5zCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAn JCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJ TkcpKTsKKyAgaXRlbSAgIAorLS0tLS0tLS0tCisgIndvcmxkIgorKDEgcm93KQorCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0 IFBBVEggJyQnIE9NSVQgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsKKyBpdGVtICAKKy0tLS0t LS0KKyB3b3JsZAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3 b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnIEtFRVAg UVVPVEVTKSk7CisgIGl0ZW0gICAKKy0tLS0tLS0tLQorICJ3b3JsZCIKKygxIHJvdykKKworU0VM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0g dGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUykpOworIGl0ZW0gIAorLS0tLS0t LQorIHdvcmxkCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndv cmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgV0lUSE9V VCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CisgIGl0ZW0gICAKKy0tLS0tLS0tLQorICJ3b3JsZCIK KygxIHJvdykKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQn IENPTFVNTlMgKGl0ZW0gdGV4dCBQQVRIICckJyBXSVRIT1VUIFdSQVBQRVIgT01JVCBRVU9URVMp KTsKKyBpdGVtICAKKy0tLS0tLS0KKyB3b3JsZAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IEZPUk1BVCBK U09OIFBBVEggJyQnIFdJVEggV1JBUFBFUikpOworICAgaXRlbSAgICAKKy0tLS0tLS0tLS0tCisg WyJ3b3JsZCJdCisoMSByb3cpCisKKy0tIEVycm9yOiBRVU9URVMgY2xhdXNlIG1lYW5pbmdsZXNz IHdoZW4gV0lUSCBXUkFQUEVSIGlzIHByZXNlbnQKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAn JCcgV0lUSCBXUkFQUEVSIEtFRVAgUVVPVEVTKSk7CitFUlJPUjogIFNRTC9KU09OIFFVT1RFUyBi ZWhhdmlvciBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBXSVRIIFdSQVBQRVIgaXMgdXNlZAor TElORSAxOiAuLi5UICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVN TlMgKGl0ZW0gdGV4dCAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIFdJVEggV1JBUFBFUiBP TUlUIFFVT1RFUykpOworRVJST1I6ICBTUUwvSlNPTiBRVU9URVMgYmVoYXZpb3IgbXVzdCBub3Qg YmUgc3BlY2lmaWVkIHdoZW4gV0lUSCBXUkFQUEVSIGlzIHVzZWQKK0xJTkUgMTogLi4uVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgLi4u CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXgorLS0gSlNPTl9UQUJMRTogbmVzdGVkIHBhdGhzIGFuZCBwbGFucworLS0gU2hvdWxk IGZhaWwgKEpTT05fVEFCTEUgY29sdW1ucyBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aAor LS0gc3BlY2lmaWNhdGlvbnMgaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZCkKK1NFTEVD VCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnW10nLCAnJCcgLS0gQVMgPHBhdGggbmFtZT4g cmVxdWlyZWQgaGVyZQorCUNPTFVNTlMgKAorCQlmb28gaW50IFBBVEggJyQnCisJKQorCVBMQU4g REVGQVVMVCAoVU5JT04pCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgZXhwcmVz c2lvbgorTElORSAyOiAganNvbmIgJ1tdJywgJyQnIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVk IGhlcmUKKyAgICAgICAgICAgICAgICAgICAgIF4KK0RFVEFJTDogIEpTT05fVEFCTEUgcGF0aCBt dXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNhdGlvbiBpZiBleHBsaWNp dCBQTEFOIGNsYXVzZSBpcyB1c2VkCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIg J1tdJywgJyQnIEFTIHBhdGgxCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBDT0xVTU5T ICggLS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorCQkJZm9vIGludCBQQVRIICckJwor CQkpCisJKQorCVBMQU4gREVGQVVMVCAoVU5JT04pCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpT T05fVEFCTEUgZXhwcmVzc2lvbgorTElORSA0OiAgIE5FU1RFRCBQQVRIICckJyBDT0xVTU5TICgg LS0gQVMgPHBhdGggbmFtZT4gcmVxdWlyZWQgaGVyZQorICAgICAgICAgIF4KK0RFVEFJTDogIEpT T05fVEFCTEUgcGF0aCBtdXN0IGNvbnRhaW4gZXhwbGljaXQgQVMgcGF0aG5hbWUgc3BlY2lmaWNh dGlvbiBpZiBleHBsaWNpdCBQTEFOIGNsYXVzZSBpcyB1c2VkCistLSBTaG91bGQgZmFpbCAoY29s dW1uIG5hbWVzIG11c3QgYmUgZGlzdGluY3QpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ1tdJywgJyQnIEFTIGEKKwlDT0xVTU5TICgKKwkJYSBpbnQKKwkpCispIGp0OworRVJS T1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBjb2x1bW4gbmFtZTogYQorTElORSA0OiAgIGEgaW50 CisgICAgICAgICAgXgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICck JyBBUyBhCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQlD T0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNP Tl9UQUJMRSBwYXRoIG5hbWU6IGEKK0xJTkUgNTogICBORVNURUQgUEFUSCAnJCcgQVMgYQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcg QVMgYgorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBs aWNhdGUgSlNPTl9UQUJMRSBwYXRoIG5hbWU6IGIKK0xJTkUgNTogICBORVNURUQgUEFUSCAnJCcg QVMgYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBB UyBhCisJCUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnCisJCUNP TFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVNTlMgKAorCQkJCWMgaW50 CisJCQkpCisJCSkKKwkpCispIGp0OworRVJST1I6ICBkdXBsaWNhdGUgSlNPTl9UQUJMRSBwYXRo IG5hbWU6IGEKK0xJTkUgMTA6ICAgIE5FU1RFRCBQQVRIICckJyBBUyBhCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXgorLS0gSlNPTl9UQUJMRTogcGxhbiB2YWxpZGF0aW9uCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xV TU5TICgKKwkJTkVTVEVEICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09M VU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkK KwlQTEFOIChwMSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuCitMSU5F IDEyOiAgUExBTiAocDEpCisgICAgICAgICAgICAgICAgXgorREVUQUlMOiAgUEFUSCBuYW1lIG1p c21hdGNoOiBleHBlY3RlZCBwMCBidXQgcDEgaXMgZ2l2ZW4uCitTRUxFQ1QgKiBGUk9NIEpTT05f VEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xV TU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFy IGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RF RCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAw KQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHNwZWNpZmljYXRpb24KK0xJTkUg NDogICBORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisgICAgICAgICAgXgorREVUQUlM OiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxIHdhcyBub3QgZm91bmQuCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5T ICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQn IEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBD T0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5T ICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJ KQorCVBMQU4gKHAwIE9VVEVSIHAzKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxF IHNwZWNpZmljYXRpb24KK0xJTkUgNDogICBORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAo CisgICAgICAgICAgXgorREVUQUlMOiAgUExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxIHdh cyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAn JFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMg KAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVT VEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQ QVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1O UyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIFVOSU9OIHAxIFVOSU9OIHAxMSkKKykg anQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJMRSBwbGFuIGNsYXVzZQorTElORSAxMjogIFBM QU4gKHAwIFVOSU9OIHAxIFVOSU9OIHAxMSkKKyAgICAgICAgICAgICAgICBeCitERVRBSUw6ICBF eHBlY3RlZCBJTk5FUiBvciBPVVRFUi4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29u YiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMg cDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50 ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwK KwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFT IHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKHAxIENS T1NTIHAxMykpCispIGp0OworRVJST1I6ICBpbnZhbGlkIEpTT05fVEFCTEUgc3BlY2lmaWNhdGlv bgorTElORSA4OiAgIE5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKyAgICAgICAgICBe CitERVRBSUw6ICBQTEFOIGNsYXVzZSBmb3IgbmVzdGVkIHBhdGggcDIgd2FzIG5vdCBmb3VuZC4K K1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAor CUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQg UEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAy IENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCAp CisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKHAxIENST1NTIHAyKSkKKykganQ7CitFUlJPUjog IGludmFsaWQgSlNPTl9UQUJMRSBzcGVjaWZpY2F0aW9uCitMSU5FIDU6ICAgIE5FU1RFRCBQQVRI ICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKyAgICAgICAgICAgXgorREVUQUlMOiAg UExBTiBjbGF1c2UgZm9yIG5lc3RlZCBwYXRoIHAxMSB3YXMgbm90IGZvdW5kLgorU0VMRUNUICog RlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAo CisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBB UyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09M VU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAo CisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkK KwlQTEFOIChwMCBPVVRFUiAoKHAxIFVOSU9OIHAxMSkgQ1JPU1MgcDIpKQorKSBqdDsKK0VSUk9S OiAgaW52YWxpZCBKU09OX1RBQkxFIHBsYW4gY2xhdXNlCitMSU5FIDEyOiAgUExBTiAocDAgT1VU RVIgKChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBe CitERVRBSUw6ICBQTEFOIGNsYXVzZSBjb250YWlucyBzb21lIGV4dHJhIG9yIGR1cGxpY2F0ZSBz aWJsaW5nIG5vZGVzLgorU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywg JyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5T ICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5F U1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQg UEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVN TlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiAoKHAxIElOTkVSIHAxMSkg Q1JPU1MgcDIpKQorKSBqdDsKK0VSUk9SOiAgaW52YWxpZCBKU09OX1RBQkxFIHNwZWNpZmljYXRp b24KK0xJTkUgNjogICAgTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCAp CisgICAgICAgICAgIF4KK0RFVEFJTDogIFBMQU4gY2xhdXNlIGZvciBuZXN0ZWQgcGF0aCBwMTIg d2FzIG5vdCBmb3VuZC4KK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcs ICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1O UyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVE IFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xV TU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEy IENST1NTIHAxMSkpIENST1NTIHAyKSkKKykganQ7CitFUlJPUjogIGludmFsaWQgSlNPTl9UQUJM RSBzcGVjaWZpY2F0aW9uCitMSU5FIDk6ICAgIE5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1O UyAoIGJheiBpbnQgKQorICAgICAgICAgICBeCitERVRBSUw6ICBQTEFOIGNsYXVzZSBmb3IgbmVz dGVkIHBhdGggcDIxIHdhcyBub3QgZm91bmQuCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJ anNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQ QVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1O UyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBp bnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQg UEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBP VVRFUiAoKHAxIElOTkVSIChwMTIgQ1JPU1MgcDExKSkgQ1JPU1MgKHAyIElOTkVSIHAyMSkpKQor KSBqdDsKKyBiYXIgfCBmb28gfCBiYXogCistLS0tLSstLS0tLSstLS0tLQorKDAgcm93cykKKwor U0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJ3N0cmljdCAkWypdJyAt LSB3aXRob3V0IHJvb3QgcGF0aCBuYW1lCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBB UyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBp bnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkp LAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFOICgocDEgSU5ORVIgKHAx MiBDUk9TUyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkKKykganQ7CitFUlJPUjogIGludmFs aWQgSlNPTl9UQUJMRSBleHByZXNzaW9uCitMSU5FIDI6ICBqc29uYiAnbnVsbCcsICdzdHJpY3Qg JFsqXScgLS0gd2l0aG91dCByb290IHBhdGggbmFtZQorICAgICAgICAgICAgICAgICAgICAgICBe CitERVRBSUw6ICBKU09OX1RBQkxFIHBhdGggbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGhu YW1lIHNwZWNpZmljYXRpb24gaWYgZXhwbGljaXQgUExBTiBjbGF1c2UgaXMgdXNlZAorLS0gSlNP Tl9UQUJMRTogcGxhbiBleGVjdXRpb24KK0NSRUFURSBURU1QIFRBQkxFIGpzb25iX3RhYmxlX3Rl c3QgKGpzIGpzb25iKTsKK0lOU0VSVCBJTlRPIGpzb25iX3RhYmxlX3Rlc3QKK1ZBTFVFUyAoCisJ J1sKKwkJeyJhIjogIDEsICAiYiI6IFtdLCAiYyI6IFtdfSwKKwkJeyJhIjogIDIsICAiYiI6IFsx LCAyLCAzXSwgImMiOiBbMTAsIG51bGwsIDIwXX0sCisJCXsiYSI6ICAzLCAgImIiOiBbMSwgMl0s ICJjIjogW119LAorCQl7IngiOiAiNCIsICJiIjogWzEsIDJdLCAiYyI6IDEyM30KKwkgXScKKyk7 CistLSB1bnNwZWNpZmllZCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9t CisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0 ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQg cGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJp Y3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkp CisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8 ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMg fCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAy MAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAor IDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAob3V0ZXIsIHVu aW9uKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKG91dGVyLCB1bmlvbikK KwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwg ICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8 IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMiB8IDIw CisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwgMyB8IDIwCisg MyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93cykKKworLS0gc3BlY2lm aWMgcGxhbiAocCBvdXRlciAocGIgdW5pb24gcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpz b25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypd JyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGgg J2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu YlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlw bGFuIChwIG91dGVyIChwYiB1bmlvbiBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCist LS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEgfCAgIAorIDIg fCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAgfCAxMAorIDIgfCAg MiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAgIAorIDMgfCAgMyB8 IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAorKDExIHJvd3MpCisK Ky0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVuaW9uIHBiKSkKK3NlbGVjdAorCWp0LioK K2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdz dHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlh IGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVz dGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyAp CisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24gcGIpKQorCSkganQ7CisgbiB8IGEgIHwg YyAgfCBiIAorLS0tKy0tLS0rLS0tLSstLS0KKyAxIHwgIDEgfCAgICB8ICAKKyAyIHwgIDIgfCAx MCB8ICAKKyAyIHwgIDIgfCAgICB8ICAKKyAyIHwgIDIgfCAyMCB8ICAKKyAyIHwgIDIgfCAgICB8 IDEKKyAyIHwgIDIgfCAgICB8IDIKKyAyIHwgIDIgfCAgICB8IDMKKyAzIHwgIDMgfCAgICB8IDEK KyAzIHwgIDMgfCAgICB8IDIKKyA0IHwgLTEgfCAgICB8IDEKKyA0IHwgLTEgfCAgICB8IDIKKygx MSByb3dzKQorCistLSBkZWZhdWx0IHBsYW4gKGlubmVyLCB1bmlvbikKK3NlbGVjdAorCWp0LioK K2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdz dHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlh IGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVz dGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyAp CisJCSkKKwkJcGxhbiBkZWZhdWx0IChpbm5lcikKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAK Ky0tLSstLS0tKy0tLSstLS0tCisgMSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisg MiB8ICAyIHwgMSB8ICAgCisgMiB8ICAyIHwgMSB8IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8 ICAyIHwgMiB8ICAgCisgMiB8ICAyIHwgMiB8IDIwCisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAy IHwgMyB8ICAgCisgMiB8ICAyIHwgMyB8IDIwCisgMyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwg ICB8ICAgCisoMTIgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBpbm5lciAocGIgdW5pb24g cGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVyIChwYiB1bmlvbiBwYykp CisJKSBqdDsKKyBuIHwgYSAgfCBiIHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDIgfCAgMiB8 IDEgfCAgIAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8ICAg fCAxMAorIDIgfCAgMiB8ICAgfCAgIAorIDIgfCAgMiB8ICAgfCAyMAorIDMgfCAgMyB8IDEgfCAg IAorIDMgfCAgMyB8IDIgfCAgIAorIDQgfCAtMSB8IDEgfCAgIAorIDQgfCAtMSB8IDIgfCAgIAor KDEwIHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIGNyb3NzKQorc2VsZWN0CisJanQu KgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMs J3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJ CWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQlu ZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQn ICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGNyb3NzLCBpbm5lcikKKwkpIGp0OworIG4gfCBhIHwg YiB8IGMgIAorLS0tKy0tLSstLS0rLS0tLQorIDIgfCAyIHwgMSB8IDEwCisgMiB8IDIgfCAxIHwg ICAKKyAyIHwgMiB8IDEgfCAyMAorIDIgfCAyIHwgMiB8IDEwCisgMiB8IDIgfCAyIHwgICAKKyAy IHwgMiB8IDIgfCAyMAorIDIgfCAyIHwgMyB8IDEwCisgMiB8IDIgfCAzIHwgICAKKyAyIHwgMiB8 IDMgfCAyMAorKDkgcm93cykKKworLS0gc3BlY2lmaWMgcGxhbiAocCBpbm5lciAocGIgY3Jvc3Mg cGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25f dGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBm b3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1w dHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50 IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1u cyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIChwIGlubmVyIChwYiBjcm9zcyBwYykp CisJKSBqdDsKKyBuIHwgYSB8IGIgfCBjICAKKy0tLSstLS0rLS0tKy0tLS0KKyAyIHwgMiB8IDEg fCAxMAorIDIgfCAyIHwgMSB8ICAgCisgMiB8IDIgfCAxIHwgMjAKKyAyIHwgMiB8IDIgfCAxMAor IDIgfCAyIHwgMiB8ICAgCisgMiB8IDIgfCAyIHwgMjAKKyAyIHwgMiB8IDMgfCAxMAorIDIgfCAy IHwgMyB8ICAgCisgMiB8IDIgfCAzIHwgMjAKKyg5IHJvd3MpCisKKy0tIGRlZmF1bHQgcGxhbiAo b3V0ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0 LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMg KAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQg LTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1u cyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMg cGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKG91dGVy LCBjcm9zcykKKwkpIGp0OworIG4gfCBhICB8IGIgfCBjICAKKy0tLSstLS0tKy0tLSstLS0tCisg MSB8ICAxIHwgICB8ICAgCisgMiB8ICAyIHwgMSB8IDEwCisgMiB8ICAyIHwgMSB8ICAgCisgMiB8 ICAyIHwgMSB8IDIwCisgMiB8ICAyIHwgMiB8IDEwCisgMiB8ICAyIHwgMiB8ICAgCisgMiB8ICAy IHwgMiB8IDIwCisgMiB8ICAyIHwgMyB8IDEwCisgMiB8ICAyIHwgMyB8ICAgCisgMiB8ICAyIHwg MyB8IDIwCisgMyB8ICAzIHwgICB8ICAgCisgNCB8IC0xIHwgICB8ICAgCisoMTIgcm93cykKKwor LS0gc3BlY2lmaWMgcGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgor ZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEg aW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkK KwkJKQorCQlwbGFuIChwIG91dGVyIChwYiBjcm9zcyBwYykpCisJKSBqdDsKKyBuIHwgYSAgfCBi IHwgYyAgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAgMSB8ICAgfCAgIAorIDIgfCAgMiB8IDEg fCAxMAorIDIgfCAgMiB8IDEgfCAgIAorIDIgfCAgMiB8IDEgfCAyMAorIDIgfCAgMiB8IDIgfCAx MAorIDIgfCAgMiB8IDIgfCAgIAorIDIgfCAgMiB8IDIgfCAyMAorIDIgfCAgMiB8IDMgfCAxMAor IDIgfCAgMiB8IDMgfCAgIAorIDIgfCAgMiB8IDMgfCAyMAorIDMgfCAgMyB8ICAgfCAgIAorIDQg fCAtMSB8ICAgfCAgIAorKDEyIHJvd3MpCisKK3NlbGVjdAorCWp0LiosIGIxICsgMTAwIGFzIGIK K2Zyb20KKwlqc29uX3RhYmxlIChqc29uYgorCQknWworCQkJeyJhIjogIDEsICAiYiI6IFtbMSwg MTBdLCBbMl0sIFszLCAzMCwgMzAwXV0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsiYSI6ICAy LCAgImIiOiBbMTAsIDIwXSwgImMiOiBbMSwgbnVsbCwgMl19LAorCQkJeyJ4IjogIjMiLCAiYiI6 IFsxMSwgMjIsIDMzLCA0NF19CisJCSBdJywKKwkJJyRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJ CQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBv biBlcnJvciwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgK KwkJCQliIHRleHQgZm9ybWF0IGpzb24gcGF0aCAnJCcsCisJCQkJbmVzdGVkIHBhdGggJ3N0cmlj dCAkWypdJyBhcyBwYjEgY29sdW1ucyAoCisJCQkJCWIxIGludCBwYXRoICckJworCQkJCSkKKwkJ CSksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoCisJCQkJ YyB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJFsq XScgYXMgcGMxIGNvbHVtbnMgKAorCQkJCQljMSBpbnQgcGF0aCAnJCcKKwkJCQkpCisJCQkpCisJ CSkKKwkJLS1wbGFuIGRlZmF1bHQob3V0ZXIsIGNyb3NzKQorCQlwbGFuKHAgb3V0ZXIgKChwYiBp bm5lciBwYjEpIGNyb3NzIChwYyBvdXRlciBwYzEpKSkKKwkpIGp0OworIG4gfCBhICB8ICAgICAg YiAgICAgICB8IGIxICB8ICBjICAgfCBjMSB8ICBiICAKKy0tLSstLS0tKy0tLS0tLS0tLS0tLS0t Ky0tLS0tKy0tLS0tLSstLS0tKy0tLS0tCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgICAxIHwg MSAgICB8ICAgIHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgICAxIHwgbnVsbCB8ICAg IHwgMTAxCisgMSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgICAxIHwgMiAgICB8ICAgIHwgMTAxCisg MSB8ICAxIHwgWzEsIDEwXSAgICAgIHwgIDEwIHwgMSAgICB8ICAgIHwgMTEwCisgMSB8ICAxIHwg WzEsIDEwXSAgICAgIHwgIDEwIHwgbnVsbCB8ICAgIHwgMTEwCisgMSB8ICAxIHwgWzEsIDEwXSAg ICAgIHwgIDEwIHwgMiAgICB8ICAgIHwgMTEwCisgMSB8ICAxIHwgWzJdICAgICAgICAgIHwgICAy IHwgMSAgICB8ICAgIHwgMTAyCisgMSB8ICAxIHwgWzJdICAgICAgICAgIHwgICAyIHwgbnVsbCB8 ICAgIHwgMTAyCisgMSB8ICAxIHwgWzJdICAgICAgICAgIHwgICAyIHwgMiAgICB8ICAgIHwgMTAy CisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgMSAgICB8ICAgIHwgMTAzCisgMSB8ICAx IHwgWzMsIDMwLCAzMDBdIHwgICAzIHwgbnVsbCB8ICAgIHwgMTAzCisgMSB8ICAxIHwgWzMsIDMw LCAzMDBdIHwgICAzIHwgMiAgICB8ICAgIHwgMTAzCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwg IDMwIHwgMSAgICB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgIDMwIHwgbnVs bCB8ICAgIHwgMTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgIDMwIHwgMiAgICB8ICAgIHwg MTMwCisgMSB8ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgMSAgICB8ICAgIHwgNDAwCisgMSB8 ICAxIHwgWzMsIDMwLCAzMDBdIHwgMzAwIHwgbnVsbCB8ICAgIHwgNDAwCisgMSB8ICAxIHwgWzMs IDMwLCAzMDBdIHwgMzAwIHwgMiAgICB8ICAgIHwgNDAwCisgMiB8ICAyIHwgICAgICAgICAgICAg IHwgICAgIHwgICAgICB8ICAgIHwgICAgCisgMyB8IC0xIHwgICAgICAgICAgICAgIHwgICAgIHwg ICAgICB8ICAgIHwgICAgCisoMjAgcm93cykKKworLS0gU2hvdWxkIHN1Y2NlZWQgKEpTT04gYXJn dW1lbnRzIGFyZSBwYXNzZWQgdG8gcm9vdCBhbmQgbmVzdGVkIHBhdGhzKQorU0VMRUNUICoKK0ZS T00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNCkgeCwKKwlnZW5lcmF0ZV9zZXJpZXMoMSwgMykgeSwK KwlKU09OX1RBQkxFKGpzb25iCisJCSdbWzEsMiwzXSxbMiwzLDQsNV0sWzMsNCw1LDZdXScsCisJ CSdzdHJpY3QgJFsqXSA/IChAWypdIDwgJHgpJworCQlQQVNTSU5HIHggQVMgeCwgeSBBUyB5CisJ CUNPTFVNTlMgKAorCQkJeSB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLAorCQkJTkVTVEVEIFBB VEggJ3N0cmljdCAkWypdID8gKEAgPj0gJHkpJworCQkJQ09MVU1OUyAoCisJCQkJeiBpbnQgUEFU SCAnJCcKKwkJCSkKKwkJKQorCSkganQ7CisgeCB8IHkgfCAgICAgIHkgICAgICAgfCB6IAorLS0t Ky0tLSstLS0tLS0tLS0tLS0tLSstLS0KKyAyIHwgMSB8IFsxLCAyLCAzXSAgICB8IDEKKyAyIHwg MSB8IFsxLCAyLCAzXSAgICB8IDIKKyAyIHwgMSB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMSB8 IFsxLCAyLCAzXSAgICB8IDEKKyAzIHwgMSB8IFsxLCAyLCAzXSAgICB8IDIKKyAzIHwgMSB8IFsx LCAyLCAzXSAgICB8IDMKKyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDIKKyAzIHwgMSB8IFsyLCAz LCA0LCA1XSB8IDMKKyAzIHwgMSB8IFsyLCAzLCA0LCA1XSB8IDQKKyAzIHwgMSB8IFsyLCAzLCA0 LCA1XSB8IDUKKyA0IHwgMSB8IFsxLCAyLCAzXSAgICB8IDEKKyA0IHwgMSB8IFsxLCAyLCAzXSAg ICB8IDIKKyA0IHwgMSB8IFsxLCAyLCAzXSAgICB8IDMKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8 IDIKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDMKKyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDQK KyA0IHwgMSB8IFsyLCAzLCA0LCA1XSB8IDUKKyA0IHwgMSB8IFszLCA0LCA1LCA2XSB8IDMKKyA0 IHwgMSB8IFszLCA0LCA1LCA2XSB8IDQKKyA0IHwgMSB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwg MSB8IFszLCA0LCA1LCA2XSB8IDYKKyAyIHwgMiB8IFsxLCAyLCAzXSAgICB8IDIKKyAyIHwgMiB8 IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMiB8IFsxLCAyLCAzXSAgICB8IDIKKyAzIHwgMiB8IFsx LCAyLCAzXSAgICB8IDMKKyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDIKKyAzIHwgMiB8IFsyLCAz LCA0LCA1XSB8IDMKKyAzIHwgMiB8IFsyLCAzLCA0LCA1XSB8IDQKKyAzIHwgMiB8IFsyLCAzLCA0 LCA1XSB8IDUKKyA0IHwgMiB8IFsxLCAyLCAzXSAgICB8IDIKKyA0IHwgMiB8IFsxLCAyLCAzXSAg ICB8IDMKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDIKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8 IDMKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDQKKyA0IHwgMiB8IFsyLCAzLCA0LCA1XSB8IDUK KyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDMKKyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDQKKyA0 IHwgMiB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwgMiB8IFszLCA0LCA1LCA2XSB8IDYKKyAyIHwg MyB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMyB8IFsxLCAyLCAzXSAgICB8IDMKKyAzIHwgMyB8 IFsyLCAzLCA0LCA1XSB8IDMKKyAzIHwgMyB8IFsyLCAzLCA0LCA1XSB8IDQKKyAzIHwgMyB8IFsy LCAzLCA0LCA1XSB8IDUKKyA0IHwgMyB8IFsxLCAyLCAzXSAgICB8IDMKKyA0IHwgMyB8IFsyLCAz LCA0LCA1XSB8IDMKKyA0IHwgMyB8IFsyLCAzLCA0LCA1XSB8IDQKKyA0IHwgMyB8IFsyLCAzLCA0 LCA1XSB8IDUKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8IDMKKyA0IHwgMyB8IFszLCA0LCA1LCA2 XSB8IDQKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8IDUKKyA0IHwgMyB8IFszLCA0LCA1LCA2XSB8 IDYKKyg1MiByb3dzKQorCistLSBTaG91bGQgZmFpbCAoSlNPTiBhcmd1bWVudHMgYXJlIG5vdCBw YXNzZWQgdG8gY29sdW1uIHBhdGhzKQorU0VMRUNUICoKK0ZST00gSlNPTl9UQUJMRSgKKwlqc29u YiAnWzEsMiwzXScsCisJJyRbKl0gPyAoQCA8ICR4KScKKwkJUEFTU0lORyAxMCBBUyB4CisJCUNP TFVNTlMgKHkgdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckID8gKEAgPCAkeCknKQorCSkganQ7CitF UlJPUjogIGNvdWxkIG5vdCBmaW5kIGpzb25wYXRoIHZhcmlhYmxlICJ4IgorLS0gU2hvdWxkIGZh aWwgKG5vdCBzdXBwb3J0ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJ3siYSI6 IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyBDT0xVTU5TIChmb28gaW50KSk7CitFUlJPUjogIG9u bHkgc3RyaW5nIGNvbnN0YW50cyBhcmUgc3VwcG9ydGVkIGluIEpTT05fVEFCTEUgcGF0aCBzcGVj aWZpY2F0aW9uCitMSU5FIDE6IFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAneyJhIjog MTIzfScsICckJyB8fCAnLicgfHwgJy4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRl eCBmNDg4YWZlZmE1Li44NDQ3MzFkMGQ0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUK QEAgLTEwMyw3ICsxMDMsNyBAQCB0ZXN0OiBzZWxlY3Rfdmlld3MgcG9ydGFsc19wMiBmb3JlaWdu X2tleSBjbHVzdGVyIGRlcGVuZGVuY3kgZ3VjIGJpdG1hcG9wcyBjb21ibwogIyAtLS0tLS0tLS0t CiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMgKEpTT04gcmVsYXRlZCkKICMgLS0t LS0tLS0tLQotdGVzdDoganNvbiBqc29uYiBqc29uX2VuY29kaW5nIGpzb25wYXRoIGpzb25wYXRo X2VuY29kaW5nIGpzb25iX2pzb25wYXRoIHNxbGpzb24gc3FsanNvbl9xdWVyeWZ1bmNzCit0ZXN0 OiBqc29uIGpzb25iIGpzb25fZW5jb2RpbmcganNvbnBhdGgganNvbnBhdGhfZW5jb2RpbmcganNv bmJfanNvbnBhdGggc3FsanNvbiBzcWxqc29uX3F1ZXJ5ZnVuY3Mgc3FsanNvbl9qc29udGFibGUK IAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb25fanNvbnRhYmxlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi43NDVhMjdiY2VmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvc3FsanNvbl9qc29udGFibGUuc3FsCkBAIC0wLDAgKzEsNjc1IEBACist LSBKU09OX1RBQkxFCisKKy0tIFNob3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9u bHkgaW4gRlJPTSBjbGF1c2UpCitTRUxFQ1QgSlNPTl9UQUJMRSgnW10nLCAnJCcpOworCistLSBT aG91bGQgZmFpbCAoanNvbiBhcmd1bWVudCBub3Qgc3VwcG9ydGVkKQorU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKE5VTEwgRk9STUFUIEpTT04sICckJyBDT0xVTU5TIChmb28gdGV4dCkpOworCist LSBTaG91bGQgZmFpbCAobm8gY29sdW1ucykKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShOVUxM LCAnJCcgQ09MVU1OUyAoKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSAoTlVMTDo6anNv bmIsICckJyBDT0xVTU5TICh2MSB0aW1lc3RhbXApKSBBUyBmICh2MSwgdjIpOworCistLSBOVUxM ID0+IGVtcHR5IHRhYmxlCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoTlVMTDo6anNvbmIsICck JyBDT0xVTU5TIChmb28gaW50KSkgYmFyOworCistLQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KGpzb25iICcxMjMnLCAnJCcKKwlDT0xVTU5TIChpdGVtIGludCBQQVRIICckJywgZm9vIGludCkp IGJhcjsKKworLS0gSlNPTl9UQUJMRTogYmFzaWMgZnVuY3Rpb25hbGl0eQorQ1JFQVRFIERPTUFJ TiBqc29uYl90ZXN0X2RvbWFpbiBBUyB0ZXh0IENIRUNLICh2YWx1ZSA8PiAnZm9vJyk7CitDUkVB VEUgVEVNUCBUQUJMRSBqc29uX3RhYmxlX3Rlc3QgKGpzKSBBUworCShWQUxVRVMKKwkJKCcxJyks CisJCSgnW10nKSwKKwkJKCd7fScpLAorCQkoJ1sxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZv byIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0n KQorCSk7CisKKy0tIFJlZ3VsYXIgInVuZm9ybWF0dGVkIiBjb2x1bW5zCitTRUxFQ1QgKgorRlJP TSBqc29uX3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJ CXZhbHMuanM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElO QUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRIICckJywK KwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcs CisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25iX3Rlc3Rf ZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25iIFBBVEgg JyQnCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKworLS0gImZvcm1hdHRlZCIgY29sdW1ucworU0VM RUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZhbHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09O X1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xheCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlk IEZPUiBPUkRJTkFMSVRZLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAor CQkJanNjIGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkg Rk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQn LAorCQkJanNicSBqc29uYiBGT1JNQVQgSlNPTiBQQVRIICckJyBPTUlUIFFVT1RFUworCQkpCisJ KSBqdAorCU9OIHRydWU7CisKKy0tIEVYSVNUUyBjb2x1bW5zCitTRUxFQ1QgKgorRlJPTSBqc29u X3RhYmxlX3Rlc3QgdmFscworCUxFRlQgT1VURVIgSk9JTgorCUpTT05fVEFCTEUoCisJCXZhbHMu anM6Ompzb25iLCAnbGF4ICRbKl0nCisJCUNPTFVNTlMgKAorCQkJaWQgRk9SIE9SRElOQUxJVFks CisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVY SVNUUyBQQVRIICckLmFhYScsCisJCQlleGlzdHMzIGludCBFWElTVFMgUEFUSCAnc3RyaWN0ICQu YWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCQkJZXhpc3RzNCB0ZXh0IEVYSVNUUyBQQVRIICdzdHJp Y3QgJC5hYWEnIEZBTFNFIE9OIEVSUk9SCisJCSkKKwkpIGp0CisJT04gdHJ1ZTsKKworLS0gT3Ro ZXIgbWlzY2VsbGFub3VzIGNoZWNrcworU0VMRUNUICoKK0ZST00ganNvbl90YWJsZV90ZXN0IHZh bHMKKwlMRUZUIE9VVEVSIEpPSU4KKwlKU09OX1RBQkxFKAorCQl2YWxzLmpzOjpqc29uYiwgJ2xh eCAkWypdJworCQlDT0xVTU5TICgKKwkJCWlkIEZPUiBPUkRJTkFMSVRZLAorCQkJYWFhIGludCwg LS0gImFhYSIgaGFzIGltcGxpY2l0IHBhdGggJyQuImFhYSInCisJCQlhYWExIGludCBQQVRIICck LmFhYScsCisJCQlqczIganNvbiBQQVRIICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJ VEggV1JBUFBFUiwKKwkJCWpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEg aW50W10gUEFUSCAnJCcsCisJCQl0YSB0ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQ QVRIICckJworCQkpCisJKSBqdAorCU9OIHRydWU7CisKKy0tIEpTT05fVEFCTEU6IFRlc3QgYmFj a3dhcmQgcGFyc2luZworCitDUkVBVEUgVklFVyBqc29uYl90YWJsZV92aWV3IEFTCitTRUxFQ1Qg KiBGUk9NCisJSlNPTl9UQUJMRSgKKwkJanNvbmIgJ251bGwnLCAnbGF4ICRbKl0nIFBBU1NJTkcg MSArIDIgQVMgYSwganNvbiAnImZvbyInIEFTICJiIGMiCisJCUNPTFVNTlMgKAorCQkJaWQgRk9S IE9SRElOQUxJVFksCisJCQkiaW50IiBpbnQgUEFUSCAnJCcsCisJCQkidGV4dCIgdGV4dCBQQVRI ICckJywKKwkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAorCQkJImJvb2wiIGJvb2wgUEFU SCAnJCcsCisJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywKKwkJCSJkb21haW4iIGpzb25i X3Rlc3RfZG9tYWluIFBBVEggJyQnLAorCQkJanMganNvbiBQQVRIICckJywKKwkJCWpiIGpzb25i IFBBVEggJyQnLAorCQkJanN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanNj IGNoYXIoNCkgRk9STUFUIEpTT04gIFBBVEggJyQnLAorCQkJanN2IHZhcmNoYXIoNCkgRk9STUFU IEpTT04gIFBBVEggJyQnLAorCQkJanNiIGpzb25iICAgRk9STUFUIEpTT04gUEFUSCAnJCcsCisJ CQlqc2JxIGpzb25iIEZPUk1BVCBKU09OIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJYWFhIGlu dCwgLS0gaW1wbGljaXQgcGF0aCAnJC4iYWFhIicsCisJCQlhYWExIGludCBQQVRIICckLmFhYScs CisJCQlleGlzdHMxIGJvb2wgRVhJU1RTIFBBVEggJyQuYWFhJywKKwkJCWV4aXN0czIgaW50IEVY SVNUUyBQQVRIICckLmFhYScgVFJVRSBPTiBFUlJPUiwKKwkJCWV4aXN0czMgdGV4dCBFWElTVFMg UEFUSCAnc3RyaWN0ICQuYWFhJyBVTktOT1dOIE9OIEVSUk9SLAorCisJCQlqczIganNvbiBQQVRI ICckJywKKwkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKKwkJCWpzYjJxIGpz b25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLAorCQkJaWEgaW50W10gUEFUSCAnJCcsCisJCQl0YSB0 ZXh0W10gUEFUSCAnJCcsCisJCQlqYmEganNvbmJbXSBQQVRIICckJywKKworCQkJTkVTVEVEIFBB VEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKAorCQkJCWExIGludCwKKwkJCQlORVNURUQgUEFUSCAn JFsqXScgQVMgInAxIDEiIENPTFVNTlMgKAorCQkJCQlhMTEgdGV4dAorCQkJCSksCisJCQkJYjEg dGV4dAorCQkJKSwKKwkJCU5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICgKKwkJCQlO RVNURUQgUEFUSCAnJFsqXScgQVMgInAyOjEiIENPTFVNTlMgKAorCQkJCQlhMjEgdGV4dAorCQkJ CSksCisJCQkJTkVTVEVEIFBBVEggJyRbKl0nIEFTIHAyMiBDT0xVTU5TICgKKwkJCQkJYTIyIHRl eHQKKwkJCQkpCisJCQkpCisJCSkKKwkpOworCitcc3YganNvbmJfdGFibGVfdmlldworCitFWFBM QUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpIFNFTEVDVCAqIEZST00ganNvbmJfdGFibGVfdmlldzsK KworRFJPUCBWSUVXIGpzb25iX3RhYmxlX3ZpZXc7CitEUk9QIERPTUFJTiBqc29uYl90ZXN0X2Rv bWFpbjsKKworLS0gSlNPTl9UQUJMRTogb25seSBvbmUgRk9SIE9SRElOQUxJVFkgY29sdW1ucyBh bGxvd2VkCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAo aWQgRk9SIE9SRElOQUxJVFksIGlkMiBGT1IgT1JESU5BTElUWSwgYSBpbnQgUEFUSCAnJC5hJyBF UlJPUiBPTiBFTVBUWSkpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywg JyQnIENPTFVNTlMgKGlkIEZPUiBPUkRJTkFMSVRZLCBhIGludCBQQVRIICckJyBFUlJPUiBPTiBF TVBUWSkpIGp0OworCistLSBKU09OX1RBQkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhhdmlvcgor U0VMRUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpLAorCUpT T05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJykpIGp0 OworCitTRUxFQ1QgKgorRlJPTQorCShWQUxVRVMgKCcxJyksICgnImVyciInKSkgdmFscyhqcykK KwkJTEVGVCBPVVRFUiBKT0lOCisJSlNPTl9UQUJMRSh2YWxzLmpzOjpqc29uYiwgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJyQnKSBFUlJPUiBPTiBFUlJPUikganQKKwkJT04gdHJ1ZTsKKworU0VM RUNUICoKK0ZST00KKwkoVkFMVUVTICgnMScpLCAoJyJlcnIiJykpIHZhbHMoanMpCisJCUxFRlQg T1VURVIgSk9JTgorCUpTT05fVEFCTEUodmFscy5qczo6anNvbmIsICckJyBDT0xVTU5TIChhIGlu dCBQQVRIICckJyBFUlJPUiBPTiBFUlJPUikpIGp0CisJCU9OIHRydWU7CisKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckLmEnIEVS Uk9SIE9OIEVNUFRZKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAn JCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnc3RyaWN0ICQuYScgRVJST1IgT04gRU1QVFkpIEVSUk9S IE9OIEVSUk9SKSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBD T0xVTU5TIChhIGludCBQQVRIICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSkgRVJST1IgT04gRVJS T1IpIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xV TU5TIChhIGludCBQQVRIICckJyAgIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJS T1IpKSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJ3N0cmljdCAkLmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIg T04gRVJST1IpKSBqdDsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQn IENPTFVNTlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxU IDIgT04gRVJST1IpKSBqdDsKKworLS0gSlNPTl9UQUJMRTogRVhJU1RTIFBBVEggdHlwZXMKK1NF TEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50NCBF WElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSIn LCAnJCcgQ09MVU1OUyAoYSBpbnQyIEVYSVNUUyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludDggRVhJU1RTIFBBVEgg JyQuYScpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEnKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGNoYXIoMykgRVhJU1RTIFBBVEggJyQuYScp KTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEg anNvbiBFWElTVFMgUEFUSCAnJC5hJykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uYiBFWElTVFMgUEFUSCAnJC5hJykpOworCistLSBK U09OX1RBQkxFOiBXUkFQUEVSL1FVT1RFUyBjbGF1c2VzIG9uIHNjYWxhciBjb2x1bW5zCitTRUxF Q1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAnJCcgQ09MVU1OUyAoaXRlbSB0 ZXh0IFBBVEggJyQnIEtFRVAgUVVPVEVTIE9OIFNDQUxBUiBTVFJJTkcpKTsKK1NFTEVDVCAqIEZS T00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFU SCAnJCcgT01JVCBRVU9URVMgT04gU0NBTEFSIFNUUklORykpOworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNP TiBQQVRIICckJyBLRUVQIFFVT1RFUykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25i ICcid29ybGQiJywgJyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBP TUlUIFFVT1RFUykpOworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcid29ybGQiJywg JyQnIENPTFVNTlMgKGl0ZW0gdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJyBXSVRIT1VUIFdSQVBQ RVIgS0VFUCBRVU9URVMpKTsKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxk IicsICckJyBDT0xVTU5TIChpdGVtIHRleHQgUEFUSCAnJCcgV0lUSE9VVCBXUkFQUEVSIE9NSVQg UVVPVEVTKSk7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICck JyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgV0lUSCBXUkFQUEVSKSk7 CisKKy0tIEVycm9yOiBRVU9URVMgY2xhdXNlIG1lYW5pbmdsZXNzIHdoZW4gV0lUSCBXUkFQUEVS IGlzIHByZXNlbnQKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnIndvcmxkIicsICck JyBDT0xVTU5TIChpdGVtIHRleHQgRk9STUFUIEpTT04gUEFUSCAnJCcgV0lUSCBXUkFQUEVSIEtF RVAgUVVPVEVTKSk7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJ3b3JsZCInLCAn JCcgQ09MVU1OUyAoaXRlbSB0ZXh0IFBBVEggJyQnIFdJVEggV1JBUFBFUiBPTUlUIFFVT1RFUykp OworCistLSBKU09OX1RBQkxFOiBuZXN0ZWQgcGF0aHMgYW5kIHBsYW5zCisKKy0tIFNob3VsZCBm YWlsIChKU09OX1RBQkxFIGNvbHVtbnMgbXVzdCBjb250YWluIGV4cGxpY2l0IEFTIHBhdGgKKy0t IHNwZWNpZmljYXRpb25zIGlmIGV4cGxpY2l0IFBMQU4gY2xhdXNlIGlzIHVzZWQpCitTRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnIC0tIEFTIDxwYXRoIG5hbWU+IHJl cXVpcmVkIGhlcmUKKwlDT0xVTU5TICgKKwkJZm9vIGludCBQQVRIICckJworCSkKKwlQTEFOIERF RkFVTFQgKFVOSU9OKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25i ICdbXScsICckJyBBUyBwYXRoMQorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAnJCcgQ09MVU1O UyAoIC0tIEFTIDxwYXRoIG5hbWU+IHJlcXVpcmVkIGhlcmUKKwkJCWZvbyBpbnQgUEFUSCAnJCcK KwkJKQorCSkKKwlQTEFOIERFRkFVTFQgKFVOSU9OKQorKSBqdDsKKworLS0gU2hvdWxkIGZhaWwg KGNvbHVtbiBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0KQorU0VMRUNUICogRlJPTSBKU09OX1RBQkxF KAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09MVU1OUyAoCisJCWEgaW50CisJKQorKSBqdDsK KworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbXScsICckJyBBUyBhCisJQ09M VU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcgQVMgYQorCQlDT0xVTU5TICgKKwkJ CWMgaW50CisJCSkKKwkpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoCisJanNv bmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCWIgaW50LAorCQlORVNURUQgUEFUSCAnJCcgQVMg YgorCQlDT0xVTU5TICgKKwkJCWMgaW50CisJCSkKKwkpCispIGp0OworCitTRUxFQ1QgKiBGUk9N IEpTT05fVEFCTEUoCisJanNvbmIgJ1tdJywgJyQnCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRI ICckJyBBUyBhCisJCUNPTFVNTlMgKAorCQkJYiBpbnQKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQn CisJCUNPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIGEKKwkJCUNPTFVNTlMgKAorCQkJ CWMgaW50CisJCQkpCisJCSkKKwkpCispIGp0OworCistLSBKU09OX1RBQkxFOiBwbGFuIHZhbGlk YXRpb24KKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0n IEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNU RUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAn JCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFT IHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGlu dCApCisJCSkKKwkpCisJUExBTiAocDEpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoCisJanNvbmIgJ251bGwnLCAnJFsqXScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBB VEggJyQnIEFTIHAxIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5T ICggZm9vIGludCApLAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGlu dCApCisJCSksCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMjEgQ09MVU1OUyAoIGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwKQor KSBqdDsKKworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0n IEFTIHAwCisJQ09MVU1OUyAoCisJCU5FU1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJ CU5FU1RFRCBQQVRIICckJyBBUyBwMTEgQ09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQ QVRIICckJyBBUyBwMTIgQ09MVU1OUyAoIGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDIgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBi YXogaW50ICkKKwkJKQorCSkKKwlQTEFOIChwMCBPVVRFUiBwMykKKykganQ7CisKK1NFTEVDVCAq IEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMg KAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcg QVMgcDExIENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENP TFVNTlMgKCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMg KAorCQkJTkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkp CisJUExBTiAocDAgVU5JT04gcDEgVU5JT04gcDExKQorKSBqdDsKKworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKAorCWpzb25iICdudWxsJywgJyRbKl0nIEFTIHAwCisJQ09MVU1OUyAoCisJCU5F U1RFRCBQQVRIICckJyBBUyBwMSBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTEg Q09MVU1OUyAoIGZvbyBpbnQgKSwKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMTIgQ09MVU1OUyAo IGJhciBpbnQgKQorCQkpLAorCQlORVNURUQgUEFUSCAnJCcgQVMgcDIgQ09MVU1OUyAoCisJCQlO RVNURUQgUEFUSCAnJCcgQVMgcDIxIENPTFVNTlMgKCBiYXogaW50ICkKKwkJKQorCSkKKwlQTEFO IChwMCBPVVRFUiAocDEgQ1JPU1MgcDEzKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQg UEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVN TlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIg aW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAg T1VURVIgKHAxIENST1NTIHAyKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgK Kwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQgUEFUSCAn JCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVNTlMgKCBm b28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIgaW50ICkK KwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVEIFBBVEgg JyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAgT1VURVIg KChwMSBVTklPTiBwMTEpIENST1NTIHAyKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00gSlNPTl9U QUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlORVNURUQg UEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDExIENPTFVN TlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMgKCBiYXIg aW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExBTiAocDAg T1VURVIgKChwMSBJTk5FUiBwMTEpIENST1NTIHAyKSkKKykganQ7CisKK1NFTEVDVCAqIEZST00g SlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICckWypdJyBBUyBwMAorCUNPTFVNTlMgKAorCQlO RVNURUQgUEFUSCAnJCcgQVMgcDEgQ09MVU1OUyAoCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEx IENPTFVNTlMgKCBmb28gaW50ICksCisJCQlORVNURUQgUEFUSCAnJCcgQVMgcDEyIENPTFVNTlMg KCBiYXIgaW50ICkKKwkJKSwKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAyIENPTFVNTlMgKAorCQkJ TkVTVEVEIFBBVEggJyQnIEFTIHAyMSBDT0xVTU5TICggYmF6IGludCApCisJCSkKKwkpCisJUExB TiAocDAgT1VURVIgKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENST1NTIHAyKSkKKykganQ7 CisKK1NFTEVDVCAqIEZST00gSlNPTl9UQUJMRSgKKwlqc29uYiAnbnVsbCcsICdzdHJpY3QgJFsq XScgQVMgcDAKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAor CQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAo IGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKHAwIE9VVEVSICgocDEgSU5ORVIgKHAxMiBDUk9T UyBwMTEpKSBDUk9TUyAocDIgSU5ORVIgcDIxKSkpCispIGp0OworCitTRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoCisJanNvbmIgJ251bGwnLCAnc3RyaWN0ICRbKl0nIC0tIHdpdGhvdXQgcm9vdCBw YXRoIG5hbWUKKwlDT0xVTU5TICgKKwkJTkVTVEVEIFBBVEggJyQnIEFTIHAxIENPTFVNTlMgKAor CQkJTkVTVEVEIFBBVEggJyQnIEFTIHAxMSBDT0xVTU5TICggZm9vIGludCApLAorCQkJTkVTVEVE IFBBVEggJyQnIEFTIHAxMiBDT0xVTU5TICggYmFyIGludCApCisJCSksCisJCU5FU1RFRCBQQVRI ICckJyBBUyBwMiBDT0xVTU5TICgKKwkJCU5FU1RFRCBQQVRIICckJyBBUyBwMjEgQ09MVU1OUyAo IGJheiBpbnQgKQorCQkpCisJKQorCVBMQU4gKChwMSBJTk5FUiAocDEyIENST1NTIHAxMSkpIENS T1NTIChwMiBJTk5FUiBwMjEpKQorKSBqdDsKKworLS0gSlNPTl9UQUJMRTogcGxhbiBleGVjdXRp b24KKworQ1JFQVRFIFRFTVAgVEFCTEUganNvbmJfdGFibGVfdGVzdCAoanMganNvbmIpOworCitJ TlNFUlQgSU5UTyBqc29uYl90YWJsZV90ZXN0CitWQUxVRVMgKAorCSdbCisJCXsiYSI6ICAxLCAg ImIiOiBbXSwgImMiOiBbXX0sCisJCXsiYSI6ICAyLCAgImIiOiBbMSwgMiwgM10sICJjIjogWzEw LCBudWxsLCAyMF19LAorCQl7ImEiOiAgMywgICJiIjogWzEsIDJdLCAiYyI6IFtdfSwKKwkJeyJ4 IjogIjQiLCAiYiI6IFsxLCAyXSwgImMiOiAxMjN9CisJIF0nCispOworCistLSB1bnNwZWNpZmll ZCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVf dGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJ Y29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScg ZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBw YiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5j WypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJKSBqdDsKKworLS0g ZGVmYXVsdCBwbGFuIChvdXRlciwgdW5pb24pCitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJf dGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJsZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFz IHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBvcmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4 ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypd JyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJp Y3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4g ZGVmYXVsdCAob3V0ZXIsIHVuaW9uKQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0 ZXIgKHBiIHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0 IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1 bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZh dWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNv bHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0n IGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAo cGIgdW5pb24gcGMpKQorCSkganQ7CisKKy0tIHNwZWNpZmljIHBsYW4gKHAgb3V0ZXIgKHBjIHVu aW9uIHBiKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlq c29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJ CW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9u IGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBi IGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNv bHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxhbiAocCBvdXRlciAocGMgdW5pb24g cGIpKQorCSkganQ7CisKKy0tIGRlZmF1bHQgcGxhbiAoaW5uZXIsIHVuaW9uKQorc2VsZWN0CisJ anQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQu anMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwK KwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQg cGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGgg JyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGlubmVyKQorCSkganQ7CisKKy0tIHNwZWNpZmlj IHBsYW4gKHAgaW5uZXIgKHBiIHVuaW9uIHBjKSkKK3NlbGVjdAorCWp0LioKK2Zyb20KKwlqc29u Yl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJpY3QgJFsqXScg YXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGludCBwYXRoICds YXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJCSkKKwkJcGxh biAocCBpbm5lciAocGIgdW5pb24gcGMpKQorCSkganQ7CisKKy0tIGRlZmF1bHQgcGxhbiAoaW5u ZXIsIGNyb3NzKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25iX3RhYmxlX3Rlc3QganR0LAor CWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCisJCWNvbHVtbnMgKAor CQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEg b24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAo IGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMg Y29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFuIGRlZmF1bHQgKGNyb3NzLCBp bm5lcikKKwkpIGp0OworCistLSBzcGVjaWZpYyBwbGFuIChwIGlubmVyIChwYiBjcm9zcyBwYykp CitzZWxlY3QKKwlqdC4qCitmcm9tCisJanNvbmJfdGFibGVfdGVzdCBqdHQsCisJanNvbl90YWJs ZSAoCisJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKKwkJY29sdW1ucyAoCisJCQluIGZvciBv cmRpbmFsaXR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwK KwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0 aCAnJCcgKSwKKwkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICgg YyBpbnQgcGF0aCAnJCcgKQorCQkpCisJCXBsYW4gKHAgaW5uZXIgKHBiIGNyb3NzIHBjKSkKKwkp IGp0OworCistLSBkZWZhdWx0IHBsYW4gKG91dGVyLCBjcm9zcykKK3NlbGVjdAorCWp0LioKK2Zy b20KKwlqc29uYl90YWJsZV90ZXN0IGp0dCwKKwlqc29uX3RhYmxlICgKKwkJanR0LmpzLCdzdHJp Y3QgJFsqXScgYXMgcAorCQljb2x1bW5zICgKKwkJCW4gZm9yIG9yZGluYWxpdHksCisJCQlhIGlu dCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJbmVzdGVkIHBhdGggJ3N0 cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAorCQkJbmVzdGVk IHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCisJ CSkKKwkJcGxhbiBkZWZhdWx0IChvdXRlciwgY3Jvc3MpCisJKSBqdDsKKworLS0gc3BlY2lmaWMg cGxhbiAocCBvdXRlciAocGIgY3Jvc3MgcGMpKQorc2VsZWN0CisJanQuKgorZnJvbQorCWpzb25i X3RhYmxlX3Rlc3QganR0LAorCWpzb25fdGFibGUgKAorCQlqdHQuanMsJ3N0cmljdCAkWypdJyBh cyBwCisJCWNvbHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xh eCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsq XScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCisJCQluZXN0ZWQgcGF0aCAnc3Ry aWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKKwkJKQorCQlwbGFu IChwIG91dGVyIChwYiBjcm9zcyBwYykpCisJKSBqdDsKKworCitzZWxlY3QKKwlqdC4qLCBiMSAr IDEwMCBhcyBiCitmcm9tCisJanNvbl90YWJsZSAoanNvbmIKKwkJJ1sKKwkJCXsiYSI6ICAxLCAg ImIiOiBbWzEsIDEwXSwgWzJdLCBbMywgMzAsIDMwMF1dLCAiYyI6IFsxLCBudWxsLCAyXX0sCisJ CQl7ImEiOiAgMiwgICJiIjogWzEwLCAyMF0sICJjIjogWzEsIG51bGwsIDJdfSwKKwkJCXsieCI6 ICIzIiwgImIiOiBbMTEsIDIyLCAzMywgNDRdfQorCQkgXScsCisJCSckWypdJyBhcyBwCisJCWNv bHVtbnMgKAorCQkJbiBmb3Igb3JkaW5hbGl0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZXJyb3IsCisJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoCisJCQkJYiB0ZXh0IGZvcm1hdCBqc29uIHBhdGggJyQnLAorCQkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJFsqXScgYXMgcGIxIGNvbHVtbnMgKAorCQkJCQliMSBpbnQgcGF0aCAnJCcK KwkJCQkpCisJCQkpLAorCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVt bnMgKAorCQkJCWMgdGV4dCBmb3JtYXQganNvbiBwYXRoICckJywKKwkJCQluZXN0ZWQgcGF0aCAn c3RyaWN0ICRbKl0nIGFzIHBjMSBjb2x1bW5zICgKKwkJCQkJYzEgaW50IHBhdGggJyQnCisJCQkJ KQorCQkJKQorCQkpCisJCS0tcGxhbiBkZWZhdWx0KG91dGVyLCBjcm9zcykKKwkJcGxhbihwIG91 dGVyICgocGIgaW5uZXIgcGIxKSBjcm9zcyAocGMgb3V0ZXIgcGMxKSkpCisJKSBqdDsKKworLS0g U2hvdWxkIHN1Y2NlZWQgKEpTT04gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gcm9vdCBhbmQgbmVz dGVkIHBhdGhzKQorU0VMRUNUICoKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgNCkgeCwKKwln ZW5lcmF0ZV9zZXJpZXMoMSwgMykgeSwKKwlKU09OX1RBQkxFKGpzb25iCisJCSdbWzEsMiwzXSxb MiwzLDQsNV0sWzMsNCw1LDZdXScsCisJCSdzdHJpY3QgJFsqXSA/IChAWypdIDwgJHgpJworCQlQ QVNTSU5HIHggQVMgeCwgeSBBUyB5CisJCUNPTFVNTlMgKAorCQkJeSB0ZXh0IEZPUk1BVCBKU09O IFBBVEggJyQnLAorCQkJTkVTVEVEIFBBVEggJ3N0cmljdCAkWypdID8gKEAgPj0gJHkpJworCQkJ Q09MVU1OUyAoCisJCQkJeiBpbnQgUEFUSCAnJCcKKwkJCSkKKwkJKQorCSkganQ7CisKKy0tIFNo b3VsZCBmYWlsIChKU09OIGFyZ3VtZW50cyBhcmUgbm90IHBhc3NlZCB0byBjb2x1bW4gcGF0aHMp CitTRUxFQ1QgKgorRlJPTSBKU09OX1RBQkxFKAorCWpzb25iICdbMSwyLDNdJywKKwknJFsqXSA/ IChAIDwgJHgpJworCQlQQVNTSU5HIDEwIEFTIHgKKwkJQ09MVU1OUyAoeSB0ZXh0IEZPUk1BVCBK U09OIFBBVEggJyQgPyAoQCA8ICR4KScpCisJKSBqdDsKKworLS0gU2hvdWxkIGZhaWwgKG5vdCBz dXBwb3J0ZWQpCitTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJ3siYSI6IDEyM30nLCAn JCcgfHwgJy4nIHx8ICdhJyBDT0xVTU5TIChmb28gaW50KSk7CmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDUzZTEzZmU3MjkuLjcwYzllZmVkZjYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xMzIyLDYgKzEzMjIsNyBAQCBKc29uUGF0aE11dGFibGVDb250ZXh0CiBKc29uUGF0 aFBhcnNlSXRlbQogSnNvblBhdGhQYXJzZVJlc3VsdAogSnNvblBhdGhQcmVkaWNhdGVDYWxsYmFj aworSnNvblBhdGhTcGVjCiBKc29uUGF0aFN0cmluZwogSnNvblBhdGhWYXJDYWxsYmFjawogSnNv blBhdGhWYXJpYWJsZQpAQCAtMTMzMSw2ICsxMzMyLDIwIEBAIEpzb25SZXR1cm5pbmcKIEpzb25T Y2FsYXJFeHByCiBKc29uU2VtQWN0aW9uCiBKc29uU2VyaWFsaXplRXhwcgorSnNvblRhYmxlCitK c29uVGFibGVDb2x1bW4KK0pzb25UYWJsZUNvbHVtblR5cGUKK0pzb25UYWJsZUNvbnRleHQKK0pz b25UYWJsZVBhcnNlQ29udGV4dAorSnNvblRhYmxlSm9pblN0YXRlCitKc29uVGFibGVQbGFuCitK c29uVGFibGVQbGFuU3BlYworSnNvblRhYmxlUGxhblN0YXRlCitKc29uVGFibGVQbGFuU3RhdGVU eXBlCitKc29uVGFibGVQbGFuSm9pblR5cGUKK0pzb25UYWJsZVBsYW5UeXBlCitKc29uVGFibGVT Y2FuU3RhdGUKK0pzb25UYWJsZVNpYmxpbmcKIEpzb25Ub2tlblR5cGUKIEpzb25UcmFuc2Zvcm1T dHJpbmdWYWx1ZXNBY3Rpb24KIEpzb25UeXBlQ2F0ZWdvcnkKQEAgLTI3OTYsNiArMjgxMSw3IEBA IFRhYmxlRnVuYwogVGFibGVGdW5jUm91dGluZQogVGFibGVGdW5jU2NhbgogVGFibGVGdW5jU2Nh blN0YXRlCitUYWJsZUZ1bmNUeXBlCiBUYWJsZUluZm8KIFRhYmxlTGlrZUNsYXVzZQogVGFibGVT YW1wbGVDbGF1c2UKLS0gCjIuMzUuMwoK --0000000000000586fb060f89a4b0--