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 1seWIK-008EUf-0k for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Aug 2024 08:57:20 +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 1seWII-00Fgec-Hn for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Aug 2024 08:57:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1seWIH-00FgeU-CK for pgsql-hackers@lists.postgresql.org; Thu, 15 Aug 2024 08:57:18 +0000 Received: from mail-io1-xd30.google.com ([2607:f8b0:4864:20::d30]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1seWI7-004pv1-AF for pgsql-hackers@lists.postgresql.org; Thu, 15 Aug 2024 08:57:15 +0000 Received: by mail-io1-xd30.google.com with SMTP id ca18e2360f4ac-824ee14f7bfso4751339f.1 for ; Thu, 15 Aug 2024 01:57:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1723712226; x=1724317026; darn=lists.postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=y8e2Vl8Qkj5hsMO9W5MysNkdPPyavJ/4D/NP3bwScVo=; b=BW50EA8jBCikN7HDm1U/hIlyU63qi5LeNB7OZ3Po01XUlpr8bYGtoxvEL9Fv9uJmLs KVRrlGaCYq09+hNgJ8qYNmkka7zFMCBwgNlO828Wgq0o8AC6rfbIh5jQ6ueR8vtxd+xF LkRXs3zclblVNe9Jtpp4u09ZT+xH9eB86Axu0K93T9BYoljHcC3lDVS2GDbz+wicfS6n KUgJdGLnN/V/jrtgJnNzEUju0lUGT4Rb8BLgAiMTTGylB70yKLF+suQfBz2NKGSUPcv8 rOTwse3bX3hO2SV6dF0dYDd+zGT/mVogXI3QwiqhXFlR9piUsXcxaDIfvP6YFiyRuNyM QV1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723712226; x=1724317026; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=y8e2Vl8Qkj5hsMO9W5MysNkdPPyavJ/4D/NP3bwScVo=; b=rxVmEXfyjXkpUu9dE77/15uOlNBMkfgrXLSYIxXIglR+0sMFx0e1C0S97Z9sW97vdM QFx37zli6VyMNhiUZzwM+tBWSuJy3x15yNGfpTzI2qcden/iUajmRhs+4ife+dvN2l+F PuVyULJZYbScy2+hxv1FL5uqf6WWVriOJGdQCezw/FidxgdVPX3gxC2sJzNDok9/VE3K 2udwt/vZZ0x1IjdFgsngB2JhCvzDYiw39bMvf8LkT+ubEjTnHRgIaL+lQL9nynMQdS+r nbJFreITX4L1HnxFC1MWirsl840bJ2gK4JfEKPEBc3Tv0a1FKfp5sGtTQcaZKYKRPcWc H/QA== X-Forwarded-Encrypted: i=1; AJvYcCVMwtJ14qPj1cdcRjyMTWzwksSAYxwRs9rT1pzTOOWolGZZeZYq2u9CgfKZXvzYKZB8widgc0OTeAgWt7ac14h9ko1DKb3Xn5RtAO24vYmSn4Fd X-Gm-Message-State: AOJu0Yw8OKk9WqrPVUw9les23YZc0ix/M2Cw8etJfVeQh7C9rbJs2RSM hyGKPDPlACFAWKMB/WIW43KxSshkoC7iwHxXLVAchS2R8n/VEAdxq+YTSqmwUg== X-Google-Smtp-Source: AGHT+IEoY203l+wLlAuc1c19V3DHJ75LyhcTWrm7nV+YN3WxId+LaxdeIAYyf/riY0Saq2qjIRtzlA== X-Received: by 2002:a05:6e02:1c21:b0:375:a282:c96b with SMTP id e9e14a558f8ab-39d124ce31amr67413835ab.27.1723712225923; Thu, 15 Aug 2024 01:57:05 -0700 (PDT) Received: from jeff-laptop.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-7c6b6367d01sm742872a12.89.2024.08.15.01.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Aug 2024 01:57:05 -0700 (PDT) Message-ID: Subject: Re: Statistics Import and Export From: Jeff Davis To: Corey Huinker Cc: Matthias van de Meent , Bruce Momjian , Tom Lane , Nathan Bossart , Magnus Hagander , Stephen Frost , Ashutosh Bapat , Peter Smith , PostgreSQL Hackers , Tomas Vondra , alvherre@alvh.no-ip.org Date: Thu, 15 Aug 2024 01:57:03 -0700 In-Reply-To: References: <1798867.1712376328@sss.pgh.pa.us> <20240417165053.GA3253364@nathanxps13> <0943da4616837682c65e4620050b8b1e86fe3503.camel@j-davis.com> <3156140.1713817153@sss.pgh.pa.us> <1d70aabacd379ed8f9a7db1bf4ca22d1f5cd943f.camel@j-davis.com> <3228677.1713844341@sss.pgh.pa.us> <10f251857a13cfc799079ba89d50b135c974a18e.camel@j-davis.com> <1a8ec76a863539ec2f849f247ee0e99dff8303e2.camel@j-davis.com> <85eaf260a4be2e08376145a9d6a69d9d74e89daa.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-bygrKYh0rTj97arNuzeL" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-bygrKYh0rTj97arNuzeL Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, 2024-08-04 at 01:09 -0400, Corey Huinker wrote: >=20 > > I believe 0001 and 0002 are in good shape API-wise, and I can start > > getting those committed. I will try to clean up the code in the > > process. Attached v26j. I'm slowly refactoring it and rediscovering some of the interesting corners in deriving the right information to store the stats. There's still a ways to go, though. The error paths could also use some work. Regards, Jeff Davis --=-bygrKYh0rTj97arNuzeL Content-Disposition: attachment; filename="v26j-0001-Create-function-pg_set_relation_stats.patch" Content-Type: text/x-patch; name="v26j-0001-Create-function-pg_set_relation_stats.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkMzgwMDhiMGU2MGUwMjQxYzg2ZjU4M2M5NTE3NjNjYzAxZDFlMjcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAyNCBKdWwgMjAyNCAyMzo0NToyNiAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djI2aiAxLzJdIENyZWF0ZSBmdW5jdGlvbiBwZ19zZXRfcmVsYXRpb25fc3RhdHMuCgpUaGlzIGZ1 bmN0aW9uIGlzIHVzZWQgdG8gdHdlYWsgc3RhdGlzdGljcyBvbiBhbnkgcmVsYXRpb24gdGhhdCB0 aGUgdXNlcgpvd25zLgoKVGhlIGZpcnN0IHBhcmFtZXRlciwgcmVsYXRpb24sIGlzIHVzZWQgdG8g aWRlbnRpZnkgdGhlIHRoZSByZWxhdGlvbiB0byBiZQptb2RpZmllZC4KClRoZSByZW1haW5pbmcg cGFyYW1ldGVycyBjb3JyZXNwb25kIHRvIHRoZSBzdGF0aXN0aWNzIGF0dHJpYnV0ZXMgaW4KcGdf Y2xhc3M6IHJlbHBhZ2VzLCByZWx0dXBsZXMsIGFuZCByZWxhbGxpc3ZpYmxlLgoKVGhpcyBmdW5j dGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gdHdlYWsgcGdfY2xhc3Mgc3RhdGlzdGljcyB2YWx1ZXMs CmFsbG93aW5nIHRoZSB1c2VyIHRvIGluZmxhdGUgcm93Y291bnRzLCB0YWJsZSBzaXplLCBhbmQg dmlzaWJpbGl0eSB0byBzZWUKd2hhdCBlZmZlY3QgdGhvc2UgY2hhbmdlcyB3aWxsIGhhdmUgb24g dGhlIHRoZSBxdWVyeSBwbGFubmVyLgoKVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUu CgpBdXRob3I6IENvcmV5IEh1aW5rZXIKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D QURrTE09ZTBqTTdtMEdGVjQ0bk50dkwyMkN0bkZVdStwZWtwcENWRT1ET0JlNThSVFFAbWFpbC5n bWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAg fCAgNjUgKysrKysrKwogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9NYWtlZmlsZSAgICAgICAgICAg IHwgICAxICsKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvaW1wb3J0X3N0YXRzLmMgICAgICB8IDIx MiArKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWVzb24uYnVp bGQgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICAgICAgfCAgIDkgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0 IHwgIDk5ICsrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAg ICAgICB8ICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbCAgICAg IHwgIDc5ICsrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQ2NyBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9pbXBv cnRfc3RhdHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv c3RhdHNfaW1wb3J0Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N0YXRzX2ltcG9ydC5zcWwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA1ZGQ5NWQ3M2ExYS4uMDJkOTNmNmM5MjUgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMu c2dtbApAQCAtMjk5MzgsNiArMjk5MzgsNzEgQEAgREVUQUlMOiAgTWFrZSBzdXJlIHBnX3dhbF9y ZXBsYXlfd2FpdCgpIGlzbid0IGNhbGxlZCB3aXRoaW4gYSB0cmFuc2FjdGlvbiB3aXRoIGEKICAg ICBpbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZGlzayBmaWxlcyBhc3NvY2lhdGVkIHdpdGgg ZGF0YWJhc2Ugb2JqZWN0cy4KICAgIDwvcGFyYT4KIAorICAgPHRhYmxlIGlkPSJmdW5jdGlvbnMt YWRtaW4tc3RhdHNpbXBvcnQiPgorICAgIDx0aXRsZT5EYXRhYmFzZSBPYmplY3QgU3RhdGlzdGlj cyBJbXBvcnQgRnVuY3Rpb25zPC90aXRsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgICA8 dGhlYWQ+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIEZ1bmN0aW9uCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBEZXNjcmlwdGlvbgorICAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhlYWQ+CisKKyAgICAgPHRib2R5Pgor ICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+CisgICAg ICAgIDxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgIDxpbmRleHRlcm0+Cisg ICAgICAgICAgPHByaW1hcnk+cGdfc2V0X3JlbGF0aW9uX3N0YXRzPC9wcmltYXJ5PgorICAgICAg ICAgPC9pbmRleHRlcm0+CisgICAgICAgICA8ZnVuY3Rpb24+cGdfc2V0X3JlbGF0aW9uX3N0YXRz PC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnJlbGF0aW9uPC9wYXJhbWV0ZXI+IDx0eXBlPnJlZ2Ns YXNzPC90eXBlPiwgPHBhcmFtZXRlcj5yZWxwYWdlczwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2Vy PC90eXBlPiwgPHBhcmFtZXRlcj5yZWx0dXBsZXM8L3BhcmFtZXRlcj4gPHR5cGU+cmVhbDwvdHlw ZT4sIDxwYXJhbWV0ZXI+cmVsYWxsdmlzaWJsZTwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90 eXBlPiApCisgICAgICAgICA8cmV0dXJudmFsdWU+dm9pZDwvcmV0dXJudmFsdWU+CisgICAgICAg IDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBVcGRhdGVzIHRhYmxlLWxldmVsIHN0 YXRpc3RpY3MgZm9yIHRoZSBnaXZlbiByZWxhdGlvbiB0byB0aGUKKyAgICAgICAgIHNwZWNpZmll ZCB2YWx1ZXMuIFRoZSBwYXJhbWV0ZXJzIGNvcnJlc3BvbmQgdG8gY29sdW1ucyBpbiA8bGluawor ICAgICAgICAgbGlua2VuZD0iY2F0YWxvZy1wZy1jbGFzcyI+PHN0cnVjdG5hbWU+cGdfY2xhc3M8 L3N0cnVjdG5hbWU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAg ICAgICAgIE9yZGluYXJpbHksIHRoZXNlIHN0YXRpc3RpY3MgYXJlIGNvbGxlY3RlZCBhdXRvbWF0 aWNhbGx5IG9yIHVwZGF0ZWQKKyAgICAgICAgIGFzIGEgcGFydCBvZiA8eHJlZiBsaW5rZW5kPSJz cWwtdmFjdXVtIi8+IG9yIDx4cmVmCisgICAgICAgICBsaW5rZW5kPSJzcWwtYW5hbHl6ZSIvPiwg c28gaXQncyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcworICAgICAgICAgZnVuY3Rpb24uIEhv d2V2ZXIsIGl0IG1heSBiZSB1c2VmdWwgd2hlbiB0ZXN0aW5nIHRoZSBlZmZlY3RzIG9mCisgICAg ICAgICBzdGF0aXN0aWNzIG9uIHRoZSBwbGFubmVyIHRvIHVuZGVyc3RhbmQgb3IgYW50aWNpcGF0 ZSBwbGFuIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUgPGxpdGVyYWw+TUFJTlRBSU48L2xpdGVyYWw+IHBy aXZpbGVnZSBvbgorICAgICAgICAgdGhlIHRhYmxlIG9yIGJlIHRoZSBvd25lciBvZiB0aGUgZGF0 YWJhc2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgdmFs dWUgb2YgPHN0cnVjdGZpZWxkPnJlbHBhZ2VzPC9zdHJ1Y3RmaWVsZD4gbXVzdCBiZSBncmVhdGVy IHRoYW4KKyAgICAgICAgIG9yIGVxdWFsIHRvIDxsaXRlcmFsPjA8L2xpdGVyYWw+LAorICAgICAg ICAgPHN0cnVjdGZpZWxkPnJlbHR1cGxlczwvc3RydWN0ZmllbGQ+IG11c3QgYmUgZ3JlYXRlciB0 aGFuIG9yIGVxdWFsIHRvCisgICAgICAgICA8bGl0ZXJhbD4tMS4wPC9saXRlcmFsPiwgYW5kIDxz dHJ1Y3RmaWVsZD5yZWxhbGx2aXNpYmxlPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICAgIG11c3QgYmUg Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorICAgICAgICA8 L3BhcmE+CisgICAgICAgIDx3YXJuaW5nPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgQ2hh bmdlcyBtYWRlIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGxpa2VseSB0byBiZSBvdmVyd3JpdHRlbiBi eSA8bGluaworICAgICAgICAgIGxpbmtlbmQ9ImF1dG92YWN1dW0iPmF1dG92YWN1dW08L2xpbms+ IChvciBtYW51YWwKKyAgICAgICAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IG9yIDxjb21t YW5kPkFOQUxZWkU8L2NvbW1hbmQ+KSBhbmQgc2hvdWxkCisgICAgICAgICAgYmUgY29uc2lkZXJl ZCB0ZW1wb3JhcnkuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICBUaGUgc2lnbmF0dXJlIG9mIHRoaXMgZnVuY3Rpb24gbWF5IGNoYW5nZSBpbiBuZXcgbWFqb3Ig cmVsZWFzZXMgaWYKKyAgICAgICAgICB0aGVyZSBhcmUgY2hhbmdlcyB0byB0aGUgc3RhdGlzdGlj cyBiZWluZyB0cmFja2VkLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3dhcm5pbmc+Cisg ICAgICAgPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3Rib2R5PgorICAgIDwvdGdyb3Vw PgorICAgPC90YWJsZT4KKwogICAgPHRhYmxlIGlkPSJmdW5jdGlvbnMtYWRtaW4tZGJsb2NhdGlv biI+CiAgICAgPHRpdGxlPkRhdGFiYXNlIE9iamVjdCBMb2NhdGlvbiBGdW5jdGlvbnM8L3RpdGxl PgogICAgIDx0Z3JvdXAgY29scz0iMSI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9NYWtlZmlsZQppbmRleCA4OWNm OGMyNzk3My4uNWU3NzZjMDIyMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv TWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9NYWtlZmlsZQpAQCAtMTUsNiAr MTUsNyBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpT ID0gXAogCWRlcGVuZGVuY2llcy5vIFwKIAlleHRlbmRlZF9zdGF0cy5vIFwKKwlpbXBvcnRfc3Rh dHMubyBcCiAJbWN2Lm8gXAogCW12ZGlzdGluY3QubwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdGF0aXN0aWNzL2ltcG9ydF9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9pbXBv cnRfc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGMwYTJi YWIzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2ltcG9ydF9z dGF0cy5jCkBAIC0wLDAgKzEsMjEyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGltcG9ydF9z dGF0cy5jCisgKgorICoJICBQb3N0Z3JlU1FMIHN0YXRpc3RpY3MgaW1wb3J0CisgKgorICogQ29k ZSBzdXBwb3J0aW5nIHRoZSBkaXJlY3QgaW1wb3J0YXRpb24gb2YgcmVsYXRpb24gc3RhdGlzdGlj cywgc2ltaWxhciB0bworICogd2hhdCBpcyBkb25lIGJ5IHRoZSBBTkFMWVpFIGNvbW1hbmQuCisg KgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI0LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNB VElPTgorICogICAgICAgc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9pbXBvcnRfc3RhdHMuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKgorICogQSByb2xlIGhhcyBwcml2aWxlZ2VzIHRv IHNldCBzdGF0aXN0aWNzIG9uIHRoZSByZWxhdGlvbiBpZiBhbnkgb2YgdGhlCisgKiBmb2xsb3dp bmcgYXJlIHRydWU6CisgKiAgIC0gdGhlIHJvbGUgb3ducyB0aGUgY3VycmVudCBkYXRhYmFzZSBh bmQgdGhlIHJlbGF0aW9uIGlzIG5vdCBzaGFyZWQKKyAqICAgLSB0aGUgcm9sZSBoYXMgdGhlIE1B SU5UQUlOIHByaXZpbGVnZSBvbiB0aGUgcmVsYXRpb24KKyAqCisgKi8KK3N0YXRpYyBib29sCitj aGVja19jYW5fdXBkYXRlX3N0YXRzKFJlbGF0aW9uIHJlbCkKK3sKKwlPaWQJCQlyZWxpZCA9IFJl bGF0aW9uR2V0UmVsaWQocmVsKTsKKwlGb3JtX3BnX2NsYXNzIHJlbHR1cGxlID0gcmVsLT5yZF9y ZWw7CisKKwlyZXR1cm4gKChvYmplY3Rfb3duZXJjaGVjayhEYXRhYmFzZVJlbGF0aW9uSWQsIE15 RGF0YWJhc2VJZCwgR2V0VXNlcklkKCkpCisJCQkgJiYgIXJlbHR1cGxlLT5yZWxpc3NoYXJlZCkg fHwKKwkJCXBnX2NsYXNzX2FjbGNoZWNrKHJlbGlkLCBHZXRVc2VySWQoKSwgQUNMX01BSU5UQUlO KSA9PSBBQ0xDSEVDS19PSyk7Cit9CisKKy8qCisgKiBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgbW9k aWZ5aW5nIHN0YXRpc3RpY3MgZm9yIGEgcmVsYXRpb24uCisgKi8KK3N0YXRpYyBib29sCityZWxh dGlvbl9zdGF0aXN0aWNzX3VwZGF0ZShPaWQgcmVsb2lkLCBpbnQgdmVyc2lvbiwgaW50MzIgcmVs cGFnZXMsCisJCQkJCQkgICBmbG9hdDQgcmVsdHVwbGVzLCBpbnQzMiByZWxhbGx2aXNpYmxlLCBp bnQgZWxldmVsKQoreworCVJlbGF0aW9uCQlyZWxhdGlvbjsKKwlSZWxhdGlvbgkJY3JlbDsKKwlI ZWFwVHVwbGUJCWN0dXA7CisJRm9ybV9wZ19jbGFzcwlwZ2Nmb3JtOworCisJaWYgKHJlbHBhZ2Vz IDwgLTEpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJyZWxwYWdlcyBjYW5ub3QgYmUgPCAt MSIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAocmVsdHVwbGVzIDwgLTEuMCkKKwl7 CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInJlbHR1cGxlcyBjYW5ub3QgYmUgPCAtMS4wIikpKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChyZWxhbGx2aXNpYmxlIDwgLTEpCisJeworCQll cmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJyZWxhbGx2aXNpYmxlIGNhbm5vdCBiZSA8IC0xIikpKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogT3BlbiByZWxhdGlvbiB3aXRoIFNoYXJlVXBk YXRlRXhjbHVzaXZlTG9jaywgY29uc2lzdGVudCB3aXRoCisJICogQU5BTFlaRS4gT25seSBuZWVk ZWQgZm9yIHBlcm1pc3Npb24gY2hlY2sgYW5kIHRoZW4gd2UgY2xvc2UgaXQgKGJ1dAorCSAqIHJl dGFpbiB0aGUgbG9jaykuCisJICovCisJcmVsYXRpb24gPSB0cnlfdGFibGVfb3BlbihyZWxvaWQs IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwlpZiAoIXJlbGF0aW9uKQorCXsKKwkJZWxv ZyhlbGV2ZWwsICJjb3VsZCBub3Qgb3BlbiByZWxhdGlvbiB3aXRoIE9JRCAldSIsIHJlbG9pZCk7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoIWNoZWNrX2Nhbl91cGRhdGVfc3RhdHMocmVs YXRpb24pKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNV RkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Ig cmVsYXRpb24gJXMiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSkp OworCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xvY2spOworCisJLyoKKwkgKiBUYWtlIFJvd0V4 Y2x1c2l2ZUxvY2sgb24gcGdfY2xhc3MsIGNvbnNpc3RlbnQgd2l0aAorCSAqIHZhY191cGRhdGVf cmVsc3RhdHMoKS4KKwkgKi8KKwljcmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQs IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJY3R1cCA9IFNlYXJjaFN5c0NhY2hlQ29weTEoUkVMT0lE LCBPYmplY3RJZEdldERhdHVtKHJlbG9pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjdHVw KSkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX0lO X1VTRSksCisJCQkJIGVycm1zZygicGdfY2xhc3MgZW50cnkgZm9yIHJlbGlkICV1IG5vdCBmb3Vu ZCIsIHJlbG9pZCkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXBnY2Zvcm0gPSAoRm9ybV9w Z19jbGFzcykgR0VUU1RSVUNUKGN0dXApOworCisJLyogb25seSB1cGRhdGUgcGdfY2xhc3MgaWYg dGhlcmUgaXMgYSBtZWFuaW5nZnVsIGNoYW5nZSAqLworCWlmIChwZ2Nmb3JtLT5yZWxwYWdlcyAh PSByZWxwYWdlcyB8fAorCQlwZ2Nmb3JtLT5yZWx0dXBsZXMgIT0gcmVsdHVwbGVzIHx8CisJCXBn Y2Zvcm0tPnJlbGFsbHZpc2libGUgIT0gcmVsYWxsdmlzaWJsZSkKKwl7CisJCWludAkJCWNvbHNb M10gPSB7CisJCQlBbnVtX3BnX2NsYXNzX3JlbHBhZ2VzLAorCQkJQW51bV9wZ19jbGFzc19yZWx0 dXBsZXMsCisJCQlBbnVtX3BnX2NsYXNzX3JlbGFsbHZpc2libGUsCisJCX07CisJCURhdHVtCQl2 YWx1ZXNbM10gPSB7CisJCQlJbnQzMkdldERhdHVtKHJlbHBhZ2VzKSwKKwkJCUZsb2F0NEdldERh dHVtKHJlbHR1cGxlcyksCisJCQlJbnQzMkdldERhdHVtKHJlbGFsbHZpc2libGUpLAorCQl9Owor CQlib29sCQludWxsc1szXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKworCQlUdXBsZURlc2MJ dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoY3JlbCk7CisJCUhlYXBUdXBsZQluZXd0dXA7CisK KwkJQ2F0YWxvZ0luZGV4U3RhdGUgaW5kc3RhdGUgPSBDYXRhbG9nT3BlbkluZGV4ZXMoY3JlbCk7 CisKKwkJbmV3dHVwID0gaGVhcF9tb2RpZnlfdHVwbGVfYnlfY29scyhjdHVwLCB0dXBkZXNjLCAz LCBjb2xzLCB2YWx1ZXMsCisJCQkJCQkJCQkJICAgbnVsbHMpOworCisJCUNhdGFsb2dUdXBsZVVw ZGF0ZVdpdGhJbmZvKGNyZWwsICZuZXd0dXAtPnRfc2VsZiwgbmV3dHVwLCBpbmRzdGF0ZSk7CisJ CWhlYXBfZnJlZXR1cGxlKG5ld3R1cCk7CisJCUNhdGFsb2dDbG9zZUluZGV4ZXMoaW5kc3RhdGUp OworCX0KKworCS8qIHJlbGVhc2UgdGhlIGxvY2ssIGNvbnNpc3RlbnQgd2l0aCB2YWNfdXBkYXRl X3JlbHN0YXRzKCkgKi8KKwl0YWJsZV9jbG9zZShjcmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CVBHX1JFVFVSTl9CT09MKHRydWUpOworfQorCisvKgorICogU2V0IHN0YXRpc3RpY3MgZm9yIGEg Z2l2ZW4gcGdfY2xhc3MgZW50cnkuCisgKgorICogVXNlIGEgdHJhbnNhY3Rpb25hbCB1cGRhdGUs IGFuZCBhc3N1bWUgc3RhdGlzdGljcyBjb21lIGZyb20gdGhlIGN1cnJlbnQKKyAqIHNlcnZlciB2 ZXJzaW9uLgorICoKKyAqIE5vdCBpbnRlbmRlZCBmb3IgYnVsayBpbXBvcnQgb2Ygc3RhdGlzdGlj cyBmcm9tIG9sZGVyIHZlcnNpb25zLgorICovCitEYXR1bQorcGdfc2V0X3JlbGF0aW9uX3N0YXRz KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsb2lkOworCWludAkJCXZlcnNpb24gPSBQ R19WRVJTSU9OX05VTTsKKwlpbnQJCQllbGV2ZWwgPSBFUlJPUjsKKwlpbnQzMgkJcmVscGFnZXM7 CisJZmxvYXQJCXJlbHR1cGxlczsKKwlpbnQzMgkJcmVsYWxsdmlzaWJsZTsKKworCWlmIChQR19B UkdJU05VTEwoMCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygicmVsYXRpb24gY2Fubm90IGJlIE5V TEwiKSkpOworCWVsc2UKKwkJcmVsb2lkID0gUEdfR0VUQVJHX09JRCgwKTsKKworCWlmIChQR19B UkdJU05VTEwoMSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygicmVscGFnZXMgY2Fubm90IGJlIE5V TEwiKSkpOworCWVsc2UKKwkJcmVscGFnZXMgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwlpZiAo UEdfQVJHSVNOVUxMKDIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInJlbHR1cGxlcyBjYW5ub3Qg YmUgTlVMTCIpKSk7CisJZWxzZQorCQlyZWx0dXBsZXMgPSBQR19HRVRBUkdfRkxPQVQ0KDIpOwor CisJaWYgKFBHX0FSR0lTTlVMTCgzKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJyZWxhbGx2aXNp YmxlIGNhbm5vdCBiZSBOVUxMIikpKTsKKwllbHNlCisJCXJlbGFsbHZpc2libGUgPSBQR19HRVRB UkdfSU5UMzIoMyk7CisKKworCXJlbGF0aW9uX3N0YXRpc3RpY3NfdXBkYXRlKHJlbG9pZCwgdmVy c2lvbiwgcmVscGFnZXMsIHJlbHR1cGxlcywKKwkJCQkJCQkgICByZWxhbGx2aXNpYmxlLCBlbGV2 ZWwpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21lc29uLmJ1aWxk CmluZGV4IDczYjI5YTNkNTBhLi44NDlkZjNiZjMyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21lc29u LmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZGVw ZW5kZW5jaWVzLmMnLAogICAnZXh0ZW5kZWRfc3RhdHMuYycsCisgICdpbXBvcnRfc3RhdHMuYycs CiAgICdtY3YuYycsCiAgICdtdmRpc3RpbmN0LmMnLAogKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggNGFiYzZkOTUyNjIuLmQ3MDBkZDUwZjdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK QEAgLTEyMjU1LDQgKzEyMjU1LDEzIEBACiAgIHByb2FyZ25hbWVzID0+ICd7c3VtbWFyaXplZF90 bGksc3VtbWFyaXplZF9sc24scGVuZGluZ19sc24sc3VtbWFyaXplcl9waWR9JywKICAgcHJvc3Jj ID0+ICdwZ19nZXRfd2FsX3N1bW1hcml6ZXJfc3RhdGUnIH0sCiAKKyMgU3RhdGlzdGljcyBJbXBv cnQKK3sgb2lkID0+ICc4MDQ4JywKKyAgZGVzY3IgPT4gJ3NldCBzdGF0aXN0aWNzIG9uIHJlbGF0 aW9uJywKKyAgcHJvbmFtZSA9PiAncGdfc2V0X3JlbGF0aW9uX3N0YXRzJywgcHJvdm9sYXRpbGUg PT4gJ3YnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0 dHlwZSA9PiAndm9pZCcsCisgIHByb2FyZ3R5cGVzID0+ICdvaWQgaW50NCBmbG9hdDQgaW50NCcs CisgIHByb2FyZ25hbWVzID0+ICd7cmVsYXRpb24scmVscGFnZXMscmVsdHVwbGVzLHJlbGFsbHZp c2libGV9JywKKyAgcHJvc3JjID0+ICdwZ19zZXRfcmVsYXRpb25fc3RhdHMnIH0sCisKIF0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfaW1wb3J0Lm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfaW1wb3J0Lm91dApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjcyN2NjZTk3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQKQEAgLTAsMCArMSw5OSBA QAorQ1JFQVRFIFNDSEVNQSBzdGF0c19pbXBvcnQ7CitDUkVBVEUgVFlQRSBzdGF0c19pbXBvcnQu Y29tcGxleF90eXBlIEFTICgKKyAgICBhIGludGVnZXIsCisgICAgYiByZWFsLAorICAgIGMgdGV4 dCwKKyAgICBkIGRhdGUsCisgICAgZSBqc29uYik7CitDUkVBVEUgVEFCTEUgc3RhdHNfaW1wb3J0 LnRlc3QoCisgICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQsCisgICAg Y29tcCBzdGF0c19pbXBvcnQuY29tcGxleF90eXBlLAorICAgIGFyYW5nZSBpbnQ0cmFuZ2UsCisg ICAgdGFncyB0ZXh0W10KKyk7CistLSBzdGFydGluZyBzdGF0cworU0VMRUNUIHJlbHBhZ2VzLCBy ZWx0dXBsZXMsIHJlbGFsbHZpc2libGUKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdzdGF0 c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzOworIHJlbHBhZ2VzIHwgcmVsdHVwbGVzIHwgcmVsYWxs dmlzaWJsZSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgICAgICAg IDAgfCAgICAgICAgLTEgfCAgICAgICAgICAgICAwCisoMSByb3cpCisKKy0tIGVycm9yOiByZWdj bGFzcyBub3QgZm91bmQKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0aW9uX3N0 YXRzKAorICAgICAgICByZWxhdGlvbiA9PiAwOjpPaWQsCisgICAgICAgIHJlbHBhZ2VzID0+IDE3 OjppbnRlZ2VyLAorICAgICAgICByZWx0dXBsZXMgPT4gNDAwLjA6OnJlYWwsCisgICAgICAgIHJl bGFsbHZpc2libGUgPT4gNDo6aW50ZWdlcik7CitFUlJPUjogIGNvdWxkIG5vdCBvcGVuIHJlbGF0 aW9uIHdpdGggT0lEIDAKKy0tIGVycm9yOiByZWxwYWdlcyBOVUxMCitTRUxFQ1QKKyAgICBwZ19j YXRhbG9nLnBnX3NldF9yZWxhdGlvbl9zdGF0cygKKyAgICAgICAgcmVsYXRpb24gPT4gJ3N0YXRz X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgICAgIHJlbHBhZ2VzID0+IE5VTEw6OmludGVn ZXIsCisgICAgICAgIHJlbHR1cGxlcyA9PiA0MDAuMDo6cmVhbCwKKyAgICAgICAgcmVsYWxsdmlz aWJsZSA9PiA0OjppbnRlZ2VyKTsKK0VSUk9SOiAgcmVscGFnZXMgY2Fubm90IGJlIE5VTEwKKy0t IGVycm9yOiByZWx0dXBsZXMgTlVMTAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfcmVs YXRpb25fc3RhdHMoCisgICAgICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJl Z2NsYXNzLAorICAgICAgICByZWxwYWdlcyA9PiAxNzo6aW50ZWdlciwKKyAgICAgICAgcmVsdHVw bGVzID0+IE5VTEw6OnJlYWwsCisgICAgICAgIHJlbGFsbHZpc2libGUgPT4gNDo6aW50ZWdlcik7 CitFUlJPUjogIHJlbHR1cGxlcyBjYW5ub3QgYmUgTlVMTAorLS0gZXJyb3I6IHJlbGFsbHZpc2li bGUgTlVMTAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfcmVsYXRpb25fc3RhdHMoCisg ICAgICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgICAg ICByZWxwYWdlcyA9PiAxNzo6aW50ZWdlciwKKyAgICAgICAgcmVsdHVwbGVzID0+IDQwMC4wOjpy ZWFsLAorICAgICAgICByZWxhbGx2aXNpYmxlID0+IE5VTEw6OmludGVnZXIpOworRVJST1I6ICBy ZWxhbGx2aXNpYmxlIGNhbm5vdCBiZSBOVUxMCistLSBuYW1lZCBhcmd1bWVudHMKK1NFTEVDVAor ICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0aW9uX3N0YXRzKAorICAgICAgICByZWxhdGlvbiA9 PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgcmVscGFnZXMgPT4gMTc6 OmludGVnZXIsCisgICAgICAgIHJlbHR1cGxlcyA9PiA0MDAuMDo6cmVhbCwKKyAgICAgICAgcmVs YWxsdmlzaWJsZSA9PiA0OjppbnRlZ2VyKTsKKyBwZ19zZXRfcmVsYXRpb25fc3RhdHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgcmVscGFnZXMsIHJlbHR1 cGxlcywgcmVsYWxsdmlzaWJsZQorRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3N0YXRzX2lt cG9ydC50ZXN0Jzo6cmVnY2xhc3M7CisgcmVscGFnZXMgfCByZWx0dXBsZXMgfCByZWxhbGx2aXNp YmxlIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKyAgICAgICAxNyB8 ICAgICAgIDQwMCB8ICAgICAgICAgICAgIDQKKygxIHJvdykKKworLS0gcG9zaXRpb25hbCBhcmd1 bWVudHMKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0aW9uX3N0YXRzKAorICAg ICAgICAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAgMTg6OmludGVnZXIs CisgICAgICAgIDQwMS4wOjpyZWFsLAorICAgICAgICA1OjppbnRlZ2VyKTsKKyBwZ19zZXRfcmVs YXRpb25fc3RhdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxF Q1QgcmVscGFnZXMsIHJlbHR1cGxlcywgcmVsYWxsdmlzaWJsZQorRlJPTSBwZ19jbGFzcworV0hF UkUgb2lkID0gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3M7CisgcmVscGFnZXMgfCByZWx0 dXBsZXMgfCByZWxhbGx2aXNpYmxlIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0KKyAgICAgICAxOCB8ICAgICAgIDQwMSB8ICAgICAgICAgICAgIDUKKygxIHJvdykKKwor RFJPUCBTQ0hFTUEgc3RhdHNfaW1wb3J0IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVz IHRvIDIgb3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0eXBlIHN0YXRz X2ltcG9ydC5jb21wbGV4X3R5cGUKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgc3RhdHNfaW1wb3J0 LnRlc3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDI0MjllYzJiYmFhLi44NWZj ODViZmEwMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0yOCw3ICsyOCw3IEBA IHRlc3Q6IHN0cmluZ3MgbWQ1IG51bWVyb2xvZ3kgcG9pbnQgbHNlZyBsaW5lIGJveCBwYXRoIHBv bHlnb24gY2lyY2xlIGRhdGUgdGltZSB0CiAjIGdlb21ldHJ5IGRlcGVuZHMgb24gcG9pbnQsIGxz ZWcsIGxpbmUsIGJveCwgcGF0aCwgcG9seWdvbiwgY2lyY2xlCiAjIGhvcm9sb2d5IGRlcGVuZHMg b24gZGF0ZSwgdGltZSwgdGltZXR6LCB0aW1lc3RhbXAsIHRpbWVzdGFtcHR6LCBpbnRlcnZhbAog IyAtLS0tLS0tLS0tCi10ZXN0OiBnZW9tZXRyeSBob3JvbG9neSB0c3R5cGVzIHJlZ2V4IHR5cGVf c2FuaXR5IG9wcl9zYW5pdHkgbWlzY19zYW5pdHkgY29tbWVudHMgZXhwcmVzc2lvbnMgdW5pY29k ZSB4aWQgbXZjYyBkYXRhYmFzZQordGVzdDogZ2VvbWV0cnkgaG9yb2xvZ3kgdHN0eXBlcyByZWdl eCB0eXBlX3Nhbml0eSBvcHJfc2FuaXR5IG1pc2Nfc2FuaXR5IGNvbW1lbnRzIGV4cHJlc3Npb25z IHVuaWNvZGUgeGlkIG12Y2MgZGF0YWJhc2Ugc3RhdHNfaW1wb3J0CiAKICMgLS0tLS0tLS0tLQog IyBMb2FkIGh1Z2UgYW1vdW50cyBvZiBkYXRhCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9zdGF0c19pbXBvcnQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0 LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWZmZDViODkyYmYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19pbXBvcnQuc3Fs CkBAIC0wLDAgKzEsNzkgQEAKK0NSRUFURSBTQ0hFTUEgc3RhdHNfaW1wb3J0OworCitDUkVBVEUg VFlQRSBzdGF0c19pbXBvcnQuY29tcGxleF90eXBlIEFTICgKKyAgICBhIGludGVnZXIsCisgICAg YiByZWFsLAorICAgIGMgdGV4dCwKKyAgICBkIGRhdGUsCisgICAgZSBqc29uYik7CisKK0NSRUFU RSBUQUJMRSBzdGF0c19pbXBvcnQudGVzdCgKKyAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLAor ICAgIG5hbWUgdGV4dCwKKyAgICBjb21wIHN0YXRzX2ltcG9ydC5jb21wbGV4X3R5cGUsCisgICAg YXJhbmdlIGludDRyYW5nZSwKKyAgICB0YWdzIHRleHRbXQorKTsKKworLS0gc3RhcnRpbmcgc3Rh dHMKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzLCByZWxhbGx2aXNpYmxlCitGUk9NIHBnX2Ns YXNzCitXSEVSRSBvaWQgPSAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzczsKKworLS0gZXJy b3I6IHJlZ2NsYXNzIG5vdCBmb3VuZAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfcmVs YXRpb25fc3RhdHMoCisgICAgICAgIHJlbGF0aW9uID0+IDA6Ok9pZCwKKyAgICAgICAgcmVscGFn ZXMgPT4gMTc6OmludGVnZXIsCisgICAgICAgIHJlbHR1cGxlcyA9PiA0MDAuMDo6cmVhbCwKKyAg ICAgICAgcmVsYWxsdmlzaWJsZSA9PiA0OjppbnRlZ2VyKTsKKworLS0gZXJyb3I6IHJlbHBhZ2Vz IE5VTEwKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0aW9uX3N0YXRzKAorICAg ICAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICAgICAg cmVscGFnZXMgPT4gTlVMTDo6aW50ZWdlciwKKyAgICAgICAgcmVsdHVwbGVzID0+IDQwMC4wOjpy ZWFsLAorICAgICAgICByZWxhbGx2aXNpYmxlID0+IDQ6OmludGVnZXIpOworCistLSBlcnJvcjog cmVsdHVwbGVzIE5VTEwKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0aW9uX3N0 YXRzKAorICAgICAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywK KyAgICAgICAgcmVscGFnZXMgPT4gMTc6OmludGVnZXIsCisgICAgICAgIHJlbHR1cGxlcyA9PiBO VUxMOjpyZWFsLAorICAgICAgICByZWxhbGx2aXNpYmxlID0+IDQ6OmludGVnZXIpOworCistLSBl cnJvcjogcmVsYWxsdmlzaWJsZSBOVUxMCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9y ZWxhdGlvbl9zdGF0cygKKyAgICAgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6 cmVnY2xhc3MsCisgICAgICAgIHJlbHBhZ2VzID0+IDE3OjppbnRlZ2VyLAorICAgICAgICByZWx0 dXBsZXMgPT4gNDAwLjA6OnJlYWwsCisgICAgICAgIHJlbGFsbHZpc2libGUgPT4gTlVMTDo6aW50 ZWdlcik7CisKKy0tIG5hbWVkIGFyZ3VtZW50cworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19z ZXRfcmVsYXRpb25fc3RhdHMoCisgICAgICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVz dCc6OnJlZ2NsYXNzLAorICAgICAgICByZWxwYWdlcyA9PiAxNzo6aW50ZWdlciwKKyAgICAgICAg cmVsdHVwbGVzID0+IDQwMC4wOjpyZWFsLAorICAgICAgICByZWxhbGx2aXNpYmxlID0+IDQ6Omlu dGVnZXIpOworCitTRUxFQ1QgcmVscGFnZXMsIHJlbHR1cGxlcywgcmVsYWxsdmlzaWJsZQorRlJP TSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3M7CisK Ky0tIHBvc2l0aW9uYWwgYXJndW1lbnRzCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9y ZWxhdGlvbl9zdGF0cygKKyAgICAgICAgJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisg ICAgICAgIDE4OjppbnRlZ2VyLAorICAgICAgICA0MDEuMDo6cmVhbCwKKyAgICAgICAgNTo6aW50 ZWdlcik7CisKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzLCByZWxhbGx2aXNpYmxlCitGUk9N IHBnX2NsYXNzCitXSEVSRSBvaWQgPSAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzczsKKwor RFJPUCBTQ0hFTUEgc3RhdHNfaW1wb3J0IENBU0NBREU7Ci0tIAoyLjM0LjEKCg== --=-bygrKYh0rTj97arNuzeL Content-Disposition: attachment; filename="v26j-0002-Create-function-pg_set_attribute_stats.patch" Content-Type: text/x-patch; name="v26j-0002-Create-function-pg_set_attribute_stats.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA2NmU2ZTczNWQ3ZTdjM2FlYjJmMzc0ODEyMjU5ODY0ZDRjNGUyZjFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDggQXVnIDIwMjQgMTc6NTY6MjIgLTA3MDAKU3ViamVjdDogW1BBVENIIHYyNmogMi8yXSBD cmVhdGUgZnVuY3Rpb24gcGdfc2V0X2F0dHJpYnV0ZV9zdGF0cy4KCi0tLQogZG9jL3NyYy9zZ21s L2Z1bmMuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDYwICsrCiBzcmMvYmFja2VuZC9jYXRh bG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsICAgfCAgMjIgKwogc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9pbXBvcnRfc3RhdHMuYyAgICAgIHwgOTU3ICsrKysrKysrKysrKysrKysrKysrLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRl L3N0YXRpc3RpY3Mvc3RhdGlzdGljcy5oICAgICAgICB8ICAgMyArCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQgfCA2NDUgKysrKysrKysrKysrKy0KIHNyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwgICAgICB8IDU0NCArKysrKysrKysrKysKIDcg ZmlsZXMgY2hhbmdlZCwgMjIzNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmlu ZGV4IDAyZDkzZjZjOTI1Li40MDJhMTRmZGIxZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1 bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yOTk5OSw2ICsyOTk5OSw2 NiBAQCBERVRBSUw6ICBNYWtlIHN1cmUgcGdfd2FsX3JlcGxheV93YWl0KCkgaXNuJ3QgY2FsbGVk IHdpdGhpbiBhIHRyYW5zYWN0aW9uIHdpdGggYQogICAgICAgICA8L3dhcm5pbmc+CiAgICAgICAg PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+CisgICAgICAgIDxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4K KyAgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICAgPHByaW1hcnk+cGdfc2V0X2F0dHJpYnV0 ZV9zdGF0czwvcHJpbWFyeT4KKyAgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICAgPGZ1bmN0 aW9uPnBnX3NldF9hdHRyaWJ1dGVfc3RhdHM8L2Z1bmN0aW9uPiAoCisgICAgICAgICA8cGFyYW1l dGVyPnJlbGF0aW9uPC9wYXJhbWV0ZXI+IDx0eXBlPnJlZ2NsYXNzPC90eXBlPiwKKyAgICAgICAg IDxwYXJhbWV0ZXI+YXR0bmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5uYW1lPC90eXBlPiwKKyAgICAg ICAgIDxwYXJhbWV0ZXI+aW5oZXJpdGVkPC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5cGU+ LAorICAgICAgICAgPHBhcmFtZXRlcj5udWxsX2ZyYWM8L3BhcmFtZXRlcj4gPHR5cGU+cmVhbDwv dHlwZT4sCisgICAgICAgICA8cGFyYW1ldGVyPmF2Z193aWR0aDwvcGFyYW1ldGVyPiA8dHlwZT5p bnRlZ2VyPC90eXBlPiwKKyAgICAgICAgIDxwYXJhbWV0ZXI+bl9kaXN0aW5jdDwvcGFyYW1ldGVy PiA8dHlwZT5yZWFsPC90eXBlPgorICAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5tb3N0 X2NvbW1vbl92YWxzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHQ8L3R5cGU+LCA8cGFyYW1ldGVyPm1v c3RfY29tbW9uX2ZyZXFzPC9wYXJhbWV0ZXI+IDx0eXBlPnJlYWxbXTwvdHlwZT4gPC9vcHRpb25h bD4KKyAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+aGlzdG9ncmFtX2JvdW5kczwvcGFy YW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiA8L29wdGlvbmFsPgorICAgICAgICAgPG9wdGlvbmFs PiwgPHBhcmFtZXRlcj5jb3JyZWxhdGlvbjwvcGFyYW1ldGVyPiA8dHlwZT5yZWFsPC90eXBlPiA8 L29wdGlvbmFsPgorICAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5tb3N0X2NvbW1vbl9l bGVtczwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiwgPHBhcmFtZXRlcj5tb3N0X2NvbW1v bl9lbGVtX2ZyZXFzPC9wYXJhbWV0ZXI+IDx0eXBlPnJlYWxbXTwvdHlwZT4gPC9vcHRpb25hbD4K KyAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZWxlbV9jb3VudF9oaXN0b2dyYW08L3Bh cmFtZXRlcj4gPHR5cGU+cmVhbFtdPC90eXBlPiA8L29wdGlvbmFsPgorICAgICAgICAgPG9wdGlv bmFsPiwgPHBhcmFtZXRlcj5yYW5nZV9sZW5ndGhfaGlzdG9ncmFtPC9wYXJhbWV0ZXI+IDx0eXBl PnRleHQ8L3R5cGU+IDwvb3B0aW9uYWw+CisgICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVy PnJhbmdlX2VtcHR5X2ZyYWM8L3BhcmFtZXRlcj4gPHR5cGU+cmVhbDwvdHlwZT4gPC9vcHRpb25h bD4KKyAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+cmFuZ2VfYm91bmRzX2hpc3RvZ3Jh bTwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiA8L29wdGlvbmFsPiApCisgICAgICAgICA8 cmV0dXJudmFsdWU+dm9pZDwvcmV0dXJudmFsdWU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICBVcGRhdGVzIGF0dHJpYnV0ZS1sZXZlbCBzdGF0aXN0aWNzIGZvciB0 aGUgZ2l2ZW4gcmVsYXRpb24gYW5kCisgICAgICAgICBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgc3Bl Y2lmaWVkIHZhbHVlcy4gVGhlIHBhcmFtZXRlcnMgY29ycmVzcG9uZCB0bworICAgICAgICAgdG8g YXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lIGZvdW5kIGluIHRoZSA8bGluaworICAgICAgICAg bGlua2VuZD0idmlldy1wZy1zdGF0cyI+PHN0cnVjdG5hbWU+cGdfc3RhdHM8L3N0cnVjdG5hbWU+ PC9saW5rPgorICAgICAgICAgdmlldywgYW5kIHRoZSB2YWx1ZXMgc3VwcGxpZWQgaW4gdGhlIHBh cmFtZXRlciBtdXN0IG1lZXQgdGhlCisgICAgICAgICByZXF1aXJlbWVudHMgb2YgdGhlIGNvcnJl c3BvbmRpbmcgYXR0cmlidXRlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgQW55IG9wdGlvbmFsIHBhcmFtZXRlcnMgbGVmdCB1bnNwZWNpZmllZCB3aWxsIGNhdXNl IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICBzdGF0aXN0aWNzIHRvIGJlIHNldCB0byA8bGl0 ZXJhbD5OVUxMPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAg ICAgICAgIE9yZGluYXJpbHksIHRoZXNlIHN0YXRpc3RpY3MgYXJlIGNvbGxlY3RlZCBhdXRvbWF0 aWNhbGx5IG9yIHVwZGF0ZWQKKyAgICAgICAgIGFzIGEgcGFydCBvZiA8eHJlZiBsaW5rZW5kPSJz cWwtdmFjdXVtIi8+IG9yIDx4cmVmCisgICAgICAgICBsaW5rZW5kPSJzcWwtYW5hbHl6ZSIvPiwg c28gaXQncyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcworICAgICAgICAgZnVuY3Rpb24uIEhv d2V2ZXIsIGl0IG1heSBiZSB1c2VmdWwgd2hlbiB0ZXN0aW5nIHRoZSBlZmZlY3RzIG9mCisgICAg ICAgICBzdGF0aXN0aWNzIG9uIHRoZSBwbGFubmVyIHRvIHVuZGVyc3RhbmQgb3IgYW50aWNpcGF0 ZSBwbGFuIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUgPGxpdGVyYWw+TUFJTlRBSU48L2xpdGVyYWw+IHBy aXZpbGVnZSBvbgorICAgICAgICAgdGhlIHRhYmxlIG9yIGJlIHRoZSBvd25lciBvZiB0aGUgZGF0 YWJhc2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHdhcm5pbmc+CisgICAgICAgICA8cGFy YT4KKyAgICAgICAgICBDaGFuZ2VzIG1hZGUgYnkgdGhpcyBmdW5jdGlvbiBhcmUgbGlrZWx5IHRv IGJlIG92ZXJ3cml0dGVuIGJ5IDxsaW5rCisgICAgICAgICAgbGlua2VuZD0iYXV0b3ZhY3V1bSI+ YXV0b3ZhY3V1bTwvbGluaz4gKG9yIG1hbnVhbAorICAgICAgICAgIDxjb21tYW5kPlZBQ1VVTTwv Y29tbWFuZD4gb3IgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4pIGFuZCBzaG91bGQKKyAgICAg ICAgICBiZSBjb25zaWRlcmVkIHRlbXBvcmFyeS4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAg IDxwYXJhPgorICAgICAgICAgIFRoZSBzaWduYXR1cmUgb2YgdGhpcyBmdW5jdGlvbiBtYXkgY2hh bmdlIGluIG5ldyBtYWpvciByZWxlYXNlcyBpZgorICAgICAgICAgIHRoZXJlIGFyZSBjaGFuZ2Vz IHRvIHRoZSBzdGF0aXN0aWNzIGJlaW5nIHRyYWNrZWQuCisgICAgICAgICA8L3BhcmE+CisgICAg ICAgIDwvd2FybmluZz4KKyAgICAgICA8L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAgIDwvdGJv ZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X2Z1bmN0aW9ucy5zcWwKaW5kZXggNjIzYjk1MzliMTUuLjQ5ZjBkMGRhYjJkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKQEAgLTYzOSw2ICs2MzksMjggQEAgTEFO R1VBR0UgSU5URVJOQUwKIENBTExFRCBPTiBOVUxMIElOUFVUIFZPTEFUSUxFIFBBUkFMTEVMIFNB RkUKIEFTICdwZ19zdGF0X3Jlc2V0X3NscnUnOwogCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElP TgorICBwZ19zZXRfYXR0cmlidXRlX3N0YXRzKHJlbGF0aW9uIG9pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBhdHRuYW1lIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJp dGVkIGJvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbF9mcmFjIHJlYWwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgYXZnX3dpZHRoIGludGVnZXIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgbl9kaXN0aW5jdCByZWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vc3Rf Y29tbW9uX3ZhbHMgdGV4dCBERUZBVUxUIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg bW9zdF9jb21tb25fZnJlcXMgcmVhbFtdIERFRkFVTFQgTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBoaXN0b2dyYW1fYm91bmRzIHRleHQgREVGQVVMVCBOVUxMLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGNvcnJlbGF0aW9uIHJlYWwgREVGQVVMVCBOVUxMLAorICAgICAgICAgICAg ICAgICAgICAgICAgIG1vc3RfY29tbW9uX2VsZW1zIHRleHQgREVGQVVMVCBOVUxMLAorICAgICAg ICAgICAgICAgICAgICAgICAgIG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgcmVhbFtdIERFRkFVTFQg TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtX2NvdW50X2hpc3RvZ3JhbSByZWFs W10gREVGQVVMVCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX2xlbmd0aF9o aXN0b2dyYW0gdGV4dCBERUZBVUxUIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmFu Z2VfZW1wdHlfZnJhYyByZWFsIERFRkFVTFQgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICByYW5nZV9ib3VuZHNfaGlzdG9ncmFtIHRleHQgREVGQVVMVCBOVUxMKQorUkVUVVJOUyB2b2lk CitMQU5HVUFHRSBJTlRFUk5BTAorQ0FMTEVEIE9OIE5VTEwgSU5QVVQgVk9MQVRJTEUKK0FTICdw Z19zZXRfYXR0cmlidXRlX3N0YXRzJzsKKwogLS0KIC0tIFRoZSBkZWZhdWx0IHBlcm1pc3Npb25z IGZvciBmdW5jdGlvbnMgbWVhbiB0aGF0IGFueW9uZSBjYW4gZXhlY3V0ZSB0aGVtLgogLS0gQSBu dW1iZXIgb2YgZnVuY3Rpb25zIHNob3VsZG4ndCBiZSBleGVjdXRhYmxlIGJ5IGp1c3QgYW55b25l LCBidXQgcmF0aGVyCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2ltcG9ydF9z dGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9pbXBvcnRfc3RhdHMuYwppbmRleCA4YzBh MmJhYjMwNS4uM2EwOWI4ODBhMzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv aW1wb3J0X3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9pbXBvcnRfc3RhdHMu YwpAQCAtMjAsMTggKzIwLDYxIEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9u LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9u b2RlRnVuY3MuaCIKKyNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCIKICNpbmNsdWRl ICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGls cy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCitzdGF0aWMgdm9p ZCB1cGRhdGVfcGdfc3RhdGlzdGljKERhdHVtIHZhbHVlc1tdLCBib29sIG51bGxzW10pOworc3Rh dGljIERhdHVtIGNhc3Rfc3RhdmFsdWVzKEZtZ3JJbmZvICpmbGluZm8sIERhdHVtIGQsIE9pZCB0 eXBpZCwKKwkJCQkJCQlpbnQzMiB0eXBtb2QsIGludCBlbGV2ZWwsIGJvb2wgKm9rKTsKK3N0YXRp YyBib29sIGFycmF5X2NoZWNrKERhdHVtIGRhdHVtLCBpbnQgb25lX2RpbSwgY29uc3QgY2hhciAq c3RhdG5hbWUsCisJCQkJCQlpbnQgZWxldmVsKTsKK3N0YXRpYyBib29sIHR5cGVfaXNfc2NhbGFy KE9pZCB0eXBpZCk7CitzdGF0aWMgVHlwZUNhY2hlRW50cnkgKmdldF9hdHRyX3N0YXRfdHlwZShS ZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLAorCQkJCQkJCQkJCSAgaW50IGVsZXZlbCwg aW50MzIgKnR5cG1vZCwgT2lkICp0eXBjb2xsKTsKK3N0YXRpYyB2b2lkIHVzZV9zdGF0c19zbG90 KERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBpbnQgc2xvdGlkeCwKKwkJCQkJCSAgIGludDE2 IHN0YWtpbmQsIE9pZCBzdGFvcCwgT2lkIHN0YWNvbGwsCisJCQkJCQkgICBEYXR1bSBzdGFudW1i ZXJzLCBib29sIHN0YW51bWJlcnNfaXNudWxsLAorCQkJCQkJICAgRGF0dW0gc3RhdmFsdWVzLCBi b29sIHN0YXZhbHVlc19pc251bGwpOworCisvKgorICogTmFtZXMgb2YgcGFyYW1ldGVycyBmb3Vu ZCBpbiB0aGUgZnVuY3Rpb25zIHBnX3NldF9yZWxhdGlvbl9zdGF0cyBhbmQKKyAqIHBnX3NldF9h dHRyaWJ1dGVfc3RhdHMKKyAqLworY29uc3QgY2hhciAqcmVsYXRpb25fbmFtZSA9ICJyZWxhdGlv biI7Citjb25zdCBjaGFyICpyZWxwYWdlc19uYW1lID0gInJlbHBhZ2VzIjsKK2NvbnN0IGNoYXIg KnJlbHR1cGxlc19uYW1lID0gInJlbHR1cGxlcyI7Citjb25zdCBjaGFyICpyZWxhbGx2aXNpYmxl X25hbWUgPSAicmVsYWxsdmlzaWJsZSI7Citjb25zdCBjaGFyICphdHRuYW1lX25hbWUgPSAiYXR0 bmFtZSI7Citjb25zdCBjaGFyICppbmhlcml0ZWRfbmFtZSA9ICJpbmhlcml0ZWQiOworY29uc3Qg Y2hhciAqbnVsbF9mcmFjX25hbWUgPSAibnVsbF9mcmFjIjsKK2NvbnN0IGNoYXIgKmF2Z193aWR0 aF9uYW1lID0gImF2Z193aWR0aCI7Citjb25zdCBjaGFyICpuX2Rpc3RpbmN0X25hbWUgPSAibl9k aXN0aW5jdCI7Citjb25zdCBjaGFyICptY192YWxzX25hbWUgPSAibW9zdF9jb21tb25fdmFscyI7 Citjb25zdCBjaGFyICptY19mcmVxc19uYW1lID0gIm1vc3RfY29tbW9uX2ZyZXFzIjsKK2NvbnN0 IGNoYXIgKmhpc3RvZ3JhbV9ib3VuZHNfbmFtZSA9ICJoaXN0b2dyYW1fYm91bmRzIjsKK2NvbnN0 IGNoYXIgKmNvcnJlbGF0aW9uX25hbWUgPSAiY29ycmVsYXRpb24iOworY29uc3QgY2hhciAqbWNf ZWxlbXNfbmFtZSA9ICJtb3N0X2NvbW1vbl9lbGVtcyI7Citjb25zdCBjaGFyICptY19lbGVtX2Zy ZXFzX25hbWUgPSAibW9zdF9jb21tb25fZWxlbV9mcmVxcyI7Citjb25zdCBjaGFyICplbGVtX2Nv dW50X2hpc3RfbmFtZSA9ICJlbGVtX2NvdW50X2hpc3RvZ3JhbSI7Citjb25zdCBjaGFyICpyYW5n ZV9sZW5ndGhfaGlzdF9uYW1lID0gInJhbmdlX2xlbmd0aF9oaXN0b2dyYW0iOworY29uc3QgY2hh ciAqcmFuZ2VfZW1wdHlfZnJhY19uYW1lID0gInJhbmdlX2VtcHR5X2ZyYWMiOworY29uc3QgY2hh ciAqcmFuZ2VfYm91bmRzX2hpc3RfbmFtZSA9ICJyYW5nZV9ib3VuZHNfaGlzdG9ncmFtIjsKKwog LyoKICAqIEEgcm9sZSBoYXMgcHJpdmlsZWdlcyB0byBzZXQgc3RhdGlzdGljcyBvbiB0aGUgcmVs YXRpb24gaWYgYW55IG9mIHRoZQogICogZm9sbG93aW5nIGFyZSB0cnVlOgogICogICAtIHRoZSBy b2xlIG93bnMgdGhlIGN1cnJlbnQgZGF0YWJhc2UgYW5kIHRoZSByZWxhdGlvbiBpcyBub3Qgc2hh cmVkCiAgKiAgIC0gdGhlIHJvbGUgaGFzIHRoZSBNQUlOVEFJTiBwcml2aWxlZ2Ugb24gdGhlIHJl bGF0aW9uCi0gKgogICovCiBzdGF0aWMgYm9vbAogY2hlY2tfY2FuX3VwZGF0ZV9zdGF0cyhSZWxh dGlvbiByZWwpCkBAIC0xNTgsNiArMjAxLDc2MCBAQCByZWxhdGlvbl9zdGF0aXN0aWNzX3VwZGF0 ZShPaWQgcmVsb2lkLCBpbnQgdmVyc2lvbiwgaW50MzIgcmVscGFnZXMsCiAJUEdfUkVUVVJOX0JP T0wodHJ1ZSk7CiB9CiAKKy8qCisgKiBJbnNlcnQgb3IgVXBkYXRlIEF0dHJpYnV0ZSBTdGF0aXN0 aWNzCisgKgorICogU2VlIHBnX3N0YXRpc3RpYy5oIGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cg ZWFjaCBzdGF0aXN0aWMga2luZCBpcworICogc3RvcmVkLiBDdXN0b20gc3RhdGlzdGljcyBraW5k cyBhcmUgbm90IHN1cHBvcnRlZC4KKyAqCisgKiBEZXBlbmRpbmcgb24gdGhlIHN0YXRpc3RpY3Mg a2luZCwgd2UgbmVlZCB0byBkZXJpdmUgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAqIGF0dHJpYnV0 ZSBmb3Igd2hpY2ggd2UncmUgc3RvcmluZyB0aGUgc3RhdHMuIEZvciBpbnN0YW5jZSwgdGhlIE1D VnMgYXJlCisgKiBzdG9yZWQgYXMgYW4gYW55YXJyYXksIGFuZCB0aGUgcmVwcmVzZW50YXRpb24g b2YgdGhlIGFycmF5IG5lZWRzIHRvIHN0b3JlCisgKiB0aGUgY29ycmVjdCBlbGVtZW50IHR5cGUs IHdoaWNoIG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyBi b29sCithdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBh dHRudW0sIGludCB2ZXJzaW9uLAorCQkJCQkJCWludCBlbGV2ZWwsIGJvb2wgaW5oZXJpdGVkLCBm bG9hdCBudWxsX2ZyYWMsCisJCQkJCQkJaW50IGF2Z193aWR0aCwgZmxvYXQgbl9kaXN0aW5jdCwK KwkJCQkJCQlEYXR1bSBtY192YWxzX2RhdHVtLCBib29sIG1jX3ZhbHNfaXNudWxsLAorCQkJCQkJ CURhdHVtIG1jX2ZyZXFzX2RhdHVtLCBib29sIG1jX2ZyZXFzX2lzbnVsbCwgCisJCQkJCQkJRGF0 dW0gaGlzdG9ncmFtX2JvdW5kc19kYXR1bSwgYm9vbCBoaXN0b2dyYW1fYm91bmRzX2lzbnVsbCwK KwkJCQkJCQlEYXR1bSBjb3JyZWxhdGlvbl9kYXR1bSwgYm9vbCBjb3JyZWxhdGlvbl9pc251bGws CisJCQkJCQkJRGF0dW0gbWNfZWxlbXNfZGF0dW0sIGJvb2wgbWNfZWxlbXNfaXNudWxsLAorCQkJ CQkJCURhdHVtIG1jX2VsZW1fZnJlcXNfZGF0dW0sIGJvb2wgbWNfZWxlbV9mcmVxc19pc251bGws CisJCQkJCQkJRGF0dW0gZWxlbV9jb3VudF9oaXN0X2RhdHVtLCBib29sIGVsZW1fY291bnRfaGlz dF9pc251bGwsCisJCQkJCQkJRGF0dW0gcmFuZ2VfbGVuZ3RoX2hpc3RfZGF0dW0sIGJvb2wgcmFu Z2VfbGVuZ3RoX2hpc3RfaXNudWxsLAorCQkJCQkJCURhdHVtIHJhbmdlX2VtcHR5X2ZyYWNfZGF0 dW0sIGJvb2wgcmFuZ2VfZW1wdHlfZnJhY19pc251bGwsCisJCQkJCQkJRGF0dW0gcmFuZ2VfYm91 bmRzX2hpc3RfZGF0dW0sIGJvb2wgcmFuZ2VfYm91bmRzX2hpc3RfaXNudWxsKQoreworCVJlbGF0 aW9uCXJlbDsKKworCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZTsKKwlUeXBlQ2FjaGVFbnRyeSAq ZWxlbXR5cGNhY2hlID0gTlVMTDsKKworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbDsK KworCUZtZ3JJbmZvCWZpbmZvOworCisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19zdGF0aXN0aWNd OworCWJvb2wJCW51bGxzW05hdHRzX3BnX3N0YXRpc3RpY107CisKKwkvKgorCSAqIFRoZSBzdGF0 a2luZCBpbmRleCwgd2UgaGF2ZSBvbmx5IFNUQVRJU1RJQ19OVU1fU0xPVFMgdG8gaG9sZCB0aGVz ZSBzdGF0cworCSAqLworCWludAkJCXN0YWtpbmRpZHggPSAwOworCWNoYXIJICAgKmF0dG5hbWUg PSBnZXRfYXR0bmFtZShyZWxvaWQsIGF0dG51bSwgZmFsc2UpOworCisJLyoKKwkgKiBJbml0aWFs aXplIG51bGxzIGFycmF5IHRvIGJlIGZhbHNlIGZvciBhbGwgbm9uLU5VTEwgYXR0cmlidXRlcywg YW5kCisJICogdHJ1ZSBmb3IgYWxsIG51bGxhYmxlIGF0dHJpYnV0ZXMuCisJICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBOYXR0c19wZ19zdGF0aXN0aWM7IGkrKykKKwl7CisJCXZhbHVlc1tpXSA9 IChEYXR1bSkgMDsKKwkJaWYgKGkgPCBBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJzMSAtIDEp CisJCQludWxsc1tpXSA9IGZhbHNlOworCQllbHNlCisJCQludWxsc1tpXSA9IHRydWU7CisJfQor CisJLyoKKwkgKiBTb21lIHBhcmFtZXRlcnMgYXJlIGxpbmtlZCwgc2hvdWxkIGJvdGggYmUgTlVM TCBvciBOT1QgTlVMTC4KKwkgKiBEaXNhZ3JlZW1lbnQgbWVhbnMgdGhhdCB0aGUgc3RhdGlzdGlj IHBhaXIgd2lsbCBmYWlsIHNvIHRoZSAKKwkgKiBOT1QgTlVMTCBvbmUgbXVzdCBiZSBhYmFuZG9u ZWQgKHNldCBOVUxMKSBhZnRlciBhbgorCSAqIEVSUk9SL1dBUk5JTkcuIEJ5IGVuc3VyaW5nIHRo YXQgdGhlIHZhbHVlcyBhcmUgYWxpZ25lZCBpdCBpcyAKKwkgKiBwb3NzaWJsZSB0byB1c2Ugb25l IGFzIGEgcHJveHkgZm9yIHRoZSBvdGhlciBsYXRlci4KKwkgKi8KKworCS8qCisJICogU1RBVElT VElDX0tJTkRfTUNWID0gbWNfdmFscyArIG1jX2ZyZXFzCisJICovCisJaWYgKG1jX3ZhbHNfaXNu dWxsICE9IG1jX2ZyZXFzX2lzbnVsbCkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIiVzIGNh bm5vdCBiZSBOVUxMIHdoZW4gJXMgaXMgTk9UIE5VTEwiLAorCQkJCQkJbWNfdmFsc19pc251bGwg PyBtY192YWxzX25hbWUgOiBtY19mcmVxc19uYW1lLAorCQkJCQkJIW1jX3ZhbHNfaXNudWxsID8g bWNfdmFsc19uYW1lIDogbWNfZnJlcXNfbmFtZSkpKTsKKworCQltY192YWxzX2lzbnVsbCA9IHRy dWU7CisJCW1jX2ZyZXFzX2lzbnVsbCA9IHRydWU7CisJfQorCisJLyoKKwkgKiBTVEFUSVNUSUNf S0lORF9NQ0VMRU0gPSBtY19lbGVtcyArIG1jX2VsZW1fZnJlcXMKKwkgKi8KKwlpZiAobWNfZWxl bXNfaXNudWxsICE9IG1jX2VsZW1fZnJlcXNfaXNudWxsKQorCXsKKwkJZXJlcG9ydChlbGV2ZWws CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiJXMgY2Fubm90IGJlIE5VTEwgd2hlbiAlcyBpcyBOT1QgTlVMTCIsCisJCQkJCQltY19l bGVtc19pc251bGwgPyBtY19lbGVtc19uYW1lIDogbWNfZWxlbV9mcmVxc19uYW1lLAorCQkJCQkJ IW1jX2VsZW1zX2lzbnVsbCA/IG1jX2VsZW1zX25hbWUgOiBtY19lbGVtX2ZyZXFzX25hbWUpKSk7 CisJCW1jX2VsZW1zX2lzbnVsbCA9IHRydWU7CisJCW1jX2VsZW1fZnJlcXNfaXNudWxsID0gdHJ1 ZTsKKwl9CisKKwkvKgorCSAqIFNUQVRJU1RJQ19LSU5EX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0g PQorCSAqIHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0gKyByYW5nZV9lbXB0eV9mcmFjCisJICovCisJ ZWxzZSBpZiAocmFuZ2VfbGVuZ3RoX2hpc3RfaXNudWxsICE9IHJhbmdlX2VtcHR5X2ZyYWNfaXNu dWxsKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiJXMgY2Fubm90IGJlIE5VTEwgd2hlbiAl cyBpcyBOT1QgTlVMTCIsCisJCQkJCQlyYW5nZV9sZW5ndGhfaGlzdF9pc251bGwgPworCQkJCQkJ cmFuZ2VfbGVuZ3RoX2hpc3RfbmFtZSA6IHJhbmdlX2VtcHR5X2ZyYWNfbmFtZSwKKwkJCQkJCSFy YW5nZV9sZW5ndGhfaGlzdF9pc251bGwgPworCQkJCQkJcmFuZ2VfbGVuZ3RoX2hpc3RfbmFtZSA6 IHJhbmdlX2VtcHR5X2ZyYWNfbmFtZSkpKTsKKwkJcmFuZ2VfbGVuZ3RoX2hpc3RfaXNudWxsID0g dHJ1ZTsKKwkJcmFuZ2VfZW1wdHlfZnJhY19pc251bGwgPSB0cnVlOworCX0KKworCXJlbCA9IHRy eV9yZWxhdGlvbl9vcGVuKHJlbG9pZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKworCWlm IChyZWwgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIlBhcmFtZXRlciByZWxh dGlvbiBPSUQgJXUgaXMgaW52YWxpZCIsIHJlbG9pZCkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCS8qCisJICogTWFueSBvZiB0aGUgdmFsdWVzIHRoYXQgYXJlIHNldCBmb3IgYSBwYXJ0aWN1 bGFyIHN0YWtpbmQgYXJlIGVudGlyZWx5CisJICogZGVyaXZlZCBmcm9tIHRoZSBhdHRyaWJ1dGUg aXRzZWxmLCBvciBpdCdzIGV4cHJlc3Npb24uCisJICovCisJdHlwY2FjaGUgPSBnZXRfYXR0cl9z dGF0X3R5cGUocmVsLCBhdHRudW0sIGVsZXZlbCwgJnR5cG1vZCwgJnR5cGNvbGwpOworCWlmICh0 eXBjYWNoZSA9PSBOVUxMKQorCXsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCQll cmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIHR5cGVjYWNoZSBlcnJvciIpKSk7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIERlcml2ZSBlbGVtZW50IHR5cGUgaWYgd2UgaGF2 ZSBzdGF0IGtpbmRzIHRoYXQgbmVlZCBpdC4KKwkgKgorCSAqIFRoaXMgZHVwbGljYXRlcyBzb21l IHR5cGUtc3BlY2lmaWMgbG9naWMgZm91bmQgaW4gdmFyaW91cyB0eXBhbmFseXplCisJICogZnVu Y3Rpb25zIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSB2YWN1dW0ncyBleGFtaW5lX2F0dHJpYnV0ZSgp LCBidXQgdXNpbmcKKwkgKiB0aGF0IGRpcmVjdGx5IGhhcyBwcm92ZW4gYXdrd2FyZC4KKwkgKi8K KwlpZiAoIW1jX2VsZW1zX2lzbnVsbCB8fCAhZWxlbV9jb3VudF9oaXN0X2lzbnVsbCkKKwl7CisJ CU9pZAkJCWVsZW10eXBpZDsKKworCQlpZiAodHlwY2FjaGUtPnR5cGVfaWQgPT0gVFNWRUNUT1JP SUQpCisJCXsKKwkJCS8qCisJCQkgKiB0c3ZlY3RvcnMgYWx3YXlzIGhhdmUgYSB0ZXh0IG9pZCBi YXNlIHR5cGUgYW5kIGRlZmF1bHQKKwkJCSAqIGNvbGxhdGlvbgorCQkJICovCisJCQllbGVtdHlw aWQgPSBURVhUT0lEOworCQkJdHlwY29sbCA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsKKwkJfQor CQllbHNlIGlmICh0eXBjYWNoZS0+dHlwdHlwZSA9PSBUWVBUWVBFX1JBTkdFKQorCQkJZWxlbXR5 cGlkID0gZ2V0X3JhbmdlX3N1YnR5cGUodHlwY2FjaGUtPnR5cGVfaWQpOworCQllbHNlCisJCQll bGVtdHlwaWQgPSBnZXRfYmFzZV9lbGVtZW50X3R5cGUodHlwY2FjaGUtPnR5cGVfaWQpOworCisJ CS8qIG5vdCBmaW5kaW5nIGEgYmFzZXR5cGUgbWVhbnMgd2UgYWxyZWFkeSBoYWQgaXQgKi8KKwkJ aWYgKGVsZW10eXBpZCA9PSBJbnZhbGlkT2lkKQorCQkJZWxlbXR5cGlkID0gdHlwY2FjaGUtPnR5 cGVfaWQ7CisKKwkJLyogVGhlIHN0YXRzIG5lZWQgdGhlIGVxX29wciwgYW55IHZhbGlkYXRpb24g d291bGQgbmVlZCB0aGUgbHRfb3ByICovCisJCWVsZW10eXBjYWNoZSA9IGxvb2t1cF90eXBlX2Nh Y2hlKGVsZW10eXBpZCwgVFlQRUNBQ0hFX0VRX09QUik7CisJCWlmIChlbGVtdHlwY2FjaGUgPT0g TlVMTCkKKwkJeworCQkJLyogd2FybiBhbmQgaWdub3JlIGFueSBzdGF0cyB0aGF0IGNhbid0IGJl IGZ1bGZpbGxlZCAqLworCQkJaWYgKCFtY19lbGVtc19pc251bGwpCisJCQl7CisJCQkJZXJlcG9y dChlbGV2ZWwsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJCSBlcnJtc2coIiVzIGNhbm5vdCBhY2NlcHQgJXMgc3RhdHMsIGlnbm9yZWQiLAor CQkJCQkJCQlhdHRuYW1lLAorCQkJCQkJCQltY19lbGVtc19uYW1lKSkpOworCQkJCW1jX2VsZW1z X2lzbnVsbCA9IHRydWU7CisJCQkJbWNfZWxlbV9mcmVxc19pc251bGwgPSB0cnVlOworCQkJfQor CisJCQlpZiAoIWVsZW1fY291bnRfaGlzdF9pc251bGwpCisJCQl7CisJCQkJZXJlcG9ydChlbGV2 ZWwsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCSBlcnJtc2coIiVzIGNhbm5vdCBhY2NlcHQgJXMgc3RhdHMsIGlnbm9yZWQiLAorCQkJCQkJ CQlhdHRuYW1lLAorCQkJCQkJCQllbGVtX2NvdW50X2hpc3RfbmFtZSkpKTsKKwkJCQllbGVtX2Nv dW50X2hpc3RfaXNudWxsID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogaGlzdG9n cmFtX2JvdW5kcyBhbmQgY29ycmVsYXRpb24gbXVzdCBoYXZlIGEgdHlwZSA8IG9wZXJhdG9yCisJ ICovCisJaWYgKHR5cGNhY2hlLT5sdF9vcHIgPT0gSW52YWxpZE9pZCkKKwl7CisJCWlmICghaGlz dG9ncmFtX2JvdW5kc19pc251bGwpCisJCXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiUmVs YXRpb24gJXMgYXR0bmFtZSAlcyBjYW5ub3QgIgorCQkJCQkJCSJoYXZlIHN0YXRzIG9mIHR5cGUg JXMsIGlnbm9yZWQuIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJ CQkJCWF0dG5hbWUsCisJCQkJCQkJaGlzdG9ncmFtX2JvdW5kc19uYW1lKSkpOworCQkJaGlzdG9n cmFtX2JvdW5kc19pc251bGwgPSB0cnVlOworCQl9CisKKwkJaWYgKCFjb3JyZWxhdGlvbl9pc251 bGwpCisJCXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiUmVsYXRpb24gJXMgYXR0bmFtZSAl cyBjYW5ub3QgIgorCQkJCQkJCSJoYXZlIHN0YXRzIG9mIHR5cGUgJXMsIGlnbm9yZWQuIiwKKwkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCWF0dG5hbWUsCisJCQkJ CQkJY29ycmVsYXRpb25fbmFtZSkpKTsKKwkJCWNvcnJlbGF0aW9uX2lzbnVsbCA9IHRydWU7CisJ CX0KKwl9CisKKwkvKgorCSAqIFNjYWxhciB0eXBlcyBjYW4ndCBoYXZlIG1vc3RfY29tbW9uX2Vs ZW1zLCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBvcgorCSAqIGVsZW1lbnRfY291bnRfaGlzdG9n cmFtCisJICovCisJaWYgKHR5cGVfaXNfc2NhbGFyKHR5cGNhY2hlLT50eXBlX2lkKSkKKwl7CisJ CS8qIHdhcm4gYW5kIGlnbm9yZSBhbnkgc3RhdHMgdGhhdCBjYW4ndCBiZSBmdWxmaWxsZWQgKi8K KwkJaWYgKCFtY19lbGVtc19pc251bGwpCisJCXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi UmVsYXRpb24gJXMgYXR0bmFtZSAlcyBpcyBhIHNjYWxhciB0eXBlLCAiCisJCQkJCQkJImNhbm5v dCBoYXZlIHN0YXRzIG9mIHR5cGUgJXMsIGlnbm9yZWQiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCksCisJCQkJCQkJYXR0bmFtZSwKKwkJCQkJCQltY19lbGVtc19uYW1lKSkp OworCQkJbWNfZWxlbXNfaXNudWxsID0gdHJ1ZTsKKwkJCW1jX2VsZW1fZnJlcXNfaXNudWxsID0g dHJ1ZTsKKwkJfQorCisJCWlmICghZWxlbV9jb3VudF9oaXN0X2lzbnVsbCkKKwkJeworCQkJZXJl cG9ydChlbGV2ZWwsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkgZXJybXNnKCJSZWxhdGlvbiAlcyBhdHRuYW1lICVzIGlzIGEgc2NhbGFyIHR5 cGUsICIKKwkJCQkJCQkiY2Fubm90IGhhdmUgc3RhdHMgb2YgdHlwZSAlcywgaWdub3JlZCIsCisJ CQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQlhdHRuYW1lLAorCQkJ CQkJCWVsZW1fY291bnRfaGlzdF9uYW1lKSkpOworCQkJZWxlbV9jb3VudF9oaXN0X2lzbnVsbCA9 IHRydWU7CisJCX0KKwl9CisKKwkvKiBPbmx5IHJhbmdlIHR5cGVzIGNhbiBoYXZlIHJhbmdlIHN0 YXRzICovCisJaWYgKCh0eXBjYWNoZS0+dHlwdHlwZSAhPSBUWVBUWVBFX1JBTkdFKSAmJgorCQko dHlwY2FjaGUtPnR5cHR5cGUgIT0gVFlQVFlQRV9NVUxUSVJBTkdFKSkKKwl7CisJCS8qIHdhcm4g YW5kIGlnbm9yZSBhbnkgc3RhdHMgdGhhdCBjYW4ndCBiZSBmdWxmaWxsZWQgKi8KKwkJaWYgKCFy YW5nZV9sZW5ndGhfaGlzdF9pc251bGwpCisJCXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi UmVsYXRpb24gJXMgYXR0bmFtZSAlcyBpcyBub3QgYSByYW5nZSB0eXBlLCAiCisJCQkJCQkJImNh bm5vdCBoYXZlIHN0YXRzIG9mIHR5cGUgJXMiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCksCisJCQkJCQkJYXR0bmFtZSwKKwkJCQkJCQlyYW5nZV9sZW5ndGhfaGlzdF9uYW1l KSkpOworCQkJcmFuZ2VfbGVuZ3RoX2hpc3RfaXNudWxsID0gdHJ1ZTsKKwkJCXJhbmdlX2VtcHR5 X2ZyYWNfaXNudWxsID0gdHJ1ZTsKKwkJfQorCisJCWlmICghcmFuZ2VfYm91bmRzX2hpc3RfaXNu dWxsKQorCQl7CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIlJlbGF0aW9uICVzIGF0dG5hbWUg JXMgaXMgbm90IGEgcmFuZ2UgdHlwZSwgIgorCQkJCQkJCSJjYW5ub3QgaGF2ZSBzdGF0cyBvZiB0 eXBlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCWF0 dG5hbWUsCisJCQkJCQkJcmFuZ2VfYm91bmRzX2hpc3RfbmFtZSkpKTsKKwkJCXJhbmdlX2JvdW5k c19oaXN0X2lzbnVsbCA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoIWNoZWNrX2Nhbl91cGRhdGVf c3RhdHMocmVsKSkKKwl7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJZXJlcG9y dChlbGV2ZWwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwK KwkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3IgcmVsYXRpb24gJXMiLAorCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CS8qIFBvcHVsYXRlIHBnX3N0YXRpc3RpYyB0dXBsZSAqLworCXZhbHVlc1tBbnVtX3BnX3N0YXRp c3RpY19zdGFyZWxpZCAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShyZWxvaWQpOworCXZhbHVlc1tB bnVtX3BnX3N0YXRpc3RpY19zdGFhdHRudW0gLSAxXSA9IEludDE2R2V0RGF0dW0oYXR0bnVtKTsK Kwl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhaW5oZXJpdCAtIDFdID0gQm9vbEdldERhdHVt KGluaGVyaXRlZCk7CisJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0gMV0g PSBGbG9hdDRHZXREYXR1bShudWxsX2ZyYWMpOworCXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19z dGF3aWR0aCAtIDFdID0gSW50MzJHZXREYXR1bShhdmdfd2lkdGgpOworCXZhbHVlc1tBbnVtX3Bn X3N0YXRpc3RpY19zdGFkaXN0aW5jdCAtIDFdID0gRmxvYXQ0R2V0RGF0dW0obl9kaXN0aW5jdCk7 CisKKwlmbWdyX2luZm8oRl9BUlJBWV9JTiwgJmZpbmZvKTsKKworCS8qCisJICogU1RBVElTVElD X0tJTkRfTUNWCisJICoKKwkgKiBtb3N0X2NvbW1vbl92YWxzOiBBTllBUlJBWTo6dGV4dCBtb3N0 X2NvbW1vbl9mcmVxczogcmVhbFtdCisJICovCisJaWYgKCFtY192YWxzX2lzbnVsbCkKKwl7CisJ CWJvb2wJCWNvbnZlcnRlZCA9IGZhbHNlOworCQlEYXR1bQkJc3RhbnVtYmVycyA9IG1jX2ZyZXFz X2RhdHVtOworCQlEYXR1bQkJc3RhdmFsdWVzID0gY2FzdF9zdGF2YWx1ZXMoJmZpbmZvLCBtY192 YWxzX2RhdHVtLAorCQkJCQkJCQkJCQkgICB0eXBjYWNoZS0+dHlwZV9pZCwgdHlwbW9kLAorCQkJ CQkJCQkJCQkgICBlbGV2ZWwsICZjb252ZXJ0ZWQpOworCisJCWlmIChjb252ZXJ0ZWQgJiYKKwkJ CWFycmF5X2NoZWNrKHN0YXZhbHVlcywgZmFsc2UsIG1jX3ZhbHNfbmFtZSwgZWxldmVsKSAmJgor CQkJYXJyYXlfY2hlY2soc3RhbnVtYmVycywgdHJ1ZSwgbWNfZnJlcXNfbmFtZSwgZWxldmVsKSkK KwkJeworCQkJdXNlX3N0YXRzX3Nsb3QodmFsdWVzLCBudWxscywgc3Rha2luZGlkeCsrLAorCQkJ CQkJICAgU1RBVElTVElDX0tJTkRfTUNWLAorCQkJCQkJICAgdHlwY2FjaGUtPmVxX29wciwgdHlw Y29sbCwKKwkJCQkJCSAgIHN0YW51bWJlcnMsIGZhbHNlLCBzdGF2YWx1ZXMsIGZhbHNlKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qIE1hcmsgYXMgc2tpcHBlZCAqLworCQkJbWNfdmFsc19pc251 bGwgPSB0cnVlOworCQkJbWNfZnJlcXNfaXNudWxsID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qCisJ ICogU1RBVElTVElDX0tJTkRfSElTVE9HUkFNCisJICoKKwkgKiBoaXN0b2dyYW1fYm91bmRzOiBB TllBUlJBWTo6dGV4dAorCSAqLworCWlmICghaGlzdG9ncmFtX2JvdW5kc19pc251bGwpCisJewor CQlEYXR1bQkJc3RhdmFsdWVzOworCQlib29sCQljb252ZXJ0ZWQgPSBmYWxzZTsKKworCQlzdGF2 YWx1ZXMgPSBjYXN0X3N0YXZhbHVlcygmZmluZm8sIGhpc3RvZ3JhbV9ib3VuZHNfZGF0dW0sCisJ CQkJCQkJCSAgIHR5cGNhY2hlLT50eXBlX2lkLCB0eXBtb2QsIGVsZXZlbCwKKwkJCQkJCQkJICAg JmNvbnZlcnRlZCk7CisKKwkJaWYgKGNvbnZlcnRlZCAmJgorCQkJYXJyYXlfY2hlY2soc3RhdmFs dWVzLCBmYWxzZSwgaGlzdG9ncmFtX2JvdW5kc19uYW1lLCBlbGV2ZWwpKQorCQl7CisJCQl1c2Vf c3RhdHNfc2xvdCh2YWx1ZXMsIG51bGxzLCBzdGFraW5kaWR4KyssCisJCQkJCQkgICBTVEFUSVNU SUNfS0lORF9ISVNUT0dSQU0sCisJCQkJCQkgICB0eXBjYWNoZS0+bHRfb3ByLCB0eXBjb2xsLAor CQkJCQkJICAgMCwgdHJ1ZSwgc3RhdmFsdWVzLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQkJaGlz dG9ncmFtX2JvdW5kc19pc251bGwgPSB0cnVlOworCX0KKworCS8qCisJICogU1RBVElTVElDX0tJ TkRfQ09SUkVMQVRJT04KKwkgKgorCSAqIGNvcnJlbGF0aW9uOiByZWFsCisJICovCisJaWYgKCFj b3JyZWxhdGlvbl9pc251bGwpCisJeworCQlEYXR1bQkJZWxlbXNbXSA9IHtjb3JyZWxhdGlvbl9k YXR1bX07CisJCUFycmF5VHlwZSAgKmFycnkgPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihlbGVt cywgMSwgRkxPQVQ0T0lEKTsKKwkJRGF0dW0JCXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0dW0o YXJyeSk7CisKKwkJdXNlX3N0YXRzX3Nsb3QodmFsdWVzLCBudWxscywgc3Rha2luZGlkeCsrLAor CQkJCQkgICBTVEFUSVNUSUNfS0lORF9DT1JSRUxBVElPTiwKKwkJCQkJICAgdHlwY2FjaGUtPmx0 X29wciwgdHlwY29sbCwKKwkJCQkJICAgc3RhbnVtYmVycywgZmFsc2UsIDAsIHRydWUpOworCX0K KworCS8qCisJICogU1RBVElTVElDX0tJTkRfTUNFTEVNCisJICoKKwkgKiBtb3N0X2NvbW1vbl9l bGVtX2ZyZXFzOiByZWFsW10KKwkgKgorCSAqIG1vc3RfY29tbW9uX2VsZW1zICAgICA6IEFOWUFS UkFZOjp0ZXh0CisJICovCisJaWYgKCFtY19lbGVtc19pc251bGwpCisJeworCQlEYXR1bQkJc3Rh bnVtYmVycyA9IG1jX2VsZW1fZnJlcXNfZGF0dW07CisJCWJvb2wJCWNvbnZlcnRlZCA9IGZhbHNl OworCQlEYXR1bQkJc3RhdmFsdWVzOworCisJCXN0YXZhbHVlcyA9IGNhc3Rfc3RhdmFsdWVzKCZm aW5mbywgbWNfZWxlbXNfZGF0dW0sCisJCQkJCQkJCSAgIGVsZW10eXBjYWNoZS0+dHlwZV9pZCwg dHlwbW9kLAorCQkJCQkJCQkgICBlbGV2ZWwsICZjb252ZXJ0ZWQpOworCisJCWlmIChjb252ZXJ0 ZWQgJiYKKwkJCWFycmF5X2NoZWNrKHN0YXZhbHVlcywgZmFsc2UsIG1jX2VsZW1zX25hbWUsIGVs ZXZlbCkgJiYKKwkJCWFycmF5X2NoZWNrKHN0YW51bWJlcnMsIHRydWUsIG1jX2VsZW1fZnJlcXNf bmFtZSwgZWxldmVsKSkKKwkJeworCQkJdXNlX3N0YXRzX3Nsb3QodmFsdWVzLCBudWxscywgc3Rh a2luZGlkeCsrLAorCQkJCQkJICAgU1RBVElTVElDX0tJTkRfTUNFTEVNLAorCQkJCQkJICAgZWxl bXR5cGNhY2hlLT5lcV9vcHIsIHR5cGNvbGwsCisJCQkJCQkgICBzdGFudW1iZXJzLCBmYWxzZSwg c3RhdmFsdWVzLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiB0aGUgbWNfZWxlbSBz dGF0IGRpZCBub3Qgd3JpdGUgKi8KKwkJCW1jX2VsZW1zX2lzbnVsbCA9IHRydWU7CisJCQltY19l bGVtX2ZyZXFzX2lzbnVsbCA9IHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFNUQVRJU1RJQ19L SU5EX0RFQ0hJU1QKKwkgKgorCSAqIGVsZW1fY291bnRfaGlzdG9ncmFtOglyZWFsW10KKwkgKi8K KwlpZiAoIWVsZW1fY291bnRfaGlzdF9pc251bGwpCisJeworCQlEYXR1bQkJc3RhbnVtYmVycyA9 IGVsZW1fY291bnRfaGlzdF9kYXR1bTsKKworCQl1c2Vfc3RhdHNfc2xvdCh2YWx1ZXMsIG51bGxz LCBzdGFraW5kaWR4KyssCisJCQkJCSAgIFNUQVRJU1RJQ19LSU5EX0RFQ0hJU1QsCisJCQkJCSAg IGVsZW10eXBjYWNoZS0+ZXFfb3ByLCB0eXBjb2xsLAorCQkJCQkgICBzdGFudW1iZXJzLCBmYWxz ZSwgMCwgdHJ1ZSk7CisJfQorCisJLyoKKwkgKiBTVEFUSVNUSUNfS0lORF9CT1VORFNfSElTVE9H UkFNCisJICoKKwkgKiByYW5nZV9ib3VuZHNfaGlzdG9ncmFtOiBBTllBUlJBWTo6dGV4dAorCSAq CisJICogVGhpcyBzdGFraW5kIGFwcGVhcnMgYmVmb3JlIFNUQVRJU1RJQ19LSU5EX0JPVU5EU19I SVNUT0dSQU0gZXZlbiB0aG91Z2gKKwkgKiBpdCBpcyBudW1lcmljYWxseSBncmVhdGVyLCBhbmQg YWxsIG90aGVyIHN0YWtpbmRzIGFwcGVhciBpbiBudW1lcmljYWwKKwkgKiBvcmRlci4gV2UgZHVw bGljYXRlIHRoaXMgcXVpcmsgdG8gbWFrZSBiZWZvcmUvYWZ0ZXIgdGVzdHMgb2YKKwkgKiBwZ19z dGF0aXN0aWMgcmVjb3JkcyBlYXNpZXIuCisJICovCisJaWYgKCFyYW5nZV9ib3VuZHNfaGlzdF9p c251bGwpCisJeworCQlib29sCQljb252ZXJ0ZWQgPSBmYWxzZTsKKwkJRGF0dW0JCXN0YXZhbHVl czsKKworCQlzdGF2YWx1ZXMgPSBjYXN0X3N0YXZhbHVlcygmZmluZm8sIHJhbmdlX2JvdW5kc19o aXN0X2RhdHVtLAorCQkJCQkJCQkgICB0eXBjYWNoZS0+dHlwZV9pZCwgdHlwbW9kLAorCQkJCQkJ CQkgICBlbGV2ZWwsICZjb252ZXJ0ZWQpOworCisJCWlmIChjb252ZXJ0ZWQgJiYKKwkJCWFycmF5 X2NoZWNrKHN0YXZhbHVlcywgZmFsc2UsICJyYW5nZV9ib3VuZHNfaGlzdG9ncmFtIiwgZWxldmVs KSkKKwkJeworCQkJdXNlX3N0YXRzX3Nsb3QodmFsdWVzLCBudWxscywgc3Rha2luZGlkeCsrLAor CQkJCQkJICAgU1RBVElTVElDX0tJTkRfQk9VTkRTX0hJU1RPR1JBTSwKKwkJCQkJCSAgIEludmFs aWRPaWQsIEludmFsaWRPaWQsCisJCQkJCQkgICAwLCB0cnVlLCBzdGF2YWx1ZXMsIGZhbHNlKTsK KwkJfQorCQllbHNlCisJCQlyYW5nZV9ib3VuZHNfaGlzdF9pc251bGwgPSB0cnVlOworCX0KKwor CS8qCisJICogU1RBVElTVElDX0tJTkRfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTQorCSAqCisJICog cmFuZ2VfZW1wdHlfZnJhYzogcmVhbAorCSAqCisJICogcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbTog IGRvdWJsZSBwcmVjaXNpb25bXTo6dGV4dAorCSAqLworCWlmICghcmFuZ2VfbGVuZ3RoX2hpc3Rf aXNudWxsKQorCXsKKwkJLyogVGhlIGFueWFycmF5IGlzIGFsd2F5cyBhIGZsb2F0OFtdIGZvciB0 aGlzIHN0YWtpbmQgKi8KKwkJRGF0dW0JCWVsZW1zW10gPSB7cmFuZ2VfZW1wdHlfZnJhY19kYXR1 bX07CisJCUFycmF5VHlwZSAgKmFycnkgPSBjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihlbGVtcywg MSwgRkxPQVQ0T0lEKTsKKwkJRGF0dW0JCXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0dW0oYXJy eSk7CisKKwkJYm9vbAkJY29udmVydGVkID0gZmFsc2U7CisJCURhdHVtCQlzdGF2YWx1ZXM7CisK KwkJc3RhdmFsdWVzID0gY2FzdF9zdGF2YWx1ZXMoJmZpbmZvLCByYW5nZV9sZW5ndGhfaGlzdF9k YXR1bSwgRkxPQVQ4T0lELAorCQkJCQkJCQkgICAwLCBlbGV2ZWwsICZjb252ZXJ0ZWQpOworCisJ CWlmIChjb252ZXJ0ZWQgJiYKKwkJCWFycmF5X2NoZWNrKHN0YXZhbHVlcywgZmFsc2UsIHJhbmdl X2xlbmd0aF9oaXN0X25hbWUsIGVsZXZlbCkpCisJCXsKKwkJCXVzZV9zdGF0c19zbG90KHZhbHVl cywgbnVsbHMsIHN0YWtpbmRpZHgrKywKKwkJCQkJCSAgIFNUQVRJU1RJQ19LSU5EX1JBTkdFX0xF TkdUSF9ISVNUT0dSQU0sCisJCQkJCQkgICBGbG9hdDhMZXNzT3BlcmF0b3IsIEludmFsaWRPaWQs CisJCQkJCQkgICBzdGFudW1iZXJzLCBmYWxzZSwgc3RhdmFsdWVzLCBmYWxzZSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlyYW5nZV9lbXB0eV9mcmFjX2lzbnVsbCA9IHRydWU7CisJCQlyYW5nZV9s ZW5ndGhfaGlzdF9pc251bGwgPSB0cnVlOworCQl9CisJfQorCisJdXBkYXRlX3BnX3N0YXRpc3Rp Yyh2YWx1ZXMsIG51bGxzKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCXJl dHVybiB0cnVlOworfQorCisvKgorICogVGVzdCBpZiB0aGUgdHlwZSBpcyBhIHNjYWxhciBmb3Ig TUNFTEVNIHB1cnBvc2VzCisgKi8KK3N0YXRpYyBib29sCit0eXBlX2lzX3NjYWxhcihPaWQgdHlw aWQpCit7CisJSGVhcFR1cGxlCXRwOworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCisJdHAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBpZCkpOworCWlmIChI ZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwl7CisJCUZvcm1fcGdfdHlwZSB0eXB0dXAgPSAoRm9ybV9w Z190eXBlKSBHRVRTVFJVQ1QodHApOworCisJCXJlc3VsdCA9ICghT2lkSXNWYWxpZCh0eXB0dXAt PnR5cGFuYWx5emUpKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl9CisJcmV0dXJuIHJlc3Vs dDsKK30KKworLyoKKyAqIElmIHRoaXMgcmVsYXRpb24gaXMgYW4gaW5kZXggYW5kIHRoYXQgaW5k ZXggaGFzIGV4cHJlc3Npb25zIGluIGl0LCBhbmQKKyAqIHRoZSBhdHRudW0gc3BlY2lmaWVkIGlz IGtub3duIHRvIGJlIGFuIGV4cHJlc3Npb24sIHRoZW4gd2UgbXVzdCB3YWxrCisgKiB0aGUgbGlz dCBhdHRyaWJ1dGVzIHVwIHRvIHRoZSBzcGVjaWZpZWQgYXR0bnVtIHRvIGdldCB0aGUgcmlnaHQK KyAqIGV4cHJlc3Npb24uCisgKi8KK3N0YXRpYyBOb2RlICoKK2dldF9hdHRyX2V4cHIoUmVsYXRp b24gcmVsLCBpbnQgYXR0bnVtKQoreworCWlmICgocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVM S0lORF9JTkRFWAorCQkgfHwgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElU SU9ORURfSU5ERVgpKQorCQkmJiAocmVsLT5yZF9pbmRleHBycyAhPSBOSUwpCisJCSYmIChyZWwt PnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2F0dG51bSAtIDFdID09IDApKQorCXsKKwkJTGlzdENl bGwgICAqaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKHJlbC0+cmRfaW5kZXhwcnMpOworCisJCWZv ciAoaW50IGkgPSAwOyBpIDwgYXR0bnVtIC0gMTsgaSsrKQorCQkJaWYgKHJlbC0+cmRfaW5kZXgt PmluZGtleS52YWx1ZXNbaV0gPT0gMCkKKwkJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChyZWwtPnJk X2luZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCisJCWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkJ Lyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBp biBpbmRleHBycyBsaXN0Iik7CisKKwkJcmV0dXJuIChOb2RlICopIGxmaXJzdChpbmRleHByX2l0 ZW0pOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZldGNoIGRhdGF0eXBlIGluZm9y bWF0aW9uLCB0aGlzIGlzIG5lZWRlZCB0byBkZXJpdmUgdGhlIHByb3BlciBzdGFvcE4KKyAqIGFu ZCBzdGFjb2xsTiB2YWx1ZXMuCisgKgorICovCitzdGF0aWMgVHlwZUNhY2hlRW50cnkgKgorZ2V0 X2F0dHJfc3RhdF90eXBlKFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sIGludCBlbGV2 ZWwsCisJCQkJICAgaW50MzIgKnR5cG1vZCwgT2lkICp0eXBjb2xsKQoreworCU9pZAkJCXJlbGlk ID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHI7CisJSGVh cFR1cGxlCWF0dXA7CisJT2lkCQkJdHlwaWQ7CisJTm9kZQkgICAqZXhwcjsKKworCWF0dXAgPSBT ZWFyY2hTeXNDYWNoZTIoQVRUTlVNLCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJCSAg IEludDE2R2V0RGF0dW0oYXR0bnVtKSk7CisKKwkvKiBBdHRyaWJ1dGUgbm90IGZvdW5kICovCisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dXApKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkgZXJybXNnKCJS ZWxhdGlvbiAlcyBoYXMgbm8gYXR0cmlidXRlICVkIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCksIGF0dG51bSkpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYXR0ciA9IChG b3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dXApOworCWlmIChhdHRyLT5hdHRpc2Ryb3Bw ZWQpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklD SUVOVF9QUklWSUxFR0UpLAorCQkJCSBlcnJtc2coIlJlbGF0aW9uICVzIGF0dHJpYnV0ZSAlZCBp cyBkcm9wcGVkIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQlh dHRudW0pKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWV4cHIgPSBnZXRfYXR0cl9leHByKHJl bCwgYXR0ci0+YXR0bnVtKTsKKworCWlmIChleHByID09IE5VTEwpCisJeworCQkvKiByZWd1bGFy IGF0dHJpYnV0ZSAqLworCQl0eXBpZCA9IGF0dHItPmF0dHR5cGlkOworCQkqdHlwbW9kID0gYXR0 ci0+YXR0dHlwbW9kOworCQkqdHlwY29sbCA9IGF0dHItPmF0dGNvbGxhdGlvbjsKKwl9CisJZWxz ZQorCXsKKwkJdHlwaWQgPSBleHByVHlwZShleHByKTsKKwkJKnR5cG1vZCA9IGV4cHJUeXBtb2Qo ZXhwcik7CisKKwkJLyoKKwkJICogSWYgYSBjb2xsYXRpb24gaGFzIGJlZW4gc3BlY2lmaWVkIGZv ciB0aGUgaW5kZXggY29sdW1uLCB1c2UgdGhhdCBpbgorCQkgKiBwcmVmZXJlbmNlIHRvIGFueXRo aW5nIGVsc2U7IGJ1dCBpZiBub3QsIGZhbGwgYmFjayB0byB3aGF0ZXZlciB3ZQorCQkgKiBjYW4g Z2V0IGZyb20gdGhlIGV4cHJlc3Npb24uCisJCSAqLworCQlpZiAoT2lkSXNWYWxpZChhdHRyLT5h dHRjb2xsYXRpb24pKQorCQkJKnR5cGNvbGwgPSBhdHRyLT5hdHRjb2xsYXRpb247CisJCWVsc2UK KwkJCSp0eXBjb2xsID0gZXhwckNvbGxhdGlvbihleHByKTsKKwl9CisJUmVsZWFzZVN5c0NhY2hl KGF0dXApOworCisJLyogaWYgaXQncyBhIG11bHRpcmFuZ2UsIHN0ZXAgZG93biB0byB0aGUgcmFu Z2UgdHlwZSAqLworCWlmICh0eXBlX2lzX211bHRpcmFuZ2UodHlwaWQpKQorCQl0eXBpZCA9IGdl dF9tdWx0aXJhbmdlX3JhbmdlKHR5cGlkKTsKKworCXJldHVybiBsb29rdXBfdHlwZV9jYWNoZSh0 eXBpZCwKKwkJCQkJCQkgVFlQRUNBQ0hFX0xUX09QUiB8IFRZUEVDQUNIRV9FUV9PUFIpOworfQor CisvKgorICogUGVyZm9ybSB0aGUgY2FzdCBvZiBhIGtub3duIFRleHREYXR1bSBpbnRvIHRoZSB0 eXBlIHNwZWNpZmllZC4KKyAqCisgKiBJZiBubyBlcnJvcnMgYXJlIGZvdW5kLCBvayBpcyBzZXQg dG8gdHJ1ZS4KKyAqCisgKiBPdGhlcndpc2UsIHNldCBvayB0byBmYWxzZSwgY2FwdHVyZSB0aGUg ZXJyb3IgZm91bmQsIGFuZCByZS10aHJvdyBhdCB0aGUKKyAqIGxldmVsIHNwZWNpZmllZCBieSBl bGV2ZWwuCisgKi8KK3N0YXRpYyBEYXR1bQorY2FzdF9zdGF2YWx1ZXMoRm1nckluZm8gKmZsaW5m bywgRGF0dW0gZCwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QsIAorCQkJICAgaW50IGVsZXZlbCwg Ym9vbCAqb2spCit7CisJTE9DQUxfRkNJTkZPKGZjaW5mbywgOCk7CisJY2hhcgkgICAqczsKKwlE YXR1bQkJcmVzdWx0OworCUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0ID0ge1RfRXJyb3JTYXZl Q29udGV4dH07CisKKwllc2NvbnRleHQuZGV0YWlsc193YW50ZWQgPSB0cnVlOworCisJcyA9IFRl eHREYXR1bUdldENTdHJpbmcoZCk7CisKKwlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKmZjaW5m bywgZmxpbmZvLCAzLCBJbnZhbGlkT2lkLAorCQkJCQkJCSAoTm9kZSAqKSAmZXNjb250ZXh0LCBO VUxMKTsKKworCWZjaW5mby0+YXJnc1swXS52YWx1ZSA9IENTdHJpbmdHZXREYXR1bShzKTsKKwlm Y2luZm8tPmFyZ3NbMF0uaXNudWxsID0gZmFsc2U7CisJZmNpbmZvLT5hcmdzWzFdLnZhbHVlID0g T2JqZWN0SWRHZXREYXR1bSh0eXBpZCk7CisJZmNpbmZvLT5hcmdzWzFdLmlzbnVsbCA9IGZhbHNl OworCWZjaW5mby0+YXJnc1syXS52YWx1ZSA9IEludDMyR2V0RGF0dW0odHlwbW9kKTsKKwlmY2lu Zm8tPmFyZ3NbMl0uaXNudWxsID0gZmFsc2U7CisKKwlyZXN1bHQgPSBGdW5jdGlvbkNhbGxJbnZv a2UoZmNpbmZvKTsKKworCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKCZlc2NvbnRleHQpKQorCXsK KwkJaWYgKGVsZXZlbCAhPSBFUlJPUikKKwkJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwg PSBlbGV2ZWw7CisJCVRocm93RXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKKwkJKm9r ID0gZmFsc2U7CisJfQorCWVsc2UKKwkJKm9rID0gdHJ1ZTsKKworCXBmcmVlKHMpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworCisvKgorICogQ2hlY2sgYXJyYXkgZm9yIGFueSBOVUxMcywgYW5k IG9wdGlvbmFsbHkgZm9yIG9uZS1kaW1lbnNpb25hbGl0eS4KKyAqCisgKiBSZXBvcnQgYW55IGZh aWx1cmVzIGF0IHRoZSBsZXZlbCBvZiBlbGV2ZWwuCisgKi8KK3N0YXRpYyBib29sCithcnJheV9j aGVjayhEYXR1bSBkYXR1bSwgaW50IG9uZV9kaW0sIGNvbnN0IGNoYXIgKnN0YXRuYW1lLCBpbnQg ZWxldmVsKQoreworCUFycmF5VHlwZSAgKmFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChkYXR1bSk7 CisJaW50MTYJCWVsbWxlbjsKKwljaGFyCQllbG1hbGlnbjsKKwlib29sCQllbGVtYnl2YWw7CisJ RGF0dW0JICAgKnZhbHVlczsKKwlib29sCSAgICpudWxsczsKKwlpbnQJCQluZWxlbXM7CisKKwlp ZiAob25lX2RpbSAmJiAoYXJyLT5uZGltICE9IDEpKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygiJXMgY2Fubm90IGJlIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheSIsIHN0YXRuYW1lKSkpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJZ2V0X3R5cGxlbmJ5dmFsYWxpZ24oQVJSX0VMRU1UWVBF KGFyciksICZlbG1sZW4sICZlbGVtYnl2YWwsICZlbG1hbGlnbik7CisKKwlkZWNvbnN0cnVjdF9h cnJheShhcnIsIEFSUl9FTEVNVFlQRShhcnIpLCBlbG1sZW4sIGVsZW1ieXZhbCwgZWxtYWxpZ24s CisJCQkJCSAgJnZhbHVlcywgJm51bGxzLCAmbmVsZW1zKTsKKworCWZvciAoaW50IGkgPSAwOyBp IDwgbmVsZW1zOyBpKyspCisJCWlmIChudWxsc1tpXSkKKwkJeworCQkJZXJlcG9ydChlbGV2ZWws CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCIlcyBhcnJheSBjYW5ub3QgY29udGFpbiBOVUxMIHZhbHVlcyIsIHN0YXRuYW1lKSkp OworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBVcGRh dGUgdGhlIHBnX3N0YXRpc3RpYyByZWNvcmQuCisgKi8KK3N0YXRpYyB2b2lkCit1cGRhdGVfcGdf c3RhdGlzdGljKERhdHVtIHZhbHVlc1tdLCBib29sIG51bGxzW10pCit7CisJUmVsYXRpb24Jc2Qg PSB0YWJsZV9vcGVuKFN0YXRpc3RpY1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCUNh dGFsb2dJbmRleFN0YXRlIGluZHN0YXRlID0gQ2F0YWxvZ09wZW5JbmRleGVzKHNkKTsKKwlIZWFw VHVwbGUJb2xkdHVwOworCUhlYXBUdXBsZQlzdHVwOworCisJLyogSXMgdGhlcmUgYWxyZWFkeSBh IHBnX3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovCisJb2xkdHVwID0gU2Vh cmNoU3lzQ2FjaGUzKFNUQVRSRUxBVFRJTkgsCisJCQkJCQkJIHZhbHVlc1tBbnVtX3BnX3N0YXRp c3RpY19zdGFyZWxpZCAtIDFdLAorCQkJCQkJCSB2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh YXR0bnVtIC0gMV0sCisJCQkJCQkJIHZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFpbmhlcml0 IC0gMV0pOworCisJaWYgKEhlYXBUdXBsZUlzVmFsaWQob2xkdHVwKSkKKwl7CisJCS8qIFllcywg cmVwbGFjZSBpdCAqLworCQlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19zdGF0aXN0aWNdOworCisJ CWZvciAoaW50IGkgPSAwOyBpIDwgTmF0dHNfcGdfc3RhdGlzdGljOyBpKyspCisJCQlyZXBsYWNl c1tpXSA9IHRydWU7CisKKwkJc3R1cCA9IGhlYXBfbW9kaWZ5X3R1cGxlKG9sZHR1cCwgUmVsYXRp b25HZXREZXNjcihzZCksCisJCQkJCQkJCSB2YWx1ZXMsIG51bGxzLCByZXBsYWNlcyk7CisJCVJl bGVhc2VTeXNDYWNoZShvbGR0dXApOworCQlDYXRhbG9nVHVwbGVVcGRhdGVXaXRoSW5mbyhzZCwg JnN0dXAtPnRfc2VsZiwgc3R1cCwgaW5kc3RhdGUpOworCX0KKwllbHNlCisJeworCQkvKiBObywg aW5zZXJ0IG5ldyB0dXBsZSAqLworCQlzdHVwID0gaGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0 RGVzY3Ioc2QpLCB2YWx1ZXMsIG51bGxzKTsKKwkJQ2F0YWxvZ1R1cGxlSW5zZXJ0V2l0aEluZm8o c2QsIHN0dXAsIGluZHN0YXRlKTsKKwl9CisKKwloZWFwX2ZyZWV0dXBsZShzdHVwKTsKKwlDYXRh bG9nQ2xvc2VJbmRleGVzKGluZHN0YXRlKTsKKwl0YWJsZV9jbG9zZShzZCwgTm9Mb2NrKTsKK30K KwogLyoKICAqIFNldCBzdGF0aXN0aWNzIGZvciBhIGdpdmVuIHBnX2NsYXNzIGVudHJ5LgogICoK QEAgLTIxMCwzICsxMDA3LDE2MSBAQCBwZ19zZXRfcmVsYXRpb25fc3RhdHMoUEdfRlVOQ1RJT05f QVJHUykKIAogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CisKK3N0YXRpYwordm9pZCB1c2Vfc3RhdHNf c2xvdChEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgaW50IHNsb3RpZHgsCisJCQkJCWludDE2 IHN0YWtpbmQsIE9pZCBzdGFvcCwgT2lkIHN0YWNvbGwsCisJCQkJCURhdHVtIHN0YW51bWJlcnMs IGJvb2wgc3RhbnVtYmVyc19pc251bGwsCisJCQkJCURhdHVtIHN0YXZhbHVlcywgYm9vbCBzdGF2 YWx1ZXNfaXNudWxsKQoreworCWlmIChzbG90aWR4ID49IFNUQVRJU1RJQ19OVU1fU0xPVFMpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygibWF4aW11bSBudW1iZXIgb2Ygc3RhdGlzdGlj cyBzbG90cyBleGNlZWRlZDogJWQiLCBzbG90aWR4ICsgMSkpKTsKKworCS8qIHNsb3Qgc2hvdWxk IG5vdCBiZSB0YWtlbiAqLworCUFzc2VydCh2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rha2lu ZDEgLSAxICsgc2xvdGlkeF0gPT0gKERhdHVtKSAwKTsKKwlBc3NlcnQodmFsdWVzW0FudW1fcGdf c3RhdGlzdGljX3N0YW9wMSAtIDEgKyBzbG90aWR4XSA9PSAoRGF0dW0pIDApOworCUFzc2VydCh2 YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhY29sbDEgLSAxICsgc2xvdGlkeF0gPT0gKERhdHVt KSAwKTsKKwlBc3NlcnQodmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YW51bWJlcnMxIC0gMSAr IHNsb3RpZHhdID09IChEYXR1bSkgMCk7CisJQXNzZXJ0KHZhbHVlc1tBbnVtX3BnX3N0YXRpc3Rp Y19zdGF2YWx1ZXMxIC0gMSArIHNsb3RpZHhdID09IChEYXR1bSkgMCk7CisKKwkvKiBudWxscyBz aG91bGQgYmUgZmFsc2UgZm9yIG5vbi1OVUxMIGF0dHJpYnV0ZXMsIHRydWUgZm9yIG51bGxhYmxl ICovCisJQXNzZXJ0KCFudWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFraW5kMSAtIDEgKyBzbG90 aWR4XSk7CisJQXNzZXJ0KCFudWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFvcDEgLSAxICsgc2xv dGlkeF0pOworCUFzc2VydCghbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3RhY29sbDEgLSAxICsg c2xvdGlkeF0pOworCUFzc2VydChudWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJzMSAt IDEgKyBzbG90aWR4XSk7CisJQXNzZXJ0KG51bGxzW0FudW1fcGdfc3RhdGlzdGljX3N0YXZhbHVl czEgLSAxICsgc2xvdGlkeF0pOworCisJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0YWtpbmQx IC0gMSArIHNsb3RpZHhdID0gc3Rha2luZDsKKwl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3Rh b3AxIC0gMSArIHNsb3RpZHhdID0gc3Rhb3A7CisJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX3N0 YWNvbGwxIC0gMSArIHNsb3RpZHhdID0gc3RhY29sbDsKKworCWlmICghc3RhbnVtYmVyc19pc251 bGwpCisJeworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhbnVtYmVyczEgLSAxICsgc2xv dGlkeF0gPSBzdGFudW1iZXJzOworCQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudW1iZXJz MSAtIDEgKyBzbG90aWR4XSA9IGZhbHNlOworCX0KKwlpZiAoIXN0YXZhbHVlc19pc251bGwpCisJ eworCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSAtIDEgKyBzbG90aWR4XSA9 IHN0YXZhbHVlczsKKwkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfc3RhdmFsdWVzMSAtIDEgKyBz bG90aWR4XSA9IGZhbHNlOworCX0KK30KKworLyoKKyAqIEltcG9ydCBzdGF0aXN0aWNzIGZvciBh IGdpdmVuIHJlbGF0aW9uIGF0dHJpYnV0ZS4KKyAqCisgKiBUaGlzIHdpbGwgaW5zZXJ0L3JlcGxh Y2UgYSByb3cgaW4gcGdfc3RhdGlzdGljIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24gYW5kCisgKiBh dHRyaWJ1dGUgbmFtZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gdGFrZXMgaW5wdXQgcGFyYW1ldGVy cyB0aGF0IGNvcnJlc3BvbmQgdG8gY29sdW1ucyBpbiB0aGUgdmlldworICogcGdfc3RhdHMuCisg KgorICogT2YgdGhvc2UsIHRoZSBjb2x1bW5zIGF0dG5hbWUsIGluaGVyaXRlZCwgbnVsbF9mcmFj LCBhdmdfd2lkdGgsIGFuZAorICogbl9kaXN0aW5jdCBhbGwgY29ycmVzcG9uZCB0byBOT1QgTlVM TCBjb2x1bW5zIGluIHBnX3N0YXRpc3RpYy4gVGhlc2UKKyAqIHBhcmFtZXRlcnMgaGF2ZSBubyBk ZWZhdWx0IHZhbHVlIGFuZCBwYXNzaW5nIE5VTEwgdG8gdGhlbSB3aWxsIHJlc3VsdAorICogaW4g YW4gZXJyb3IuCisgKgorICogSWYgdGhlcmUgaXMgbm8gYXR0cmlidXRlIHdpdGggYSBtYXRjaGlu ZyBhdHRuYW1lIGluIHRoZSByZWxhdGlvbiwgdGhlCisgKiBmdW5jdGlvbiB3aWxsIHJhaXNlIGFu IGVycm9yLiBMaWtld2lzZSBmb3Igc2V0dGluZyBpbmhlcml0ZWQgc3RhdGlzdGljcworICogb24g YSB0YWJsZSB0aGF0IGlzIG5vdCBwYXJ0aXRpb25lZC4KKyAqCisgKiBUaGUgcmVtYWluaW5nIHBh cmFtZXRlcnMgYWxsIGJlbG9uZyB0byBhIHNwZWNpZmljIHN0YWtpbmQuIFNvbWUgc3Rha2luZHMK KyAqIGhhdmUgbXVsdGlwbGUgcGFyYW1ldGVycywgYW5kIGluIHRob3NlIGNhc2VzIGJvdGggcGFy YW1ldGVycyBtdXN0IGJlCisgKiBOT1QgTlVMTCBvciBib3RoIE5VTEwsIG90aGVyd2lzZSBhbiBl cnJvciB3aWxsIGJlIHJhaXNlZC4KKyAqCisgKiBPbWl0dGluZyBhIHBhcmFtZXRlciBvciBleHBs aWNpdGx5IHBhc3NpbmcgTlVMTCBtZWFucyB0aGF0IHRoYXQgcGFydGljdWxhcgorICogc3Rha2lu ZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGUuCisgKgorICogUGFyYW1ldGVy cyB0aGF0IGFyZSBOT1QgTlVMTCB3aWxsIGJlIGluc3BlY3RlZCBmb3IgY29uc2lzdGVuY3kgY2hl Y2tzLAorICogYW55IG9mIHdoaWNoIGNhbiByYWlzZSBhbiBlcnJvci4KKyAqCisgKiBQYXJhbWV0 ZXJzIGNvcnJlc3BvbmRpbmcgdG8gQU5ZQVJSQVkgY29sdW1ucyBhcmUgaW5zdGVhZCBwYXNzZWQg aW4gYXMgdGV4dAorICogdmFsdWVzLCB3aGljaCBpcyBhIHZhbGlkIGlucHV0IHN0cmluZyBmb3Ig YW4gYXJyYXkgb2YgdGhlIHR5cGUgb3IgZWxlbWVudAorICogdHlwZSBvZiB0aGUgYXR0cmlidXRl LiBBbnkgZXJyb3IgZ2VuZXJhdGVkIGJ5IHRoZSBhcnJheV9pbigpIGZ1bmN0aW9uIHdpbGwKKyAq IGluIHR1cm4gZmFpbCB0aGUgZnVuY3Rpb24uCisgKi8KK0RhdHVtCitwZ19zZXRfYXR0cmlidXRl X3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsb2lkOworCU5hbWUJCWF0dG5h bWU7CisJQXR0ck51bWJlcglhdHRudW07CisJaW50CQkJdmVyc2lvbgk9IFBHX1ZFUlNJT05fTlVN OworCWludAkJCWVsZXZlbAk9IEVSUk9SOworCWJvb2wJCWluaGVyaXRlZDsKKwlmbG9hdAkJbnVs bF9mcmFjOworCWludAkJCWF2Z193aWR0aDsKKwlmbG9hdAkJbl9kaXN0aW5jdDsKKworCWlmIChQ R19BUkdJU05VTEwoMCkpCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIGNhbm5v dCBiZSBOVUxMIikpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZWxvaWQgPSBQR19HRVRBUkdf T0lEKDApOworCisJaWYgKFBHX0FSR0lTTlVMTCgxKSkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygiYXR0bmFtZSBjYW5ub3QgYmUgTlVMTCIpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJYXR0 bmFtZSA9IFBHX0dFVEFSR19OQU1FKDEpOworCWF0dG51bSA9IGdldF9hdHRudW0ocmVsb2lkLCBO YW1lU3RyKCphdHRuYW1lKSk7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDIpKQorCXsKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJpbmhlcml0ZWQgY2Fubm90IGJlIE5VTEwiKSkpOworCQlyZXR1cm4gZmFs c2U7CisJfQorCWluaGVyaXRlZCA9IFBHX0dFVEFSR19CT09MKDIpOworCisJaWYgKFBHX0FSR0lT TlVMTCgzKSkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygibnVsbF9mcmFjIGNhbm5vdCBiZSBO VUxMIikpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwludWxsX2ZyYWMgPSBQR19HRVRBUkdfRkxP QVQ0KDMpOworCisJaWYgKFBHX0FSR0lTTlVMTCg0KSkKKwl7CisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygiYXZnX3dpZHRoIGNhbm5vdCBiZSBOVUxMIikpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlh dmdfd2lkdGggPSBQR19HRVRBUkdfSU5UMzIoNCk7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDUpKQor CXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJuX2Rpc3RpbmN0IGNhbm5vdCBiZSBOVUxMIikpKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKwluX2Rpc3RpbmN0ID0gUEdfR0VUQVJHX0ZMT0FUNCg1KTsK KworCWF0dHJpYnV0ZV9zdGF0aXN0aWNzX3VwZGF0ZSgKKwkJcmVsb2lkLCBhdHRudW0sIHZlcnNp b24sIGVsZXZlbCwgaW5oZXJpdGVkLAorCQludWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0aW5j dCwKKwkJUEdfR0VUQVJHX0RBVFVNKDYpLCBQR19BUkdJU05VTEwoNiksCisJCVBHX0dFVEFSR19E QVRVTSg3KSwgUEdfQVJHSVNOVUxMKDcpLAorCQlQR19HRVRBUkdfREFUVU0oOCksIFBHX0FSR0lT TlVMTCg4KSwKKwkJUEdfR0VUQVJHX0RBVFVNKDkpLCBQR19BUkdJU05VTEwoOSksCisJCVBHX0dF VEFSR19EQVRVTSgxMCksIFBHX0FSR0lTTlVMTCgxMCksCisJCVBHX0dFVEFSR19EQVRVTSgxMSks IFBHX0FSR0lTTlVMTCgxMSksCisJCVBHX0dFVEFSR19EQVRVTSgxMiksIFBHX0FSR0lTTlVMTCgx MiksCisJCVBHX0dFVEFSR19EQVRVTSgxMyksIFBHX0FSR0lTTlVMTCgxMyksCisJCVBHX0dFVEFS R19EQVRVTSgxNCksIFBHX0FSR0lTTlVMTCgxNCksCisJCVBHX0dFVEFSR19EQVRVTSgxNSksIFBH X0FSR0lTTlVMTCgxNSkpOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CmluZGV4IGQ3MDBkZDUwZjdiLi5mYmQxYThhMzg0ZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CkBAIC0xMjI2Myw1ICsxMjI2MywxMiBAQAogICBwcm9hcmd0eXBlcyA9PiAnb2lkIGlu dDQgZmxvYXQ0IGludDQnLAogICBwcm9hcmduYW1lcyA9PiAne3JlbGF0aW9uLHJlbHBhZ2VzLHJl bHR1cGxlcyxyZWxhbGx2aXNpYmxlfScsCiAgIHByb3NyYyA9PiAncGdfc2V0X3JlbGF0aW9uX3N0 YXRzJyB9LAoreyBvaWQgPT4gJzgwNDknLAorICBkZXNjciA9PiAnc2V0IHN0YXRpc3RpY3Mgb24g YXR0cmlidXRlJywKKyAgcHJvbmFtZSA9PiAncGdfc2V0X2F0dHJpYnV0ZV9zdGF0cycsIHByb3Zv bGF0aWxlID0+ICd2JywgcHJvaXNzdHJpY3QgPT4gJ2YnLAorICBwcm9wYXJhbGxlbCA9PiAndScs IHByb3JldHR5cGUgPT4gJ3ZvaWQnLAorICBwcm9hcmd0eXBlcyA9PiAnb2lkIG5hbWUgYm9vbCBm bG9hdDQgaW50NCBmbG9hdDQgdGV4dCBfZmxvYXQ0IHRleHQgZmxvYXQ0IHRleHQgX2Zsb2F0NCBf ZmxvYXQ0IHRleHQgZmxvYXQ0IHRleHQnLAorICBwcm9hcmduYW1lcyA9PiAne3JlbGF0aW9uLGF0 dG5hbWUsaW5oZXJpdGVkLG51bGxfZnJhYyxhdmdfd2lkdGgsbl9kaXN0aW5jdCxtb3N0X2NvbW1v bl92YWxzLG1vc3RfY29tbW9uX2ZyZXFzLGhpc3RvZ3JhbV9ib3VuZHMsY29ycmVsYXRpb24sbW9z dF9jb21tb25fZWxlbXMsbW9zdF9jb21tb25fZWxlbV9mcmVxcyxlbGVtX2NvdW50X2hpc3RvZ3Jh bSxyYW5nZV9sZW5ndGhfaGlzdG9ncmFtLHJhbmdlX2VtcHR5X2ZyYWMscmFuZ2VfYm91bmRzX2hp c3RvZ3JhbX0nLAorICBwcm9zcmMgPT4gJ3BnX3NldF9hdHRyaWJ1dGVfc3RhdHMnIH0sCiAKIF0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3RhdGlzdGljcy5oIGIvc3JjL2lu Y2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKaW5kZXggN2YyYmYxODcxNmQuLjczZDNiNTQx ZGRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaAorKysg Yi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaApAQCAtMTI3LDQgKzEyNyw3IEBA IGV4dGVybiBTdGF0aXN0aWNFeHRJbmZvICpjaG9vc2VfYmVzdF9zdGF0aXN0aWNzKExpc3QgKnN0 YXRzLCBjaGFyIHJlcXVpcmVka2luZCwKIAkJCQkJCQkJCQkJCWludCBuY2xhdXNlcyk7CiBleHRl cm4gSGVhcFR1cGxlIHN0YXRleHRfZXhwcmVzc2lvbnNfbG9hZChPaWQgc3R4b2lkLCBib29sIGlu aCwgaW50IGlkeCk7CiAKK2V4dGVybiBEYXR1bSBwZ19zZXRfcmVsYXRpb25fc3RhdHMoUEdfRlVO Q1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0gcGdfc2V0X2F0dHJpYnV0ZV9zdGF0cyhQR19GVU5D VElPTl9BUkdTKTsKKwogI2VuZGlmCQkJCQkJCS8qIFNUQVRJU1RJQ1NfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0CmluZGV4IGY3MjdjY2U5NzY1Li4zYTI2 YjFmN2Q2NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBv cnQub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfaW1wb3J0Lm91dApA QCAtOTMsNyArOTMsNjUwIEBAIFdIRVJFIG9pZCA9ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2Ns YXNzOwogICAgICAgIDE4IHwgICAgICAgNDAxIHwgICAgICAgICAgICAgNQogKDEgcm93KQogCist LSBlcnJvcjogb2JqZWN0IGRvZXNuJ3QgZXhpc3QKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9h dHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJzAnOjpvaWQsCisgICAgYXR0bmFtZSA9 PiAnaWQnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxs X2ZyYWMgPT4gMC4xOjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5f ZGlzdGluY3QgPT4gMC4zOjpyZWFsKTsKK0VSUk9SOiAgY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YXR0cmlidXRlIDAgb2YgcmVsYXRpb24gMAorLS0gZXJyb3I6IHJlbGF0aW9uIG51bGwKK1NFTEVD VCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gTlVM TDo6b2lkLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFs c2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuMTo6cmVhbCwKKyAgICBhdmdfd2lkdGgg PT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IDAuMzo6cmVhbCk7CitFUlJPUjogIHJl bGF0aW9uIGNhbm5vdCBiZSBOVUxMCistLSBlcnJvcjogYXR0bmFtZSBudWxsCitTRUxFQ1QgcGdf Y2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19p bXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gTlVMTDo6bmFtZSwKKyAgICBp bmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuMTo6cmVhbCwK KyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IDAuMzo6cmVh bCk7CitFUlJPUjogIGF0dG5hbWUgY2Fubm90IGJlIE5VTEwKKy0tIGVycm9yOiBpbmhlcml0ZWQg bnVsbAorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxh dGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdp ZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IE5VTEw6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFj ID0+IDAuMTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3Rp bmN0ID0+IDAuMzo6cmVhbCk7CitFUlJPUjogIGluaGVyaXRlZCBjYW5ub3QgYmUgTlVMTAorLS0g ZXJyb3I6IG51bGxfZnJhYyBudWxsCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRl X3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAor ICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xl YW4sCisgICAgbnVsbF9mcmFjID0+IE5VTEw6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6Omlu dGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAwLjM6OnJlYWwpOworRVJST1I6ICBudWxsX2ZyYWMg Y2Fubm90IGJlIE5VTEwKKy0tIGVycm9yOiBhdmdfd2lkdGggbnVsbAorU0VMRUNUIHBnX2NhdGFs b2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0 LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5hbWUsCisgICAgaW5oZXJp dGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjE6OnJlYWwsCisgICAg YXZnX3dpZHRoID0+IE5VTEw6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAwLjM6OnJlYWwp OworRVJST1I6ICBhdmdfd2lkdGggY2Fubm90IGJlIE5VTEwKKy0tIGVycm9yOiBhdmdfd2lkdGgg bnVsbAorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxh dGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdp ZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJh YyA9PiAwLjE6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0 aW5jdCA9PiBOVUxMOjpyZWFsKTsKK0VSUk9SOiAgbl9kaXN0aW5jdCBjYW5ub3QgYmUgTlVMTAor LS0gb2s6IG5vIHN0YWtpbmRzCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0 YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAg IGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4s CisgICAgbnVsbF9mcmFjID0+IDAuMTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdl ciwKKyAgICBuX2Rpc3RpbmN0ID0+IDAuMzo6cmVhbCk7CisgcGdfc2V0X2F0dHJpYnV0ZV9zdGF0 cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qgc3RhbnVs bGZyYWMsIHN0YXdpZHRoLCBzdGFkaXN0aW5jdAorRlJPTSBwZ19zdGF0aXN0aWMKK1dIRVJFIHN0 YXJlbGlkID0gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3M7Cisgc3RhbnVsbGZyYWMgfCBz dGF3aWR0aCB8IHN0YWRpc3RpbmN0IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyAgICAgICAgIDAuMSB8ICAgICAgICAyIHwgICAgICAgICAwLjMKKygxIHJvdykKKwor LS0gd2FybjogbWN2IC8gbWNmIG51bGwgbWlzbWF0Y2gKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3Nl dF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6 cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBm YWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41OjpyZWFsLAorICAgIGF2Z193aWR0 aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAuMTo6cmVhbCwKKyAgICBtb3N0 X2NvbW1vbl9mcmVxcyA9PiAnezAuMSwwLjIsMC4zfSc6OnJlYWxbXQorICAgICk7CitFUlJPUjog IG1vc3RfY29tbW9uX3ZhbHMgY2Fubm90IGJlIE5VTEwgd2hlbiBtb3N0X2NvbW1vbl9mcmVxcyBp cyBOT1QgTlVMTAorLS0gd2FybjogbWN2IC8gbWNmIG51bGwgbWlzbWF0Y2ggcGFydCAyCitTRUxF Q1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdz dGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwK KyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6 cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0w LjE6OnJlYWwsCisgICAgbW9zdF9jb21tb25fdmFscyA9PiAnezEsMiwzfSc6OnRleHQKKyAgICAp OworRVJST1I6ICBtb3N0X2NvbW1vbl9mcmVxcyBjYW5ub3QgYmUgTlVMTCB3aGVuIG1vc3RfY29t bW9uX3ZhbHMgaXMgTk9UIE5VTEwKKy0tIHdhcm46IG1jdiAvIG1jZiB0eXBlIG1pc21hdGNoCitT RUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFt ZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAu NTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+ IC0wLjE6OnJlYWwsCisgICAgbW9zdF9jb21tb25fdmFscyA9PiAnezIwMjMtMDktMzAsMjAyNC0x MC0zMSwzfSc6OnRleHQsCisgICAgbW9zdF9jb21tb25fZnJlcXMgPT4gJ3swLjIsMC4xfSc6OnJl YWxbXQorICAgICk7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVn ZXI6ICIyMDIzLTA5LTMwIgorLS0gd2FybmluZzogbWN2IGNhc3QgZmFpbHVyZQorU0VMRUNUIHBn X2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNf aW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5hbWUsCisgICAg aW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWws CisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpy ZWFsLAorICAgIG1vc3RfY29tbW9uX3ZhbHMgPT4gJ3syLGZvdXIsM30nOjp0ZXh0LAorICAgIG1v c3RfY29tbW9uX2ZyZXFzID0+ICd7MC4zLDAuMjUsMC4wNX0nOjpyZWFsW10KKyAgICApOworRVJS T1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiZm91ciIKKy0tIG9r OiBtY3YrbWNmCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAg IHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUg PT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVs bF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBu X2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgbW9zdF9jb21tb25fdmFscyA9PiAnezIsMSwz fSc6OnRleHQsCisgICAgbW9zdF9jb21tb25fZnJlcXMgPT4gJ3swLjMsMC4yNSwwLjA1fSc6OnJl YWxbXQorICAgICk7CisgcGdfc2V0X2F0dHJpYnV0ZV9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKgorRlJPTSBwZ19zdGF0cworV0hFUkUgc2No ZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgdGFibGVuYW1lID0gJ3Rlc3QnCitBTkQgaW5o ZXJpdGVkID0gZmFsc2UKK0FORCBhdHRuYW1lID0gJ2lkJzsKKyAgc2NoZW1hbmFtZSAgfCB0YWJs ZW5hbWUgfCBhdHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwgYXZnX3dpZHRoIHwgbl9k aXN0aW5jdCB8IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8IGhpc3RvZ3Jh bV9ib3VuZHMgfCBjb3JyZWxhdGlvbiB8IG1vc3RfY29tbW9uX2VsZW1zIHwgbW9zdF9jb21tb25f ZWxlbV9mcmVxcyB8IGVsZW1fY291bnRfaGlzdG9ncmFtIHwgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3Jh bSB8IHJhbmdlX2VtcHR5X2ZyYWMgfCByYW5nZV9ib3VuZHNfaGlzdG9ncmFtIAorLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cisgc3RhdHNfaW1wb3J0IHwgdGVzdCAgICAgIHwgaWQgICAgICB8IGYgICAgICAgICB8ICAgICAg IDAuNSB8ICAgICAgICAgMiB8ICAgICAgIC0wLjEgfCB7MiwxLDN9ICAgICAgICAgIHwgezAuMyww LjI1LDAuMDV9ICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgCisoMSByb3cpCisK Ky0tIHdhcm46IGhpc3RvZ3JhbSBlbGVtZW50cyBudWxsIHZhbHVlCistLSB0aGlzIGdlbmVyYXRl cyBubyB3YXJuaW5ncywgYnV0IHBlcmhhcHMgaXQgc2hvdWxkCitTRUxFQ1QgcGdfY2F0YWxvZy5w Z19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVz dCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQg PT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdf d2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAg aGlzdG9ncmFtX2JvdW5kcyA9PiAnezEsTlVMTCwzLDR9Jzo6dGV4dAorICAgICk7CitFUlJPUjog IGhpc3RvZ3JhbV9ib3VuZHMgYXJyYXkgY2Fubm90IGNvbnRhaW4gTlVMTCB2YWx1ZXMKKy0tIG9r OiBoaXN0b2dyYW1fYm91bmRzCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0 YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAg IGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4s CisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdl ciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgaGlzdG9ncmFtX2JvdW5kcyA9 PiAnezEsMiwzLDR9Jzo6dGV4dAorICAgICk7CisgcGdfc2V0X2F0dHJpYnV0ZV9zdGF0cyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKgorRlJPTSBwZ19z dGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgdGFibGVuYW1lID0g J3Rlc3QnCitBTkQgaW5oZXJpdGVkID0gZmFsc2UKK0FORCBhdHRuYW1lID0gJ2lkJzsKKyAgc2No ZW1hbmFtZSAgfCB0YWJsZW5hbWUgfCBhdHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwg YXZnX3dpZHRoIHwgbl9kaXN0aW5jdCB8IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9m cmVxcyB8IGhpc3RvZ3JhbV9ib3VuZHMgfCBjb3JyZWxhdGlvbiB8IG1vc3RfY29tbW9uX2VsZW1z IHwgbW9zdF9jb21tb25fZWxlbV9mcmVxcyB8IGVsZW1fY291bnRfaGlzdG9ncmFtIHwgcmFuZ2Vf bGVuZ3RoX2hpc3RvZ3JhbSB8IHJhbmdlX2VtcHR5X2ZyYWMgfCByYW5nZV9ib3VuZHNfaGlzdG9n cmFtIAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgc3RhdHNfaW1wb3J0IHwgdGVzdCAgICAgIHwgaWQgICAgICB8IGYg ICAgICAgICB8ICAgICAgIDAuNSB8ICAgICAgICAgMiB8ICAgICAgIC0wLjEgfCAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCB7MSwyLDMsNH0gICAgICAgIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg IHwgCisoMSByb3cpCisKKy0tIG9rOiBjb3JyZWxhdGlvbgorU0VMRUNUIHBnX2NhdGFsb2cucGdf c2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3Qn OjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+ IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dp ZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIGNv cnJlbGF0aW9uID0+IDAuNTo6cmVhbCk7CisgcGdfc2V0X2F0dHJpYnV0ZV9zdGF0cyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKgorRlJPTSBwZ19zdGF0 cworV0hFUkUgc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgdGFibGVuYW1lID0gJ3Rl c3QnCitBTkQgaW5oZXJpdGVkID0gZmFsc2UKK0FORCBhdHRuYW1lID0gJ2lkJzsKKyAgc2NoZW1h bmFtZSAgfCB0YWJsZW5hbWUgfCBhdHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwgYXZn X3dpZHRoIHwgbl9kaXN0aW5jdCB8IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9mcmVx cyB8IGhpc3RvZ3JhbV9ib3VuZHMgfCBjb3JyZWxhdGlvbiB8IG1vc3RfY29tbW9uX2VsZW1zIHwg bW9zdF9jb21tb25fZWxlbV9mcmVxcyB8IGVsZW1fY291bnRfaGlzdG9ncmFtIHwgcmFuZ2VfbGVu Z3RoX2hpc3RvZ3JhbSB8IHJhbmdlX2VtcHR5X2ZyYWMgfCByYW5nZV9ib3VuZHNfaGlzdG9ncmFt IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgc3RhdHNfaW1wb3J0IHwgdGVzdCAgICAgIHwgaWQgICAgICB8IGYgICAg ICAgICB8ICAgICAgIDAuNSB8ICAgICAgICAgMiB8ICAgICAgIC0wLjEgfCAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAwLjUg fCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwg CisoMSByb3cpCisKKy0tIHdhcm46IHNjYWxhcnMgY2FuJ3QgaGF2ZSBtY2VsZW0KK1NFTEVDVCBw Z19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRz X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAg IGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41OjpyZWFs LAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAuMTo6 cmVhbCwKKyAgICBtb3N0X2NvbW1vbl9lbGVtcyA9PiAnezEsM30nOjp0ZXh0LAorICAgIG1vc3Rf Y29tbW9uX2VsZW1fZnJlcXMgPT4gJ3swLjMsMC4yLDAuMiwwLjMsMC4wfSc6OnJlYWxbXQorICAg ICk7CitFUlJPUjogIFJlbGF0aW9uIHRlc3QgYXR0bmFtZSBpZCBpcyBhIHNjYWxhciB0eXBlLCBj YW5ub3QgaGF2ZSBzdGF0cyBvZiB0eXBlIG1vc3RfY29tbW9uX2VsZW1zLCBpZ25vcmVkCistLSB3 YXJuOiBtY2VsZW0gLyBtY2VsZW0gbWlzbWF0Y2gKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9h dHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVn Y2xhc3MsCisgICAgYXR0bmFtZSA9PiAndGFncyc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZh bHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRo ID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIG1vc3Rf Y29tbW9uX2VsZW1zID0+ICd7b25lLHR3b30nOjp0ZXh0CisgICAgKTsKK0VSUk9SOiAgbW9zdF9j b21tb25fZWxlbV9mcmVxcyBjYW5ub3QgYmUgTlVMTCB3aGVuIG1vc3RfY29tbW9uX2VsZW1zIGlz IE5PVCBOVUxMCistLSB3YXJuOiBtY2VsZW0gLyBtY2VsZW0gbnVsbCBtaXNtYXRjaCBwYXJ0IDIK K1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24g PT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAndGFncyc6 Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9 PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5j dCA9PiAtMC4xOjpyZWFsLAorICAgIG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgPT4gJ3swLjMsMC4y LDAuMiwwLjN9Jzo6cmVhbFtdCisgICAgKTsKK0VSUk9SOiAgbW9zdF9jb21tb25fZWxlbXMgY2Fu bm90IGJlIE5VTEwgd2hlbiBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIGlzIE5PVCBOVUxMCistLSBv azogbWNlbGVtCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAg IHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUg PT4gJ3RhZ3MnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBu dWxsX2ZyYWMgPT4gMC41OjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAg IG5fZGlzdGluY3QgPT4gLTAuMTo6cmVhbCwKKyAgICBtb3N0X2NvbW1vbl9lbGVtcyA9PiAne29u ZSx0aHJlZX0nOjp0ZXh0LAorICAgIG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgPT4gJ3swLjMsMC4y LDAuMiwwLjMsMC4wfSc6OnJlYWxbXQorICAgICk7CisgcGdfc2V0X2F0dHJpYnV0ZV9zdGF0cyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgKgorRlJPTSBw Z19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgdGFibGVuYW1l ID0gJ3Rlc3QnCitBTkQgaW5oZXJpdGVkID0gZmFsc2UKK0FORCBhdHRuYW1lID0gJ3RhZ3MnOwor ICBzY2hlbWFuYW1lICB8IHRhYmxlbmFtZSB8IGF0dG5hbWUgfCBpbmhlcml0ZWQgfCBudWxsX2Zy YWMgfCBhdmdfd2lkdGggfCBuX2Rpc3RpbmN0IHwgbW9zdF9jb21tb25fdmFscyB8IG1vc3RfY29t bW9uX2ZyZXFzIHwgaGlzdG9ncmFtX2JvdW5kcyB8IGNvcnJlbGF0aW9uIHwgbW9zdF9jb21tb25f ZWxlbXMgfCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIHwgZWxlbV9jb3VudF9oaXN0b2dyYW0gfCBy YW5nZV9sZW5ndGhfaGlzdG9ncmFtIHwgcmFuZ2VfZW1wdHlfZnJhYyB8IHJhbmdlX2JvdW5kc19o aXN0b2dyYW0gCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzdGF0c19pbXBvcnQgfCB0ZXN0ICAgICAgfCB0YWdzICAg IHwgZiAgICAgICAgIHwgICAgICAgMC41IHwgICAgICAgICAyIHwgICAgICAgLTAuMSB8ICAgICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICB8IHtvbmUsdGhyZWV9ICAgICAgIHwgezAuMywwLjIsMC4yLDAuMywwfSAgICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgfCAKKygxIHJvdykKKworLS0gd2Fybjogc2NhbGFycyBjYW4ndCBoYXZlIGVsZW1fY291 bnRfaGlzdG9ncmFtCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAor ICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5h bWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAg bnVsbF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAg ICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgZWxlbV9jb3VudF9oaXN0b2dyYW0gPT4g J3sxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDF9Jzo6cmVhbFtdCisgICAgKTsKK0VSUk9S OiAgUmVsYXRpb24gdGVzdCBhdHRuYW1lIGlkIGlzIGEgc2NhbGFyIHR5cGUsIGNhbm5vdCBoYXZl IHN0YXRzIG9mIHR5cGUgZWxlbV9jb3VudF9oaXN0b2dyYW0sIGlnbm9yZWQKKy0tIHdhcm46IGVs ZW1fY291bnRfaGlzdG9ncmFtIG51bGwgZWxlbWVudAorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0 X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpy ZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICd0YWdzJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4g ZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lk dGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgZWxl bV9jb3VudF9oaXN0b2dyYW0gPT4gJ3sxLDEsTlVMTCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDF9 Jzo6cmVhbFtdCisgICAgKTsKKyBwZ19zZXRfYXR0cmlidXRlX3N0YXRzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIG9rOiBlbGVtX2NvdW50X2hpc3RvZ3JhbQor U0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9 PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICd0YWdzJzo6 bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+ IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0 ID0+IC0wLjE6OnJlYWwsCisgICAgZWxlbV9jb3VudF9oaXN0b2dyYW0gPT4gJ3sxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDF9Jzo6cmVhbFtdCisgICAgKTsKKyBwZ19zZXRfYXR0cmlidXRl X3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCAq CitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCB0 YWJsZW5hbWUgPSAndGVzdCcKK0FORCBpbmhlcml0ZWQgPSBmYWxzZQorQU5EIGF0dG5hbWUgPSAn dGFncyc7CisgIHNjaGVtYW5hbWUgIHwgdGFibGVuYW1lIHwgYXR0bmFtZSB8IGluaGVyaXRlZCB8 IG51bGxfZnJhYyB8IGF2Z193aWR0aCB8IG5fZGlzdGluY3QgfCBtb3N0X2NvbW1vbl92YWxzIHwg bW9zdF9jb21tb25fZnJlcXMgfCBoaXN0b2dyYW1fYm91bmRzIHwgY29ycmVsYXRpb24gfCBtb3N0 X2NvbW1vbl9lbGVtcyB8IG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxlbV9jb3VudF9oaXN0b2dyYW0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0gfCByYW5nZV9lbXB0eV9m cmFjIHwgcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHN0 YXRzX2ltcG9ydCB8IHRlc3QgICAgICB8IHRhZ3MgICAgfCBmICAgICAgICAgfCAgICAgICAwLjUg fCAgICAgICAgIDIgfCAgICAgICAtMC4xIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgezEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMX0gfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IAorKDEg cm93KQorCistLSB3YXJuOiBzY2FsYXJzIGNhbid0IGhhdmUgcmFuZ2Ugc3RhdHMKK1NFTEVDVCBw Z19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRz X2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAg IGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41OjpyZWFs LAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAuMTo6 cmVhbCwKKyAgICByYW5nZV9lbXB0eV9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICByYW5nZV9sZW5n dGhfaGlzdG9ncmFtID0+ICd7Mzk5LDQ5OSxJbmZpbml0eX0nOjp0ZXh0CisgICAgKTsKK0VSUk9S OiAgUmVsYXRpb24gdGVzdCBhdHRuYW1lIGlkIGlzIG5vdCBhIHJhbmdlIHR5cGUsIGNhbm5vdCBo YXZlIHN0YXRzIG9mIHR5cGUgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbQorLS0gd2FybjogcmFuZ2Vf ZW1wdHlfZnJhYyByYW5nZV9sZW5ndGhfaGlzdCBudWxsIG1pc21hdGNoCitTRUxFQ1QgcGdfY2F0 YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBv cnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2FyYW5nZSc6Om5hbWUsCisgICAg aW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWws CisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpy ZWFsLAorICAgIHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0gPT4gJ3szOTksNDk5LEluZmluaXR5fSc6 OnRleHQKKyAgICApOworRVJST1I6ICByYW5nZV9lbXB0eV9mcmFjIGNhbm5vdCBiZSBOVUxMIHdo ZW4gcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSBpcyBOT1QgTlVMTAorLS0gd2FybjogcmFuZ2VfZW1w dHlfZnJhYyByYW5nZV9sZW5ndGhfaGlzdCBudWxsIG1pc21hdGNoIHBhcnQgMgorU0VMRUNUIHBn X2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNf aW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdhcmFuZ2UnOjpuYW1lLAor ICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41Ojpy ZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAu MTo6cmVhbCwKKyAgICByYW5nZV9lbXB0eV9mcmFjID0+IDAuNTo6cmVhbAorICAgICk7CitFUlJP UjogIHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0gY2Fubm90IGJlIE5VTEwgd2hlbiByYW5nZV9lbXB0 eV9mcmFjIGlzIE5PVCBOVUxMCistLSBvazogcmFuZ2VfZW1wdHlfZnJhYyArIHJhbmdlX2xlbmd0 aF9oaXN0CitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJl bGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4g J2FyYW5nZSc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51 bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAg bl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIHJhbmdlX2VtcHR5X2ZyYWMgPT4gMC41Ojpy ZWFsLAorICAgIHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0gPT4gJ3szOTksNDk5LEluZmluaXR5fSc6 OnRleHQKKyAgICApOworIHBnX3NldF9hdHRyaWJ1dGVfc3RhdHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUICoKK0ZST00gcGdfc3RhdHMKK1dIRVJFIHNj aGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIHRhYmxlbmFtZSA9ICd0ZXN0JworQU5EIGlu aGVyaXRlZCA9IGZhbHNlCitBTkQgYXR0bmFtZSA9ICdhcmFuZ2UnOworICBzY2hlbWFuYW1lICB8 IHRhYmxlbmFtZSB8IGF0dG5hbWUgfCBpbmhlcml0ZWQgfCBudWxsX2ZyYWMgfCBhdmdfd2lkdGgg fCBuX2Rpc3RpbmN0IHwgbW9zdF9jb21tb25fdmFscyB8IG1vc3RfY29tbW9uX2ZyZXFzIHwgaGlz dG9ncmFtX2JvdW5kcyB8IGNvcnJlbGF0aW9uIHwgbW9zdF9jb21tb25fZWxlbXMgfCBtb3N0X2Nv bW1vbl9lbGVtX2ZyZXFzIHwgZWxlbV9jb3VudF9oaXN0b2dyYW0gfCByYW5nZV9sZW5ndGhfaGlz dG9ncmFtIHwgcmFuZ2VfZW1wdHlfZnJhYyB8IHJhbmdlX2JvdW5kc19oaXN0b2dyYW0gCistLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBzdGF0c19pbXBvcnQgfCB0ZXN0ICAgICAgfCBhcmFuZ2UgIHwgZiAgICAgICAgIHwg ICAgICAgMC41IHwgICAgICAgICAyIHwgICAgICAgLTAuMSB8ICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgIHwgezM5OSw0OTksSW5maW5pdHl9ICAgICB8ICAgICAgICAgICAgICAwLjUgfCAKKygxIHJv dykKKworLS0gd2Fybjogc2NhbGFycyBjYW4ndCBoYXZlIHJhbmdlIHN0YXRzCitTRUxFQ1QgcGdf Y2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19p bXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBp bmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVhbCwK KyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJl YWwsCisgICAgcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSA9PiAneyJbLTEsMSkiLCJbMCw0KSIsIlsx LDQpIiwiWzEsMTAwKSJ9Jzo6dGV4dAorICAgICk7CitFUlJPUjogIFJlbGF0aW9uIHRlc3QgYXR0 bmFtZSBpZCBpcyBub3QgYSByYW5nZSB0eXBlLCBjYW5ub3QgaGF2ZSBzdGF0cyBvZiB0eXBlIHJh bmdlX2JvdW5kc19oaXN0b2dyYW0KKy0tIG9rOiByYW5nZV9ib3VuZHNfaGlzdG9ncmFtCitTRUxF Q1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdz dGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2FyYW5nZSc6Om5h bWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAw LjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9 PiAtMC4xOjpyZWFsLAorICAgIHJhbmdlX2JvdW5kc19oaXN0b2dyYW0gPT4gJ3siWy0xLDEpIiwi WzAsNCkiLCJbMSw0KSIsIlsxLDEwMCkifSc6OnRleHQKKyAgICApOworIHBnX3NldF9hdHRyaWJ1 dGVfc3RhdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNU ICoKK0ZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5E IHRhYmxlbmFtZSA9ICd0ZXN0JworQU5EIGluaGVyaXRlZCA9IGZhbHNlCitBTkQgYXR0bmFtZSA9 ICdhcmFuZ2UnOworICBzY2hlbWFuYW1lICB8IHRhYmxlbmFtZSB8IGF0dG5hbWUgfCBpbmhlcml0 ZWQgfCBudWxsX2ZyYWMgfCBhdmdfd2lkdGggfCBuX2Rpc3RpbmN0IHwgbW9zdF9jb21tb25fdmFs cyB8IG1vc3RfY29tbW9uX2ZyZXFzIHwgaGlzdG9ncmFtX2JvdW5kcyB8IGNvcnJlbGF0aW9uIHwg bW9zdF9jb21tb25fZWxlbXMgfCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIHwgZWxlbV9jb3VudF9o aXN0b2dyYW0gfCByYW5nZV9sZW5ndGhfaGlzdG9ncmFtIHwgcmFuZ2VfZW1wdHlfZnJhYyB8ICAg ICAgICByYW5nZV9ib3VuZHNfaGlzdG9ncmFtICAgICAgICAKKy0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgc3RhdHNfaW1wb3J0IHwgdGVzdCAgICAgIHwgYXJhbmdlICB8IGYgICAgICAgICB8ICAg ICAgIDAuNSB8ICAgICAgICAgMiB8ICAgICAgIC0wLjEgfCAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgeyJbLTEsMSki LCJbMCw0KSIsIlsxLDQpIiwiWzEsMTAwKSJ9CisoMSByb3cpCisKKy0tIHdhcm46IGV4Y2VlZCBT VEFUSVNUSUNfTlVNX1NMT1RTCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0 YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAg IGF0dG5hbWUgPT4gJ2FyYW5nZSc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29s ZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6Omlu dGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIG1vc3RfY29tbW9uX3Zh bHMgPT4gJ3siWzIsMykiLCJbMSwyKSIsIlszLDQpIn0nOjp0ZXh0LAorICAgIG1vc3RfY29tbW9u X2ZyZXFzID0+ICd7MC4zLDAuMjUsMC4wNX0nOjpyZWFsW10sCisgICAgaGlzdG9ncmFtX2JvdW5k cyA9PiAneyJbMSwyKSIsIlsyLDMpIiwiWzMsNCkiLCJbNCw1KSJ9Jzo6dGV4dCwKKyAgICBjb3Jy ZWxhdGlvbiA9PiAxLjE6OnJlYWwsCisgICAgbW9zdF9jb21tb25fZWxlbXMgPT4gJ3szLDF9Jzo6 dGV4dCwKKyAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzID0+ICd7MC4zLDAuMiwwLjIsMC4zLDAu MH0nOjpyZWFsW10sCisgICAgcmFuZ2VfZW1wdHlfZnJhYyA9PiAtMC41OjpyZWFsLAorICAgIHJh bmdlX2xlbmd0aF9oaXN0b2dyYW0gPT4gJ3szOTksNDk5LEluZmluaXR5fSc6OnRleHQsCisgICAg cmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSA9PiAneyJbLTEsMSkiLCJbMCw0KSIsIlsxLDQpIiwiWzEs MTAwKSJ9Jzo6dGV4dAorICAgICk7CitFUlJPUjogIG1heGltdW0gbnVtYmVyIG9mIHN0YXRpc3Rp Y3Mgc2xvdHMgZXhjZWVkZWQ6IDYKKy0tCistLSBUZXN0IHRoZSBhYmlsaXR5IHRvIGV4YWN0bHkg Y29weSBkYXRhIGZyb20gb25lIHRhYmxlIHRvIGFuIGlkZW50aWNhbCB0YWJsZSwKKy0tIGNvcnJl Y3RseSByZWNvbnN0cnVjdGluZyB0aGUgc3Rha2luZCBvcmRlciBhcyB3ZWxsIGFzIHRoZSBzdGFv cE4gYW5kCistLSBzdGFjb2xsTiB2YWx1ZXMuIEJlY2F1c2Ugb2lkcyBhcmUgbm90IHN0YWJsZSBh Y3Jvc3MgZGF0YWJhc2VzLCB3ZSBjYW4gb25seQorLS0gdGVzdCB0aGlzIHdoZW4gdGhlIHNvdXJj ZSBhbmQgZGVzdGluYXRpb24gYXJlIG9uIHRoZSBzYW1lIGRhdGFiYXNlCistLSBpbnN0YW5jZS4g Rm9yIHRoYXQgcmVhc29uLCB3ZSBib3Jyb3cgYW5kIGFkYXB0IGEgcXVlcnkgZm91bmQgaW4gZmVf dXRpbHMKKy0tIGFuZCB1c2VkIGJ5IHBnX2R1bXAvcGdfdXBncmFkZS4KKy0tCitJTlNFUlQgSU5U TyBzdGF0c19pbXBvcnQudGVzdAorU0VMRUNUIDEsICdvbmUnLCAoMSwgMS4xLCAnT05FJywgJzIw MDEtMDEtMDEnLCAneyAieGtleSI6ICJ4dmFsIiB9Jyk6OnN0YXRzX2ltcG9ydC5jb21wbGV4X3R5 cGUsIGludDRyYW5nZSgxLDQpLCBhcnJheVsncmVkJywnZ3JlZW4nXQorVU5JT04gQUxMCitTRUxF Q1QgMiwgJ3R3bycsICgyLCAyLjIsICdUV08nLCAnMjAwMi0wMi0wMicsICdbdHJ1ZSwgNCwgInNp eCJdJyk6OnN0YXRzX2ltcG9ydC5jb21wbGV4X3R5cGUsICBpbnQ0cmFuZ2UoMSw0KSwgYXJyYXlb J2JsdWUnLCd5ZWxsb3cnXQorVU5JT04gQUxMCitTRUxFQ1QgMywgJ3RyZScsICgzLCAzLjMsICdU UkUnLCAnMjAwMy0wMy0wMycsIE5VTEwpOjpzdGF0c19pbXBvcnQuY29tcGxleF90eXBlLCBpbnQ0 cmFuZ2UoLTEsMSksIGFycmF5Wycib3JhbmdlIicsICdwdXJwbGUnLCAnY3lhbiddCitVTklPTiBB TEwKK1NFTEVDVCA0LCAnZm91cicsIE5VTEwsIGludDRyYW5nZSgwLDEwMCksIE5VTEw7CitDUkVB VEUgSU5ERVggaXNfb2RkIE9OIHN0YXRzX2ltcG9ydC50ZXN0KCgoY29tcCkuYSAlIDIgPSAxKSk7 CistLSBHZW5lcmF0ZSBzdGF0aXN0aWNzIG9uIHRhYmxlIHdpdGggZGF0YQorQU5BTFlaRSBzdGF0 c19pbXBvcnQudGVzdDsKK0NSRUFURSBUQUJMRSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZSAoIExJ S0Ugc3RhdHNfaW1wb3J0LnRlc3QgKTsKK0NSRUFURSBJTkRFWCBpc19vZGRfY2xvbmUgT04gc3Rh dHNfaW1wb3J0LnRlc3RfY2xvbmUoKChjb21wKS5hICUgMiA9IDEpKTsKKy0tCistLSBDb3B5IHN0 YXRzIGZyb20gdGVzdCB0byB0ZXN0X2Nsb25lLCBhbmQgaXNfb2RkIHRvIGlzX29kZF9jbG9uZQor LS0KK1NFTEVDVCBzLnNjaGVtYW5hbWUsIHMudGFibGVuYW1lLCBzLmF0dG5hbWUsIHMuaW5oZXJp dGVkCitGUk9NIHBnX2NhdGFsb2cucGdfc3RhdHMgQVMgcworQ1JPU1MgSk9JTiBMQVRFUkFMCisg ICAgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgICAgICByZWxhdGlvbiA9 PiAoJ3N0YXRzX2ltcG9ydC4nIHx8IHMudGFibGVuYW1lIHx8ICdfY2xvbmUnKTo6cmVnY2xhc3M6 Om9pZCwKKyAgICAgICAgYXR0bmFtZSA9PiBzLmF0dG5hbWUsCisgICAgICAgIGluaGVyaXRlZCA9 PiBzLmluaGVyaXRlZCwKKyAgICAgICAgbnVsbF9mcmFjID0+IHMubnVsbF9mcmFjLAorICAgICAg ICBhdmdfd2lkdGggPT4gcy5hdmdfd2lkdGgsCisgICAgICAgIG5fZGlzdGluY3QgPT4gcy5uX2Rp c3RpbmN0LAorICAgICAgICBtb3N0X2NvbW1vbl92YWxzID0+IHMubW9zdF9jb21tb25fdmFsczo6 dGV4dCwKKyAgICAgICAgbW9zdF9jb21tb25fZnJlcXMgPT4gcy5tb3N0X2NvbW1vbl9mcmVxcywK KyAgICAgICAgaGlzdG9ncmFtX2JvdW5kcyA9PiBzLmhpc3RvZ3JhbV9ib3VuZHM6OnRleHQsCisg ICAgICAgIGNvcnJlbGF0aW9uID0+IHMuY29ycmVsYXRpb24sCisgICAgICAgIG1vc3RfY29tbW9u X2VsZW1zID0+IHMubW9zdF9jb21tb25fZWxlbXM6OnRleHQsCisgICAgICAgIG1vc3RfY29tbW9u X2VsZW1fZnJlcXMgPT4gcy5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLAorICAgICAgICBlbGVtX2Nv dW50X2hpc3RvZ3JhbSA9PiBzLmVsZW1fY291bnRfaGlzdG9ncmFtLAorICAgICAgICByYW5nZV9i b3VuZHNfaGlzdG9ncmFtID0+IHMucmFuZ2VfYm91bmRzX2hpc3RvZ3JhbTo6dGV4dCwKKyAgICAg ICAgcmFuZ2VfZW1wdHlfZnJhYyA9PiBzLnJhbmdlX2VtcHR5X2ZyYWMsCisgICAgICAgIHJhbmdl X2xlbmd0aF9oaXN0b2dyYW0gPT4gcy5yYW5nZV9sZW5ndGhfaGlzdG9ncmFtOjp0ZXh0KSBBUyBy CitXSEVSRSBzLnNjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIHMudGFibGVuYW1lIElO ICgndGVzdCcsICdpc19vZGQnKQorT1JERVIgQlkgcy50YWJsZW5hbWUsIHMuYXR0bmFtZSwgcy5p bmhlcml0ZWQ7CisgIHNjaGVtYW5hbWUgIHwgdGFibGVuYW1lIHwgYXR0bmFtZSB8IGluaGVyaXRl ZCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLQorIHN0 YXRzX2ltcG9ydCB8IGlzX29kZCAgICB8IGV4cHIgICAgfCBmCisgc3RhdHNfaW1wb3J0IHwgdGVz dCAgICAgIHwgYXJhbmdlICB8IGYKKyBzdGF0c19pbXBvcnQgfCB0ZXN0ICAgICAgfCBjb21wICAg IHwgZgorIHN0YXRzX2ltcG9ydCB8IHRlc3QgICAgICB8IGlkICAgICAgfCBmCisgc3RhdHNfaW1w b3J0IHwgdGVzdCAgICAgIHwgbmFtZSAgICB8IGYKKyBzdGF0c19pbXBvcnQgfCB0ZXN0ICAgICAg fCB0YWdzICAgIHwgZgorKDYgcm93cykKKworU0VMRUNUIGMucmVsbmFtZSwgQ09VTlQoKikgQVMg bnVtX3N0YXRzCitGUk9NIHBnX2NsYXNzIEFTIGMKK0pPSU4gcGdfc3RhdGlzdGljIHMgT04gcy5z dGFyZWxpZCA9IGMub2lkCitXSEVSRSBjLnJlbG5hbWVzcGFjZSA9ICdzdGF0c19pbXBvcnQnOjpy ZWduYW1lc3BhY2UKK0FORCBjLnJlbG5hbWUgSU4gKCd0ZXN0JywgJ3Rlc3RfY2xvbmUnLCAnaXNf b2RkJywgJ2lzX29kZF9jbG9uZScpCitHUk9VUCBCWSBjLnJlbG5hbWUKK09SREVSIEJZIGMucmVs bmFtZTsKKyAgIHJlbG5hbWUgICAgfCBudW1fc3RhdHMgCistLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLQorIGlzX29kZCAgICAgICB8ICAgICAgICAgMQorIGlzX29kZF9jbG9uZSB8ICAgICAgICAg MQorIHRlc3QgICAgICAgICB8ICAgICAgICAgNQorIHRlc3RfY2xvbmUgICB8ICAgICAgICAgNQor KDQgcm93cykKKworLS0gY2hlY2sgdGVzdCBtaW51cyB0ZXN0X2Nsb25lCitTRUxFQ1QKKyAgICBh LmF0dG5hbWUsIHMuc3RhaW5oZXJpdCwgcy5zdGFudWxsZnJhYywgcy5zdGF3aWR0aCwgcy5zdGFk aXN0aW5jdCwKKyAgICBzLnN0YWtpbmQxLCBzLnN0YWtpbmQyLCBzLnN0YWtpbmQzLCBzLnN0YWtp bmQ0LCBzLnN0YWtpbmQ1LAorICAgIHMuc3Rhb3AxLCBzLnN0YW9wMiwgcy5zdGFvcDMsIHMuc3Rh b3A0LCBzLnN0YW9wNSwKKyAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLCBzLnN0YWNvbGwzLCBz LnN0YWNvbGw0LCBzLnN0YWNvbGw1LAorICAgIHMuc3RhbnVtYmVyczEsIHMuc3RhbnVtYmVyczIs IHMuc3RhbnVtYmVyczMsIHMuc3RhbnVtYmVyczQsIHMuc3RhbnVtYmVyczUsCisgICAgcy5zdGF2 YWx1ZXMxOjp0ZXh0IEFTIHN2MSwgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2MiwKKyAgICBzLnN0 YXZhbHVlczM6OnRleHQgQVMgc3YzLCBzLnN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LAorICAgIHMu c3RhdmFsdWVzNTo6dGV4dCBBUyBzdjUsICd0ZXN0JyBBUyBkaXJlY3Rpb24KK0ZST00gcGdfc3Rh dGlzdGljIHMKK0pPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHMuc3RhcmVsaWQg QU5EIGEuYXR0bnVtID0gcy5zdGFhdHRudW0KK1dIRVJFIHMuc3RhcmVsaWQgPSAnc3RhdHNfaW1w b3J0LnRlc3QnOjpyZWdjbGFzcworRVhDRVBUCitTRUxFQ1QKKyAgICBhLmF0dG5hbWUsIHMuc3Rh aW5oZXJpdCwgcy5zdGFudWxsZnJhYywgcy5zdGF3aWR0aCwgcy5zdGFkaXN0aW5jdCwKKyAgICBz LnN0YWtpbmQxLCBzLnN0YWtpbmQyLCBzLnN0YWtpbmQzLCBzLnN0YWtpbmQ0LCBzLnN0YWtpbmQ1 LAorICAgIHMuc3Rhb3AxLCBzLnN0YW9wMiwgcy5zdGFvcDMsIHMuc3Rhb3A0LCBzLnN0YW9wNSwK KyAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLCBzLnN0YWNvbGwzLCBzLnN0YWNvbGw0LCBzLnN0 YWNvbGw1LAorICAgIHMuc3RhbnVtYmVyczEsIHMuc3RhbnVtYmVyczIsIHMuc3RhbnVtYmVyczMs IHMuc3RhbnVtYmVyczQsIHMuc3RhbnVtYmVyczUsCisgICAgcy5zdGF2YWx1ZXMxOjp0ZXh0IEFT IHN2MSwgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2MiwKKyAgICBzLnN0YXZhbHVlczM6OnRleHQg QVMgc3YzLCBzLnN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LAorICAgIHMuc3RhdmFsdWVzNTo6dGV4 dCBBUyBzdjUsICd0ZXN0JyBBUyBkaXJlY3Rpb24KK0ZST00gcGdfc3RhdGlzdGljIHMKK0pPSU4g cGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHMuc3RhcmVsaWQgQU5EIGEuYXR0bnVtID0g cy5zdGFhdHRudW0KK1dIRVJFIHMuc3RhcmVsaWQgPSAnc3RhdHNfaW1wb3J0LnRlc3RfY2xvbmUn OjpyZWdjbGFzczsKKyBhdHRuYW1lIHwgc3RhaW5oZXJpdCB8IHN0YW51bGxmcmFjIHwgc3Rhd2lk dGggfCBzdGFkaXN0aW5jdCB8IHN0YWtpbmQxIHwgc3Rha2luZDIgfCBzdGFraW5kMyB8IHN0YWtp bmQ0IHwgc3Rha2luZDUgfCBzdGFvcDEgfCBzdGFvcDIgfCBzdGFvcDMgfCBzdGFvcDQgfCBzdGFv cDUgfCBzdGFjb2xsMSB8IHN0YWNvbGwyIHwgc3RhY29sbDMgfCBzdGFjb2xsNCB8IHN0YWNvbGw1 IHwgc3RhbnVtYmVyczEgfCBzdGFudW1iZXJzMiB8IHN0YW51bWJlcnMzIHwgc3RhbnVtYmVyczQg fCBzdGFudW1iZXJzNSB8IHN2MSB8IHN2MiB8IHN2MyB8IHN2NCB8IHN2NSB8IGRpcmVjdGlvbiAK Ky0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0KKygwIHJvd3MpCisK Ky0tIGNoZWNrIHRlc3RfY2xvbmUgbWludXMgdGVzdAorU0VMRUNUCisgICAgYS5hdHRuYW1lLCBz LnN0YWluaGVyaXQsIHMuc3RhbnVsbGZyYWMsIHMuc3Rhd2lkdGgsIHMuc3RhZGlzdGluY3QsCisg ICAgcy5zdGFraW5kMSwgcy5zdGFraW5kMiwgcy5zdGFraW5kMywgcy5zdGFraW5kNCwgcy5zdGFr aW5kNSwKKyAgICBzLnN0YW9wMSwgcy5zdGFvcDIsIHMuc3Rhb3AzLCBzLnN0YW9wNCwgcy5zdGFv cDUsCisgICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgcy5zdGFjb2xsMywgcy5zdGFjb2xsNCwg cy5zdGFjb2xsNSwKKyAgICBzLnN0YW51bWJlcnMxLCBzLnN0YW51bWJlcnMyLCBzLnN0YW51bWJl cnMzLCBzLnN0YW51bWJlcnM0LCBzLnN0YW51bWJlcnM1LAorICAgIHMuc3RhdmFsdWVzMTo6dGV4 dCBBUyBzdjEsIHMuc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsCisgICAgcy5zdGF2YWx1ZXMzOjp0 ZXh0IEFTIHN2Mywgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwKKyAgICBzLnN0YXZhbHVlczU6 OnRleHQgQVMgc3Y1LCAndGVzdF9jbG9uZScgQVMgZGlyZWN0aW9uCitGUk9NIHBnX3N0YXRpc3Rp YyBzCitKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBzLnN0YXJlbGlkIEFORCBh LmF0dG51bSA9IHMuc3RhYXR0bnVtCitXSEVSRSBzLnN0YXJlbGlkID0gJ3N0YXRzX2ltcG9ydC50 ZXN0X2Nsb25lJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VMRUNUCisgICAgYS5hdHRuYW1lLCBzLnN0 YWluaGVyaXQsIHMuc3RhbnVsbGZyYWMsIHMuc3Rhd2lkdGgsIHMuc3RhZGlzdGluY3QsCisgICAg cy5zdGFraW5kMSwgcy5zdGFraW5kMiwgcy5zdGFraW5kMywgcy5zdGFraW5kNCwgcy5zdGFraW5k NSwKKyAgICBzLnN0YW9wMSwgcy5zdGFvcDIsIHMuc3Rhb3AzLCBzLnN0YW9wNCwgcy5zdGFvcDUs CisgICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgcy5zdGFjb2xsMywgcy5zdGFjb2xsNCwgcy5z dGFjb2xsNSwKKyAgICBzLnN0YW51bWJlcnMxLCBzLnN0YW51bWJlcnMyLCBzLnN0YW51bWJlcnMz LCBzLnN0YW51bWJlcnM0LCBzLnN0YW51bWJlcnM1LAorICAgIHMuc3RhdmFsdWVzMTo6dGV4dCBB UyBzdjEsIHMuc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsCisgICAgcy5zdGF2YWx1ZXMzOjp0ZXh0 IEFTIHN2Mywgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwKKyAgICBzLnN0YXZhbHVlczU6OnRl eHQgQVMgc3Y1LCAndGVzdF9jbG9uZScgQVMgZGlyZWN0aW9uCitGUk9NIHBnX3N0YXRpc3RpYyBz CitKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBzLnN0YXJlbGlkIEFORCBhLmF0 dG51bSA9IHMuc3RhYXR0bnVtCitXSEVSRSBzLnN0YXJlbGlkID0gJ3N0YXRzX2ltcG9ydC50ZXN0 Jzo6cmVnY2xhc3M7CisgYXR0bmFtZSB8IHN0YWluaGVyaXQgfCBzdGFudWxsZnJhYyB8IHN0YXdp ZHRoIHwgc3RhZGlzdGluY3QgfCBzdGFraW5kMSB8IHN0YWtpbmQyIHwgc3Rha2luZDMgfCBzdGFr aW5kNCB8IHN0YWtpbmQ1IHwgc3Rhb3AxIHwgc3Rhb3AyIHwgc3Rhb3AzIHwgc3Rhb3A0IHwgc3Rh b3A1IHwgc3RhY29sbDEgfCBzdGFjb2xsMiB8IHN0YWNvbGwzIHwgc3RhY29sbDQgfCBzdGFjb2xs NSB8IHN0YW51bWJlcnMxIHwgc3RhbnVtYmVyczIgfCBzdGFudW1iZXJzMyB8IHN0YW51bWJlcnM0 IHwgc3RhbnVtYmVyczUgfCBzdjEgfCBzdjIgfCBzdjMgfCBzdjQgfCBzdjUgfCBkaXJlY3Rpb24g CistLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tCisoMCByb3dzKQor CistLSBjaGVjayBpc19vZGQgbWludXMgaXNfb2RkX2Nsb25lCitTRUxFQ1QKKyAgICBhLmF0dG5h bWUsIHMuc3RhaW5oZXJpdCwgcy5zdGFudWxsZnJhYywgcy5zdGF3aWR0aCwgcy5zdGFkaXN0aW5j dCwKKyAgICBzLnN0YWtpbmQxLCBzLnN0YWtpbmQyLCBzLnN0YWtpbmQzLCBzLnN0YWtpbmQ0LCBz LnN0YWtpbmQ1LAorICAgIHMuc3Rhb3AxLCBzLnN0YW9wMiwgcy5zdGFvcDMsIHMuc3Rhb3A0LCBz LnN0YW9wNSwKKyAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLCBzLnN0YWNvbGwzLCBzLnN0YWNv bGw0LCBzLnN0YWNvbGw1LAorICAgIHMuc3RhbnVtYmVyczEsIHMuc3RhbnVtYmVyczIsIHMuc3Rh bnVtYmVyczMsIHMuc3RhbnVtYmVyczQsIHMuc3RhbnVtYmVyczUsCisgICAgcy5zdGF2YWx1ZXMx Ojp0ZXh0IEFTIHN2MSwgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2MiwKKyAgICBzLnN0YXZhbHVl czM6OnRleHQgQVMgc3YzLCBzLnN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LAorICAgIHMuc3RhdmFs dWVzNTo6dGV4dCBBUyBzdjUsICdpc19vZGQnIEFTIGRpcmVjdGlvbgorRlJPTSBwZ19zdGF0aXN0 aWMgcworSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gcy5zdGFyZWxpZCBBTkQg YS5hdHRudW0gPSBzLnN0YWF0dG51bQorV0hFUkUgcy5zdGFyZWxpZCA9ICdzdGF0c19pbXBvcnQu aXNfb2RkJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VMRUNUCisgICAgYS5hdHRuYW1lLCBzLnN0YWlu aGVyaXQsIHMuc3RhbnVsbGZyYWMsIHMuc3Rhd2lkdGgsIHMuc3RhZGlzdGluY3QsCisgICAgcy5z dGFraW5kMSwgcy5zdGFraW5kMiwgcy5zdGFraW5kMywgcy5zdGFraW5kNCwgcy5zdGFraW5kNSwK KyAgICBzLnN0YW9wMSwgcy5zdGFvcDIsIHMuc3Rhb3AzLCBzLnN0YW9wNCwgcy5zdGFvcDUsCisg ICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgcy5zdGFjb2xsMywgcy5zdGFjb2xsNCwgcy5zdGFj b2xsNSwKKyAgICBzLnN0YW51bWJlcnMxLCBzLnN0YW51bWJlcnMyLCBzLnN0YW51bWJlcnMzLCBz LnN0YW51bWJlcnM0LCBzLnN0YW51bWJlcnM1LAorICAgIHMuc3RhdmFsdWVzMTo6dGV4dCBBUyBz djEsIHMuc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsCisgICAgcy5zdGF2YWx1ZXMzOjp0ZXh0IEFT IHN2Mywgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwKKyAgICBzLnN0YXZhbHVlczU6OnRleHQg QVMgc3Y1LCAnaXNfb2RkJyBBUyBkaXJlY3Rpb24KK0ZST00gcGdfc3RhdGlzdGljIHMKK0pPSU4g cGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHMuc3RhcmVsaWQgQU5EIGEuYXR0bnVtID0g cy5zdGFhdHRudW0KK1dIRVJFIHMuc3RhcmVsaWQgPSAnc3RhdHNfaW1wb3J0LmlzX29kZF9jbG9u ZSc6OnJlZ2NsYXNzOworIGF0dG5hbWUgfCBzdGFpbmhlcml0IHwgc3RhbnVsbGZyYWMgfCBzdGF3 aWR0aCB8IHN0YWRpc3RpbmN0IHwgc3Rha2luZDEgfCBzdGFraW5kMiB8IHN0YWtpbmQzIHwgc3Rh a2luZDQgfCBzdGFraW5kNSB8IHN0YW9wMSB8IHN0YW9wMiB8IHN0YW9wMyB8IHN0YW9wNCB8IHN0 YW9wNSB8IHN0YWNvbGwxIHwgc3RhY29sbDIgfCBzdGFjb2xsMyB8IHN0YWNvbGw0IHwgc3RhY29s bDUgfCBzdGFudW1iZXJzMSB8IHN0YW51bWJlcnMyIHwgc3RhbnVtYmVyczMgfCBzdGFudW1iZXJz NCB8IHN0YW51bWJlcnM1IHwgc3YxIHwgc3YyIHwgc3YzIHwgc3Y0IHwgc3Y1IHwgZGlyZWN0aW9u IAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLQorKDAgcm93cykK KworLS0gY2hlY2sgaXNfb2RkX2Nsb25lIG1pbnVzIGlzX29kZAorU0VMRUNUCisgICAgYS5hdHRu YW1lLCBzLnN0YWluaGVyaXQsIHMuc3RhbnVsbGZyYWMsIHMuc3Rhd2lkdGgsIHMuc3RhZGlzdGlu Y3QsCisgICAgcy5zdGFraW5kMSwgcy5zdGFraW5kMiwgcy5zdGFraW5kMywgcy5zdGFraW5kNCwg cy5zdGFraW5kNSwKKyAgICBzLnN0YW9wMSwgcy5zdGFvcDIsIHMuc3Rhb3AzLCBzLnN0YW9wNCwg cy5zdGFvcDUsCisgICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgcy5zdGFjb2xsMywgcy5zdGFj b2xsNCwgcy5zdGFjb2xsNSwKKyAgICBzLnN0YW51bWJlcnMxLCBzLnN0YW51bWJlcnMyLCBzLnN0 YW51bWJlcnMzLCBzLnN0YW51bWJlcnM0LCBzLnN0YW51bWJlcnM1LAorICAgIHMuc3RhdmFsdWVz MTo6dGV4dCBBUyBzdjEsIHMuc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsCisgICAgcy5zdGF2YWx1 ZXMzOjp0ZXh0IEFTIHN2Mywgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwKKyAgICBzLnN0YXZh bHVlczU6OnRleHQgQVMgc3Y1LCAnaXNfb2RkX2Nsb25lJyBBUyBkaXJlY3Rpb24KK0ZST00gcGdf c3RhdGlzdGljIHMKK0pPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHMuc3RhcmVs aWQgQU5EIGEuYXR0bnVtID0gcy5zdGFhdHRudW0KK1dIRVJFIHMuc3RhcmVsaWQgPSAnc3RhdHNf aW1wb3J0LmlzX29kZF9jbG9uZSc6OnJlZ2NsYXNzCitFWENFUFQKK1NFTEVDVAorICAgIGEuYXR0 bmFtZSwgcy5zdGFpbmhlcml0LCBzLnN0YW51bGxmcmFjLCBzLnN0YXdpZHRoLCBzLnN0YWRpc3Rp bmN0LAorICAgIHMuc3Rha2luZDEsIHMuc3Rha2luZDIsIHMuc3Rha2luZDMsIHMuc3Rha2luZDQs IHMuc3Rha2luZDUsCisgICAgcy5zdGFvcDEsIHMuc3Rhb3AyLCBzLnN0YW9wMywgcy5zdGFvcDQs IHMuc3Rhb3A1LAorICAgIHMuc3RhY29sbDEsIHMuc3RhY29sbDIsIHMuc3RhY29sbDMsIHMuc3Rh Y29sbDQsIHMuc3RhY29sbDUsCisgICAgcy5zdGFudW1iZXJzMSwgcy5zdGFudW1iZXJzMiwgcy5z dGFudW1iZXJzMywgcy5zdGFudW1iZXJzNCwgcy5zdGFudW1iZXJzNSwKKyAgICBzLnN0YXZhbHVl czE6OnRleHQgQVMgc3YxLCBzLnN0YXZhbHVlczI6OnRleHQgQVMgc3YyLAorICAgIHMuc3RhdmFs dWVzMzo6dGV4dCBBUyBzdjMsIHMuc3RhdmFsdWVzNDo6dGV4dCBBUyBzdjQsCisgICAgcy5zdGF2 YWx1ZXM1Ojp0ZXh0IEFTIHN2NSwgJ2lzX29kZF9jbG9uZScgQVMgZGlyZWN0aW9uCitGUk9NIHBn X3N0YXRpc3RpYyBzCitKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBzLnN0YXJl bGlkIEFORCBhLmF0dG51bSA9IHMuc3RhYXR0bnVtCitXSEVSRSBzLnN0YXJlbGlkID0gJ3N0YXRz X2ltcG9ydC5pc19vZGQnOjpyZWdjbGFzczsKKyBhdHRuYW1lIHwgc3RhaW5oZXJpdCB8IHN0YW51 bGxmcmFjIHwgc3Rhd2lkdGggfCBzdGFkaXN0aW5jdCB8IHN0YWtpbmQxIHwgc3Rha2luZDIgfCBz dGFraW5kMyB8IHN0YWtpbmQ0IHwgc3Rha2luZDUgfCBzdGFvcDEgfCBzdGFvcDIgfCBzdGFvcDMg fCBzdGFvcDQgfCBzdGFvcDUgfCBzdGFjb2xsMSB8IHN0YWNvbGwyIHwgc3RhY29sbDMgfCBzdGFj b2xsNCB8IHN0YWNvbGw1IHwgc3RhbnVtYmVyczEgfCBzdGFudW1iZXJzMiB8IHN0YW51bWJlcnMz IHwgc3RhbnVtYmVyczQgfCBzdGFudW1iZXJzNSB8IHN2MSB8IHN2MiB8IHN2MyB8IHN2NCB8IHN2 NSB8IGRpcmVjdGlvbiAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0t LS0KKygwIHJvd3MpCisKIERST1AgU0NIRU1BIHN0YXRzX2ltcG9ydCBDQVNDQURFOwotTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byAyIG90aGVyIG9iamVjdHMKK05PVElDRTogIGRyb3AgY2FzY2Fk ZXMgdG8gMyBvdGhlciBvYmplY3RzCiBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHR5cGUgc3Rh dHNfaW1wb3J0LmNvbXBsZXhfdHlwZQogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdGF0c19pbXBv cnQudGVzdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwKaW5kZXggZWZmZDViODkyYmYuLjRmYTZl YTQxNTE5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19pbXBvcnQuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwKQEAgLTc2LDQgKzc2 LDU0OCBAQCBTRUxFQ1QgcmVscGFnZXMsIHJlbHR1cGxlcywgcmVsYWxsdmlzaWJsZQogRlJPTSBw Z19jbGFzcwogV0hFUkUgb2lkID0gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3M7CiAKKy0t IGVycm9yOiBvYmplY3QgZG9lc24ndCBleGlzdAorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0 dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnMCc6Om9pZCwKKyAgICBhdHRuYW1lID0+ ICdpZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxf ZnJhYyA9PiAwLjE6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9k aXN0aW5jdCA9PiAwLjM6OnJlYWwpOworCistLSBlcnJvcjogcmVsYXRpb24gbnVsbAorU0VMRUNU IHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiBOVUxM OjpvaWQsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxz ZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC4xOjpyZWFsLAorICAgIGF2Z193aWR0aCA9 PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gMC4zOjpyZWFsKTsKKworLS0gZXJyb3I6 IGF0dG5hbWUgbnVsbAorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygK KyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRu YW1lID0+IE5VTEw6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAg IG51bGxfZnJhYyA9PiAwLjE6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisg ICAgbl9kaXN0aW5jdCA9PiAwLjM6OnJlYWwpOworCistLSBlcnJvcjogaW5oZXJpdGVkIG51bGwK K1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24g PT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpu YW1lLAorICAgIGluaGVyaXRlZCA9PiBOVUxMOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAw LjE6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9 PiAwLjM6OnJlYWwpOworCistLSBlcnJvcjogbnVsbF9mcmFjIG51bGwKK1NFTEVDVCBwZ19jYXRh bG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9y dC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAgIGluaGVy aXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gTlVMTDo6cmVhbCwKKyAg ICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IDAuMzo6cmVhbCk7 CisKKy0tIGVycm9yOiBhdmdfd2lkdGggbnVsbAorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0 dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdj bGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNl Ojpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjE6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+ IE5VTEw6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAwLjM6OnJlYWwpOworCistLSBlcnJv cjogYXZnX3dpZHRoIG51bGwKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3Rh dHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAg YXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwK KyAgICBudWxsX2ZyYWMgPT4gMC4xOjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2Vy LAorICAgIG5fZGlzdGluY3QgPT4gTlVMTDo6cmVhbCk7CisKKy0tIG9rOiBubyBzdGFraW5kcwor U0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9 PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5h bWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAw LjE6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9 PiAwLjM6OnJlYWwpOworCitTRUxFQ1Qgc3RhbnVsbGZyYWMsIHN0YXdpZHRoLCBzdGFkaXN0aW5j dAorRlJPTSBwZ19zdGF0aXN0aWMKK1dIRVJFIHN0YXJlbGlkID0gJ3N0YXRzX2ltcG9ydC50ZXN0 Jzo6cmVnY2xhc3M7CisKKy0tIHdhcm46IG1jdiAvIG1jZiBudWxsIG1pc21hdGNoCitTRUxFQ1Qg cGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0 c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAg ICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVh bCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6 OnJlYWwsCisgICAgbW9zdF9jb21tb25fZnJlcXMgPT4gJ3swLjEsMC4yLDAuM30nOjpyZWFsW10K KyAgICApOworCistLSB3YXJuOiBtY3YgLyBtY2YgbnVsbCBtaXNtYXRjaCBwYXJ0IDIKK1NFTEVD VCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0 YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAor ICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41Ojpy ZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAu MTo6cmVhbCwKKyAgICBtb3N0X2NvbW1vbl92YWxzID0+ICd7MSwyLDN9Jzo6dGV4dAorICAgICk7 CisKKy0tIHdhcm46IG1jdiAvIG1jZiB0eXBlIG1pc21hdGNoCitTRUxFQ1QgcGdfY2F0YWxvZy5w Z19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVz dCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQg PT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdf d2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAg bW9zdF9jb21tb25fdmFscyA9PiAnezIwMjMtMDktMzAsMjAyNC0xMC0zMSwzfSc6OnRleHQsCisg ICAgbW9zdF9jb21tb25fZnJlcXMgPT4gJ3swLjIsMC4xfSc6OnJlYWxbXQorICAgICk7CisKKy0t IHdhcm5pbmc6IG1jdiBjYXN0IGZhaWx1cmUKK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRy aWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xh c3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6 Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41OjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAy OjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAuMTo6cmVhbCwKKyAgICBtb3N0X2NvbW1v bl92YWxzID0+ICd7Mixmb3VyLDN9Jzo6dGV4dCwKKyAgICBtb3N0X2NvbW1vbl9mcmVxcyA9PiAn ezAuMywwLjI1LDAuMDV9Jzo6cmVhbFtdCisgICAgKTsKKworLS0gb2s6IG1jdittY2YKK1NFTEVD VCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0 YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAor ICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41Ojpy ZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAu MTo6cmVhbCwKKyAgICBtb3N0X2NvbW1vbl92YWxzID0+ICd7MiwxLDN9Jzo6dGV4dCwKKyAgICBt b3N0X2NvbW1vbl9mcmVxcyA9PiAnezAuMywwLjI1LDAuMDV9Jzo6cmVhbFtdCisgICAgKTsKKwor U0VMRUNUICoKK0ZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0 JworQU5EIHRhYmxlbmFtZSA9ICd0ZXN0JworQU5EIGluaGVyaXRlZCA9IGZhbHNlCitBTkQgYXR0 bmFtZSA9ICdpZCc7CisKKy0tIHdhcm46IGhpc3RvZ3JhbSBlbGVtZW50cyBudWxsIHZhbHVlCist LSB0aGlzIGdlbmVyYXRlcyBubyB3YXJuaW5ncywgYnV0IHBlcmhhcHMgaXQgc2hvdWxkCitTRUxF Q1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdz dGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwK KyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6 cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0w LjE6OnJlYWwsCisgICAgaGlzdG9ncmFtX2JvdW5kcyA9PiAnezEsTlVMTCwzLDR9Jzo6dGV4dAor ICAgICk7CisKKy0tIG9rOiBoaXN0b2dyYW1fYm91bmRzCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19z ZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6 OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2lkJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4g ZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lk dGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgaGlz dG9ncmFtX2JvdW5kcyA9PiAnezEsMiwzLDR9Jzo6dGV4dAorICAgICk7CisKK1NFTEVDVCAqCitG Uk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCB0YWJs ZW5hbWUgPSAndGVzdCcKK0FORCBpbmhlcml0ZWQgPSBmYWxzZQorQU5EIGF0dG5hbWUgPSAnaWQn OworCistLSBvazogY29ycmVsYXRpb24KK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1 dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3Ms CisgICAgYXR0bmFtZSA9PiAnaWQnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9v bGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41OjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjpp bnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAuMTo6cmVhbCwKKyAgICBjb3JyZWxhdGlvbiA9 PiAwLjU6OnJlYWwpOworCitTRUxFQ1QgKgorRlJPTSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFt ZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgdGFibGVuYW1lID0gJ3Rlc3QnCitBTkQgaW5oZXJpdGVk ID0gZmFsc2UKK0FORCBhdHRuYW1lID0gJ2lkJzsKKworLS0gd2Fybjogc2NhbGFycyBjYW4ndCBo YXZlIG1jZWxlbQorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAg ICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1l ID0+ICdpZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51 bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAg bl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIG1vc3RfY29tbW9uX2VsZW1zID0+ICd7MSwz fSc6OnRleHQsCisgICAgbW9zdF9jb21tb25fZWxlbV9mcmVxcyA9PiAnezAuMywwLjIsMC4yLDAu MywwLjB9Jzo6cmVhbFtdCisgICAgKTsKKworLS0gd2FybjogbWNlbGVtIC8gbWNlbGVtIG1pc21h dGNoCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0 aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ3Rh Z3MnOjpuYW1lLAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2Zy YWMgPT4gMC41OjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlz dGluY3QgPT4gLTAuMTo6cmVhbCwKKyAgICBtb3N0X2NvbW1vbl9lbGVtcyA9PiAne29uZSx0d299 Jzo6dGV4dAorICAgICk7CisKKy0tIHdhcm46IG1jZWxlbSAvIG1jZWxlbSBudWxsIG1pc21hdGNo IHBhcnQgMgorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICBy ZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ ICd0YWdzJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVs bF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBu X2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgbW9zdF9jb21tb25fZWxlbV9mcmVxcyA9PiAn ezAuMywwLjIsMC4yLDAuM30nOjpyZWFsW10KKyAgICApOworCistLSBvazogbWNlbGVtCitTRUxF Q1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdz dGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ3RhZ3MnOjpuYW1l LAorICAgIGluaGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41 OjpyZWFsLAorICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4g LTAuMTo6cmVhbCwKKyAgICBtb3N0X2NvbW1vbl9lbGVtcyA9PiAne29uZSx0aHJlZX0nOjp0ZXh0 LAorICAgIG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgPT4gJ3swLjMsMC4yLDAuMiwwLjMsMC4wfSc6 OnJlYWxbXQorICAgICk7CisKK1NFTEVDVCAqCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFu YW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCB0YWJsZW5hbWUgPSAndGVzdCcKK0FORCBpbmhlcml0 ZWQgPSBmYWxzZQorQU5EIGF0dG5hbWUgPSAndGFncyc7CisKKy0tIHdhcm46IHNjYWxhcnMgY2Fu J3QgaGF2ZSBlbGVtX2NvdW50X2hpc3RvZ3JhbQorU0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0 dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdj bGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNl Ojpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+ IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIGVsZW1fY291 bnRfaGlzdG9ncmFtID0+ICd7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxfSc6OnJlYWxb XQorICAgICk7CistLSB3YXJuOiBlbGVtX2NvdW50X2hpc3RvZ3JhbSBudWxsIGVsZW1lbnQKK1NF TEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4g J3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAndGFncyc6Om5h bWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAw LjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9 PiAtMC4xOjpyZWFsLAorICAgIGVsZW1fY291bnRfaGlzdG9ncmFtID0+ICd7MSwxLE5VTEwsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxfSc6OnJlYWxbXQorICAgICk7CistLSBvazogZWxlbV9jb3Vu dF9oaXN0b2dyYW0KK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisg ICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFt ZSA9PiAndGFncyc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAg IG51bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisg ICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIGVsZW1fY291bnRfaGlzdG9ncmFtID0+ ICd7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxfSc6OnJlYWxbXQorICAgICk7CisKK1NF TEVDVCAqCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcK K0FORCB0YWJsZW5hbWUgPSAndGVzdCcKK0FORCBpbmhlcml0ZWQgPSBmYWxzZQorQU5EIGF0dG5h bWUgPSAndGFncyc7CisKKy0tIHdhcm46IHNjYWxhcnMgY2FuJ3QgaGF2ZSByYW5nZSBzdGF0cwor U0VMRUNUIHBnX2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9 PiAnc3RhdHNfaW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5h bWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAw LjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9 PiAtMC4xOjpyZWFsLAorICAgIHJhbmdlX2VtcHR5X2ZyYWMgPT4gMC41OjpyZWFsLAorICAgIHJh bmdlX2xlbmd0aF9oaXN0b2dyYW0gPT4gJ3szOTksNDk5LEluZmluaXR5fSc6OnRleHQKKyAgICAp OworLS0gd2FybjogcmFuZ2VfZW1wdHlfZnJhYyByYW5nZV9sZW5ndGhfaGlzdCBudWxsIG1pc21h dGNoCitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19zZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0 aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2Fy YW5nZSc6Om5hbWUsCisgICAgaW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxf ZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9k aXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAgIHJhbmdlX2xlbmd0aF9oaXN0b2dyYW0gPT4gJ3sz OTksNDk5LEluZmluaXR5fSc6OnRleHQKKyAgICApOworLS0gd2FybjogcmFuZ2VfZW1wdHlfZnJh YyByYW5nZV9sZW5ndGhfaGlzdCBudWxsIG1pc21hdGNoIHBhcnQgMgorU0VMRUNUIHBnX2NhdGFs b2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0 LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdhcmFuZ2UnOjpuYW1lLAorICAgIGlu aGVyaXRlZCA9PiBmYWxzZTo6Ym9vbGVhbiwKKyAgICBudWxsX2ZyYWMgPT4gMC41OjpyZWFsLAor ICAgIGF2Z193aWR0aCA9PiAyOjppbnRlZ2VyLAorICAgIG5fZGlzdGluY3QgPT4gLTAuMTo6cmVh bCwKKyAgICByYW5nZV9lbXB0eV9mcmFjID0+IDAuNTo6cmVhbAorICAgICk7CistLSBvazogcmFu Z2VfZW1wdHlfZnJhYyArIHJhbmdlX2xlbmd0aF9oaXN0CitTRUxFQ1QgcGdfY2F0YWxvZy5wZ19z ZXRfYXR0cmlidXRlX3N0YXRzKAorICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQudGVzdCc6 OnJlZ2NsYXNzLAorICAgIGF0dG5hbWUgPT4gJ2FyYW5nZSc6Om5hbWUsCisgICAgaW5oZXJpdGVk ID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWwsCisgICAgYXZn X3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpyZWFsLAorICAg IHJhbmdlX2VtcHR5X2ZyYWMgPT4gMC41OjpyZWFsLAorICAgIHJhbmdlX2xlbmd0aF9oaXN0b2dy YW0gPT4gJ3szOTksNDk5LEluZmluaXR5fSc6OnRleHQKKyAgICApOworCitTRUxFQ1QgKgorRlJP TSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgdGFibGVu YW1lID0gJ3Rlc3QnCitBTkQgaW5oZXJpdGVkID0gZmFsc2UKK0FORCBhdHRuYW1lID0gJ2FyYW5n ZSc7CisKKy0tIHdhcm46IHNjYWxhcnMgY2FuJ3QgaGF2ZSByYW5nZSBzdGF0cworU0VMRUNUIHBn X2NhdGFsb2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICByZWxhdGlvbiA9PiAnc3RhdHNf aW1wb3J0LnRlc3QnOjpyZWdjbGFzcywKKyAgICBhdHRuYW1lID0+ICdpZCc6Om5hbWUsCisgICAg aW5oZXJpdGVkID0+IGZhbHNlOjpib29sZWFuLAorICAgIG51bGxfZnJhYyA9PiAwLjU6OnJlYWws CisgICAgYXZnX3dpZHRoID0+IDI6OmludGVnZXIsCisgICAgbl9kaXN0aW5jdCA9PiAtMC4xOjpy ZWFsLAorICAgIHJhbmdlX2JvdW5kc19oaXN0b2dyYW0gPT4gJ3siWy0xLDEpIiwiWzAsNCkiLCJb MSw0KSIsIlsxLDEwMCkifSc6OnRleHQKKyAgICApOworLS0gb2s6IHJhbmdlX2JvdW5kc19oaXN0 b2dyYW0KK1NFTEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVs YXRpb24gPT4gJ3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAn YXJhbmdlJzo6bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVs bF9mcmFjID0+IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBu X2Rpc3RpbmN0ID0+IC0wLjE6OnJlYWwsCisgICAgcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSA9PiAn eyJbLTEsMSkiLCJbMCw0KSIsIlsxLDQpIiwiWzEsMTAwKSJ9Jzo6dGV4dAorICAgICk7CisKK1NF TEVDVCAqCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcK K0FORCB0YWJsZW5hbWUgPSAndGVzdCcKK0FORCBpbmhlcml0ZWQgPSBmYWxzZQorQU5EIGF0dG5h bWUgPSAnYXJhbmdlJzsKKworLS0gd2FybjogZXhjZWVkIFNUQVRJU1RJQ19OVU1fU0xPVFMKK1NF TEVDVCBwZ19jYXRhbG9nLnBnX3NldF9hdHRyaWJ1dGVfc3RhdHMoCisgICAgcmVsYXRpb24gPT4g J3N0YXRzX2ltcG9ydC50ZXN0Jzo6cmVnY2xhc3MsCisgICAgYXR0bmFtZSA9PiAnYXJhbmdlJzo6 bmFtZSwKKyAgICBpbmhlcml0ZWQgPT4gZmFsc2U6OmJvb2xlYW4sCisgICAgbnVsbF9mcmFjID0+ IDAuNTo6cmVhbCwKKyAgICBhdmdfd2lkdGggPT4gMjo6aW50ZWdlciwKKyAgICBuX2Rpc3RpbmN0 ID0+IC0wLjE6OnJlYWwsCisgICAgbW9zdF9jb21tb25fdmFscyA9PiAneyJbMiwzKSIsIlsxLDIp IiwiWzMsNCkifSc6OnRleHQsCisgICAgbW9zdF9jb21tb25fZnJlcXMgPT4gJ3swLjMsMC4yNSww LjA1fSc6OnJlYWxbXSwKKyAgICBoaXN0b2dyYW1fYm91bmRzID0+ICd7IlsxLDIpIiwiWzIsMyki LCJbMyw0KSIsIls0LDUpIn0nOjp0ZXh0LAorICAgIGNvcnJlbGF0aW9uID0+IDEuMTo6cmVhbCwK KyAgICBtb3N0X2NvbW1vbl9lbGVtcyA9PiAnezMsMX0nOjp0ZXh0LAorICAgIG1vc3RfY29tbW9u X2VsZW1fZnJlcXMgPT4gJ3swLjMsMC4yLDAuMiwwLjMsMC4wfSc6OnJlYWxbXSwKKyAgICByYW5n ZV9lbXB0eV9mcmFjID0+IC0wLjU6OnJlYWwsCisgICAgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSA9 PiAnezM5OSw0OTksSW5maW5pdHl9Jzo6dGV4dCwKKyAgICByYW5nZV9ib3VuZHNfaGlzdG9ncmFt ID0+ICd7IlstMSwxKSIsIlswLDQpIiwiWzEsNCkiLCJbMSwxMDApIn0nOjp0ZXh0CisgICAgKTsK Ky0tCistLSBUZXN0IHRoZSBhYmlsaXR5IHRvIGV4YWN0bHkgY29weSBkYXRhIGZyb20gb25lIHRh YmxlIHRvIGFuIGlkZW50aWNhbCB0YWJsZSwKKy0tIGNvcnJlY3RseSByZWNvbnN0cnVjdGluZyB0 aGUgc3Rha2luZCBvcmRlciBhcyB3ZWxsIGFzIHRoZSBzdGFvcE4gYW5kCistLSBzdGFjb2xsTiB2 YWx1ZXMuIEJlY2F1c2Ugb2lkcyBhcmUgbm90IHN0YWJsZSBhY3Jvc3MgZGF0YWJhc2VzLCB3ZSBj YW4gb25seQorLS0gdGVzdCB0aGlzIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJl IG9uIHRoZSBzYW1lIGRhdGFiYXNlCistLSBpbnN0YW5jZS4gRm9yIHRoYXQgcmVhc29uLCB3ZSBi b3Jyb3cgYW5kIGFkYXB0IGEgcXVlcnkgZm91bmQgaW4gZmVfdXRpbHMKKy0tIGFuZCB1c2VkIGJ5 IHBnX2R1bXAvcGdfdXBncmFkZS4KKy0tCitJTlNFUlQgSU5UTyBzdGF0c19pbXBvcnQudGVzdAor U0VMRUNUIDEsICdvbmUnLCAoMSwgMS4xLCAnT05FJywgJzIwMDEtMDEtMDEnLCAneyAieGtleSI6 ICJ4dmFsIiB9Jyk6OnN0YXRzX2ltcG9ydC5jb21wbGV4X3R5cGUsIGludDRyYW5nZSgxLDQpLCBh cnJheVsncmVkJywnZ3JlZW4nXQorVU5JT04gQUxMCitTRUxFQ1QgMiwgJ3R3bycsICgyLCAyLjIs ICdUV08nLCAnMjAwMi0wMi0wMicsICdbdHJ1ZSwgNCwgInNpeCJdJyk6OnN0YXRzX2ltcG9ydC5j b21wbGV4X3R5cGUsICBpbnQ0cmFuZ2UoMSw0KSwgYXJyYXlbJ2JsdWUnLCd5ZWxsb3cnXQorVU5J T04gQUxMCitTRUxFQ1QgMywgJ3RyZScsICgzLCAzLjMsICdUUkUnLCAnMjAwMy0wMy0wMycsIE5V TEwpOjpzdGF0c19pbXBvcnQuY29tcGxleF90eXBlLCBpbnQ0cmFuZ2UoLTEsMSksIGFycmF5Wyci b3JhbmdlIicsICdwdXJwbGUnLCAnY3lhbiddCitVTklPTiBBTEwKK1NFTEVDVCA0LCAnZm91cics IE5VTEwsIGludDRyYW5nZSgwLDEwMCksIE5VTEw7CisKK0NSRUFURSBJTkRFWCBpc19vZGQgT04g c3RhdHNfaW1wb3J0LnRlc3QoKChjb21wKS5hICUgMiA9IDEpKTsKKworLS0gR2VuZXJhdGUgc3Rh dGlzdGljcyBvbiB0YWJsZSB3aXRoIGRhdGEKK0FOQUxZWkUgc3RhdHNfaW1wb3J0LnRlc3Q7CisK K0NSRUFURSBUQUJMRSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZSAoIExJS0Ugc3RhdHNfaW1wb3J0 LnRlc3QgKTsKKworQ1JFQVRFIElOREVYIGlzX29kZF9jbG9uZSBPTiBzdGF0c19pbXBvcnQudGVz dF9jbG9uZSgoKGNvbXApLmEgJSAyID0gMSkpOworCistLQorLS0gQ29weSBzdGF0cyBmcm9tIHRl c3QgdG8gdGVzdF9jbG9uZSwgYW5kIGlzX29kZCB0byBpc19vZGRfY2xvbmUKKy0tCitTRUxFQ1Qg cy5zY2hlbWFuYW1lLCBzLnRhYmxlbmFtZSwgcy5hdHRuYW1lLCBzLmluaGVyaXRlZAorRlJPTSBw Z19jYXRhbG9nLnBnX3N0YXRzIEFTIHMKK0NST1NTIEpPSU4gTEFURVJBTAorICAgIHBnX2NhdGFs b2cucGdfc2V0X2F0dHJpYnV0ZV9zdGF0cygKKyAgICAgICAgcmVsYXRpb24gPT4gKCdzdGF0c19p bXBvcnQuJyB8fCBzLnRhYmxlbmFtZSB8fCAnX2Nsb25lJyk6OnJlZ2NsYXNzOjpvaWQsCisgICAg ICAgIGF0dG5hbWUgPT4gcy5hdHRuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4gcy5pbmhlcml0 ZWQsCisgICAgICAgIG51bGxfZnJhYyA9PiBzLm51bGxfZnJhYywKKyAgICAgICAgYXZnX3dpZHRo ID0+IHMuYXZnX3dpZHRoLAorICAgICAgICBuX2Rpc3RpbmN0ID0+IHMubl9kaXN0aW5jdCwKKyAg ICAgICAgbW9zdF9jb21tb25fdmFscyA9PiBzLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQsCisgICAg ICAgIG1vc3RfY29tbW9uX2ZyZXFzID0+IHMubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgIGhp c3RvZ3JhbV9ib3VuZHMgPT4gcy5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0LAorICAgICAgICBjb3Jy ZWxhdGlvbiA9PiBzLmNvcnJlbGF0aW9uLAorICAgICAgICBtb3N0X2NvbW1vbl9lbGVtcyA9PiBz Lm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0LAorICAgICAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFz ID0+IHMubW9zdF9jb21tb25fZWxlbV9mcmVxcywKKyAgICAgICAgZWxlbV9jb3VudF9oaXN0b2dy YW0gPT4gcy5lbGVtX2NvdW50X2hpc3RvZ3JhbSwKKyAgICAgICAgcmFuZ2VfYm91bmRzX2hpc3Rv Z3JhbSA9PiBzLnJhbmdlX2JvdW5kc19oaXN0b2dyYW06OnRleHQsCisgICAgICAgIHJhbmdlX2Vt cHR5X2ZyYWMgPT4gcy5yYW5nZV9lbXB0eV9mcmFjLAorICAgICAgICByYW5nZV9sZW5ndGhfaGlz dG9ncmFtID0+IHMucmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbTo6dGV4dCkgQVMgcgorV0hFUkUgcy5z Y2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBzLnRhYmxlbmFtZSBJTiAoJ3Rlc3QnLCAn aXNfb2RkJykKK09SREVSIEJZIHMudGFibGVuYW1lLCBzLmF0dG5hbWUsIHMuaW5oZXJpdGVkOwor CitTRUxFQ1QgYy5yZWxuYW1lLCBDT1VOVCgqKSBBUyBudW1fc3RhdHMKK0ZST00gcGdfY2xhc3Mg QVMgYworSk9JTiBwZ19zdGF0aXN0aWMgcyBPTiBzLnN0YXJlbGlkID0gYy5vaWQKK1dIRVJFIGMu cmVsbmFtZXNwYWNlID0gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFjZQorQU5EIGMucmVsbmFt ZSBJTiAoJ3Rlc3QnLCAndGVzdF9jbG9uZScsICdpc19vZGQnLCAnaXNfb2RkX2Nsb25lJykKK0dS T1VQIEJZIGMucmVsbmFtZQorT1JERVIgQlkgYy5yZWxuYW1lOworCistLSBjaGVjayB0ZXN0IG1p bnVzIHRlc3RfY2xvbmUKK1NFTEVDVAorICAgIGEuYXR0bmFtZSwgcy5zdGFpbmhlcml0LCBzLnN0 YW51bGxmcmFjLCBzLnN0YXdpZHRoLCBzLnN0YWRpc3RpbmN0LAorICAgIHMuc3Rha2luZDEsIHMu c3Rha2luZDIsIHMuc3Rha2luZDMsIHMuc3Rha2luZDQsIHMuc3Rha2luZDUsCisgICAgcy5zdGFv cDEsIHMuc3Rhb3AyLCBzLnN0YW9wMywgcy5zdGFvcDQsIHMuc3Rhb3A1LAorICAgIHMuc3RhY29s bDEsIHMuc3RhY29sbDIsIHMuc3RhY29sbDMsIHMuc3RhY29sbDQsIHMuc3RhY29sbDUsCisgICAg cy5zdGFudW1iZXJzMSwgcy5zdGFudW1iZXJzMiwgcy5zdGFudW1iZXJzMywgcy5zdGFudW1iZXJz NCwgcy5zdGFudW1iZXJzNSwKKyAgICBzLnN0YXZhbHVlczE6OnRleHQgQVMgc3YxLCBzLnN0YXZh bHVlczI6OnRleHQgQVMgc3YyLAorICAgIHMuc3RhdmFsdWVzMzo6dGV4dCBBUyBzdjMsIHMuc3Rh dmFsdWVzNDo6dGV4dCBBUyBzdjQsCisgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFTIHN2NSwgJ3Rl c3QnIEFTIGRpcmVjdGlvbgorRlJPTSBwZ19zdGF0aXN0aWMgcworSk9JTiBwZ19hdHRyaWJ1dGUg YSBPTiBhLmF0dHJlbGlkID0gcy5zdGFyZWxpZCBBTkQgYS5hdHRudW0gPSBzLnN0YWF0dG51bQor V0hFUkUgcy5zdGFyZWxpZCA9ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzCitFWENFUFQK K1NFTEVDVAorICAgIGEuYXR0bmFtZSwgcy5zdGFpbmhlcml0LCBzLnN0YW51bGxmcmFjLCBzLnN0 YXdpZHRoLCBzLnN0YWRpc3RpbmN0LAorICAgIHMuc3Rha2luZDEsIHMuc3Rha2luZDIsIHMuc3Rh a2luZDMsIHMuc3Rha2luZDQsIHMuc3Rha2luZDUsCisgICAgcy5zdGFvcDEsIHMuc3Rhb3AyLCBz LnN0YW9wMywgcy5zdGFvcDQsIHMuc3Rhb3A1LAorICAgIHMuc3RhY29sbDEsIHMuc3RhY29sbDIs IHMuc3RhY29sbDMsIHMuc3RhY29sbDQsIHMuc3RhY29sbDUsCisgICAgcy5zdGFudW1iZXJzMSwg cy5zdGFudW1iZXJzMiwgcy5zdGFudW1iZXJzMywgcy5zdGFudW1iZXJzNCwgcy5zdGFudW1iZXJz NSwKKyAgICBzLnN0YXZhbHVlczE6OnRleHQgQVMgc3YxLCBzLnN0YXZhbHVlczI6OnRleHQgQVMg c3YyLAorICAgIHMuc3RhdmFsdWVzMzo6dGV4dCBBUyBzdjMsIHMuc3RhdmFsdWVzNDo6dGV4dCBB UyBzdjQsCisgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFTIHN2NSwgJ3Rlc3QnIEFTIGRpcmVjdGlv bgorRlJPTSBwZ19zdGF0aXN0aWMgcworSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlk ID0gcy5zdGFyZWxpZCBBTkQgYS5hdHRudW0gPSBzLnN0YWF0dG51bQorV0hFUkUgcy5zdGFyZWxp ZCA9ICdzdGF0c19pbXBvcnQudGVzdF9jbG9uZSc6OnJlZ2NsYXNzOworCistLSBjaGVjayB0ZXN0 X2Nsb25lIG1pbnVzIHRlc3QKK1NFTEVDVAorICAgIGEuYXR0bmFtZSwgcy5zdGFpbmhlcml0LCBz LnN0YW51bGxmcmFjLCBzLnN0YXdpZHRoLCBzLnN0YWRpc3RpbmN0LAorICAgIHMuc3Rha2luZDEs IHMuc3Rha2luZDIsIHMuc3Rha2luZDMsIHMuc3Rha2luZDQsIHMuc3Rha2luZDUsCisgICAgcy5z dGFvcDEsIHMuc3Rhb3AyLCBzLnN0YW9wMywgcy5zdGFvcDQsIHMuc3Rhb3A1LAorICAgIHMuc3Rh Y29sbDEsIHMuc3RhY29sbDIsIHMuc3RhY29sbDMsIHMuc3RhY29sbDQsIHMuc3RhY29sbDUsCisg ICAgcy5zdGFudW1iZXJzMSwgcy5zdGFudW1iZXJzMiwgcy5zdGFudW1iZXJzMywgcy5zdGFudW1i ZXJzNCwgcy5zdGFudW1iZXJzNSwKKyAgICBzLnN0YXZhbHVlczE6OnRleHQgQVMgc3YxLCBzLnN0 YXZhbHVlczI6OnRleHQgQVMgc3YyLAorICAgIHMuc3RhdmFsdWVzMzo6dGV4dCBBUyBzdjMsIHMu c3RhdmFsdWVzNDo6dGV4dCBBUyBzdjQsCisgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFTIHN2NSwg J3Rlc3RfY2xvbmUnIEFTIGRpcmVjdGlvbgorRlJPTSBwZ19zdGF0aXN0aWMgcworSk9JTiBwZ19h dHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gcy5zdGFyZWxpZCBBTkQgYS5hdHRudW0gPSBzLnN0 YWF0dG51bQorV0hFUkUgcy5zdGFyZWxpZCA9ICdzdGF0c19pbXBvcnQudGVzdF9jbG9uZSc6OnJl Z2NsYXNzCitFWENFUFQKK1NFTEVDVAorICAgIGEuYXR0bmFtZSwgcy5zdGFpbmhlcml0LCBzLnN0 YW51bGxmcmFjLCBzLnN0YXdpZHRoLCBzLnN0YWRpc3RpbmN0LAorICAgIHMuc3Rha2luZDEsIHMu c3Rha2luZDIsIHMuc3Rha2luZDMsIHMuc3Rha2luZDQsIHMuc3Rha2luZDUsCisgICAgcy5zdGFv cDEsIHMuc3Rhb3AyLCBzLnN0YW9wMywgcy5zdGFvcDQsIHMuc3Rhb3A1LAorICAgIHMuc3RhY29s bDEsIHMuc3RhY29sbDIsIHMuc3RhY29sbDMsIHMuc3RhY29sbDQsIHMuc3RhY29sbDUsCisgICAg cy5zdGFudW1iZXJzMSwgcy5zdGFudW1iZXJzMiwgcy5zdGFudW1iZXJzMywgcy5zdGFudW1iZXJz NCwgcy5zdGFudW1iZXJzNSwKKyAgICBzLnN0YXZhbHVlczE6OnRleHQgQVMgc3YxLCBzLnN0YXZh bHVlczI6OnRleHQgQVMgc3YyLAorICAgIHMuc3RhdmFsdWVzMzo6dGV4dCBBUyBzdjMsIHMuc3Rh dmFsdWVzNDo6dGV4dCBBUyBzdjQsCisgICAgcy5zdGF2YWx1ZXM1Ojp0ZXh0IEFTIHN2NSwgJ3Rl c3RfY2xvbmUnIEFTIGRpcmVjdGlvbgorRlJPTSBwZ19zdGF0aXN0aWMgcworSk9JTiBwZ19hdHRy aWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gcy5zdGFyZWxpZCBBTkQgYS5hdHRudW0gPSBzLnN0YWF0 dG51bQorV0hFUkUgcy5zdGFyZWxpZCA9ICdzdGF0c19pbXBvcnQudGVzdCc6OnJlZ2NsYXNzOwor CistLSBjaGVjayBpc19vZGQgbWludXMgaXNfb2RkX2Nsb25lCitTRUxFQ1QKKyAgICBhLmF0dG5h bWUsIHMuc3RhaW5oZXJpdCwgcy5zdGFudWxsZnJhYywgcy5zdGF3aWR0aCwgcy5zdGFkaXN0aW5j dCwKKyAgICBzLnN0YWtpbmQxLCBzLnN0YWtpbmQyLCBzLnN0YWtpbmQzLCBzLnN0YWtpbmQ0LCBz LnN0YWtpbmQ1LAorICAgIHMuc3Rhb3AxLCBzLnN0YW9wMiwgcy5zdGFvcDMsIHMuc3Rhb3A0LCBz LnN0YW9wNSwKKyAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLCBzLnN0YWNvbGwzLCBzLnN0YWNv bGw0LCBzLnN0YWNvbGw1LAorICAgIHMuc3RhbnVtYmVyczEsIHMuc3RhbnVtYmVyczIsIHMuc3Rh bnVtYmVyczMsIHMuc3RhbnVtYmVyczQsIHMuc3RhbnVtYmVyczUsCisgICAgcy5zdGF2YWx1ZXMx Ojp0ZXh0IEFTIHN2MSwgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2MiwKKyAgICBzLnN0YXZhbHVl czM6OnRleHQgQVMgc3YzLCBzLnN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0LAorICAgIHMuc3RhdmFs dWVzNTo6dGV4dCBBUyBzdjUsICdpc19vZGQnIEFTIGRpcmVjdGlvbgorRlJPTSBwZ19zdGF0aXN0 aWMgcworSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0gcy5zdGFyZWxpZCBBTkQg YS5hdHRudW0gPSBzLnN0YWF0dG51bQorV0hFUkUgcy5zdGFyZWxpZCA9ICdzdGF0c19pbXBvcnQu aXNfb2RkJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VMRUNUCisgICAgYS5hdHRuYW1lLCBzLnN0YWlu aGVyaXQsIHMuc3RhbnVsbGZyYWMsIHMuc3Rhd2lkdGgsIHMuc3RhZGlzdGluY3QsCisgICAgcy5z dGFraW5kMSwgcy5zdGFraW5kMiwgcy5zdGFraW5kMywgcy5zdGFraW5kNCwgcy5zdGFraW5kNSwK KyAgICBzLnN0YW9wMSwgcy5zdGFvcDIsIHMuc3Rhb3AzLCBzLnN0YW9wNCwgcy5zdGFvcDUsCisg ICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgcy5zdGFjb2xsMywgcy5zdGFjb2xsNCwgcy5zdGFj b2xsNSwKKyAgICBzLnN0YW51bWJlcnMxLCBzLnN0YW51bWJlcnMyLCBzLnN0YW51bWJlcnMzLCBz LnN0YW51bWJlcnM0LCBzLnN0YW51bWJlcnM1LAorICAgIHMuc3RhdmFsdWVzMTo6dGV4dCBBUyBz djEsIHMuc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIsCisgICAgcy5zdGF2YWx1ZXMzOjp0ZXh0IEFT IHN2Mywgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2NCwKKyAgICBzLnN0YXZhbHVlczU6OnRleHQg QVMgc3Y1LCAnaXNfb2RkJyBBUyBkaXJlY3Rpb24KK0ZST00gcGdfc3RhdGlzdGljIHMKK0pPSU4g cGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHMuc3RhcmVsaWQgQU5EIGEuYXR0bnVtID0g cy5zdGFhdHRudW0KK1dIRVJFIHMuc3RhcmVsaWQgPSAnc3RhdHNfaW1wb3J0LmlzX29kZF9jbG9u ZSc6OnJlZ2NsYXNzOworCistLSBjaGVjayBpc19vZGRfY2xvbmUgbWludXMgaXNfb2RkCitTRUxF Q1QKKyAgICBhLmF0dG5hbWUsIHMuc3RhaW5oZXJpdCwgcy5zdGFudWxsZnJhYywgcy5zdGF3aWR0 aCwgcy5zdGFkaXN0aW5jdCwKKyAgICBzLnN0YWtpbmQxLCBzLnN0YWtpbmQyLCBzLnN0YWtpbmQz LCBzLnN0YWtpbmQ0LCBzLnN0YWtpbmQ1LAorICAgIHMuc3Rhb3AxLCBzLnN0YW9wMiwgcy5zdGFv cDMsIHMuc3Rhb3A0LCBzLnN0YW9wNSwKKyAgICBzLnN0YWNvbGwxLCBzLnN0YWNvbGwyLCBzLnN0 YWNvbGwzLCBzLnN0YWNvbGw0LCBzLnN0YWNvbGw1LAorICAgIHMuc3RhbnVtYmVyczEsIHMuc3Rh bnVtYmVyczIsIHMuc3RhbnVtYmVyczMsIHMuc3RhbnVtYmVyczQsIHMuc3RhbnVtYmVyczUsCisg ICAgcy5zdGF2YWx1ZXMxOjp0ZXh0IEFTIHN2MSwgcy5zdGF2YWx1ZXMyOjp0ZXh0IEFTIHN2MiwK KyAgICBzLnN0YXZhbHVlczM6OnRleHQgQVMgc3YzLCBzLnN0YXZhbHVlczQ6OnRleHQgQVMgc3Y0 LAorICAgIHMuc3RhdmFsdWVzNTo6dGV4dCBBUyBzdjUsICdpc19vZGRfY2xvbmUnIEFTIGRpcmVj dGlvbgorRlJPTSBwZ19zdGF0aXN0aWMgcworSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJl bGlkID0gcy5zdGFyZWxpZCBBTkQgYS5hdHRudW0gPSBzLnN0YWF0dG51bQorV0hFUkUgcy5zdGFy ZWxpZCA9ICdzdGF0c19pbXBvcnQuaXNfb2RkX2Nsb25lJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VM RUNUCisgICAgYS5hdHRuYW1lLCBzLnN0YWluaGVyaXQsIHMuc3RhbnVsbGZyYWMsIHMuc3Rhd2lk dGgsIHMuc3RhZGlzdGluY3QsCisgICAgcy5zdGFraW5kMSwgcy5zdGFraW5kMiwgcy5zdGFraW5k Mywgcy5zdGFraW5kNCwgcy5zdGFraW5kNSwKKyAgICBzLnN0YW9wMSwgcy5zdGFvcDIsIHMuc3Rh b3AzLCBzLnN0YW9wNCwgcy5zdGFvcDUsCisgICAgcy5zdGFjb2xsMSwgcy5zdGFjb2xsMiwgcy5z dGFjb2xsMywgcy5zdGFjb2xsNCwgcy5zdGFjb2xsNSwKKyAgICBzLnN0YW51bWJlcnMxLCBzLnN0 YW51bWJlcnMyLCBzLnN0YW51bWJlcnMzLCBzLnN0YW51bWJlcnM0LCBzLnN0YW51bWJlcnM1LAor ICAgIHMuc3RhdmFsdWVzMTo6dGV4dCBBUyBzdjEsIHMuc3RhdmFsdWVzMjo6dGV4dCBBUyBzdjIs CisgICAgcy5zdGF2YWx1ZXMzOjp0ZXh0IEFTIHN2Mywgcy5zdGF2YWx1ZXM0Ojp0ZXh0IEFTIHN2 NCwKKyAgICBzLnN0YXZhbHVlczU6OnRleHQgQVMgc3Y1LCAnaXNfb2RkX2Nsb25lJyBBUyBkaXJl Y3Rpb24KK0ZST00gcGdfc3RhdGlzdGljIHMKK0pPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRy ZWxpZCA9IHMuc3RhcmVsaWQgQU5EIGEuYXR0bnVtID0gcy5zdGFhdHRudW0KK1dIRVJFIHMuc3Rh cmVsaWQgPSAnc3RhdHNfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzOworCiBEUk9QIFNDSEVNQSBz dGF0c19pbXBvcnQgQ0FTQ0FERTsKLS0gCjIuMzQuMQoK --=-bygrKYh0rTj97arNuzeL--