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 1tpYuQ-007xZD-Ds for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Mar 2025 20:30:34 +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 1tpYuN-007Fqp-SH for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Mar 2025 20:30:31 +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 1tpYuM-007Fqf-Sf for pgsql-hackers@lists.postgresql.org; Tue, 04 Mar 2025 20:30:31 +0000 Received: from mail-il1-x130.google.com ([2607:f8b0:4864:20::130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tpYuG-000yJZ-2O for pgsql-hackers@lists.postgresql.org; Tue, 04 Mar 2025 20:30:29 +0000 Received: by mail-il1-x130.google.com with SMTP id e9e14a558f8ab-3cf82bd380bso52995415ab.0 for ; Tue, 04 Mar 2025 12:30:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741120224; x=1741725024; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=vRDHwPPbJ/q64lDjqQa4KTMdeZG1jBPD4ymZycdJeyU=; b=kUBd24P2uRgKuMTvY7mUCbZHrTi+or1A9CNs/uvU7RSbjkUywqjPSvokdyCfpv61ey gYGooI0bXhj+2zAch6YHXiZhaho2ttdhXkxLNDVFt9nCLgBgb03HewiItvdgC2mBD14B 8/XTS7s9sFl3Q2RiZL0FyB1WhCEPqGRWvDDVURPJa5bPccnBUQxRi9aEhWv6seMcOqoE T7x1LNc+nxC80a+HeSPRk1WKxoUBoX7gUcDxLxUyJDVB0M0q4lg9wg5Wv643jePwf1Lj w89bm3SEpYi4SVbAeMwpkv+FIu9tyn8HubOmR60T3PzNmEE3DWPpNBEEFEzVtg9oy7cl Lw2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741120224; x=1741725024; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=vRDHwPPbJ/q64lDjqQa4KTMdeZG1jBPD4ymZycdJeyU=; b=vpRb6srTEbMdlvlMKELkZ8UUGWXCYU3YKnuNss8GDgPlFV/njLq2X3OVf6mZAa3cnb eGmFcsqOQOBmOujcMndo7JLpCpaNz9UL2Of9rl4ritjrc0aER5v6z8dKm295XfJhrRGE eV0Lv2fW4AxsZeQWtxRqt/OlbjNJdigenwz/TROkUkKdfGYlOZS1HRQQUtlTGNqYIV83 Yw2SMrfIAaFISQizouzhNfzaebiLYUMuXyaLZQhaO3jrlG2Jg8+QBUQCx/yMghZu/Ebh mk6SGqwWHr1gGlcDW7LTPcyDVcs1bAX+z9YRZlNdTdm+7qMB8yKLXCowXiRZWnY0if1m TB6g== X-Forwarded-Encrypted: i=1; AJvYcCWIR1CPOsnI/bdpy+ZU2o0r8upS/9MQEkkjp5Kkz/UbPmMCtKKbfElUUlrQXVZOiNyYcLXLThxGHAf1nLaa@lists.postgresql.org X-Gm-Message-State: AOJu0YxbXFEovHHVqjnTIvebsP2imXq7WOgB5bOtVfExr+qfqcFyJAqR 6nUMXnC4tTr3UWrw2U+3wRjVy6EMHVL6xdFPHCntProbDwVdMif1d4sx59K+84GtNVi1QVpQk4E kmud+H3Nh2Jy9ZcB7GDKTzZcMVwQ= X-Gm-Gg: ASbGncvm4fZibRB95tf2Bz4FD2IcbzsGG+3YMw8EhkJr4sSTG8dKeo15LJEjEtrZKKx zWJTw6CaOuJnPIPPoWp9sU5AIGPOzwrDFzd0e7TXAhAikvKI65CQqDyb3PcPw36E1N9LiHa2U9y pUV3N9D02K4p/8ymI9P9fZIvlluQ== X-Google-Smtp-Source: AGHT+IESQTXI9zToJ5oi3XVcPJguKmyg0uvduMCvQBObN9fbscLh09ijoAE68b+mHeozOH97aTzFoGG+GSyerp7UrxY= X-Received: by 2002:a05:6e02:927:b0:3d2:b72d:a502 with SMTP id e9e14a558f8ab-3d42b995fd4mr8174525ab.22.1741120224029; Tue, 04 Mar 2025 12:30:24 -0800 (PST) MIME-Version: 1.0 References: <4630636f-7720-4ce4-ab1c-253b390e5174@vondra.me> In-Reply-To: From: Corey Huinker Date: Tue, 4 Mar 2025 15:30:11 -0500 X-Gm-Features: AQ5f1JqlN5FbVJwGSMjWqRqOG0dUxSuG_D1SDZgCsZbiiBVUcw3gesadhM3Eemg Message-ID: Subject: Re: Extended Statistics set/restore/clear functions. To: jian he Cc: Tomas Vondra , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000772648062f8a2458" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000772648062f8a2458 Content-Type: multipart/alternative; boundary="000000000000772646062f8a2456" --000000000000772646062f8a2456 Content-Type: text/plain; charset="UTF-8" > > >> I think my initial reaction is to just refuse those special values, but >> I'll look into the parsing code to see what can be done. >> > > I noticed that the output function for pg_ndistinct casts that value to an > integer before formatting it %d, so it's being treated as an integer even > if it is not stored as one. After some consultation with Tomas, it made the > most sense to just replicate this on the input side as well, and that is > addressed in the patches below. > > I've updated and rebased the patches. > > The existing pg_ndistinct and pg_dependences formats were kept as-is. The > formats are clumsy, more processing-friendly formats would be easier, but > the need for such processing is minimal bordering on theoretical, so there > is little impact in keeping the historical format. > > There are now checks to ensure that the pg_ndistinct or pg_dependencies > value assigned to an extended statistics object actually makes sense for > that object. What this amounts to is checking that for every attnum cited, > the positive attnums are also ones found the in the stxkeys of the > pg_statistic_ext tuple, and the negative attnums correspond do not exceed > the number of expressions in the attnum. In other words, if the stats > object has no expressions in it, then no negative numbers will be accepted, > if it has 2 expressions than any value -3 or lower will be rejected, etc. > > All patches rebased to 71f17823ba010296da9946bd906bb8bcad6325bc. > A rebasing, and a few changes * regnamespace and name parameters changed to statistics_schemaname as text and statistics_name as text, so that there's one less thing that can potentially fail in an upgrade * schema lookup and stat name lookup failures now issue a warning and return false, rather than ERROR * elevel replaced with hardcoded WARNING most everywhere, as has been done with relation/attribute stats --000000000000772646062f8a2456 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

I think my initial reaction is= to just refuse those special values, but I'll look into the parsing co= de to see what can be done.

I noticed that the output function for pg_ndistinct casts that value to an= integer before formatting it %d, so it's being treated as an integer e= ven if it is not stored as one. After=C2=A0some consultation with Tomas, it= made the most sense to just replicate this on the input side as well, and = that is addressed in the patches below.

I've u= pdated and rebased the patches.

The existing pg_nd= istinct and pg_dependences formats were kept as-is. The formats are clumsy,= more processing-friendly formats would be easier, but the need for such pr= ocessing is minimal bordering on theoretical, so there is little impact in = keeping the historical format.

There are now checks to ensure that t= he pg_ndistinct or pg_dependencies value assigned to an extended statistics= object actually makes sense for that object. What this amounts to is check= ing that for every attnum cited, the positive attnums are also ones found t= he in the stxkeys=C2=A0of the pg_statistic_ext tuple, and the negative attn= ums correspond do not exceed the number of expressions in the attnum. In ot= her words, if the stats object has no expressions in it, then no negative n= umbers will be accepted, if it has 2 expressions than any value -3 or lower= will be rejected, etc.

All patches rebased to=C2=A071f17823ba010296= da9946bd906bb8bcad6325bc.

=
A rebasing, and a few changes
* regnamespace and name parame= ters changed to statistics_schemaname as text and statistics_name as text, = so that there's one less thing that can potentially fail in an upgrade<= /div>
* schema lookup and stat name lookup failures now issue a warning= and return false, rather than ERROR
* elevel replaced with = hardcoded WARNING most everywhere, as has been done with relation/attribute= stats
=C2=A0
--000000000000772646062f8a2456-- --000000000000772648062f8a2458 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Add-working-input-function-for-pg_ndistinct.patch" Content-Disposition: attachment; filename="v4-0001-Add-working-input-function-for-pg_ndistinct.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7uxyy270 RnJvbSAxMzZmMGQwYjA0YTg1OTIyMjBmMDk3NWEzNTI5ZjRlMzRhMjI3ZjQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAxNyBEZWMgMjAyNCAwMzozMDo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djQgMS80XSBBZGQgd29ya2luZyBpbnB1dCBmdW5jdGlvbiBmb3IgcGdfbmRpc3RpbmN0LgoKVGhp cyBpcyBuZWVkZWQgdG8gaW1wb3J0IGV4dGVuZGVkIHN0YXRpc3RpY3MuCi0tLQogLi4uL3N0YXRp c3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaCAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5k L3N0YXRpc3RpY3MvbXZkaXN0aW5jdC5jICAgICAgICAgICB8IDM1OSArKysrKysrKysrKysrKysr Ky0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCAgICAgICB8ICAgNyAr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgICAgICAgfCAgIDMgKwog NCBmaWxlcyBjaGFuZ2VkLCAzNzEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgg Yi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKaW5kZXgg ZWZjYjdkYzM1NDYuLjM5NjkxNWE4YTk3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oCkBAIC0xMjcsNCArMTI3LDEyIEBAIGV4dGVybiBT ZWxlY3Rpdml0eSBtY3ZfY2xhdXNlX3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJCQkgU2VsZWN0aXZpdHkgKm92ZXJsYXBfYmFzZXNlbCwKIAkJCQkJCQkJCQkJIFNl bGVjdGl2aXR5ICp0b3RhbHNlbCk7CiAKK2V4dGVybiBEYXR1bSBpbXBvcnRfbWN2bGlzdChIZWFw VHVwbGUgdHVwLCBpbnQgZWxldmVsLCBpbnQgbnVtYXR0cnMsCisJCQkJCQkJT2lkICphdHR0eXBp ZHMsIGludDMyICphdHR0eXBtb2RzLCBPaWQgKmF0dHR5cGNvbGxzLAorCQkJCQkJCWludCBuaXRl bXMsIERhdHVtICptY3ZfZWxlbXMsIGJvb2wgKm1jdl9udWxscywKKwkJCQkJCQlib29sICptY3Zf ZWxlbV9udWxscywgZmxvYXQ4ICpmcmVxcywgZmxvYXQ4ICpiYXNlX2ZyZXFzKTsKK2V4dGVybiBi b29sIHBnX25kaXN0aW5jdF92YWxpZGF0ZV9pdGVtcyhNVk5EaXN0aW5jdCAqbmRpc3RpbmN0LCBp bnQydmVjdG9yICpzdHhrZXlzLAorCQkJCQkJCQkJCWludCBudW1leHBycywgaW50IGVsZXZlbCk7 CitleHRlcm4gdm9pZCBmcmVlX3BnX25kaXN0aW5jdChNVk5EaXN0aW5jdCAqbmRpc3RpbmN0KTsK KwogI2VuZGlmCQkJCQkJCS8qIEVYVEVOREVEX1NUQVRTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbXZkaXN0aW5jdC5jIGIvc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9tdmRpc3RpbmN0LmMKaW5kZXggN2U3YTYzNDA1YzguLmU5YzAyYWFhNjNlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL212ZGlzdGluY3QuYworKysgYi9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL212ZGlzdGluY3QuYwpAQCAtMjcsMTAgKzI3LDE5IEBACiAKICNpbmNs dWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0 YXRpc3RpY19leHRfZGF0YS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNpbmNsdWRlICJj b21tb24vanNvbmFwaS5oIgorI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5n aW5mby5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25v ZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mv ZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3Rp Y3MuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0 LmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL3BhbGxv Yy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2Fj aGUuaCIKICNpbmNsdWRlICJ2YXJhdHQuaCIKQEAgLTMyOCwyMyArMzM3LDM2MSBAQCBzdGF0ZXh0 X25kaXN0aW5jdF9kZXNlcmlhbGl6ZShieXRlYSAqZGF0YSkKIAlyZXR1cm4gbmRpc3RpbmN0Owog fQogCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlib29sCQlmb3VuZF9v bmx5X29iamVjdDsKKwlMaXN0CSAgICpkaXN0aW5jdF9pdGVtczsKKwlOb2RlCSAgICplc2NvbnRl eHQ7CisKKwlNVk5EaXN0aW5jdEl0ZW0gKmN1cnJlbnRfaXRlbTsKK30JCQluZGlzdGluY3RQYXJz ZVN0YXRlOworCisvKgorICogSW52b2tlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBvYmplY3QgaW4g dGhlIEpTT04gZG9jdW1lbnQuCisgKiBUaGUgZW50aXJlIEpTT04gZG9jdW1lbnQgc2hvdWxkIGJl IG9uZSBvYmplY3Qgd2l0aCBubyBzdWItb2JqZWN0cy4KKyAqCisgKiBJZiB3ZSdyZSBhbnl3aGVy ZSBlbHNlIGluIHRoZSBkb2N1bWVudCwgaXQncyBhbiBlcnJvci4KKyAqLworc3RhdGljIEpzb25Q YXJzZUVycm9yVHlwZQorbmRpc3RpbmN0X29iamVjdF9zdGFydCh2b2lkICpzdGF0ZSkKK3sKKwlu ZGlzdGluY3RQYXJzZVN0YXRlICpwYXJzZSA9IHN0YXRlOworCisJaWYgKHBhcnNlLT5mb3VuZF9v bmx5X29iamVjdCA9PSB0cnVlKQorCXsKKwkJZXJldHVybihwYXJzZS0+ZXNjb250ZXh0LCAoRGF0 dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04p LAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBwZ19uZGlzdGluY3Q6IFwiJXNcIiIsIHBhcnNlLT5z dHIpLAorCQkJCSBlcnJkZXRhaWwoIk11c3QgYmVnaW4gd2l0aCBcIntcIiIpKSk7CisJCXJldHVy biBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworCX0KKworCXBhcnNlLT5mb3VuZF9vbmx5X29iamVj dCA9IHRydWU7CisJcmV0dXJuIEpTT05fU1VDQ0VTUzsKK30KKworLyoKKyAqIG5kc2l0aW5jdCBp bnB1dCBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhcnJheXMsIHNvIGFueSBhcnJheSBlbGVtZW50cyBl bmNvdW50ZXJlZAorICogYXJlIGFuIGVycm9yLgorICovCitzdGF0aWMgSnNvblBhcnNlRXJyb3JU eXBlCituZGlzdGluY3RfYXJyYXlfc3RhcnQodm9pZCAqc3RhdGUpCit7CisJbmRpc3RpbmN0UGFy c2VTdGF0ZSAqcGFyc2UgPSBzdGF0ZTsKKworCWVyZXR1cm4ocGFyc2UtPmVzY29udGV4dCwgKERh dHVtKSAwLAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04p LAorCQkJIGVycm1zZygibWFsZm9ybWVkIHBnX25kaXN0aW5jdDogXCIlc1wiIiwgcGFyc2UtPnN0 ciksCisJCQkgZXJyZGV0YWlsKCJBbGwgbmRpc3RpbmN0IGNvdW50IHZhbHVlcyBhcmUgc2NhbGFy IGRvdWJsZXMuIikpKTsKKwlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKK30KKworc3Rh dGljIGludAorYXR0bnVtX2NvbXBhcmUoY29uc3Qgdm9pZCAqYXB0ciwgY29uc3Qgdm9pZCAqYnB0 cikKK3sKKwlBdHRyTnVtYmVyCWEgPSAqKGNvbnN0IEF0dHJOdW1iZXIgKikgYXB0cjsKKwlBdHRy TnVtYmVyCWIgPSAqKGNvbnN0IEF0dHJOdW1iZXIgKikgYnB0cjsKKworCXJldHVybiBwZ19jbXBf czE2KGEsYik7Cit9CisKKy8qCisgKiBUaGUgb2JqZWN0IGtleXMgYXJlIHRoZW1zZWx2ZXMgY29t bWEtc2VwYXJhdGVkIGxpc3RzIG9mIGF0dG51bXMKKyAqIHdpdGggbmVnYXRpdmUgYXR0bnVtcyBy ZXByZXNlbnRpbmcgb25lIG9mIHRoZSBleHByZXNzaW9ucyBkZWZpbmVkCisgKiBpbiB0aGUgZXh0 ZW5lZCBzdGF0aXN0aWNzIG9iamVjdC4KKyAqLworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQor bmRpc3RpbmN0X29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZSwgY2hhciAqZm5hbWUsIGJv b2wgaXNudWxsKQoreworCW5kaXN0aW5jdFBhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisJY2hh cgkgICAqdG9rZW47CisJY2hhcgkgICAqc2F2ZXB0cjsKKwljb25zdCBjaGFyICpkZWxpbSA9ICIs ICI7CisJY2hhcgkgICAqc2NyYXRjaDsKKwlMaXN0CSAgICphdHRudW1fbGlzdCA9IE5JTDsKKwlp bnQJCQluYXR0cyA9IDA7CisJTVZORGlzdGluY3RJdGVtICppdGVtOworCUF0dHJOdW1iZXIgKmF0 dHJzb3J0OworCisJaWYgKGlzbnVsbCB8fCBmbmFtZSA9PSBOVUxMKQorCXsKKwkJZXJldHVybihw YXJzZS0+ZXNjb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBwZ19uZGlzdGlu Y3Q6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJCSBlcnJkZXRhaWwoIkFsbCBuZGlzdGluY3Qg YXR0bnVtIGxpc3RzIG11c3QgYmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhdHRudW1zLiIp KSk7CisKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7CisJfQorCisJc2NyYXRjaCA9 IHBzdHJkdXAoZm5hbWUpOworCisJdG9rZW4gPSBzdHJ0b2tfcihzY3JhdGNoLCBkZWxpbSwgJnNh dmVwdHIpOworCisJd2hpbGUgKHRva2VuICE9IE5VTEwpCisJeworCQlhdHRudW1fbGlzdCA9IGxh cHBlbmQoYXR0bnVtX2xpc3QsICh2b2lkICopIHRva2VuKTsKKworCQl0b2tlbiA9IHN0cnRva19y KE5VTEwsIGRlbGltLCAmc2F2ZXB0cik7CisJfQorCW5hdHRzID0gYXR0bnVtX2xpc3QtPmxlbmd0 aDsKKworCS8qCisJICogV2UgbmVlZCBhdCBsZWFzdCAyIGF0dG51bXMgZm9yIGEgbmRpc3RpbmN0 IGl0ZW0sIGFueXRoaW5nIGxlc3MgaXMKKwkgKiBtYWxmb3JtZWQuCisJICovCisJaWYgKG5hdHRz IDwgMikKKwl7CisJCWVyZXR1cm4ocGFyc2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNn KCJtYWxmb3JtZWQgcGdfbmRpc3RpbmN0OiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJy ZGV0YWlsKCJBbGwgbmRpc3RpbmN0IGF0dG51bSBsaXN0cyBtdXN0IGJlIGEgY29tbWEgc2VwYXJh dGVkIGxpc3Qgb2YgYXR0bnVtcy4iKSkpOworCisJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJ TEVEOworCX0KKworCWl0ZW0gPSBwYWxsb2Moc2l6ZW9mKE1WTkRpc3RpbmN0SXRlbSkpOworCWl0 ZW0tPm5hdHRyaWJ1dGVzID0gbmF0dHM7CisJaXRlbS0+YXR0cmlidXRlcyA9IHBhbGxvYzAobmF0 dHMgKiBzaXplb2YoQXR0ck51bWJlcikpOworCWF0dHJzb3J0ID0gcGFsbG9jMChuYXR0cyAqIHNp emVvZihBdHRyTnVtYmVyKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJ eworCQljaGFyCSAgICpzID0gKGNoYXIgKikgYXR0bnVtX2xpc3QtPmVsZW1lbnRzW2ldLnB0cl92 YWx1ZTsKKworCQlhdHRyc29ydFtpXSA9IHBnX3N0cnRvaW50MTZfc2FmZShzLCBwYXJzZS0+ZXNj b250ZXh0KTsKKwkJaXRlbS0+YXR0cmlidXRlc1tpXSA9IGF0dHJzb3J0W2ldOworCisJCWlmIChT T0ZUX0VSUk9SX09DQ1VSUkVEKHBhcnNlLT5lc2NvbnRleHQpKQorCQkJcmV0dXJuIEpTT05fU0VN X0FDVElPTl9GQUlMRUQ7CisJfQorCisJbGlzdF9mcmVlKGF0dG51bV9saXN0KTsKKwlwZnJlZShz Y3JhdGNoKTsKKworCXFzb3J0KGF0dHJzb3J0LG5hdHRzLHNpemVvZihBdHRyTnVtYmVyKSxhdHRu dW1fY29tcGFyZSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBuYXR0czsgaSsrKQorCQlpZiAoYXR0 cnNvcnRbaV0gPT0gYXR0cnNvcnRbaS0xXSkKKwkJeworCQkJZXJldHVybihwYXJzZS0+ZXNjb250 ZXh0LCAoRGF0dW0pIDAsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJF U0VOVEFUSU9OKSwKKwkJCQkJZXJybXNnKCJtYWxmb3JtZWQgcGdfbmRpc3RpbmN0OiBcIiVzXCIi LCBwYXJzZS0+c3RyKSwKKwkJCQkJZXJyZGV0YWlsKCJhdHRudW0gbGlzdCBkdXBsaWNhdGUgdmFs dWUgZm91bmQ6ICVkIiwgYXR0cnNvcnRbaV0pKSk7CisKKwkJCXJldHVybiBKU09OX1NFTV9BQ1RJ T05fRkFJTEVEOworCQl9CisKKwlwZnJlZShhdHRyc29ydCk7CisKKwkvKiBhZGQgbmRpc3RpbmN0 LWxlc3MgTVZORGlzdGluY3RJdGVtIHRvIHRoZSBsaXN0ICovCisJcGFyc2UtPmN1cnJlbnRfaXRl bSA9IGl0ZW07CisJcGFyc2UtPmRpc3RpbmN0X2l0ZW1zID0gbGFwcGVuZChwYXJzZS0+ZGlzdGlu Y3RfaXRlbXMsICh2b2lkICopIGl0ZW0pOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9CisKKy8q CisgKiBuZHNpdGluY3QgaW5wdXQgZm9ybWF0IGRvZXMgbm90IGhhdmUgYXJyYXlzLCBzbyBhbnkg YXJyYXkgZWxlbWVudHMgZW5jb3VudGVyZWQKKyAqIGFyZSBhbiBlcnJvci4KKyAqLworc3RhdGlj IEpzb25QYXJzZUVycm9yVHlwZQorbmRpc3RpbmN0X2FycmF5X2VsZW1lbnRfc3RhcnQodm9pZCAq c3RhdGUsIGJvb2wgaXNudWxsKQoreworCW5kaXN0aW5jdFBhcnNlU3RhdGUgKnBhcnNlID0gc3Rh dGU7CisKKwllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCSBlcnJtc2coIm1hbGZv cm1lZCBwZ19uZGlzdGluY3Q6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJIGVycmRldGFpbCgi Q2Fubm90IGNvbnRhaW4gYXJyYXkgZWxlbWVudHMuIikpKTsKKworCXJldHVybiBKU09OX1NFTV9B Q1RJT05fRkFJTEVEOworfQorCisvKgorICogSGFuZGxlIHNjYWxhciBldmVudHMgZnJvbSB0aGUg bmRpc3RpbmN0IGlucHV0IHBhcnNlci4KKyAqCisgKiBUaGVyZSBpcyBvbmx5IG9uZSBjYXNlIHdo ZXJlIHdlIHdpbGwgZW5jb3VudGVyIGEgc2NhbGFyLCBhbmQgdGhhdCBpcyB0aGUKKyAqIG5kc2l0 aW5jdCB2YWx1ZSBmb3IgdGhlIHByZXZpb3VzIG9iamVjdCBrZXkuCisgKi8KK3N0YXRpYyBKc29u UGFyc2VFcnJvclR5cGUKK25kaXN0aW5jdF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2Vu LCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSkKK3sKKwluZGlzdGluY3RQYXJzZVN0YXRlICpwYXJz ZSA9IHN0YXRlOworCisJLyogaWYgdGhlIGVudGlyZSBqc29uIGlzIGp1c3Qgb25lIHNjYWxhciwg dGhhdCdzIHdyb25nICovCisJaWYgKHBhcnNlLT5mb3VuZF9vbmx5X29iamVjdCAhPSB0cnVlKQor CXsKKwkJZXJldHVybihwYXJzZS0+ZXNjb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZv cm1lZCBwZ19uZGlzdGluY3Q6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJCSBlcnJkZXRhaWwo Ik11c3QgYmVnaW4gd2l0aCBcIntcIiIpKSk7CisKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisJfQorCisJQXNzZXJ0KHBhcnNlLT5jdXJyZW50X2l0ZW0gIT0gTlVMTCk7CisKKwlw YXJzZS0+Y3VycmVudF9pdGVtLT5uZGlzdGluY3QgPSBmbG9hdDhpbl9pbnRlcm5hbCh0b2tlbiwg TlVMTCwgImRvdWJsZSIsCisJCQkJCQkJCQkJCQkJICAgdG9rZW4sIHBhcnNlLT5lc2NvbnRleHQp OworCisJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQocGFyc2UtPmVzY29udGV4dCkpCisJCXJldHVy biBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworCisJLyogbWFyayB1cyBkb25lIHdpdGggdGhpcyBp dGVtICovCisJcGFyc2UtPmN1cnJlbnRfaXRlbSA9IE5VTEw7CisJcmV0dXJuIEpTT05fU1VDQ0VT UzsKK30KKwogLyoKICAqIHBnX25kaXN0aW5jdF9pbgogICoJCWlucHV0IHJvdXRpbmUgZm9yIHR5 cGUgcGdfbmRpc3RpbmN0CiAgKgotICogcGdfbmRpc3RpbmN0IGlzIHJlYWwgZW5vdWdoIHRvIGJl IGEgdGFibGUgY29sdW1uLCBidXQgaXQgaGFzIG5vCi0gKiBvcGVyYXRpb25zIG9mIGl0cyBvd24s IGFuZCBkaXNhbGxvd3MgaW5wdXQgKGp1c3QgbGlrZSBwZ19ub2RlX3RyZWUpLgorICogZXhhbXBs ZSBpbnB1dDogeyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2 LCAtMSwgLTIiOiAxNDU0OX0KKyAqCisgKiBUaGlzIGltcG9ydCBmb3JtYXQgaXMgY2xlYXJseSBh IHNwZWNpZmljIHN1YnNldCBvZiBKU09OLCB0aGVyZWZvcmUgaXQgbWFrZXMKKyAqIHNlbnNlIHRv IGxldmVyYWdlIHRob3NlIHBhcnNpbmcgdXRpbGl0aWVzLCBhbmQgZnVydGhlciB2YWxpZGF0ZSBp dCBmcm9tIHRoZXJlLgogICovCiBEYXR1bQogcGdfbmRpc3RpbmN0X2luKFBHX0ZVTkNUSU9OX0FS R1MpCiB7Ci0JZXJlcG9ydChFUlJPUiwKLQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKLQkJCSBlcnJtc2coImNhbm5vdCBhY2NlcHQgYSB2YWx1ZSBvZiB0eXBlICVz IiwgInBnX25kaXN0aW5jdCIpKSk7CisJY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkco MCk7CiAKLQlQR19SRVRVUk5fVk9JRCgpOwkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwlu ZGlzdGluY3RQYXJzZVN0YXRlIHBhcnNlX3N0YXRlOworCUpzb25QYXJzZUVycm9yVHlwZSByZXN1 bHQ7CisJSnNvbkxleENvbnRleHQgKmxleDsKKwlKc29uU2VtQWN0aW9uIHNlbV9hY3Rpb247CisK KwkvKiBpbml0aWFsaXplIHNlbWFudGljIHN0YXRlICovCisJcGFyc2Vfc3RhdGUuc3RyID0gc3Ry OworCXBhcnNlX3N0YXRlLmZvdW5kX29ubHlfb2JqZWN0ID0gZmFsc2U7CisJcGFyc2Vfc3RhdGUu ZGlzdGluY3RfaXRlbXMgPSBOSUw7CisJcGFyc2Vfc3RhdGUuZXNjb250ZXh0ID0gZmNpbmZvLT5j b250ZXh0OworCXBhcnNlX3N0YXRlLmN1cnJlbnRfaXRlbSA9IE5VTEw7CisKKwkvKiBzZXQgY2Fs bGJhY2tzICovCisJc2VtX2FjdGlvbi5zZW1zdGF0ZSA9ICh2b2lkICopICZwYXJzZV9zdGF0ZTsK KwlzZW1fYWN0aW9uLm9iamVjdF9zdGFydCA9IG5kaXN0aW5jdF9vYmplY3Rfc3RhcnQ7CisJc2Vt X2FjdGlvbi5vYmplY3RfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFycmF5X3N0YXJ0ID0gbmRp c3RpbmN0X2FycmF5X3N0YXJ0OworCXNlbV9hY3Rpb24uYXJyYXlfZW5kID0gTlVMTDsKKwlzZW1f YWN0aW9uLm9iamVjdF9maWVsZF9zdGFydCA9IG5kaXN0aW5jdF9vYmplY3RfZmllbGRfc3RhcnQ7 CisJc2VtX2FjdGlvbi5vYmplY3RfZmllbGRfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFycmF5 X2VsZW1lbnRfc3RhcnQgPSBuZGlzdGluY3RfYXJyYXlfZWxlbWVudF9zdGFydDsKKwlzZW1fYWN0 aW9uLmFycmF5X2VsZW1lbnRfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLnNjYWxhciA9IG5kaXN0 aW5jdF9zY2FsYXI7CisKKwlsZXggPSBtYWtlSnNvbkxleENvbnRleHRDc3RyaW5nTGVuKE5VTEws IHN0ciwgc3RybGVuKHN0ciksCisJCQkJCQkJCQkgICBQR19VVEY4LCB0cnVlKTsKKwlyZXN1bHQg PSBwZ19wYXJzZV9qc29uKGxleCwgJnNlbV9hY3Rpb24pOworCWZyZWVKc29uTGV4Q29udGV4dChs ZXgpOworCWlmIChyZXN1bHQgPT0gSlNPTl9TVUNDRVNTKQorCXsKKwkJTVZORGlzdGluY3QgKm5k aXN0aW5jdDsKKwkJaW50CQkJbml0ZW1zID0gcGFyc2Vfc3RhdGUuZGlzdGluY3RfaXRlbXMtPmxl bmd0aDsKKwkJYnl0ZWEJICAgKmJ5dGVzOworCisJCW5kaXN0aW5jdCA9IHBhbGxvYyhvZmZzZXRv ZihNVk5EaXN0aW5jdCwgaXRlbXMpICsKKwkJCQkJCSAgIG5pdGVtcyAqIHNpemVvZihNVk5EaXN0 aW5jdEl0ZW0pKTsKKworCQluZGlzdGluY3QtPm1hZ2ljID0gU1RBVFNfTkRJU1RJTkNUX01BR0lD OworCQluZGlzdGluY3QtPnR5cGUgPSBTVEFUU19ORElTVElOQ1RfVFlQRV9CQVNJQzsKKwkJbmRp c3RpbmN0LT5uaXRlbXMgPSBuaXRlbXM7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7 IGkrKykKKwkJeworCQkJTVZORGlzdGluY3RJdGVtICppdGVtID0gcGFyc2Vfc3RhdGUuZGlzdGlu Y3RfaXRlbXMtPmVsZW1lbnRzW2ldLnB0cl92YWx1ZTsKKworCQkJbmRpc3RpbmN0LT5pdGVtc1tp XS5uZGlzdGluY3QgPSBpdGVtLT5uZGlzdGluY3Q7CisJCQluZGlzdGluY3QtPml0ZW1zW2ldLm5h dHRyaWJ1dGVzID0gaXRlbS0+bmF0dHJpYnV0ZXM7CisJCQluZGlzdGluY3QtPml0ZW1zW2ldLmF0 dHJpYnV0ZXMgPSBpdGVtLT5hdHRyaWJ1dGVzOworCisJCQkvKgorCQkJICogZnJlZSB0aGUgTVZO RGlzdGluY3RJdGVtLCBidXQgbm90IHRoZSBhdHRyaWJ1dGVzIHdlJ3JlIHN0aWxsCisJCQkgKiB1 c2luZworCQkJICovCisJCQlwZnJlZShpdGVtKTsKKwkJfQorCQlieXRlcyA9IHN0YXRleHRfbmRp c3RpbmN0X3NlcmlhbGl6ZShuZGlzdGluY3QpOworCisJCWxpc3RfZnJlZShwYXJzZV9zdGF0ZS5k aXN0aW5jdF9pdGVtcyk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspCisJCQlw ZnJlZShuZGlzdGluY3QtPml0ZW1zW2ldLmF0dHJpYnV0ZXMpOworCQlwZnJlZShuZGlzdGluY3Qp OworCisJCVBHX1JFVFVSTl9CWVRFQV9QKGJ5dGVzKTsKKwl9CisJZWxzZSBpZiAocmVzdWx0ID09 IEpTT05fU0VNX0FDVElPTl9GQUlMRUQpCisJCVBHX1JFVFVSTl9OVUxMKCk7CQkvKiBlc2NvbnRl eHQgYWxyZWFkeSBzZXQgKi8KKworCS8qIEFueXRoaW5nIGVsc2UgaXMgYSBnZW5lcmljIEpTT04g cGFyc2UgZXJyb3IgKi8KKwllcmV0dXJuKHBhcnNlX3N0YXRlLmVzY29udGV4dCwgKERhdHVtKSAw LAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJ IGVycm1zZygibWFsZm9ybWVkIHBnX25kaXN0aW5jdDogXCIlc1wiIiwgc3RyKSwKKwkJCSBlcnJk ZXRhaWwoIk11c3QgYmUgdmFsaWQgSlNPTi4iKSkpOworCVBHX1JFVFVSTl9OVUxMKCk7CiB9CiAK Ky8qCisgKiBGcmVlIGFsbG9jYXRpb25zIG9mIGFuIE1WTkRpc3RpbmN0CisgKi8KK3ZvaWQKK2Zy ZWVfcGdfbmRpc3RpbmN0KE1WTkRpc3RpbmN0ICpuZGlzdGluY3QpCit7CisJZm9yIChpbnQgaSA9 IDA7IGkgPCBuZGlzdGluY3QtPm5pdGVtczsgaSsrKQorCQlwZnJlZShuZGlzdGluY3QtPml0ZW1z W2ldLmF0dHJpYnV0ZXMpOworCisJcGZyZWUobmRpc3RpbmN0KTsKK30KKworLyoKKyAqIFZhbGlk YXRlIGFuIE1WTkRpc3RpbmN0IGFnYWluc3QgdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0 IGRlZmluaXRpb24uCisgKgorICogRXZlcnkgTVZORGlzdGluY3RJdGVtIG11c3QgYmUgY2hlY2tl ZCB0byBlbnN1cmUgdGhhdCB0aGUgYXR0bnVtcyBpbiB0aGUKKyAqIGF0dHJpYnV0ZXMgbGlzdCBj b3JyZXNwb25kIHRvIGF0dG51bXMvZXhwcmVzc2lvbnMgZGVmaW5lZCBieSB0aGUKKyAqIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2JqZWN0LgorICoKKyAqIFBvc2l0aXZlIGF0dG51bXMgYXJlIGF0dHJp YnV0ZXMgd2hpY2ggbXVzdCBiZSBmb3VuZCBpbiB0aGUgc3R4a2V5cywKKyAqIHdoaWxlIG5lZ2F0 aXZlIGF0dG51bXMgY29ycmVzcG9uZCB0byBhbiBleHByIG51bWJlciwgc28gdGhlIGF0dG51bSAK KyAqIGNhbid0IGJlIGJlbG93ICgwIC0gbnVtZXhwcnMpLgorICovCitib29sCitwZ19uZGlzdGlu Y3RfdmFsaWRhdGVfaXRlbXMoTVZORGlzdGluY3QgKm5kaXN0aW5jdCwgaW50MnZlY3RvciAqc3R4 a2V5cywgaW50IG51bWV4cHJzLCBpbnQgZWxldmVsKQoreworCWludAkJYXR0bnVtX2V4cHJfbG93 Ym91bmQgPSAwIC0gbnVtZXhwcnM7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5kaXN0aW5jdC0+ bml0ZW1zOyBpKyspCisJeworCQlNVk5EaXN0aW5jdEl0ZW0gaXRlbSA9IG5kaXN0aW5jdC0+aXRl bXNbaV07CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBpdGVtLm5hdHRyaWJ1dGVzOyBqKyspCisJ CXsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0gaXRlbS5hdHRyaWJ1dGVzW2pdOworCQkJYm9vbAkJ b2sgPSBmYWxzZTsKKworCQkJaWYgKGF0dG51bSA+IDApCisJCQl7CisJCQkJZm9yIChpbnQgayA9 IDA7IGsgPCBzdHhrZXlzLT5kaW0xOyBrKyspCisJCQkJCWlmIChhdHRudW0gPT0gc3R4a2V5cy0+ dmFsdWVzW2tdKQorCQkJCQl7CisJCQkJCQlvayA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJ fQorCQkJfQorCQkJZWxzZSBpZiAoKGF0dG51bSA8IDApICYmIChhdHRudW0gPj0gYXR0bnVtX2V4 cHJfbG93Ym91bmQpKQorCQkJCW9rID0gdHJ1ZTsKKworCQkJaWYgKCFvaykKKwkJCXsKKwkJCQll cmVwb3J0KGVsZXZlbCwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJF U0VOVEFUSU9OKSwKKwkJCQkJCWVycm1zZygicGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBm b3IgdGhpcyBzdGF0aXN0aWNzIG9iamVjdDogJWQiLCBhdHRudW0pKSk7CisJCQkJcmV0dXJuIGZh bHNlOworCQkJfQorCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCisKIC8qCiAgKiBwZ19uZGlz dGluY3QKICAqCQlvdXRwdXQgcm91dGluZSBmb3IgdHlwZSBwZ19uZGlzdGluY3QKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCA5MDRkM2U2MjNmNS4uMjAzMzM2Njdl NWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKQEAgLTMzNTgsNiAr MzM1OCwxMyBAQCBTRUxFQ1Qgc3RhdGlzdGljc19uYW1lLCBtb3N0X2NvbW1vbl92YWxzIEZST00g cGdfc3RhdHNfZXh0X2V4cHJzIHgKICBzX2V4cHIgICAgICAgICAgfCB7MX0KICgyIHJvd3MpCiAK Ky0tIG5ldyBpbnB1dCBmdW5jdGlvbnMKK1NFTEVDVCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5 MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19uZGlzdGluY3QgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAi LTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0KKygxIHJvdykKKwogLS0gVGlkeSB1 cAogRFJPUCBPUEVSQVRPUiA8PDwgKGludCwgaW50KTsKIERST1AgRlVOQ1RJT04gb3BfbGVhayhp bnQsIGludCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAppbmRleCA4OGIzM2NjYWVmOC4u MzUzOWQ3YjVjZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbApAQCAtMTcwMCw2ICsx NzAwLDkgQEAgU0VMRUNUIHN0YXRpc3RpY3NfbmFtZSwgbW9zdF9jb21tb25fdmFscyBGUk9NIHBn X3N0YXRzX2V4dCB4CiBTRUxFQ1Qgc3RhdGlzdGljc19uYW1lLCBtb3N0X2NvbW1vbl92YWxzIEZS T00gcGdfc3RhdHNfZXh0X2V4cHJzIHgKICAgICBXSEVSRSB0YWJsZW5hbWUgPSAnc3RhdHNfZXh0 X3RibCcgT1JERVIgQlkgUk9XKHguKik7CiAKKy0tIG5ldyBpbnB1dCBmdW5jdGlvbnMKK1NFTEVD VCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwg LTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CisKIC0tIFRpZHkgdXAKIERST1AgT1BFUkFUT1Ig PDw8IChpbnQsIGludCk7CiBEUk9QIEZVTkNUSU9OIG9wX2xlYWsoaW50LCBpbnQpOwoKYmFzZS1j b21taXQ6IGIyMjljMTAxNjQ3NzA3NjljM2I1MDMzNzg1OTE3Y2E3YTQzYTI0NzEKLS0gCjIuNDgu MQoK --000000000000772648062f8a2458 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-Add-working-input-function-for-pg_dependencies.patch" Content-Disposition: attachment; filename="v4-0002-Add-working-input-function-for-pg_dependencies.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7uxz1am1 RnJvbSBiMDdhOGQ2NmNjMjlhMjhkMmU0ZmEyMGEzMzU5ODBmZTkwMGI0YzE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAxNyBEZWMgMjAyNCAxOTo0Nzo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djQgMi80XSBBZGQgd29ya2luZyBpbnB1dCBmdW5jdGlvbiBmb3IgcGdfZGVwZW5kZW5jaWVzLgoK VGhpcyBpcyBuZWVkZWQgdG8gaW1wb3J0IGV4dGVuZGVkIHN0YXRpc3RpY3MuCi0tLQogc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYyAgIHwgMzQ4ICsrKysrKysrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0IHwgIDE4ICsr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgfCAgIDYgKwogMyBmaWxl cyBjaGFuZ2VkLCAzNjIgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMKaW5kZXggZWIyZmM0MzY2YjQuLmVjMjZhMjQyN2UyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2RlcGVuZGVuY2llcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMKQEAgLTEzLDE4ICsxMywyNyBAQAog ICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hdHRudW0uaCIK ICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0X2RhdGEu aCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIK KyNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAi bm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUg Im9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL2V4dGVu ZGVkX3N0YXRzX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgog I2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpAQCAtNjQzLDI0ICs2NTIsMzQzIEBAIHN0 YXRleHRfZGVwZW5kZW5jaWVzX2xvYWQoT2lkIG12b2lkLCBib29sIGluaCkKIAlyZXR1cm4gcmVz dWx0OwogfQogCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlib29sCQlm b3VuZF9vbmx5X29iamVjdDsKKwlMaXN0CSAgICpkZXBlbmRlbmN5X2xpc3Q7CisJTm9kZQkgICAq ZXNjb250ZXh0OworCisJTVZEZXBlbmRlbmN5ICpjdXJyZW50X2RlcGVuZGVuY3k7Cit9CQkJZGVw ZW5kZW5jaWVzUGFyc2VTdGF0ZTsKKworLyoKKyAqIEludm9rZWQgYXQgdGhlIHN0YXJ0IG9mIGVh Y2ggb2JqZWN0IGluIHRoZSBKU09OIGRvY3VtZW50LgorICogVGhlIGVudGlyZSBKU09OIGRvY3Vt ZW50IHNob3VsZCBiZSBvbmUgb2JqZWN0IHdpdGggbm8gc3ViLW9iamVjdHMuCisgKgorICogSWYg d2UncmUgYW55d2hlcmUgZWxzZSBpbiB0aGUgZG9jdW1lbnQsIGl0J3MgYW4gZXJyb3IuCisgKi8K K3N0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUKK2RlcGVuZGVuY2llc19vYmplY3Rfc3RhcnQodm9p ZCAqc3RhdGUpCit7CisJZGVwZW5kZW5jaWVzUGFyc2VTdGF0ZSAqcGFyc2UgPSBzdGF0ZTsKKwor CWlmIChwYXJzZS0+Zm91bmRfb25seV9vYmplY3QgPT0gdHJ1ZSkKKwl7CisJCWVyZXR1cm4ocGFy c2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9U RVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVwZW5kZW5j aWVzOiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJyZGV0YWlsKCJNdXN0IGJlZ2luIHdp dGggXCJ7XCIiKSkpOworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CisKKwlw YXJzZS0+Zm91bmRfb25seV9vYmplY3QgPSB0cnVlOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9 CisKKy8qCisgKiBkZXBlbmRlbmNpZXMgaW5wdXQgZm9ybWF0IGRvZXMgbm90IGhhdmUgYXJyYXlz LCBzbyBhbnkgYXJyYXkgZWxlbWVudHMgZW5jb3VudGVyZWQKKyAqIGFyZSBhbiBlcnJvci4KKyAq Lworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5jaWVzX2FycmF5X3N0YXJ0KHZv aWQgKnN0YXRlKQoreworCWRlcGVuZGVuY2llc1BhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisK KwllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCSBlcnJtc2coIm1hbGZvcm1lZCBw Z19kZXBlbmRlbmNpZXM6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJIGVycmRldGFpbCgiQWxs IGRlcGVuZGVuY2llcyBjb3VudCB2YWx1ZXMgYXJlIHNjYWxhciBkb3VibGVzLiIpKSk7CisJcmV0 dXJuIEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7Cit9CisKK3N0YXRpYyBpbnQKK2F0dG51bV9jb21w YXJlKGNvbnN0IHZvaWQgKmFwdHIsIGNvbnN0IHZvaWQgKmJwdHIpCit7CisJQXR0ck51bWJlcglh ID0gKihjb25zdCBBdHRyTnVtYmVyICopIGFwdHI7CisJQXR0ck51bWJlcgliID0gKihjb25zdCBB dHRyTnVtYmVyICopIGJwdHI7CisKKwlyZXR1cm4gcGdfY21wX3MxNihhLGIpOworfQorCisvKgor ICogVGhlIG9iamVjdCBrZXlzIGFyZSB0aGVtc2VsdmVzIGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBv ZiBhdHRudW1zCisgKiB3aXRoIG5lZ2F0aXZlIGF0dG51bXMgcmVwcmVzZW50aW5nIG9uZSBvZiB0 aGUgZXhwcmVzc2lvbnMgZGVmaW5lZAorICogaW4gdGhlIGV4dGVuZWQgc3RhdGlzdGljcyBvYmpl Y3QsIGZvbGxvd2VkIGJ5IGEgPT4gYW5kIGEgZmluYWwgYXR0bnVtLgorICoKKyAqIGV4YW1wbGU6 ICItMSwgMiA9PiAtMSIKKyAqLworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5j aWVzX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZSwgY2hhciAqZm5hbWUsIGJvb2wgaXNu dWxsKQoreworCWRlcGVuZGVuY2llc1BhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisJY2hhcgkg ICAqdG9rZW47CisJY2hhcgkgICAqc2F2ZXB0cjsKKwljb25zdCBjaGFyICpkZWxpbSA9ICIsICI7 CisJY29uc3QgY2hhciAqYXJyb3dfZGVsaW0gPSAiID0+ICI7CisJY2hhcgkgICAqc2NyYXRjaDsK KwljaGFyCSAgICphcnJvd19wOworCWNoYXIJICAgKmFmdGVyX2Fycm93X3A7CisJTGlzdAkgICAq YXR0bnVtX2xpc3QgPSBOSUw7CisJaW50CQkJbmF0dHMgPSAwOworCUF0dHJOdW1iZXIJZmluYWxf YXR0bnVtOworCU1WRGVwZW5kZW5jeSAqZGVwOworCUF0dHJOdW1iZXIgKmF0dHJzb3J0OworCisJ aWYgKGlzbnVsbCB8fCBmbmFtZSA9PSBOVUxMKQorCXsKKwkJZXJldHVybihwYXJzZS0+ZXNjb250 ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVT RU5UQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBwZ19kZXBlbmRlbmNpZXM6IFwiJXNc IiIsIHBhcnNlLT5zdHIpLAorCQkJCSBlcnJkZXRhaWwoIkFsbCBkZXBlbmRlbmNpZXMgYXR0bnVt IGxpc3RzIG11c3QgYmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhdHRudW1zIHdpdGggYSBm aW5hbCA9PiBhdHRudW0uIikpKTsKKworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsK Kwl9CisKKwlzY3JhdGNoID0gcHN0cmR1cChmbmFtZSk7CisKKwkvKiBUaGUgc3VidHJpbmcgJyA9 PiAnIG11c3Qgb2NjdXIgZXhhY3RseSBvbmNlICovCisJYXJyb3dfcCA9IHN0cnN0cihzY3JhdGNo LCBhcnJvd19kZWxpbSk7CisJaWYgKGFycm93X3AgPT0gTlVMTCkKKwl7CisJCWVyZXR1cm4ocGFy c2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9U RVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVwZW5kZW5j aWVzOiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJyZGV0YWlsKCJBbGwgZGVwZW5kZW5j aWVzIGF0dG51bSBsaXN0cyBtdXN0IGJlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgYXR0bnVt cyB3aXRoIGEgZmluYWwgPT4gYXR0bnVtLiIpKSk7CisKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElP Tl9GQUlMRUQ7CisJfQorCisJLyoKKwkgKiBFdmVyeXRoaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBh cnJvdyBpcyB0aGUgYXR0cmlidXRlIGxpc3QsIHNvIHNwbGl0CisJICogdGhhdCBvZmYgaW50byBp dHMgb3duIHN0cmluZy4KKwkgKgorCSAqIEV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IHNob3VsZCBi ZSB0aGUgbG9uZSB0YXJnZXQgYXR0cmlidXRlLgorCSAqLworCSphcnJvd19wID0gJ1wwJzsKKwor CS8qIGxvb2sgZm9yIHRoZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmV5b25kIHRoZSBkZWxpbWl0 ZXIgd2UganVzdCBmb3VuZCAqLworCWFmdGVyX2Fycm93X3AgPSBhcnJvd19wICsgc3RybGVuKGFy cm93X2RlbGltKTsKKworCS8qIFdlIHNob3VsZCBub3QgZmluZCBhbm90aGVyIGFycm93IGRlbGlt ICovCisJaWYgKHN0cnN0cihhZnRlcl9hcnJvd19wLCBhcnJvd19kZWxpbSkgIT0gTlVMTCkKKwl7 CisJCWVyZXR1cm4ocGFyc2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3Jt ZWQgcGdfZGVwZW5kZW5jaWVzOiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJyZGV0YWls KCJBbGwgZGVwZW5kZW5jaWVzIGF0dG51bSBsaXN0cyBtdXN0IGJlIGEgY29tbWEgc2VwYXJhdGVk IGxpc3Qgb2YgYXR0bnVtcyB3aXRoIGEgZmluYWwgPT4gYXR0bnVtLiIpKSk7CisKKwkJcmV0dXJu IEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7CisJfQorCisJLyogd2hhdCBpcyBsZWZ0IHNob3VsZCBi ZSBleGFjdGx5IG9uZSBhdHRudW0gKi8KKwlmaW5hbF9hdHRudW0gPSBwZ19zdHJ0b2ludDE2X3Nh ZmUoYWZ0ZXJfYXJyb3dfcCwgcGFyc2UtPmVzY29udGV4dCk7CisKKwlpZiAoU09GVF9FUlJPUl9P Q0NVUlJFRChwYXJzZS0+ZXNjb250ZXh0KSkKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9GQUlM RUQ7CisKKwkvKiBMZWZ0IG9mIHRoZSBhcnJvdyBpcyBqdXN0IHJlZ3VsYXIgYXR0bnVtcyAqLwor CXRva2VuID0gc3RydG9rX3Ioc2NyYXRjaCwgZGVsaW0sICZzYXZlcHRyKTsKKworCXdoaWxlICh0 b2tlbiAhPSBOVUxMKQorCXsKKwkJYXR0bnVtX2xpc3QgPSBsYXBwZW5kKGF0dG51bV9saXN0LCAo dm9pZCAqKSB0b2tlbik7CisKKwkJdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCBkZWxpbSwgJnNhdmVw dHIpOworCX0KKwluYXR0cyA9IGF0dG51bV9saXN0LT5sZW5ndGg7CisKKwkvKgorCSAqIFdlIG5l ZWQgYXQgbGVhc3QgMiBhdHRudW1zIGxlZnQgb2YgdGhlIGFycm93IGZvciBhIGRlcGVuZGVuY2ll cyBpdGVtLAorCSAqIGFueXRoaW5nIGxlc3MgaXMgbWFsZm9ybWVkLgorCSAqLworCWlmIChuYXR0 cyA8IDEpCisJeworCQllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJIGVycm1z ZygibWFsZm9ybWVkIHBnX2RlcGVuZGVuY2llczogXCIlc1wiIiwgcGFyc2UtPnN0ciksCisJCQkJ IGVycmRldGFpbCgiQWxsIGRlcGVuZGVuY2llcyBhdHRudW0gbGlzdHMgbXVzdCBiZSBhIGNvbW1h IHNlcGFyYXRlZCBsaXN0IG9mIGF0dG51bXMuIikpKTsKKworCQlyZXR1cm4gSlNPTl9TRU1fQUNU SU9OX0ZBSUxFRDsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhl IGRlcGVuZGVuY3ksIHRoZSBhdHRudW1zIGluIHRoZSBsaXN0LCBwbHVzCisJICogdGhlIGZpbmFs IGF0dG51bQorCSAqLworCWRlcCA9IHBhbGxvYzAob2Zmc2V0b2YoTVZEZXBlbmRlbmN5LCBhdHRy aWJ1dGVzKSArICgobmF0dHMgKyAxKSAqIHNpemVvZihBdHRyTnVtYmVyKSkpOworCWRlcC0+bmF0 dHJpYnV0ZXMgPSBuYXR0cyArIDE7CisJZGVwLT5hdHRyaWJ1dGVzW25hdHRzXSA9IGZpbmFsX2F0 dG51bTsKKworCWF0dHJzb3J0ID0gcGFsbG9jMChkZXAtPm5hdHRyaWJ1dGVzICogc2l6ZW9mKEF0 dHJOdW1iZXIpKTsKKwlhdHRyc29ydFtuYXR0c10gPSBmaW5hbF9hdHRudW07CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQljaGFyCSAgICpzID0gKGNoYXIgKikgYXR0 bnVtX2xpc3QtPmVsZW1lbnRzW2ldLnB0cl92YWx1ZTsKKworCQlhdHRyc29ydFtpXSA9IHBnX3N0 cnRvaW50MTZfc2FmZShzLCBwYXJzZS0+ZXNjb250ZXh0KTsKKwkJZGVwLT5hdHRyaWJ1dGVzW2ld ID0gYXR0cnNvcnRbaV07CisKKwkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQocGFyc2UtPmVzY29u dGV4dCkpCisJCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CisKKwlsaXN0X2Zy ZWUoYXR0bnVtX2xpc3QpOworCXBmcmVlKHNjcmF0Y2gpOworCisJcXNvcnQoYXR0cnNvcnQsZGVw LT5uYXR0cmlidXRlcyxzaXplb2YoQXR0ck51bWJlciksYXR0bnVtX2NvbXBhcmUpOworCWZvciAo aW50IGkgPSAxOyBpIDwgZGVwLT5uYXR0cmlidXRlczsgaSsrKQorCQlpZiAoYXR0cnNvcnRbaV0g PT0gYXR0cnNvcnRbaS0xXSkKKwkJeworCQkJZXJldHVybihwYXJzZS0+ZXNjb250ZXh0LCAoRGF0 dW0pIDAsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9O KSwKKwkJCQkJZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVwZW5kZW5jaWVzOiBcIiVzXCIiLCBwYXJz ZS0+c3RyKSwKKwkJCQkJZXJyZGV0YWlsKCJhdHRudW0gbGlzdCBkdXBsaWNhdGUgdmFsdWUgZm91 bmQ6ICVkIiwgYXR0cnNvcnRbaV0pKSk7CisKKwkJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJ TEVEOworCQl9CisKKwlwZnJlZShhdHRyc29ydCk7CisKKwkvKiBhZGQgZGVwZW5kZW5jaWVzLWxl c3MgTVZkZXBlbmRlbmNpZXNJdGVtIHRvIHRoZSBsaXN0ICovCisJcGFyc2UtPmN1cnJlbnRfZGVw ZW5kZW5jeSA9IGRlcDsKKwlwYXJzZS0+ZGVwZW5kZW5jeV9saXN0ID0gbGFwcGVuZChwYXJzZS0+ ZGVwZW5kZW5jeV9saXN0LCAodm9pZCAqKSBkZXApOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9 CisKKy8qCisgKiBuZHNpdGluY3QgaW5wdXQgZm9ybWF0IGRvZXMgbm90IGhhdmUgYXJyYXlzLCBz byBhbnkgYXJyYXkgZWxlbWVudHMgZW5jb3VudGVyZWQKKyAqIGFyZSBhbiBlcnJvci4KKyAqLwor c3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5jaWVzX2FycmF5X2VsZW1lbnRfc3Rh cnQodm9pZCAqc3RhdGUsIGJvb2wgaXNudWxsKQoreworCWRlcGVuZGVuY2llc1BhcnNlU3RhdGUg KnBhcnNlID0gc3RhdGU7CisKKwllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwK KwkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCSBl cnJtc2coIm1hbGZvcm1lZCBwZ19kZXBlbmRlbmNpZXM6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAor CQkJIGVycmRldGFpbCgiQ2Fubm90IGNvbnRhaW4gYXJyYXkgZWxlbWVudHMuIikpKTsKKworCXJl dHVybiBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworfQorCisvKgorICogSGFuZGxlIHNjYWxhciBl dmVudHMgZnJvbSB0aGUgZGVwZW5kZW5jaWVzIGlucHV0IHBhcnNlci4KKyAqCisgKiBUaGVyZSBp cyBvbmx5IG9uZSBjYXNlIHdoZXJlIHdlIHdpbGwgZW5jb3VudGVyIGEgc2NhbGFyLCBhbmQgdGhh dCBpcyB0aGUKKyAqIGRlcGVuZGVuY3kgZGVncmVlIGZvciB0aGUgcHJldmlvdXMgb2JqZWN0IGtl eS4KKyAqLworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5jaWVzX3NjYWxhcih2 b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKQoreworCWRl cGVuZGVuY2llc1BhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisKKwkvKiBpZiB0aGUgZW50aXJl IGpzb24gaXMganVzdCBvbmUgc2NhbGFyLCB0aGF0J3Mgd3JvbmcgKi8KKwlpZiAocGFyc2UtPmZv dW5kX29ubHlfb2JqZWN0ICE9IHRydWUpCisJeworCQllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQs IChEYXR1bSkgMCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRB VElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIHBnX2RlcGVuZGVuY2llczogXCIlc1wiIiwg cGFyc2UtPnN0ciksCisJCQkJIGVycmRldGFpbCgiTXVzdCBiZWdpbiB3aXRoIFwie1wiIikpKTsK KworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CisKKwlBc3NlcnQocGFyc2Ut PmN1cnJlbnRfZGVwZW5kZW5jeSAhPSBOVUxMKTsKKworCXBhcnNlLT5jdXJyZW50X2RlcGVuZGVu Y3ktPmRlZ3JlZSA9IGZsb2F0OGluX2ludGVybmFsKHRva2VuLCBOVUxMLCAiZG91YmxlIiwKKwkJ CQkJCQkJCQkJCQkJICB0b2tlbiwgcGFyc2UtPmVzY29udGV4dCk7CisKKwlpZiAoU09GVF9FUlJP Ul9PQ0NVUlJFRChwYXJzZS0+ZXNjb250ZXh0KSkKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisKKwkvKiBtYXJrIHVzIGRvbmUgd2l0aCB0aGlzIGRlcGVuZGVuY3kgKi8KKwlwYXJz ZS0+Y3VycmVudF9kZXBlbmRlbmN5ID0gTlVMTDsKKwlyZXR1cm4gSlNPTl9TVUNDRVNTOworfQor CiAvKgogICogcGdfZGVwZW5kZW5jaWVzX2luCQktIGlucHV0IHJvdXRpbmUgZm9yIHR5cGUgcGdf ZGVwZW5kZW5jaWVzLgogICoKLSAqIHBnX2RlcGVuZGVuY2llcyBpcyByZWFsIGVub3VnaCB0byBi ZSBhIHRhYmxlIGNvbHVtbiwgYnV0IGl0IGhhcyBubyBvcGVyYXRpb25zCi0gKiBvZiBpdHMgb3du LCBhbmQgZGlzYWxsb3dzIGlucHV0IHRvbworICogZXhhbXBsZSBpbnB1dDoKKyAqICAgICB7Ii0y ID0+IDYiOiAwLjI5MjUwOCwKKyAqICAgICAgIi0yID0+IC0xIjogMC4xMTM5OTksCisgKiAgICAg ICI2LCAtMiA9PiAtMSI6IDAuMzQ4NDc5LAorICogICAgICAiLTEsIC0yID0+IDYiOiAwLjgzOTY5 MX0KKyAqCisgKiBUaGlzIGltcG9ydCBmb3JtYXQgaXMgY2xlYXJseSBhIHNwZWNpZmljIHN1YnNl dCBvZiBKU09OLCB0aGVyZWZvcmUgaXQgbWFrZXMKKyAqIHNlbnNlIHRvIGxldmVyYWdlIHRob3Nl IHBhcnNpbmcgdXRpbGl0aWVzLCBhbmQgZnVydGhlciB2YWxpZGF0ZSBpdCBmcm9tIHRoZXJlLgog ICovCiBEYXR1bQogcGdfZGVwZW5kZW5jaWVzX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JLyoK LQkgKiBwZ19ub2RlX2xpc3Qgc3RvcmVzIHRoZSBkYXRhIGluIGJpbmFyeSBmb3JtIGFuZCBwYXJz aW5nIHRleHQgaW5wdXQgaXMKLQkgKiBub3QgbmVlZGVkLCBzbyBkaXNhbGxvdyB0aGlzLgotCSAq LwotCWVyZXBvcnQoRVJST1IsCi0JCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCi0JCQkgZXJybXNnKCJjYW5ub3QgYWNjZXB0IGEgdmFsdWUgb2YgdHlwZSAlcyIsICJw Z19kZXBlbmRlbmNpZXMiKSkpOworCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFSR19DU1RSSU5HKDAp OwogCi0JUEdfUkVUVVJOX1ZPSUQoKTsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJZGVw ZW5kZW5jaWVzUGFyc2VTdGF0ZSBwYXJzZV9zdGF0ZTsKKwlKc29uUGFyc2VFcnJvclR5cGUgcmVz dWx0OworCUpzb25MZXhDb250ZXh0ICpsZXg7CisJSnNvblNlbUFjdGlvbiBzZW1fYWN0aW9uOwor CisJLyogaW5pdGlhbGl6ZSB0aGUgc2VtYW50aWMgc3RhdGUgKi8KKwlwYXJzZV9zdGF0ZS5zdHIg PSBzdHI7CisJcGFyc2Vfc3RhdGUuZm91bmRfb25seV9vYmplY3QgPSBmYWxzZTsKKwlwYXJzZV9z dGF0ZS5kZXBlbmRlbmN5X2xpc3QgPSBOSUw7CisJcGFyc2Vfc3RhdGUuZXNjb250ZXh0ID0gZmNp bmZvLT5jb250ZXh0OworCXBhcnNlX3N0YXRlLmN1cnJlbnRfZGVwZW5kZW5jeSA9IE5VTEw7CisK KwkvKiBzZXQgY2FsbGJhY2tzICovCisJc2VtX2FjdGlvbi5zZW1zdGF0ZSA9ICh2b2lkICopICZw YXJzZV9zdGF0ZTsKKwlzZW1fYWN0aW9uLm9iamVjdF9zdGFydCA9IGRlcGVuZGVuY2llc19vYmpl Y3Rfc3RhcnQ7CisJc2VtX2FjdGlvbi5vYmplY3RfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFy cmF5X3N0YXJ0ID0gZGVwZW5kZW5jaWVzX2FycmF5X3N0YXJ0OworCXNlbV9hY3Rpb24uYXJyYXlf ZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFycmF5X2VsZW1lbnRfc3RhcnQgPSBkZXBlbmRlbmNp ZXNfYXJyYXlfZWxlbWVudF9zdGFydDsKKwlzZW1fYWN0aW9uLmFycmF5X2VsZW1lbnRfZW5kID0g TlVMTDsKKwlzZW1fYWN0aW9uLm9iamVjdF9maWVsZF9zdGFydCA9IGRlcGVuZGVuY2llc19vYmpl Y3RfZmllbGRfc3RhcnQ7CisJc2VtX2FjdGlvbi5vYmplY3RfZmllbGRfZW5kID0gTlVMTDsKKwlz ZW1fYWN0aW9uLnNjYWxhciA9IGRlcGVuZGVuY2llc19zY2FsYXI7CisKKwlsZXggPSBtYWtlSnNv bkxleENvbnRleHRDc3RyaW5nTGVuKE5VTEwsIHN0ciwgc3RybGVuKHN0ciksIFBHX1VURjgsIHRy dWUpOworCisJcmVzdWx0ID0gcGdfcGFyc2VfanNvbihsZXgsICZzZW1fYWN0aW9uKTsKKwlmcmVl SnNvbkxleENvbnRleHQobGV4KTsKKworCWlmIChyZXN1bHQgPT0gSlNPTl9TVUNDRVNTKQorCXsK KwkJTGlzdAkgICAqbGlzdCA9IHBhcnNlX3N0YXRlLmRlcGVuZGVuY3lfbGlzdDsKKwkJaW50CQkJ bmRlcHMgPSBsaXN0LT5sZW5ndGg7CisJCU1WRGVwZW5kZW5jaWVzICptdmRlcHM7CisJCWJ5dGVh CSAgICpieXRlczsKKworCQltdmRlcHMgPSBwYWxsb2MwKG9mZnNldG9mKE1WRGVwZW5kZW5jaWVz LCBkZXBzKSArIG5kZXBzICogc2l6ZW9mKE1WRGVwZW5kZW5jeSkpOworCQltdmRlcHMtPm1hZ2lj ID0gU1RBVFNfREVQU19NQUdJQzsKKwkJbXZkZXBzLT50eXBlID0gU1RBVFNfREVQU19UWVBFX0JB U0lDOworCQltdmRlcHMtPm5kZXBzID0gbmRlcHM7CisKKwkJLyogY29weSBNVkRlcGVuZGVuY3kg c3RydWN0cyBvdXQgb2YgdGhlIGxpc3QgaW50byB0aGUgTVZEZXBlbmRlbmNpZXMgKi8KKwkJZm9y IChpbnQgaSA9IDA7IGkgPCBuZGVwczsgaSsrKQorCQkJbXZkZXBzLT5kZXBzW2ldID0gbGlzdC0+ ZWxlbWVudHNbaV0ucHRyX3ZhbHVlOworCQlieXRlcyA9IHN0YXRleHRfZGVwZW5kZW5jaWVzX3Nl cmlhbGl6ZShtdmRlcHMpOworCisJCWxpc3RfZnJlZShsaXN0KTsKKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBuZGVwczsgaSsrKQorCQkJcGZyZWUobXZkZXBzLT5kZXBzW2ldKTsKKwkJcGZyZWUobXZk ZXBzKTsKKworCQlQR19SRVRVUk5fQllURUFfUChieXRlcyk7CisJfQorCWVsc2UgaWYgKHJlc3Vs dCA9PSBKU09OX1NFTV9BQ1RJT05fRkFJTEVEKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJLyog QW55dGhpbmcgZWxzZSBpcyBhIGdlbmVyaWMgSlNPTiBwYXJzZSBlcnJvciAqLworCWVyZXR1cm4o cGFyc2Vfc3RhdGUuZXNjb250ZXh0LCAoRGF0dW0pIDAsCisJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkgZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVw ZW5kZW5jaWVzOiBcIiVzXCIiLCBzdHIpLAorCQkJIGVycmRldGFpbCgiTXVzdCBiZSB2YWxpZCBK U09OLiIpKSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOwkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNf ZXh0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCAy MDMzMzY2N2U1Zi4uNDg5ZTZhMTk3NzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz X2V4dC5vdXQKQEAgLTMzNjUsNiArMzM2NSwyNCBAQCBTRUxFQ1QgJ3siNiwgLTEiOiAxNCwgIjYs IC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNiwgLTEsIC0yIjogMTQ1NDl9Jzo6cGdfbgog IHsiNiwgLTEiOiAxNCwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNiwgLTEsIC0y IjogMTQ1NDl9CiAoMSByb3cpCiAKKy0tIGNhbid0IGhhdmUgZHVwbGljYXRlcyBhdHRudW1zIGlu IGxpc3QKK1NFTEVDVCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0xIjogMTM0 NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CitFUlJPUjogIG1hbGZvcm1l ZCBwZ19uZGlzdGluY3Q6ICJ7IjYsIC0xIjogMTQsICI2LCAtMiI6IDkxNDMsICItMSwgLTEiOiAx MzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5fSIKK0xJTkUgMTogU0VMRUNUICd7IjYsIC0xIjogMTQs ICI2LCAtMiI6IDkxNDMsICItMSwgLTEiOiAxMzQ1NCwgIjYsIC0xLi4uCisgICAgICAgICAgICAg ICBeCitERVRBSUw6ICBhdHRudW0gbGlzdCBkdXBsaWNhdGUgdmFsdWUgZm91bmQ6IC0xCitTRUxF Q1QgJ3siLTIgPT4gNiI6IDAuMjkyNTA4LCAiLTIgPT4gLTEiOiAwLjExMzk5OSwgIjYsIC0yID0+ IC0xIjogMC4zNDg0NzksICItMSwgLTIgPT4gNiI6IDAuODM5NjkxfSc6OnBnX2RlcGVuZGVuY2ll czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19kZXBlbmRlbmNp ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiLTIgPT4gNiI6IDAuMjkyNTA4LCAiLTIgPT4g LTEiOiAwLjExMzk5OSwgIjYsIC0yID0+IC0xIjogMC4zNDg0NzksICItMSwgLTIgPT4gNiI6IDAu ODM5NjkxfQorKDEgcm93KQorCistLSBjYW4ndCBoYXZlIGR1cGxpY2F0ZXMgYXR0bnVtcyBpbiBs aXN0CitTRUxFQ1QgJ3siNiA9PiA2IjogMC4yOTI1MDgsICItMiA9PiAtMSI6IDAuMTEzOTk5LCAi NiwgLTIgPT4gLTEiOiAwLjM0ODQ3OSwgIi0xLCAtMiA9PiA2IjogMC44Mzk2OTF9Jzo6cGdfZGVw ZW5kZW5jaWVzOworRVJST1I6ICBtYWxmb3JtZWQgcGdfZGVwZW5kZW5jaWVzOiAieyI2ID0+IDYi OiAwLjI5MjUwOCwgIi0yID0+IC0xIjogMC4xMTM5OTksICI2LCAtMiA9PiAtMSI6IDAuMzQ4NDc5 LCAiLTEsIC0yID0+IDYiOiAwLjgzOTY5MX0iCitMSU5FIDE6IFNFTEVDVCAneyI2ID0+IDYiOiAw LjI5MjUwOCwgIi0yID0+IC0xIjogMC4xMTM5OTksICI2LCAtMiA9Pi4uLgorICAgICAgICAgICAg ICAgXgorREVUQUlMOiAgYXR0bnVtIGxpc3QgZHVwbGljYXRlIHZhbHVlIGZvdW5kOiA2CiAtLSBU aWR5IHVwCiBEUk9QIE9QRVJBVE9SIDw8PCAoaW50LCBpbnQpOwogRFJPUCBGVU5DVElPTiBvcF9s ZWFrKGludCwgaW50KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4 dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCmluZGV4IDM1MzlkN2I1 Y2QyLi5kYTVjMTFhZWRkNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNf ZXh0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCkBAIC0xNzAy LDYgKzE3MDIsMTIgQEAgU0VMRUNUIHN0YXRpc3RpY3NfbmFtZSwgbW9zdF9jb21tb25fdmFscyBG Uk9NIHBnX3N0YXRzX2V4dF9leHBycyB4CiAKIC0tIG5ldyBpbnB1dCBmdW5jdGlvbnMKIFNFTEVD VCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwg LTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CistLSBjYW4ndCBoYXZlIGR1cGxpY2F0ZXMgYXR0 bnVtcyBpbiBsaXN0CitTRUxFQ1QgJ3siNiwgLTEiOiAxNCwgIjYsIC0yIjogOTE0MywgIi0xLCAt MSI6IDEzNDU0LCAiNiwgLTEsIC0yIjogMTQ1NDl9Jzo6cGdfbmRpc3RpbmN0OworCitTRUxFQ1Qg J3siLTIgPT4gNiI6IDAuMjkyNTA4LCAiLTIgPT4gLTEiOiAwLjExMzk5OSwgIjYsIC0yID0+IC0x IjogMC4zNDg0NzksICItMSwgLTIgPT4gNiI6IDAuODM5NjkxfSc6OnBnX2RlcGVuZGVuY2llczsK Ky0tIGNhbid0IGhhdmUgZHVwbGljYXRlcyBhdHRudW1zIGluIGxpc3QKK1NFTEVDVCAneyI2ID0+ IDYiOiAwLjI5MjUwOCwgIi0yID0+IC0xIjogMC4xMTM5OTksICI2LCAtMiA9PiAtMSI6IDAuMzQ4 NDc5LCAiLTEsIC0yID0+IDYiOiAwLjgzOTY5MX0nOjpwZ19kZXBlbmRlbmNpZXM7CiAKIC0tIFRp ZHkgdXAKIERST1AgT1BFUkFUT1IgPDw8IChpbnQsIGludCk7Ci0tIAoyLjQ4LjEKCg== --000000000000772648062f8a2458 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0003-Expose-attribute-statistics-functions-for-use-in-.patch" Content-Disposition: attachment; filename="v4-0003-Expose-attribute-statistics-functions-for-use-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7uxz3ny2 RnJvbSA4ZTk4NzkxYWFlNmJjODgzM2M2MTA2NzMyYzhlMmQzYmI1YTVhNzZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjaHVpbmtlckBhbWF6b24uY29tPgpE YXRlOiBUaHUsIDI2IERlYyAyMDI0IDA1OjAyOjA2IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2NCAz LzRdIEV4cG9zZSBhdHRyaWJ1dGUgc3RhdGlzdGljcyBmdW5jdGlvbnMgZm9yIHVzZSBpbgogZXh0 ZW5kZWRfc3RhdHMuCgpNYW55IG9mIHRoZSBvcGVyYXRpb25zIG9mIGF0dHJpYnV0ZSBzdGF0cyBo YXZlIGFuYWxvZ291cyBvcGVyYXRpb25zIGluCmV4dGVuZGVkIHN0YXRzLgoKKiBnZXRfYXR0cl9z dGF0X3R5cGUoKQoqIGluaXRfZW1wdHlfc3RhdHNfdHVwbGUoKQoqIHRleHRfdG9fc3RhdmFsdWVz KCkKKiBnZXRfZWxlbV9zdGF0X3R5cGUoKQotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3Rh dGlzdGljcy5oICAgICAgfCAxNyArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9hdHRyaWJ1dGVfc3RhdHMuYyB8IDI0ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogMiBm aWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCBiL3NyYy9pbmNsdWRlL3N0 YXRpc3RpY3Mvc3RhdGlzdGljcy5oCmluZGV4IDdkZDBmOTc1NTQ1Li5hMGFiNGI3NjMzYyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKQEAgLTEyNyw0ICsxMjcsMjEgQEAgZXh0ZXJu IFN0YXRpc3RpY0V4dEluZm8gKmNob29zZV9iZXN0X3N0YXRpc3RpY3MoTGlzdCAqc3RhdHMsIGNo YXIgcmVxdWlyZWRraW5kLAogCQkJCQkJCQkJCQkJaW50IG5jbGF1c2VzKTsKIGV4dGVybiBIZWFw VHVwbGUgc3RhdGV4dF9leHByZXNzaW9uc19sb2FkKE9pZCBzdHhvaWQsIGJvb2wgaW5oLCBpbnQg aWR4KTsKIAorZXh0ZXJuIHZvaWQgZ2V0X2F0dHJfc3RhdF90eXBlKE9pZCByZWxvaWQsIEF0dHJO dW1iZXIgYXR0bnVtLAorCQkJCQkJCSAgIE9pZCAqYXR0dHlwaWQsIGludDMyICphdHR0eXBtb2Qs CisJCQkJCQkJICAgY2hhciAqYXR0dHlwdHlwZSwgT2lkICphdHR0eXBjb2xsLAorCQkJCQkJCSAg IE9pZCAqZXFfb3ByLCBPaWQgKmx0X29wcik7CitleHRlcm4gdm9pZCBpbml0X2VtcHR5X3N0YXRz X3R1cGxlKE9pZCByZWxvaWQsIGludDE2IGF0dG51bSwgYm9vbCBpbmhlcml0ZWQsCisJCQkJCQkJ CSAgIERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNlcyk7CisKK2V4dGVy biB2b2lkIHNldF9zdGF0c19zbG90KERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpy ZXBsYWNlcywKKwkJCQkJCSAgIGludDE2IHN0YWtpbmQsIE9pZCBzdGFvcCwgT2lkIHN0YWNvbGws CisJCQkJCQkgICBEYXR1bSBzdGFudW1iZXJzLCBib29sIHN0YW51bWJlcnNfaXNudWxsLAorCQkJ CQkJICAgRGF0dW0gc3RhdmFsdWVzLCBib29sIHN0YXZhbHVlc19pc251bGwpOworCitleHRlcm4g RGF0dW0gdGV4dF90b19zdGF2YWx1ZXMoY29uc3QgY2hhciAqc3RhbmFtZSwgRm1nckluZm8gKmFy cmF5X2luLCBEYXR1bSBkLAorCQkJCQkJCSAgIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBib29s ICpvayk7CitleHRlcm4gYm9vbCBnZXRfZWxlbV9zdGF0X3R5cGUoT2lkIGF0dHR5cGlkLCBjaGFy IGF0dHR5cHR5cGUsCisJCQkJCQkJICAgT2lkICplbGVtdHlwaWQsIE9pZCAqZWxlbV9lcV9vcHIp OworCiAjZW5kaWYJCQkJCQkJLyogU1RBVElTVElDU19IICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGlj cy9hdHRyaWJ1dGVfc3RhdHMuYwppbmRleCA2YmNiZWUwZWRiYS4uYzc0MDA5OGYxM2EgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwpAQCAtOTYsMjMgKzk2LDkgQEAg c3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gY2xlYXJhcmdpbmZvW10gPQogCiBzdGF0aWMgYm9v bCBhdHRyaWJ1dGVfc3RhdGlzdGljc191cGRhdGUoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pOwog c3RhdGljIE5vZGUgKmdldF9hdHRyX2V4cHIoUmVsYXRpb24gcmVsLCBpbnQgYXR0bnVtKTsKLXN0 YXRpYyB2b2lkIGdldF9hdHRyX3N0YXRfdHlwZShPaWQgcmVsb2lkLCBBdHRyTnVtYmVyIGF0dG51 bSwKLQkJCQkJCQkgICBPaWQgKmF0dHR5cGlkLCBpbnQzMiAqYXR0dHlwbW9kLAotCQkJCQkJCSAg IGNoYXIgKmF0dHR5cHR5cGUsIE9pZCAqYXR0dHlwY29sbCwKLQkJCQkJCQkgICBPaWQgKmVxX29w ciwgT2lkICpsdF9vcHIpOwotc3RhdGljIGJvb2wgZ2V0X2VsZW1fc3RhdF90eXBlKE9pZCBhdHR0 eXBpZCwgY2hhciBhdHR0eXB0eXBlLAotCQkJCQkJCSAgIE9pZCAqZWxlbXR5cGlkLCBPaWQgKmVs ZW1fZXFfb3ByKTsKLXN0YXRpYyBEYXR1bSB0ZXh0X3RvX3N0YXZhbHVlcyhjb25zdCBjaGFyICpz dGFuYW1lLCBGbWdySW5mbyAqYXJyYXlfaW4sIERhdHVtIGQsCi0JCQkJCQkJICAgT2lkIHR5cGlk LCBpbnQzMiB0eXBtb2QsIGJvb2wgKm9rKTsKLXN0YXRpYyB2b2lkIHNldF9zdGF0c19zbG90KERh dHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNlcywKLQkJCQkJCSAgIGludDE2 IHN0YWtpbmQsIE9pZCBzdGFvcCwgT2lkIHN0YWNvbGwsCi0JCQkJCQkgICBEYXR1bSBzdGFudW1i ZXJzLCBib29sIHN0YW51bWJlcnNfaXNudWxsLAotCQkJCQkJICAgRGF0dW0gc3RhdmFsdWVzLCBi b29sIHN0YXZhbHVlc19pc251bGwpOwogc3RhdGljIHZvaWQgdXBzZXJ0X3BnX3N0YXRpc3RpYyhS ZWxhdGlvbiBzdGFyZWwsIEhlYXBUdXBsZSBvbGR0dXAsCiAJCQkJCQkJCURhdHVtICp2YWx1ZXMs IGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNlcyk7CiBzdGF0aWMgYm9vbCBkZWxldGVfcGdfc3Rh dGlzdGljKE9pZCByZWxvaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIHN0YWluaGVyaXQpOwot c3RhdGljIHZvaWQgaW5pdF9lbXB0eV9zdGF0c190dXBsZShPaWQgcmVsb2lkLCBpbnQxNiBhdHRu dW0sIGJvb2wgaW5oZXJpdGVkLAotCQkJCQkJCQkgICBEYXR1bSAqdmFsdWVzLCBib29sICpudWxs cywgYm9vbCAqcmVwbGFjZXMpOwogCiAvKgogICogSW5zZXJ0IG9yIFVwZGF0ZSBBdHRyaWJ1dGUg U3RhdGlzdGljcwpAQCAtNTYwLDcgKzU0Niw3IEBAIGdldF9hdHRyX2V4cHIoUmVsYXRpb24gcmVs LCBpbnQgYXR0bnVtKQogLyoKICAqIERlcml2ZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIGF0 dHJpYnV0ZS4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9hdHRyX3N0YXRfdHlwZShPaWQg cmVsb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwKIAkJCQkgICBPaWQgKmF0dHR5cGlkLCBpbnQzMiAq YXR0dHlwbW9kLAogCQkJCSAgIGNoYXIgKmF0dHR5cHR5cGUsIE9pZCAqYXR0dHlwY29sbCwKQEAg LTY0Miw3ICs2MjgsNyBAQCBnZXRfYXR0cl9zdGF0X3R5cGUoT2lkIHJlbG9pZCwgQXR0ck51bWJl ciBhdHRudW0sCiAvKgogICogRGVyaXZlIGVsZW1lbnQgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRo ZSBhdHRyaWJ1dGUgdHlwZS4KICAqLwotc3RhdGljIGJvb2wKK2Jvb2wKIGdldF9lbGVtX3N0YXRf dHlwZShPaWQgYXR0dHlwaWQsIGNoYXIgYXR0dHlwdHlwZSwKIAkJCQkgICBPaWQgKmVsZW10eXBp ZCwgT2lkICplbGVtX2VxX29wcikKIHsKQEAgLTY4Miw3ICs2NjgsNyBAQCBnZXRfZWxlbV9zdGF0 X3R5cGUoT2lkIGF0dHR5cGlkLCBjaGFyIGF0dHR5cHR5cGUsCiAgKiB0byBmYWxzZS4gSWYgdGhl IHJlc3VsdGluZyBhcnJheSBjb250YWlucyBOVUxMcywgcmFpc2UgYSBXQVJOSU5HIGFuZCBzZXQg b2sKICAqIHRvIGZhbHNlLiBPdGhlcndpc2UsIHNldCBvayB0byB0cnVlLgogICovCi1zdGF0aWMg RGF0dW0KK0RhdHVtCiB0ZXh0X3RvX3N0YXZhbHVlcyhjb25zdCBjaGFyICpzdGFuYW1lLCBGbWdy SW5mbyAqYXJyYXlfaW4sIERhdHVtIGQsIE9pZCB0eXBpZCwKIAkJCQkgIGludDMyIHR5cG1vZCwg Ym9vbCAqb2spCiB7CkBAIC03MzUsNyArNzIxLDcgQEAgdGV4dF90b19zdGF2YWx1ZXMoY29uc3Qg Y2hhciAqc3RhbmFtZSwgRm1nckluZm8gKmFycmF5X2luLCBEYXR1bSBkLCBPaWQgdHlwaWQsCiAg KiBGaW5kIGFuZCB1cGRhdGUgdGhlIHNsb3Qgd2l0aCB0aGUgZ2l2ZW4gc3Rha2luZCwgb3IgdXNl IHRoZSBmaXJzdCBlbXB0eQogICogc2xvdC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHNldF9z dGF0c19zbG90KERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNlcywKIAkJ CSAgIGludDE2IHN0YWtpbmQsIE9pZCBzdGFvcCwgT2lkIHN0YWNvbGwsCiAJCQkgICBEYXR1bSBz dGFudW1iZXJzLCBib29sIHN0YW51bWJlcnNfaXNudWxsLApAQCAtODU5LDcgKzg0NSw3IEBAIGRl bGV0ZV9wZ19zdGF0aXN0aWMoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgc3Rh aW5oZXJpdCkKIC8qCiAgKiBJbml0aWFsaXplIHZhbHVlcyBhbmQgbnVsbHMgZm9yIGEgbmV3IHN0 YXRzIHR1cGxlLgogICovCi1zdGF0aWMgdm9pZAordm9pZAogaW5pdF9lbXB0eV9zdGF0c190dXBs ZShPaWQgcmVsb2lkLCBpbnQxNiBhdHRudW0sIGJvb2wgaW5oZXJpdGVkLAogCQkJCQkgICBEYXR1 bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAqcmVwbGFjZXMpCiB7Ci0tIAoyLjQ4LjEKCg== --000000000000772648062f8a2458 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0004-Add-extended-statistics-support-functions.patch" Content-Disposition: attachment; filename="v4-0004-Add-extended-statistics-support-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7uxz63p3 RnJvbSAzOTMwZTY4Njg5NWY0MDg4ZDQ4NzVkMTg1NjQ1YzVlY2VmNDZlNzUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAzIEphbiAyMDI1IDEzOjQzOjI5IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 NCA0LzRdIEFkZCBleHRlbmRlZCBzdGF0aXN0aWNzIHN1cHBvcnQgZnVuY3Rpb25zLgoKQWRkIHBn X3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoKSBhbmQgcGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoKS4g VGhlc2UKZnVuY3Rpb25zIGNsb3NlbHkgbWlycm9yIHRoZWlyIHJlbGF0aW9uIGFuZCBhdHRyaWJ1 dGUgY291bnRlcnBhcnRzLApidXQgZm9yIGV4dGVuZGVkIHN0YXRpc3RpY3MgKGkuZS4gIENSRUFU RSBTVEFUSVNUSUNTKSBvYmplY3RzLgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgICAgICAgICAgICAgICB8ICAgMTYgKwogLi4uL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNf aW50ZXJuYWwuaCAgICAgIHwgICAgOCArCiBzcmMvYmFja2VuZC9zdGF0aXN0aWNzL2RlcGVuZGVu Y2llcy5jICAgICAgICAgfCAgIDY1ICsKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRf c3RhdHMuYyAgICAgICB8IDExMDQgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0YXRp c3RpY3MvbWN2LmMgICAgICAgICAgICAgICAgICB8ICAxNDQgKysrCiBzcmMvYmFja2VuZC9zdGF0 aXN0aWNzL212ZGlzdGluY3QuYyAgICAgICAgICAgfCAgIDE0ICstCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQgICAgICAgfCAgIDEzICsKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3RhdHNfaW1wb3J0Lm91dCAgICB8ICA0NDEgKysrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvc3RhdHNfZXh0LnNxbCAgICAgICAgICAgIHwgICAgNCArCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9zdGF0c19pbXBvcnQuc3FsICAgICAgICAgfCAgMzA0ICsrKysrCiBkb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk4ICsrCiAxMSBmaWxlcyBj aGFuZ2VkLCAyMjA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggY2Q5NDIyZDBiYWMuLjgyMzk4MDhhOWZjIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTEyNDQ5LDUgKzEyNDQ5LDIxIEBACiAgIHByb25hbWUgPT4gJ2dpc3Rfc3Ry YXRudW1fY29tbW9uJywgcHJvcmV0dHlwZSA9PiAnaW50MicsCiAgIHByb2FyZ3R5cGVzID0+ICdp bnQ0JywKICAgcHJvc3JjID0+ICdnaXN0X3N0cmF0bnVtX2NvbW1vbicgfSwKK3sgb2lkID0+ICc5 OTQ3JywKKyAgZGVzY3IgPT4gJ3Jlc3RvcmUgc3RhdGlzdGljcyBvbiBleHRlbmRlZCBzdGF0aXN0 aWNzIG9iamVjdCcsCisgIHByb25hbWUgPT4gJ3BnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMnLCBw cm92b2xhdGlsZSA9PiAndicsIHByb2lzc3RyaWN0ID0+ICdmJywKKyAgcHJvdmFyaWFkaWMgPT4g J2FueScsCisgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHBy b2FyZ3R5cGVzID0+ICdhbnknLAorICBwcm9hcmduYW1lcyA9PiAne2t3YXJnc30nLAorICBwcm9h cmdtb2RlcyA9PiAne3Z9JywKKyAgcHJvc3JjID0+ICdwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRz JyB9LAoreyBvaWQgPT4gJzk5NDgnLAorICBkZXNjciA9PiAnY2xlYXIgc3RhdGlzdGljcyBvbiBl eHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCcsCisgIHByb25hbWUgPT4gJ3BnX2NsZWFyX2V4dGVu ZGVkX3N0YXRzJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHBy b3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAndm9pZCcsCisgIHByb2FyZ3R5cGVzID0+ ICd0ZXh0IHRleHQgYm9vbCcsCisgIHByb2FyZ25hbWVzID0+ICd7c3RhdGlzdGljc19zY2hlbWFu YW1lLHN0YXRpc3RpY3NfbmFtZSxpbmhlcml0ZWR9JywKKyAgcHJvc3JjID0+ICdwZ19jbGVhcl9l eHRlbmRlZF9zdGF0cycgfSwKIAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRl bmRlZF9zdGF0c19pbnRlcm5hbC5oCmluZGV4IDM5NjkxNWE4YTk3Li42ODg2MmJiMTMwNCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5o CisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaApA QCAtMTI2LDYgKzEyNiwxMCBAQCBleHRlcm4gU2VsZWN0aXZpdHkgbWN2X2NsYXVzZV9zZWxlY3Rp dml0eV9vcihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJIFNlbGVjdGl2aXR5ICpvdmVy bGFwX21jdnNlbCwKIAkJCQkJCQkJCQkJIFNlbGVjdGl2aXR5ICpvdmVybGFwX2Jhc2VzZWwsCiAJ CQkJCQkJCQkJCSBTZWxlY3Rpdml0eSAqdG90YWxzZWwpOworZXh0ZXJuIERhdHVtIGltcG9ydF9t Y3ZsaXN0KEhlYXBUdXBsZSB0dXAsIGludCBlbGV2ZWwsIGludCBudW1hdHRycywKKwkJCQkJCQlP aWQgKmF0dHR5cGlkcywgaW50MzIgKmF0dHR5cG1vZHMsIE9pZCAqYXR0dHlwY29sbHMsCisJCQkJ CQkJaW50IG5pdGVtcywgRGF0dW0gKm1jdl9lbGVtcywgYm9vbCAqbWN2X251bGxzLAorCQkJCQkJ CWJvb2wgKm1jdl9lbGVtX251bGxzLCBmbG9hdDggKmZyZXFzLCBmbG9hdDggKmJhc2VfZnJlcXMp OwogCiBleHRlcm4gRGF0dW0gaW1wb3J0X21jdmxpc3QoSGVhcFR1cGxlIHR1cCwgaW50IGVsZXZl bCwgaW50IG51bWF0dHJzLAogCQkJCQkJCU9pZCAqYXR0dHlwaWRzLCBpbnQzMiAqYXR0dHlwbW9k cywgT2lkICphdHR0eXBjb2xscywKQEAgLTEzNCw1ICsxMzgsOSBAQCBleHRlcm4gRGF0dW0gaW1w b3J0X21jdmxpc3QoSGVhcFR1cGxlIHR1cCwgaW50IGVsZXZlbCwgaW50IG51bWF0dHJzLAogZXh0 ZXJuIGJvb2wgcGdfbmRpc3RpbmN0X3ZhbGlkYXRlX2l0ZW1zKE1WTkRpc3RpbmN0ICpuZGlzdGlu Y3QsIGludDJ2ZWN0b3IgKnN0eGtleXMsCiAJCQkJCQkJCQkJaW50IG51bWV4cHJzLCBpbnQgZWxl dmVsKTsKIGV4dGVybiB2b2lkIGZyZWVfcGdfbmRpc3RpbmN0KE1WTkRpc3RpbmN0ICpuZGlzdGlu Y3QpOworZXh0ZXJuIGJvb2wgcGdfZGVwZW5kZW5jaWVzX3ZhbGlkYXRlX2RlcHMoTVZEZXBlbmRl bmNpZXMgKmRlcGVuZGVuY2llcywKKwkJCQkJCQkJCQkgIGludDJ2ZWN0b3IgKnN0eGtleXMsIGlu dCBudW1leHBycywKKwkJCQkJCQkJCQkgIGludCBlbGV2ZWwpOworZXh0ZXJuIHZvaWQgZnJlZV9w Z19kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgKmRlcGVuZGVuY2llcyk7CiAKICNlbmRpZgkJ CQkJCQkvKiBFWFRFTkRFRF9TVEFUU19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL2RlcGVuZGVuY2llcy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9k ZXBlbmRlbmNpZXMuYwppbmRleCBlYzI2YTI0MjdlMi4uZGI0MjRkNDhkMjQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYwpAQCAtMzM3LDYgKzMzNywxMCBAQCBkZXBlbmRlbmN5 X2RlZ3JlZShTdGF0c0J1aWxkRGF0YSAqZGF0YSwgaW50IGssIEF0dHJOdW1iZXIgKmRlcGVuZGVu Y3kpCiAJcmV0dXJuIChuX3N1cHBvcnRpbmdfcm93cyAqIDEuMCAvIGRhdGEtPm51bXJvd3MpOwog fQogCisKK3ZvaWQKK2ZyZWVfcGdfZGVwZW5kZW5jaWVzKE1WRGVwZW5kZW5jaWVzICpkZXBlbmRl bmNpZXMpOworCiAvKgogICogZGV0ZWN0cyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBiZXR3ZWVu IGdyb3VwcyBvZiBjb2x1bW5zCiAgKgpAQCAtOTA5LDYgKzkxMyw1NSBAQCBkZXBlbmRlbmNpZXNf c2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUp CiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsKIH0KIAorLyoKKyAqIFZhbGlkYXRlIGFuIE1WRGVwZW5k ZW5jaWVzIGFnYWluc3QgdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0IGRlZmluaXRpb24u CisgKgorICogRXZlcnkgTVZEZXBlbmRlbmNpZXMgbXVzdCBiZSBjaGVja2VkIHRvIGVuc3VyZSB0 aGF0IHRoZSBhdHRudW1zIGluIHRoZQorICogYXR0cmlidXRlcyBsaXN0IGNvcnJlc3BvbmQgdG8g YXR0bnVtcy9leHByZXNzaW9ucyBkZWZpbmVkIGJ5IHRoZQorICogZXh0ZW5kZWQgc3RhdGlzdGlj cyBvYmplY3QuCisgKgorICogUG9zaXRpdmUgYXR0bnVtcyBhcmUgYXR0cmlidXRlcyB3aGljaCBt dXN0IGJlIGZvdW5kIGluIHRoZSBzdHhrZXlzLAorICogd2hpbGUgbmVnYXRpdmUgYXR0bnVtcyBj b3JyZXNwb25kIHRvIGFuIGV4cHIgbnVtYmVyLCBzbyB0aGUgYXR0bnVtCisgKiBjYW4ndCBiZSBi ZWxvdyAoMCAtIG51bWV4cHJzKS4KKyAqLworYm9vbAorcGdfZGVwZW5kZW5jaWVzX3ZhbGlkYXRl X2RlcHMoTVZEZXBlbmRlbmNpZXMgKmRlcGVuZGVuY2llcywgaW50MnZlY3RvciAqc3R4a2V5cywg aW50IG51bWV4cHJzLCBpbnQgZWxldmVsKQoreworCWludAkJYXR0bnVtX2V4cHJfbG93Ym91bmQg PSAwIC0gbnVtZXhwcnM7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy0+bmRl cHM7IGkrKykKKwl7CisJCU1WRGVwZW5kZW5jeSAqZGVwID0gZGVwZW5kZW5jaWVzLT5kZXBzW2ld OworCisJCWZvciAoaW50IGogPSAwOyBqIDwgZGVwLT5uYXR0cmlidXRlczsgaisrKQorCQl7CisJ CQlBdHRyTnVtYmVyCWF0dG51bSA9IGRlcC0+YXR0cmlidXRlc1tqXTsKKwkJCWJvb2wJCW9rID0g ZmFsc2U7CisKKwkJCWlmIChhdHRudW0gPiAwKQorCQkJeworCQkJCWZvciAoaW50IGsgPSAwOyBr IDwgc3R4a2V5cy0+ZGltMTsgaysrKQorCQkJCQlpZiAoYXR0bnVtID09IHN0eGtleXMtPnZhbHVl c1trXSkKKwkJCQkJeworCQkJCQkJb2sgPSB0cnVlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJ CX0KKwkJCWVsc2UgaWYgKChhdHRudW0gPCAwKSAmJiAoYXR0bnVtID49IGF0dG51bV9leHByX2xv d2JvdW5kKSkKKwkJCQlvayA9IHRydWU7CisKKwkJCWlmICghb2spCisJCQl7CisJCQkJZXJlcG9y dChlbGV2ZWwsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRB VElPTiksCisJCQkJCQllcnJtc2coInBnX2RlcGVuZGVuY2llczogaW52YWxpZCBhdHRudW0gZm9y IHRoaXMgc3RhdGlzdGljcyBvYmplY3Q6ICVkIiwgYXR0bnVtKSkpOworCQkJCXJldHVybiBmYWxz ZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIHBnX2RlcGVuZGVu Y2llc19pbgkJLSBpbnB1dCByb3V0aW5lIGZvciB0eXBlIHBnX2RlcGVuZGVuY2llcy4KICAqCkBA IC05OTEsNiArMTA0NCwxOCBAQCBwZ19kZXBlbmRlbmNpZXNfaW4oUEdfRlVOQ1RJT05fQVJHUykK IAlQR19SRVRVUk5fTlVMTCgpOwkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KIAorLyoK KyAqIEZyZWUgYWxsb2NhdGlvbnMgb2YgYW4gTVZORGlzdGluY3QKKyAqLwordm9pZAorZnJlZV9w Z19kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgKmRlcGVuZGVuY2llcykKK3sKKwlmb3IgKGlu dCBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy0+bmRlcHM7IGkrKykKKwkJcGZyZWUoZGVwZW5kZW5j aWVzLT5kZXBzW2ldKTsKKworCXBmcmVlKGRlcGVuZGVuY2llcyk7Cit9CisKIC8qCiAgKiBwZ19k ZXBlbmRlbmNpZXMJCS0gb3V0cHV0IHJvdXRpbmUgZm9yIHR5cGUgcGdfZGVwZW5kZW5jaWVzLgog ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMg Yi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggYThiNjNlYzA4 ODQuLmNlODgzYTAxY2MxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVu ZGVkX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5j CkBAIC0xOCwxMSArMTgsMTYgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5j bHVkZSAiYWNjZXNzL2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1 ZGUgImFjY2Vzcy9odHVwLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Rh dGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dF9kYXRhLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVz cGFjZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKQEAgLTMzLDYgKzM4 LDcgQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1 dW0uaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgiCisj aW5jbHVkZSAic3RhdGlzdGljcy9zdGF0X3V0aWxzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9z dGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJy YXkuaCIKQEAgLTcyLDYgKzc4LDcxIEBAIHR5cGVkZWYgc3RydWN0IFN0YXRFeHRFbnRyeQogCUxp c3QJICAgKmV4cHJzOwkJCS8qIGV4cHJlc3Npb25zICovCiB9IFN0YXRFeHRFbnRyeTsKIAorZW51 bSBleHRlbmRlZF9zdGF0c19hcmdudW0KK3sKKwlTVEFUU0NIRU1BX0FSRyA9IDAsCisJU1RBVE5B TUVfQVJHLAorCUlOSEVSSVRFRF9BUkcsCisJTkRJU1RJTkNUX0FSRywKKwlERVBFTkRFTkNJRVNf QVJHLAorCU1PU1RfQ09NTU9OX1ZBTFNfQVJHLAorCU1PU1RfQ09NTU9OX1ZBTF9OVUxMU19BUkcs CisJTU9TVF9DT01NT05fRlJFUVNfQVJHLAorCU1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHLAor CUVYUFJFU1NJT05TX0FSRywKKwlOVU1fRVhURU5ERURfU1RBVFNfQVJHUworfTsKKworc3RhdGlj IHN0cnVjdCBTdGF0c0FyZ0luZm8gZXh0YXJnaW5mb1tdID0KK3sKKwlbU1RBVFNDSEVNQV9BUkdd ID0geyJzdGF0aXN0aWNzX3NjaGVtYW5hbWUiLCBURVhUT0lEfSwKKwlbU1RBVE5BTUVfQVJHXSA9 IHsic3RhdGlzdGljc19uYW1lIiwgVEVYVE9JRH0sCisJW0lOSEVSSVRFRF9BUkddID0geyJpbmhl cml0ZWQiLCBCT09MT0lEfSwKKwlbTkRJU1RJTkNUX0FSR10gPSB7Im5fZGlzdGluY3QiLCBQR19O RElTVElOQ1RPSUR9LAorCVtERVBFTkRFTkNJRVNfQVJHXSA9IHsiZGVwZW5kZW5jaWVzIiwgUEdf REVQRU5ERU5DSUVTT0lEfSwKKwlbTU9TVF9DT01NT05fVkFMU19BUkddID0geyJtb3N0X2NvbW1v bl92YWxzIiwgVEVYVEFSUkFZT0lEfSwKKwlbTU9TVF9DT01NT05fVkFMX05VTExTX0FSR10gPSB7 Im1vc3RfY29tbW9uX3ZhbF9udWxscyIsIEJPT0xBUlJBWU9JRH0sCisJW01PU1RfQ09NTU9OX0ZS RVFTX0FSR10gPSB7Im1vc3RfY29tbW9uX2ZyZXFzIiwgRkxPQVQ4QVJSQVlPSUR9LAorCVtNT1NU X0NPTU1PTl9CQVNFX0ZSRVFTX0FSR10gPSB7Im1vc3RfY29tbW9uX2Jhc2VfZnJlcXMiLCBGTE9B VDhBUlJBWU9JRH0sCisJW0VYUFJFU1NJT05TX0FSR10gPSB7ImV4cHJzIiwgVEVYVEFSUkFZT0lE fSwKKwlbTlVNX0VYVEVOREVEX1NUQVRTX0FSR1NdID0gezB9Cit9OworCisvKgorICogTk9URTog dGhlIFJBTkdFX0xFTkdUSCAmIFJBTkdFX0JPVU5EUyBzdGF0cyBhcmUgbm90IHlldCByZWZsZWN0 ZWQgaW4gYW55CisgKiB2ZXJzaW9uIG9mIHBnX3N0YXRfZXh0X2V4cHJzLgorICovCitlbnVtIGV4 dGVuZGVkX3N0YXRzX2V4cHJzX2VsZW1lbnQKK3sKKwlOVUxMX0ZSQUNfRUxFTSA9IDAsCisJQVZH X1dJRFRIX0VMRU0sCisJTl9ESVNUSU5DVF9FTEVNLAorCU1PU1RfQ09NTU9OX1ZBTFNfRUxFTSwK KwlNT1NUX0NPTU1PTl9GUkVRU19FTEVNLAorCUhJU1RPR1JBTV9CT1VORFNfRUxFTSwKKwlDT1JS RUxBVElPTl9FTEVNLAorCU1PU1RfQ09NTU9OX0VMRU1TX0VMRU0sCisJTU9TVF9DT01NT05fRUxF TV9GUkVRU19FTEVNLAorCUVMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU0sCisJTlVNX0FUVFJJQlVU RV9TVEFUU19FTEVNUworfTsKKworc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8gZXh0ZXhwcmFy Z2luZm9bXSA9Cit7CisJW05VTExfRlJBQ19FTEVNXSA9IHsibnVsbF9mcmFjIiwgRkxPQVQ0T0lE fSwKKwlbQVZHX1dJRFRIX0VMRU1dID0geyJhdmdfd2lkdGgiLCBJTlQ0T0lEfSwKKwlbTl9ESVNU SU5DVF9FTEVNXSA9IHsibl9kaXN0aW5jdCIsIEZMT0FUNE9JRH0sCisJW01PU1RfQ09NTU9OX1ZB TFNfRUxFTV0gPSB7Im1vc3RfY29tbW9uX3ZhbHMiLCBURVhUT0lEfSwKKwlbTU9TVF9DT01NT05f RlJFUVNfRUxFTV0gPSB7Im1vc3RfY29tbW9uX2ZyZXFzIiwgRkxPQVQ0QVJSQVlPSUR9LAorCVtI SVNUT0dSQU1fQk9VTkRTX0VMRU1dID0geyJoaXN0b2dyYW1fYm91bmRzIiwgVEVYVE9JRH0sCisJ W0NPUlJFTEFUSU9OX0VMRU1dID0geyJjb3JyZWxhdGlvbiIsIEZMT0FUNE9JRH0sCisJW01PU1Rf Q09NTU9OX0VMRU1TX0VMRU1dID0geyJtb3N0X2NvbW1vbl9lbGVtcyIsIFRFWFRPSUR9LAorCVtN T1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0VMRU1dID0geyJtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIiwg RkxPQVQ0QVJSQVlPSUR9LAorCVtFTEVNX0NPVU5UX0hJU1RPR1JBTV9FTEVNXSA9IHsiZWxlbV9j b3VudF9oaXN0b2dyYW0iLCBGTE9BVDRBUlJBWU9JRH0sCisJW05VTV9BVFRSSUJVVEVfU1RBVFNf RUxFTVNdID0gezB9Cit9OworCitzdGF0aWMgYm9vbCBleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0 ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbyk7CiAKIHN0YXRpYyBMaXN0ICpmZXRjaF9zdGF0ZW50 cmllc19mb3JfcmVsYXRpb24oUmVsYXRpb24gcGdfc3RhdGV4dCwgT2lkIHJlbGlkKTsKIHN0YXRp YyBWYWNBdHRyU3RhdHMgKipsb29rdXBfdmFyX2F0dHJfc3RhdHMoQml0bWFwc2V0ICphdHRycywg TGlzdCAqZXhwcnMsCkBAIC05OSw2ICsxNzAsMjggQEAgc3RhdGljIFN0YXRzQnVpbGREYXRhICpt YWtlX2J1aWxkX2RhdGEoUmVsYXRpb24gcmVsLCBTdGF0RXh0RW50cnkgKnN0YXQsCiAJCQkJCQkJ CQkgICBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAogCQkJCQkJCQkJICAgVmFjQXR0clN0 YXRzICoqc3RhdHMsIGludCBzdGF0dGFyZ2V0KTsKIAorc3RhdGljIEhlYXBUdXBsZSBnZXRfcGdf c3RhdGlzdGljX2V4dChSZWxhdGlvbiBwZ19zdGV4dCwgT2lkIG5zcG9pZCwKKwkJCQkJCQkJCSAg Y29uc3QgY2hhciAqc3R4bmFtZSk7CitzdGF0aWMgYm9vbCBkZWxldGVfcGdfc3RhdGlzdGljX2V4 dF9kYXRhKE9pZCBzdHhvaWQsIGJvb2wgaW5oZXJpdGVkKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sK Kwlib29sCQluZGlzdGluY3Q7CisJYm9vbAkJZGVwZW5kZW5jaWVzOworCWJvb2wJCW1jdjsKKwli b29sCQlleHByZXNzaW9uczsKK30JCQlzdGFraW5kRmxhZ3M7CisKK3N0YXRpYyB2b2lkIGV4cGFu ZF9zdHhraW5kKEhlYXBUdXBsZSB0dXAsIHN0YWtpbmRGbGFncyAqIGVuYWJsZWQpOworc3RhdGlj IHZvaWQgdXBzZXJ0X3BnX3N0YXRpc3RpY19leHRfZGF0YShEYXR1bSAqdmFsdWVzLCBib29sICpu dWxscywgYm9vbCAqcmVwbGFjZXMpOworc3RhdGljIGJvb2wgY2hlY2tfbWN2bGlzdF9hcnJheShB cnJheVR5cGUgKmFyciwgaW50IGFyZ2luZGV4LAorCQkJCQkJCQlpbnQgcmVxdWlyZWRfbmRpbXNz LCBpbnQgbWN2X2xlbmd0aCk7CitzdGF0aWMgRGF0dW0gaW1wb3J0X2V4cHJlc3Npb25zKFJlbGF0 aW9uIHBnc2QsIGludCBudW1leHBycywKKwkJCQkJCQkJT2lkICphdHR0eXBpZHMsIGludDMyICph dHR0eXBtb2RzLAorCQkJCQkJCQlPaWQgKmF0dHR5cGNvbGxzLCBBcnJheVR5cGUgKmV4cHJzX2Fy cik7CitzdGF0aWMgYm9vbCB0ZXh0X3RvX2Zsb2F0NChEYXR1bSBpbnB1dCwgRGF0dW0gKm91dHB1 dCk7CitzdGF0aWMgYm9vbCB0ZXh0X3RvX2ludDQoRGF0dW0gaW5wdXQsIERhdHVtICpvdXRwdXQp OworCiAKIC8qCiAgKiBDb21wdXRlIHJlcXVlc3RlZCBleHRlbmRlZCBzdGF0cywgdXNpbmcgdGhl IHJvd3Mgc2FtcGxlZCBmb3IgdGhlIHBsYWluCkBAIC0yNjMxLDMgKzI3MjQsMTAxNCBAQCBtYWtl X2J1aWxkX2RhdGEoUmVsYXRpb24gcmVsLCBTdGF0RXh0RW50cnkgKnN0YXQsIGludCBudW1yb3dz LCBIZWFwVHVwbGUgKnJvd3MsCiAKIAlyZXR1cm4gcmVzdWx0OwogfQorCitzdGF0aWMgSGVhcFR1 cGxlCitnZXRfcGdfc3RhdGlzdGljX2V4dChSZWxhdGlvbiBwZ19zdGV4dCwgT2lkIG5zcG9pZCwg Y29uc3QgY2hhciAqc3R4bmFtZSkKK3sKKwlTY2FuS2V5RGF0YSBrZXlbMl07CisJU3lzU2NhbkRl c2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwOworCU9pZAkJCXN0eG9pZCA9IEludmFsaWRPaWQ7CisK KwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhuYW1l LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX05BTUVFUSwKKwkJCQlDU3RyaW5n R2V0RGF0dW0oc3R4bmFtZSkpOworCVNjYW5LZXlJbml0KCZrZXlbMV0sCisJCQkJQW51bV9wZ19z dGF0aXN0aWNfZXh0X3N0eG5hbWVzcGFjZSwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCisJ CQkJRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG5zcG9pZCkpOworCisJLyoKKwkgKiBU cnkgdG8gZmluZCBtYXRjaGluZyBwZ19zdGF0aXN0aWNfZXh0IHJvdy4KKwkgKi8KKwlzY2FuID0g c3lzdGFibGVfYmVnaW5zY2FuKHBnX3N0ZXh0LAorCQkJCQkJCSAgU3RhdGlzdGljRXh0TmFtZUlu ZGV4SWQsCisJCQkJCQkJICB0cnVlLAorCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkgIDIsCisJCQkJ CQkJICBrZXkpOworCisJLyogVW5pcXVlIGluZGV4LCBlaXRoZXIgd2UgZ2V0IGEgdHVwbGUgb3Ig d2UgZG9uJ3QuICovCisJdHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKworCWlmIChIZWFw VHVwbGVJc1ZhbGlkKHR1cCkpCisJCXN0eG9pZCA9ICgoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBH RVRTVFJVQ1QodHVwKSktPm9pZDsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisKKwlpZiAo IU9pZElzVmFsaWQoc3R4b2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gU2VhcmNoU3lz Q2FjaGVDb3B5MShTVEFURVhUT0lELCBPYmplY3RJZEdldERhdHVtKHN0eG9pZCkpOworfQorCisv KgorICogRGVjb2RlIHRoZSBzdHhraW5kIGNvbHVtbiBzbyB0aGF0IHdlIGtub3cgd2hpY2ggc3Rh dHMgdHlwZXMgdG8gZXhwZWN0LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX3N0eGtpbmQoSGVh cFR1cGxlIHR1cCwgc3Rha2luZEZsYWdzICogZW5hYmxlZCkKK3sKKwlEYXR1bQkJZGF0dW07CisJ QXJyYXlUeXBlICAqYXJyOworCWNoYXIJICAgKmtpbmRzOworCisJZGF0dW0gPSBTeXNDYWNoZUdl dEF0dHJOb3ROdWxsKFNUQVRFWFRPSUQsCisJCQkJCQkJCSAgIHR1cCwKKwkJCQkJCQkJICAgQW51 bV9wZ19zdGF0aXN0aWNfZXh0X3N0eGtpbmQpOworCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChk YXR1bSk7CisJaWYgKEFSUl9ORElNKGFycikgIT0gMSB8fCBBUlJfSEFTTlVMTChhcnIpIHx8IEFS Ul9FTEVNVFlQRShhcnIpICE9IENIQVJPSUQpCisJCWVsb2coRVJST1IsICJzdHhraW5kIGlzIG5v dCBhIDEtRCBjaGFyIGFycmF5Iik7CisKKwlraW5kcyA9IChjaGFyICopIEFSUl9EQVRBX1BUUihh cnIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJfRElNUyhhcnIpWzBdOyBpKyspCisJCWlm IChraW5kc1tpXSA9PSBTVEFUU19FWFRfTkRJU1RJTkNUKQorCQkJZW5hYmxlZC0+bmRpc3RpbmN0 ID0gdHJ1ZTsKKwkJZWxzZSBpZiAoa2luZHNbaV0gPT0gU1RBVFNfRVhUX0RFUEVOREVOQ0lFUykK KwkJCWVuYWJsZWQtPmRlcGVuZGVuY2llcyA9IHRydWU7CisJCWVsc2UgaWYgKGtpbmRzW2ldID09 IFNUQVRTX0VYVF9NQ1YpCisJCQllbmFibGVkLT5tY3YgPSB0cnVlOworCQllbHNlIGlmIChraW5k c1tpXSA9PSBTVEFUU19FWFRfRVhQUkVTU0lPTlMpCisJCQllbmFibGVkLT5leHByZXNzaW9ucyA9 IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCit1cHNlcnRfcGdfc3RhdGlzdGljX2V4dF9kYXRhKERh dHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNlcykKK3sKKwlSZWxhdGlvbglw Z19zdGV4dGRhdGE7CisJSGVhcFR1cGxlCXN0eGR0dXA7CisJSGVhcFR1cGxlCW5ld3R1cDsKKwor CXBnX3N0ZXh0ZGF0YSA9IHRhYmxlX29wZW4oU3RhdGlzdGljRXh0RGF0YVJlbGF0aW9uSWQsIFJv d0V4Y2x1c2l2ZUxvY2spOworCisJc3R4ZHR1cCA9IFNlYXJjaFN5c0NhY2hlMihTVEFURVhUREFU QVNUWE9JRCwKKwkJCQkJCQkgIHZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhv aWQgLSAxXSwKKwkJCQkJCQkgIHZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhk aW5oZXJpdCAtIDFdKTsKKworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHN0eGR0dXApKQorCXsKKwkJ bmV3dHVwID0gaGVhcF9tb2RpZnlfdHVwbGUoc3R4ZHR1cCwKKwkJCQkJCQkJICAgUmVsYXRpb25H ZXREZXNjcihwZ19zdGV4dGRhdGEpLAorCQkJCQkJCQkgICB2YWx1ZXMsCisJCQkJCQkJCSAgIG51 bGxzLAorCQkJCQkJCQkgICByZXBsYWNlcyk7CisJCUNhdGFsb2dUdXBsZVVwZGF0ZShwZ19zdGV4 dGRhdGEsICZuZXd0dXAtPnRfc2VsZiwgbmV3dHVwKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHN0eGR0 dXApOworCX0KKwllbHNlCisJeworCQluZXd0dXAgPSBoZWFwX2Zvcm1fdHVwbGUoUmVsYXRpb25H ZXREZXNjcihwZ19zdGV4dGRhdGEpLCB2YWx1ZXMsIG51bGxzKTsKKwkJQ2F0YWxvZ1R1cGxlSW5z ZXJ0KHBnX3N0ZXh0ZGF0YSwgbmV3dHVwKTsKKwl9CisKKwloZWFwX2ZyZWV0dXBsZShuZXd0dXAp OworCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCXRhYmxlX2Nsb3NlKHBnX3N0ZXh0 ZGF0YSwgUm93RXhjbHVzaXZlTG9jayk7Cit9CisKKy8qCisgKiBJbnNlcnQgb3IgVXBkYXRlIEV4 dGVuZGVkIFN0YXRpc3RpY3MKKyAqCisgKiBNYWpvciBlcnJvcnMsIHN1Y2ggYXMgdGhlIHRhYmxl IG5vdCBleGlzdGluZywgdGhlIHN0YXRpc3RpY3Mgb2JqZWN0IG5vdAorICogZXhpc3RpbmcsIG9y IGEgcGVybWlzc2lvbnMgZmFpbHVyZSBhcmUgYWx3YXlzIHJlcG9ydGVkIGF0IEVSUk9SLiBPdGhl cgorICogZXJyb3JzLCBzdWNoIGFzIGEgY29udmVyc2lvbiBmYWlsdXJlIG9uIG9uZSBzdGF0aXN0 aWMga2luZCwgYXJlIHJlcG9ydGVkCisgKiBhcyBXQVJOSU5HcywgYW5kIG90aGVyIHN0YXRpc3Rp YyBraW5kcyBtYXkgc3RpbGwgYmUgdXBkYXRlZC4KKyAqLworc3RhdGljIGJvb2wKK2V4dGVuZGVk X3N0YXRpc3RpY3NfdXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQoreworCU9pZAkJCW5z cG9pZDsKKwljaGFyCSAgICpuc3BuYW1lOworCWNoYXIJICAgKnN0eG5hbWU7CisJYm9vbAkJaW5o ZXJpdGVkOworCVJlbGF0aW9uCXBnX3N0ZXh0OworCUhlYXBUdXBsZQl0dXAgPSBOVUxMOworCisJ c3Rha2luZEZsYWdzIGVuYWJsZWQ7CisJc3Rha2luZEZsYWdzIGhhczsKKworCUZvcm1fcGdfc3Rh dGlzdGljX2V4dCBzdHhmb3JtOworCisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19zdGF0aXN0aWNf ZXh0X2RhdGFdOworCWJvb2wJCW51bGxzW05hdHRzX3BnX3N0YXRpc3RpY19leHRfZGF0YV07CisJ Ym9vbAkJcmVwbGFjZXNbTmF0dHNfcGdfc3RhdGlzdGljX2V4dF9kYXRhXTsKKworCWJvb2wJCXN1 Y2Nlc3MgPSB0cnVlOworCisJRGF0dW0JCWV4cHJkYXR1bTsKKwlib29sCQlpc251bGw7CisJTGlz dAkgICAqZXhwcnMgPSBOSUw7CisJaW50CQkJbnVtYXR0bnVtcyA9IDA7CisJaW50CQkJbnVtZXhw cnMgPSAwOworCWludAkJCW51bWF0dHJzID0gMDsKKworCS8qIGFycmF5cyBvZiB0eXBlIGluZm8s IGlmIHdlIG5lZWQgdGhlbSAqLworCU9pZAkJICAgKmF0dHR5cGlkcyA9IE5VTEw7CisJaW50MzIJ ICAgKmF0dHR5cG1vZHMgPSBOVUxMOworCU9pZAkJICAgKmF0dHR5cGNvbGxzID0gTlVMTDsKKwor CW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOworCW1lbXNldCh2YWx1ZXMsIDAs IHNpemVvZih2YWx1ZXMpKTsKKwltZW1zZXQocmVwbGFjZXMsIDAsIHNpemVvZihyZXBsYWNlcykp OworCW1lbXNldCgmZW5hYmxlZCwgMCwgc2l6ZW9mKGVuYWJsZWQpKTsKKworCWhhcy5tY3YgPSAo IVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9WQUxTX0FSRykgJiYKKwkJCSAgICFQR19BUkdJU05V TEwoTU9TVF9DT01NT05fVkFMX05VTExTX0FSRykgJiYKKwkJCSAgICFQR19BUkdJU05VTEwoTU9T VF9DT01NT05fRlJFUVNfQVJHKSAmJgorCQkJICAgIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9C QVNFX0ZSRVFTX0FSRykpOworCWhhcy5uZGlzdGluY3QgPSAhUEdfQVJHSVNOVUxMKE5ESVNUSU5D VF9BUkcpOworCWhhcy5kZXBlbmRlbmNpZXMgPSAhUEdfQVJHSVNOVUxMKERFUEVOREVOQ0lFU19B UkcpOworCWhhcy5leHByZXNzaW9ucyA9ICFQR19BUkdJU05VTEwoRVhQUkVTU0lPTlNfQVJHKTsK KworCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJ CQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJ CQkgZXJybXNnKCJyZWNvdmVyeSBpcyBpbiBwcm9ncmVzcyIpLAorCQkJCSBlcnJoaW50KCJTdGF0 aXN0aWNzIGNhbm5vdCBiZSBtb2RpZmllZCBkdXJpbmcgcmVjb3ZlcnkuIikpKTsKKwkJUEdfUkVU VVJOX0JPT0woZmFsc2UpOworCX0KKworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8s IGV4dGFyZ2luZm8sIFNUQVRTQ0hFTUFfQVJHKTsKKwluc3BuYW1lID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhQR19HRVRBUkdfREFUVU0oU1RBVFNDSEVNQV9BUkcpKTsKKwlzdGF0c19jaGVja19yZXF1 aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBTVEFUTkFNRV9BUkcpOworCXN0eG5hbWUgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShTVEFUTkFNRV9BUkcpKTsKKwlzdGF0 c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBJTkhFUklURURfQVJHKTsK Kwlpbmhlcml0ZWQgPSBQR19HRVRBUkdfTkFNRShJTkhFUklURURfQVJHKTsKKworCW5zcG9pZCA9 IGdldF9uYW1lc3BhY2Vfb2lkKG5zcG5hbWUsIHRydWUpOworCWlmIChuc3BvaWQgPT0gSW52YWxp ZE9pZCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coIk5hbWVzcGFjZSBcIiVzXCIgbm90IGZvdW5kLiIs IHN0eG5hbWUpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlwZ19zdGV4dCA9 IHRhYmxlX29wZW4oU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJ dHVwID0gZ2V0X3BnX3N0YXRpc3RpY19leHQocGdfc3RleHQsIG5zcG9pZCwgc3R4bmFtZSk7CisK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwl7CisJCXRhYmxlX2Nsb3NlKHBnX3N0ZXh0 LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJjb2RlKEVS UkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygiRXh0ZW5kZWQgU3RhdGlzdGlj cyBPYmplY3QgXCIlc1wiLlwiJXNcIiBub3QgZm91bmQuIiwKKwkJCQkJCWdldF9uYW1lc3BhY2Vf bmFtZShuc3BvaWQpLCBzdHhuYW1lKSkpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJfQor CisJc3R4Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVCh0dXApOworCWV4 cGFuZF9zdHhraW5kKHR1cCwgJmVuYWJsZWQpOworCW51bWF0dG51bXMgPSBzdHhmb3JtLT5zdHhr ZXlzLmRpbTE7CisKKwkvKiBkZWNvZGUgZXhwcmVzc2lvbiAoaWYgYW55KSAqLworCWV4cHJkYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhUT0lELAorCQkJCQkJCQl0dXAsCisJCQkJCQkJCUFu dW1fcGdfc3RhdGlzdGljX2V4dF9zdHhleHBycywKKwkJCQkJCQkJJmlzbnVsbCk7CisKKwlpZiAo IWlzbnVsbCkKKwl7CisJCWNoYXIJICAgKnM7CisKKwkJcyA9IFRleHREYXR1bUdldENTdHJpbmco ZXhwcmRhdHVtKTsKKwkJZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUocyk7CisJCXBmcmVl KHMpOworCisJCS8qCisJCQkqIFJ1biB0aGUgZXhwcmVzc2lvbnMgdGhyb3VnaCBldmFsX2NvbnN0 X2V4cHJlc3Npb25zLiBUaGlzIGlzIG5vdAorCQkJKiBqdXN0IGFuIG9wdGltaXphdGlvbiwgYnV0 IGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgcGxhbm5lcgorCQkJKiB3aWxsIGJlIGNvbXBhcmlu ZyB0aGVtIHRvIHNpbWlsYXJseS1wcm9jZXNzZWQgcXVhbCBjbGF1c2VzLCBhbmQKKwkJCSogbWF5 IGZhaWwgdG8gZGV0ZWN0IHZhbGlkIG1hdGNoZXMgd2l0aG91dCB0aGlzLiAgV2UgbXVzdCBub3Qg dXNlCisJCQkqIGNhbm9uaWNhbGl6ZV9xdWFsLCBob3dldmVyLCBzaW5jZSB0aGVzZSBhcmVuJ3Qg cXVhbAorCQkJKiBleHByZXNzaW9ucy4KKwkJCSovCisJCWV4cHJzID0gKExpc3QgKikgZXZhbF9j b25zdF9leHByZXNzaW9ucyhOVUxMLCAoTm9kZSAqKSBleHBycyk7CisKKwkJLyogTWF5IGFzIHdl bGwgZml4IG9wZnVuY2lkcyB0b28gKi8KKwkJZml4X29wZnVuY2lkcygoTm9kZSAqKSBleHBycyk7 CisJfQorCW51bWV4cHJzID0gbGlzdF9sZW5ndGgoZXhwcnMpOworCW51bWF0dHJzID0gbnVtYXR0 bnVtcyArIG51bWV4cHJzOworCisJLyogbG9jayB0YWJsZSAqLworCXN0YXRzX2xvY2tfY2hlY2tf cHJpdmlsZWdlcyhzdHhmb3JtLT5zdHhyZWxpZCk7CisKKwlpZiAoaGFzLm1jdikKKwl7CisJCWlm ICghZW5hYmxlZC5tY3YpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIk1DViBwYXJh bWV0ZXJzIFwiJXNcIiwgXCIlc1wiLCBcIiVzXCIsIGFuZCBcIiVzXCIgd2VyZSBhbGwgIgorCQkJ CQkJCSJzcGVjaWZpZWQgZm9yIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0IHRoYXQgZG9lcyBu b3QgZXhwZWN0IE1DViAiLAorCQkJCQkJCWV4dGFyZ2luZm9bTU9TVF9DT01NT05fVkFMU19BUkdd LmFyZ25hbWUsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9WQUxfTlVMTFNfQVJHXS5h cmduYW1lLAorCQkJCQkJCWV4dGFyZ2luZm9bTU9TVF9DT01NT05fRlJFUVNfQVJHXS5hcmduYW1l LAorCQkJCQkJCWV4dGFyZ2luZm9bTU9TVF9DT01NT05fQkFTRV9GUkVRU19BUkddLmFyZ25hbWUp KSk7CisJCQloYXMubWN2ID0gZmFsc2U7CisJCQlzdWNjZXNzID0gZmFsc2U7CisJCX0KKwl9CisJ ZWxzZQorCXsKKwkJLyogVGhlIE1DViBhcmdzIG11c3QgYWxsIGJlIE5VTEwgKi8KKwkJaWYgKCFQ R19BUkdJU05VTEwoTU9TVF9DT01NT05fVkFMU19BUkcpIHx8CisJCQkhUEdfQVJHSVNOVUxMKE1P U1RfQ09NTU9OX1ZBTF9OVUxMU19BUkcpIHx8CisJCQkhUEdfQVJHSVNOVUxMKE1PU1RfQ09NTU9O X0ZSRVFTX0FSRykgfHwKKwkJCSFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fQkFTRV9GUkVRU19B UkcpKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJNQ1YgcGFyYW1ldGVycyBcIiVz XCIsIFwiJXNcIiwgXCIlc1wiLCBhbmQgXCIlc1wiIG11c3QgYmUgYWxsIHNwZWNpZmllZCBpZiBh bnkgYXJlIHNwZWNpZmllZCIsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9WQUxTX0FS R10uYXJnbmFtZSwKKwkJCQkJCQlleHRhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTF9OVUxMU19BUkdd LmFyZ25hbWUsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9GUkVRU19BUkddLmFyZ25h bWUsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSR10uYXJnbmFt ZSkpKTsKKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJfQorCX0KKworCWlmIChoYXMubmRpc3RpbmN0 ICYmICFlbmFibGVkLm5kaXN0aW5jdCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJQYXJh bWV0ZXJzIFwiJXNcIiB3YXMgc3BlY2lmaWVkIGZvciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVj dCAiCisJCQkJCQkidGhhdCBkb2VzIG5vdCBleHBlY3QgXCIlc1wiIiwKKwkJCQkJCWV4dGFyZ2lu Zm9bTkRJU1RJTkNUX0FSR10uYXJnbmFtZSwKKwkJCQkJCWV4dGFyZ2luZm9bTkRJU1RJTkNUX0FS R10uYXJnbmFtZSkpKTsKKwkJaGFzLm5kaXN0aW5jdCA9IGZhbHNlOworCQlzdWNjZXNzID0gZmFs c2U7CisJfQorCisJaWYgKGhhcy5kZXBlbmRlbmNpZXMgJiYgIWVuYWJsZWQuZGVwZW5kZW5jaWVz KQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIlBhcmFtZXRlcnMgXCIlc1wiIHdhcyBzcGVj aWZpZWQgZm9yIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0ICIKKwkJCQkJCSJ0aGF0IGRvZXMg bm90IGV4cGVjdCBcIiVzXCIiLAorCQkJCQkJZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJHXS5h cmduYW1lLAorCQkJCQkJZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lKSkpOwor CQloYXMuZGVwZW5kZW5jaWVzID0gZmFsc2U7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwl9CisKKwlp ZiAoaGFzLmV4cHJlc3Npb25zICYmICFlbmFibGVkLmV4cHJlc3Npb25zKQorCXsKKwkJZXJlcG9y dChXQVJOSU5HLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCSBlcnJtc2coIlBhcmFtZXRlcnMgXCIlc1wiIHdhcyBzcGVjaWZpZWQgZm9yIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2JqZWN0ICIKKwkJCQkJCSJ0aGF0IGRvZXMgbm90IGV4cGVjdCBcIiVz XCIiLAorCQkJCQkJZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lLAorCQkJCQkJ ZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lKSkpOworCQloYXMuZXhwcmVzc2lv bnMgPSBmYWxzZTsKKwkJc3VjY2VzcyA9IGZhbHNlOworCX0KKworCS8qCisJICogRWl0aGVyIG9m IHRoZXNlIHN0YXRzaXN0aWMgdHlwZXMgcmVxdWlyZXMgdGhhdCB3ZSBzdXBwbHkKKwkgKiBzZW1p LWZpbGxlZC1vdXQgVmFjQXR0clN0YXRQIGFycmF5LgorCSAqCisJICoKKwkgKiBJdCBpcyBub3Qg cG9zc2libGUgdG8gdXNlIHRoZSBleGlzdGluZyBsb29rdXBfdmFyX2F0dHJfc3RhdHMoKSBhbmQK KwkgKiBleGFtaW5lX2F0dHJpYnV0ZSgpIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIHdpbGwgc2tp cCBhdHRyaWJ1dGVzIGZvcgorCSAqIHdoaWNoIGF0dHN0YXR0YXJnZXQgaXMgMCwgYW5kIHdlIG1h eSBoYXZlIHN0YXRzIHRvIGltcG9ydCBmb3IgdGhvc2UKKwkgKiBhdHRyaWJ1dGVzLgorCSAqLwor CWlmIChoYXMubWN2IHx8IGhhcy5leHByZXNzaW9ucykKKwl7CisJCWF0dHR5cGlkcyA9IHBhbGxv YzAobnVtYXR0cnMgKiBzaXplb2YoT2lkKSk7CisJCWF0dHR5cG1vZHMgPSBwYWxsb2MwKG51bWF0 dHJzICogc2l6ZW9mKGludDMyKSk7CisJCWF0dHR5cGNvbGxzID0gcGFsbG9jMChudW1hdHRycyAq IHNpemVvZihPaWQpKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bWF0dG51bXM7IGkrKykK KwkJeworCQkJQXR0ck51bWJlcglhdHRudW0gPSBzdHhmb3JtLT5zdHhrZXlzLnZhbHVlc1tpXTsK KworCQkJT2lkCQkJbHRfb3ByOworCQkJT2lkCQkJZXFfb3ByOworCQkJY2hhcgkJdHlwZXR5cGU7 CisKKwkJCS8qCisJCQkgKiBmZXRjaCBhdHRyaWJ1dGUgZW50cmllcyB0aGUgc2FtZSBhcyBhcmUg ZG9uZSBmb3IgYXR0cmlidXRlCisJCQkgKiBzdGF0cworCQkJICovCisJCQlnZXRfYXR0cl9zdGF0 X3R5cGUoc3R4Zm9ybS0+c3R4cmVsaWQsCisJCQkJCQkJICAgYXR0bnVtLAorCQkJCQkJCSAgICZh dHR0eXBpZHNbaV0sCisJCQkJCQkJICAgJmF0dHR5cG1vZHNbaV0sCisJCQkJCQkJICAgJnR5cGV0 eXBlLAorCQkJCQkJCSAgICZhdHR0eXBjb2xsc1tpXSwKKwkJCQkJCQkgICAmbHRfb3ByLAorCQkJ CQkJCSAgICZlcV9vcHIpOworCQl9CisKKwkJZm9yIChpbnQgaSA9IG51bWF0dG51bXM7IGkgPCBu dW1hdHRyczsgaSsrKQorCQl7CisJCQlOb2RlCSAgICpleHByID0gbGlzdF9udGgoZXhwcnMsIGkg LSBudW1hdHRudW1zKTsKKworCQkJYXR0dHlwaWRzW2ldID0gZXhwclR5cGUoZXhwcik7CisJCQlh dHR0eXBtb2RzW2ldID0gZXhwclR5cG1vZChleHByKTsKKwkJCWF0dHR5cGNvbGxzW2ldID0gZXhw ckNvbGxhdGlvbihleHByKTsKKworCQkJLyoKKwkJCSAqIER1cGxpY2F0ZSBsb2dpYyBmcm9tIGdl dF9hdHRyX3N0YXRfdHlwZQorCQkJICovCisKKwkJCS8qCisJCQkgKiBJZiBpdCdzIGEgbXVsdGly YW5nZSwgc3RlcCBkb3duIHRvIHRoZSByYW5nZSB0eXBlLCBhcyBpcyBkb25lCisJCQkgKiBieSBt dWx0aXJhbmdlX3R5cGFuYWx5emUoKS4KKwkJCSAqLworCQkJaWYgKHR5cGVfaXNfbXVsdGlyYW5n ZShhdHR0eXBpZHNbaV0pKQorCQkJCWF0dHR5cGlkc1tpXSA9IGdldF9tdWx0aXJhbmdlX3Jhbmdl KGF0dHR5cGlkc1tpXSk7CisKKwkJCS8qCisJCQkgKiBTcGVjaWFsIGNhc2U6IGNvbGxhdGlvbiBm b3IgdHN2ZWN0b3IgaXMgREVGQVVMVF9DT0xMQVRJT05fT0lELgorCQkJICogU2VlIGNvbXB1dGVf dHN2ZWN0b3Jfc3RhdHMoKS4KKwkJCSAqLworCQkJaWYgKGF0dHR5cGlkc1tpXSA9PSBUU1ZFQ1RP Uk9JRCkKKwkJCQlhdHR0eXBjb2xsc1tpXSA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsKKworCQl9 CisJfQorCisJLyogUHJpbWFyeSBLZXk6IGNhbm5vdCBiZSBOVUxMIG9yIHJlcGxhY2VkLiAqLwor CXZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhvaWQgLSAxXSA9IE9iamVjdElk R2V0RGF0dW0oc3R4Zm9ybS0+b2lkKTsKKwl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2Rh dGFfc3R4ZGluaGVyaXQgLSAxXSA9IEJvb2xHZXREYXR1bShpbmhlcml0ZWQpOworCisJaWYgKGhh cy5uZGlzdGluY3QpCisJeworCQlEYXR1bQkJCW5kaXN0aW5jdF9kYXR1bSA9IFBHX0dFVEFSR19E QVRVTShORElTVElOQ1RfQVJHKTsKKwkJYnl0ZWEJCSAgICpkYXRhID0gRGF0dW1HZXRCeXRlYVBQ KG5kaXN0aW5jdF9kYXR1bSk7CisJCU1WTkRpc3RpbmN0CSAgICpuZGlzdGluY3QgPSBzdGF0ZXh0 X25kaXN0aW5jdF9kZXNlcmlhbGl6ZShkYXRhKTsKKworCQlpZiAocGdfbmRpc3RpbmN0X3ZhbGlk YXRlX2l0ZW1zKG5kaXN0aW5jdCwgJnN0eGZvcm0tPnN0eGtleXMsIG51bWV4cHJzLCBXQVJOSU5H KSkKKwkJeworCQkJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRuZGlzdGlu Y3QgLSAxXSA9IG5kaXN0aW5jdF9kYXR1bTsKKwkJCXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGlj X2V4dF9kYXRhX3N0eGRuZGlzdGluY3QgLSAxXSA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJ CQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkbmRpc3RpbmN0IC0gMV0gPSB0 cnVlOworCQkJc3VjY2VzcyA9IGZhbHNlOworCQl9CisKKwkJZnJlZV9wZ19uZGlzdGluY3QobmRp c3RpbmN0KTsKKwl9CisJZWxzZQorCQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9z dHhkbmRpc3RpbmN0IC0gMV0gPSB0cnVlOworCisJaWYgKGhhcy5kZXBlbmRlbmNpZXMpCisJewor CQlEYXR1bQkJCWRlcGVuZGVuY2llc19kYXR1bSA9IFBHX0dFVEFSR19EQVRVTShERVBFTkRFTkNJ RVNfQVJHKTsKKwkJYnl0ZWEJCSAgICpkYXRhID0gRGF0dW1HZXRCeXRlYVBQKGRlcGVuZGVuY2ll c19kYXR1bSk7CisJCU1WRGVwZW5kZW5jaWVzICpkZXBlbmRlbmNpZXMgPSBzdGF0ZXh0X2RlcGVu ZGVuY2llc19kZXNlcmlhbGl6ZShkYXRhKTsKKworCQlpZiAocGdfZGVwZW5kZW5jaWVzX3ZhbGlk YXRlX2RlcHMoZGVwZW5kZW5jaWVzLCAmc3R4Zm9ybS0+c3R4a2V5cywgbnVtZXhwcnMsIFdBUk5J TkcpKQorCQl7CisJCQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGRlcGVu ZGVuY2llcyAtIDFdID0gZGVwZW5kZW5jaWVzX2RhdHVtOworCQkJcmVwbGFjZXNbQW51bV9wZ19z dGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGRlcGVuZGVuY2llcyAtIDFdID0gdHJ1ZTsKKwkJfQorCQll bHNlCisJCXsKKwkJCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRkZXBlbmRl bmNpZXMgLSAxXSA9IHRydWU7CisJCQlzdWNjZXNzID0gZmFsc2U7CisJCX0KKworCQlmcmVlX3Bn X2RlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpOworCX0KKwllbHNlCisJCW51bGxzW0FudW1fcGdf c3RhdGlzdGljX2V4dF9kYXRhX3N0eGRkZXBlbmRlbmNpZXMgLSAxXSA9IHRydWU7CisKKwlpZiAo aGFzLm1jdikKKwl7CisJCURhdHVtCQlkYXR1bTsKKwkJQXJyYXlUeXBlICAqbWN2X2FyciA9IFBH X0dFVEFSR19BUlJBWVRZUEVfUChNT1NUX0NPTU1PTl9WQUxTX0FSRyk7CisJCUFycmF5VHlwZSAg Km51bGxzX2FyciA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUChNT1NUX0NPTU1PTl9WQUxfTlVMTFNf QVJHKTsKKwkJQXJyYXlUeXBlICAqZnJlcXNfYXJyID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKE1P U1RfQ09NTU9OX0ZSRVFTX0FSRyk7CisJCUFycmF5VHlwZSAgKmJhc2VfZnJlcXNfYXJyID0gUEdf R0VUQVJHX0FSUkFZVFlQRV9QKE1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHKTsKKwkJaW50CQkJ bml0ZW1zOworCQlEYXR1bQkgICAqbWN2X2VsZW1zOworCQlib29sCSAgICptY3ZfbnVsbHM7CisJ CWludAkJCWNoZWNrX251bW1jdjsKKworCQkvKgorCQkgKiBUaGUgbWN2X2FyciBpcyBhbiBhcnJh eSBvZiBhcnJheXMgb2YgdGV4dCwgYW5kIHdlIHVzZSBpdCBhcyB0aGUKKwkJICogcmVmZXJlbmNl IGFycmF5IGZvciBjaGVja2luZyB0aGUgbGVuZ3RocyBvZiB0aGUgb3RoZXIgMyBhcnJheXMuCisJ CSAqLworCQlpZiAoQVJSX05ESU0obWN2X2FycikgIT0gMikKKwkJeworCQkJZXJlcG9ydChXQVJO SU5HLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJIGVycm1zZygiUGFyYW1ldGVycyBcIiVzXCIgbXVzdCBiZSBhIHRleHQgYXJyYXkgb2YgMiBk aW1lbnNpb25zLiIsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9WQUxTX0FSR10uYXJn bmFtZSkpKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKworCQluaXRlbXMgPSBBUlJfRElN UyhtY3ZfYXJyKVswXTsKKworCQkvKiBmaXhlZCBsZW5ndGggYXJyYXlzIHRoYXQgY2Fubm90IGNv bnRhaW4gTlVMTHMgKi8KKwkJaWYgKCFjaGVja19tY3ZsaXN0X2FycmF5KG51bGxzX2FyciwgTU9T VF9DT01NT05fVkFMX05VTExTX0FSRywKKwkJCQkJCQkJIDIsIG5pdGVtcykgfHwKKwkJCSFjaGVj a19tY3ZsaXN0X2FycmF5KGZyZXFzX2FyciwgTU9TVF9DT01NT05fRlJFUVNfQVJHLAorCQkJCQkJ CQkgMSwgbml0ZW1zKSB8fAorCQkJIWNoZWNrX21jdmxpc3RfYXJyYXkoYmFzZV9mcmVxc19hcnIs IE1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHLAorCQkJCQkJCQkgMSwgbml0ZW1zKSkKKwkJCXJl dHVybiAoRGF0dW0pIDA7CisKKworCQlkZWNvbnN0cnVjdF9hcnJheV9idWlsdGluKG1jdl9hcnIs IFRFWFRPSUQsICZtY3ZfZWxlbXMsCisJCQkJCQkJCSAgJm1jdl9udWxscywgJmNoZWNrX251bW1j dik7CisKKwkJQXNzZXJ0KGNoZWNrX251bW1jdiA9PSAobml0ZW1zICogbnVtYXR0cnMpKTsKKwor CQlkYXR1bSA9IGltcG9ydF9tY3ZsaXN0KHR1cCwgV0FSTklORywgbnVtYXR0cnMsCisJCQkJCQkJ ICAgYXR0dHlwaWRzLCBhdHR0eXBtb2RzLCBhdHR0eXBjb2xscywKKwkJCQkJCQkgICBuaXRlbXMs IG1jdl9lbGVtcywgbWN2X251bGxzLAorCQkJCQkJCSAgIChib29sICopIEFSUl9EQVRBX1BUUihu dWxsc19hcnIpLAorCQkJCQkJCSAgIChmbG9hdDggKikgQVJSX0RBVEFfUFRSKGZyZXFzX2Fyciks CisJCQkJCQkJICAgKGZsb2F0OCAqKSBBUlJfREFUQV9QVFIoYmFzZV9mcmVxc19hcnIpKTsKKwor CQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZG1jdiAtIDFdID0gZGF0dW07 CisJCXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRtY3YgLSAxXSA9IHRy dWU7CisJfQorCWVsc2UKKwkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZG1j diAtIDFdID0gdHJ1ZTsKKworCWlmIChoYXMuZXhwcmVzc2lvbnMpCisJeworCQlEYXR1bQkJZGF0 dW07CisJCVJlbGF0aW9uCXBnc2Q7CisKKwkJcGdzZCA9IHRhYmxlX29wZW4oU3RhdGlzdGljUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJZGF0dW0gPSBpbXBvcnRfZXhwcmVzc2lv bnMocGdzZCwgbnVtZXhwcnMsCisJCQkJCQkJCSAgICZhdHR0eXBpZHNbbnVtYXR0bnVtc10sICZh dHR0eXBtb2RzW251bWF0dG51bXNdLAorCQkJCQkJCQkgICAmYXR0dHlwY29sbHNbbnVtYXR0bnVt c10sCisJCQkJCQkJCSAgIFBHX0dFVEFSR19BUlJBWVRZUEVfUChFWFBSRVNTSU9OU19BUkcpKTsK KworCQl0YWJsZV9jbG9zZShwZ3NkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCQl2YWx1ZXNbQW51 bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGV4cHIgLSAxXSA9IGRhdHVtOworCQlyZXBsYWNl c1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkZXhwciAtIDFdID0gdHJ1ZTsKKwl9CisJ ZWxzZQorCQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkZXhwciAtIDFdID0g dHJ1ZTsKKworCXVwc2VydF9wZ19zdGF0aXN0aWNfZXh0X2RhdGEodmFsdWVzLCBudWxscywgcmVw bGFjZXMpOworCisJaGVhcF9mcmVldHVwbGUodHVwKTsKKwl0YWJsZV9jbG9zZShwZ19zdGV4dCwg Um93RXhjbHVzaXZlTG9jayk7CisKKwlpZiAoYXR0dHlwaWRzICE9IE5VTEwpCisJCXBmcmVlKGF0 dHR5cGlkcyk7CisJaWYgKGF0dHR5cG1vZHMgIT0gTlVMTCkKKwkJcGZyZWUoYXR0dHlwbW9kcyk7 CisJaWYgKGF0dHR5cGNvbGxzICE9IE5VTEwpCisJCXBmcmVlKGF0dHR5cGNvbGxzKTsKKwlyZXR1 cm4gc3VjY2VzczsKK30KKworLyoKKyAqIENvbnNpc3RlbmN5IGNoZWNrcyB0byBlbnN1cmUgdGhh dCBvdGhlciBtY3ZsaXN0IGFycmF5cyBhcmUgaW4gYWxpZ25tZW50CisgKiB3aXRoIHRoZSBtY3Yg YXJyYXkuCisgKi8KK3N0YXRpYyBib29sCitjaGVja19tY3ZsaXN0X2FycmF5KEFycmF5VHlwZSAq YXJyLCBpbnQgYXJnaW5kZXgsIGludCByZXF1aXJlZF9uZGltcywKKwkJCQkJaW50IG1jdl9sZW5n dGgpCit7CisJaWYgKEFSUl9ORElNKGFycikgIT0gcmVxdWlyZWRfbmRpbXMpCisJeworCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiUGFyYW1ldGVyIFwiJXNcIiBtdXN0IGJlIGFuIGFycmF5IG9mICVk IGRpbWVuc2lvbnMuIiwKKwkJCQkJCWV4dGFyZ2luZm9bYXJnaW5kZXhdLmFyZ25hbWUsIHJlcXVp cmVkX25kaW1zKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGFycmF5X2NvbnRhaW5z X251bGxzKGFycikpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiQXJyYXkgXCIlc1wiIGNh bm5vdCBjb250YWluIE5VTExzLiIsCisJCQkJCQlleHRhcmdpbmZvW2FyZ2luZGV4XS5hcmduYW1l KSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKEFSUl9ESU1TKGFycilbMF0gIT0gbWN2 X2xlbmd0aCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJQYXJhbWV0ZXJzIFwiJXNcIiBt dXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzIFwiJXNcIiIsCisJCQkJCQll eHRhcmdpbmZvW2FyZ2luZGV4XS5hcmduYW1lLAorCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1P Tl9WQUxTX0FSR10uYXJnbmFtZSkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0 cnVlOworfQorCisvKgorICogQ3JlYXRlIHRoZSBzdHhkZXhwcnMgZGF0dW0gdXNpbmcgdGhlIHVz ZXIgaW5wdXQgaW4gYW4gYXJyYXkgb2YgYXJyYXkgb2YKKyAqIHRleHQsIHJlZmVyZW5jZWQgYWdh aW5zdCB0aGUgZGF0YXR5cGVzIGZvciB0aGUgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyBEYXR1 bQoraW1wb3J0X2V4cHJlc3Npb25zKFJlbGF0aW9uIHBnc2QsIGludCBudW1leHBycywKKwkJCQkg ICBPaWQgKmF0dHR5cGlkcywgaW50MzIgKmF0dHR5cG1vZHMsCisJCQkJICAgT2lkICphdHR0eXBj b2xscywgQXJyYXlUeXBlICpleHByc19hcnIpCit7CisJRGF0dW0JICAgKmV4cHJzX2VsZW1zOwor CWJvb2wJICAgKmV4cHJzX251bGxzOworCWludAkJCWNoZWNrX251bWV4cHJzOworCWludAkJCW9m ZnNldCA9IDA7CisKKwlGbWdySW5mbwlhcnJheV9pbl9mbjsKKworCU9pZAkJCXBnc3R5cG9pZCA9 IGdldF9yZWxfdHlwZV9pZChTdGF0aXN0aWNSZWxhdGlvbklkKTsKKworCUFycmF5QnVpbGRTdGF0 ZSAqYXN0YXRlID0gTlVMTDsKKworCisJaWYgKEFSUl9ORElNKGV4cHJzX2FycikgIT0gMikKKwl7 CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJQYXJhbWV0ZXIgXCIlc1wiIG11c3QgYmUgYSB0ZXh0 IGFycmF5IG9mIDIgZGltZW5zaW9ucy4iLAorCQkJCQkJZXh0YXJnaW5mb1tFWFBSRVNTSU9OU19B UkddLmFyZ25hbWUpKSk7CisJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCisJaWYgKEFSUl9ESU1T KGV4cHJzX2FycilbMF0gIT0gbnVtZXhwcnMpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi UGFyYW1ldGVyIFwiJXNcIiBtdXN0IGhhdmUgYW4gb3V0ZXIgZGltZW5zaW9uIG9mICVkIGVsZW1l bnRzLiIsCisJCQkJCQlleHRhcmdpbmZvW0VYUFJFU1NJT05TX0FSR10uYXJnbmFtZSwgbnVtZXhw cnMpKSk7CisJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCWlmIChBUlJfRElNUyhleHByc19hcnIp WzFdICE9IE5VTV9BVFRSSUJVVEVfU1RBVFNfRUxFTVMpCisJeworCQllcmVwb3J0KFdBUk5JTkcs CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiUGFyYW1ldGVyIFwiJXNcIiBtdXN0IGhhdmUgYW4gaW5uZXIgZGltZW5zaW9uIG9mICVk IGVsZW1lbnRzLiIsCisJCQkJCQlleHRhcmdpbmZvW0VYUFJFU1NJT05TX0FSR10uYXJnbmFtZSwK KwkJCQkJCU5VTV9BVFRSSUJVVEVfU1RBVFNfRUxFTVMpKSk7CisJCXJldHVybiAoRGF0dW0pIDA7 CisJfQorCisJZm1ncl9pbmZvKEZfQVJSQVlfSU4sICZhcnJheV9pbl9mbik7CisKKwlkZWNvbnN0 cnVjdF9hcnJheV9idWlsdGluKGV4cHJzX2FyciwgVEVYVE9JRCwgJmV4cHJzX2VsZW1zLAorCQkJ CQkJCSAgJmV4cHJzX251bGxzLCAmY2hlY2tfbnVtZXhwcnMpOworCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBudW1leHByczsgaSsrKQorCXsKKwkJT2lkCQkJdHlwaWQgPSBhdHR0eXBpZHNbaV07CisJ CWludDMyCQl0eXBtb2QgPSBhdHR0eXBtb2RzW2ldOworCQlPaWQJCQlzdGFjb2xsID0gYXR0dHlw Y29sbHNbaV07CisJCVR5cGVDYWNoZUVudHJ5ICp0eXBjYWNoZTsKKworCQlPaWQJCQllbGVtdHlw aWQgPSBJbnZhbGlkT2lkOworCQlPaWQJCQllbGVtX2VxX29wciA9IEludmFsaWRPaWQ7CisKKwkJ Ym9vbAkJb2s7CisKKwkJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19zdGF0aXN0aWNdOworCQlib29s CQludWxsc1tOYXR0c19wZ19zdGF0aXN0aWNdOworCQlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19z dGF0aXN0aWNdOworCisJCUhlYXBUdXBsZQlwZ3N0dXA7CisJCURhdHVtCQlwZ3N0ZGF0OworCisJ CS8qIGZpbmRzIHRoZSByaWdodCBvcGVyYXRvcnMgZXZlbiBpZiBhdHR0eXBpZCBpcyBhIGRvbWFp biAqLworCQl0eXBjYWNoZSA9IGxvb2t1cF90eXBlX2NhY2hlKHR5cGlkLCBUWVBFQ0FDSEVfTFRf T1BSIHwgVFlQRUNBQ0hFX0VRX09QUik7CisKKwkJaW5pdF9lbXB0eV9zdGF0c190dXBsZShJbnZh bGlkT2lkLCBJbnZhbGlkQXR0ck51bWJlciwgZmFsc2UsCisJCQkJCQkJICAgdmFsdWVzLCBudWxs cywgcmVwbGFjZXMpOworCisJCWlmICghZXhwcnNfbnVsbHNbb2Zmc2V0ICsgTlVMTF9GUkFDX0VM RU1dKQorCQl7CisJCQlvayA9IHRleHRfdG9fZmxvYXQ0KGV4cHJzX2VsZW1zW29mZnNldCArIE5V TExfRlJBQ19FTEVNXSwKKwkJCQkJCQkJJnZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGFudWxs ZnJhYyAtIDFdKTsKKworCQkJaWYgKCFvaykKKwkJCXsKKwkJCQljaGFyCSAgICpzID0gVGV4dERh dHVtR2V0Q1N0cmluZyhleHByc19lbGVtc1tvZmZzZXQgKyBOVUxMX0ZSQUNfRUxFTV0pOworCisJ CQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJFeHByZXNzaW9uICVzIGVsZW1lbnQgXCIlc1wi IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGlucHV0IHR5cGUuIiwKKwkJCQkJCQkJZXh0ZXhwcmFy Z2luZm9bTlVMTF9GUkFDX0VMRU1dLmFyZ25hbWUsIHMpKSk7CisJCQkJcGZyZWUocyk7CisJCQkJ cmV0dXJuIChEYXR1bSkgMDsKKwkJCX0KKwkJfQorCisJCWlmICghZXhwcnNfbnVsbHNbb2Zmc2V0 ICsgQVZHX1dJRFRIX0VMRU1dKQorCQl7CisJCQlvayA9IHRleHRfdG9faW50NChleHByc19lbGVt c1tvZmZzZXQgKyBBVkdfV0lEVEhfRUxFTV0sCisJCQkJCQkJICAmdmFsdWVzW0FudW1fcGdfc3Rh dGlzdGljX3N0YXdpZHRoIC0gMV0pOworCisJCQlpZiAoIW9rKQorCQkJeworCQkJCWNoYXIJICAg KnMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzX2VsZW1zW29mZnNldCArIE5VTExfRlJBQ19F TEVNXSk7CisKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coIkV4cHJlc3Npb24gJXMgZWxl bWVudCBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgaW5wdXQgdHlwZS4iLAorCQkJCQkJ CQlleHRleHByYXJnaW5mb1tBVkdfV0lEVEhfRUxFTV0uYXJnbmFtZSwgcykpKTsKKwkJCQlwZnJl ZShzKTsKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJfQorCQl9CisKKwkJaWYgKCFleHByc19u dWxsc1tvZmZzZXQgKyBOX0RJU1RJTkNUX0VMRU1dKQorCQl7CisJCQlvayA9IHRleHRfdG9fZmxv YXQ0KGV4cHJzX2VsZW1zW29mZnNldCArIE5fRElTVElOQ1RfRUxFTV0sCisJCQkJCQkJCSZ2YWx1 ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhZGlzdGluY3QgLSAxXSk7CisKKwkJCWlmICghb2spCisJ CQl7CisJCQkJY2hhcgkgICAqcyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNfZWxlbXNbb2Zm c2V0ICsgTlVMTF9GUkFDX0VMRU1dKTsKKworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygi RXhwcmVzc2lvbiAlcyBlbGVtZW50IFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBpbnB1 dCB0eXBlLiIsCisJCQkJCQkJCWV4dGV4cHJhcmdpbmZvW05fRElTVElOQ1RfRUxFTV0uYXJnbmFt ZSwgcykpKTsKKwkJCQlwZnJlZShzKTsKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJfQorCQl9 CisKKwkJLyoKKwkJICogVGhlIFNUQUtJTkQgc3RhdGlzdGljcyBhcmUgdGhlIHNhbWUgYXMgdGhl IG9uZXMgZm91bmQgaW4gYXR0cmlidXRlCisJCSAqIHN0YXRzLiBIb3dldmVyLCB0aGVzZSBhcmUg YWxsIGRlcml2ZWQgZnJvbSB0ZXh0IGNvbHVtbnMsIHdoZXJlYXMKKwkJICogdGhlIG9uZXMgZGVy aXZlZCBmb3IgYXR0cmlidXRlIHN0YXRzIGFyZSBhIG1peCBvZiBkYXRhdHlwZXMuIFRoaXMKKwkJ ICogbGltaXRzIHRoZSBvcHBvcnR1bml0aWVzIGZvciBjb2RlIHNoYXJpbmcgYmV0d2VlbiB0aGUg dHdvLgorCQkgKi8KKworCQkvKiBTVEFUSVNUSUNfS0lORF9NQ1YgKi8KKwkJaWYgKGV4cHJzX251 bGxzW29mZnNldCArIE1PU1RfQ09NTU9OX1ZBTFNfRUxFTV0gIT0KKwkJCWV4cHJzX251bGxzW29m ZnNldCArIE1PU1RfQ09NTU9OX0ZSRVFTX0VMRU1dKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcs CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJFeHByZXNzaW9uICVzIGFuZCAlcyBtdXN0IGJvdGggYmUgTk9UIE5VTEwgb3IgYm90 aCBOVUxMLiIsCisJCQkJCQkJZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05fVkFMU19FTEVNXS5h cmduYW1lLAorCQkJCQkJCWV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX0ZSRVFTX0VMRU1dLmFy Z25hbWUpKSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJaWYgKCFleHByc19udWxs c1tvZmZzZXQgKyBNT1NUX0NPTU1PTl9WQUxTX0VMRU1dKQorCQl7CisJCQlEYXR1bQkJc3RhdmFs dWVzOworCQkJRGF0dW0JCXN0YW51bWJlcnM7CisKKwkJCXN0YXZhbHVlcyA9IHRleHRfdG9fc3Rh dmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfRUxFTV0uYXJnbmFtZSwKKwkJ CQkJCQkJCQkgICZhcnJheV9pbl9mbiwgZXhwcnNfZWxlbXNbb2Zmc2V0ICsgTU9TVF9DT01NT05f VkFMU19FTEVNXSwKKwkJCQkJCQkJCQkgIHR5cGlkLCB0eXBtb2QsICZvayk7CisKKwkJCWlmICgh b2spCisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQkJc3RhbnVtYmVycyA9IHRleHRfdG9fc3Rh dmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfRUxFTV0uYXJnbmFtZSwKKwkJ CQkJCQkJCQkgICAmYXJyYXlfaW5fZm4sIGV4cHJzX2VsZW1zW29mZnNldCArIE1PU1RfQ09NTU9O X0ZSRVFTX0VMRU1dLAorCQkJCQkJCQkJCSAgIEZMT0FUNE9JRCwgLTEsICZvayk7CisKKwkJCWlm ICghb2spCisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQkJc2V0X3N0YXRzX3Nsb3QodmFsdWVz LCBudWxscywgcmVwbGFjZXMsCisJCQkJCQkgICBTVEFUSVNUSUNfS0lORF9NQ1YsCisJCQkJCQkg ICB0eXBjYWNoZS0+ZXFfb3ByLCBzdGFjb2xsLAorCQkJCQkJICAgc3RhbnVtYmVycywgZmFsc2Us IHN0YXZhbHVlcywgZmFsc2UpOworCQl9CisKKwkJLyogU1RBVElTVElDX0tJTkRfSElTVE9HUkFN ICovCisJCWlmICghZXhwcnNfbnVsbHNbb2Zmc2V0ICsgSElTVE9HUkFNX0JPVU5EU19FTEVNXSkK KwkJeworCQkJRGF0dW0JCXN0YXZhbHVlczsKKworCQkJc3RhdmFsdWVzID0gdGV4dF90b19zdGF2 YWx1ZXMoZXh0ZXhwcmFyZ2luZm9bSElTVE9HUkFNX0JPVU5EU19FTEVNXS5hcmduYW1lLAorCQkJ CQkJCQkJCSAgJmFycmF5X2luX2ZuLCBleHByc19lbGVtc1tvZmZzZXQgKyBISVNUT0dSQU1fQk9V TkRTX0VMRU1dLAorCQkJCQkJCQkJCSAgdHlwaWQsIHR5cG1vZCwgJm9rKTsKKworCQkJaWYgKCFv aykKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCisJCQlzZXRfc3RhdHNfc2xvdCh2YWx1ZXMsIG51 bGxzLCByZXBsYWNlcywKKwkJCQkJCSAgIFNUQVRJU1RJQ19LSU5EX0hJU1RPR1JBTSwKKwkJCQkJ CSAgIHR5cGNhY2hlLT5sdF9vcHIsIHN0YWNvbGwsCisJCQkJCQkgICAwLCB0cnVlLCBzdGF2YWx1 ZXMsIGZhbHNlKTsKKwkJfQorCisJCS8qIFNUQVRJU1RJQ19LSU5EX0NPUlJFTEFUSU9OICovCisJ CWlmICghZXhwcnNfbnVsbHNbb2Zmc2V0ICsgQ09SUkVMQVRJT05fRUxFTV0pCisJCXsKKwkJCURh dHVtCQljb3JyW10gPSB7KERhdHVtKSAwfTsKKwkJCUFycmF5VHlwZSAgKmFycnk7CisJCQlEYXR1 bQkJc3RhbnVtYmVyczsKKworCQkJb2sgPSB0ZXh0X3RvX2Zsb2F0NChleHByc19lbGVtc1tvZmZz ZXQgKyBDT1JSRUxBVElPTl9FTEVNXSwgJmNvcnJbMF0pOworCisJCQlpZiAoIW9rKQorCQkJewor CQkJCWNoYXIJICAgKnMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzX2VsZW1zW29mZnNldCAr IENPUlJFTEFUSU9OX0VMRU1dKTsKKworCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiRXhw cmVzc2lvbiAlcyBlbGVtZW50IFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBpbnB1dCB0 eXBlLiIsCisJCQkJCQkJCWV4dGV4cHJhcmdpbmZvW0NPUlJFTEFUSU9OX0VMRU1dLmFyZ25hbWUs IHMpKSk7CisJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCX0KKworCQkJYXJyeSA9IGNvbnN0cnVj dF9hcnJheV9idWlsdGluKGNvcnIsIDEsIEZMT0FUNE9JRCk7CisKKwkJCXN0YW51bWJlcnMgPSBQ b2ludGVyR2V0RGF0dW0oYXJyeSk7CisKKwkJCXNldF9zdGF0c19zbG90KHZhbHVlcywgbnVsbHMs IHJlcGxhY2VzLAorCQkJCQkJICAgU1RBVElTVElDX0tJTkRfQ09SUkVMQVRJT04sCisJCQkJCQkg ICB0eXBjYWNoZS0+bHRfb3ByLCBzdGFjb2xsLAorCQkJCQkJICAgc3RhbnVtYmVycywgZmFsc2Us IDAsIHRydWUpOworCQl9CisKKwkJLyogU1RBVElTVElDX0tJTkRfTUNFTEVNICovCisJCWlmIChl eHByc19udWxsc1tvZmZzZXQgKyBNT1NUX0NPTU1PTl9FTEVNU19FTEVNXSAhPQorCQkJZXhwcnNf bnVsbHNbb2Zmc2V0ICsgTU9TVF9DT01NT05fRUxFTV9GUkVRU19FTEVNXSkKKwkJeworCQkJZXJl cG9ydChXQVJOSU5HLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygiRXhwcmVzc2lvbiAlcyBhbmQgJXMgbXVzdCBib3RoIGJlIE5P VCBOVUxMIG9yIGJvdGggTlVMTC4iLAorCQkJCQkJCWV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9O X0VMRU1TX0VMRU1dLmFyZ25hbWUsCisJCQkJCQkJZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05f RUxFTV9GUkVRU19FTEVNXS5hcmduYW1lKSkpOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQor CisJCS8qCisJCSAqIFdlIG9ubHkgbmVlZCB0byBmZXRjaCBlbGVtZW50IHR5cGUgYW5kIGVxIG9w ZXJhdG9yIGlmIHdlIGhhdmUgYQorCQkgKiBzdGF0IG9mIHR5cGUgTUNFTEVNIG9yIERFQ0hJU1Qu CisJCSAqLworCQlpZiAoIWV4cHJzX251bGxzW29mZnNldCArIE1PU1RfQ09NTU9OX0VMRU1TX0VM RU1dIHx8CisJCQkhZXhwcnNfbnVsbHNbb2Zmc2V0ICsgRUxFTV9DT1VOVF9ISVNUT0dSQU1fRUxF TV0pCisJCXsKKwkJCWlmICghZ2V0X2VsZW1fc3RhdF90eXBlKHR5cGlkLCB0eXBjYWNoZS0+dHlw dHlwZSwKKwkJCQkJCQkJCSZlbGVtdHlwaWQsICZlbGVtX2VxX29wcikpCisJCQl7CisJCQkJZXJl cG9ydChXQVJOSU5HLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgKGVycm1zZygidW5hYmxlIHRvIGRldGVybWluZSBlbGVtZW50IHR5cGUg b2YgZXhwcmVzc2lvbiIpKSkpOworCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQl9CisJCX0KKwor CQlpZiAoIWV4cHJzX251bGxzW29mZnNldCArIE1PU1RfQ09NTU9OX0VMRU1TX0VMRU1dKQorCQl7 CisJCQlEYXR1bQkJc3RhdmFsdWVzOworCQkJRGF0dW0JCXN0YW51bWJlcnM7CisKKwkJCXN0YXZh bHVlcyA9IHRleHRfdG9fc3RhdmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX0VMRU1T X0VMRU1dLmFyZ25hbWUsCisJCQkJCQkJCQkJICAmYXJyYXlfaW5fZm4sCisJCQkJCQkJCQkJICBl eHByc19lbGVtc1tvZmZzZXQgKyBNT1NUX0NPTU1PTl9FTEVNU19FTEVNXSwKKwkJCQkJCQkJCQkg IGVsZW10eXBpZCwgdHlwbW9kLCAmb2spOworCisJCQlpZiAoIW9rKQorCQkJCXJldHVybiAoRGF0 dW0pIDA7CisKKwkJCXN0YW51bWJlcnMgPSB0ZXh0X3RvX3N0YXZhbHVlcyhleHRleHByYXJnaW5m b1tNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0VMRU1dLmFyZ25hbWUsCisJCQkJCQkJCQkJICAgJmFy cmF5X2luX2ZuLAorCQkJCQkJCQkJCSAgIGV4cHJzX2VsZW1zW29mZnNldCArIE1PU1RfQ09NTU9O X0VMRU1fRlJFUVNfRUxFTV0sCisJCQkJCQkJCQkJICAgRkxPQVQ0T0lELCAtMSwgJm9rKTsKKwor CQkJaWYgKCFvaykKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCisJCQlzZXRfc3RhdHNfc2xvdCh2 YWx1ZXMsIG51bGxzLCByZXBsYWNlcywKKwkJCQkJCSAgIFNUQVRJU1RJQ19LSU5EX01DRUxFTSwK KwkJCQkJCSAgIGVsZW1fZXFfb3ByLCBzdGFjb2xsLAorCQkJCQkJICAgc3RhbnVtYmVycywgZmFs c2UsIHN0YXZhbHVlcywgZmFsc2UpOworCQl9CisKKwkJaWYgKCFleHByc19udWxsc1tvZmZzZXQg KyBFTEVNX0NPVU5UX0hJU1RPR1JBTV9FTEVNXSkKKwkJeworCQkJRGF0dW0JCXN0YW51bWJlcnM7 CisKKwkJCXN0YW51bWJlcnMgPSB0ZXh0X3RvX3N0YXZhbHVlcyhleHRleHByYXJnaW5mb1tFTEVN X0NPVU5UX0hJU1RPR1JBTV9FTEVNXS5hcmduYW1lLAorCQkJCQkJCQkJCSAgICZhcnJheV9pbl9m biwKKwkJCQkJCQkJCQkgICBleHByc19lbGVtc1tvZmZzZXQgKyBFTEVNX0NPVU5UX0hJU1RPR1JB TV9FTEVNXSwKKwkJCQkJCQkJCQkgICBGTE9BVDRPSUQsIC0xLCAmb2spOworCisJCQlpZiAoIW9r KQorCQkJCXJldHVybiAoRGF0dW0pIDA7CisKKwkJCXNldF9zdGF0c19zbG90KHZhbHVlcywgbnVs bHMsIHJlcGxhY2VzLCBTVEFUSVNUSUNfS0lORF9ERUNISVNULAorCQkJCQkJICAgZWxlbV9lcV9v cHIsIHN0YWNvbGwsCisJCQkJCQkgICBzdGFudW1iZXJzLCBmYWxzZSwgMCwgdHJ1ZSk7CisJCX0K KworCQkvKgorCQkgKiBDdXJyZW50bHkgdGhlcmUgYXJlIG5vIGV4dGVuZGVkIHN0YXRzIGV4cG9y dHMgb2YgdGhlIHN0YXRpc3RpYworCQkgKiBraW5kcyBTVEFUSVNUSUNfS0lORF9CT1VORFNfSElT VE9HUkFNIG9yCisJCSAqIFNUQVRJU1RJQ19LSU5EX1JBTkdFX0xFTkdUSF9ISVNUT0dSQU0gc28g dGhlc2UgY2Fubm90IGJlIGltcG9ydGVkLgorCQkgKiBUaGVzZSBtYXkgYmUgYWRkZWQgaW4gdGhl IGZ1dHVyZS4KKwkJICovCisKKwkJcGdzdHVwID0gaGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0 RGVzY3IocGdzZCksIHZhbHVlcywgbnVsbHMpOworCQlwZ3N0ZGF0ID0gaGVhcF9jb3B5X3R1cGxl X2FzX2RhdHVtKHBnc3R1cCwgUmVsYXRpb25HZXREZXNjcihwZ3NkKSk7CisJCWFzdGF0ZSA9IGFj Y3VtQXJyYXlSZXN1bHQoYXN0YXRlLCBwZ3N0ZGF0LCBmYWxzZSwgcGdzdHlwb2lkLAorCQkJCQkJ CQkgIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKworCQlvZmZzZXQgKz0gTlVNX0FUVFJJQlVURV9T VEFUU19FTEVNUzsKKwl9CisKKwlwZnJlZShleHByc19lbGVtcyk7CisJcGZyZWUoZXhwcnNfbnVs bHMpOworCisJcmV0dXJuIG1ha2VBcnJheVJlc3VsdChhc3RhdGUsIEN1cnJlbnRNZW1vcnlDb250 ZXh0KTsKK30KKworc3RhdGljIGJvb2wKK3RleHRfdG9fZmxvYXQ0KERhdHVtIGlucHV0LCBEYXR1 bSAqb3V0cHV0KQoreworCUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0ID0ge1RfRXJyb3JTYXZl Q29udGV4dH07CisKKwljaGFyCSAgICpzOworCWJvb2wJCW9rOworCisJcyA9IFRleHREYXR1bUdl dENTdHJpbmcoaW5wdXQpOworCW9rID0gRGlyZWN0SW5wdXRGdW5jdGlvbkNhbGxTYWZlKGZsb2F0 NGluLCBzLCBJbnZhbGlkT2lkLCAtMSwKKwkJCQkJCQkJCSAoTm9kZSAqKSAmZXNjb250ZXh0LCBv dXRwdXQpOworCisJcGZyZWUocyk7CisJcmV0dXJuIG9rOworfQorCisKK3N0YXRpYyBib29sCit0 ZXh0X3RvX2ludDQoRGF0dW0gaW5wdXQsIERhdHVtICpvdXRwdXQpCit7CisJRXJyb3JTYXZlQ29u dGV4dCBlc2NvbnRleHQgPSB7VF9FcnJvclNhdmVDb250ZXh0fTsKKworCWNoYXIJICAgKnM7CisJ Ym9vbAkJb2s7CisKKwlzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhpbnB1dCk7CisJb2sgPSBEaXJl Y3RJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoaW50NGluLCBzLCBJbnZhbGlkT2lkLCAtMSwKKwkJCQkJ CQkJCSAoTm9kZSAqKSAmZXNjb250ZXh0LCBvdXRwdXQpOworCisJcGZyZWUocyk7CisJcmV0dXJu IG9rOworfQorCitzdGF0aWMgYm9vbAorZGVsZXRlX3BnX3N0YXRpc3RpY19leHRfZGF0YShPaWQg c3R4b2lkLCBib29sIGluaGVyaXRlZCkKK3sKKwlSZWxhdGlvbglzZWQgPSB0YWJsZV9vcGVuKFN0 YXRpc3RpY0V4dERhdGFSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlIZWFwVHVwbGUJ b2xkdHVwOworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCisJLyogSXMgdGhlcmUgYWxyZWFkeSBh IHBnX3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhpcyBhdHRyaWJ1dGU/ICovCisJb2xkdHVwID0gU2Vh cmNoU3lzQ2FjaGUyKFNUQVRFWFREQVRBU1RYT0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVt KHN0eG9pZCksCisJCQkJCQkJIEJvb2xHZXREYXR1bShpbmhlcml0ZWQpKTsKKworCWlmIChIZWFw VHVwbGVJc1ZhbGlkKG9sZHR1cCkpCisJeworCQlDYXRhbG9nVHVwbGVEZWxldGUoc2VkLCAmb2xk dHVwLT50X3NlbGYpOworCQlSZWxlYXNlU3lzQ2FjaGUob2xkdHVwKTsKKwkJcmVzdWx0ID0gdHJ1 ZTsKKwl9CisKKwl0YWJsZV9jbG9zZShzZWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK0RhdHVtCitwZ19y ZXN0b3JlX2V4dGVuZGVkX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTE9DQUxfRkNJTkZP KHBvc2l0aW9uYWxfZmNpbmZvLCBOVU1fRVhURU5ERURfU1RBVFNfQVJHUyk7CisJYm9vbAkJcmVz dWx0ID0gdHJ1ZTsKKworCUluaXRGdW5jdGlvbkNhbGxJbmZvRGF0YSgqcG9zaXRpb25hbF9mY2lu Zm8sIE5VTEwsIE5VTV9FWFRFTkRFRF9TVEFUU19BUkdTLAorCQkJCQkJCSBJbnZhbGlkT2lkLCBO VUxMLCBOVUxMKTsKKworCWlmICghc3RhdHNfZmlsbF9mY2luZm9fZnJvbV9hcmdfcGFpcnMoZmNp bmZvLCBwb3NpdGlvbmFsX2ZjaW5mbywgZXh0YXJnaW5mbykpCisJCXJlc3VsdCA9IGZhbHNlOwor CisJaWYgKCFleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShwb3NpdGlvbmFsX2ZjaW5mbykpCisJ CXJlc3VsdCA9IGZhbHNlOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KKworLyoKKyAq IERlbGV0ZSBzdGF0aXN0aWNzIGZvciB0aGUgZ2l2ZW4gc3RhdGlzdGljcyBvYmplY3QuCisgKi8K K0RhdHVtCitwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCWNo YXIJICAgKm5zcG5hbWU7CisJT2lkCQkJbnNwb2lkOworCWNoYXIJICAgKnN0eG5hbWU7CisJYm9v bAkJaW5oZXJpdGVkOworCVJlbGF0aW9uCXBnX3N0ZXh0OworCUhlYXBUdXBsZQl0dXA7CisKKwlG b3JtX3BnX3N0YXRpc3RpY19leHQgc3R4Zm9ybTsKKworCXN0YXRzX2NoZWNrX3JlcXVpcmVkX2Fy ZyhmY2luZm8sIGV4dGFyZ2luZm8sIFNUQVRTQ0hFTUFfQVJHKTsKKwluc3BuYW1lID0gVGV4dERh dHVtR2V0Q1N0cmluZyhQR19HRVRBUkdfREFUVU0oU1RBVFNDSEVNQV9BUkcpKTsKKwlzdGF0c19j aGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBTVEFUTkFNRV9BUkcpOworCXN0 eG5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKFBHX0dFVEFSR19EQVRVTShTVEFUTkFNRV9BUkcp KTsKKwlzdGF0c19jaGVja19yZXF1aXJlZF9hcmcoZmNpbmZvLCBleHRhcmdpbmZvLCBJTkhFUklU RURfQVJHKTsKKwlpbmhlcml0ZWQgPSBQR19HRVRBUkdfTkFNRShJTkhFUklURURfQVJHKTsKKwor CW5zcG9pZCA9IGdldF9uYW1lc3BhY2Vfb2lkKG5zcG5hbWUsIHRydWUpOworCWlmIChuc3BvaWQg PT0gSW52YWxpZE9pZCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coIk5hbWVzcGFjZSBcIiVzXCIgbm90 IGZvdW5kLiIsIHN0eG5hbWUpKSk7CisJCVBHX1JFVFVSTl9WT0lEKCk7CisJfQorCisJaWYgKFJl Y292ZXJ5SW5Qcm9ncmVzcygpKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co InJlY292ZXJ5IGlzIGluIHByb2dyZXNzIiksCisJCQkJIGVycmhpbnQoIlN0YXRpc3RpY3MgY2Fu bm90IGJlIG1vZGlmaWVkIGR1cmluZyByZWNvdmVyeS4iKSkpOworCQlQR19SRVRVUk5fVk9JRCgp OworCX0KKworCXBnX3N0ZXh0ID0gdGFibGVfb3BlbihTdGF0aXN0aWNFeHRSZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwl0dXAgPSBnZXRfcGdfc3RhdGlzdGljX2V4dChwZ19zdGV4dCwg bnNwb2lkLCBzdHhuYW1lKTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCXsKKwkJ dGFibGVfY2xvc2UocGdfc3RleHQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygi RXh0ZW5kZWQgU3RhdGlzdGljcyBPYmplY3QgXCIlc1wiLlwiJXNcIiBub3QgZm91bmQuIiwKKwkJ CQkJCW5zcG5hbWUsIHN0eG5hbWUpKSk7CisJCVBHX1JFVFVSTl9WT0lEKCk7CisJfQorCisJc3R4 Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVCh0dXApOworCisJc3RhdHNf bG9ja19jaGVja19wcml2aWxlZ2VzKHN0eGZvcm0tPnN0eHJlbGlkKTsKKworCWRlbGV0ZV9wZ19z dGF0aXN0aWNfZXh0X2RhdGEoc3R4Zm9ybS0+b2lkLCBpbmhlcml0ZWQpOworCWhlYXBfZnJlZXR1 cGxlKHR1cCk7CisJdGFibGVfY2xvc2UocGdfc3RleHQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv bWN2LmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCmluZGV4IGQ5OGNkYTY5OGQ5Li43 M2Y3OGUwNjA3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYworKysg Yi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL21jdi5jCkBAIC0yMTczLDMgKzIxNzMsMTQ3IEBAIG1j dl9jbGF1c2Vfc2VsZWN0aXZpdHlfb3IoUGxhbm5lckluZm8gKnJvb3QsIFN0YXRpc3RpY0V4dElu Zm8gKnN0YXQsCiAKIAlyZXR1cm4gczsKIH0KKworLyoKKyAgKiBUaGUgTUNWIGlzIGFuIGFycmF5 IG9mIHJlY29yZHMsIGJ1dCB0aGlzIGlzIGV4cGVjdGVkIGFzIDQgc2VwYXJhdGUgYXJyYXlzLgor ICAqIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGEgZ2VuZXJpYyBpbnB1dCBmdW5jdGlvbiBm b3IgcGdfbWN2X2xpc3QKKyAgKiBiZWNhdXNlIHRoZSBtb3N0X2NvbW1vbl92YWx1ZXMgaXMgYSBj b21wb3NpdGUgdHlwZSB3aXRoIGVsZW1lbnQgdHlwZXMKKyAgKiBkZWZpbmVkIGJ5IHRoZSBzcGVj aWZpYyBzdGF0aXN0aWNzIG9iamVjdC4KKyAgKi8KK0RhdHVtCitpbXBvcnRfbWN2bGlzdChIZWFw VHVwbGUgdHVwLCBpbnQgZWxldmVsLCBpbnQgbnVtYXR0cnMsIE9pZCAqYXR0dHlwaWRzLAorCQkJ ICAgaW50MzIgKmF0dHR5cG1vZHMsIE9pZCAqYXR0dHlwY29sbHMsIGludCBuaXRlbXMsCisJCQkg ICBEYXR1bSAqbWN2X2VsZW1zLCBib29sICptY3ZfbnVsbHMsCisJCQkgICBib29sICptY3ZfZWxl bV9udWxscywgZmxvYXQ4ICpmcmVxcywgZmxvYXQ4ICpiYXNlX2ZyZXFzKQoreworCU1DVkxpc3Qg ICAgKm1jdmxpc3Q7CisJYnl0ZWEJICAgKmJ5dGVzOworCisJSGVhcFR1cGxlICAqdmF0dXBsZXM7 CisJVmFjQXR0clN0YXRzICoqdmFzdGF0czsKKworCS8qCisJICogQWxsb2NhdGUgdGhlIE1DViBs aXN0IHN0cnVjdHVyZSwgc2V0IHRoZSBnbG9iYWwgcGFyYW1ldGVycy4KKwkgKi8KKwltY3ZsaXN0 ID0gKE1DVkxpc3QgKikgcGFsbG9jMChvZmZzZXRvZihNQ1ZMaXN0LCBpdGVtcykgKworCQkJCQkJ CQkgIChzaXplb2YoTUNWSXRlbSkgKiBuaXRlbXMpKTsKKworCW1jdmxpc3QtPm1hZ2ljID0gU1RB VFNfTUNWX01BR0lDOworCW1jdmxpc3QtPnR5cGUgPSBTVEFUU19NQ1ZfVFlQRV9CQVNJQzsKKwlt Y3ZsaXN0LT5uZGltZW5zaW9ucyA9IG51bWF0dHJzOworCW1jdmxpc3QtPm5pdGVtcyA9IG5pdGVt czsKKworCS8qIFNldCB0aGUgdmFsdWVzIGZvciB0aGUgMS1EIGFycmF5cyBhbmQgYWxsb2NhdGUg c3BhY2UgZm9yIHRoZSAyLUQgYXJyYXlzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7 IGkrKykKKwl7CisJCU1DVkl0ZW0gICAgKml0ZW0gPSAmbWN2bGlzdC0+aXRlbXNbaV07CisKKwkJ aXRlbS0+ZnJlcXVlbmN5ID0gZnJlcXNbaV07CisJCWl0ZW0tPmJhc2VfZnJlcXVlbmN5ID0gYmFz ZV9mcmVxc1tpXTsKKwkJaXRlbS0+dmFsdWVzID0gKERhdHVtICopIHBhbGxvYzAoc2l6ZW9mKERh dHVtKSAqIG51bWF0dHJzKTsKKwkJaXRlbS0+aXNudWxsID0gKGJvb2wgKikgcGFsbG9jMChzaXpl b2YoYm9vbCkgKiBudW1hdHRycyk7CisJfQorCisJLyogV2FsayB0aHJvdWdoIGVhY2ggZGltZW5z aW9uICovCisJZm9yIChpbnQgaiA9IDA7IGogPCBudW1hdHRyczsgaisrKQorCXsKKwkJRm1ncklu Zm8JZmluZm87CisJCU9pZAkJCWlvcGFyYW07CisJCU9pZAkJCWluZnVuYzsKKwkJaW50CQkJaW5k ZXggPSBqOworCisJCWdldFR5cGVJbnB1dEluZm8oYXR0dHlwaWRzW2pdLCAmaW5mdW5jLCAmaW9w YXJhbSk7CisJCWZtZ3JfaW5mbyhpbmZ1bmMsICZmaW5mbyk7CisKKwkJLyogc3RvcmUgaW5mbyBh Ym91dCBkYXRhIHR5cGUgT0lEcyAqLworCQltY3ZsaXN0LT50eXBlc1tqXSA9IGF0dHR5cGlkc1tq XTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCQl7CisJCQlNQ1ZJdGVt ICAgICppdGVtID0gJm1jdmxpc3QtPml0ZW1zW2ldOworCisJCQkvKiBUaGVzZSBzaG91bGQgYmUg aW4gYWdyZWVtZW50LCBidXQganVzdCB0byBiZSBzYWZlIGNoZWNrIGJvdGggKi8KKwkJCWlmICht Y3ZfZWxlbV9udWxsc1tpbmRleF0gfHwgbWN2X251bGxzW2luZGV4XSkKKwkJCXsKKwkJCQlpdGVt LT52YWx1ZXNbal0gPSAoRGF0dW0pIDA7CisJCQkJaXRlbS0+aXNudWxsW2pdID0gdHJ1ZTsKKwkJ CX0KKwkJCWVsc2UKKwkJCXsKKwkJCQljaGFyCSAgICpzID0gVGV4dERhdHVtR2V0Q1N0cmluZyht Y3ZfZWxlbXNbaW5kZXhdKTsKKwkJCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vy cm9yU2F2ZUNvbnRleHR9OworCisJCQkJaWYgKCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmZpbmZv LCBzLCBpb3BhcmFtLCBhdHR0eXBtb2RzW2pdLAorCQkJCQkJCQkJCSAgIChmbU5vZGVQdHIpICZl c2NvbnRleHQsICZpdGVtLT52YWx1ZXNbal0pKQorCQkJCXsKKwkJCQkJZXJlcG9ydChlbGV2ZWws CisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkJIGVycm1zZygiTUNWIGVsZW1lbWVudCBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQg aW5wdXQgdHlwZS4iLCBzKSkpOworCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCX0KKworCQkJ CXBmcmVlKHMpOworCQkJfQorCisJCQlpbmRleCArPSBudW1hdHRyczsKKwkJfQorCX0KKworCS8q CisJICogVGhlIGZ1bmN0aW9uIHN0YXRleHRfbWN2X3NlcmlhbGl6ZSgpIHJlcXVpcmVzIGFuIGFy cmF5IG9mIHBvaW50ZXJzIHRvCisJICogVmFjQXR0clN0YXRzIHJlY29yZHMsIGJ1dCBvbmx5IGEg ZmV3IGZpZWxkcyB3aXRoaW4gdGhvc2UgcmVjb3JkcyBoYXZlCisJICogdG8gYmUgZmlsbGVkIG91 dC4KKwkgKi8KKwl2YXN0YXRzID0gKFZhY0F0dHJTdGF0cyAqKikgcGFsbG9jMChudW1hdHRycyAq IHNpemVvZihWYWNBdHRyU3RhdHMpKTsKKwl2YXR1cGxlcyA9IChIZWFwVHVwbGUgKikgcGFsbG9j MChudW1hdHRycyAqIHNpemVvZihIZWFwVHVwbGUpKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwg bnVtYXR0cnM7IGkrKykKKwl7CisJCU9pZAkJCXR5cGlkID0gYXR0dHlwaWRzW2ldOworCQlIZWFw VHVwbGUJdHlwdHVwbGU7CisKKwkJdHlwdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFRZUEVP SUQsIE9iamVjdElkR2V0RGF0dW0odHlwaWQpKTsKKworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHlwdHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUg JXUiLCB0eXBpZCk7CisKKwkJdmF0dXBsZXNbaV0gPSB0eXB0dXBsZTsKKworCQl2YXN0YXRzW2ld ID0gcGFsbG9jMChzaXplb2YoVmFjQXR0clN0YXRzKSk7CisKKwkJdmFzdGF0c1tpXS0+YXR0cnR5 cGUgPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVwbGUpOworCQl2YXN0YXRzW2ldLT5h dHRydHlwaWQgPSB0eXBpZDsKKwkJdmFzdGF0c1tpXS0+YXR0cmNvbGxpZCA9IGF0dHR5cGNvbGxz W2ldOworCX0KKworCWJ5dGVzID0gc3RhdGV4dF9tY3Zfc2VyaWFsaXplKG1jdmxpc3QsIHZhc3Rh dHMpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsKKwkJcGZyZWUo dmF0dXBsZXNbaV0pOworCQlwZnJlZSh2YXN0YXRzW2ldKTsKKwl9CisJcGZyZWUoKHZvaWQgKikg dmF0dXBsZXMpOworCXBmcmVlKCh2b2lkICopIHZhc3RhdHMpOworCisJaWYgKGJ5dGVzID09IE5V TEwpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJVbmFibGUgdG8gaW1wb3J0IG1jdiBsaXN0 IikpKTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5p dGVtczsgaSsrKQorCXsKKwkJTUNWSXRlbSAgICAqaXRlbSA9ICZtY3ZsaXN0LT5pdGVtc1tpXTsK KworCQlwZnJlZShpdGVtLT52YWx1ZXMpOworCQlwZnJlZShpdGVtLT5pc251bGwpOworCX0KKwlw ZnJlZShtY3ZsaXN0KTsKKwlwZnJlZShtY3ZfZWxlbXMpOworCXBmcmVlKG1jdl9udWxscyk7CisK KwlyZXR1cm4gUG9pbnRlckdldERhdHVtKGJ5dGVzKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvbXZkaXN0aW5jdC5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tdmRp c3RpbmN0LmMKaW5kZXggZTljMDJhYWE2M2UuLmRmNTZlMzgwOGFhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdGF0aXN0aWNzL212ZGlzdGluY3QuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL212ZGlzdGluY3QuYwpAQCAtNTE2LDYgKzUxNiw3IEBAIHN0YXRpYyBKc29uUGFyc2VFcnJv clR5cGUKIG5kaXN0aW5jdF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9r ZW5UeXBlIHRva2VudHlwZSkKIHsKIAluZGlzdGluY3RQYXJzZVN0YXRlICpwYXJzZSA9IHN0YXRl OworCWludDY0CQluZGlzdGluY3Q7CiAKIAkvKiBpZiB0aGUgZW50aXJlIGpzb24gaXMganVzdCBv bmUgc2NhbGFyLCB0aGF0J3Mgd3JvbmcgKi8KIAlpZiAocGFyc2UtPmZvdW5kX29ubHlfb2JqZWN0 ICE9IHRydWUpCkBAIC01MzAsMTIgKzUzMSwxOSBAQCBuZGlzdGluY3Rfc2NhbGFyKHZvaWQgKnN0 YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAKIAlBc3NlcnQocGFy c2UtPmN1cnJlbnRfaXRlbSAhPSBOVUxMKTsKIAotCXBhcnNlLT5jdXJyZW50X2l0ZW0tPm5kaXN0 aW5jdCA9IGZsb2F0OGluX2ludGVybmFsKHRva2VuLCBOVUxMLCAiZG91YmxlIiwKLQkJCQkJCQkJ CQkJCQkgICB0b2tlbiwgcGFyc2UtPmVzY29udGV4dCk7CisJLyoKKwkgKiBXaGlsZSB0aGUgc3Ry dWN0dXJlIGRpY3RhdGVzIHRoYXQgbmRpc3RpbmN0IGluIGEgZG91YmxlIHByZWNpc2lvbiBmbG9h dGluZworCSAqIHBvaW50LCBpbiBwcmFjdGljZSBpdCBoYXMgYWx3YXlzIGJlZW4gYW4gaW50ZWdl ciwgYW5kIGl0IGlzIG91dHB1dCBhcyBzdWNoLgorCSAqIFRoZXJlZm9yZSwgd2UgZm9sbG93IHVz YWdlIHByZWNlbmRlbnQgb3ZlciB0aGUgYWN0dWFsIHN0b3JhZ2Ugc3RydWN0dXJlLAorCSAqIGFu ZCByZWFkIGl0IGluIGFzIGFuIGludGVnZXIuCisJICovCisJbmRpc3RpbmN0ID0gcGdfc3RydG9p bnQ2NF9zYWZlKHRva2VuLCBwYXJzZS0+ZXNjb250ZXh0KTsKIAogCWlmIChTT0ZUX0VSUk9SX09D Q1VSUkVEKHBhcnNlLT5lc2NvbnRleHQpKQogCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxF RDsKIAorCXBhcnNlLT5jdXJyZW50X2l0ZW0tPm5kaXN0aW5jdCA9IChkb3VibGUpIG5kaXN0aW5j dDsKKwogCS8qIG1hcmsgdXMgZG9uZSB3aXRoIHRoaXMgaXRlbSAqLwogCXBhcnNlLT5jdXJyZW50 X2l0ZW0gPSBOVUxMOwogCXJldHVybiBKU09OX1NVQ0NFU1M7CkBAIC02NTAsNyArNjU4LDcgQEAg ZnJlZV9wZ19uZGlzdGluY3QoTVZORGlzdGluY3QgKm5kaXN0aW5jdCkKICAqIGV4dGVuZGVkIHN0 YXRpc3RpY3Mgb2JqZWN0LgogICoKICAqIFBvc2l0aXZlIGF0dG51bXMgYXJlIGF0dHJpYnV0ZXMg d2hpY2ggbXVzdCBiZSBmb3VuZCBpbiB0aGUgc3R4a2V5cywKLSAqIHdoaWxlIG5lZ2F0aXZlIGF0 dG51bXMgY29ycmVzcG9uZCB0byBhbiBleHByIG51bWJlciwgc28gdGhlIGF0dG51bSAKKyAqIHdo aWxlIG5lZ2F0aXZlIGF0dG51bXMgY29ycmVzcG9uZCB0byBhbiBleHByIG51bWJlciwgc28gdGhl IGF0dG51bQogICogY2FuJ3QgYmUgYmVsb3cgKDAgLSBudW1leHBycykuCiAgKi8KIGJvb2wKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCA0ODllNmExOTc3MS4uZTNl ODJhYTVkZmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKQEAgLTMz NzEsNiArMzM3MSwxOSBAQCBFUlJPUjogIG1hbGZvcm1lZCBwZ19uZGlzdGluY3Q6ICJ7IjYsIC0x IjogMTQsICI2LCAtMiI6IDkxNDMsICItMSwgLTEiOiAxMzQ1NCwgIgogTElORSAxOiBTRUxFQ1Qg J3siNiwgLTEiOiAxNCwgIjYsIC0yIjogOTE0MywgIi0xLCAtMSI6IDEzNDU0LCAiNiwgLTEuLi4K ICAgICAgICAgICAgICAgIF4KIERFVEFJTDogIGF0dG51bSBsaXN0IGR1cGxpY2F0ZSB2YWx1ZSBm b3VuZDogLTEKKy0tIGNhbid0IHVzZSBpbmYvLWluZi9OYU4gZm9yIG5kaXN0aW5jdCB2YWx1ZXMu CitTRUxFQ1QgJ3siNiwgLTEiOiAiSW5mIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0 LCAiNiwgLTEsIC0yIjogMTQ1NDl9Jzo6cGdfbmRpc3RpbmN0OworRVJST1I6ICBpbnZhbGlkIGlu cHV0IHN5bnRheCBmb3IgdHlwZSBiaWdpbnQ6ICJJbmYiCitMSU5FIDE6IFNFTEVDVCAneyI2LCAt MSI6ICJJbmYiLCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LC4uLgorICAgICAg ICAgICAgICAgXgorU0VMRUNUICd7IjYsIC0xIjogIi1JbmYiLCAiNiwgLTIiOiA5MTQzLCAiLTEs IC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CitFUlJPUjog IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGJpZ2ludDogIi1JbmYiCitMSU5FIDE6IFNF TEVDVCAneyI2LCAtMSI6ICItSW5mIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAi Ni4uLgorICAgICAgICAgICAgICAgXgorU0VMRUNUICd7IjYsIC0xIjogIk5hTiIsICI2LCAtMiI6 IDkxNDMsICItMSwgLTIiOiAxMzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5fSc6OnBnX25kaXN0aW5j dDsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgYmlnaW50OiAiTmFOIgor TElORSAxOiBTRUxFQ1QgJ3siNiwgLTEiOiAiTmFOIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6 IDEzNDU0LCAiNiwuLi4KKyAgICAgICAgICAgICAgIF4KIFNFTEVDVCAneyItMiA9PiA2IjogMC4y OTI1MDgsICItMiA9PiAtMSI6IDAuMTEzOTk5LCAiNiwgLTIgPT4gLTEiOiAwLjM0ODQ3OSwgIi0x LCAtMiA9PiA2IjogMC44Mzk2OTF9Jzo6cGdfZGVwZW5kZW5jaWVzOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2RlcGVuZGVuY2llcyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9y dC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQKaW5kZXgg NGRmMjg3ZTU0N2YuLjAxNGM3N2E1YjMyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dGF0c19pbXBvcnQub3V0CkBAIC0xMDIwLDExICsxMDIwLDE1IEBAIFNFTEVDVCAqIEZST00gcGdf Y2F0YWxvZy5wZ19yZXN0b3JlX3JlbGF0aW9uX3N0YXRzKAogIHQKICgxIHJvdykKIAorQ1JFQVRF IFNUQVRJU1RJQ1Mgc3RhdHNfaW1wb3J0LnRlc3Rfc3RhdCBPTiBuYW1lLCBjb21wLCBsb3dlcihh cmFuZ2UpLCBhcnJheV9sZW5ndGgodGFncywxKQorRlJPTSBzdGF0c19pbXBvcnQudGVzdDsKIC0t IEdlbmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUgd2l0aCBkYXRhCiBBTkFMWVpFIHN0YXRzX2lt cG9ydC50ZXN0OwogQ1JFQVRFIFRBQkxFIHN0YXRzX2ltcG9ydC50ZXN0X2Nsb25lICggTElLRSBz dGF0c19pbXBvcnQudGVzdCApCiAgICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OwogQ1JFQVRFIElOREVYIGlzX29kZF9jbG9uZSBPTiBzdGF0c19pbXBvcnQudGVzdF9jbG9uZSgo KGNvbXApLmEgJSAyID0gMSkpOworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfaW1wb3J0LnRlc3Rf c3RhdF9jbG9uZSBPTiBuYW1lLCBjb21wLCBsb3dlcihhcmFuZ2UpLCBhcnJheV9sZW5ndGgodGFn cywxKQorRlJPTSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZTsKIC0tCiAtLSBDb3B5IHN0YXRzIGZy b20gdGVzdCB0byB0ZXN0X2Nsb25lLCBhbmQgaXNfb2RkIHRvIGlzX29kZF9jbG9uZQogLS0KQEAg LTEzNjEsNiArMTM2NSw0NDMgQEAgU0VMRUNUIHBnX2NhdGFsb2cucGdfY2xlYXJfYXR0cmlidXRl X3N0YXRzKAogICAgIGF0dG5hbWUgPT4gJ25vcGUnOjpuYW1lLAogICAgIGluaGVyaXRlZCA9PiBm YWxzZTo6Ym9vbGVhbik7CiBFUlJPUjogIGNvbHVtbiAibm9wZSIgb2YgcmVsYXRpb24gInRlc3Qi IGRvZXMgbm90IGV4aXN0CistLSBzZXQgbl9kaXN0aW5jdCB1c2luZyBhdCBhdHRudW0gKDEpIHRo YXQgaXMgbm90IGluIHRoZSBzdGF0aXN0aWNzIG9iamVjdAorU0VMRUNUCisgICAgcGdfY2F0YWxv Zy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFu YW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9z dGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnbl9kaXN0 aW5jdCcsICd7IjIsIDMiOiA0LCAiMiwgLTEiOiA0LCAiMiwgLTIiOiA0LCAiMywgLTEiOiA0LCAi MywgLTIiOiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0xIjogNCwgIjIsIDMsIC0yIjogNCwgIjIs IC0xLCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMSwgMywgLTEsIC0yIjogNH0nOjpwZ19uZGlz dGluY3QKKyAgICAgICk7CitXQVJOSU5HOiAgcGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBm b3IgdGhpcyBzdGF0aXN0aWNzIG9iamVjdDogMQorIHBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIHNldCBuX2Rp c3RpbmN0IHVzaW5nIGF0IGF0dG51bSB0aGF0IGlzIDAKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cu cGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFt ZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3Rh dF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ25fZGlzdGlu Y3QnLCAneyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIDAiOiA0LCAiMywgLTEiOiA0LCAiMywg LTIiOiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0xIjogNCwgIjIsIDMsIC0yIjogNCwgIjIsIC0x LCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMiwgMywgLTEsIC0yIjogNH0nOjpwZ19uZGlzdGlu Y3QKKyAgICAgICk7CitXQVJOSU5HOiAgcGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBmb3Ig dGhpcyBzdGF0aXN0aWNzIG9iamVjdDogMAorIHBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIHNldCBuX2Rpc3Rp bmN0IHVzaW5nIGF0IGF0dG51bSB0aGF0IGlzIG91dHNpZGUgdGhlIGV4cHJlc3Npb24gYm91bmRz KGJlbG93IC0yKQorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0 YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisg ICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2lu aGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnbl9kaXN0aW5jdCcsICd7IjIsIDMiOiA0LCAiMiwg LTQiOiA0LCAiMiwgLTIiOiA0LCAiMywgLTEiOiA0LCAiMywgLTIiOiA0LCAiLTEsIC0yIjogMywg IjIsIDMsIC0xIjogNCwgIjIsIDMsIC0yIjogNCwgIjIsIC0xLCAtMiI6IDQsICIzLCAtMSwgLTIi OiA0LCAiMSwgMywgLTEsIC0yIjogNH0nOjpwZ19uZGlzdGluY3QKKyAgICAgICk7CitXQVJOSU5H OiAgcGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBmb3IgdGhpcyBzdGF0aXN0aWNzIG9iamVj dDogLTQKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorCistLSBvaworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19y ZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywg J3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Ns b25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnbl9kaXN0aW5jdCcs ICd7IjIsIDMiOiA0LCAiMiwgLTEiOiA0LCAiMiwgLTIiOiA0LCAiMywgLTEiOiA0LCAiMywgLTIi OiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0xIjogNCwgIjIsIDMsIC0yIjogNCwgIjIsIC0xLCAt MiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMiwgMywgLTEsIC0yIjogNH0nOjpwZ19uZGlzdGluY3QK KyAgICAgICk7CisgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUCisgICAgZS5uX2Rpc3RpbmN0LCBlLmRl cGVuZGVuY2llcywgZS5tb3N0X2NvbW1vbl92YWxzLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywK KyAgICBlLm1vc3RfY29tbW9uX2ZyZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00g cGdfc3RhdHNfZXh0IEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRz X2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQg ZS5pbmhlcml0ZWQgPSBmYWxzZQorXGd4CistWyBSRUNPUkQgMSBdLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCituX2Rpc3RpbmN0ICAgICAgICAgICAg IHwgeyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMsIC0y IjogNCwgIi0xLCAtMiI6IDMsICIyLCAzLCAtMSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAtMSwg LTIiOiA0LCAiMywgLTEsIC0yIjogNCwgIjIsIDMsIC0xLCAtMiI6IDR9CitkZXBlbmRlbmNpZXMg ICAgICAgICAgIHwgCittb3N0X2NvbW1vbl92YWxzICAgICAgIHwgCittb3N0X2NvbW1vbl92YWxf bnVsbHMgIHwgCittb3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgCittb3N0X2NvbW1vbl9iYXNlX2Zy ZXFzIHwgCisKKy0tIHNldCBkZXBlbmRlbmNpZXMgdXNpbmcgYXQgYXR0bnVtICgxKSB0aGF0IGlz IG5vdCBpbiB0aGUgc3RhdGlzdGljcyBvYmplY3QKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdf cmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScs ICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9j bG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2RlcGVuZGVuY2ll cycsICd7IjIgPT4gMSI6IDEuMDAwMDAwLCAiMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6 IDEuMDAwMDAwLCAiMyA9PiAyIjogMS4wMDAwMDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+ IC0yIjogMS4wMDAwMDAsICItMSA9PiAyIjogMC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAs ICItMSA9PiAtMiI6IDEuMDAwMDAwLCAiLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAu NTAwMDAwLCAiLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIs IDMgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0xID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0y IjogMS4wMDAwMDAsICIyLCAtMiA9PiAzIjogMS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAw MDAwLCAiMywgLTEgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMs IC0yID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4g MiI6IDAuNTAwMDAwLCAiLTEsIC0yID0+IDMiOiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjog MS4wMDAwMDAsICIyLCAzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAx LjAwMDAwMCwgIjMsIC0xLCAtMiA9PiAyIjogMS4wMDAwMDB9Jzo6cGdfZGVwZW5kZW5jaWVzCisg ICAgICApOworV0FSTklORzogIHBnX2RlcGVuZGVuY2llczogaW52YWxpZCBhdHRudW0gZm9yIHRo aXMgc3RhdGlzdGljcyBvYmplY3Q6IDEKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBzZXQgZGVwZW5kZW5j aWVzIHVzaW5nIGF0IGF0dG51bSB0aGF0IGlzIDAKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdf cmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScs ICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9j bG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2RlcGVuZGVuY2ll cycsICd7IjIgPT4gMyI6IDEuMDAwMDAwLCAiMCA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6 IDEuMDAwMDAwLCAiMyA9PiAyIjogMS4wMDAwMDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+ IC0yIjogMS4wMDAwMDAsICItMSA9PiAyIjogMC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAs ICItMSA9PiAtMiI6IDEuMDAwMDAwLCAiLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAu NTAwMDAwLCAiLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIs IDMgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0xID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0y IjogMS4wMDAwMDAsICIyLCAtMiA9PiAzIjogMS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAw MDAwLCAiMywgLTEgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMs IC0yID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4g MiI6IDAuNTAwMDAwLCAiLTEsIC0yID0+IDMiOiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjog MS4wMDAwMDAsICIyLCAzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAx LjAwMDAwMCwgIjMsIC0xLCAtMiA9PiAyIjogMS4wMDAwMDB9Jzo6cGdfZGVwZW5kZW5jaWVzCisg ICAgICApOworV0FSTklORzogIHBnX2RlcGVuZGVuY2llczogaW52YWxpZCBhdHRudW0gZm9yIHRo aXMgc3RhdGlzdGljcyBvYmplY3Q6IDAKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCistLSBzZXQgZGVwZW5kZW5j aWVzIHVzaW5nIGF0IGF0dG51bSB0aGF0IGlzIG91dHNpZGUgdGhlIGV4cHJlc3Npb24gYm91bmRz KGJlbG93IC0yKQorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0 YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisg ICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2lu aGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnZGVwZW5kZW5jaWVzJywgJ3siMiA9PiAzIjogMS4w MDAwMDAsICIyID0+IC0zIjogMS4wMDAwMDAsICIyID0+IC0yIjogMS4wMDAwMDAsICIzID0+IDIi OiAxLjAwMDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4gLTIiOiAxLjAwMDAwMCwgIi0x ID0+IDIiOiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwgIi0xID0+IC0yIjogMS4wMDAw MDAsICItMiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41MDAwMDAsICItMiA9PiAtMSI6 IDEuMDAwMDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMiI6IDEuMDAwMDAw LCAiMiwgLTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0y ID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAwMDAsICIzLCAtMSA9PiAyIjog MS4wMDAwMDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gMiI6IDEuMDAwMDAw LCAiMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAyIjogMC41MDAwMDAsICItMSwg LTIgPT4gMyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIDMsIC0y ID0+IC0xIjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEuMDAwMDAwLCAiMywgLTEsIC0y ID0+IDIiOiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRlbmNpZXMKKyAgICAgICk7CitXQVJOSU5HOiAg cGdfZGVwZW5kZW5jaWVzOiBpbnZhbGlkIGF0dG51bSBmb3IgdGhpcyBzdGF0aXN0aWNzIG9iamVj dDogLTMKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorCistLSBvaworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19y ZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywg J3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Ns b25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnZGVwZW5kZW5jaWVz JywgJ3siMiA9PiAzIjogMS4wMDAwMDAsICIyID0+IC0xIjogMS4wMDAwMDAsICIyID0+IC0yIjog MS4wMDAwMDAsICIzID0+IDIiOiAxLjAwMDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4g LTIiOiAxLjAwMDAwMCwgIi0xID0+IDIiOiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwg Ii0xID0+IC0yIjogMS4wMDAwMDAsICItMiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41 MDAwMDAsICItMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwg MyA9PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIi OiAxLjAwMDAwMCwgIjIsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAw MDAsICIzLCAtMSA9PiAyIjogMS4wMDAwMDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywg LTIgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAy IjogMC41MDAwMDAsICItMSwgLTIgPT4gMyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAx LjAwMDAwMCwgIjIsIDMsIC0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEu MDAwMDAwLCAiMywgLTEsIC0yID0+IDIiOiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRlbmNpZXMKKyAg ICAgICk7CisgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUCisgICAgZS5uX2Rpc3RpbmN0LCBlLmRlcGVu ZGVuY2llcywgZS5tb3N0X2NvbW1vbl92YWxzLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAg ICBlLm1vc3RfY29tbW9uX2ZyZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdf c3RhdHNfZXh0IEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2lt cG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5p bmhlcml0ZWQgPSBmYWxzZQorXGd4CistWyBSRUNPUkQgMSBdLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbl9kaXN0aW5jdCAgICAgICAgICAgICB8IHsiMiwgMyI6 IDQsICIyLCAtMSI6IDQsICIyLCAtMiI6IDQsICIzLCAtMSI6IDQsICIzLCAtMiI6IDQsICItMSwg LTIiOiAzLCAiMiwgMywgLTEiOiA0LCAiMiwgMywgLTIiOiA0LCAiMiwgLTEsIC0yIjogNCwgIjMs IC0xLCAtMiI6IDQsICIyLCAzLCAtMSwgLTIiOiA0fQorZGVwZW5kZW5jaWVzICAgICAgICAgICB8 IHsiMiA9PiAzIjogMS4wMDAwMDAsICIyID0+IC0xIjogMS4wMDAwMDAsICIyID0+IC0yIjogMS4w MDAwMDAsICIzID0+IDIiOiAxLjAwMDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4gLTIi OiAxLjAwMDAwMCwgIi0xID0+IDIiOiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwgIi0x ID0+IC0yIjogMS4wMDAwMDAsICItMiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41MDAw MDAsICItMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9 PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIiOiAx LjAwMDAwMCwgIjIsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAwMDAs ICIzLCAtMSA9PiAyIjogMS4wMDAwMDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywgLTIg PT4gMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAyIjog MC41MDAwMDAsICItMSwgLTIgPT4gMyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAxLjAw MDAwMCwgIjIsIDMsIC0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEuMDAw MDAwLCAiMywgLTEsIC0yID0+IDIiOiAxLjAwMDAwMH0KK21vc3RfY29tbW9uX3ZhbHMgICAgICAg fCAKK21vc3RfY29tbW9uX3ZhbF9udWxscyAgfCAKK21vc3RfY29tbW9uX2ZyZXFzICAgICAgfCAK K21vc3RfY29tbW9uX2Jhc2VfZnJlcXMgfCAKKworLS0gaWYgYW55IG9uZSBtY3YgcGFyYW0gc3Bl Y2lmaWVkLCBhbGwgZm91ciBtdXN0IGJlIHNwZWNpZmllZCAocGFydCAxKQorU0VMRUNUCisgICAg cGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGlj c19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUn LCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAg ICAnbW9zdF9jb21tb25fdmFscycsICd7e2ZvdXIsTlVMTCwwLE5VTEx9LHtvbmUsIigxLDEuMSxP TkUsMDEtMDEtMjAwMSxcIntcIlwieGtleVwiXCI6IFwiXCJ4dmFsXCJcIn1cIikiLDEsMn0se3Ry ZSwiKDMsMy4zLFRSRSwwMy0wMy0yMDAzLCkiLC0xLDN9LHt0d28sIigyLDIuMixUV08sMDItMDIt MjAwMixcIlt0cnVlLCA0LCBcIlwic2l4XCJcIl1cIikiLDEsMn19Jzo6dGV4dFtdCisgICAgICAp OworV0FSTklORzogIE1DViBwYXJhbWV0ZXJzICJtb3N0X2NvbW1vbl92YWxzIiwgIm1vc3RfY29t bW9uX3ZhbF9udWxscyIsICJtb3N0X2NvbW1vbl9mcmVxcyIsIGFuZCAibW9zdF9jb21tb25fYmFz ZV9mcmVxcyIgbXVzdCBiZSBhbGwgc3BlY2lmaWVkIGlmIGFueSBhcmUgc3BlY2lmaWVkCisgcGdf cmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGYK KygxIHJvdykKKworLS0gaWYgYW55IG9uZSBtY3YgcGFyYW0gc3BlY2lmaWVkLCBhbGwgZm91ciBt dXN0IGJlIHNwZWNpZmllZCAocGFydCAyKQorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0 b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0 YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25l JywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnbW9zdF9jb21tb25fdmFs X251bGxzJywgJ3t7Zix0LGYsdH0se2YsZixmLGZ9LHtmLGYsZixmfSx7ZixmLGYsZn19Jzo6Ym9v bGVhbltdCisgICAgICApOworV0FSTklORzogIE1DViBwYXJhbWV0ZXJzICJtb3N0X2NvbW1vbl92 YWxzIiwgIm1vc3RfY29tbW9uX3ZhbF9udWxscyIsICJtb3N0X2NvbW1vbl9mcmVxcyIsIGFuZCAi bW9zdF9jb21tb25fYmFzZV9mcmVxcyIgbXVzdCBiZSBhbGwgc3BlY2lmaWVkIGlmIGFueSBhcmUg c3BlY2lmaWVkCisgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gaWYgYW55IG9uZSBtY3YgcGFyYW0gc3BlY2lm aWVkLCBhbGwgZm91ciBtdXN0IGJlIHNwZWNpZmllZCAocGFydCAzKQorU0VMRUNUCisgICAgcGdf Y2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19z Y2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAn dGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAn bW9zdF9jb21tb25fZnJlcXMnLCAnezAuMjUsMC4yNSwwLjI1LDAuMjV9Jzo6ZG91YmxlIHByZWNp c2lvbltdCisgICAgICApOworV0FSTklORzogIE1DViBwYXJhbWV0ZXJzICJtb3N0X2NvbW1vbl92 YWxzIiwgIm1vc3RfY29tbW9uX3ZhbF9udWxscyIsICJtb3N0X2NvbW1vbl9mcmVxcyIsIGFuZCAi bW9zdF9jb21tb25fYmFzZV9mcmVxcyIgbXVzdCBiZSBhbGwgc3BlY2lmaWVkIGlmIGFueSBhcmUg c3BlY2lmaWVkCisgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIGYKKygxIHJvdykKKworLS0gaWYgYW55IG9uZSBtY3YgcGFyYW0gc3BlY2lm aWVkLCBhbGwgZm91ciBtdXN0IGJlIHNwZWNpZmllZCAocGFydCA0KQorU0VMRUNUCisgICAgcGdf Y2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19z Y2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAn dGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAn bW9zdF9jb21tb25fYmFzZV9mcmVxcycsICd7MC4wMDM5MDYyNSwwLjAxNTYyNSwwLjAwMzkwNjI1 LDAuMDE1NjI1fSc6OmRvdWJsZSBwcmVjaXNpb25bXQorICAgICAgKTsKK1dBUk5JTkc6ICBNQ1Yg cGFyYW1ldGVycyAibW9zdF9jb21tb25fdmFscyIsICJtb3N0X2NvbW1vbl92YWxfbnVsbHMiLCAi bW9zdF9jb21tb25fZnJlcXMiLCBhbmQgIm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMiIG11c3QgYmUg YWxsIHNwZWNpZmllZCBpZiBhbnkgYXJlIHNwZWNpZmllZAorIHBnX3Jlc3RvcmVfZXh0ZW5kZWRf c3RhdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKKy0tIG9r CitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAg ICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0 YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywg ZmFsc2UsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxzJywgJ3t7Zm91cixOVUxMLDAsTlVMTH0s e29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAxLFwie1wiXCJ4a2V5XCJcIjogXCJcInh2YWxcIlwi fVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJFLDAzLTAzLTIwMDMsKSIsLTEsM30se3R3bywiKDIs Mi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUsIDQsIFwiXCJzaXhcIlwiXVwiKSIsMSwyfX0nOjp0 ZXh0W10sCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxfbnVsbHMnLCAne3tmLHQsZix0fSx7Zixm LGYsZn0se2YsZixmLGZ9LHtmLGYsZixmfX0nOjpib29sZWFuW10sCisgICAgICAgICdtb3N0X2Nv bW1vbl9mcmVxcycsICd7MC4yNSwwLjI1LDAuMjUsMC4yNX0nOjpkb3VibGUgcHJlY2lzaW9uW10s CisgICAgICAgICdtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzJywgJ3swLjAwMzkwNjI1LDAuMDE1NjI1 LDAuMDAzOTA2MjUsMC4wMTU2MjV9Jzo6ZG91YmxlIHByZWNpc2lvbltdCisgICAgICApOworIHBn X3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCisKK1NFTEVDVAorICAgIGUubl9kaXN0aW5jdCwgZS5kZXBlbmRlbmNpZXMsIGUu bW9zdF9jb21tb25fdmFscywgZS5tb3N0X2NvbW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0X2Nv bW1vbl9mcmVxcywgZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBB UyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQg ZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0g ZmFsc2UKK1xneAorLVsgUkVDT1JEIDEgXS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK25fZGlzdGluY3QgICAgICAgICAgICAgfCB7IjIsIDMiOiA0LCAiMiwgLTEi OiA0LCAiMiwgLTIiOiA0LCAiMywgLTEiOiA0LCAiMywgLTIiOiA0LCAiLTEsIC0yIjogMywgIjIs IDMsIC0xIjogNCwgIjIsIDMsIC0yIjogNCwgIjIsIC0xLCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0 LCAiMiwgMywgLTEsIC0yIjogNH0KK2RlcGVuZGVuY2llcyAgICAgICAgICAgfCB7IjIgPT4gMyI6 IDEuMDAwMDAwLCAiMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6IDEuMDAwMDAwLCAiMyA9 PiAyIjogMS4wMDAwMDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+IC0yIjogMS4wMDAwMDAs ICItMSA9PiAyIjogMC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAsICItMSA9PiAtMiI6IDEu MDAwMDAwLCAiLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAuNTAwMDAwLCAiLTIgPT4g LTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTIiOiAxLjAw MDAwMCwgIjIsIC0xID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0yIjogMS4wMDAwMDAsICIy LCAtMiA9PiAzIjogMS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMywgLTEgPT4g MiI6IDEuMDAwMDAwLCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IDIiOiAxLjAw MDAwMCwgIjMsIC0yID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4gMiI6IDAuNTAwMDAwLCAi LTEsIC0yID0+IDMiOiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAz LCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjMsIC0x LCAtMiA9PiAyIjogMS4wMDAwMDB9Cittb3N0X2NvbW1vbl92YWxzICAgICAgIHwge3tmb3VyLE5V TEwsMCxOVUxMfSx7b25lLCIoMSwxLjEsT05FLDAxLTAxLTIwMDEsXCJ7XCJcInhrZXlcIlwiOiBc IlwieHZhbFwiXCJ9XCIpIiwxLDJ9LHt0cmUsIigzLDMuMyxUUkUsMDMtMDMtMjAwMywpIiwtMSwz fSx7dHdvLCIoMiwyLjIsVFdPLDAyLTAyLTIwMDIsXCJbdHJ1ZSwgNCwgXCJcInNpeFwiXCJdXCIp IiwxLDJ9fQorbW9zdF9jb21tb25fdmFsX251bGxzICB8IHt7Zix0LGYsdH0se2YsZixmLGZ9LHtm LGYsZixmfSx7ZixmLGYsZn19Cittb3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgezAuMjUsMC4yNSww LjI1LDAuMjV9Cittb3N0X2NvbW1vbl9iYXNlX2ZyZXFzIHwgezAuMDAzOTA2MjUsMC4wMTU2MjUs MC4wMDM5MDYyNSwwLjAxNTYyNX0KKworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3Jl X2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRz X2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywK KyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnZXhwcnMnLCAne3swLDQsLTAu NzUsInsxfSIsInswLjV9Iiwiey0xLDB9IiwtMC42LE5VTEwsTlVMTCxOVUxMfSx7MC4yNSw0LC0w LjUsInsyfSIsInswLjV9IixOVUxMLDEsTlVMTCxOVUxMLE5VTEx9fSc6OnRleHRbXQorICAgICAg KTsKKyBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QKKyAgICBlLmluaGVyaXRlZCwgZS5udWxsX2ZyYWMs IGUuYXZnX3dpZHRoLCBlLm5fZGlzdGluY3QsIGUubW9zdF9jb21tb25fdmFscywKKyAgICBlLm1v c3RfY29tbW9uX2ZyZXFzLCBlLmhpc3RvZ3JhbV9ib3VuZHMsIGUuY29ycmVsYXRpb24sCisgICAg ZS5tb3N0X2NvbW1vbl9lbGVtcywgZS5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBlLmVsZW1fY291 bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBlCitXSEVSRSBlLnN0YXRp c3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUg PSAndGVzdF9zdGF0X2Nsb25lJworYW5kIGUuaW5oZXJpdGVkID0gZmFsc2UKK1xneAorLVsgUkVD T1JEIDEgXS0tLS0tLS0tLS0rLS0tLS0tLQoraW5oZXJpdGVkICAgICAgICAgICAgICB8IGYKK251 bGxfZnJhYyAgICAgICAgICAgICAgfCAwCithdmdfd2lkdGggICAgICAgICAgICAgIHwgNAorbl9k aXN0aW5jdCAgICAgICAgICAgICB8IC0wLjc1Cittb3N0X2NvbW1vbl92YWxzICAgICAgIHwgezF9 Cittb3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgezAuNX0KK2hpc3RvZ3JhbV9ib3VuZHMgICAgICAg fCB7LTEsMH0KK2NvcnJlbGF0aW9uICAgICAgICAgICAgfCAtMC42Cittb3N0X2NvbW1vbl9lbGVt cyAgICAgIHwgCittb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIHwgCitlbGVtX2NvdW50X2hpc3RvZ3Jh bSAgIHwgCistWyBSRUNPUkQgMiBdLS0tLS0tLS0tLSstLS0tLS0tCitpbmhlcml0ZWQgICAgICAg ICAgICAgIHwgZgorbnVsbF9mcmFjICAgICAgICAgICAgICB8IDAuMjUKK2F2Z193aWR0aCAgICAg ICAgICAgICAgfCA0CituX2Rpc3RpbmN0ICAgICAgICAgICAgIHwgLTAuNQorbW9zdF9jb21tb25f dmFscyAgICAgICB8IHsyfQorbW9zdF9jb21tb25fZnJlcXMgICAgICB8IHswLjV9CitoaXN0b2dy YW1fYm91bmRzICAgICAgIHwgCitjb3JyZWxhdGlvbiAgICAgICAgICAgIHwgMQorbW9zdF9jb21t b25fZWxlbXMgICAgICB8IAorbW9zdF9jb21tb25fZWxlbV9mcmVxcyB8IAorZWxlbV9jb3VudF9o aXN0b2dyYW0gICB8IAorCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX2NsZWFyX2V4dGVuZGVk X3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCcs CisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAg aW5oZXJpdGVkID0+IGZhbHNlKTsKKyBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VMRUNUIENPVU5UKCopCitGUk9NIHBn X3N0YXRzX2V4dCBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19p bXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUu aW5oZXJpdGVkID0gZmFsc2U7CisgY291bnQgCistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKwor U0VMRUNUIENPVU5UKCopCitGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBlCitXSEVSRSBlLnN0 YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25h bWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFsc2U7CisgY291bnQg CistLS0tLS0tCisgICAgIDAKKygxIHJvdykKKworLS0KKy0tIENvcHkgc3RhdHMgZnJvbSB0ZXN0 X3N0YXQgdG8gdGVzdF9zdGF0X2Nsb25lCistLQorU0VMRUNUCisgICAgZS5zdGF0aXN0aWNzX25h bWUsCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAn c3RhdGlzdGljc19zY2hlbWFuYW1lJywgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWU6OnRleHQsCisg ICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2lu aGVyaXRlZCcsIGUuaW5oZXJpdGVkLAorICAgICAgICAnbl9kaXN0aW5jdCcsIGUubl9kaXN0aW5j dCwKKyAgICAgICAgJ2RlcGVuZGVuY2llcycsIGUuZGVwZW5kZW5jaWVzLAorICAgICAgICAnbW9z dF9jb21tb25fdmFscycsIGUubW9zdF9jb21tb25fdmFscywKKyAgICAgICAgJ21vc3RfY29tbW9u X3ZhbF9udWxscycsIGUubW9zdF9jb21tb25fdmFsX251bGxzLAorICAgICAgICAnbW9zdF9jb21t b25fZnJlcXMnLCBlLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgICAnbW9zdF9jb21tb25fYmFz ZV9mcmVxcycsIGUubW9zdF9jb21tb25fYmFzZV9mcmVxcywKKyAgICAgICAgJ2V4cHJzJywgeC5l eHBycworICAgICkKK0ZST00gcGdfc3RhdHNfZXh0IEFTIGUKK0NST1NTIEpPSU4gTEFURVJBTCAo CisgICAgU0VMRUNUCisgICAgICAgIGFycmF5X2FnZygKKyAgICAgICAgICAgIEFSUkFZW2VlLm51 bGxfZnJhYzo6dGV4dCwgZWUuYXZnX3dpZHRoOjp0ZXh0LAorICAgICAgICAgICAgICAgICAgZWUu bl9kaXN0aW5jdDo6dGV4dCwgZWUubW9zdF9jb21tb25fdmFsczo6dGV4dCwKKyAgICAgICAgICAg ICAgICAgIGVlLm1vc3RfY29tbW9uX2ZyZXFzOjp0ZXh0LCBlZS5oaXN0b2dyYW1fYm91bmRzOjp0 ZXh0LAorICAgICAgICAgICAgICAgICAgZWUuY29ycmVsYXRpb246OnRleHQsIGVlLm1vc3RfY29t bW9uX2VsZW1zOjp0ZXh0LAorICAgICAgICAgICAgICAgICAgZWUubW9zdF9jb21tb25fZWxlbV9m cmVxczo6dGV4dCwKKyAgICAgICAgICAgICAgICAgIGVlLmVsZW1fY291bnRfaGlzdG9ncmFtOjp0 ZXh0XSkKKyAgICBGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBlZQorICAgIFdIRVJFIGVlLnN0 YXRpc3RpY3Nfc2NoZW1hbmFtZSA9IGUuc3RhdGlzdGljc19zY2hlbWFuYW1lCisgICAgQU5EIGVl LnN0YXRpc3RpY3NfbmFtZSA9IGUuc3RhdGlzdGljc19uYW1lCisgICAgQU5EIGVlLmluaGVyaXRl ZCA9IGUuaW5oZXJpdGVkCisgICAgKSBBUyB4KGV4cHJzKQorV0hFUkUgZS5zdGF0aXN0aWNzX3Nj aGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIGUuc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rf c3RhdCc7Cisgc3RhdGlzdGljc19uYW1lIHwgcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyAKKy0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHRlc3Rfc3RhdCAg ICAgICB8IHQKKygxIHJvdykKKworU0VMRUNUIG8uaW5oZXJpdGVkLAorICAgICAgIG8ubl9kaXN0 aW5jdCwgby5kZXBlbmRlbmNpZXMsIG8ubW9zdF9jb21tb25fdmFscywKKyAgICAgICBvLm1vc3Rf Y29tbW9uX3ZhbF9udWxscywgby5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBvLm1vc3RfY29t bW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIG8KK1dIRVJFIG8uc3RhdGlzdGlj c19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBvLnN0YXRpc3RpY3NfbmFtZSA9ICd0 ZXN0X3N0YXQnCitFWENFUFQKK1NFTEVDVCBuLmluaGVyaXRlZCwKKyAgICAgICBuLm5fZGlzdGlu Y3QsIG4uZGVwZW5kZW5jaWVzLCBuLm1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgbi5tb3N0X2Nv bW1vbl92YWxfbnVsbHMsIG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5tb3N0X2NvbW1v bl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nf c2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgbi5zdGF0aXN0aWNzX25hbWUgPSAndGVz dF9zdGF0X2Nsb25lJzsKKyBpbmhlcml0ZWQgfCBuX2Rpc3RpbmN0IHwgZGVwZW5kZW5jaWVzIHwg bW9zdF9jb21tb25fdmFscyB8IG1vc3RfY29tbW9uX3ZhbF9udWxscyB8IG1vc3RfY29tbW9uX2Zy ZXFzIHwgbW9zdF9jb21tb25fYmFzZV9mcmVxcyAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisK K1NFTEVDVCBuLmluaGVyaXRlZCwKKyAgICAgICBuLm5fZGlzdGluY3QsIG4uZGVwZW5kZW5jaWVz LCBuLm1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxfbnVsbHMsIG4u bW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9N IHBnX3N0YXRzX2V4dCBBUyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0 c19pbXBvcnQnCitBTkQgbi5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworRVhD RVBUCitTRUxFQ1Qgby5pbmhlcml0ZWQsCisgICAgICAgby5uX2Rpc3RpbmN0LCBvLmRlcGVuZGVu Y2llcywgby5tb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9jb21tb25fdmFsX251bGxz LCBvLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG8ubW9zdF9jb21tb25fYmFzZV9mcmVxcwor RlJPTSBwZ19zdGF0c19leHQgQVMgbworV0hFUkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAn c3RhdHNfaW1wb3J0JworQU5EIG8uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdCc7CisgaW5o ZXJpdGVkIHwgbl9kaXN0aW5jdCB8IGRlcGVuZGVuY2llcyB8IG1vc3RfY29tbW9uX3ZhbHMgfCBt b3N0X2NvbW1vbl92YWxfbnVsbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8IG1vc3RfY29tbW9uX2Jh c2VfZnJlcXMgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1Qgby5pbmhlcml0ZWQs CisgICAgICAgby5udWxsX2ZyYWMsIG8uYXZnX3dpZHRoLCBvLm5fZGlzdGluY3QsCisgICAgICAg by5tb3N0X2NvbW1vbl92YWxzOjp0ZXh0IEFTIG1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgby5t b3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBvLmhpc3RvZ3JhbV9ib3VuZHM6OnRleHQgQVMgaGlz dG9ncmFtX2JvdW5kcywKKyAgICAgICBvLmNvcnJlbGF0aW9uLAorICAgICAgIG8ubW9zdF9jb21t b25fZWxlbXM6OnRleHQgQVMgbW9zdF9jb21tb25fZWxlbXMsCisgICAgICAgby5tb3N0X2NvbW1v bl9lbGVtX2ZyZXFzLCBvLmVsZW1fY291bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0YXRzX2V4dF9l eHBycyBBUyBvCitXSEVSRSBvLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQn CitBTkQgby5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JworRVhDRVBUCitTRUxFQ1Qgbi5p bmhlcml0ZWQsCisgICAgICAgbi5udWxsX2ZyYWMsIG4uYXZnX3dpZHRoLCBuLm5fZGlzdGluY3Qs CisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxzOjp0ZXh0IEFTIG1vc3RfY29tbW9uX3ZhbHMsCisg ICAgICAgbi5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBuLmhpc3RvZ3JhbV9ib3VuZHM6OnRl eHQgQVMgaGlzdG9ncmFtX2JvdW5kcywKKyAgICAgICBuLmNvcnJlbGF0aW9uLAorICAgICAgIG4u bW9zdF9jb21tb25fZWxlbXM6OnRleHQgQVMgbW9zdF9jb21tb25fZWxlbXMsCisgICAgICAgbi5t b3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBuLmVsZW1fY291bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0 YXRzX2V4dF9leHBycyBBUyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0 c19pbXBvcnQnCitBTkQgbi5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJzsKKyBp bmhlcml0ZWQgfCBudWxsX2ZyYWMgfCBhdmdfd2lkdGggfCBuX2Rpc3RpbmN0IHwgbW9zdF9jb21t b25fdmFscyB8IG1vc3RfY29tbW9uX2ZyZXFzIHwgaGlzdG9ncmFtX2JvdW5kcyB8IGNvcnJlbGF0 aW9uIHwgbW9zdF9jb21tb25fZWxlbXMgfCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIHwgZWxlbV9j b3VudF9oaXN0b2dyYW0gCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworU0VMRUNUIG4u aW5oZXJpdGVkLAorICAgICAgIG4ubnVsbF9mcmFjLCBuLmF2Z193aWR0aCwgbi5uX2Rpc3RpbmN0 LAorICAgICAgIG4ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAor ICAgICAgIG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5oaXN0b2dyYW1fYm91bmRzOjp0 ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgbi5jb3JyZWxhdGlvbiwKKyAgICAgICBu Lm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG4u bW9zdF9jb21tb25fZWxlbV9mcmVxcywgbi5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19z dGF0c19leHRfZXhwcnMgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3Rh dHNfaW1wb3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScKK0VY Q0VQVAorU0VMRUNUIG8uaW5oZXJpdGVkLAorICAgICAgIG8ubnVsbF9mcmFjLCBvLmF2Z193aWR0 aCwgby5uX2Rpc3RpbmN0LAorICAgICAgIG8ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0 X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgby5oaXN0 b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgby5jb3JyZWxh dGlvbiwKKyAgICAgICBvLm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2Vs ZW1zLAorICAgICAgIG8ubW9zdF9jb21tb25fZWxlbV9mcmVxcywgby5lbGVtX2NvdW50X2hpc3Rv Z3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgbworV0hFUkUgby5zdGF0aXN0aWNzX3Nj aGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG8uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rf c3RhdCc7CisgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwgYXZnX3dpZHRoIHwgbl9kaXN0aW5jdCB8 IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8IGhpc3RvZ3JhbV9ib3VuZHMg fCBjb3JyZWxhdGlvbiB8IG1vc3RfY29tbW9uX2VsZW1zIHwgbW9zdF9jb21tb25fZWxlbV9mcmVx cyB8IGVsZW1fY291bnRfaGlzdG9ncmFtIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisK IERST1AgU0NIRU1BIHN0YXRzX2ltcG9ydCBDQVNDQURFOwogTk9USUNFOiAgZHJvcCBjYXNjYWRl cyB0byA2IG90aGVyIG9iamVjdHMKIERFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdHlwZSBzdGF0 c19pbXBvcnQuY29tcGxleF90eXBlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dGF0c19leHQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAppbmRleCBk YTVjMTFhZWRkNy4uNmMyNDlmM2QwMGMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N0YXRzX2V4dC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbApA QCAtMTcwNCw2ICsxNzA0LDEwIEBAIFNFTEVDVCBzdGF0aXN0aWNzX25hbWUsIG1vc3RfY29tbW9u X3ZhbHMgRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgeAogU0VMRUNUICd7IjYsIC0xIjogMTQsICI2 LCAtMiI6IDkxNDMsICItMSwgLTIiOiAxMzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5fSc6OnBnX25k aXN0aW5jdDsKIC0tIGNhbid0IGhhdmUgZHVwbGljYXRlcyBhdHRudW1zIGluIGxpc3QKIFNFTEVD VCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0xIjogMTM0NTQsICI2LCAtMSwg LTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CistLSBjYW4ndCB1c2UgaW5mLy1pbmYvTmFOIGZv ciBuZGlzdGluY3QgdmFsdWVzLgorU0VMRUNUICd7IjYsIC0xIjogIkluZiIsICI2LCAtMiI6IDkx NDMsICItMSwgLTIiOiAxMzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5fSc6OnBnX25kaXN0aW5jdDsK K1NFTEVDVCAneyI2LCAtMSI6ICItSW5mIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0 LCAiNiwgLTEsIC0yIjogMTQ1NDl9Jzo6cGdfbmRpc3RpbmN0OworU0VMRUNUICd7IjYsIC0xIjog Ik5hTiIsICI2LCAtMiI6IDkxNDMsICItMSwgLTIiOiAxMzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5 fSc6OnBnX25kaXN0aW5jdDsKIAogU0VMRUNUICd7Ii0yID0+IDYiOiAwLjI5MjUwOCwgIi0yID0+ IC0xIjogMC4xMTM5OTksICI2LCAtMiA9PiAtMSI6IDAuMzQ4NDc5LCAiLTEsIC0yID0+IDYiOiAw LjgzOTY5MX0nOjpwZ19kZXBlbmRlbmNpZXM7CiAtLSBjYW4ndCBoYXZlIGR1cGxpY2F0ZXMgYXR0 bnVtcyBpbiBsaXN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19pbXBv cnQuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNxbAppbmRleCBmZWJk YTNkMThkOS4uODQ0NjJmOTRkZWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0 YXRzX2ltcG9ydC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNx bApAQCAtNjk2LDYgKzY5Niw5IEBAIFNFTEVDVCAqIEZST00gcGdfY2F0YWxvZy5wZ19yZXN0b3Jl X3JlbGF0aW9uX3N0YXRzKAogICAgICdyZWxhbGxmcm96ZW4nLCAnMCc6OmludGVnZXIKICk7CiAK K0NSRUFURSBTVEFUSVNUSUNTIHN0YXRzX2ltcG9ydC50ZXN0X3N0YXQgT04gbmFtZSwgY29tcCwg bG93ZXIoYXJhbmdlKSwgYXJyYXlfbGVuZ3RoKHRhZ3MsMSkKK0ZST00gc3RhdHNfaW1wb3J0LnRl c3Q7CisKIC0tIEdlbmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUgd2l0aCBkYXRhCiBBTkFMWVpF IHN0YXRzX2ltcG9ydC50ZXN0OwogCkBAIC03MDQsNiArNzA3LDkgQEAgQ1JFQVRFIFRBQkxFIHN0 YXRzX2ltcG9ydC50ZXN0X2Nsb25lICggTElLRSBzdGF0c19pbXBvcnQudGVzdCApCiAKIENSRUFU RSBJTkRFWCBpc19vZGRfY2xvbmUgT04gc3RhdHNfaW1wb3J0LnRlc3RfY2xvbmUoKChjb21wKS5h ICUgMiA9IDEpKTsKIAorQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfaW1wb3J0LnRlc3Rfc3RhdF9j bG9uZSBPTiBuYW1lLCBjb21wLCBsb3dlcihhcmFuZ2UpLCBhcnJheV9sZW5ndGgodGFncywxKQor RlJPTSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZTsKKwogLS0KIC0tIENvcHkgc3RhdHMgZnJvbSB0 ZXN0IHRvIHRlc3RfY2xvbmUsIGFuZCBpc19vZGQgdG8gaXNfb2RkX2Nsb25lCiAtLQpAQCAtMTAw NCw0ICsxMDEwLDMwMiBAQCBTRUxFQ1QgcGdfY2F0YWxvZy5wZ19jbGVhcl9hdHRyaWJ1dGVfc3Rh dHMoCiAgICAgYXR0bmFtZSA9PiAnbm9wZSc6Om5hbWUsCiAgICAgaW5oZXJpdGVkID0+IGZhbHNl Ojpib29sZWFuKTsKIAorLS0gc2V0IG5fZGlzdGluY3QgdXNpbmcgYXQgYXR0bnVtICgxKSB0aGF0 IGlzIG5vdCBpbiB0aGUgc3RhdGlzdGljcyBvYmplY3QKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cu cGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFt ZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3Rh dF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ25fZGlzdGlu Y3QnLCAneyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMs IC0yIjogNCwgIi0xLCAtMiI6IDMsICIyLCAzLCAtMSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAt MSwgLTIiOiA0LCAiMywgLTEsIC0yIjogNCwgIjEsIDMsIC0xLCAtMiI6IDR9Jzo6cGdfbmRpc3Rp bmN0CisgICAgICApOworCistLSBzZXQgbl9kaXN0aW5jdCB1c2luZyBhdCBhdHRudW0gdGhhdCBp cyAwCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisg ICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAg J3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVk JywgZmFsc2UsCisgICAgICAgICduX2Rpc3RpbmN0JywgJ3siMiwgMyI6IDQsICIyLCAtMSI6IDQs ICIyLCAwIjogNCwgIjMsIC0xIjogNCwgIjMsIC0yIjogNCwgIi0xLCAtMiI6IDMsICIyLCAzLCAt MSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAtMSwgLTIiOiA0LCAiMywgLTEsIC0yIjogNCwgIjIs IDMsIC0xLCAtMiI6IDR9Jzo6cGdfbmRpc3RpbmN0CisgICAgICApOworCistLSBzZXQgbl9kaXN0 aW5jdCB1c2luZyBhdCBhdHRudW0gdGhhdCBpcyBvdXRzaWRlIHRoZSBleHByZXNzaW9uIGJvdW5k cyhiZWxvdyAtMikKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9z dGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAor ICAgICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdp bmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ25fZGlzdGluY3QnLCAneyIyLCAzIjogNCwgIjIs IC00IjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMsIC0yIjogNCwgIi0xLCAtMiI6IDMs ICIyLCAzLCAtMSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAtMSwgLTIiOiA0LCAiMywgLTEsIC0y IjogNCwgIjEsIDMsIC0xLCAtMiI6IDR9Jzo6cGdfbmRpc3RpbmN0CisgICAgICApOworCistLSBv aworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAg ICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdz dGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcs IGZhbHNlLAorICAgICAgICAnbl9kaXN0aW5jdCcsICd7IjIsIDMiOiA0LCAiMiwgLTEiOiA0LCAi MiwgLTIiOiA0LCAiMywgLTEiOiA0LCAiMywgLTIiOiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0x IjogNCwgIjIsIDMsIC0yIjogNCwgIjIsIC0xLCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMiwg MywgLTEsIC0yIjogNH0nOjpwZ19uZGlzdGluY3QKKyAgICAgICk7CisKK1NFTEVDVAorICAgIGUu bl9kaXN0aW5jdCwgZS5kZXBlbmRlbmNpZXMsIGUubW9zdF9jb21tb25fdmFscywgZS5tb3N0X2Nv bW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0X2NvbW1vbl9mcmVxcywgZS5tb3N0X2NvbW1vbl9i YXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2No ZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9z dGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFsc2UKK1xneAorCistLSBzZXQgZGVwZW5k ZW5jaWVzIHVzaW5nIGF0IGF0dG51bSAoMSkgdGhhdCBpcyBub3QgaW4gdGhlIHN0YXRpc3RpY3Mg b2JqZWN0CitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMo CisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAg ICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJp dGVkJywgZmFsc2UsCisgICAgICAgICdkZXBlbmRlbmNpZXMnLCAneyIyID0+IDEiOiAxLjAwMDAw MCwgIjIgPT4gLTEiOiAxLjAwMDAwMCwgIjIgPT4gLTIiOiAxLjAwMDAwMCwgIjMgPT4gMiI6IDEu MDAwMDAwLCAiMyA9PiAtMSI6IDEuMDAwMDAwLCAiMyA9PiAtMiI6IDEuMDAwMDAwLCAiLTEgPT4g MiI6IDAuNTAwMDAwLCAiLTEgPT4gMyI6IDAuNTAwMDAwLCAiLTEgPT4gLTIiOiAxLjAwMDAwMCwg Ii0yID0+IDIiOiAwLjUwMDAwMCwgIi0yID0+IDMiOiAwLjUwMDAwMCwgIi0yID0+IC0xIjogMS4w MDAwMDAsICIyLCAzID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+IC0yIjogMS4wMDAwMDAsICIy LCAtMSA9PiAzIjogMS4wMDAwMDAsICIyLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTIgPT4g MyI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjMsIC0xID0+IDIiOiAxLjAw MDAwMCwgIjMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIzLCAtMiA9PiAyIjogMS4wMDAwMDAsICIz LCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiLTEsIC0yID0+IDIiOiAwLjUwMDAwMCwgIi0xLCAtMiA9 PiAzIjogMC41MDAwMDAsICIyLCAzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMiwgMywgLTIgPT4g LTEiOiAxLjAwMDAwMCwgIjIsIC0xLCAtMiA9PiAzIjogMS4wMDAwMDAsICIzLCAtMSwgLTIgPT4g MiI6IDEuMDAwMDAwfSc6OnBnX2RlcGVuZGVuY2llcworICAgICAgKTsKKworLS0gc2V0IGRlcGVu ZGVuY2llcyB1c2luZyBhdCBhdHRudW0gdGhhdCBpcyAwCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9n LnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5h bWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0 YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdkZXBlbmRl bmNpZXMnLCAneyIyID0+IDMiOiAxLjAwMDAwMCwgIjAgPT4gLTEiOiAxLjAwMDAwMCwgIjIgPT4g LTIiOiAxLjAwMDAwMCwgIjMgPT4gMiI6IDEuMDAwMDAwLCAiMyA9PiAtMSI6IDEuMDAwMDAwLCAi MyA9PiAtMiI6IDEuMDAwMDAwLCAiLTEgPT4gMiI6IDAuNTAwMDAwLCAiLTEgPT4gMyI6IDAuNTAw MDAwLCAiLTEgPT4gLTIiOiAxLjAwMDAwMCwgIi0yID0+IDIiOiAwLjUwMDAwMCwgIi0yID0+IDMi OiAwLjUwMDAwMCwgIi0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+IC0xIjogMS4wMDAwMDAs ICIyLCAzID0+IC0yIjogMS4wMDAwMDAsICIyLCAtMSA9PiAzIjogMS4wMDAwMDAsICIyLCAtMSA9 PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gLTEiOiAx LjAwMDAwMCwgIjMsIC0xID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0xID0+IC0yIjogMS4wMDAwMDAs ICIzLCAtMiA9PiAyIjogMS4wMDAwMDAsICIzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiLTEsIC0y ID0+IDIiOiAwLjUwMDAwMCwgIi0xLCAtMiA9PiAzIjogMC41MDAwMDAsICIyLCAzLCAtMSA9PiAt MiI6IDEuMDAwMDAwLCAiMiwgMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIC0xLCAtMiA9PiAz IjogMS4wMDAwMDAsICIzLCAtMSwgLTIgPT4gMiI6IDEuMDAwMDAwfSc6OnBnX2RlcGVuZGVuY2ll cworICAgICAgKTsKKworLS0gc2V0IGRlcGVuZGVuY2llcyB1c2luZyBhdCBhdHRudW0gdGhhdCBp cyBvdXRzaWRlIHRoZSBleHByZXNzaW9uIGJvdW5kcyhiZWxvdyAtMikKK1NFTEVDVAorICAgIHBn X2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nf c2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3RhdGlzdGljc19uYW1lJywg J3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBmYWxzZSwKKyAgICAgICAg J2RlcGVuZGVuY2llcycsICd7IjIgPT4gMyI6IDEuMDAwMDAwLCAiMiA9PiAtMyI6IDEuMDAwMDAw LCAiMiA9PiAtMiI6IDEuMDAwMDAwLCAiMyA9PiAyIjogMS4wMDAwMDAsICIzID0+IC0xIjogMS4w MDAwMDAsICIzID0+IC0yIjogMS4wMDAwMDAsICItMSA9PiAyIjogMC41MDAwMDAsICItMSA9PiAz IjogMC41MDAwMDAsICItMSA9PiAtMiI6IDEuMDAwMDAwLCAiLTIgPT4gMiI6IDAuNTAwMDAwLCAi LTIgPT4gMyI6IDAuNTAwMDAwLCAiLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTEiOiAx LjAwMDAwMCwgIjIsIDMgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0xID0+IDMiOiAxLjAwMDAwMCwg IjIsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAtMiA9PiAzIjogMS4wMDAwMDAsICIyLCAtMiA9 PiAtMSI6IDEuMDAwMDAwLCAiMywgLTEgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTEgPT4gLTIiOiAx LjAwMDAwMCwgIjMsIC0yID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IC0xIjogMS4wMDAwMDAs ICItMSwgLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTEsIC0yID0+IDMiOiAwLjUwMDAwMCwgIjIsIDMs IC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgLTEs IC0yID0+IDMiOiAxLjAwMDAwMCwgIjMsIC0xLCAtMiA9PiAyIjogMS4wMDAwMDB9Jzo6cGdfZGVw ZW5kZW5jaWVzCisgICAgICApOworCistLSBvaworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19y ZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywg J3N0YXRzX2ltcG9ydCcsCisgICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Ns b25lJywKKyAgICAgICAgJ2luaGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnZGVwZW5kZW5jaWVz JywgJ3siMiA9PiAzIjogMS4wMDAwMDAsICIyID0+IC0xIjogMS4wMDAwMDAsICIyID0+IC0yIjog MS4wMDAwMDAsICIzID0+IDIiOiAxLjAwMDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4g LTIiOiAxLjAwMDAwMCwgIi0xID0+IDIiOiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwg Ii0xID0+IC0yIjogMS4wMDAwMDAsICItMiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41 MDAwMDAsICItMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwg MyA9PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIi OiAxLjAwMDAwMCwgIjIsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAw MDAsICIzLCAtMSA9PiAyIjogMS4wMDAwMDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywg LTIgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAy IjogMC41MDAwMDAsICItMSwgLTIgPT4gMyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAx LjAwMDAwMCwgIjIsIDMsIC0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEu MDAwMDAwLCAiMywgLTEsIC0yID0+IDIiOiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRlbmNpZXMKKyAg ICAgICk7CisKK1NFTEVDVAorICAgIGUubl9kaXN0aW5jdCwgZS5kZXBlbmRlbmNpZXMsIGUubW9z dF9jb21tb25fdmFscywgZS5tb3N0X2NvbW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0X2NvbW1v bl9mcmVxcywgZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBl CitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5z dGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFs c2UKK1xneAorCistLSBpZiBhbnkgb25lIG1jdiBwYXJhbSBzcGVjaWZpZWQsIGFsbCBmb3VyIG11 c3QgYmUgc3BlY2lmaWVkIChwYXJ0IDEpCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3Rv cmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3Rh dHNfaW1wb3J0JywKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUn LAorICAgICAgICAnaW5oZXJpdGVkJywgZmFsc2UsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxz JywgJ3t7Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAxLFwie1wi XCJ4a2V5XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJFLDAzLTAz LTIwMDMsKSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUsIDQsIFwi XCJzaXhcIlwiXVwiKSIsMSwyfX0nOjp0ZXh0W10KKyAgICAgICk7CisKKy0tIGlmIGFueSBvbmUg bWN2IHBhcmFtIHNwZWNpZmllZCwgYWxsIGZvdXIgbXVzdCBiZSBzcGVjaWZpZWQgKHBhcnQgMikK K1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAg ICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAgICAgICAnc3Rh dGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBm YWxzZSwKKyAgICAgICAgJ21vc3RfY29tbW9uX3ZhbF9udWxscycsICd7e2YsdCxmLHR9LHtmLGYs ZixmfSx7ZixmLGYsZn0se2YsZixmLGZ9fSc6OmJvb2xlYW5bXQorICAgICAgKTsKKworLS0gaWYg YW55IG9uZSBtY3YgcGFyYW0gc3BlY2lmaWVkLCBhbGwgZm91ciBtdXN0IGJlIHNwZWNpZmllZCAo cGFydCAzKQorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRz KAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisgICAg ICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2luaGVy aXRlZCcsIGZhbHNlLAorICAgICAgICAnbW9zdF9jb21tb25fZnJlcXMnLCAnezAuMjUsMC4yNSww LjI1LDAuMjV9Jzo6ZG91YmxlIHByZWNpc2lvbltdCisgICAgICApOworCistLSBpZiBhbnkgb25l IG1jdiBwYXJhbSBzcGVjaWZpZWQsIGFsbCBmb3VyIG11c3QgYmUgc3BlY2lmaWVkIChwYXJ0IDQp CitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAg ICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnc3RhdHNfaW1wb3J0JywKKyAgICAgICAgJ3N0 YXRpc3RpY3NfbmFtZScsICd0ZXN0X3N0YXRfY2xvbmUnLAorICAgICAgICAnaW5oZXJpdGVkJywg ZmFsc2UsCisgICAgICAgICdtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzJywgJ3swLjAwMzkwNjI1LDAu MDE1NjI1LDAuMDAzOTA2MjUsMC4wMTU2MjV9Jzo6ZG91YmxlIHByZWNpc2lvbltdCisgICAgICAp OworCistLSBvaworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0 YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3N0YXRzX2ltcG9ydCcsCisg ICAgICAgICdzdGF0aXN0aWNzX25hbWUnLCAndGVzdF9zdGF0X2Nsb25lJywKKyAgICAgICAgJ2lu aGVyaXRlZCcsIGZhbHNlLAorICAgICAgICAnbW9zdF9jb21tb25fdmFscycsICd7e2ZvdXIsTlVM TCwwLE5VTEx9LHtvbmUsIigxLDEuMSxPTkUsMDEtMDEtMjAwMSxcIntcIlwieGtleVwiXCI6IFwi XCJ4dmFsXCJcIn1cIikiLDEsMn0se3RyZSwiKDMsMy4zLFRSRSwwMy0wMy0yMDAzLCkiLC0xLDN9 LHt0d28sIigyLDIuMixUV08sMDItMDItMjAwMixcIlt0cnVlLCA0LCBcIlwic2l4XCJcIl1cIiki LDEsMn19Jzo6dGV4dFtdLAorICAgICAgICAnbW9zdF9jb21tb25fdmFsX251bGxzJywgJ3t7Zix0 LGYsdH0se2YsZixmLGZ9LHtmLGYsZixmfSx7ZixmLGYsZn19Jzo6Ym9vbGVhbltdLAorICAgICAg ICAnbW9zdF9jb21tb25fZnJlcXMnLCAnezAuMjUsMC4yNSwwLjI1LDAuMjV9Jzo6ZG91YmxlIHBy ZWNpc2lvbltdLAorICAgICAgICAnbW9zdF9jb21tb25fYmFzZV9mcmVxcycsICd7MC4wMDM5MDYy NSwwLjAxNTYyNSwwLjAwMzkwNjI1LDAuMDE1NjI1fSc6OmRvdWJsZSBwcmVjaXNpb25bXQorICAg ICAgKTsKKworU0VMRUNUCisgICAgZS5uX2Rpc3RpbmN0LCBlLmRlcGVuZGVuY2llcywgZS5tb3N0 X2NvbW1vbl92YWxzLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAgICBlLm1vc3RfY29tbW9u X2ZyZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIGUK K1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0 YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5pbmhlcml0ZWQgPSBmYWxz ZQorXGd4CisKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0 cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2NoZW1hbmFtZScsICdzdGF0c19pbXBvcnQnLAorICAg ICAgICAnc3RhdGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhl cml0ZWQnLCBmYWxzZSwKKyAgICAgICAgJ2V4cHJzJywgJ3t7MCw0LC0wLjc1LCJ7MX0iLCJ7MC41 fSIsInstMSwwfSIsLTAuNixOVUxMLE5VTEwsTlVMTH0sezAuMjUsNCwtMC41LCJ7Mn0iLCJ7MC41 fSIsTlVMTCwxLE5VTEwsTlVMTCxOVUxMfX0nOjp0ZXh0W10KKyAgICAgICk7CisKK1NFTEVDVAor ICAgIGUuaW5oZXJpdGVkLCBlLm51bGxfZnJhYywgZS5hdmdfd2lkdGgsIGUubl9kaXN0aW5jdCwg ZS5tb3N0X2NvbW1vbl92YWxzLAorICAgIGUubW9zdF9jb21tb25fZnJlcXMsIGUuaGlzdG9ncmFt X2JvdW5kcywgZS5jb3JyZWxhdGlvbiwKKyAgICBlLm1vc3RfY29tbW9uX2VsZW1zLCBlLm1vc3Rf Y29tbW9uX2VsZW1fZnJlcXMsIGUuZWxlbV9jb3VudF9oaXN0b2dyYW0KK0ZST00gcGdfc3RhdHNf ZXh0X2V4cHJzIEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2lt cG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCithbmQgZS5p bmhlcml0ZWQgPSBmYWxzZQorXGd4CisKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfY2xlYXJf ZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNf aW1wb3J0JywKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnLAor ICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UpOworCitTRUxFQ1QgQ09VTlQoKikKK0ZST00gcGdf c3RhdHNfZXh0IEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2lt cG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5p bmhlcml0ZWQgPSBmYWxzZTsKKworU0VMRUNUIENPVU5UKCopCitGUk9NIHBnX3N0YXRzX2V4dF9l eHBycyBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQn CitBTkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJp dGVkID0gZmFsc2U7CisKKy0tCistLSBDb3B5IHN0YXRzIGZyb20gdGVzdF9zdGF0IHRvIHRlc3Rf c3RhdF9jbG9uZQorLS0KK1NFTEVDVAorICAgIGUuc3RhdGlzdGljc19uYW1lLAorICAgIHBnX2Nh dGFsb2cucGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgJ3N0YXRpc3RpY3Nfc2No ZW1hbmFtZScsIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lOjp0ZXh0LAorICAgICAgICAnc3RhdGlz dGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZScsCisgICAgICAgICdpbmhlcml0ZWQnLCBlLmlu aGVyaXRlZCwKKyAgICAgICAgJ25fZGlzdGluY3QnLCBlLm5fZGlzdGluY3QsCisgICAgICAgICdk ZXBlbmRlbmNpZXMnLCBlLmRlcGVuZGVuY2llcywKKyAgICAgICAgJ21vc3RfY29tbW9uX3ZhbHMn LCBlLm1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxfbnVsbHMnLCBl Lm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAgICAgICAgJ21vc3RfY29tbW9uX2ZyZXFzJywgZS5t b3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICAgJ21vc3RfY29tbW9uX2Jhc2VfZnJlcXMnLCBlLm1v c3RfY29tbW9uX2Jhc2VfZnJlcXMsCisgICAgICAgICdleHBycycsIHguZXhwcnMKKyAgICApCitG Uk9NIHBnX3N0YXRzX2V4dCBBUyBlCitDUk9TUyBKT0lOIExBVEVSQUwgKAorICAgIFNFTEVDVAor ICAgICAgICBhcnJheV9hZ2coCisgICAgICAgICAgICBBUlJBWVtlZS5udWxsX2ZyYWM6OnRleHQs IGVlLmF2Z193aWR0aDo6dGV4dCwKKyAgICAgICAgICAgICAgICAgIGVlLm5fZGlzdGluY3Q6OnRl eHQsIGVlLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQsCisgICAgICAgICAgICAgICAgICBlZS5tb3N0 X2NvbW1vbl9mcmVxczo6dGV4dCwgZWUuaGlzdG9ncmFtX2JvdW5kczo6dGV4dCwKKyAgICAgICAg ICAgICAgICAgIGVlLmNvcnJlbGF0aW9uOjp0ZXh0LCBlZS5tb3N0X2NvbW1vbl9lbGVtczo6dGV4 dCwKKyAgICAgICAgICAgICAgICAgIGVlLm1vc3RfY29tbW9uX2VsZW1fZnJlcXM6OnRleHQsCisg ICAgICAgICAgICAgICAgICBlZS5lbGVtX2NvdW50X2hpc3RvZ3JhbTo6dGV4dF0pCisgICAgRlJP TSBwZ19zdGF0c19leHRfZXhwcnMgQVMgZWUKKyAgICBXSEVSRSBlZS5zdGF0aXN0aWNzX3NjaGVt YW5hbWUgPSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZQorICAgIEFORCBlZS5zdGF0aXN0aWNzX25h bWUgPSBlLnN0YXRpc3RpY3NfbmFtZQorICAgIEFORCBlZS5pbmhlcml0ZWQgPSBlLmluaGVyaXRl ZAorICAgICkgQVMgeChleHBycykKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0 YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnOworCitTRUxF Q1Qgby5pbmhlcml0ZWQsCisgICAgICAgby5uX2Rpc3RpbmN0LCBvLmRlcGVuZGVuY2llcywgby5t b3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9jb21tb25fdmFsX251bGxzLCBvLm1vc3Rf Y29tbW9uX2ZyZXFzLAorICAgICAgIG8ubW9zdF9jb21tb25fYmFzZV9mcmVxcworRlJPTSBwZ19z dGF0c19leHQgQVMgbworV0hFUkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1w b3J0JworQU5EIG8uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdCcKK0VYQ0VQVAorU0VMRUNU IG4uaW5oZXJpdGVkLAorICAgICAgIG4ubl9kaXN0aW5jdCwgbi5kZXBlbmRlbmNpZXMsIG4ubW9z dF9jb21tb25fdmFscywKKyAgICAgICBuLm1vc3RfY29tbW9uX3ZhbF9udWxscywgbi5tb3N0X2Nv bW1vbl9mcmVxcywKKyAgICAgICBuLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3Rh dHNfZXh0IEFTIG4KK1dIRVJFIG4uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9y dCcKK0FORCBuLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnOworCitTRUxFQ1Qg bi5pbmhlcml0ZWQsCisgICAgICAgbi5uX2Rpc3RpbmN0LCBuLmRlcGVuZGVuY2llcywgbi5tb3N0 X2NvbW1vbl92YWxzLAorICAgICAgIG4ubW9zdF9jb21tb25fdmFsX251bGxzLCBuLm1vc3RfY29t bW9uX2ZyZXFzLAorICAgICAgIG4ubW9zdF9jb21tb25fYmFzZV9mcmVxcworRlJPTSBwZ19zdGF0 c19leHQgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0 JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScKK0VYQ0VQVAorU0VM RUNUIG8uaW5oZXJpdGVkLAorICAgICAgIG8ubl9kaXN0aW5jdCwgby5kZXBlbmRlbmNpZXMsIG8u bW9zdF9jb21tb25fdmFscywKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbF9udWxscywgby5tb3N0 X2NvbW1vbl9mcmVxcywKKyAgICAgICBvLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdf c3RhdHNfZXh0IEFTIG8KK1dIRVJFIG8uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2lt cG9ydCcKK0FORCBvLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnOworCitTRUxFQ1Qgby5p bmhlcml0ZWQsCisgICAgICAgby5udWxsX2ZyYWMsIG8uYXZnX3dpZHRoLCBvLm5fZGlzdGluY3Qs CisgICAgICAgby5tb3N0X2NvbW1vbl92YWxzOjp0ZXh0IEFTIG1vc3RfY29tbW9uX3ZhbHMsCisg ICAgICAgby5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBvLmhpc3RvZ3JhbV9ib3VuZHM6OnRl eHQgQVMgaGlzdG9ncmFtX2JvdW5kcywKKyAgICAgICBvLmNvcnJlbGF0aW9uLAorICAgICAgIG8u bW9zdF9jb21tb25fZWxlbXM6OnRleHQgQVMgbW9zdF9jb21tb25fZWxlbXMsCisgICAgICAgby5t b3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBvLmVsZW1fY291bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0 YXRzX2V4dF9leHBycyBBUyBvCitXSEVSRSBvLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0 c19pbXBvcnQnCitBTkQgby5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JworRVhDRVBUCitT RUxFQ1Qgbi5pbmhlcml0ZWQsCisgICAgICAgbi5udWxsX2ZyYWMsIG4uYXZnX3dpZHRoLCBuLm5f ZGlzdGluY3QsCisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxzOjp0ZXh0IEFTIG1vc3RfY29tbW9u X3ZhbHMsCisgICAgICAgbi5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBuLmhpc3RvZ3JhbV9i b3VuZHM6OnRleHQgQVMgaGlzdG9ncmFtX2JvdW5kcywKKyAgICAgICBuLmNvcnJlbGF0aW9uLAor ICAgICAgIG4ubW9zdF9jb21tb25fZWxlbXM6OnRleHQgQVMgbW9zdF9jb21tb25fZWxlbXMsCisg ICAgICAgbi5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLCBuLmVsZW1fY291bnRfaGlzdG9ncmFtCitG Uk9NIHBnX3N0YXRzX2V4dF9leHBycyBBUyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nfc2NoZW1hbmFt ZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgbi5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Ns b25lJzsKKworU0VMRUNUIG4uaW5oZXJpdGVkLAorICAgICAgIG4ubnVsbF9mcmFjLCBuLmF2Z193 aWR0aCwgbi5uX2Rpc3RpbmN0LAorICAgICAgIG4ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBt b3N0X2NvbW1vbl92YWxzLAorICAgICAgIG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5o aXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgbi5jb3Jy ZWxhdGlvbiwKKyAgICAgICBuLm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9u X2VsZW1zLAorICAgICAgIG4ubW9zdF9jb21tb25fZWxlbV9mcmVxcywgbi5lbGVtX2NvdW50X2hp c3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNz X3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rl c3Rfc3RhdF9jbG9uZScKK0VYQ0VQVAorU0VMRUNUIG8uaW5oZXJpdGVkLAorICAgICAgIG8ubnVs bF9mcmFjLCBvLmF2Z193aWR0aCwgby5uX2Rpc3RpbmN0LAorICAgICAgIG8ubW9zdF9jb21tb25f dmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9jb21tb25fZnJl cXMsCisgICAgICAgby5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMs CisgICAgICAgby5jb3JyZWxhdGlvbiwKKyAgICAgICBvLm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0 IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG8ubW9zdF9jb21tb25fZWxlbV9mcmVxcywg by5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgbworV0hF UkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG8uc3RhdGlz dGljc19uYW1lID0gJ3Rlc3Rfc3RhdCc7CisKIERST1AgU0NIRU1BIHN0YXRzX2ltcG9ydCBDQVND QURFOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9m dW5jLnNnbWwKaW5kZXggYmYzMWIxZjNlZWUuLmJmMGZhOGQ2YzVhIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTMwNDc2 LDYgKzMwNDc2LDEwNCBAQCBwb3N0Z3Jlcz0jIFNFTEVDVCAnMC8wJzo6cGdfbHNuICsgcGQuc2Vn bWVudF9udW1iZXIgKiBwcy5zZXR0aW5nOjppbnQgKyA6b2Zmc2V0CiAgICAgICAgIDwvcGFyYT4K ICAgICAgICA8L2VudHJ5PgogICAgICAgPC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxlbnRy eSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+Cisg ICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19yZXN0b3JlX2V4dGVuZGVk X3N0YXRzPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9u PnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHM8L2Z1bmN0aW9uPiAoCisgICAgICAgIDxsaXRlcmFs PlZBUklBRElDPC9saXRlcmFsPiA8cGFyYW1ldGVyPmt3YXJnczwvcGFyYW1ldGVyPiA8dHlwZT4i YW55IjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+ CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBDcmVhdGVzIG9yIHVw ZGF0ZXMgc3RhdGlzdGljcyBmb3Igc3RhdGlzdGljcyBvYmplY3RzLiAgT3JkaW5hcmlseSwKKyAg ICAgICAgIHRoZXNlIHN0YXRpc3RpY3MgYXJlIGNvbGxlY3RlZCBhdXRvbWF0aWNhbGx5IG9yIHVw ZGF0ZWQgYXMgYSBwYXJ0IG9mCisgICAgICAgICA8eHJlZiBsaW5rZW5kPSJzcWwtdmFjdXVtIi8+ IG9yIDx4cmVmIGxpbmtlbmQ9InNxbC1hbmFseXplIi8+LCBzbworICAgICAgICAgaXQncyBub3Qg bmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4gIEhvd2V2ZXIsIGl0IGlzIHVzZWZ1bAor ICAgICAgICAgYWZ0ZXIgYSByZXN0b3JlIHRvIGVuYWJsZSB0aGUgb3B0aW1pemVyIHRvIGNob29z ZSBiZXR0ZXIgcGxhbnMgaWYKKyAgICAgICAgIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGhh cyBub3QgYmVlbiBydW4geWV0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgVGhlIHRyYWNrZWQgc3RhdGlzdGljcyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2 ZXJzaW9uLCBzbworICAgICAgICAgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgcGFpcnMgb2YgPHJl cGxhY2VhYmxlPmFyZ25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgYW5kIDxyZXBsYWNlYWJs ZT5hcmd2YWx1ZTwvcmVwbGFjZWFibGU+IGluIHRoZSBmb3JtOgorPHByb2dyYW1saXN0aW5nPgor IFNFTEVDVCBwZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzKAorICAgICc8cmVwbGFjZWFibGU+YXJn MW5hbWU8L3JlcGxhY2VhYmxlPicsICc8cmVwbGFjZWFibGU+YXJnMXZhbHVlPC9yZXBsYWNlYWJs ZT4nOjo8cmVwbGFjZWFibGU+YXJnMXR5cGU8L3JlcGxhY2VhYmxlPiwKKyAgICAnPHJlcGxhY2Vh YmxlPmFyZzJuYW1lPC9yZXBsYWNlYWJsZT4nLCAnPHJlcGxhY2VhYmxlPmFyZzJ2YWx1ZTwvcmVw bGFjZWFibGU+Jzo6PHJlcGxhY2VhYmxlPmFyZzJ0eXBlPC9yZXBsYWNlYWJsZT4sCisgICAgJzxy ZXBsYWNlYWJsZT5hcmczbmFtZTwvcmVwbGFjZWFibGU+JywgJzxyZXBsYWNlYWJsZT5hcmczdmFs dWU8L3JlcGxhY2VhYmxlPic6OjxyZXBsYWNlYWJsZT5hcmczdHlwZTwvcmVwbGFjZWFibGU+KTsK KzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAg ICAgICBGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSA8c3RydWN0ZmllbGQ+bl9kaXN0aW5jdDwvc3Ry dWN0ZmllbGQ+LAorICAgICAgICAgPHN0cnVjdGZpZWxkPmRlcGVuZGVuY2llczwvc3RydWN0Zmll bGQ+LCBhbmQgPHN0cnVjdGZpZWxkPmV4cHJzPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICAgIHZhbHVl cyBmb3IgdGhlIHN0YXRpc3RpY3Mgb2JqZWN0IDxzdHJ1Y3RuYW1lPm15c2NoZW1hLm15c3RhdHNv Ymo8L3N0cnVjdG5hbWU+OgorPHByb2dyYW1saXN0aW5nPgorIFNFTEVDVCBwZ19yZXN0b3JlX2V4 dGVuZGVkX3N0YXRzKAorICAgICdzdGF0aXN0aWNzX3NjaGVtYW5hbWUnLCAnbXlzY2hlbWEnOjpu YW1lLAorICAgICdzdGF0aXN0aWNzX25hbWUnLCAgICAgICAnbXl0YWJsZSc6Om5hbWUsCisgICAg J2luaGVyaXRlZCcsICAgICAgICAgICAgIGZhbHNlLAorICAgICduX2Rpc3RpbmN0JywgICAgICAg ICAgICAneyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMs IC0yIjogNH0nOjpwZ19uZGlzdGluY3QsCisgICAgJ2RlcGVuZGVuY2llcycsICAgICAgICAgICd7 IjIgPT4gMSI6IDEuMDAwMDAwLCAiMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6IDEuMDAw MDAwfSc6OnBnX2RlcGVuZGVuY2llcworICAgICdleHBycycsICAgICAgICAgICAgICAgICAne3sw LDQsLTAuNzUsInsxfSIsInswLjV9Iiwiey0xLDB9IiwtMC42LE5VTEwsTlVMTCxOVUxMfSx7MC4y NSw0LC0wLjUsInsyfSIsInswLjV9IixOVUxMLDEsTlVMTCxOVUxMLE5VTEx9fSc6OnRleHRbXSk7 Cis8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgVGhlIHJlcXVpcmVkIGFyZ3VtZW50cyBhcmUgPGxpdGVyYWw+c3RhdGlzdGljc19zY2hl bWFuYW1lPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUKKyAgICAgICAgIG9mIHR5cGUgPHR5cGU+bmFt ZTwvdHlwZT4sIHdoaWNoIHNwZWNpZmllcyB0aGUgc3RhdGlzdGljcyBvYmplY3QncyBzY2hlbWE7 CisgICAgICAgICA8bGl0ZXJhbD5zdGF0aXN0aWNzX25hbWU8L2xpdGVyYWw+IHdpdGggYSB2YWx1 ZSBvZiB0eXBlIDx0eXBlPm5hbWU8L3R5cGU+LCB3aGljaCBzcGVjaWZpZXMKKyAgICAgICAgIHRo ZSBuYW1lIG9mIHRoZSBzdGF0aXN0aWNzIG9iamVjdDsgYW5kIDxsaXRlcmFsPmluaGVyaXRlZDwv bGl0ZXJhbD4sIHdoaWNoCisgICAgICAgICBzcGVjaWZpZXMgd2hldGhlciB0aGUgc3RhdGlzdGlj cyBpbmNsdWRlIHZhbHVlcyBmcm9tIGNoaWxkIHRhYmxlcy4KKyAgICAgICAgIE90aGVyIGFyZ3Vt ZW50cyBhcmUgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc3RhdGlzdGljcyBjb3JyZXNwb25kaW5n CisgICAgICAgICB0byBjb2x1bW5zIGluIDxsaW5rIGxpbmtlbmQ9InZpZXctcGctc3RhdHMtZXh0 Ij48c3RydWN0bmFtZT5wZ19zdGF0c19leHQ8L3N0cnVjdG5hbWU+CisgICAgICAgICA8L2xpbms+ LiBUbyBhY2NlcHQgc3RhdGlzdGljcyBmb3IgYW55IGV4cHJlc3Npb25zIGluIHRoZSBleHRlbmRl ZCBzdGF0aXN0aWNzIG9iamVjdCwgdGhlCisgICAgICAgICBwYXJhbWV0ZXIgPGxpdGVyYWw+ZXhw cnM8L2xpdGVyYWw+IHdpdGggYSB0eXBlIDx0eXBlPnRleHRbXTwvdHlwZT4gaXMgYXZhaWxhYmxl LCB0aGUgYXJyYXkKKyAgICAgICAgIG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIHdpdGggYW4gb3V0 ZXIgYXJyYXkgaW4gbGVuZ3RoIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbnMgaW4K KyAgICAgICAgIHRoZSBvYmplY3QsIGFuZCB0aGUgaW5uZXIgYXJyYXkgZWxlbWVudHMgZm9yIGVh Y2ggb2YgdGhlIHN0YXRpc3RpY2FsIGNvbHVtbnMgaW4gPGxpbmsKKyAgICAgICAgIGxpbmtlbmQ9 InZpZXctcGctc3RhdHMtZXh0LWV4cHJzIj48c3RydWN0bmFtZT5wZ19zdGF0c19leHRfZXhwcnM8 L3N0cnVjdG5hbWU+PC9saW5rPiwgc29tZQorICAgICAgICAgb2Ygd2hpY2ggYXJlIHRoZW1zZWx2 ZXMgYXJyYXlzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQWRk aXRpb25hbGx5LCB0aGlzIGZ1bmN0aW9uIGFjY2VwdHMgYXJndW1lbnQgbmFtZQorICAgICAgICAg PGxpdGVyYWw+dmVyc2lvbjwvbGl0ZXJhbD4gb2YgdHlwZSA8dHlwZT5pbnRlZ2VyPC90eXBlPiwg d2hpY2gKKyAgICAgICAgIHNwZWNpZmllcyB0aGUgc2VydmVyIHZlcnNpb24gZnJvbSB3aGljaCB0 aGUgc3RhdGlzdGljcyBvcmlnaW5hdGVkLgorICAgICAgICAgVGhpcyBpcyBhbnRpY2lwYXRlZCB0 byBiZSBoZWxwZnVsIGluIHBvcnRpbmcgc3RhdGlzdGljcyBmcm9tIG9sZGVyCisgICAgICAgICB2 ZXJzaW9ucyBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICAgICAg ICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgTWlub3IgZXJyb3JzIGFyZSByZXBv cnRlZCBhcyBhIDxsaXRlcmFsPldBUk5JTkc8L2xpdGVyYWw+IGFuZAorICAgICAgICAgaWdub3Jl ZCwgYW5kIHJlbWFpbmluZyBzdGF0aXN0aWNzIHdpbGwgc3RpbGwgYmUgcmVzdG9yZWQuIElmIGFs bAorICAgICAgICAgc3BlY2lmaWVkIHN0YXRpc3RpY3MgYXJlIHN1Y2Nlc3NmdWxseSByZXN0b3Jl ZCwgcmV0dXJucworICAgICAgICAgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIG90aGVyd2lzZSA8 bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+ CisgICAgICAgICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUgPGxpdGVyYWw+TUFJTlRBSU48L2xp dGVyYWw+IHByaXZpbGVnZSBvbiB0aGUKKyAgICAgICAgIHRhYmxlIG9yIGJlIHRoZSBvd25lciBv ZiB0aGUgZGF0YWJhc2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2VudHJ5PgorICAgICAg PC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5 Ij4KKyAgICAgICAgPHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICAgPGluZGV4 dGVybT4KKyAgICAgICAgICA8cHJpbWFyeT5wZ19jbGVhcl9leHRlbmRlZF9zdGF0czwvcHJpbWFy eT4KKyAgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICAgPGZ1bmN0aW9uPnBnX2NsZWFyX2V4 dGVuZGVkX3N0YXRzPC9mdW5jdGlvbj4gKAorICAgICAgICAgPHBhcmFtZXRlcj5zdGF0aXN0aWNz X3NjaGVtYW5hbWU8L3BhcmFtZXRlcj4gPHR5cGU+bmFtZTwvdHlwZT4sCisgICAgICAgICA8cGFy YW1ldGVyPnN0YXRpc3RpY3NfbmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5uYW1lPC90eXBlPiwKKyAg ICAgICAgIDxwYXJhbWV0ZXI+aW5oZXJpdGVkPC9wYXJhbWV0ZXI+IDx0eXBlPmJvb2xlYW48L3R5 cGU+ICkKKyAgICAgICAgIDxyZXR1cm52YWx1ZT52b2lkPC9yZXR1cm52YWx1ZT4KKyAgICAgICAg PC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIENsZWFycyBzdGF0aXN0aWNzIGZvciB0 aGUgZ2l2ZW4gc3RhdGlzdGljcyBvYmplY3QsIGFzCisgICAgICAgICB0aG91Z2ggdGhlIG9iamVj dCB3YXMgbmV3bHkgY3JlYXRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAg ICAgICAgIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSA8bGl0ZXJhbD5NQUlOVEFJTjwvbGl0ZXJh bD4gcHJpdmlsZWdlIG9uCisgICAgICAgICB0aGUgdGFibGUgb3IgYmUgdGhlIG93bmVyIG9mIHRo ZSBkYXRhYmFzZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvZW50cnk+CisgICAgICA8L3Jv dz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+Ci0tIAoyLjQ4LjEK Cg== --000000000000772648062f8a2458--