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 1rCH6x-00FAUE-LE for pgsql-hackers@arkaria.postgresql.org; Sun, 10 Dec 2023 10:32:36 +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 1rCH6t-006LdI-GP for pgsql-hackers@arkaria.postgresql.org; Sun, 10 Dec 2023 10:32: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 1rCH6s-006LdA-Md for pgsql-hackers@lists.postgresql.org; Sun, 10 Dec 2023 10:32:31 +0000 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rCH6p-009hsM-Dr for pgsql-hackers@postgresql.org; Sun, 10 Dec 2023 10:32:29 +0000 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-6d9e179b217so2262960a34.0 for ; Sun, 10 Dec 2023 02:32:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702204346; x=1702809146; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=IGTbz8+4Obz+NfYTlSjiliq4MonLInZzeZSZsJQj5Ys=; b=XF6+X1gh9BhkjBuP3VpNdCM9pitYYfpmukpNM1RPYSylGjgXzy+kSFCCXh6q35O+2d thK4+JELU4gJVaQDcaCuf9ZWJbDx46sNuN5Wr94rqJErZlHk3ccFnXItauJPeEypHHIW /5lWfnaUqfnnN8gijFdcAfCbnwIy9qko1cRFsXaG5YnW7ILNjJRaSiVUfJK6elYSuiYb Tlg4U8zJ8K+hD/DMcM/1lJKn6q4fcx3m1lIkVU5XRFcKPyoEjcEg9FP4bQL1qAsn80ZL s/HPlEW1l5iRz61eggyRbPEQjO5KgYMB2Kgy5KKLPypQK9bpMH17ub/w4mbIBoOe42K2 Yh/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702204346; x=1702809146; 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=IGTbz8+4Obz+NfYTlSjiliq4MonLInZzeZSZsJQj5Ys=; b=OjBhc4//dVDpNOx9OAEABduxAHnzTepOWlb04Kdz6fYMLWl1nc3xplgNszlwmap8o7 CwjPGz3OTg20nidJW7AjcznTlhC9hASJGpKvKlBOkqW3qwnuXBgAXyWxcMTVODllupj9 xk8xgSuX7MjKH9LMkcdmB2GOBkZ0DagphURmVSpafDCMCFpWVUJ06+9YVbxPpv9Y6pMz G8mBHoJAZktpr5XCtrDWirtdQ0AB8lUrQPHttQK/DQntmu33M+x+rIMYvgXywnuSiYd9 tf+zJELXgBaTrk37vRbeVwUtGexwFkVev9hrv5z/GLIwpY1CYSy0BRnWWV9E5o1eHc/p uHmQ== X-Gm-Message-State: AOJu0Yzpp01AuacZJLW4eY0ZutqSEu4Mp7HMYSVst/xxuSWH7euKo8Rp k2VkvoJq7cbyXjOYXxjoD6ple7VwBz0hTd70Zeo= X-Google-Smtp-Source: AGHT+IF9GN6JyTKptVtjlm7pF+1dKtUSHoD0MN2/muw9wo/PR/muN1oOCYVCGjj6lhj3SJzHComjI3K6mt4SHo9DtCM= X-Received: by 2002:a05:6808:3c90:b0:3b9:e8d0:6df5 with SMTP id gs16-20020a0568083c9000b003b9e8d06df5mr4615090oib.23.1702204346007; Sun, 10 Dec 2023 02:32:26 -0800 (PST) MIME-Version: 1.0 References: <483E1B59-4A80-450B-8685-7CC12762FD5A@anarazel.de> <19551e8c2717c24689913083f841ddb5@oss.nttdata.com> <43399b33fe573f0548410893f41f84b6@oss.nttdata.com> <8de9d5e1-2f81-ee2e-ece4-b1a6ede1f285@yandex.ru> <58fa3b63e88ffd0a09273e38aec0661e@oss.nttdat!> <752672.1699474336@sss.pgh.pa.us> <878r77mtlt.fsf@163.com> <760ee97a-e336-4d7b-9477-9d9e99370097@postgrespro.ru> <23a89ba0-b5d5-419c-b798-cd2c59490148@yandex.ru> In-Reply-To: <23a89ba0-b5d5-419c-b798-cd2c59490148@yandex.ru> From: jian he Date: Sun, 10 Dec 2023 18:32:12 +0800 Message-ID: Subject: Re: POC PATCH: copy from ... exceptions to: (was Re: VLDB Features) To: Alena Rybakina Cc: Damir Belyalov , zhihuifan1213@163.com, Tom Lane , Daniel Gustafsson , torikoshia , PostgreSQL Hackers , Andres Freund , anisimow.d@gmail.com, HukuToc@gmail.com, pgsql-hackers@lists.postgresql.org, Andrei Lepikhov Content-Type: multipart/mixed; boundary="000000000000619f33060c25558a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000619f33060c25558a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 8, 2023 at 3:09=E2=80=AFPM Alena Rybakina wrote: > > Thank you for your work. Unfortunately, your code contained errors during= the make installation: > > 'SAVEPOINT' after 'SAVE_ERROR' in unreserved_keyword list is misplaced > 'SAVEPOINT' after 'SAVE_ERROR' in bare_label_keyword list is misplaced > make[2]: *** [../../../src/Makefile.global:783: gram.c] Error 1 > make[1]: *** [Makefile:131: parser/gram.h] Error 2 > make[1]: *** Waiting for unfinished jobs.... > make: *** [src/Makefile.global:383: submake-generated-headers] Error 2 > > I have ubuntu 22.04 operation system. > > On 06.12.2023 13:47, jian he wrote: > > On Tue, Dec 5, 2023 at 6:07=E2=80=AFPM Alena Rybakina wrote: > > Hi! > > Thank you for your contribution to this thread. > > > I reviewed it and have a few questions. > > 1. I have seen that you delete a table before creating it, to which you w= ant to add errors due to a failed "copy from" operation. I think this is wr= ong because this table can save useful data for the user. > At a minimum, we should warn the user about this, but I think we can just= add some number at the end of the name, such as name_table1, name_table_2. > > Sorry. I don't understand this part. > Currently, if the error table name already exists, then the copy will > fail, an error will be reported. > I try to first create a table, if no error then the error table will be d= ropped. > > To be honest, first of all, I misunderstood this part of the code. Now I = see that it works the way you mentioned. > > However, I didn't see if you dealt with cases where we already had a tabl= e with the same name as the table error. > I mean, when is he trying to create for the first time, or will we never = be able to face such a problem? > > Can you demo the expected behavior? > > Unfortunately, I was unable to launch it due to a build issue. > Hopefully attached will work. > 2. I noticed that you are forming a table name using the type of errors t= hat prevent rows from being added during 'copy from' operation. > I think it would be better to use the name of the source file that was us= ed while 'copy from' was running. > In addition, there may be several such files, it is also worth considerin= g. > > Another column added. > now it looks like: > > SELECT * FROM save_error_csv_error; > filename | lineno | line > | field | source | err_message | > err_detail | errorcode > ----------+--------+----------------------------------------------------+= -------+--------+---------------------------------------------+------------= +----------- > STDIN | 1 | 2002 232 40 50 60 70 > 80 | NULL | NULL | extra data after last expected column | > NULL | 22P04 > STDIN | 1 | 2000 230 23 > | d | NULL | missing data for column "d" | NULL > | 22P04 > STDIN | 1 | z,,"" > | a | z | invalid input syntax for type integer: "z" | NULL > | 22P02 > STDIN | 2 | \0,, > | a | \0 | invalid input syntax for type integer: "\0" | NULL > | 22P02 > > Yes, I see the "filename" column, and this will solve the problem, but "S= TDIN" is unclear to me. please see comment in struct CopyFromStateData: char *filename; /* filename, or NULL for STDIN */ > */ > > Maybe we can rewrite it like this: > > /* Check, the err_nsp.error_rel table has already existed > * and if it is, check its column name and data types. > refactored. --000000000000619f33060c25558a Content-Type: application/x-patch; name="v10-0001-Make-COPY-FROM-more-error-tolerant.patch" Content-Disposition: attachment; filename="v10-0001-Make-COPY-FROM-more-error-tolerant.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lpyu1cfz0 RnJvbSAyNTEwZGMyZTJiMTNjNjBhNWE3ZTE4NGJmOGU1NTMyNTYwMWQ5N2UwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBwZ2FkZGljdCA8amlhbi51bml2ZXJzYWxpdHlAZ21haWwuY29t PgpEYXRlOiBTdW4sIDEwIERlYyAyMDIzIDA5OjUxOjQyICswODAwClN1YmplY3Q6IFtQQVRDSCB2 MTAgMS8xXSBNYWtlIENPUFkgRlJPTSBtb3JlIGVycm9yIHRvbGVyYW50CgpDdXJyZW50bHkgQ09Q WSBGUk9NIGhhcyAzIHR5cGVzIG9mIGVycm9yIHdoaWxlIHByb2Nlc3NpbmcgdGhlIHNvdXJjZSBm aWxlLgoqIGV4dHJhIGRhdGEgYWZ0ZXIgbGFzdCBleHBlY3RlZCBjb2x1bW4KKiBtaXNzaW5nIGRh dGEgZm9yIGNvbHVtbiBcIiVzXCIKKiBkYXRhIHR5cGUgY29udmVyc2lvbiBlcnJvci4KCkluc3Rl YWQgb2YgdGhyb3dpbmcgZXJyb3JzIHdoaWxlIGNvcHlpbmcsIHNhdmVfZXJyb3Igd2lsbCBzYXZl IGVycm9ycyB0byBhIHRhYmxlIGF1dG9tYXRpY2FsbHkuCldlIGNoZWNrIHRoZSB0YWJsZSBkZWZp bml0aW9uIHZpYSBjb2x1bW4gbmFtZSBhbmQgY29sdW1uIGRhdGEgdHlwZS4KaWYgdGFibGUgYWxy ZWFkeSBleGlzdHMgYW5kIG1lZXRzIHRoZSBjcml0ZXJpYSB0aGVuIGVycm9ycyB3aWxsIHNhdmUg dG8gdGhhdCB0YWJsZS4KaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LCB0aGVuIGNyZWF0ZSBv bmUuCgpPbmx5IHdvcmtzIGZvciBDT1BZIEZST00sIG5vbi1CSU5BUlkgbW9kZS4KCldoaWxlIGNv cHlpbmcsIGlmIGVycm9yIG5ldmVyIGhhcHBlbmVkLCBlcnJvciBzYXZlIHRhYmxlIHdpbGwgYmUg ZHJvcHBlZCBhdCB0aGUgZW5kaW5nIG9mIENPUFkgRlJPTS4KSWYgdGhlIGVycm9yIHNhdmluZyB0 YWJsZSBhbHJlYWR5IGV4aXN0cywgbWVhbmluZyBhdCBsZWFzdCBvbmNlIENPUFkgRlJPTSBlcnJv cnMgaGFzIGhhcHBlbmVkLAp0aGVuIGFsbCB0aGUgZnV0dXJlIGVycm9ycyB3aWxsIGJlIHNhdmVk IHRvIHRoYXQgdGFibGUuCndlIHNhdmUgdGhlIGVycm9yIHRvIGVycm9yIHNhdmluZyB0YWJsZSB1 c2luZyBTUEksIGNvbnN0cnVjdCBhIHF1ZXJ5LCB0aGVuIGV4ZWN1dGUgdGhlIHF1ZXJ5LgotLS0K IGNvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYyAgICAgICAgICAgICAgfCAgIDQgKy0KIGRvYy9z cmMvc2dtbC9yZWYvY29weS5zZ21sICAgICAgICAgICAgICAgfCAgOTMgKysrKysrKysrKysrKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jICAgICAgICAgICAgICB8ICAxMiArKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgICAgICB8IDE0NiArKysrKysrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jICAgICB8IDE2OSArKysr KysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAg ICAgICB8ICAgOCArLQogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jICAgICAgICAgICAgICB8 ICAgMyArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAgICAgICAgICB8ICAgMyAr LQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCB8ICAgNyArCiBzcmMv aW5jbHVkZS9wYXJzZXIva3dsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0ICAgICAgfCAxMzUgKysrKysrKysrKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5Mi5zcWwgICAgICAgICAgIHwgMTA4ICsrKysrKysrKysr KysrKwogMTIgZmlsZXMgY2hhbmdlZCwgNjcwIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYyBiL2NvbnRyaWIvZmls ZV9mZHcvZmlsZV9mZHcuYwppbmRleCAyMTg5YmU4YS4uMmQzZWIzNGYgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYworKysgYi9jb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3 LmMKQEAgLTc1MSw3ICs3NTEsNyBAQCBmaWxlSXRlcmF0ZUZvcmVpZ25TY2FuKEZvcmVpZ25TY2Fu U3RhdGUgKm5vZGUpCiAJICovCiAJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7CiAJZm91bmQgPSBOZXh0Q29weUZyb20o ZmVzdGF0ZS0+Y3N0YXRlLCBlY29udGV4dCwKLQkJCQkJCSBzbG90LT50dHNfdmFsdWVzLCBzbG90 LT50dHNfaXNudWxsKTsKKwkJCQkJCSBzbG90LT50dHNfdmFsdWVzLCBzbG90LT50dHNfaXNudWxs LCBOVUxMKTsKIAlpZiAoZm91bmQpCiAJCUV4ZWNTdG9yZVZpcnR1YWxUdXBsZShzbG90KTsKIApA QCAtMTE4Myw3ICsxMTgzLDcgQEAgZmlsZV9hY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9u ZXJlbCwgaW50IGVsZXZlbCwKIAkJTWVtb3J5Q29udGV4dFJlc2V0KHR1cGNvbnRleHQpOwogCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8odHVwY29udGV4dCk7CiAKLQkJZm91bmQgPSBOZXh0Q29weUZy b20oY3N0YXRlLCBOVUxMLCB2YWx1ZXMsIG51bGxzKTsKKwkJZm91bmQgPSBOZXh0Q29weUZyb20o Y3N0YXRlLCBOVUxMLCB2YWx1ZXMsIG51bGxzLCBOVUxMKTsKIAogCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY29weS5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXggMThlY2M2OWMuLmE2MzcwYzQy IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NvcHkuc2dtbApAQCAtNDQsNiArNDQsNyBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxl CiAgICAgRk9SQ0VfTk9UX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5j b2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQogICAgIEZPUkNFX05VTEwg eyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFi bGU+IFssIC4uLl0gKSB8ICogfQogICAgIEVOQ09ESU5HICc8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZW5jb2RpbmdfbmFtZTwvcmVwbGFjZWFibGU+JworICAgIFNBVkVfRVJST1IgWyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KIDwv c3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApAQCAtNDExLDYgKzQxMiwxNyBAQCBXSEVS RSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29uZGl0aW9uPC9yZXBsYWNlYWJsZT4K ICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+PGxpdGVyYWw+U0FWRV9FUlJPUjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZmllcyB0aGF0IGFueSBkYXRhIGNvbnZl cnNpb24gZmFpbHVyZSB3aGlsZSBjb3B5aW5nIHdpbGwgYXV0b21hdGljYWxseSByZXBvcnQgZXJy b3IgaW5mb3JtYXRpb24gdG8gYSByZWd1bGFyIHRhYmxlLgorICAgICAgVGhpcyBvcHRpb24gaXMg bm90IGFsbG93ZWQgd2hlbiB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IGZvcm1hdC4g Tm90ZSB0aGF0IHRoaXMKKyAgICAgIGlzIG9ubHkgc3VwcG9ydGVkIGluIGN1cnJlbnQgPGNvbW1h bmQ+Q09QWSBGUk9NPC9jb21tYW5kPiBzeW50YXguCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9yZWZzZWN0 MT4KIApAQCAtNTcyLDYgKzU4NCwxMiBAQCBDT1BZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5jb3VudDwvcmVwbGFjZWFibGU+CiAgICAgbnVsbCBzdHJpbmdzIHRvIG51bGwgdmFsdWVz IGFuZCB1bnF1b3RlZCBudWxsIHN0cmluZ3MgdG8gZW1wdHkgc3RyaW5ncy4KICAgIDwvcGFyYT4K IAorICAgPHBhcmE+CisgICAgSWYgdGhlIDxsaXRlcmFsPlNBVkVfRVJST1I8L2xpdGVyYWw+IG9w dGlvbiBpcyBzcGNlaWZpZWQgYW5kIGEgY29udmVyc2lvbiBlcnJvciBvY2N1cnMgd2hpbGUgY29w eWluZywgdGhlbgorICAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHdp bGwgY3JlYXRlIGEgdGFibGUgdG8gc2F2ZSBhbGwgdGhlIGNvbnZlcnNpb24gZXJyb3JzLiBDb252 ZXJzaW9uIGVycm9yCisgICAgIGluY2x1ZGUgZGF0YSB0eXBlIGNvbnZlcnNpb24gZmFpbHVyZSwg ZXh0cmEgZGF0YSBvciBtaXNzaW5nIGRhdGEgaW4gdGhlIHNvdXJjZSBmaWxlLgorICAgPC9wYXJh PgorCiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KQEAgLTk2Miw2ICs5ODAsODEgQEAgdmVy c2lvbnMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi4KICAgICAgY2hl Y2sgYWdhaW5zdCBzb21laG93IGdldHRpbmcgb3V0IG9mIHN5bmMgd2l0aCB0aGUgZGF0YS4KICAg ICA8L3BhcmE+CiAgICA8L3JlZnNlY3QzPgorCisgICA8cmVmc2VjdDM+CisgICAgPHRpdGxlPkVy cm9yIFNhdmUgVGFibGUgPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgSWYgPGxpdGVyYWw+ U0FWRV9FUlJPUjwvbGl0ZXJhbD4gc3BjZWljZmllZCwgYWxsIHRoZSBkYXRhIHR5cGUgY29udmVy c2lvbiBmYWlsIHdoaWxlIGNvcHlpbmcgd2lsbCBhdXRvbWF0aWNhbGx5IHNhdmVkIGluIGEgcmVn dWxhciB0YWJsZS4KKyAgICAgICAgPHhyZWYgbGlua2VuZD0iY29weS1lcnJvcnNhdmUtdGFibGUi Lz4gc2hvd3MgdGhlIGVycm9yIHNhdmUgdGFibGUgbmFtZSwgZGF0YSB0eXBlLCBhbmQgZGVzY3Jp cHRpb24uCisgICAgPC9wYXJhPgorCisgICA8dGFibGUgaWQ9ImNvcHktZXJyb3JzYXZlLXRhYmxl Ij4KKworICAgIDx0aXRsZT5DT1BZIEVSUk9SIFNBVkUgVEFCTEUgPC90aXRsZT4KKworICAgIDx0 Z3JvdXAgY29scz0iMyI+CisgICAgIDx0aGVhZD4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5 PkNvbHVtbiBuYW1lPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGF0YSB0eXBlPC9lbnRyeT4KKyAg ICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgIDwvdGhl YWQ+CisKKyAgICAgIDx0Ym9keT4KKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVy YWw+ZmlsZW5hbWU8L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnRleHQ8 L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+VGhlIHBhdGggbmFtZSBvZiB0aGUgaW5wdXQg ZmlsZTwvZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRy eT4gPGxpdGVyYWw+bGluZW5vPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlw ZT5iaWdpbnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+TGluZSBudW1iZXIgd2hlcmUg ZXJyb3Igb2NjdXJyZWQsIGNvdW50aW5nIGZyb20gMTwvZW50cnk+CisgICAgICAgPC9yb3c+CisK KyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+bGluZTwvbGl0ZXJhbD4gPC9l bnRyeT4KKyAgICAgICA8ZW50cnk+PHR5cGU+dGV4dDwvdHlwZT48L2VudHJ5PgorICAgICAgIDxl bnRyeT5SYXcgY29udGVudCBvZiBlcnJvciBvY2N1cmluZyBsaW5lPC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PiA8bGl0ZXJhbD5maWVsZDwvbGl0 ZXJhbD4gPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PHR5cGU+dGV4dDwvdHlwZT48L2VudHJ5Pgor ICAgICAgIDxlbnRyeT5GaWVsZCBuYW1lIG9mIHRoZSBlcnJvciBvY2N1cmluZzwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+c291 cmNlPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT50ZXh0PC90eXBlPjwv ZW50cnk+CisgICAgICAgPGVudHJ5PlJhdyBjb250ZW50IG9mIHRoZSBlcnJvciBvY2N1cmluZyBm aWVsZDwvZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAgICAgICA8cm93PgorICAgICAgIDxlbnRy eT4gPGxpdGVyYWw+ZXJyX21lc3NhZ2UgPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRy eT48dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRoZSBlcnJvciBtZXNz YWdlIHRleHQgPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAgICAg PGVudHJ5PiA8bGl0ZXJhbD5lcnJfZGV0YWlsPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxl bnRyeT48dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PkRldGFpbGVkIGVy cm9yIG1lc3NhZ2UgPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKworICAgICAgIDxyb3c+CisgICAg ICAgPGVudHJ5PiA8bGl0ZXJhbD5lcnJvcmNvZGUgPC9saXRlcmFsPiA8L2VudHJ5PgorICAgICAg IDxlbnRyeT48dHlwZT50ZXh0PC90eXBlPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRoZSBlcnJv ciBjb2RlIGZvciB0aGUgY29weWluZyBlcnJvcjwvZW50cnk+CisgICAgICAgPC9yb3c+CisKKyAg ICAgIDwvdGJvZHk+CisgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgICA8L3JlZnNlY3Qz PgorCiAgIDwvcmVmc2VjdDI+CiAgPC9yZWZzZWN0MT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCmluZGV4IGNm YWQ0N2I1Li5iYzRhZjEwYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwpAQCAtNDE5LDYgKzQxOSw3IEBAIFBy b2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJYm9vbAkJZm9ybWF0X3NwZWNp ZmllZCA9IGZhbHNlOwogCWJvb2wJCWZyZWV6ZV9zcGVjaWZpZWQgPSBmYWxzZTsKIAlib29sCQlo ZWFkZXJfc3BlY2lmaWVkID0gZmFsc2U7CisJYm9vbAkJc2F2ZV9lcnJvcl9zcGVjaWZpZWQgPSBm YWxzZTsKIAlMaXN0Q2VsbCAgICpvcHRpb247CiAKIAkvKiBTdXBwb3J0IGV4dGVybmFsIHVzZSBm b3Igb3B0aW9uIHNhbml0eSBjaGVja2luZyAqLwpAQCAtNDU4LDYgKzQ1OSwxMyBAQCBQcm9jZXNz Q29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJZnJlZXplX3NwZWNpZmllZCA9IHRy dWU7CiAJCQlvcHRzX291dC0+ZnJlZXplID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CiAJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2F2ZV9lcnJvciIpID09IDApCisJCXsK KwkJCWlmIChzYXZlX2Vycm9yX3NwZWNpZmllZCkKKwkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxl bShkZWZlbCwgcHN0YXRlKTsKKwkJCXNhdmVfZXJyb3Jfc3BlY2lmaWVkID0gdHJ1ZTsKKwkJCW9w dHNfb3V0LT5zYXZlX2Vycm9yID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CisJCX0KIAkJZWxzZSBp ZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiZGVsaW1pdGVyIikgPT0gMCkKIAkJewogCQkJaWYg KG9wdHNfb3V0LT5kZWxpbSkKQEAgLTU5OCw2ICs2MDYsMTAgQEAgUHJvY2Vzc0NvcHlPcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CiAJCQkJIGVycm1zZygiY2Fubm90IHNwZWNpZnkgREVGQVVMVCBpbiBCSU5BUlkgbW9kZSIpKSk7 CiAKKwlpZiAob3B0c19vdXQtPmJpbmFyeSAmJiBvcHRzX291dC0+c2F2ZV9lcnJvcikKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVy cm1zZygiY2Fubm90IHNwZWNpZnkgU0FWRV9FUlJPUiBpbiBCSU5BUlkgbW9kZSIpKSk7CiAJLyog U2V0IGRlZmF1bHRzIGZvciBvbWl0dGVkIG9wdGlvbnMgKi8KIAlpZiAoIW9wdHNfb3V0LT5kZWxp bSkKIAkJb3B0c19vdXQtPmRlbGltID0gb3B0c19vdXQtPmNzdl9tb2RlID8gIiwiIDogIlx0IjsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IGY0ODYxNjUyLi45MGEyMjQzMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaCIKICNpbmNsdWRl ICJleGVjdXRvci90dXB0YWJsZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRl ICJsaWJwcS9wcWZvcm1hdC5oIgpAQCAtNjUyLDEwICs2NTMsMTIgQEAgQ29weUZyb20oQ29weUZy b21TdGF0ZSBjc3RhdGUpCiAJYm9vbAkJaGFzX2JlZm9yZV9pbnNlcnRfcm93X3RyaWc7CiAJYm9v bAkJaGFzX2luc3RlYWRfaW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJCWxlYWZwYXJ0X3VzZV9tdWx0 aV9pbnNlcnQgPSBmYWxzZTsKKwlTdHJpbmdJbmZvCWVycl9zYXZlX2J1ZjsKIAogCUFzc2VydChj c3RhdGUtPnJlbCk7CiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNzdGF0ZS0+cmFuZ2VfdGFibGUpID09 IDEpOwotCisJaWYgKGNzdGF0ZS0+b3B0cy5zYXZlX2Vycm9yKQorCQlBc3NlcnQoY3N0YXRlLT5l c2NvbnRleHQpOwogCS8qCiAJICogVGhlIHRhcmdldCBtdXN0IGJlIGEgcGxhaW4sIGZvcmVpZ24s IG9yIHBhcnRpdGlvbmVkIHJlbGF0aW9uLCBvciBoYXZlCiAJICogYW4gSU5TVEVBRCBPRiBJTlNF UlQgcm93IHRyaWdnZXIuICAoQ3VycmVudGx5LCBzdWNoIHRyaWdnZXJzIGFyZSBvbmx5CkBAIC05 NTIsNiArOTU1LDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJZXJyY2FsbGJh Y2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwogCWVycm9yX2NvbnRleHRfc3RhY2sg PSAmZXJyY2FsbGJhY2s7CiAKKwllcnJfc2F2ZV9idWYgPSBtYWtlU3RyaW5nSW5mbygpOwogCWZv ciAoOzspCiAJewogCQlUdXBsZVRhYmxlU2xvdCAqbXlzbG90OwpAQCAtOTg5LDggKzk5Myw1NCBA QCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJRXhlY0NsZWFyVHVwbGUobXlzbG90 KTsKIAogCQkvKiBEaXJlY3RseSBzdG9yZSB0aGUgdmFsdWVzL251bGxzIGFycmF5IGluIHRoZSBz bG90ICovCi0JCWlmICghTmV4dENvcHlGcm9tKGNzdGF0ZSwgZWNvbnRleHQsIG15c2xvdC0+dHRz X3ZhbHVlcywgbXlzbG90LT50dHNfaXNudWxsKSkKKwkJaWYgKCFOZXh0Q29weUZyb20oY3N0YXRl LCBlY29udGV4dCwgbXlzbG90LT50dHNfdmFsdWVzLCBteXNsb3QtPnR0c19pc251bGwsIGVycl9z YXZlX2J1ZikpCisJCXsKKwkJCWlmIChjc3RhdGUtPm9wdHMuc2F2ZV9lcnJvcikKKwkJCXsKKwkJ CQlBc3NlcnQoY3N0YXRlLT5lcnJvcl9uc3AgJiYgY3N0YXRlLT5lcnJvcl9yZWwpOworCisJCQkJ aWYgKGNzdGF0ZS0+ZXJyb3Jfcm93c19jbnQgPiAwKQorCQkJCXsKKwkJCQkJZXJlcG9ydChOT1RJ Q0UsCisJCQkJCQkJZXJybXNnKCIlbGQgcm93cyB3ZXJlIHNraXBwZWQgYmVjYXVzZSBvZiBlcnJv ci4iCisJCQkJCQkJCQkiIHNraXBwZWQgcm93IHNhdmVkIHRvIHRhYmxlICVzLiVzIiwKKwkJCQkJ CQkJCWNzdGF0ZS0+ZXJyb3Jfcm93c19jbnQsCisJCQkJCQkJCQljc3RhdGUtPmVycm9yX25zcCwg Y3N0YXRlLT5lcnJvcl9yZWwpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJU3RyaW5n SW5mb0RhdGEgCXF1ZXJ5YnVmOworCQkJCQlpZiAoY3N0YXRlLT5lcnJvcl9maXJzdHRpbWUpCisJ CQkJCXsKKwkJCQkJCWVyZXBvcnQoTk9USUNFLAorCQkJCQkJCQllcnJtc2coIk5vIGVycm9yIGhh cHBlbmVkLiIKKwkJCQkJCQkJCQkiRXJyb3IgaG9sZGluZyB0YWJsZSAlcy4lcyB3aWxsIGJlIGRy b3BlZCIsCisJCQkJCQkJCQkJY3N0YXRlLT5lcnJvcl9uc3AsIGNzdGF0ZS0+ZXJyb3JfcmVsKSk7 CisJCQkJCQlpbml0U3RyaW5nSW5mbygmcXVlcnlidWYpOworCQkJCQkJYXBwZW5kU3RyaW5nSW5m bygmcXVlcnlidWYsCisJCQkJCQkJCQkJIkRST1AgVEFCTEUgSUYgRVhJU1RTICVzLiVzIENBU0NB REUgIiwKKwkJCQkJCQkJCQljc3RhdGUtPmVycm9yX25zcCwgY3N0YXRlLT5lcnJvcl9yZWwpOwor CisJCQkJCQlpZiAoU1BJX2Nvbm5lY3QoKSAhPSBTUElfT0tfQ09OTkVDVCkKKwkJCQkJCQllbG9n KEVSUk9SLCAiU1BJX2Nvbm5lY3QgZmFpbGVkIik7CisJCQkJCQlpZiAoU1BJX2V4ZWN1dGUocXVl cnlidWYuZGF0YSwgZmFsc2UsIDApICE9IFNQSV9PS19VVElMSVRZKQorCQkJCQkJCWVsb2coRVJS T1IsICJTUElfZXhlYyBmYWlsZWQ6ICVzIiwgcXVlcnlidWYuZGF0YSk7CisJCQkJCQlpZiAoU1BJ X2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCisJCQkJCQkJZWxvZyhFUlJPUiwgIlNQSV9maW5p c2ggZmFpbGVkIik7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJZXJlcG9ydChOT1RJQ0UsCisJ CQkJCQkJCWVycm1zZygiTm8gZXJyb3IgaGFwcGVuZWQuICIKKwkJCQkJCQkJCQkiQWxsIHRoZSBw YXN0IGVycm9yIGhvbGRpbmcgc2F2ZWQgYXQgJXMuJXMgIiwKKwkJCQkJCQkJCQljc3RhdGUtPmVy cm9yX25zcCwgY3N0YXRlLT5lcnJvcl9yZWwpKTsKKwkJCQl9CisJCQl9CiAJCQlicmVhazsKKwkJ fQorCisJCS8qIFNvZnQgZXJyb3Igb2NjdXJlZCwgc2tpcCB0aGlzIHR1cGxlLiAqLworCQlpZiAo Y3N0YXRlLT5vcHRzLnNhdmVfZXJyb3IgJiYgY3N0YXRlLT5saW5lX2Vycm9yX29jY3VyZWQpCisJ CQljb250aW51ZTsKIAogCQlFeGVjU3RvcmVWaXJ0dWFsVHVwbGUobXlzbG90KTsKIApAQCAtMTQ0 NCw2ICsxNDk0LDk4IEBAIEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQl9CiAJ fQogCisJLyogU2V0IHVwIHNvZnQgZXJyb3IgaGFuZGxlciBmb3IgU0FWRV9FUlJPUiAqLworCWlm IChjc3RhdGUtPm9wdHMuc2F2ZV9lcnJvcikKKwl7CisJCWNoYXIJKmVycl9uc3A7CisJCWNoYXIJ ZXJyb3JfcmVsW05BTUVEQVRBTEVOXTsKKwkJU3RyaW5nSW5mb0RhdGEgCXF1ZXJ5YnVmOworCQli b29sCQlpc251bGw7CisJCWJvb2wJCWVycm9yX3RhYmxlX29rOworCisJCWNzdGF0ZS0+ZXNjb250 ZXh0ID0gbWFrZU5vZGUoRXJyb3JTYXZlQ29udGV4dCk7CisJCWNzdGF0ZS0+ZXNjb250ZXh0LT50 eXBlID0gVF9FcnJvclNhdmVDb250ZXh0OworCQljc3RhdGUtPmVzY29udGV4dC0+ZGV0YWlsc193 YW50ZWQgPSB0cnVlOworCQljc3RhdGUtPmVzY29udGV4dC0+ZXJyb3Jfb2NjdXJyZWQgPSBmYWxz ZTsKKworCQlzbnByaW50ZihlcnJvcl9yZWwsIHNpemVvZihlcnJvcl9yZWwpLCAiJXMiLAorCQkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNzdGF0ZS0+cmVsKSk7CisJCXN0cmxjYXQoZXJy b3JfcmVsLCJfZXJyb3IiLCBOQU1FREFUQUxFTik7CisJCWVycl9uc3AgPSBnZXRfbmFtZXNwYWNl X25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2UoY3N0YXRlLT5yZWwpKTsKKworCQlpbml0U3RyaW5n SW5mbygmcXVlcnlidWYpOworCQkvKgorCQkqCisJCSogVmVyaWZ5IHdoZXRoZXIgdGhlIGVycl9u c3AuZXJyb3JfcmVsIHRhYmxlIGFscmVhZHkgZXhpc3RzLCBhbmQgaWYgc28sCisJCSogZXhhbWlu ZSBpdHMgY29sdW1uIG5hbWVzIGFuZCBkYXRhIHR5cGVzLgorCQkqLworCQlhcHBlbmRTdHJpbmdJ bmZvKCZxdWVyeWJ1ZiwKKwkJCQkJCSJTRUxFQ1QgKGFycmF5X2FnZyhwYS5hdHRuYW1lIE9SREVS IEJZIHBhLmF0dG51bSkgIgorCQkJCQkJCSI9ICd7Y3RpZCxmaWxlbmFtZSxsaW5lbm8sbGluZSxm aWVsZCxzb3VyY2UsZXJyX21lc3NhZ2UsZXJyX2RldGFpbCxlcnJvcmNvZGV9JykgIgorCQkJCQkJ CSJBTkQgKEFSUkFZX0FHRyhwdC50eXBuYW1lIE9SREVSIEJZIHBhLmF0dG51bSkgIgorCQkJCQkJ CSI9ICd7dGlkLHRleHQsaW50OCx0ZXh0LHRleHQsdGV4dCx0ZXh0LHRleHQsdGV4dH0nKSAiCisJ CQkJCQkJIkZST00gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgcGEgIgorCQkJCQkJCSJKT0lOIHBn X2NhdGFsb2cucGdfY2xhc3MJcGMgT04gcGMub2lkID0gcGEuYXR0cmVsaWQgIgorCQkJCQkJCSJK T0lOIHBnX2NhdGFsb2cucGdfdHlwZSAJcHQgT04gcHQub2lkID0gcGEuYXR0dHlwaWQgIgorCQkJ CQkJCSJKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIHBuICIKKwkJCQkJCQkiT04gcG4ub2lk ID0gcGMucmVsbmFtZXNwYWNlIFdIRVJFICIpOworCisJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5 YnVmLAorCQkJCQkJCSJyZWxuYW1lID0gJCQlcyQkIEFORCBwbi5uc3BuYW1lID0gJCQlcyQkICIK KwkJCQkJCQkiIEFORCBwYS5hdHRudW0gPj0gLTEgQU5EIE5PVCBhdHRpc2Ryb3BwZWQgIiwKKwkJ CQkJCQllcnJvcl9yZWwsIGVycl9uc3ApOworCisJCWlmIChTUElfY29ubmVjdCgpICE9IFNQSV9P S19DT05ORUNUKQorCQkJZWxvZyhFUlJPUiwgIlNQSV9jb25uZWN0IGZhaWxlZCIpOworCisJCWlm IChTUElfZXhlY3V0ZShxdWVyeWJ1Zi5kYXRhLCBmYWxzZSwgMCkgIT0gU1BJX09LX1NFTEVDVCkK KwkJCWVsb2coRVJST1IsICJTUElfZXhlYyBmYWlsZWQ6ICVzIiwgcXVlcnlidWYuZGF0YSk7CisK KwkJZXJyb3JfdGFibGVfb2sgPSBEYXR1bUdldEJvb2woU1BJX2dldGJpbnZhbChTUElfdHVwdGFi bGUtPnZhbHNbMF0sCisJCQkJCQkJCQkgICBTUElfdHVwdGFibGUtPnR1cGRlc2MsCisJCQkJCQkJ CQkgICAxLCAmaXNudWxsKSk7CisKKwkJLyogTm8gZXJyX25zcC5lcnJvcl9yZWwgdGFibGUgdGhl biBjcmVhdGUgaXQgZm9yIGhvbGRpbmcgZXJyb3IuICovCisJCWlmIChpc251bGwpCisJCXsKKwkJ CXJlc2V0U3RyaW5nSW5mbygmcXVlcnlidWYpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmcXVlcnli dWYsCisJCQkJCQkJIkNSRUFURSBUQUJMRSAlcy4lcyAoRklMRU5BTUUgVEVYVCwgTElORU5PIEJJ R0lOVCwgTElORSBURVhULCAiCisJCQkJCQkJIkZJRUxEIFRFWFQsIFNPVVJDRSBURVhULCBFUlJf TUVTU0FHRSBURVhULCAiCisJCQkJCQkJIkVSUl9ERVRBSUwgVEVYVCwgRVJST1JDT0RFIFRFWFQp IiwKKwkJCQkJCQkgZXJyX25zcCxlcnJvcl9yZWwpOworCQkJaWYgKFNQSV9leGVjdXRlKHF1ZXJ5 YnVmLmRhdGEsIGZhbHNlLCAwKSAhPSBTUElfT0tfVVRJTElUWSkKKwkJCQllbG9nKEVSUk9SLCAi U1BJX2V4ZWMgZmFpbGVkOiAlcyIsIHF1ZXJ5YnVmLmRhdGEpOworCisJCQljc3RhdGUtPmVycm9y X2ZpcnN0dGltZSA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoZXJyb3JfdGFibGVfb2spCisJCQkv KiBlcnJvciBzYXZlIHRhYmxlIGFscmVhZHkgZXhpc3RzLiBTZXQgZXJyb3JfZmlyc3R0aW1lIHRv IGZhbHNlICovCisJCQljc3RhdGUtPmVycm9yX2ZpcnN0dGltZSA9IGZhbHNlOworCQllbHNlIGlm KCFlcnJvcl90YWJsZV9vaykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coIkVycm9y IHNhdmUgdGFibGUgJXMuJXMgYWxyZWFkeSBleGlzdHMuICIKKwkJCQkJCQkJICJDYW5ub3QgdXNl IGl0IGZvciBDT1BZIEZST00gZXJyb3Igc2F2aW5nIiwKKwkJCQkJCQkJIGVycl9uc3AsIGVycm9y X3JlbCkpKTsKKworCQlpZiAoU1BJX2ZpbmlzaCgpICE9IFNQSV9PS19GSU5JU0gpCisJCQllbG9n KEVSUk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKKworCQkvKiB0aHNlcyBpbmZvcm1hdGlvbiBp cyBuZWNlc3NhcnksIG5vIGVycm9yIHRoZW4gZHJvcCBlcnJfc3AuZXJyb3JfcmVsIHRhYmxlKi8K KwkJY3N0YXRlLT5lcnJvcl9yZWwgPSBwc3RyZHVwKGVycm9yX3JlbCk7CisJCWNzdGF0ZS0+ZXJy b3JfbnNwID0gZXJyX25zcDsKKwl9CisJZWxzZQorCXsKKwkJLyogc2V0IHRvIE5VTEwgKi8KKwkJ Y3N0YXRlLT5lcnJvcl9yZWwgPSBOVUxMOworCQljc3RhdGUtPmVycm9yX25zcCA9IE5VTEw7CisJ CWNzdGF0ZS0+ZXNjb250ZXh0ID0gTlVMTDsKKwl9CisKKwljc3RhdGUtPmVycm9yX3Jvd3NfY250 ID0gMDsgIAkJLyogc2V0IHRoZSBkZWZhdWx0IHRvIDAgKi8KKwljc3RhdGUtPmxpbmVfZXJyb3Jf b2NjdXJlZCA9IGZhbHNlOwkvKiBkZWZhdWx0LCBhc3N1bWUgY29udmVyc2lvbiBiZSBvay4gKi8K KwogCS8qIENvbnZlcnQgY29udmVydF9zZWxlY3RpdmVseSBuYW1lIGxpc3QgdG8gcGVyLWNvbHVt biBmbGFncyAqLwogCWlmIChjc3RhdGUtPm9wdHMuY29udmVydF9zZWxlY3RpdmVseSkKIAl7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggZjU1MzczNDUuLmU3YjdhODE2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC02NiwxMCArNjYsMTIgQEAKICNp bmNsdWRlICJjb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJl eGVjdXRvci9zcGkuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBx L3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK QEAgLTg1Miw3ICs4NTQsNyBAQCBOZXh0Q29weUZyb21SYXdGaWVsZHMoQ29weUZyb21TdGF0ZSBj c3RhdGUsIGNoYXIgKioqZmllbGRzLCBpbnQgKm5maWVsZHMpCiAgKi8KIGJvb2wKIE5leHRDb3B5 RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAotCQkJIERh dHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzKQorCQkJIERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxz LCBTdHJpbmdJbmZvIGVycl9zYXZlX2J1ZikKIHsKIAlUdXBsZURlc2MJdHVwRGVzYzsKIAlBdHRy TnVtYmVyCW51bV9waHlzX2F0dHJzLApAQCAtODg1LDExICs4ODcsNDggQEAgTmV4dENvcHlGcm9t KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCWlmICghTmV4 dENvcHlGcm9tUmF3RmllbGRzKGNzdGF0ZSwgJmZpZWxkX3N0cmluZ3MsICZmbGRjdCkpCiAJCQly ZXR1cm4gZmFsc2U7CiAKKwkJLyogcmVzZXQgbGluZV9lcnJvcl9vY2N1cmVkIHRvIGZhbHNlIGZv ciBuZXh0IG5ldyBsaW5lLiAqLworCQlpZiAoY3N0YXRlLT5saW5lX2Vycm9yX29jY3VyZWQpCisJ CQljc3RhdGUtPmxpbmVfZXJyb3Jfb2NjdXJlZCA9IGZhbHNlOworCiAJCS8qIGNoZWNrIGZvciBv dmVyZmxvd2luZyBmaWVsZHMgKi8KIAkJaWYgKGF0dHJfY291bnQgPiAwICYmIGZsZGN0ID4gYXR0 cl9jb3VudCkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NP UFlfRklMRV9GT1JNQVQpLAotCQkJCQkgZXJybXNnKCJleHRyYSBkYXRhIGFmdGVyIGxhc3QgZXhw ZWN0ZWQgY29sdW1uIikpKTsKKwkJeworCQkJaWYoY3N0YXRlLT5vcHRzLnNhdmVfZXJyb3IpCisJ CQl7CisJCQkJY2hhcgkqZXJybXNnX2V4dHJhID0gImV4dHJhIGRhdGEgYWZ0ZXIgbGFzdCBleHBl Y3RlZCBjb2x1bW4iOworCisJCQkJcmVzZXRTdHJpbmdJbmZvKGVycl9zYXZlX2J1Zik7CisJCQkJ LyogYWRkIGxpbmUgYnVmLCBldGMgZm9yIGxpbmUgaGF2ZSBleHRyYSBkYXRhIHRvIGVycm9yIHNh dmUgdGFibGUqLworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXJyX3NhdmVfYnVmLAorCQkJCQkJCQki SU5TRVJUIElOVE8gJXMuJXMoZmlsZW5hbWUsIGxpbmVubyxsaW5lLCAiCisJCQkJCQkJCSJlcnJf bWVzc2FnZSwgZXJyb3Jjb2RlKSAiCisJCQkJCQkJCSJTRUxFQ1QgJCQlcyQkLCAkJCVsZCQkOjpi aWdpbnQsICQkJXMkJCwgJCQlcyQkLCAiCisJCQkJCQkJCSIkJCVzJCQiLAorCQkJCQkJCQljc3Rh dGUtPmVycm9yX25zcCwgY3N0YXRlLT5lcnJvcl9yZWwsCisJCQkJCQkJCWNzdGF0ZS0+ZmlsZW5h bWUgPyBjc3RhdGUtPmZpbGVuYW1lIDogIlNURElOIiwKKwkJCQkJCQkJY3N0YXRlLT5jdXJfbGlu ZW5vLCBjc3RhdGUtPmxpbmVfYnVmLmRhdGEsCisJCQkJCQkJCWVycm1zZ19leHRyYSwKKwkJCQkJ CQkJdW5wYWNrX3NxbF9zdGF0ZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFUKSk7CisKKwkJ CQlpZiAoU1BJX2Nvbm5lY3QoKSAhPSBTUElfT0tfQ09OTkVDVCkKKwkJCQkJZWxvZyhFUlJPUiwg IlNQSV9jb25uZWN0IGZhaWxlZCIpOworCisJCQkJaWYgKFNQSV9leGVjdXRlKGVycl9zYXZlX2J1 Zi0+ZGF0YSwgZmFsc2UsIDApICE9IFNQSV9PS19JTlNFUlQpCisJCQkJCWVsb2coRVJST1IsICJT UElfZXhlYyBmYWlsZWQ6ICVzIiwgZXJyX3NhdmVfYnVmLT5kYXRhKTsKKworCQkJCWlmIChTUElf ZmluaXNoKCkgIT0gU1BJX09LX0ZJTklTSCkKKwkJCQkJZWxvZyhFUlJPUiwgIlNQSV9maW5pc2gg ZmFpbGVkIik7CisKKwkJCQljc3RhdGUtPmxpbmVfZXJyb3Jfb2NjdXJlZCA9IHRydWU7CisJCQkJ Y3N0YXRlLT5lcnJvcl9yb3dzX2NudCsrOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJZWxz ZQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJ TEVfRk9STUFUKSwKKwkJCQkJCWVycm1zZygiZXh0cmEgZGF0YSBhZnRlciBsYXN0IGV4cGVjdGVk IGNvbHVtbiIpKSk7CisJCX0KIAogCQlmaWVsZG5vID0gMDsKIApAQCAtOTAxLDEwICs5NDAsNDYg QEAgTmV4dENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRl eHQsCiAJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cERlc2MsIG0p OwogCiAJCQlpZiAoZmllbGRubyA+PSBmbGRjdCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCi0JCQkJCQkgZXJybXNnKCJt aXNzaW5nIGRhdGEgZm9yIGNvbHVtbiBcIiVzXCIiLAotCQkJCQkJCQlOYW1lU3RyKGF0dC0+YXR0 bmFtZSkpKSk7CisJCQl7CisJCQkJaWYoY3N0YXRlLT5vcHRzLnNhdmVfZXJyb3IpCisJCQkJewor CQkJCQljaGFyCWVycm1zZ1sxMjhdOworCQkJCQlzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJt c2cpLAorCQkJCQkJCSJtaXNzaW5nIGRhdGEgZm9yIGNvbHVtbiBcIiVzXCIiLAorCQkJCQkJCU5h bWVTdHIoYXR0LT5hdHRuYW1lKSk7CisKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKGVycl9zYXZlX2J1 Zik7CisJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXJyX3NhdmVfYnVmLAorCQkJCQkJCQkJIklOU0VS VCBJTlRPICVzLiVzKGZpbGVuYW1lLGxpbmVubyxsaW5lLCBmaWVsZCwgIgorCQkJCQkJCQkJImVy cl9tZXNzYWdlLCBlcnJvcmNvZGUpICIKKwkJCQkJCQkJCSJTRUxFQ1QgJCQlcyQkLCAkJCVsZCQk OjpiaWdpbnQsICQkJXMkJCwgJCQlcyQkLCAiCisJCQkJCQkJCQkiJCQlcyQkLCAkJCVzJCQgIiwK KwkJCQkJCQkJCWNzdGF0ZS0+ZXJyb3JfbnNwLCBjc3RhdGUtPmVycm9yX3JlbCwKKwkJCQkJCQkJ CWNzdGF0ZS0+ZmlsZW5hbWUgPyBjc3RhdGUtPmZpbGVuYW1lIDogIlNURElOIiwKKwkJCQkJCQkJ CWNzdGF0ZS0+Y3VyX2xpbmVubywgY3N0YXRlLT5saW5lX2J1Zi5kYXRhLAorCQkJCQkJCQkJTmFt ZVN0cihhdHQtPmF0dG5hbWUpLCBlcnJtc2csCisJCQkJCQkJCQl1bnBhY2tfc3FsX3N0YXRlKEVS UkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpKTsKKworCQkJCQlpZiAoU1BJX2Nvbm5lY3QoKSAh PSBTUElfT0tfQ09OTkVDVCkKKwkJCQkJCWVsb2coRVJST1IsICJTUElfY29ubmVjdCBmYWlsZWQi KTsKKworCQkJCQlpZiAoU1BJX2V4ZWN1dGUoZXJyX3NhdmVfYnVmLT5kYXRhLCBmYWxzZSwgMCkg IT0gU1BJX09LX0lOU0VSVCkKKwkJCQkJCWVsb2coRVJST1IsICJTUElfZXhlYyBmYWlsZWQ6ICVz IiwgZXJyX3NhdmVfYnVmLT5kYXRhKTsKKworCQkJCQlpZiAoU1BJX2ZpbmlzaCgpICE9IFNQSV9P S19GSU5JU0gpCisJCQkJCQllbG9nKEVSUk9SLCAiU1BJX2ZpbmlzaCBmYWlsZWQiKTsKKworCQkJ CQljc3RhdGUtPmxpbmVfZXJyb3Jfb2NjdXJlZCA9IHRydWU7CisJCQkJCWNzdGF0ZS0+ZXJyb3Jf cm93c19jbnQrKzsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFU KSwKKwkJCQkJCQkgZXJybXNnKCJtaXNzaW5nIGRhdGEgZm9yIGNvbHVtbiBcIiVzXCIiLAorCQkJ CQkJCQkJTmFtZVN0cihhdHQtPmF0dG5hbWUpKSkpOworCQkJfQorCiAJCQlzdHJpbmcgPSBmaWVs ZF9zdHJpbmdzW2ZpZWxkbm8rK107CiAKIAkJCWlmIChjc3RhdGUtPmNvbnZlcnRfc2VsZWN0X2Zs YWdzICYmCkBAIC05NTYsMTUgKzEwMzEsODUgQEAgTmV4dENvcHlGcm9tKENvcHlGcm9tU3RhdGUg Y3N0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCQkJdmFsdWVzW21dID0gRXhlY0V2YWxF eHByKGRlZmV4cHJzW21dLCBlY29udGV4dCwgJm51bGxzW21dKTsKIAkJCX0KIAkJCWVsc2UKLQkJ CQl2YWx1ZXNbbV0gPSBJbnB1dEZ1bmN0aW9uQ2FsbCgmaW5fZnVuY3Rpb25zW21dLAotCQkJCQkJ CQkJCQkgIHN0cmluZywKLQkJCQkJCQkJCQkJICB0eXBpb3BhcmFtc1ttXSwKLQkJCQkJCQkJCQkJ ICBhdHQtPmF0dHR5cG1vZCk7CisJCQl7CisJCQkJLyoKKwkJCQkqCisJCQkJKiBJbnB1dEZ1bmN0 aW9uQ2FsbCBpcyBtb3JlIGZhc3RlciB0aGFuIElucHV0RnVuY3Rpb25DYWxsU2FmZS4KKwkJCQkq CisJCQkJKi8KKwkJCQlpZighY3N0YXRlLT5vcHRzLnNhdmVfZXJyb3IpCisJCQkJeworCQkJCQl2 YWx1ZXNbbV0gPSBJbnB1dEZ1bmN0aW9uQ2FsbCgmaW5fZnVuY3Rpb25zW21dLAorCQkJCQkJCQkJ CQkJc3RyaW5nLAorCQkJCQkJCQkJCQkJdHlwaW9wYXJhbXNbbV0sCisJCQkJCQkJCQkJCQlhdHQt PmF0dHR5cG1vZCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmICghSW5wdXRGdW5j dGlvbkNhbGxTYWZlKCZpbl9mdW5jdGlvbnNbbV0sCisJCQkJCQkJCQkJCXN0cmluZywKKwkJCQkJ CQkJCQkJdHlwaW9wYXJhbXNbbV0sCisJCQkJCQkJCQkJCWF0dC0+YXR0dHlwbW9kLAorCQkJCQkJ CQkJCQkoTm9kZSAqKSBjc3RhdGUtPmVzY29udGV4dCwKKwkJCQkJCQkJCQkJJnZhbHVlc1ttXSkp CisJCQkJCXsKKwkJCQkJCWNoYXIJZXJyY29kZVsxMl07CisJCQkJCQljaGFyCSplcnJfZGV0YWls OwogCisJCQkJCQlzbnByaW50ZihlcnJjb2RlLCBzaXplb2YoZXJyY29kZSksICIlcyIsCisJCQkJ CQkJCSB1bnBhY2tfc3FsX3N0YXRlKGNzdGF0ZS0+ZXNjb250ZXh0LT5lcnJvcl9kYXRhLT5zcWxl cnJjb2RlKSk7CisKKwkJCQkJCWlmICghY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX2RhdGEtPmRl dGFpbCkKKwkJCQkJCQllcnJfZGV0YWlsID0gTlVMTDsKKwkJCQkJCWVsc2UKKwkJCQkJCQllcnJf ZGV0YWlsID0gY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX2RhdGEtPmRldGFpbDsKKworCQkJCQkJ cmVzZXRTdHJpbmdJbmZvKGVycl9zYXZlX2J1Zik7CisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKGVy cl9zYXZlX2J1ZiwKKwkJCQkJCQkJCQkiSU5TRVJUIElOVE8gJXMuJXMoZmlsZW5hbWUsIGxpbmVu byxsaW5lLGZpZWxkLCAiCisJCQkJCQkJCQkJInNvdXJjZSwgZXJyX21lc3NhZ2UsIGVycm9yY29k ZSxlcnJfZGV0YWlsKSAiCisJCQkJCQkJCQkJIlNFTEVDVCAkJCVzJCQsICQkJWxkJCQ6OmJpZ2lu dCwgJCQlcyQkLCAkJCVzJCQsICIKKwkJCQkJCQkJCQkiJCQlcyQkLCAkJCVzJCQsICQkJXMkJCwg IiwKKwkJCQkJCQkJCQljc3RhdGUtPmVycm9yX25zcCwgY3N0YXRlLT5lcnJvcl9yZWwsCisJCQkJ CQkJCQkJY3N0YXRlLT5maWxlbmFtZSA/IGNzdGF0ZS0+ZmlsZW5hbWUgOiAiU1RESU4iLAorCQkJ CQkJCQkJCWNzdGF0ZS0+Y3VyX2xpbmVubywgY3N0YXRlLT5saW5lX2J1Zi5kYXRhLAorCQkJCQkJ CQkJCWNzdGF0ZS0+Y3VyX2F0dG5hbWUsIHN0cmluZywKKwkJCQkJCQkJCQljc3RhdGUtPmVzY29u dGV4dC0+ZXJyb3JfZGF0YS0+bWVzc2FnZSwKKwkJCQkJCQkJCQllcnJjb2RlKTsKKworCQkJCQkJ aWYgKCFlcnJfZGV0YWlsKQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXJyX3NhdmVfYnVmLCAi TlVMTDo6dGV4dCIpOworCQkJCQkJZWxzZQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXJyX3Nh dmVfYnVmLCIkJCVzJCQiLCBlcnJfZGV0YWlsKTsKKworCQkJCQkJaWYgKFNQSV9jb25uZWN0KCkg IT0gU1BJX09LX0NPTk5FQ1QpCisJCQkJCQkJZWxvZyhFUlJPUiwgIlNQSV9jb25uZWN0IGZhaWxl ZCIpOworCQkJCQkJaWYgKFNQSV9leGVjdXRlKGVycl9zYXZlX2J1Zi0+ZGF0YSwgZmFsc2UsIDAp ICE9IFNQSV9PS19JTlNFUlQpCisJCQkJCQkJZWxvZyhFUlJPUiwgIlNQSV9leGVjdXRlIGZhaWxl ZDogJXMiLCBlcnJfc2F2ZV9idWYtPmRhdGEpOworCisJCQkJCQlpZiAoU1BJX2ZpbmlzaCgpICE9 IFNQSV9PS19GSU5JU0gpCisJCQkJCQkJZWxvZyhFUlJPUiwgIlNQSV9maW5pc2ggZmFpbGVkIik7 CisKKwkJCQkJCS8qIGxpbmUgZXJyb3Igb2NjdXJlZCwgc2V0IGl0IG9uY2UgcGVyIGxpbmUgKi8K KwkJCQkJCWlmICghY3N0YXRlLT5saW5lX2Vycm9yX29jY3VyZWQpCisJCQkJCQkJY3N0YXRlLT5s aW5lX2Vycm9yX29jY3VyZWQgPSB0cnVlOworCQkJCQkJLyogcmVzZXQgRXJyb3JTYXZlQ29udGV4 dCAqLworCQkJCQkJY3N0YXRlLT5lc2NvbnRleHQtPmVycm9yX29jY3VycmVkID0gZmFsc2U7CisJ CQkJCQljc3RhdGUtPmVzY29udGV4dC0+ZGV0YWlsc193YW50ZWQgPSB0cnVlOworCQkJCQkJbWVt c2V0KGNzdGF0ZS0+ZXNjb250ZXh0LT5lcnJvcl9kYXRhLDAsIHNpemVvZihFcnJvckRhdGEpKTsK KwkJCQkJfQorCQkJCX0KKwkJCX0KIAkJCWNzdGF0ZS0+Y3VyX2F0dG5hbWUgPSBOVUxMOwogCQkJ Y3N0YXRlLT5jdXJfYXR0dmFsID0gTlVMTDsKIAkJfQogCisJCS8qIHJlY29yZCBlcnJvciByb3dz IGNvdW50LiAqLworCQlpZiAoY3N0YXRlLT5saW5lX2Vycm9yX29jY3VyZWQpCisJCXsKKwkJCWNz dGF0ZS0+ZXJyb3Jfcm93c19jbnQrKzsKKwkJCUFzc2VydChjc3RhdGUtPm9wdHMuc2F2ZV9lcnJv cik7CisJCX0KIAkJQXNzZXJ0KGZpZWxkbm8gPT0gYXR0cl9jb3VudCk7CiAJfQogCWVsc2UKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIv Z3JhbS55CmluZGV4IGQ2MzFhYzg5Li42MWI1YzViMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC03NTUsNyAr NzU1LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5h bWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlSRVNFVCBSRVNUQVJUIFJFU1RSSUNU IFJFVFVSTiBSRVRVUk5JTkcgUkVUVVJOUyBSRVZPS0UgUklHSFQgUk9MRSBST0xMQkFDSyBST0xM VVAKIAlST1VUSU5FIFJPVVRJTkVTIFJPVyBST1dTIFJVTEUKIAotCVNBVkVQT0lOVCBTQ0FMQVIg U0NIRU1BIFNDSEVNQVMgU0NST0xMIFNFQVJDSCBTRUNPTkRfUCBTRUNVUklUWSBTRUxFQ1QKKwlT QVZFUE9JTlQgU0FWRV9FUlJPUiBTQ0FMQVIgU0NIRU1BIFNDSEVNQVMgU0NST0xMIFNFQVJDSCBT RUNPTkRfUCBTRUNVUklUWSBTRUxFQ1QKIAlTRVFVRU5DRSBTRVFVRU5DRVMKIAlTRVJJQUxJWkFC TEUgU0VSVkVSIFNFU1NJT04gU0VTU0lPTl9VU0VSIFNFVCBTRVRTIFNFVE9GIFNIQVJFIFNIT1cK IAlTSU1JTEFSIFNJTVBMRSBTS0lQIFNNQUxMSU5UIFNOQVBTSE9UIFNPTUUgU1FMX1AgU1RBQkxF IFNUQU5EQUxPTkVfUApAQCAtMzQ0OCw2ICszNDQ4LDEwIEBAIGNvcHlfb3B0X2l0ZW06CiAJCQkJ ewogCQkJCQkkJCA9IG1ha2VEZWZFbGVtKCJlbmNvZGluZyIsIChOb2RlICopIG1ha2VTdHJpbmco JDIpLCBAMSk7CiAJCQkJfQorCQkJfCBTQVZFX0VSUk9SCisJCQkJeworCQkJCQkkJCA9IG1ha2VE ZWZFbGVtKCJzYXZlX2Vycm9yIiwgKE5vZGUgKikgbWFrZUJvb2xlYW4odHJ1ZSksIEAxKTsKKwkJ CQl9CiAJCTsKIAogLyogVGhlIGZvbGxvd2luZyBleGlzdCBmb3IgYmFja3dhcmQgY29tcGF0aWJp bGl0eSB3aXRoIHZlcnkgb2xkIHZlcnNpb25zICovCkBAIC0xNzMyOSw2ICsxNzMzMyw3IEBAIHVu cmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgUk9XUwogCQkJfCBSVUxFCiAJCQl8IFNBVkVQT0lOVAor CQkJfCBTQVZFX0VSUk9SCQkJCiAJCQl8IFNDQUxBUgogCQkJfCBTQ0hFTUEKIAkJCXwgU0NIRU1B UwpAQCAtMTc5MzcsNiArMTc5NDIsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IFJPV1MK IAkJCXwgUlVMRQogCQkJfCBTQVZFUE9JTlQKKwkJCXwgU0FWRV9FUlJPUgkJCQogCQkJfCBTQ0FM QVIKIAkJCXwgU0NIRU1BCiAJCQl8IFNDSEVNQVMKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90 YWItY29tcGxldGUuYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwppbmRleCAwNDk4MDEx OC4uZTZhMzU4ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYworKysg Yi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKQEAgLTI4OTAsNyArMjg5MCw4IEBAIHBzcWxf Y29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJZWxzZSBp ZiAoTWF0Y2hlcygiQ09QWXxcXGNvcHkiLCBNYXRjaEFueSwgIkZST018VE8iLCBNYXRjaEFueSwg IldJVEgiLCAiKCIpKQogCQlDT01QTEVURV9XSVRIKCJGT1JNQVQiLCAiRlJFRVpFIiwgIkRFTElN SVRFUiIsICJOVUxMIiwKIAkJCQkJICAiSEVBREVSIiwgIlFVT1RFIiwgIkVTQ0FQRSIsICJGT1JD RV9RVU9URSIsCi0JCQkJCSAgIkZPUkNFX05PVF9OVUxMIiwgIkZPUkNFX05VTEwiLCAiRU5DT0RJ TkciLCAiREVGQVVMVCIpOworCQkJCQkgICJGT1JDRV9OT1RfTlVMTCIsICJGT1JDRV9OVUxMIiwg IkVOQ09ESU5HIiwgIkRFRkFVTFQiLAorCQkJCQkgICJTQVZFX0VSUk9SIik7CiAKIAkvKiBDb21w bGV0ZSBDT1BZIDxzdGg+IEZST018VE8gZmlsZW5hbWUgV0lUSCAoRk9STUFUICovCiAJZWxzZSBp ZiAoTWF0Y2hlcygiQ09QWXxcXGNvcHkiLCBNYXRjaEFueSwgIkZST018VE8iLCBNYXRjaEFueSwg IldJVEgiLCAiKCIsICJGT1JNQVQiKSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHkuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAppbmRleCBmMmNjYTBiOS4uZGU0 Nzc5MWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTQzLDYgKzQzLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg Q29weUZvcm1hdE9wdGlvbnMKIAlib29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZvcm1hdD8gKi8K IAlib29sCQlmcmVlemU7CQkJLyogZnJlZXplIHJvd3Mgb24gbG9hZGluZz8gKi8KIAlib29sCQlj c3ZfbW9kZTsJCS8qIENvbW1hIFNlcGFyYXRlZCBWYWx1ZSBmb3JtYXQ/ICovCisJYm9vbAkJc2F2 ZV9lcnJvcjsJCS8qICBzYXZlIGVycm9yIHRvIGEgdGFibGU/ICovCiAJQ29weUhlYWRlckNob2lj ZSBoZWFkZXJfbGluZTsJLyogaGVhZGVyIGxpbmU/ICovCiAJY2hhcgkgICAqbnVsbF9wcmludDsJ CS8qIE5VTEwgbWFya2VyIHN0cmluZyAoc2VydmVyIGVuY29kaW5nISkgKi8KIAlpbnQJCQludWxs X3ByaW50X2xlbjsgLyogbGVuZ3RoIG9mIHNhbWUgKi8KQEAgLTgyLDcgKzgzLDcgQEAgZXh0ZXJu IENvcHlGcm9tU3RhdGUgQmVnaW5Db3B5RnJvbShQYXJzZVN0YXRlICpwc3RhdGUsIFJlbGF0aW9u IHJlbCwgTm9kZSAqd2hlcmUKIAkJCQkJCQkJICAgYm9vbCBpc19wcm9ncmFtLCBjb3B5X2RhdGFf c291cmNlX2NiIGRhdGFfc291cmNlX2NiLCBMaXN0ICphdHRuYW1lbGlzdCwgTGlzdCAqb3B0aW9u cyk7CiBleHRlcm4gdm9pZCBFbmRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSk7CiBleHRl cm4gYm9vbCBOZXh0Q29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUsIEV4cHJDb250ZXh0ICpl Y29udGV4dCwKLQkJCQkJCSBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscyk7CisJCQkJCQkgRGF0 dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMsIFN0cmluZ0luZm8gZXJyX3NhdmVfYnVmKTsKIGV4dGVy biBib29sIE5leHRDb3B5RnJvbVJhd0ZpZWxkcyhDb3B5RnJvbVN0YXRlIGNzdGF0ZSwKIAkJCQkJ CQkJICBjaGFyICoqKmZpZWxkcywgaW50ICpuZmllbGRzKTsKIGV4dGVybiB2b2lkIENvcHlGcm9t RXJyb3JDYWxsYmFjayh2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2lu dGVybmFsLmgKaW5kZXggNWVjNDE1ODkuLmIxYzAyYjJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHlmcm9tX2ludGVybmFsLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImNvbW1h bmRzL2NvcHkuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCisjaW5jbHVkZSAibm9k ZXMvbWlzY25vZGVzLmgiCiAKIC8qCiAgKiBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbnQgc291cmNl IGNhc2VzIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgYXQKQEAgLTk0LDYgKzk1LDEyIEBAIHR5cGVk ZWYgc3RydWN0IENvcHlGcm9tU3RhdGVEYXRhCiAJCQkJCQkJCSAqIGRlZmF1bHQgdmFsdWUgKi8K IAlGbWdySW5mbyAgICppbl9mdW5jdGlvbnM7CS8qIGFycmF5IG9mIGlucHV0IGZ1bmN0aW9ucyBm b3IgZWFjaCBhdHRycyAqLwogCU9pZAkJICAgKnR5cGlvcGFyYW1zOwkvKiBhcnJheSBvZiBlbGVt ZW50IHR5cGVzIGZvciBpbl9mdW5jdGlvbnMgKi8KKwlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRl eHQ7IAkvKiBzb2Z0IGVycm9yIHRyYXBwZXIgZHVyaW5nIGluX2Z1bmN0aW9ucyBleGVjdXRpb24g Ki8KKwlpbnQ2NAkJZXJyb3Jfcm93c19jbnQ7IC8qIHRvdGFsIG51bWJlciBvZiByb3dzIHRoYXQg aGF2ZSBlcnJvcnMgKi8KKwljb25zdCBjaGFyIAkqZXJyb3JfcmVsOwkJLyogdGhlIGVycm9yIHJv dyBzYXZlIHRhYmxlIG5hbWUgKi8KKwljb25zdCBjaGFyIAkqZXJyb3JfbnNwOwkJLyogdGhlIGVy cm9yIHJvdyB0YWJsZSdzIG5hbWVzcGFjZSAqLworCWJvb2wJIAlsaW5lX2Vycm9yX29jY3VyZWQ7 CS8qIGRvZXMgdGhpcyBsaW5lIGNvbnZlcnNpb24gZXJyb3IgaGFwcGVuZWQgKi8KKwlib29sCSAJ ZXJyb3JfZmlyc3R0aW1lOwkvKiBmaXJzdCB0aW1lIGNyZWF0ZSBlcnJvciBzYXZlIHRhYmxlICov CiAJaW50CQkgICAqZGVmbWFwOwkJCS8qIGFycmF5IG9mIGRlZmF1bHQgYXR0IG51bWJlcnMgcmVs YXRlZCB0bwogCQkJCQkJCQkgKiBtaXNzaW5nIGF0dCAqLwogCUV4cHJTdGF0ZSAqKmRlZmV4cHJz OwkJLyogYXJyYXkgb2YgZGVmYXVsdCBhdHQgZXhwcmVzc2lvbnMgZm9yIGFsbApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlz dC5oCmluZGV4IDU5ODRkY2ZhLi5kMDk4OGE0YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFy c2VyL2t3bGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtMzc3LDYg KzM3Nyw3IEBAIFBHX0tFWVdPUkQoInJvdXRpbmVzIiwgUk9VVElORVMsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJvdyIsIFJPVywgQ09MX05BTUVfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJvd3MiLCBST1dTLCBVTlJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJydWxlIiwgUlVMRSwgVU5SRVNFUlZFRF9LRVlX T1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgic2F2ZV9lcnJvciIsIFNBVkVfRVJST1IsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInNhdmVwb2ludCIsIFNB VkVQT0lOVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic2Nh bGFyIiwgU0NBTEFSLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJzY2hlbWEiLCBTQ0hFTUEsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQKaW5kZXggYzQxNzhiOWMuLjFkYTEyYjcyIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvcHkyLm91dApAQCAtNTY0LDYgKzU2NCwxMTYgQEAgRVJST1I6ICBj b25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElORSAxOiAuLi4gYiwgYykgRlJPTSBT VERJTiBXSVRIIChGT1JNQVQgY3N2LCBGT1JDRV9OVUxMICosIEZPUkNFX05VTEwuLi4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe CiBST0xMQkFDSzsKKy0tCistLSB0ZXN0cyBmb3IgU0FWRV9FUlJPUiBvcHRpb24gd2l0aCBmb3Jj ZV9ub3RfbnVsbCwgZm9yY2VfbnVsbAorXHBzZXQgbnVsbCBOVUxMCitDUkVBVEUgVEFCTEUgc2F2 ZV9lcnJvcl9jc3YoCisgICAgYSBJTlQgTk9UIE5VTEwsCisgICAgYiBURVhUIE5PVCBOVUxMLAor ICAgIGMgVEVYVCwKKyAgICBkIFRFWFQKKyk7CistLS0gY29weSBzdWNjZXNzLCBlcnJvciBzYXZl IHRhYmxlIHdpbGwgYmUgZHJvcHBlZCBhdXRvbWF0aWNhbGx5LgorQ09QWSBzYXZlX2Vycm9yX2Nz diAoYSwgYiwgYykgRlJPTSBTVERJTiBXSVRIIChzYXZlX2Vycm9yKTsKK05PVElDRTogIE5vIGVy cm9yIGhhcHBlbmVkLkVycm9yIGhvbGRpbmcgdGFibGUgcHVibGljLnNhdmVfZXJyb3JfY3N2X2Vy cm9yIHdpbGwgYmUgZHJvcGVkCistLWVycm9yIFRBQkxFIHNob3VsZCBhbHJlYWR5IGRyb3BwcGVk Lgorc2VsZWN0IGNvdW50KCopIGFzIGV4cGVjdGVkX3plcm8gZnJvbSBwZ19jbGFzcyB3aGVyZSBy ZWxuYW1lID0gJ3NhdmVfZXJyb3JfY3N2X2Vycm9yJzsKKyBleHBlY3RlZF96ZXJvIAorLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgMAorKDEgcm93KQorCistLXNhdmVfZXJyb3Igbm90IGFs bG93ZWQgaW4gYmluYXJ5IG1vZGUKK0NPUFkgc2F2ZV9lcnJvcl9jc3YgKGEsIGIsIGMpIEZST00g U1RESU4gV0lUSCAoc2F2ZV9lcnJvcixGT1JNQVQgYmluYXJ5KTsKK0VSUk9SOiAgY2Fubm90IHNw ZWNpZnkgU0FWRV9FUlJPUiBpbiBCSU5BUlkgbW9kZQorY3JlYXRlIHRhYmxlIHNhdmVfZXJyb3Jf Y3N2X2Vycm9yKCk7CistLXNob3VsZCBmYWlsLiBzaW5jZSB0YWJsZSBzYXZlX2Vycm9yX2Nzdl9l cnJvciBhbHJlYWR5IGV4aXN0cy4KKy0tZXJyb3Igc2F2ZSB0YWJsZSBuYW1pbmcgbG9naWMgPSBj b3B5IGRlc3RpbmF0aW9uIHRhYmxlbmFtZSArICJfZXJyb3IiCitDT1BZIHNhdmVfZXJyb3JfY3N2 IChhLCBiLCBjKSBGUk9NIFNURElOIFdJVEggKHNhdmVfZXJyb3IpOworRVJST1I6ICBFcnJvciBz YXZlIHRhYmxlIHB1YmxpYy5zYXZlX2Vycm9yX2Nzdl9lcnJvciBhbHJlYWR5IGV4aXN0cy4gQ2Fu bm90IHVzZSBpdCBmb3IgQ09QWSBGUk9NIGVycm9yIHNhdmluZworRFJPUCBUQUJMRSBzYXZlX2Vy cm9yX2Nzdl9lcnJvcjsKKy0tIHNhdmUgZXJyb3Igd2l0aCBleHRyYSBkYXRhCitDT1BZIHNhdmVf ZXJyb3JfY3N2IGZyb20gc3RkaW4oc2F2ZV9lcnJvcik7CitOT1RJQ0U6ICAxIHJvd3Mgd2VyZSBz a2lwcGVkIGJlY2F1c2Ugb2YgZXJyb3IuIHNraXBwZWQgcm93IHNhdmVkIHRvIHRhYmxlIHB1Ymxp Yy5zYXZlX2Vycm9yX2Nzdl9lcnJvcgorLS0gc2F2ZSBlcnJvciB3aXRoIG1pc3NpbmcgZGF0YSBm b3IgY29sdW1uCitDT1BZIHNhdmVfZXJyb3JfY3N2IGZyb20gc3RkaW4oc2F2ZV9lcnJvcik7CitO T1RJQ0U6ICAxIHJvd3Mgd2VyZSBza2lwcGVkIGJlY2F1c2Ugb2YgZXJyb3IuIHNraXBwZWQgcm93 IHNhdmVkIHRvIHRhYmxlIHB1YmxpYy5zYXZlX2Vycm9yX2Nzdl9lcnJvcgorLS13aXRoIEZPUkNF X05PVF9OVUxMIGFuZCBGT1JDRV9OVUxMLgorQ09QWSBzYXZlX2Vycm9yX2NzdiAoYSwgYiwgYykg RlJPTSBTVERJTiBXSVRIIChzYXZlX2Vycm9yLEZPUk1BVCBjc3YsIEZPUkNFX05PVF9OVUxMKGIp LCBGT1JDRV9OVUxMKGMpKTsKK05PVElDRTogIDIgcm93cyB3ZXJlIHNraXBwZWQgYmVjYXVzZSBv ZiBlcnJvci4gc2tpcHBlZCByb3cgc2F2ZWQgdG8gdGFibGUgcHVibGljLnNhdmVfZXJyb3JfY3N2 X2Vycm9yCitTRUxFQ1QgKiwgYiBpcyBudWxsIGFzIGJfbnVsbCwgYiA9ICcnIGFzIGJfZW1wdHkg RlJPTSBzYXZlX2Vycm9yX2NzdjsKKyBhIHwgYiB8ICBjICAgfCAgZCAgIHwgYl9udWxsIHwgYl9l bXB0eSAKKy0tLSstLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0KKyAyIHwgICB8 IE5VTEwgfCBOVUxMIHwgZiAgICAgIHwgdAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHNhdmVf ZXJyb3JfY3N2X2Vycm9yOworIGZpbGVuYW1lIHwgbGluZW5vIHwgICAgICAgICAgICAgICAgICAg ICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWVsZCB8IHNvdXJjZSB8ICAgICAg ICAgICAgICAgICBlcnJfbWVzc2FnZSAgICAgICAgICAgICAgICAgfCBlcnJfZGV0YWlsIHwgZXJy b3Jjb2RlIAorLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQor IFNURElOICAgIHwgICAgICAxIHwgMjAwMiAgICAyMzIgICAgIDQwICAgICAgNTAgICAgICA2MCAg ICAgIDcwICAgICAgODAgfCBOVUxMICB8IE5VTEwgICB8IGV4dHJhIGRhdGEgYWZ0ZXIgbGFzdCBl eHBlY3RlZCBjb2x1bW4gICAgICAgfCBOVUxMICAgICAgIHwgMjJQMDQKKyBTVERJTiAgICB8ICAg ICAgMSB8IDIwMDAgICAgMjMwICAgICAyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgZCAgICAgfCBOVUxMICAgfCBtaXNzaW5nIGRhdGEgZm9yIGNvbHVtbiAiZCIgICAgICAgICAg ICAgICAgIHwgTlVMTCAgICAgICB8IDIyUDA0CisgU1RESU4gICAgfCAgICAgIDEgfCB6LCwiIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEgICAgIHwgeiAg ICAgIHwgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogInoiICB8IE5VTEwg ICAgICAgfCAyMlAwMgorIFNURElOICAgIHwgICAgICAyIHwgXDAsLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhICAgICB8IFwwICAgICB8IGludmFsaWQg aW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJcMCIgfCBOVUxMICAgICAgIHwgMjJQMDIK Kyg0IHJvd3MpCisKK0RST1AgVEFCTEUgc2F2ZV9lcnJvcl9jc3YsIHNhdmVfZXJyb3JfY3N2X2Vy cm9yOworQ1JFQVRFIFRBQkxFIGNoZWNrX2lnbl9lcnIgKG4gaW50LCBtIGludFtdLCBrIGJpZ2lu dCwgbCB0ZXh0KTsKK0NPUFkgY2hlY2tfaWduX2VyciBGUk9NIFNURElOIFdJVEggKHNhdmVfZXJy b3IpOworTk9USUNFOiAgOCByb3dzIHdlcmUgc2tpcHBlZCBiZWNhdXNlIG9mIGVycm9yLiBza2lw cGVkIHJvdyBzYXZlZCB0byB0YWJsZSBwdWJsaWMuY2hlY2tfaWduX2Vycl9lcnJvcgorLS1zcGVj aWFsIGNhc2UuIHdpbGwgd29yayxidXQgdGhlIGVycm9yIFRBQkxFIHNob3VsZCBub3QgRFJPUC4K K0NPUFkgY2hlY2tfaWduX2VyciBGUk9NIFNURElOIFdJVEggKHNhdmVfZXJyb3IsIGZvcm1hdCBj c3YsIEZPUkNFX05VTEwgKik7CitOT1RJQ0U6ICBObyBlcnJvciBoYXBwZW5lZC4gQWxsIHRoZSBw YXN0IGVycm9yIGhvbGRpbmcgc2F2ZWQgYXQgcHVibGljLmNoZWNrX2lnbl9lcnJfZXJyb3IgCist LWV4cGVjdCBlcnJvciBUQUJMRSBleGlzdHMKK1NFTEVDVCAqIEZST00gY2hlY2tfaWduX2Vycl9l cnJvcjsKKyBmaWxlbmFtZSB8IGxpbmVubyB8ICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAg ICAgICAgICAgICAgICB8IGZpZWxkIHwgICAgICAgICBzb3VyY2UgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVycl9tZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgICAgZXJyX2RldGFpbCAgICAgICAgIHwgZXJyb3Jjb2RlIAorLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tCisgU1RESU4gICAgfCAgICAgIDIgfCBcbiAgICAgIHsxfSAgICAg MSAgICAgICBcLSAgICAgICAgICAgICAgICAgfCBuICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgK3wgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogIiAgICAgICAgICAg ICAgICAgICAgICAgK3wgTlVMTCAgICAgICAgICAgICAgICAgICAgICB8IDIyUDAyCisgICAgICAg ICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IAorIFNURElOICAgIHwgICAgICAzIHwgYSAgICAgICB7Mn0gICAgIDIg ICAgICAgXHIgICAgICAgICAgICAgICAgIHwgbiAgICAgfCBhICAgICAgICAgICAgICAgICAgICAg ICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhIiAgICAgICAgICAg ICAgICAgICAgICB8IE5VTEwgICAgICAgICAgICAgICAgICAgICAgfCAyMlAwMgorIFNURElOICAg IHwgICAgICA0IHwgMyAgICAgICB7XDN9ICAgIDMzMzMzMzMzMzMgICAgICBcbiAgICAgICAgIHwg bSAgICAgfCB7XHgwM30gICAgICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlIGludGVnZXI6ICJceDAzIiAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAgICAg ICAgICAgICAgICAgfCAyMlAwMgorIFNURElOICAgIHwgICAgICA1IHwgMHgxMSAgICB7Myx9ICAg IDMzMzMzMzMzMzMgICAgICBcXC4gICAgICAgIHwgbSAgICAgfCB7Myx9ICAgICAgICAgICAgICAg ICAgICB8IG1hbGZvcm1lZCBhcnJheSBsaXRlcmFsOiAiezMsfSIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IFVuZXhwZWN0ZWQgIn0iIGNoYXJhY3Rlci4gfCAyMlAwMgorIFNURElO ICAgIHwgICAgICA2IHwgZCAgICAgICB7MywxL30gIDMzMzMzMzMzMzMgICAgICBcXDAgICAgICAg IHwgbiAgICAgfCBkICAgICAgICAgICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4 IGZvciB0eXBlIGludGVnZXI6ICJkIiAgICAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAg ICAgICAgICAgICAgICAgfCAyMlAwMgorIFNURElOICAgIHwgICAgICA2IHwgZCAgICAgICB7Mywx L30gIDMzMzMzMzMzMzMgICAgICBcXDAgICAgICAgIHwgbSAgICAgfCB7MywxL30gICAgICAgICAg ICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICIxLyIgICAg ICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAgICAgICAgICAgICAgICAgfCAyMlAwMgorIFNU RElOICAgIHwgICAgICA3IHwgZSAgICAgICB7MyxcMX0gIC0zMzIzODc5Mjg5ODczOTMzMzMzMzMz IFxuIHwgbiAgICAgfCBlICAgICAgICAgICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3lu dGF4IGZvciB0eXBlIGludGVnZXI6ICJlIiAgICAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAg ICAgICAgICAgICAgICAgICAgfCAyMlAwMgorIFNURElOICAgIHwgICAgICA3IHwgZSAgICAgICB7 MyxcMX0gIC0zMzIzODc5Mjg5ODczOTMzMzMzMzMzIFxuIHwgbSAgICAgfCB7MyxceDAxfSAgICAg ICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJceDAx IiAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAgICAgICAgICAgICAgICAgfCAyMlAwMgor IFNURElOICAgIHwgICAgICA3IHwgZSAgICAgICB7MyxcMX0gIC0zMzIzODc5Mjg5ODczOTMzMzMz MzMzIFxuIHwgayAgICAgfCAtMzMyMzg3OTI4OTg3MzkzMzMzMzMzMyB8IHZhbHVlICItMzMyMzg3 OTI4OTg3MzkzMzMzMzMzMyIgaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlIGJpZ2ludCB8IE5VTEwg ICAgICAgICAgICAgICAgICAgICAgfCAyMjAwMworIFNURElOICAgIHwgICAgICA4IHwgZiAgICAg ICB7MywxfSAgIDMzMjM4NzkyODk4NzM5MzMzMzMzMzMgIFxyIHwgbiAgICAgfCBmICAgICAgICAg ICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJm IiAgICAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAgICAgICAgICAgICAgICAgfCAyMlAw MgorIFNURElOICAgIHwgICAgICA4IHwgZiAgICAgICB7MywxfSAgIDMzMjM4NzkyODk4NzM5MzMz MzMzMzMgIFxyIHwgayAgICAgfCAzMzIzODc5Mjg5ODczOTMzMzMzMzMzICB8IHZhbHVlICIzMzIz ODc5Mjg5ODczOTMzMzMzMzMzIiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgYmlnaW50ICB8IE5V TEwgICAgICAgICAgICAgICAgICAgICAgfCAyMjAwMworIFNURElOICAgIHwgICAgICA5IHwgYiAg ICAgICB7YSwgNH0gIDEuMSAgICAgaCAgICAgICAgICAgICAgICAgIHwgbiAgICAgfCBiICAgICAg ICAgICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6 ICJiIiAgICAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAgICAgICAgICAgICAgICAgfCAy MlAwMgorIFNURElOICAgIHwgICAgICA5IHwgYiAgICAgICB7YSwgNH0gIDEuMSAgICAgaCAgICAg ICAgICAgICAgICAgIHwgbSAgICAgfCB7YSwgNH0gICAgICAgICAgICAgICAgICB8IGludmFsaWQg aW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJhIiAgICAgICAgICAgICAgICAgICAgICB8 IE5VTEwgICAgICAgICAgICAgICAgICAgICAgfCAyMlAwMgorIFNURElOICAgIHwgICAgICA5IHwg YiAgICAgICB7YSwgNH0gIDEuMSAgICAgaCAgICAgICAgICAgICAgICAgIHwgayAgICAgfCAxLjEg ICAgICAgICAgICAgICAgICAgICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGJpZ2lu dDogIjEuMSIgICAgICAgICAgICAgICAgICAgICB8IE5VTEwgICAgICAgICAgICAgICAgICAgICAg fCAyMlAwMgorKDE0IHJvd3MpCisKKy0tIHJlZHVuZGFudCBvcHRpb25zIG5vdCBhbGxvd2VkLgor Q09QWSBjaGVja19pZ25fZXJyIEZST00gU1RESU4gV0lUSCAoc2F2ZV9lcnJvciwgc2F2ZV9lcnJv ciBvZmYpOworRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucworTElORSAx OiBDT1BZIGNoZWNrX2lnbl9lcnIgRlJPTSBTVERJTiBXSVRIIChzYXZlX2Vycm9yLCBzYXZlX2Vy cm9yIG8uLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXgorRFJPUCBUQUJMRSBjaGVja19pZ25fZXJyIENBU0NBREU7CitEUk9QIFRBQkxF IElGIEVYSVNUUyBjaGVja19pZ25fZXJyX2Vycm9yIENBU0NBREU7CistLSh0eXBlIHRleHRyYW5n ZSB3YXMgYWxyZWFkeSBtYWRlIGluIHRlc3Rfc2V0dXAuc3FsKQorLS11c2luZyB0ZXh0cmFuZ2Ug ZG9pbmcgdGVzdAorQ1JFQVRFIFRBQkxFIHRleHRyYW5nZV9pbnB1dChhIHRleHRyYW5nZSwgYiB0 ZXh0cmFuZ2UsIGMgdGV4dHJhbmdlKTsKK0NPUFkgdGV4dHJhbmdlX2lucHV0KGEsIGIsIGMpIEZS T00gU1RESU4gV0lUSCAoc2F2ZV9lcnJvcixGT1JNQVQgY3N2LCBGT1JDRV9OVUxMICopOworTk9U SUNFOiAgNCByb3dzIHdlcmUgc2tpcHBlZCBiZWNhdXNlIG9mIGVycm9yLiBza2lwcGVkIHJvdyBz YXZlZCB0byB0YWJsZSBwdWJsaWMudGV4dHJhbmdlX2lucHV0X2Vycm9yCitTRUxFQ1QgKiBGUk9N IHRleHRyYW5nZV9pbnB1dF9lcnJvcjsKKyBmaWxlbmFtZSB8IGxpbmVubyB8ICAgICAgICAgICAg bGluZSAgICAgICAgICAgIHwgZmllbGQgfCAgc291cmNlICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVycl9tZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgZXJyX2RldGFpbCAgICAgICAgICAgICAgICB8IGVycm9yY29kZSAKKy0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0KKyBTVERJTiAgICB8ICAgICAgMSB8ICwtW2FcIiwieiksW2EiLCItaW5mKSAgICAg IHwgYiAgICAgfCAtW2FcLHopICB8IG1hbGZvcm1lZCByYW5nZSBsaXRlcmFsOiAiLVthXCx6KSIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWlzc2luZyBsZWZ0IHBhcmVudGhlc2lz IG9yIGJyYWNrZXQuICAgICB8IDIyUDAyCisgU1RESU4gICAgfCAgICAgIDEgfCAsLVthXCIsInop LFthIiwiLWluZikgICAgICB8IGMgICAgIHwgW2EsLWluZikgfCByYW5nZSBsb3dlciBib3VuZCBt dXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByYW5nZSB1cHBlciBib3VuZCB8IE5VTEwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMjAwMAorIFNURElOICAgIHwgICAg ICAyIHwgKCIsYSksKCIsIixhKSwoKSIsYSkgICAgICAgfCBhICAgICB8ICgsYSksKCAgIHwgbWFs Zm9ybWVkIHJhbmdlIGxpdGVyYWw6ICIoLGEpLCgiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCBKdW5rIGFmdGVyIHJpZ2h0IHBhcmVudGhlc2lzIG9yIGJyYWNrZXQuIHwgMjJQMDIK KyBTVERJTiAgICB8ICAgICAgMiB8ICgiLGEpLCgiLCIsYSksKCkiLGEpICAgICAgIHwgYiAgICAg fCAsYSksKCkgICB8IG1hbGZvcm1lZCByYW5nZSBsaXRlcmFsOiAiLGEpLCgpIiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgTWlzc2luZyBsZWZ0IHBhcmVudGhlc2lzIG9yIGJyYWNr ZXQuICAgICB8IDIyUDAyCisgU1RESU4gICAgfCAgICAgIDIgfCAoIixhKSwoIiwiLGEpLCgpIixh KSAgICAgICB8IGMgICAgIHwgYSkgICAgICAgfCBtYWxmb3JtZWQgcmFuZ2UgbGl0ZXJhbDogImEp IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1pc3NpbmcgbGVmdCBwYXJl bnRoZXNpcyBvciBicmFja2V0LiAgICAgfCAyMlAwMgorIFNURElOICAgIHwgICAgICAzIHwgKGEi LCIpKSwoXSIsImEpLChhIiwiXSkgICAgfCBhICAgICB8IChhLCkpICAgIHwgbWFsZm9ybWVkIHJh bmdlIGxpdGVyYWw6ICIoYSwpKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBK dW5rIGFmdGVyIHJpZ2h0IHBhcmVudGhlc2lzIG9yIGJyYWNrZXQuIHwgMjJQMDIKKyBTVERJTiAg ICB8ICAgICAgMyB8IChhIiwiKSksKF0iLCJhKSwoYSIsIl0pICAgIHwgYiAgICAgfCAoXSxhKSAg ICB8IG1hbGZvcm1lZCByYW5nZSBsaXRlcmFsOiAiKF0sYSkiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgTWlzc2luZyBjb21tYSBhZnRlciBsb3dlciBib3VuZC4gICAgICAgICB8 IDIyUDAyCisgU1RESU4gICAgfCAgICAgIDMgfCAoYSIsIikpLChdIiwiYSksKGEiLCJdKSAgICB8 IGMgICAgIHwgKGEsXSkgICAgfCBtYWxmb3JtZWQgcmFuZ2UgbGl0ZXJhbDogIihhLF0pIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEp1bmsgYWZ0ZXIgcmlnaHQgcGFyZW50aGVz aXMgb3IgYnJhY2tldC4gfCAyMlAwMgorIFNURElOICAgIHwgICAgICA0IHwgW3oiLCJhXSxbeiIs IjJdLFsoIiwiIiwiKV0gfCBhICAgICB8IFt6LGFdICAgIHwgcmFuZ2UgbG93ZXIgYm91bmQgbXVz dCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmFuZ2UgdXBwZXIgYm91bmQgfCBOVUxMICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjIwMDAKKyBTVERJTiAgICB8ICAgICAg NCB8IFt6IiwiYV0sW3oiLCIyXSxbKCIsIiIsIildIHwgYiAgICAgfCBbeiwyXSAgICB8IHJhbmdl IGxvd2VyIGJvdW5kIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJhbmdlIHVwcGVyIGJv dW5kIHwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyMDAwCisg U1RESU4gICAgfCAgICAgIDQgfCBbeiIsImFdLFt6IiwiMl0sWygiLCIiLCIpXSB8IGMgICAgIHwg WygsIiwpXSAgfCBtYWxmb3JtZWQgcmFuZ2UgbGl0ZXJhbDogIlsoLCIsKV0iICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IFVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0LiAgICAgICAgICAg ICAgICAgfCAyMlAwMgorKDExIHJvd3MpCisKK0RST1AgVEFCTEUgdGV4dHJhbmdlX2lucHV0Owor RFJPUCBUQUJMRSB0ZXh0cmFuZ2VfaW5wdXRfZXJyb3I7CiBccHNldCBudWxsICcnCiAtLSB0ZXN0 IGNhc2Ugd2l0aCB3aG9sZS1yb3cgVmFyIGluIGEgY2hlY2sgY29uc3RyYWludAogY3JlYXRlIHRh YmxlIGNoZWNrX2Nvbl90YmwgKGYxIGludCk7CkBAIC04MjIsMyArOTMyLDI4IEBAIHRydW5jYXRl IGNvcHlfZGVmYXVsdDsKIC0tIERFRkFVTFQgY2Fubm90IGJlIHVzZWQgaW4gQ09QWSBUTwogY29w eSAoc2VsZWN0IDEgYXMgdGVzdCkgVE8gc3Rkb3V0IHdpdGggKGRlZmF1bHQgJ1xEJyk7CiBFUlJP UjogIENPUFkgREVGQVVMVCBvbmx5IGF2YWlsYWJsZSB1c2luZyBDT1BZIEZST00KKy0tIERFRkFV TFQgV0lUSCBTQVZFX0VSUk9SLgorY3JlYXRlIHRhYmxlIGNvcHlfZGVmYXVsdF9lcnJvcl9zYXZl ICgKKwlpZCBpbnRlZ2VyLAorCXRleHRfdmFsdWUgdGV4dCBub3QgbnVsbCBkZWZhdWx0ICd0ZXN0 JywKKwl0c192YWx1ZSB0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmUgbm90IG51bGwgZGVmYXVs dCAnMjAyMi0wNy0wNScKKyk7Citjb3B5IGNvcHlfZGVmYXVsdF9lcnJvcl9zYXZlIGZyb20gc3Rk aW4gd2l0aCAoc2F2ZV9lcnJvciwgZGVmYXVsdCAnXEQnKTsKK05PVElDRTogIDMgcm93cyB3ZXJl IHNraXBwZWQgYmVjYXVzZSBvZiBlcnJvci4gc2tpcHBlZCByb3cgc2F2ZWQgdG8gdGFibGUgcHVi bGljLmNvcHlfZGVmYXVsdF9lcnJvcl9zYXZlX2Vycm9yCitzZWxlY3QgY291bnQoKikgYXMgZXhw ZWN0X3plcm8gZnJvbSBjb3B5X2RlZmF1bHRfZXJyb3Jfc2F2ZTsKKyBleHBlY3RfemVybyAKKy0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgMAorKDEgcm93KQorCitzZWxlY3QgICogZnJvbSBjb3B5 X2RlZmF1bHRfZXJyb3Jfc2F2ZV9lcnJvcjsKKyBmaWxlbmFtZSB8IGxpbmVubyB8ICAgICAgICAg ICAgICAgbGluZSAgICAgICAgICAgICAgIHwgIGZpZWxkICAgfCAgICAgIHNvdXJjZSAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAg ICAgfCBlcnJfZGV0YWlsIHwgZXJyb3Jjb2RlIAorLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgU1RESU4gICAgfCAgICAgIDEgfCBrICAg ICAgIHZhbHVlICAgJzIwMjItMDctMDQnICAgICB8IGlkICAgICAgIHwgayAgICAgICAgICAgICAg ICB8IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJrIiAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICB8IDIyUDAyCisgU1RESU4gICAgfCAgICAgIDIgfCB6ICAgICAg IFxEICAgICAgJzIwMjItMDctMDNBU0tMJyB8IGlkICAgICAgIHwgeiAgICAgICAgICAgICAgICB8 IGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJ6IiAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IDIyUDAyCisgU1RESU4gICAgfCAgICAgIDIgfCB6ICAgICAgIFxE ICAgICAgJzIwMjItMDctMDNBU0tMJyB8IHRzX3ZhbHVlIHwgJzIwMjItMDctMDNBU0tMJyB8IGlu dmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIHRpbWVzdGFtcDogIicyMDIyLTA3LTAzQVNLTCci IHwgICAgICAgICAgICB8IDIyMDA3CisgU1RESU4gICAgfCAgICAgIDMgfCBzICAgICAgIFxEICAg ICAgXEQgICAgICAgICAgICAgICB8IGlkICAgICAgIHwgcyAgICAgICAgICAgICAgICB8IGludmFs aWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICJzIiAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICB8IDIyUDAyCisoNCByb3dzKQorCitkcm9wIHRhYmxlIGNvcHlfZGVmYXVsdF9l cnJvcl9zYXZlX2Vycm9yLGNvcHlfZGVmYXVsdF9lcnJvcl9zYXZlOwordHJ1bmNhdGUgY29weV9k ZWZhdWx0OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsCmluZGV4IGE1NDg2ZjYwLi4zZjQzY2U3NSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weTIuc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvcHkyLnNxbApAQCAtMzc0LDYgKzM3NCw5OCBAQCBCRUdJTjsKIENPUFkgZm9y Y2V0ZXN0IChhLCBiLCBjKSBGUk9NIFNURElOIFdJVEggKEZPUk1BVCBjc3YsIEZPUkNFX05VTEwg KiwgRk9SQ0VfTlVMTChiKSk7CiBST0xMQkFDSzsKIAorLS0KKy0tIHRlc3RzIGZvciBTQVZFX0VS Uk9SIG9wdGlvbiB3aXRoIGZvcmNlX25vdF9udWxsLCBmb3JjZV9udWxsCitccHNldCBudWxsIE5V TEwKK0NSRUFURSBUQUJMRSBzYXZlX2Vycm9yX2NzdigKKyAgICBhIElOVCBOT1QgTlVMTCwKKyAg ICBiIFRFWFQgTk9UIE5VTEwsCisgICAgYyBURVhULAorICAgIGQgVEVYVAorKTsKKworLS0tIGNv cHkgc3VjY2VzcywgZXJyb3Igc2F2ZSB0YWJsZSB3aWxsIGJlIGRyb3BwZWQgYXV0b21hdGljYWxs eS4KK0NPUFkgc2F2ZV9lcnJvcl9jc3YgKGEsIGIsIGMpIEZST00gU1RESU4gV0lUSCAoc2F2ZV9l cnJvcik7CitcLgorCistLWVycm9yIFRBQkxFIHNob3VsZCBhbHJlYWR5IGRyb3BwcGVkLgorc2Vs ZWN0IGNvdW50KCopIGFzIGV4cGVjdGVkX3plcm8gZnJvbSBwZ19jbGFzcyB3aGVyZSByZWxuYW1l ID0gJ3NhdmVfZXJyb3JfY3N2X2Vycm9yJzsKKworLS1zYXZlX2Vycm9yIG5vdCBhbGxvd2VkIGlu IGJpbmFyeSBtb2RlCitDT1BZIHNhdmVfZXJyb3JfY3N2IChhLCBiLCBjKSBGUk9NIFNURElOIFdJ VEggKHNhdmVfZXJyb3IsRk9STUFUIGJpbmFyeSk7CitjcmVhdGUgdGFibGUgc2F2ZV9lcnJvcl9j c3ZfZXJyb3IoKTsKKy0tc2hvdWxkIGZhaWwuIHNpbmNlIHRhYmxlIHNhdmVfZXJyb3JfY3N2X2Vy cm9yIGFscmVhZHkgZXhpc3RzLgorLS1lcnJvciBzYXZlIHRhYmxlIG5hbWluZyBsb2dpYyA9IGNv cHkgZGVzdGluYXRpb24gdGFibGVuYW1lICsgIl9lcnJvciIKK0NPUFkgc2F2ZV9lcnJvcl9jc3Yg KGEsIGIsIGMpIEZST00gU1RESU4gV0lUSCAoc2F2ZV9lcnJvcik7CisKK0RST1AgVEFCTEUgc2F2 ZV9lcnJvcl9jc3ZfZXJyb3I7CisKKy0tIHNhdmUgZXJyb3Igd2l0aCBleHRyYSBkYXRhCitDT1BZ IHNhdmVfZXJyb3JfY3N2IGZyb20gc3RkaW4oc2F2ZV9lcnJvcik7CisyMDAyCTIzMgk0MAk1MAk2 MAk3MAk4MAorXC4KKworLS0gc2F2ZSBlcnJvciB3aXRoIG1pc3NpbmcgZGF0YSBmb3IgY29sdW1u CitDT1BZIHNhdmVfZXJyb3JfY3N2IGZyb20gc3RkaW4oc2F2ZV9lcnJvcik7CisyMDAwCTIzMAky MworXC4KKworLS13aXRoIEZPUkNFX05PVF9OVUxMIGFuZCBGT1JDRV9OVUxMLgorQ09QWSBzYXZl X2Vycm9yX2NzdiAoYSwgYiwgYykgRlJPTSBTVERJTiBXSVRIIChzYXZlX2Vycm9yLEZPUk1BVCBj c3YsIEZPUkNFX05PVF9OVUxMKGIpLCBGT1JDRV9OVUxMKGMpKTsKK3osLCIiCitcMCwsCisyLCwK K1wuCisKK1NFTEVDVCAqLCBiIGlzIG51bGwgYXMgYl9udWxsLCBiID0gJycgYXMgYl9lbXB0eSBG Uk9NIHNhdmVfZXJyb3JfY3N2OworCitTRUxFQ1QgKiBGUk9NIHNhdmVfZXJyb3JfY3N2X2Vycm9y OworCitEUk9QIFRBQkxFIHNhdmVfZXJyb3JfY3N2LCBzYXZlX2Vycm9yX2Nzdl9lcnJvcjsKKwor CitDUkVBVEUgVEFCTEUgY2hlY2tfaWduX2VyciAobiBpbnQsIG0gaW50W10sIGsgYmlnaW50LCBs IHRleHQpOworQ09QWSBjaGVja19pZ25fZXJyIEZST00gU1RESU4gV0lUSCAoc2F2ZV9lcnJvcik7 CisxCXsxfQkxCTEKK1xuCXsxfQkxCVwtCithCXsyfQkyCVxyCiszCXtcM30JMzMzMzMzMzMzMwlc bgorMHgxMQl7Myx9CTMzMzMzMzMzMzMJXFwuCitkCXszLDEvfQkzMzMzMzMzMzMzCVxcMAorZQl7 MyxcMX0JLTMzMjM4NzkyODk4NzM5MzMzMzMzMzMJXG4KK2YJezMsMX0JMzMyMzg3OTI4OTg3Mzkz MzMzMzMzMwlccgorYgl7YSwgNH0JMS4xCWgKKzUJezV9CTUJXFwKK1wuCisKKy0tc3BlY2lhbCBj YXNlLiB3aWxsIHdvcmssYnV0IHRoZSBlcnJvciBUQUJMRSBzaG91bGQgbm90IERST1AuCitDT1BZ IGNoZWNrX2lnbl9lcnIgRlJPTSBTVERJTiBXSVRIIChzYXZlX2Vycm9yLCBmb3JtYXQgY3N2LCBG T1JDRV9OVUxMICopOworLCwsCitcLgorCistLWV4cGVjdCBlcnJvciBUQUJMRSBleGlzdHMKK1NF TEVDVCAqIEZST00gY2hlY2tfaWduX2Vycl9lcnJvcjsKKworLS0gcmVkdW5kYW50IG9wdGlvbnMg bm90IGFsbG93ZWQuCitDT1BZIGNoZWNrX2lnbl9lcnIgRlJPTSBTVERJTiBXSVRIIChzYXZlX2Vy cm9yLCBzYXZlX2Vycm9yIG9mZik7CisKK0RST1AgVEFCTEUgY2hlY2tfaWduX2VyciBDQVNDQURF OworRFJPUCBUQUJMRSBJRiBFWElTVFMgY2hlY2tfaWduX2Vycl9lcnJvciBDQVNDQURFOworCist LSh0eXBlIHRleHRyYW5nZSB3YXMgYWxyZWFkeSBtYWRlIGluIHRlc3Rfc2V0dXAuc3FsKQorLS11 c2luZyB0ZXh0cmFuZ2UgZG9pbmcgdGVzdAorQ1JFQVRFIFRBQkxFIHRleHRyYW5nZV9pbnB1dChh IHRleHRyYW5nZSwgYiB0ZXh0cmFuZ2UsIGMgdGV4dHJhbmdlKTsKK0NPUFkgdGV4dHJhbmdlX2lu cHV0KGEsIGIsIGMpIEZST00gU1RESU4gV0lUSCAoc2F2ZV9lcnJvcixGT1JNQVQgY3N2LCBGT1JD RV9OVUxMICopOworLC1bYVwiLCJ6KSxbYSIsIi1pbmYpCisoIixhKSwoIiwiLGEpLCgpIixhKQor KGEiLCIpKSwoXSIsImEpLChhIiwiXSkKK1t6IiwiYV0sW3oiLCIyXSxbKCIsIiIsIildCitcLgor CitTRUxFQ1QgKiBGUk9NIHRleHRyYW5nZV9pbnB1dF9lcnJvcjsKK0RST1AgVEFCTEUgdGV4dHJh bmdlX2lucHV0OworRFJPUCBUQUJMRSB0ZXh0cmFuZ2VfaW5wdXRfZXJyb3I7CisKIFxwc2V0IG51 bGwgJycKIAogLS0gdGVzdCBjYXNlIHdpdGggd2hvbGUtcm93IFZhciBpbiBhIGNoZWNrIGNvbnN0 cmFpbnQKQEAgLTYwOSwzICs3MDEsMTkgQEAgdHJ1bmNhdGUgY29weV9kZWZhdWx0OwogCiAtLSBE RUZBVUxUIGNhbm5vdCBiZSB1c2VkIGluIENPUFkgVE8KIGNvcHkgKHNlbGVjdCAxIGFzIHRlc3Qp IFRPIHN0ZG91dCB3aXRoIChkZWZhdWx0ICdcRCcpOworCistLSBERUZBVUxUIFdJVEggU0FWRV9F UlJPUi4KK2NyZWF0ZSB0YWJsZSBjb3B5X2RlZmF1bHRfZXJyb3Jfc2F2ZSAoCisJaWQgaW50ZWdl ciwKKwl0ZXh0X3ZhbHVlIHRleHQgbm90IG51bGwgZGVmYXVsdCAndGVzdCcsCisJdHNfdmFsdWUg dGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lIG5vdCBudWxsIGRlZmF1bHQgJzIwMjItMDctMDUn CispOworY29weSBjb3B5X2RlZmF1bHRfZXJyb3Jfc2F2ZSBmcm9tIHN0ZGluIHdpdGggKHNhdmVf ZXJyb3IsIGRlZmF1bHQgJ1xEJyk7CitrCXZhbHVlCScyMDIyLTA3LTA0JworeglcRAknMjAyMi0w Ny0wM0FTS0wnCitzCVxECVxECitcLgorc2VsZWN0IGNvdW50KCopIGFzIGV4cGVjdF96ZXJvIGZy b20gY29weV9kZWZhdWx0X2Vycm9yX3NhdmU7CitzZWxlY3QgICogZnJvbSBjb3B5X2RlZmF1bHRf ZXJyb3Jfc2F2ZV9lcnJvcjsKK2Ryb3AgdGFibGUgY29weV9kZWZhdWx0X2Vycm9yX3NhdmVfZXJy b3IsY29weV9kZWZhdWx0X2Vycm9yX3NhdmU7Cit0cnVuY2F0ZSBjb3B5X2RlZmF1bHQ7ClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi4zNC4xCgo= --000000000000619f33060c25558a--