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 1tPdl6-00ECf0-4J for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Dec 2024 08:25:48 +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 1tPdl5-008xw5-EF for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Dec 2024 08:25:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tPdl4-008xvT-SZ for pgsql-hackers@lists.postgresql.org; Mon, 23 Dec 2024 08:25:46 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tPdl0-001BvD-7s for pgsql-hackers@lists.postgresql.org; Mon, 23 Dec 2024 08:25:46 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2166f1e589cso41870215ad.3 for ; Mon, 23 Dec 2024 00:25:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734942340; x=1735547140; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=9mWt3Pi5R8gRv/ldVhGwR3HsblAErFRcFYoZzudvf9A=; b=mZqmkAUZAqyw5H5Hp+7NlZ0hm/h8VCbLHqXcSEqHPAsFFWStyHYchgvsjbNiJl55D9 lEMl4lLG+yz07eiixdXgxyQerWJNVMYpaZGv2Rmb4Ch1rknhGj0a3wO6/1nizTkFxit9 hYUgh32E32iPFMV2+3DpqlfbOARduASfkxW3mCTIKe9lXXvdV/rUtiS6s8Jv6steREHS R61mF/Ng926u4kwohMN+KrPvmUu6mq3t7JFTntAwyoi3HLOi2G60Z6k7F1SLzkbRP/lM iR/Rz0WR1QpkvIzGrW+ynBoqxE1r0hq1+gmgDKUlK7hxo51ZUShPNcQVTjfCA/zU9Hih wo1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734942340; x=1735547140; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9mWt3Pi5R8gRv/ldVhGwR3HsblAErFRcFYoZzudvf9A=; b=DMpQ0hh9FVQ9EttrGvJsucuobCKCfUyZHxIpWXkyDMCsiBJOIJ40j/KXnI0K3ZMtma TBYK1EBHouZG/5xJVqQYyjga2FlPG0uOmTOMbgsGjkIEc1XJqfk8c0fc2yuEsWErEKeS pMY7uBTkZWRClFUp8vM4SpRDmt5hvzNuLh6mLTqeERNWPWUO+WyHeJJo6MuzKgIA+SBX nUgmSKOt/zWoc4DwZ7FY7bx3gr8sLxsgqiB3+gKA1zOD/Juo460Pu3BDOZ1/aeIvm8lI kKUHRcnv2VyAZIUhzzHO6nDySrIlTT5xxzQxgh4VZ2iLlGjVFBovuE4b4qfl29vx8Rti 7VRw== X-Forwarded-Encrypted: i=1; AJvYcCXyRFG067ztN2NDcmCmtvEFd2ACCbXARZwqlupX15adZkfN/p372XCZvG+3AJhO/Z7WniBuxDFdRFetE8v6@lists.postgresql.org X-Gm-Message-State: AOJu0Yxx1HWb9t5Nicd64iy/bNLDeC593nm66A41AP9aEy02cQdXwbHQ WB5IH/CkF0Y5zL9sFdofBHo14s51bl3DzpVapeR4+DDp+hYewze8 X-Gm-Gg: ASbGncsp2Mb6KbJVZwp8Uv1C6tlgpXNtwEgUUnXzU3hFS1DJVTLsF8dXwMBF7IeqCMi K/Lmu+PesnGl6EVo+QFRZXZEN5oASfdaZRCcPi6vfXOBmidVx79+4OEUBsewFa5cVWaoNX7jpLU 05I/tO7ilh9rRdw/arT7jd+HPSxEJs4sgZvmETxTLMoOBirLLWq6/wOLqjiqhA5f14CZioZfyaw VoS3IW0PCbAdFJrhWiwY8jhpqx9TrufGGA+OeU0sBQhcm5d4xzKTXOAH9BkK9T4ejvBclse6yV5 p9oCP45iynPenbXbfpQ3nhNupUc50h8= X-Google-Smtp-Source: AGHT+IER2PpcFT9f+2+tdlYoBNppWXACk3sXiCa/T6vc0Tu2KUGB1d8L+RJQV8YZ+xlRZmVTcrfzTQ== X-Received: by 2002:a17:903:244c:b0:215:8d29:af2d with SMTP id d9443c01a7336-219e6f25f55mr157000285ad.38.1734942339731; Mon, 23 Dec 2024 00:25:39 -0800 (PST) Received: from [10.10.20.106] (node-i9k.pool-125-27.dynamic.totinternet.net. [125.27.92.120]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-219dc962d53sm68363255ad.33.2024.12.23.00.25.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 23 Dec 2024 00:25:38 -0800 (PST) Content-Type: multipart/mixed; boundary="------------dnfm1XoAEM6SpfDKZo2VZz4z" Message-ID: Date: Mon, 23 Dec 2024 15:25:32 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Removing unneeded self joins To: Alexander Korotkov , PostgreSQL Hackers Cc: Tom Lane , Robert Haas , Richard Guo , Alexander Lakhin , "Gregory Stark (as CFM)" , =?UTF-8?Q?Micha=C5=82_K=C5=82eczek?= , Dean Rasheed References: <64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru> <735b5cd4-568d-fbf7-ad8c-dcfb4c3af86e@gmail.com> <2422119.1714691974@sss.pgh.pa.us> <24e93efd-eeac-43a6-a75a-ad68eacb32ee@postgrespro.ru> <3622801.1715010885@sss.pgh.pa.us> Content-Language: en-AU From: Andrei Lepikhov In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------dnfm1XoAEM6SpfDKZo2VZz4z Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/9/24 13:03, Alexander Korotkov wrote: > On Sat, Jul 20, 2024 at 2:38 PM Alexander Korotkov wrote: > We may decide to generate not just a walker but most of the logic in > remove_self_join_rel(). This is probably possible by injecting way > more meta-information into definitions of structures. That isn't > going to be simpler than the current approach. But it is probably > less error-prone: one could realize that if you add a new field to the > structure, it should have a similar pg_node_attr() as surroundings. > But I am afraid that if we go this way, we may end up with an awkward > heap of pg_node_attr() to generate the functionality of > remove_self_join_rel(). Should we better add comments to PlannerInfo > and other relevant structures saying: if you're going to modify this, > consider how that affects remove_self_join_rel()? > > Any thoughts? Observing positive cases caused by the SJE feature, I resumed the work and, following Alexander's suggestion, added developer comments on checking remove_self_join_rel in case of the PlannerInfo changes. I see now that it helps apply after pull-up transformations and, sometimes, because of clauses derived from EquivalenceClasses (see the patch comment for examples). So, it is not only about dumb ORM-generated queries. Also, multiple code changes since the v7 version caused corresponding changes in the SJE code on rebase. So, the new version provided in the attachment needs a fresh review. -- regards, Andrei Lepikhov --------------dnfm1XoAEM6SpfDKZo2VZz4z Content-Type: text/x-patch; charset=UTF-8; name="v8-0001-Remove-useless-self-joins.patch" Content-Disposition: attachment; filename="v8-0001-Remove-useless-self-joins.patch" Content-Transfer-Encoding: base64 RnJvbSAzODQ3ZmQzNGRmOTE4MTY2YjhiOWMyNDU0N2NjNzY4M2E4NDdkNzZlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IEZyaSwgMjAgRGVjIDIwMjQgMTU6NTU6MDkgKzA3MDAKU3ViamVj dDogW1BBVENIIHY4XSBSZW1vdmUgdXNlbGVzcyBzZWxmLWpvaW5zCk1JTUUtVmVyc2lvbjog MS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRy YW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUaGUgU2VsZiBKb2luIEVsaW1pbmF0aW9uIChTSkUp IGZlYXR1cmUgcmVtb3ZlcyBhbiBpbm5lciBqb2luIG9mIGEgcGxhaW4gdGFibGUKdG8gaXRz ZWxmIGluIHRoZSBxdWVyeSB0cmVlIGlmIGlzIHByb3ZlZCB0aGF0IHRoZSBqb2luIGNhbiBi ZSByZXBsYWNlZCB3aXRoCmEgc2NhbiB3aXRob3V0IGltcGFjdGluZyB0aGUgcXVlcnkgcmVz dWx0LiBTZWxmIGpvaW4gYW5kIGlubmVyIHJlbGF0aW9uIGFyZQpyZXBsYWNlZCB3aXRoIHRo ZSBvdXRlciBpbiBxdWVyeSwgZXF1aXZhbGVuY2UgY2xhc3NlcywgYW5kIHBsYW5uZXIgaW5m bwpzdHJ1Y3R1cmVzLiBBbHNvLCBpbm5lciByZXN0cmljdGxpc3QgbW92ZXMgdG8gdGhlIG91 dGVyIG9uZSB3aXRoIHJlbW92aW5nCmR1cGxpY2F0ZWQgY2xhdXNlcy4gVGh1cywgdGhpcyBv cHRpbWl6YXRpb24gcmVkdWNlcyB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZQp0YWJsZSBsaXN0 ICh0aGlzIGVzcGVjaWFsbHkgbWFrZXMgc2Vuc2UgZm9yIHBhcnRpdGlvbmVkIHJlbGF0aW9u cyksIHJlZHVjZXMKdGhlIG51bWJlciBvZiByZXN0cmljdGlvbiBjbGF1c2VzID09PSBzZWxl Y3Rpdml0eSBlc3RpbWF0aW9ucywgYW5kIHBvdGVudGlhbGx5CmltcHJvdmVzIHRvdGFsIHBs YW5uZXIgcHJlZGljdGlvbiBmb3IgdGhlIHF1ZXJ5LgoKVGhpcyBmZWF0dXJlIGlzIGRlZGlj YXRlZCB0byBhdm9pZGluZyByZWR1bmRhbmN5IHdoaWNoIGNhbiBhcHBlYXIgYWZ0ZXIgcHVs bC11cAp0cmFuc2Zvcm1hdGlvbnMgb3IgdGhlIGNyZWF0aW9uIG9mIGFuIEVxdWl2YWxlbmNl Q2xhc3MtZGVyaXZlZCBjbGF1c2UgbGlrZQp0aGUgYmVsb3c6CgpTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIHggSU4gKFNFTEVDVCB0My54IEZST00gdDEgdDMpOwpTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIEVYSVNUUyAoU0VMRUNUIHQzLnggRlJPTSB0MSB0MyBXSEVSRSB0My54PXQxLngp OwpTRUxFQ1QgKiBGUk9NIHQxLHQyLCB0MSB0MyBXSEVSRSB0MS54PXQyLnggQU5EIHQyLng9 dDMueDsKCkFmdGVyIHNvbWUgYWRkaXRpb25hbCBjb2RpbmcsIGl0IHdvdWxkIHBvdGVudGlh bGx5IHJlZHVjZSByZWR1bmRhbmN5IGNhdXNlZCBieQpzdWJxdWVyeSBwdWxsLXVwIGFmdGVy IHVubmVjZXNzYXJ5IG91dGVyIGpvaW4gcmVtb3ZhbC4gU29tZXRoaW5nIGxpa2UgdGhhdAoK U0VMRUNUICogRlJPTSB0MSBXSEVSRSB4IElOIChTRUxFQ1QgdDMueCBGUk9NIHQxIHQzIExF RlQgSk9JTiB0MiBPTiB0Mi54PXQxLngpOwoKQWxzbywgaXQgY2FuIGRyYXN0aWNhbGx5IGhl bHAgdG8gam9pbiBwYXJ0aXRpb25lZCB0YWJsZXMsIHJlbW92aW5nIGVudHJpZXMgZXZlbgpi ZWZvcmUgdGhlaXIgZXhwYW5zaW9uLgoKVGhlIFNKRSBwcm9vZiBpcyBiYXNlZCBvbiBpbm5l cnJlbF9pc191bmlxdWUgbWFjaGluZXJ5LgoKV2UgY2FuIHJlbW92ZSBhIHNlbGYtam9pbiB3 aGVuIGZvciBlYWNoIG91dGVyIHJvdzoKMS4gQXQgbW9zdCBvbmUgaW5uZXIgcm93IG1hdGNo ZXMgdGhlIGpvaW4gY2xhdXNlLgoyLiBFYWNoIG1hdGNoZWQgaW5uZXIgcm93IG11c3QgYmUg KHBoeXNpY2FsbHkpIHRoZSBzYW1lIHJvdyBhcyB0aGUgb3V0ZXIgb25lLgoKSW4gdGhpcyBw YXRjaCB3ZSB1c2UgdGhlIG5leHQgYXBwcm9hY2ggdG8gaWRlbnRpZnkgYSBzZWxmLWpvaW46 CjEuIENvbGxlY3QgYWxsIG1lcmdlLWpvaW5hYmxlIGpvaW4gcXVhbHMgd2hpY2ggbG9vayBs aWtlIGEueCA9IGIueAoyLiBBZGQgdG8gdGhlIGxpc3QgYWJvdmUgdGhlIGJhc2VyZXRyaWN0 aW5mbyBvZiB0aGUgaW5uZXIgdGFibGUuCjMuIENoZWNrIGlubmVycmVsX2lzX3VuaXF1ZSgp IGZvciB0aGUgcXVhbCBsaXN0LiAgSWYgaXQgcmV0dXJucyBmYWxzZSwgc2tpcAp0aGlzIHBh aXIgb2Ygam9pbmluZyB0YWJsZXMuCjQuIENoZWNrIHVuaXF1ZW5lc3MsIHByb3ZlZCBieSB0 aGUgYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzLiBUbyBwcm92ZQp0aGUgcG9zc2liaWxpdHkg b2Ygc2VsZi1qb2luIGVsaW1pbmF0aW9uIGlubmVyIGFuZCBvdXRlciBjbGF1c2VzIG11c3Qg aGF2ZQphbiBleGFjdCBtYXRjaC4KClRoZSByZWxhdGlvbiByZXBsYWNlbWVudCBwcm9jZWR1 cmUgaXMgbm90IHRyaXZpYWwgYW5kIGl0IGlzIHBhcnRseSBjb21iaW5lZAp3aXRoIHRoZSBv bmUsIHVzZWQgdG8gcmVtb3ZlIHVzZWxlc3MgbGVmdCBqb2lucy4gIFRlc3RzLCBjb3Zlcmlu ZyB0aGlzIGZlYXR1cmUsCndlcmUgYWRkZWQgdG8gam9pbi5zcWwuICBTb21lIHJlZ3Jlc3Np b24gdGVzdHMgY2hhbmdlZCBkdWUgdG8gc2VsZi1qb2luIHJlbW92YWwKbG9naWMuCgpEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2ZsYXQvNjQ0ODZiMGItMDQwNC1lMzllLTMy MmQtMDgwMTE1NDkwMWYzJTQwcG9zdGdyZXNwcm8ucnUKQXV0aG9yOiBBbmRyZXkgTGVwaWto b3YsIEFsZXhhbmRlciBLdXptZW5rb3YKUmV2aWV3ZWQtYnk6IFRvbSBMYW5lLCBSb2JlcnQg SGFhcywgQW5kcmVzIEZyZXVuZCwgU2ltb24gUmlnZ3MsIEpvbmF0aGFuIFMuIEthdHoKUmV2 aWV3ZWQtYnk6IERhdmlkIFJvd2xleSwgVGhvbWFzIE11bnJvLCBLb25zdGFudGluIEtuaXpo bmlrLCBIZWlra2kgTGlubmFrYW5nYXMKUmV2aWV3ZWQtYnk6IEh5d2VsIENhcnZlciwgTGF1 cmVueiBBbGJlLCBSb25hbiBEdW5rbGF1LCB2aWduZXNoIEMsIFpoaWhvbmcgWXUKUmV2aWV3 ZWQtYnk6IEdyZWcgU3RhcmssIEphaW1lIENhc2Fub3ZhLCBNaWNoYcWCIEvFgmVjemVrLCBB bGVuYSBSeWJha2luYQpSZXZpZXdlZC1ieTogQWxleGFuZGVyIEtvcm90a292Ci0tLQogZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYyAgIHwgICAgMyArLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgfCAgIDM5ICsKIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIHwgMTIzOCArKysrKysrKysrKysr KysrKysrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgICAgIHwg ICAgNSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyAgICB8ICAg IDcgKy0KIHNyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMgICAgICAgIHwgIDEz NCArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgIHwgICAx MCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICB8ICAgNDAg Ky0KIHNyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgIHwgICAgMiAr CiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICB8ICAgIDMgKwog c3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggICAgICAgICAgfCAgICA2ICsKIHNy Yy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmggICAgICAgIHwgICAgNCArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mub3V0ICB8ICAgMzAgKwogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCAgICAgICAgfCAxMDYyICsrKysrKysrKysr KysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgfCAg ICAzICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbCAgICAgICB8ICAg MTYgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgICAgICAgICAgICAgfCAgNDgz ICsrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICB8 ICAgIDMgKwogMTkgZmlsZXMgY2hhbmdlZCwgMjk2NSBpbnNlcnRpb25zKCspLCAxMzkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGZiZGQ2Y2U1NzQuLjU3OTQ4MWNlYTggMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKQEAgLTU2NzgsNiArNTY3OCwyMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUg Y2xhc3M9IgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg ICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZV9zZWxmX2pvaW5fZWxpbWluYXRpb24i IHhyZWZsYWJlbD0iZW5hYmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbiI+CisgICAgICA8dGVy bT48dmFybmFtZT5lbmFibGVfc2VsZl9qb2luX2VsaW1pbmF0aW9uPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5 Pjx2YXJuYW1lPmVuYWJsZV9zZWxmX2pvaW5fZWxpbWluYXRpb248L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAg ICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEVu YWJsZXMgb3IgZGlzYWJsZXMgdGhlIHF1ZXJ5IHBsYW5uZXIncyBvcHRpbWl6YXRpb24gd2hp Y2ggYW5hbHlzZXMKKyAgICAgICAgdGhlIHF1ZXJ5IHRyZWUgYW5kIHJlcGxhY2VzIHNlbGYg am9pbnMgd2l0aCBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudAorICAgICAgICBzaW5nbGUgc2Nh bnMuICBUYWtlcyBpbnRvIGNvbnNpZGVyYXRpb24gb25seSBwbGFpbiB0YWJsZXMuCisgICAg ICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8 dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLXNlcXNjYW4iIHhyZWZsYWJlbD0iZW5hYmxl X3NlcXNjYW4iPgogICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX3NlcXNjYW48L3Zhcm5h bWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKaW5kZXggZmFlMTM3ZGQ4Mi4uNTEw YjQ0NjVkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZj bGFzcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpA QCAtODUyLDcgKzg1Miw4IEBAIGZpbmRfY29tcHV0YWJsZV9lY19tZW1iZXIoUGxhbm5lcklu Zm8gKnJvb3QsCiAJZXhwcnZhcnMgPSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgZXhwcnMs CiAJCQkJCQkJICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8CiAJCQkJCQkJICAgUFZDX0lO Q0xVREVfV0lORE9XRlVOQ1MgfAotCQkJCQkJCSAgIFBWQ19JTkNMVURFX1BMQUNFSE9MREVS Uyk7CisJCQkJCQkJICAgUFZDX0lOQ0xVREVfUExBQ0VIT0xERVJTIHwKKwkJCQkJCQkgICBQ VkNfSU5DTFVERV9DT05WRVJUUk9XVFlQRVMpOwogCiAJZm9yZWFjaChsYywgZWMtPmVjX21l bWJlcnMpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXgg NWQxMDJhMGQzNy4uNGZkMWZjMzE0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jCkBAIC00MTQ5LDYgKzQxNDksMjIgQEAgYm9vbAogcmVsYXRpb25faGFzX3Vu aXF1ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJ CQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJCQkgIExpc3QgKmV4cHJsaXN0LCBM aXN0ICpvcHJsaXN0KQoreworCXJldHVybiByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2V4 dChyb290LCByZWwsIHJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJCQkgZXhwcmxpc3QsIG9wcmxp c3QsIE5VTEwpOworfQorCisvKgorICogcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9leHQK KyAqCSAgU2FtZSBhcyByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcigpLCBidXQgc3Vw cG9ydHMgZXh0cmFfY2xhdXNlcworICoJICBwYXJhbWV0ZXIuICBJZiBleHRyYV9jbGF1c2Vz IGlzbid0IE5VTEwsIHJldHVybiBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMKKyAqCSAgd2hp Y2ggd2VyZSB1c2VkIHRvIGRlcml2ZSB1bmlxdWVuZXNzLgorICovCitib29sCityZWxhdGlv bl9oYXNfdW5pcXVlX2luZGV4X2V4dChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAorCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCSAgTGlzdCAqZXhw cmxpc3QsIExpc3QgKm9wcmxpc3QsCisJCQkJCQkJICBMaXN0ICoqZXh0cmFfY2xhdXNlcykK IHsKIAlMaXN0Q2VsbCAgICppYzsKIApAQCAtNDIwNCw2ICs0MjIwLDcgQEAgcmVsYXRpb25f aGFzX3VuaXF1ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAl7CiAJCUluZGV4T3B0SW5mbyAqaW5kID0gKEluZGV4T3B0SW5mbyAqKSBsZmlyc3Qo aWMpOwogCQlpbnQJCQljOworCQlMaXN0CSAgICpleHBycyA9IE5JTDsKIAogCQkvKgogCQkg KiBJZiB0aGUgaW5kZXggaXMgbm90IHVuaXF1ZSwgb3Igbm90IGltbWVkaWF0ZWx5IGVuZm9y Y2VkLCBvciBpZiBpdCdzCkBAIC00MjU1LDYgKzQyNzIsMjQgQEAgcmVsYXRpb25faGFzX3Vu aXF1ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJ CQlpZiAobWF0Y2hfaW5kZXhfdG9fb3BlcmFuZChyZXhwciwgYywgaW5kKSkKIAkJCQl7CiAJ CQkJCW1hdGNoZWQgPSB0cnVlOyAvKiBjb2x1bW4gaXMgdW5pcXVlICovCisKKwkJCQkJaWYg KGJtc19tZW1iZXJzaGlwKHJpbmZvLT5jbGF1c2VfcmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9O KQorCQkJCQl7CisJCQkJCQlNZW1vcnlDb250ZXh0IG9sZE1lbUN0eCA9CisJCQkJCQkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKHJvb3QtPnBsYW5uZXJfY3h0KTsKKworCQkJCQkJLyoKKwkJ CQkJCSAqIEFkZCBmaWx0ZXIgY2xhdXNlIGludG8gYSBsaXN0IGFsbG93aW5nIGNhbGxlciB0 bworCQkJCQkJICoga25vdyBpZiB1bmlxdWVuZXNzIGhhdmUgbWFkZSBub3Qgb25seSBieSBq b2luCisJCQkJCQkgKiBjbGF1c2VzLgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQoYm1zX2lz X2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlkcykgfHwKKwkJCQkJCQkgICBibXNfaXNfZW1wdHko cmluZm8tPnJpZ2h0X3JlbGlkcykpOworCQkJCQkJaWYgKGV4dHJhX2NsYXVzZXMpCisJCQkJ CQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCByaW5mbyk7CisJCQkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkTWVtQ3R4KTsKKwkJCQkJfQorCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJ CX0KQEAgLTQyOTcsNyArNDMzMiwxMSBAQCByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2Zv cihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIE1hdGNoZWQg YWxsIGtleSBjb2x1bW5zIG9mIHRoaXMgaW5kZXg/ICovCiAJCWlmIChjID09IGluZC0+bmtl eWNvbHVtbnMpCisJCXsKKwkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJCSpleHRyYV9jbGF1 c2VzID0gZXhwcnM7CiAJCQlyZXR1cm4gdHJ1ZTsKKwkJfQogCX0KIAogCXJldHVybiBmYWxz ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lu cy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKaW5kZXgg NWJjMTZjNGJmYy4uODlhNTkwYTAzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vYW5hbHl6ZWpvaW5zLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogI2luY2x1ZGUgInBv c3RncmVzLmgiCiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2pvaW5pbmZvLmgiCiAj aW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgpAQCAtMzAsMjcgKzMxLDQ3IEBACiAj aW5jbHVkZSAib3B0aW1pemVyL3BsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3BsYW5tYWluLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oIgorI2lu Y2x1ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlwLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAKKy8qCisgKiBVdGlsaXR5IHN0cnVjdHVyZS4gSXQgaXMgbmVlZGVkIHRvIHBl cmZvcm0gYSBzb3J0aW5nIHByb2NlZHVyZSBhbmQgc2ltcGxpZnkKKyAqIHRoZSBzZWFyY2gg b2YgU0pFLWNhbmRpZGF0ZSBiYXNlcmVscyByZWZlcmVuY2luZyB0aGUgc2FtZSBkYXRhYmFz ZSByZWxhdGlvbi4KKyAqIEhhdmluZyBjb2xsZWN0ZWQgYWxsIGJhc2VyZWxzIGZyb20gdGhl IHF1ZXJ5IGpvaW50cmVlLCB0aGUgcGxhbm5lciBzb3J0cyB0aGVtCisgKiBhY2NvcmRpbmcg dG8gdGhlIHJlbG9pZCB2YWx1ZSwgZ3JvdXBzIHRoZW0gd2l0aCB0aGUgbmV4dCBwYXNzIGFu ZCBhdHRlbXB0cyB0bworICogcmVtb3ZlIHNlbGYtam9pbnMuCisgKiBQcmVsaW1pbmFyeSBz b3J0aW5nIHByZXZlbnRzIHF1YWRyYXRpYyBiZWhhdmlvdXIgdGhhdCBjYW4gYmUgaGFybWZ1 bCBpbiB0aGUKKyAqIGNhc2Ugb2YgbnVtZXJvdXMgam9pbnMuCisgKi8KK3R5cGVkZWYgc3Ry dWN0Cit7CisJaW50CQkJcmVsaWQ7CisJT2lkCQkJcmVsb2lkOworfSBTZWxmSm9pbkNhbmRp ZGF0ZTsKKworYm9vbAkJZW5hYmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbjsKKwogLyogbG9j YWwgZnVuY3Rpb25zICovCiBzdGF0aWMgYm9vbCBqb2luX2lzX3JlbW92YWJsZShQbGFubmVy SW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pOwotc3RhdGljIHZvaWQgcmVt b3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCi0JCQkJ CQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pOworc3RhdGljIHZvaWQgcmVtb3ZlX2xl ZnRqb2lucmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJ CQkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKIHN0YXRpYyB2b2lkIHJlbW92 ZV9yZWxfZnJvbV9yZXN0cmljdGluZm8oUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJCQkJCQkJ CQkgaW50IHJlbGlkLCBpbnQgb2pyZWxpZCk7CiBzdGF0aWMgdm9pZCByZW1vdmVfcmVsX2Zy b21fZWNsYXNzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLAotCQkJCQkJCQkgICBpbnQgcmVsaWQs IGludCBvanJlbGlkKTsKKwkJCQkJCQkJICAgaW50IHJlbGlkLCBpbnQgb2pyZWxpZCwgaW50 IHN1YnN0KTsKIHN0YXRpYyBMaXN0ICpyZW1vdmVfcmVsX2Zyb21fam9pbmxpc3QoTGlzdCAq am9pbmxpc3QsIGludCByZWxpZCwgaW50ICpucmVtb3ZlZCk7CiBzdGF0aWMgYm9vbCByZWxf c3VwcG9ydHNfZGlzdGluY3RuZXNzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwpOwogc3RhdGljIGJvb2wgcmVsX2lzX2Rpc3RpbmN0X2ZvcihQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAotCQkJCQkJCQlMaXN0ICpjbGF1c2VfbGlzdCk7CisJCQkJ CQkJCUxpc3QgKmNsYXVzZV9saXN0LCBMaXN0ICoqZXh0cmFfY2xhdXNlcyk7CiBzdGF0aWMg T2lkCWRpc3RpbmN0X2NvbF9zZWFyY2goaW50IGNvbG5vLCBMaXN0ICpjb2xub3MsIExpc3Qg Km9waWRzKTsKIHN0YXRpYyBib29sIGlzX2lubmVycmVsX3VuaXF1ZV9mb3IoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCSAgIFJlbGlkcyBqb2lucmVsaWRzLAogCQkJCQkJCQkgICBS ZWxpZHMgb3V0ZXJyZWxpZHMsCiAJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAog CQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKLQkJCQkJCQkJICAgTGlzdCAqcmVzdHJp Y3RsaXN0KTsKKwkJCQkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCQkgICBM aXN0ICoqZXh0cmFfY2xhdXNlcyk7CitzdGF0aWMgaW50CXNlbGZfam9pbl9jYW5kaWRhdGVz X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIAogCiAvKgpAQCAtODgsNyAr MTA5LDcgQEAgcmVzdGFydDoKIAkJICovCiAJCWlubmVycmVsaWQgPSBibXNfc2luZ2xldG9u X21lbWJlcihzamluZm8tPm1pbl9yaWdodGhhbmQpOwogCi0JCXJlbW92ZV9yZWxfZnJvbV9x dWVyeShyb290LCBpbm5lcnJlbGlkLCBzamluZm8pOworCQlyZW1vdmVfbGVmdGpvaW5yZWxf ZnJvbV9xdWVyeShyb290LCBpbm5lcnJlbGlkLCBzamluZm8pOwogCiAJCS8qIFdlIHZlcmlm eSB0aGF0IGV4YWN0bHkgb25lIHJlZmVyZW5jZSBnZXRzIHJlbW92ZWQgZnJvbSBqb2lubGlz dCAqLwogCQlucmVtb3ZlZCA9IDA7CkBAIC0yNzYsNyArMjk3LDcgQEAgam9pbl9pc19yZW1v dmFibGUoUGxhbm5lckluZm8gKnJvb3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCSAq IE5vdyB0aGF0IHdlIGhhdmUgdGhlIHJlbGV2YW50IGVxdWFsaXR5IGpvaW4gY2xhdXNlcywg dHJ5IHRvIHByb3ZlIHRoZQogCSAqIGlubmVycmVsIGRpc3RpbmN0LgogCSAqLwotCWlmIChy ZWxfaXNfZGlzdGluY3RfZm9yKHJvb3QsIGlubmVycmVsLCBjbGF1c2VfbGlzdCkpCisJaWYg KHJlbF9pc19kaXN0aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0LCBOVUxM KSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKgpAQCAtMjg4LDM2ICszMDksMzEgQEAgam9pbl9p c19yZW1vdmFibGUoUGxhbm5lckluZm8gKnJvb3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZv KQogCiAKIC8qCi0gKiBSZW1vdmUgdGhlIHRhcmdldCByZWxpZCBhbmQgcmVmZXJlbmNlcyB0 byB0aGUgdGFyZ2V0IGpvaW4gZnJvbSB0aGUKKyAqIFJlbW92ZSB0aGUgdGFyZ2V0IHJlbC0+ cmVsaWQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIHRhcmdldCBqb2luIGZyb20gdGhlCiAgKiBw bGFubmVyJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBoYXZpbmcgZGV0ZXJtaW5lZCB0aGF0IHRoZXJl IGlzIG5vIG5lZWQKLSAqIHRvIGluY2x1ZGUgdGhlbSBpbiB0aGUgcXVlcnkuCisgKiB0byBp bmNsdWRlIHRoZW0gaW4gdGhlIHF1ZXJ5LiBPcHRpb25hbGx5IHJlcGxhY2UgdGhlbSB3aXRo IHN1YnN0IGlmIHN1YnN0CisgKiBpcyBub24tbmVnYXRpdmUuCiAgKgotICogV2UgYXJlIG5v dCB0ZXJyaWJseSB0aG9yb3VnaCBoZXJlLiAgV2Ugb25seSBib3RoZXIgdG8gdXBkYXRlIHBh cnRzIG9mCi0gKiB0aGUgcGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdpbGwgYWN0 dWFsbHkgYmUgY29uc3VsdGVkIGxhdGVyLgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIG9u bHkgcGFydHMgbmVlZGVkIGZvciBib3RoIGxlZnQtam9pbiByZW1vdmFsIGFuZAorICogc2Vs Zi1qb2luIHJlbW92YWwuCiAgKi8KIHN0YXRpYyB2b2lkCi1yZW1vdmVfcmVsX2Zyb21fcXVl cnkoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8pCityZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKKwkJCQkJICBpbnQgc3Vic3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAor CQkJCQkgIFJlbGlkcyBqb2lucmVsaWRzKQogewotCVJlbE9wdEluZm8gKnJlbCA9IGZpbmRf YmFzZV9yZWwocm9vdCwgcmVsaWQpOwotCWludAkJCW9qcmVsaWQgPSBzamluZm8tPm9qcmVs aWQ7Ci0JUmVsaWRzCQlqb2lucmVsaWRzOwotCVJlbGlkcwkJam9pbl9wbHVzX2NvbW11dGU7 Ci0JTGlzdAkgICAqam9pbmluZm9zOworCWludAkJCXJlbGlkID0gcmVsLT5yZWxpZDsKKwlp bnQJCQlvanJlbGlkID0gKHNqaW5mbyAhPSBOVUxMKSA/IHNqaW5mby0+b2pyZWxpZCA6IC0x OwogCUluZGV4CQlydGk7CiAJTGlzdENlbGwgICAqbDsKIAotCS8qIENvbXB1dGUgdGhlIHJl bGlkIHNldCBmb3IgdGhlIGpvaW4gd2UgYXJlIGNvbnNpZGVyaW5nICovCi0Jam9pbnJlbGlk cyA9IGJtc191bmlvbihzamluZm8tPm1pbl9sZWZ0aGFuZCwgc2ppbmZvLT5taW5fcmlnaHRo YW5kKTsKLQlBc3NlcnQob2pyZWxpZCAhPSAwKTsKLQlqb2lucmVsaWRzID0gYm1zX2FkZF9t ZW1iZXIoam9pbnJlbGlkcywgb2pyZWxpZCk7Ci0KIAkvKgogCSAqIFVwZGF0ZSBhbGxfYmFz ZXJlbHMgYW5kIHJlbGF0ZWQgcmVsaWQgc2V0cy4KIAkgKi8KLQlyb290LT5hbGxfYmFzZXJl bHMgPSBibXNfZGVsX21lbWJlcihyb290LT5hbGxfYmFzZXJlbHMsIHJlbGlkKTsKLQlyb290 LT5vdXRlcl9qb2luX3JlbHMgPSBibXNfZGVsX21lbWJlcihyb290LT5vdXRlcl9qb2luX3Jl bHMsIG9qcmVsaWQpOwotCXJvb3QtPmFsbF9xdWVyeV9yZWxzID0gYm1zX2RlbF9tZW1iZXIo cm9vdC0+YWxsX3F1ZXJ5X3JlbHMsIHJlbGlkKTsKLQlyb290LT5hbGxfcXVlcnlfcmVscyA9 IGJtc19kZWxfbWVtYmVyKHJvb3QtPmFsbF9xdWVyeV9yZWxzLCBvanJlbGlkKTsKKwlyb290 LT5hbGxfYmFzZXJlbHMgPSByZXBsYWNlX3JlbGlkKHJvb3QtPmFsbF9iYXNlcmVscywgcmVs aWQsIHN1YnN0KTsKKwlyb290LT5vdXRlcl9qb2luX3JlbHMgPSByZXBsYWNlX3JlbGlkKHJv b3QtPm91dGVyX2pvaW5fcmVscywgb2pyZWxpZCwgc3Vic3QpOworCXJvb3QtPmFsbF9xdWVy eV9yZWxzID0gcmVwbGFjZV9yZWxpZChyb290LT5hbGxfcXVlcnlfcmVscywgcmVsaWQsIHN1 YnN0KTsKKwlyb290LT5hbGxfcXVlcnlfcmVscyA9IHJlcGxhY2VfcmVsaWQocm9vdC0+YWxs X3F1ZXJ5X3JlbHMsIG9qcmVsaWQsIHN1YnN0KTsKIAogCS8qCiAJICogTGlrZXdpc2UgcmVt b3ZlIHJlZmVyZW5jZXMgZnJvbSBTcGVjaWFsSm9pbkluZm8gZGF0YSBzdHJ1Y3R1cmVzLgpA QCAtMzQxLDIwICszNTcsMzMgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZv ICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCQlzamluZi0+ bWluX3JpZ2h0aGFuZCA9IGJtc19jb3B5KHNqaW5mLT5taW5fcmlnaHRoYW5kKTsKIAkJc2pp bmYtPnN5bl9sZWZ0aGFuZCA9IGJtc19jb3B5KHNqaW5mLT5zeW5fbGVmdGhhbmQpOwogCQlz amluZi0+c3luX3JpZ2h0aGFuZCA9IGJtc19jb3B5KHNqaW5mLT5zeW5fcmlnaHRoYW5kKTsK LQkJLyogTm93IHJlbW92ZSByZWxpZCBhbmQgb2pyZWxpZCBiaXRzIGZyb20gdGhlIHNldHM6 ICovCi0JCXNqaW5mLT5taW5fbGVmdGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWlu X2xlZnRoYW5kLCByZWxpZCk7Ci0JCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gYm1zX2RlbF9t ZW1iZXIoc2ppbmYtPm1pbl9yaWdodGhhbmQsIHJlbGlkKTsKLQkJc2ppbmYtPnN5bl9sZWZ0 aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5zeW5fbGVmdGhhbmQsIHJlbGlkKTsKLQkJ c2ppbmYtPnN5bl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX3JpZ2h0 aGFuZCwgcmVsaWQpOwotCQlzamluZi0+bWluX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1iZXIo c2ppbmYtPm1pbl9sZWZ0aGFuZCwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5taW5fcmlnaHRoYW5k ID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPm1pbl9yaWdodGhhbmQsIG9qcmVsaWQpOwotCQlz amluZi0+c3luX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPnN5bl9sZWZ0aGFu ZCwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gYm1zX2RlbF9tZW1iZXIo c2ppbmYtPnN5bl9yaWdodGhhbmQsIG9qcmVsaWQpOwotCQkvKiByZWxpZCBjYW5ub3QgYXBw ZWFyIGluIHRoZXNlIGZpZWxkcywgYnV0IG9qcmVsaWQgY2FuOiAqLwotCQlzamluZi0+Y29t bXV0ZV9hYm92ZV9sID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPmNvbW11dGVfYWJvdmVfbCwg b2pyZWxpZCk7Ci0JCXNqaW5mLT5jb21tdXRlX2Fib3ZlX3IgPSBibXNfZGVsX21lbWJlcihz amluZi0+Y29tbXV0ZV9hYm92ZV9yLCBvanJlbGlkKTsKLQkJc2ppbmYtPmNvbW11dGVfYmVs b3dfbCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5jb21tdXRlX2JlbG93X2wsIG9qcmVsaWQp OwotCQlzamluZi0+Y29tbXV0ZV9iZWxvd19yID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPmNv bW11dGVfYmVsb3dfciwgb2pyZWxpZCk7CisJCS8qIE5vdyByZW1vdmUgcmVsaWQgZnJvbSB0 aGUgc2V0czogKi8KKwkJc2ppbmYtPm1pbl9sZWZ0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2pp bmYtPm1pbl9sZWZ0aGFuZCwgcmVsaWQsIHN1YnN0KTsKKwkJc2ppbmYtPm1pbl9yaWdodGhh bmQgPSByZXBsYWNlX3JlbGlkKHNqaW5mLT5taW5fcmlnaHRoYW5kLCByZWxpZCwgc3Vic3Qp OworCQlzamluZi0+c3luX2xlZnRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+c3luX2xl ZnRoYW5kLCByZWxpZCwgc3Vic3QpOworCQlzamluZi0+c3luX3JpZ2h0aGFuZCA9IHJlcGxh Y2VfcmVsaWQoc2ppbmYtPnN5bl9yaWdodGhhbmQsIHJlbGlkLCBzdWJzdCk7CisKKwkJaWYg KHNqaW5mbyAhPSBOVUxMKQorCQl7CisJCQlBc3NlcnQoc3Vic3QgPD0gMCAmJiBvanJlbGlk ID4gMCk7CisKKwkJCS8qIFJlbW92ZSBvanJlbGlkIGJpdHMgZnJvbSB0aGUgc2V0czogKi8K KwkJCXNqaW5mLT5taW5fbGVmdGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWluX2xl ZnRoYW5kLCBvanJlbGlkKTsKKwkJCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gYm1zX2RlbF9t ZW1iZXIoc2ppbmYtPm1pbl9yaWdodGhhbmQsIG9qcmVsaWQpOworCQkJc2ppbmYtPnN5bl9s ZWZ0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5zeW5fbGVmdGhhbmQsIG9qcmVsaWQp OworCQkJc2ppbmYtPnN5bl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3lu X3JpZ2h0aGFuZCwgb2pyZWxpZCk7CisJCQkvKiByZWxpZCBjYW5ub3QgYXBwZWFyIGluIHRo ZXNlIGZpZWxkcywgYnV0IG9qcmVsaWQgY2FuOiAqLworCQkJc2ppbmYtPmNvbW11dGVfYWJv dmVfbCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5jb21tdXRlX2Fib3ZlX2wsIG9qcmVsaWQp OworCQkJc2ppbmYtPmNvbW11dGVfYWJvdmVfciA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5j b21tdXRlX2Fib3ZlX3IsIG9qcmVsaWQpOworCQkJc2ppbmYtPmNvbW11dGVfYmVsb3dfbCA9 IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5jb21tdXRlX2JlbG93X2wsIG9qcmVsaWQpOworCQkJ c2ppbmYtPmNvbW11dGVfYmVsb3dfciA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5jb21tdXRl X2JlbG93X3IsIG9qcmVsaWQpOworCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KHN1YnN0 ID4gMCAmJiBvanJlbGlkID09IC0xKTsKKworCQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikg c2ppbmYtPnNlbWlfcmhzX2V4cHJzLCByZWxpZCwgc3Vic3QsIDApOworCQl9CiAJfQogCiAJ LyoKQEAgLTM3NSwxMCArNDA0LDEwIEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVy SW5mbyAqcm9vdCwgaW50IHJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAl7CiAJ CVBsYWNlSG9sZGVySW5mbyAqcGhpbmZvID0gKFBsYWNlSG9sZGVySW5mbyAqKSBsZmlyc3Qo bCk7CiAKLQkJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKHJlbGlkLCBwaGluZm8tPnBoX2xhdGVy YWwpKTsKKwkJQXNzZXJ0KHNqaW5mbyA9PSBOVUxMIHx8ICFibXNfaXNfbWVtYmVyKHJlbGlk LCBwaGluZm8tPnBoX2xhdGVyYWwpKTsKIAkJaWYgKGJtc19pc19zdWJzZXQocGhpbmZvLT5w aF9uZWVkZWQsIGpvaW5yZWxpZHMpICYmCiAJCQlibXNfaXNfbWVtYmVyKHJlbGlkLCBwaGlu Zm8tPnBoX2V2YWxfYXQpICYmCi0JCQkhYm1zX2lzX21lbWJlcihvanJlbGlkLCBwaGluZm8t PnBoX2V2YWxfYXQpKQorCQkJKHNqaW5mbyA9PSBOVUxMIHx8ICFibXNfaXNfbWVtYmVyKG9q cmVsaWQsIHBoaW5mby0+cGhfZXZhbF9hdCkpKQogCQl7CiAJCQlyb290LT5wbGFjZWhvbGRl cl9saXN0ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChyb290LT5wbGFjZWhvbGRlcl9saXN0 LAogCQkJCQkJCQkJCQkJCQkJbCk7CkBAIC0zODgsMjEgKzQxNywxMTEgQEAgcmVtb3ZlX3Jl bF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2lu SW5mbyAqc2ppbmZvKQogCQl7CiAJCQlQbGFjZUhvbGRlclZhciAqcGh2ID0gcGhpbmZvLT5w aF92YXI7CiAKLQkJCXBoaW5mby0+cGhfZXZhbF9hdCA9IGJtc19kZWxfbWVtYmVyKHBoaW5m by0+cGhfZXZhbF9hdCwgcmVsaWQpOwotCQkJcGhpbmZvLT5waF9ldmFsX2F0ID0gYm1zX2Rl bF9tZW1iZXIocGhpbmZvLT5waF9ldmFsX2F0LCBvanJlbGlkKTsKKwkJCXBoaW5mby0+cGhf ZXZhbF9hdCA9IHJlcGxhY2VfcmVsaWQocGhpbmZvLT5waF9ldmFsX2F0LCByZWxpZCwgc3Vi c3QpOworCQkJcGhpbmZvLT5waF9ldmFsX2F0ID0gcmVwbGFjZV9yZWxpZChwaGluZm8tPnBo X2V2YWxfYXQsIG9qcmVsaWQsIHN1YnN0KTsKIAkJCUFzc2VydCghYm1zX2lzX2VtcHR5KHBo aW5mby0+cGhfZXZhbF9hdCkpOwkvKiBjaGVja2VkIHByZXZpb3VzbHkgKi8KIAkJCS8qIFJl ZHVjZSBwaF9uZWVkZWQgdG8gY29udGFpbiBvbmx5ICJyZWxhdGlvbiAwIjsgc2VlIGJlbG93 ICovCiAJCQlpZiAoYm1zX2lzX21lbWJlcigwLCBwaGluZm8tPnBoX25lZWRlZCkpCiAJCQkJ cGhpbmZvLT5waF9uZWVkZWQgPSBibXNfbWFrZV9zaW5nbGV0b24oMCk7CiAJCQllbHNlCiAJ CQkJcGhpbmZvLT5waF9uZWVkZWQgPSBOVUxMOwotCQkJcGh2LT5waHJlbHMgPSBibXNfZGVs X21lbWJlcihwaHYtPnBocmVscywgcmVsaWQpOwotCQkJcGh2LT5waHJlbHMgPSBibXNfZGVs X21lbWJlcihwaHYtPnBocmVscywgb2pyZWxpZCk7CisKKwkJCXBoaW5mby0+cGhfbGF0ZXJh bCA9IHJlcGxhY2VfcmVsaWQocGhpbmZvLT5waF9sYXRlcmFsLCByZWxpZCwgc3Vic3QpOwor CQkJLyoKKwkJCSAqIHBoX2xhdGVyYWwgbWlnaHQgY29udGFpbiByZWxzIG1lbnRpb25lZCBp biBwaF9ldmFsX2F0IGFmdGVyIHRoZQorCQkJICogcmVwbGFjZW1lbnQsIHJlbW92ZSB0aGVt LgorCQkJICovCisJCQlwaGluZm8tPnBoX2xhdGVyYWwgPSBibXNfZGlmZmVyZW5jZShwaGlu Zm8tPnBoX2xhdGVyYWwsIHBoaW5mby0+cGhfZXZhbF9hdCk7CisJCQkvKiBwaF9sYXRlcmFs IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBlbXB0eSAqLworCisJCQlwaHYtPnBocmVscyA9IHJl cGxhY2VfcmVsaWQocGh2LT5waHJlbHMsIHJlbGlkLCBzdWJzdCk7CisJCQlwaHYtPnBocmVs cyA9IHJlcGxhY2VfcmVsaWQocGh2LT5waHJlbHMsIG9qcmVsaWQsIHN1YnN0KTsKIAkJCUFz c2VydCghYm1zX2lzX2VtcHR5KHBodi0+cGhyZWxzKSk7CisKKwkJCUNoYW5nZVZhck5vZGVz KChOb2RlICopIHBodi0+cGhleHByLCByZWxpZCwgc3Vic3QsIDApOworCiAJCQlBc3NlcnQo cGh2LT5waG51bGxpbmdyZWxzID09IE5VTEwpOyAvKiBubyBuZWVkIHRvIGFkanVzdCAqLwog CQl9CiAJfQogCisJLyoKKwkgKiBMaWtld2lzZSByZW1vdmUgcmVmZXJlbmNlcyBmcm9tIEVx dWl2YWxlbmNlQ2xhc3Nlcy4KKwkgKi8KKwlmb3JlYWNoKGwsIHJvb3QtPmVxX2NsYXNzZXMp CisJeworCQlFcXVpdmFsZW5jZUNsYXNzICplYyA9IChFcXVpdmFsZW5jZUNsYXNzICopIGxm aXJzdChsKTsKKworCQlpZiAoYm1zX2lzX21lbWJlcihyZWxpZCwgZWMtPmVjX3JlbGlkcykg fHwKKwkJCShzamluZm8gPT0gTlVMTCB8fCBibXNfaXNfbWVtYmVyKG9qcmVsaWQsIGVjLT5l Y19yZWxpZHMpKSkKKwkJCXJlbW92ZV9yZWxfZnJvbV9lY2xhc3MoZWMsIHJlbGlkLCBvanJl bGlkLCBzdWJzdCk7CisJfQorCisJLyoKKwkgKiBGaW5hbGx5LCB3ZSBtdXN0IHJlY29tcHV0 ZSBwZXItVmFyIGF0dHJfbmVlZGVkIGFuZCBwZXItUGxhY2VIb2xkZXJWYXIKKwkgKiBwaF9u ZWVkZWQgcmVsaWQgc2V0cy4gIFRoZXNlIGhhdmUgdG8gYmUga25vd24gYWNjdXJhdGVseSwg ZWxzZSB3ZSBtYXkKKwkgKiBmYWlsIHRvIHJlbW92ZSBvdGhlciBub3ctcmVtb3ZhYmxlIG91 dGVyIGpvaW5zLiAgQW5kIG91ciByZW1vdmFsIG9mIHRoZQorCSAqIGpvaW4gY2xhdXNlKHMp IGZvciB0aGlzIG91dGVyIGpvaW4gbWF5IG1lYW4gdGhhdCBWYXJzIHRoYXQgd2VyZQorCSAq IGZvcm1lcmx5IG5lZWRlZCBubyBsb25nZXIgYXJlLiAgU28gd2UgaGF2ZSB0byBkbyB0aGlz IGhvbmVzdGx5IGJ5CisJICogcmVwZWF0aW5nIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhvc2Ug cmVsaWQgc2V0cy4gIFdlIGNhbiBjaGVhdCB0byBvbmUKKwkgKiBzbWFsbCBleHRlbnQ6IHdl IGNhbiBhdm9pZCByZS1leGFtaW5pbmcgdGhlIHRhcmdldGxpc3QgYW5kIEhBVklORyBxdWFs CisJICogYnkgcHJlc2VydmluZyAicmVsYXRpb24gMCIgYml0cyBmcm9tIHRoZSBleGlzdGlu ZyByZWxpZCBzZXRzLiAgVGhpcyBpcworCSAqIHNhZmUgYmVjYXVzZSB3ZSdkIG5ldmVyIHJl bW92ZSBzdWNoIHJlZmVyZW5jZXMuCisJICoKKwkgKiBTbywgc3RhcnQgYnkgcmVtb3Zpbmcg YWxsIG90aGVyIGJpdHMgZnJvbSBhdHRyX25lZWRlZCBzZXRzIGFuZAorCSAqIGxhdGVyYWxf dmFycyBsaXN0cy4gIChXZSBhbHJlYWR5IGRpZCB0aGlzIGFib3ZlIGZvciBwaF9uZWVkZWQu KQorCSAqLworCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9z aXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8gKm90aGVycmVsID0gcm9vdC0+c2ltcGxl X3JlbF9hcnJheVtydGldOworCQlpbnQJCQlhdHRyb2ZmOworCisJCS8qIHRoZXJlIG1heSBi ZSBlbXB0eSBzbG90cyBjb3JyZXNwb25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJ aWYgKG90aGVycmVsID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlBc3NlcnQob3RoZXJy ZWwtPnJlbGlkID09IHJ0aSk7IC8qIHNhbml0eSBjaGVjayBvbiBhcnJheSAqLworCisJCWZv ciAoYXR0cm9mZiA9IG90aGVycmVsLT5tYXhfYXR0ciAtIG90aGVycmVsLT5taW5fYXR0cjsK KwkJCSBhdHRyb2ZmID49IDA7CisJCQkgYXR0cm9mZi0tKQorCQl7CisJCQlpZiAoYm1zX2lz X21lbWJlcigwLCBvdGhlcnJlbC0+YXR0cl9uZWVkZWRbYXR0cm9mZl0pKQorCQkJCW90aGVy cmVsLT5hdHRyX25lZWRlZFthdHRyb2ZmXSA9IGJtc19tYWtlX3NpbmdsZXRvbigwKTsKKwkJ CWVsc2UKKwkJCQlvdGhlcnJlbC0+YXR0cl9uZWVkZWRbYXR0cm9mZl0gPSBOVUxMOworCQl9 CisKKwkJaWYgKHN1YnN0ID4gMCkKKwkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIG90aGVy cmVsLT5sYXRlcmFsX3ZhcnMsIHJlbGlkLCBzdWJzdCwgMCk7CisJfQorfQorCisvKgorICog UmVtb3ZlIHRoZSB0YXJnZXQgcmVsaWQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIHRhcmdldCBq b2luIGZyb20gdGhlCisgKiBwbGFubmVyJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBoYXZpbmcgZGV0 ZXJtaW5lZCB0aGF0IHRoZXJlIGlzIG5vIG5lZWQKKyAqIHRvIGluY2x1ZGUgdGhlbSBpbiB0 aGUgcXVlcnkuCisgKgorICogV2UgYXJlIG5vdCB0ZXJyaWJseSB0aG9yb3VnaCBoZXJlLiAg V2Ugb25seSBib3RoZXIgdG8gdXBkYXRlIHBhcnRzIG9mCisgKiB0aGUgcGxhbm5lcidzIGRh dGEgc3RydWN0dXJlcyB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgY29uc3VsdGVkIGxhdGVyLgor ICovCitzdGF0aWMgdm9pZAorcmVtb3ZlX2xlZnRqb2lucmVsX2Zyb21fcXVlcnkoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2pp bmZvKQoreworCVJlbE9wdEluZm8gKnJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgcmVsaWQp OworCWludAkJCW9qcmVsaWQgPSBzamluZm8tPm9qcmVsaWQ7CisJUmVsaWRzCQlqb2lucmVs aWRzOworCVJlbGlkcwkJam9pbl9wbHVzX2NvbW11dGU7CisJTGlzdAkgICAqam9pbmluZm9z OworCUxpc3RDZWxsICAgKmw7CisKKwkvKiBDb21wdXRlIHRoZSByZWxpZCBzZXQgZm9yIHRo ZSBqb2luIHdlIGFyZSBjb25zaWRlcmluZyAqLworCWpvaW5yZWxpZHMgPSBibXNfdW5pb24o c2ppbmZvLT5taW5fbGVmdGhhbmQsIHNqaW5mby0+bWluX3JpZ2h0aGFuZCk7CisJQXNzZXJ0 KG9qcmVsaWQgIT0gMCk7CisJam9pbnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxp ZHMsIG9qcmVsaWQpOworCisJcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KHJvb3QsIHJlbCwgLTEs IHNqaW5mbywgam9pbnJlbGlkcyk7CisKIAkvKgogCSAqIFJlbW92ZSBhbnkgam9pbnF1YWxz IHJlZmVyZW5jaW5nIHRoZSByZWwgZnJvbSB0aGUgam9pbmluZm8gbGlzdHMuCiAJICoKQEAg LTQ2NSwxOCArNTg0LDYgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpy b290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCQl9CiAJfQogCi0J LyoKLQkgKiBMaWtld2lzZSByZW1vdmUgcmVmZXJlbmNlcyBmcm9tIEVxdWl2YWxlbmNlQ2xh c3Nlcy4KLQkgKi8KLQlmb3JlYWNoKGwsIHJvb3QtPmVxX2NsYXNzZXMpCi0JewotCQlFcXVp dmFsZW5jZUNsYXNzICplYyA9IChFcXVpdmFsZW5jZUNsYXNzICopIGxmaXJzdChsKTsKLQot CQlpZiAoYm1zX2lzX21lbWJlcihyZWxpZCwgZWMtPmVjX3JlbGlkcykgfHwKLQkJCWJtc19p c19tZW1iZXIob2pyZWxpZCwgZWMtPmVjX3JlbGlkcykpCi0JCQlyZW1vdmVfcmVsX2Zyb21f ZWNsYXNzKGVjLCByZWxpZCwgb2pyZWxpZCk7Ci0JfQotCiAJLyoKIAkgKiBUaGVyZSBtYXkg YmUgcmVmZXJlbmNlcyB0byB0aGUgcmVsIGluIHJvb3QtPmZrZXlfbGlzdCwgYnV0IGlmIHNv LAogCSAqIG1hdGNoX2ZvcmVpZ25fa2V5c190b19xdWFscygpIHdpbGwgZ2V0IHJpZCBvZiB0 aGVtLgpAQCAtNDkyLDQyICs1OTksNiBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJLyog QW5kIG51a2UgdGhlIFJlbE9wdEluZm8sIGp1c3QgaW4gY2FzZSB0aGVyZSdzIGFub3RoZXIg YWNjZXNzIHBhdGggKi8KIAlwZnJlZShyZWwpOwogCi0JLyoKLQkgKiBGaW5hbGx5LCB3ZSBt dXN0IHJlY29tcHV0ZSBwZXItVmFyIGF0dHJfbmVlZGVkIGFuZCBwZXItUGxhY2VIb2xkZXJW YXIKLQkgKiBwaF9uZWVkZWQgcmVsaWQgc2V0cy4gIFRoZXNlIGhhdmUgdG8gYmUga25vd24g YWNjdXJhdGVseSwgZWxzZSB3ZSBtYXkKLQkgKiBmYWlsIHRvIHJlbW92ZSBvdGhlciBub3ct cmVtb3ZhYmxlIG91dGVyIGpvaW5zLiAgQW5kIG91ciByZW1vdmFsIG9mIHRoZQotCSAqIGpv aW4gY2xhdXNlKHMpIGZvciB0aGlzIG91dGVyIGpvaW4gbWF5IG1lYW4gdGhhdCBWYXJzIHRo YXQgd2VyZQotCSAqIGZvcm1lcmx5IG5lZWRlZCBubyBsb25nZXIgYXJlLiAgU28gd2UgaGF2 ZSB0byBkbyB0aGlzIGhvbmVzdGx5IGJ5Ci0JICogcmVwZWF0aW5nIHRoZSBjb25zdHJ1Y3Rp b24gb2YgdGhvc2UgcmVsaWQgc2V0cy4gIFdlIGNhbiBjaGVhdCB0byBvbmUKLQkgKiBzbWFs bCBleHRlbnQ6IHdlIGNhbiBhdm9pZCByZS1leGFtaW5pbmcgdGhlIHRhcmdldGxpc3QgYW5k IEhBVklORyBxdWFsCi0JICogYnkgcHJlc2VydmluZyAicmVsYXRpb24gMCIgYml0cyBmcm9t IHRoZSBleGlzdGluZyByZWxpZCBzZXRzLiAgVGhpcyBpcwotCSAqIHNhZmUgYmVjYXVzZSB3 ZSdkIG5ldmVyIHJlbW92ZSBzdWNoIHJlZmVyZW5jZXMuCi0JICoKLQkgKiBTbywgc3RhcnQg YnkgcmVtb3ZpbmcgYWxsIG90aGVyIGJpdHMgZnJvbSBhdHRyX25lZWRlZCBzZXRzLiAgKFdl Ci0JICogYWxyZWFkeSBkaWQgdGhpcyBhYm92ZSBmb3IgcGhfbmVlZGVkLikKLQkgKi8KLQlm b3IgKHJ0aSA9IDE7IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKysp Ci0JewotCQlSZWxPcHRJbmZvICpvdGhlcnJlbCA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlb cnRpXTsKLQkJaW50CQkJYXR0cm9mZjsKLQotCQkvKiB0aGVyZSBtYXkgYmUgZW1wdHkgc2xv dHMgY29ycmVzcG9uZGluZyB0byBub24tYmFzZXJlbCBSVEVzICovCi0JCWlmIChvdGhlcnJl bCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0KLQkJQXNzZXJ0KG90aGVycmVsLT5yZWxpZCA9 PSBydGkpOyAvKiBzYW5pdHkgY2hlY2sgb24gYXJyYXkgKi8KLQotCQlmb3IgKGF0dHJvZmYg PSBvdGhlcnJlbC0+bWF4X2F0dHIgLSBvdGhlcnJlbC0+bWluX2F0dHI7Ci0JCQkgYXR0cm9m ZiA+PSAwOwotCQkJIGF0dHJvZmYtLSkKLQkJewotCQkJaWYgKGJtc19pc19tZW1iZXIoMCwg b3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdKSkKLQkJCQlvdGhlcnJlbC0+YXR0cl9u ZWVkZWRbYXR0cm9mZl0gPSBibXNfbWFrZV9zaW5nbGV0b24oMCk7Ci0JCQllbHNlCi0JCQkJ b3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdID0gTlVMTDsKLQkJfQotCX0KLQogCS8q CiAJICogTm93IHJlcGVhdCBjb25zdHJ1Y3Rpb24gb2YgYXR0cl9uZWVkZWQgYml0cyBjb21p bmcgZnJvbSBhbGwgb3RoZXIKIAkgKiBzb3VyY2VzLgpAQCAtNjA3LDEzICs2NzgsMTMgQEAg cmVtb3ZlX3JlbF9mcm9tX3Jlc3RyaWN0aW5mbyhSZXN0cmljdEluZm8gKnJpbmZvLCBpbnQg cmVsaWQsIGludCBvanJlbGlkKQogICogbGV2ZWwocykuCiAgKi8KIHN0YXRpYyB2b2lkCi1y ZW1vdmVfcmVsX2Zyb21fZWNsYXNzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBpbnQgcmVsaWQs IGludCBvanJlbGlkKQorcmVtb3ZlX3JlbF9mcm9tX2VjbGFzcyhFcXVpdmFsZW5jZUNsYXNz ICplYywgaW50IHJlbGlkLCBpbnQgb2pyZWxpZCwgaW50IHN1YnN0KQogewogCUxpc3RDZWxs ICAgKmxjOwogCiAJLyogRml4IHVwIHRoZSBFQydzIG92ZXJhbGwgcmVsaWRzICovCi0JZWMt PmVjX3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKGVjLT5lY19yZWxpZHMsIHJlbGlkKTsKLQll Yy0+ZWNfcmVsaWRzID0gYm1zX2RlbF9tZW1iZXIoZWMtPmVjX3JlbGlkcywgb2pyZWxpZCk7 CisJZWMtPmVjX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQoZWMtPmVjX3JlbGlkcywgcmVsaWQs IHN1YnN0KTsKKwllYy0+ZWNfcmVsaWRzID0gcmVwbGFjZV9yZWxpZChlYy0+ZWNfcmVsaWRz LCBvanJlbGlkLCBzdWJzdCk7CiAKIAkvKgogCSAqIEZpeCB1cCB0aGUgbWVtYmVyIGV4cHJl c3Npb25zLiAgQW55IG5vbi1jb25zdCBtZW1iZXIgdGhhdCBlbmRzIHdpdGgKQEAgLTYyNSwx MSArNjk2LDExIEBAIHJlbW92ZV9yZWxfZnJvbV9lY2xhc3MoRXF1aXZhbGVuY2VDbGFzcyAq ZWMsIGludCByZWxpZCwgaW50IG9qcmVsaWQpCiAJCUVxdWl2YWxlbmNlTWVtYmVyICpjdXJf ZW0gPSAoRXF1aXZhbGVuY2VNZW1iZXIgKikgbGZpcnN0KGxjKTsKIAogCQlpZiAoYm1zX2lz X21lbWJlcihyZWxpZCwgY3VyX2VtLT5lbV9yZWxpZHMpIHx8Ci0JCQlibXNfaXNfbWVtYmVy KG9qcmVsaWQsIGN1cl9lbS0+ZW1fcmVsaWRzKSkKKwkJCShvanJlbGlkICE9IC0xICYmIGJt c19pc19tZW1iZXIob2pyZWxpZCwgY3VyX2VtLT5lbV9yZWxpZHMpKSkKIAkJewogCQkJQXNz ZXJ0KCFjdXJfZW0tPmVtX2lzX2NvbnN0KTsKLQkJCWN1cl9lbS0+ZW1fcmVsaWRzID0gYm1z X2RlbF9tZW1iZXIoY3VyX2VtLT5lbV9yZWxpZHMsIHJlbGlkKTsKLQkJCWN1cl9lbS0+ZW1f cmVsaWRzID0gYm1zX2RlbF9tZW1iZXIoY3VyX2VtLT5lbV9yZWxpZHMsIG9qcmVsaWQpOwor CQkJY3VyX2VtLT5lbV9yZWxpZHMgPSByZXBsYWNlX3JlbGlkKGN1cl9lbS0+ZW1fcmVsaWRz LCByZWxpZCwgc3Vic3QpOworCQkJY3VyX2VtLT5lbV9yZWxpZHMgPSByZXBsYWNlX3JlbGlk KGN1cl9lbS0+ZW1fcmVsaWRzLCBvanJlbGlkLCBzdWJzdCk7CiAJCQlpZiAoYm1zX2lzX2Vt cHR5KGN1cl9lbS0+ZW1fcmVsaWRzKSkKIAkJCQllYy0+ZWNfbWVtYmVycyA9IGZvcmVhY2hf ZGVsZXRlX2N1cnJlbnQoZWMtPmVjX21lbWJlcnMsIGxjKTsKIAkJfQpAQCAtNjQwLDcgKzcx MSwxMCBAQCByZW1vdmVfcmVsX2Zyb21fZWNsYXNzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBp bnQgcmVsaWQsIGludCBvanJlbGlkKQogCXsKIAkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChS ZXN0cmljdEluZm8gKikgbGZpcnN0KGxjKTsKIAotCQlyZW1vdmVfcmVsX2Zyb21fcmVzdHJp Y3RpbmZvKHJpbmZvLCByZWxpZCwgb2pyZWxpZCk7CisJCWlmIChvanJlbGlkID09IC0xKQor CQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgcmluZm8sIHJlbGlkLCBzdWJzdCwgMCk7CisJ CWVsc2UKKwkJCXJlbW92ZV9yZWxfZnJvbV9yZXN0cmljdGluZm8ocmluZm8sIHJlbGlkLCBv anJlbGlkKTsKIAl9CiAKIAkvKgpAQCAtODQ0LDkgKzkxOCwxNCBAQCByZWxfc3VwcG9ydHNf ZGlzdGluY3RuZXNzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCiAgKiBO b3RlIHRoYXQgdGhlIHBhc3NlZC1pbiBjbGF1c2VfbGlzdCBtYXkgYmUgZGVzdHJ1Y3RpdmVs eSBtb2RpZmllZCEgIFRoaXMKICAqIGlzIE9LIGZvciBjdXJyZW50IHVzZXMsIGJlY2F1c2Ug dGhlIGNsYXVzZV9saXN0IGlzIGJ1aWx0IGJ5IHRoZSBjYWxsZXIgZm9yCiAgKiB0aGUgc29s ZSBwdXJwb3NlIG9mIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBleHRyYV9j bGF1c2VzIGNvbnRhaW5zIHRoZSByaWdodCBzaWRlcyBvZiBiYXNlcmVzdHJpY3RpbmZvIGNs YXVzZXMgbG9va2luZworICogbGlrZSB4ID0gY29uc3QgaWYgZGlzdGluY3RuZXNzIGlzIGRl cml2ZWQgZnJvbSBzdWNoIGNsYXVzZXMsIG5vdCBqb2luaW5mbworICogY2xhdXNlLiAgUGFz cyBOVUxMIHRvIHRoZSBleHRyYV9jbGF1c2VzLCBpZiBpdHMgdmFsdWUgaXMgbm90IG5lZWRl ZC4KICAqLwogc3RhdGljIGJvb2wKLXJlbF9pc19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTGlzdCAqY2xhdXNlX2xpc3QpCityZWxfaXNfZGlz dGluY3RfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNs YXVzZV9saXN0LAorCQkJCQlMaXN0ICoqZXh0cmFfY2xhdXNlcykKIHsKIAkvKgogCSAqIFdl IGNvdWxkIHNraXAgYSBjb3VwbGUgb2YgdGVzdHMgaGVyZSBpZiB3ZSBhc3N1bWUgYWxsIGNh bGxlcnMgY2hlY2tlZApAQCAtODU5LDEwICs5MzgsMTEgQEAgcmVsX2lzX2Rpc3RpbmN0X2Zv cihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VfbGlz dCkKIAl7CiAJCS8qCiAJCSAqIEV4YW1pbmUgdGhlIGluZGV4ZXMgdG8gc2VlIGlmIHdlIGhh dmUgYSBtYXRjaGluZyB1bmlxdWUgaW5kZXguCi0JCSAqIHJlbGF0aW9uX2hhc191bmlxdWVf aW5kZXhfZm9yIGF1dG9tYXRpY2FsbHkgYWRkcyBhbnkgdXNhYmxlCisJCSAqIHJlbGF0aW9u X2hhc191bmlxdWVfaW5kZXhfZXh0IGF1dG9tYXRpY2FsbHkgYWRkcyBhbnkgdXNhYmxlCiAJ CSAqIHJlc3RyaWN0aW9uIGNsYXVzZXMgZm9yIHRoZSByZWwsIHNvIHdlIG5lZWRuJ3QgZG8g dGhhdCBoZXJlLgogCQkgKi8KLQkJaWYgKHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9y KHJvb3QsIHJlbCwgY2xhdXNlX2xpc3QsIE5JTCwgTklMKSkKKwkJaWYgKHJlbGF0aW9uX2hh c191bmlxdWVfaW5kZXhfZXh0KHJvb3QsIHJlbCwgY2xhdXNlX2xpc3QsIE5JTCwgTklMLAor CQkJCQkJCQkJCSAgZXh0cmFfY2xhdXNlcykpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJZWxz ZSBpZiAocmVsLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSkKQEAgLTExNzYsOSArMTI1Niwz MyBAQCBpbm5lcnJlbF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgSm9p blR5cGUgam9pbnR5cGUsCiAJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0LAogCQkJCSAgIGJv b2wgZm9yY2VfY2FjaGUpCit7CisJcmV0dXJuIGlubmVycmVsX2lzX3VuaXF1ZV9leHQocm9v dCwgam9pbnJlbGlkcywgb3V0ZXJyZWxpZHMsIGlubmVycmVsLAorCQkJCQkJCQkgIGpvaW50 eXBlLCByZXN0cmljdGxpc3QsIGZvcmNlX2NhY2hlLCBOVUxMKTsKK30KKworLyoKKyAqIGlu bmVycmVsX2lzX3VuaXF1ZV9leHQKKyAqCSAgRG8gdGhlIHNhbWUgYXMgaW5uZXJyZWxfaXNf dW5pcXVlKCksIGJ1dCBhbHNvIHNldCB0byAnKmV4dHJhX2NsYXVzZXMnCisgKgkgIGFkZGl0 aW9uYWwgY2xhdXNlcyBmcm9tIGEgYmFzZXJlc3RyaWN0aW5mbyBsaXN0IHRoYXQgd2VyZSB1 c2VkIHRvIHByb3ZlCisgKgkgIHVuaXF1ZW5lc3MuICBBIG5vbiBOVUxMICdleHRyYV9jbGF1 c2VzJyBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBjaGVja2luZworICoJICBmb3Igc2VsZi1qb2lu IGFuZCBjb3JyZXNwb25kaW5nbHkgZGVhbGluZyB3aXRoIGZpbHRlcmVkIGNsYXVzZXMuCisg Ki8KK2Jvb2wKK2lubmVycmVsX2lzX3VuaXF1ZV9leHQoUGxhbm5lckluZm8gKnJvb3QsCisJ CQkJCSAgIFJlbGlkcyBqb2lucmVsaWRzLAorCQkJCQkgICBSZWxpZHMgb3V0ZXJyZWxpZHMs CisJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkgICBKb2luVHlwZSBqb2lu dHlwZSwKKwkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkgICBib29sIGZvcmNl X2NhY2hlLAorCQkJCQkgICBMaXN0ICoqZXh0cmFfY2xhdXNlcykKIHsKIAlNZW1vcnlDb250 ZXh0IG9sZF9jb250ZXh0OwogCUxpc3RDZWxsICAgKmxjOworCVVuaXF1ZVJlbEluZm8gKnVu aXF1ZVJlbEluZm87CisJTGlzdAkgICAqb3V0ZXJfZXhwcnMgPSBOSUw7CisJYm9vbAkJc2Vs Zl9qb2luID0gKGV4dHJhX2NsYXVzZXMgIT0gTlVMTCk7CiAKIAkvKiBDZXJ0YWlubHkgY2Fu J3QgcHJvdmUgdW5pcXVlbmVzcyB3aGVuIHRoZXJlIGFyZSBubyBqb2luY2xhdXNlcyAqLwog CWlmIChyZXN0cmljdGxpc3QgPT0gTklMKQpAQCAtMTE5MywxNyArMTI5NywyOCBAQCBpbm5l cnJlbF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkvKgogCSAqIFF1ZXJ5IHRo ZSBjYWNoZSB0byBzZWUgaWYgd2UndmUgbWFuYWdlZCB0byBwcm92ZSB0aGF0IGlubmVycmVs IGlzCi0JICogdW5pcXVlIGZvciBhbnkgc3Vic2V0IG9mIHRoaXMgb3V0ZXJyZWwuICBXZSBk b24ndCBuZWVkIGFuIGV4YWN0IG1hdGNoLAotCSAqIGFzIGV4dHJhIG91dGVycmVscyBjYW4n dCBtYWtlIHRoZSBpbm5lcnJlbCBhbnkgbGVzcyB1bmlxdWUgKG9yIG1vcmUKLQkgKiBmb3Jt YWxseSwgdGhlIHJlc3RyaWN0bGlzdCBmb3IgYSBqb2luIHRvIGEgc3VwZXJzZXQgb3V0ZXJy ZWwgbXVzdCBiZSBhCi0JICogc3VwZXJzZXQgb2YgdGhlIGNvbmRpdGlvbnMgd2Ugc3VjY2Vz c2Z1bGx5IHVzZWQgYmVmb3JlKS4KKwkgKiB1bmlxdWUgZm9yIGFueSBzdWJzZXQgb2YgdGhp cyBvdXRlcnJlbC4gIEZvciBub24gc2VsZi1qb2luIHNlYXJjaCwgd2UKKwkgKiBkb24ndCBu ZWVkIGFuIGV4YWN0IG1hdGNoLCBhcyBleHRyYSBvdXRlcnJlbHMgY2FuJ3QgbWFrZSB0aGUg aW5uZXJyZWwKKwkgKiBhbnkgbGVzcyB1bmlxdWUgKG9yIG1vcmUgZm9ybWFsbHksIHRoZSBy ZXN0cmljdGxpc3QgZm9yIGEgam9pbiB0byBhCisJICogc3VwZXJzZXQgb3V0ZXJyZWwgbXVz dCBiZSBhIHN1cGVyc2V0IG9mIHRoZSBjb25kaXRpb25zIHdlIHN1Y2Nlc3NmdWxseQorCSAq IHVzZWQgYmVmb3JlKS4gRm9yIHNlbGYtam9pbiBzZWFyY2gsIHdlIHJlcXVpcmUgYW4gZXhh Y3QgbWF0Y2ggb2YKKwkgKiBvdXRlcnJlbHMsIGJlY2F1c2Ugd2UgbmVlZCBleHRyYSBjbGF1 c2VzIHRvIGJlIHZhbGlkIGZvciBvdXIgY2FzZS4KKwkgKiBBbHNvLCBmb3Igc2VsZi1qb2lu IGNoZWNraW5nIHdlJ3ZlIGZpbHRlcmVkIHRoZSBjbGF1c2VzIGxpc3QuICBUaHVzLAorCSAq IGZvciBhIHNlbGYtam9pbiBzZWFyY2gsIHdlIGNhbiBtYXRjaCBvbmx5IHRoZSByZXN1bHQg Y2FjaGVkIGZvciBhbm90aGVyCisJICogc2VsZi1qb2luIGNoZWNrLgogCSAqLwogCWZvcmVh Y2gobGMsIGlubmVycmVsLT51bmlxdWVfZm9yX3JlbHMpCiAJewotCQlSZWxpZHMJCXVuaXF1 ZV9mb3JfcmVscyA9IChSZWxpZHMpIGxmaXJzdChsYyk7CisJCXVuaXF1ZVJlbEluZm8gPSAo VW5pcXVlUmVsSW5mbyAqKSBsZmlyc3QobGMpOwogCi0JCWlmIChibXNfaXNfc3Vic2V0KHVu aXF1ZV9mb3JfcmVscywgb3V0ZXJyZWxpZHMpKQorCQlpZiAoKCFzZWxmX2pvaW4gJiYgYm1z X2lzX3N1YnNldCh1bmlxdWVSZWxJbmZvLT5vdXRlcnJlbGlkcywgb3V0ZXJyZWxpZHMpKSB8 fAorCQkJKHNlbGZfam9pbiAmJiBibXNfZXF1YWwodW5pcXVlUmVsSW5mby0+b3V0ZXJyZWxp ZHMsIG91dGVycmVsaWRzKSAmJgorCQkJIHVuaXF1ZVJlbEluZm8tPnNlbGZfam9pbikpCisJ CXsKKwkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJCSpleHRyYV9jbGF1c2VzID0gdW5pcXVl UmVsSW5mby0+ZXh0cmFfY2xhdXNlczsKIAkJCXJldHVybiB0cnVlOwkJLyogU3VjY2VzcyEg Ki8KKwkJfQogCX0KIAogCS8qCkBAIC0xMjIwLDcgKzEzMzUsOCBAQCBpbm5lcnJlbF9pc191 bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkvKiBObyBjYWNoZWQgaW5mb3JtYXRpb24s IHNvIHRyeSB0byBtYWtlIHRoZSBwcm9vZi4gKi8KIAlpZiAoaXNfaW5uZXJyZWxfdW5pcXVl X2Zvcihyb290LCBqb2lucmVsaWRzLCBvdXRlcnJlbGlkcywgaW5uZXJyZWwsCi0JCQkJCQkJ ICAgam9pbnR5cGUsIHJlc3RyaWN0bGlzdCkpCisJCQkJCQkJICAgam9pbnR5cGUsIHJlc3Ry aWN0bGlzdCwKKwkJCQkJCQkgICBzZWxmX2pvaW4gPyAmb3V0ZXJfZXhwcnMgOiBOVUxMKSkK IAl7CiAJCS8qCiAJCSAqIENhY2hlIHRoZSBwb3NpdGl2ZSByZXN1bHQgZm9yIGZ1dHVyZSBw cm9iZXMsIGJlaW5nIHN1cmUgdG8ga2VlcCBpdApAQCAtMTIzMywxMCArMTM0OSwxNiBAQCBp bm5lcnJlbF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJCSAqIHN1cGVyc2V0cyBv ZiB0aGVtIGFueXdheS4KIAkJICovCiAJCW9sZF9jb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKHJvb3QtPnBsYW5uZXJfY3h0KTsKKwkJdW5pcXVlUmVsSW5mbyA9IG1ha2VOb2Rl KFVuaXF1ZVJlbEluZm8pOworCQl1bmlxdWVSZWxJbmZvLT5vdXRlcnJlbGlkcyA9IGJtc19j b3B5KG91dGVycmVsaWRzKTsKKwkJdW5pcXVlUmVsSW5mby0+c2VsZl9qb2luID0gc2VsZl9q b2luOworCQl1bmlxdWVSZWxJbmZvLT5leHRyYV9jbGF1c2VzID0gb3V0ZXJfZXhwcnM7CiAJ CWlubmVycmVsLT51bmlxdWVfZm9yX3JlbHMgPSBsYXBwZW5kKGlubmVycmVsLT51bmlxdWVf Zm9yX3JlbHMsCi0JCQkJCQkJCQkJCWJtc19jb3B5KG91dGVycmVsaWRzKSk7CisJCQkJCQkJ CQkJCXVuaXF1ZVJlbEluZm8pOwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRl eHQpOwogCisJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJKmV4dHJhX2NsYXVzZXMgPSBvdXRl cl9leHByczsKIAkJcmV0dXJuIHRydWU7CQkJLyogU3VjY2VzcyEgKi8KIAl9CiAJZWxzZQpA QCAtMTI4Miw3ICsxNDA0LDggQEAgaXNfaW5uZXJyZWxfdW5pcXVlX2ZvcihQbGFubmVySW5m byAqcm9vdCwKIAkJCQkJICAgUmVsaWRzIG91dGVycmVsaWRzLAogCQkJCQkgICBSZWxPcHRJ bmZvICppbm5lcnJlbCwKIAkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCi0JCQkJCSAgIExp c3QgKnJlc3RyaWN0bGlzdCkKKwkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkg ICBMaXN0ICoqZXh0cmFfY2xhdXNlcykKIHsKIAlMaXN0CSAgICpjbGF1c2VfbGlzdCA9IE5J TDsKIAlMaXN0Q2VsbCAgICpsYzsKQEAgLTEzMTIsMTcgKzE0MzUsODk4IEBAIGlzX2lubmVy cmVsX3VuaXF1ZV9mb3IoUGxhbm5lckluZm8gKnJvb3QsCiAJCQljb250aW51ZTsJCQkvKiBu b3QgbWVyZ2Vqb2luYWJsZSAqLwogCiAJCS8qCi0JCSAqIENoZWNrIGlmIGNsYXVzZSBoYXMg dGhlIGZvcm0gIm91dGVyIG9wIGlubmVyIiBvciAiaW5uZXIgb3Agb3V0ZXIiLAotCQkgKiBh bmQgaWYgc28gbWFyayB3aGljaCBzaWRlIGlzIGlubmVyLgorCQkgKiBDaGVjayBpZiB0aGUg Y2xhdXNlIGhhcyB0aGUgZm9ybSAib3V0ZXIgb3AgaW5uZXIiIG9yICJpbm5lciBvcAorCQkg KiBvdXRlciIsIGFuZCBpZiBzbyBtYXJrIHdoaWNoIHNpZGUgaXMgaW5uZXIuCiAJCSAqLwog CQlpZiAoIWNsYXVzZV9zaWRlc19tYXRjaF9qb2luKHJlc3RyaWN0aW5mbywgb3V0ZXJyZWxp ZHMsCiAJCQkJCQkJCQkgaW5uZXJyZWwtPnJlbGlkcykpCiAJCQljb250aW51ZTsJCQkvKiBu byBnb29kIGZvciB0aGVzZSBpbnB1dCByZWxhdGlvbnMgKi8KIAotCQkvKiBPSywgYWRkIHRv IGxpc3QgKi8KKwkJLyogT0ssIGFkZCB0byB0aGUgbGlzdCAqLwogCQljbGF1c2VfbGlzdCA9 IGxhcHBlbmQoY2xhdXNlX2xpc3QsIHJlc3RyaWN0aW5mbyk7CiAJfQogCiAJLyogTGV0IHJl bF9pc19kaXN0aW5jdF9mb3IoKSBkbyB0aGUgaGFyZCB3b3JrICovCi0JcmV0dXJuIHJlbF9p c19kaXN0aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0KTsKKwlyZXR1cm4g cmVsX2lzX2Rpc3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3QsIGV4dHJh X2NsYXVzZXMpOworfQorCisvKgorICogVXBkYXRlIEVDIG1lbWJlcnMgdG8gcG9pbnQgdG8g dGhlIHJlbWFpbmluZyByZWxhdGlvbiBpbnN0ZWFkIG9mIHRoZSByZW1vdmVkCisgKiBvbmUs IHJlbW92aW5nIGR1cGxpY2F0ZXMuCisgKgorICogUmVzdHJpY3Rpb24gY2xhdXNlcyBmb3Ig YmFzZSByZWxhdGlvbnMgYXJlIGFscmVhZHkgZGlzdHJpYnV0ZWQgdG8KKyAqIHRoZSByZXNw ZWN0aXZlIGJhc2VyZXN0cmljdGluZm8gbGlzdHMgKHNlZQorICogZ2VuZXJhdGVfaW1wbGll ZF9lcXVhbGl0aWVzX2Zvcl9jb2x1bW4pLiBUaGUgYWJvdmUgY29kZSBoYXMgYWxyZWFkeSBw cm9jZXNzZWQKKyAqIHRoaXMgbGlzdCwgYW5kIHVwZGF0ZWQgdGhlc2UgY2xhdXNlcyB0byBy ZWZlcmVuY2UgdGhlIHJlbWFpbmluZworICogcmVsYXRpb24sIHNvIHdlIGNhbiBza2lwIHRo ZW0gaGVyZSBiYXNlZCBvbiB0aGVpciByZWxpZHMuCisgKgorICogTGlrZXdpc2UsIHdlIGhh dmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIGpvaW4gY2xhdXNlcyB0aGF0IGpvaW4gdGhlCisg KiByZW1vdmVkIHJlbGF0aW9uIHRvIHRoZSByZW1haW5pbmcgb25lLgorICoKKyAqIEZpbmFs bHksIHRoZXJlIGFyZSBqb2luIGNsYXVzZXMgdGhhdCBqb2luIHRoZSByZW1vdmVkIHJlbGF0 aW9uIHRvCisgKiBzb21lIHRoaXJkIHJlbGF0aW9uLiBXZSBjYW4ndCBqdXN0IGRlbGV0ZSB0 aGUgc291cmNlIGNsYXVzZXMgYW5kCisgKiByZWdlbmVyYXRlIHRoZW0gZnJvbSB0aGUgRUMg YmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBlcXVhbGl0eQorICogb3BlcmF0b3JzIG1pZ2h0 IGJlIG1pc3NpbmcgKHNlZSB0aGUgaGFuZGxpbmcgb2YgZWNfYnJva2VuKS4KKyAqIFRoZXJl Zm9yZSwgd2Ugd2lsbCB1cGRhdGUgdGhlIHJlZmVyZW5jZXMgaW4gdGhlIHNvdXJjZSBjbGF1 c2VzLgorICoKKyAqIERlcml2ZWQgY2xhdXNlcyBjYW4gYmUgZ2VuZXJhdGVkIGFnYWluLCBz byBpdCBpcyBzaW1wbGVyIHRvIGp1c3QKKyAqIGRlbGV0ZSB0aGVtLgorICovCitzdGF0aWMg dm9pZAordXBkYXRlX2VjbGFzc2VzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBpbnQgZnJvbSwg aW50IHRvKQoreworCUxpc3QJICAgKm5ld19tZW1iZXJzID0gTklMOworCUxpc3QJICAgKm5l d19zb3VyY2VzID0gTklMOworCisJZm9yZWFjaF9ub2RlKEVxdWl2YWxlbmNlTWVtYmVyLCBl bSwgZWMtPmVjX21lbWJlcnMpCisJeworCQlib29sCQlpc19yZWR1bmRhbnQgPSBmYWxzZTsK KworCQlpZiAoIWJtc19pc19tZW1iZXIoZnJvbSwgZW0tPmVtX3JlbGlkcykpCisJCXsKKwkJ CW5ld19tZW1iZXJzID0gbGFwcGVuZChuZXdfbWVtYmVycywgZW0pOworCQkJY29udGludWU7 CisJCX0KKworCQllbS0+ZW1fcmVsaWRzID0gcmVwbGFjZV9yZWxpZChlbS0+ZW1fcmVsaWRz LCBmcm9tLCB0byk7CisJCWVtLT5lbV9qZG9tYWluLT5qZF9yZWxpZHMgPSByZXBsYWNlX3Jl bGlkKGVtLT5lbV9qZG9tYWluLT5qZF9yZWxpZHMsIGZyb20sIHRvKTsKKworCQkvKiBXZSBv bmx5IHByb2Nlc3MgaW5uZXIgam9pbnMgKi8KKwkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikg ZW0tPmVtX2V4cHIsIGZyb20sIHRvLCAwKTsKKworCQlmb3JlYWNoX25vZGUoRXF1aXZhbGVu Y2VNZW1iZXIsIG90aGVyLCBuZXdfbWVtYmVycykKKwkJeworCQkJaWYgKCFlcXVhbChlbS0+ ZW1fcmVsaWRzLCBvdGhlci0+ZW1fcmVsaWRzKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYg KGVxdWFsKGVtLT5lbV9leHByLCBvdGhlci0+ZW1fZXhwcikpCisJCQl7CisJCQkJaXNfcmVk dW5kYW50ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghaXNfcmVk dW5kYW50KQorCQkJbmV3X21lbWJlcnMgPSBsYXBwZW5kKG5ld19tZW1iZXJzLCBlbSk7CisJ fQorCisJbGlzdF9mcmVlKGVjLT5lY19tZW1iZXJzKTsKKwllYy0+ZWNfbWVtYmVycyA9IG5l d19tZW1iZXJzOworCisJbGlzdF9mcmVlKGVjLT5lY19kZXJpdmVzKTsKKwllYy0+ZWNfZGVy aXZlcyA9IE5VTEw7CisKKwkvKiBVcGRhdGUgRUMgc291cmNlIGV4cHJlc3Npb25zICovCisJ Zm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgcmluZm8sIGVjLT5lY19zb3VyY2VzKQorCXsK KwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7CisKKwkJaWYgKCFibXNfaXNfbWVtYmVy KGZyb20sIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpKQorCQl7CisJCQluZXdfc291cmNlcyA9 IGxhcHBlbmQobmV3X3NvdXJjZXMsIHJpbmZvKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ Q2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgcmluZm8sIGZyb20sIHRvLCAwKTsKKworCQkvKgor CQkgKiBBZnRlciBzd2l0Y2hpbmcgdGhlIGNsYXVzZSB0byB0aGUgcmVtYWluaW5nIHJlbGF0 aW9uLCBjaGVjayBpdCBmb3IKKwkJICogcmVkdW5kYW5jeSB3aXRoIGV4aXN0aW5nIG9uZXMu IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yCisJCSAqIHJlZHVuZGFuY3kgd2l0aCBkZXJp dmVkIGNsYXVzZXMsIGJlY2F1c2Ugd2UndmUganVzdCBkZWxldGVkIHRoZW0uCisJCSAqLwor CQlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCBvdGhlciwgbmV3X3NvdXJjZXMpCisJCXsK KwkJCWlmICghZXF1YWwocmluZm8tPmNsYXVzZV9yZWxpZHMsIG90aGVyLT5jbGF1c2VfcmVs aWRzKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGVxdWFsKHJpbmZvLT5jbGF1c2UsIG90 aGVyLT5jbGF1c2UpKQorCQkJeworCQkJCWlzX3JlZHVuZGFudCA9IHRydWU7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpZiAoIWlzX3JlZHVuZGFudCkKKwkJCW5ld19zb3VyY2Vz ID0gbGFwcGVuZChuZXdfc291cmNlcywgcmluZm8pOworCX0KKworCWxpc3RfZnJlZShlYy0+ ZWNfc291cmNlcyk7CisJZWMtPmVjX3NvdXJjZXMgPSBuZXdfc291cmNlczsKKwllYy0+ZWNf cmVsaWRzID0gcmVwbGFjZV9yZWxpZChlYy0+ZWNfcmVsaWRzLCBmcm9tLCB0byk7Cit9CisK Ky8qCisgKiAiTG9naWNhbGx5IiBjb21wYXJlcyB0d28gUmVzdHJpY3RJbmZvJ3MgaWdub3Jp bmcgdGhlICdyaW5mb19zZXJpYWwnIGZpZWxkLAorICogd2hpY2ggbWFrZXMgYWxtb3N0IGV2 ZXJ5IFJlc3RyaWN0SW5mbyB1bmlxdWUuICBUaGlzIHR5cGUgb2YgY29tcGFyaXNvbiBpcwor ICogdXNlZnVsIHdoZW4gcmVtb3ZpbmcgZHVwbGljYXRlcyB3aGlsZSBtb3ZpbmcgUmVzdHJp Y3RJbmZvJ3MgZnJvbSByZW1vdmVkCisgKiByZWxhdGlvbiB0byByZW1haW5pbmcgcmVsYXRp b24gZHVyaW5nIHNlbGYtam9pbiBlbGltaW5hdGlvbi4KKyAqCisgKiBYWFg6IEluIHRoZSBm dXR1cmUsIHdlIG1pZ2h0IHJlbW92ZSB0aGUgJ3JpbmZvX3NlcmlhbCcgZmllbGQgY29tcGxl dGVseSBhbmQKKyAqIGdldCByaWQgb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGJv b2wKK3Jlc3RyaWN0X2luZm9zX2xvZ2ljYWxseV9lcXVhbChSZXN0cmljdEluZm8gKmEsIFJl c3RyaWN0SW5mbyAqYikKK3sKKwlpbnQJCQlzYXZlZF9yaW5mb19zZXJpYWwgPSBhLT5yaW5m b19zZXJpYWw7CisJYm9vbAkJcmVzdWx0OworCisJYS0+cmluZm9fc2VyaWFsID0gYi0+cmlu Zm9fc2VyaWFsOworCXJlc3VsdCA9IGVxdWFsKGEsIGIpOworCWEtPnJpbmZvX3NlcmlhbCA9 IHNhdmVkX3JpbmZvX3NlcmlhbDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBS ZW1vdmUgYSByZWxhdGlvbiBhZnRlciB3ZSBoYXZlIHByb3ZlbiB0aGF0IGl0IHBhcnRpY2lw YXRlcyBvbmx5IGluIGFuCisgKiB1bm5lZWRlZCB1bmlxdWUgc2VsZiBqb2luLgorICoKKyAq IFJlcGxhY2UgYW55IGxpbmtzIGluIHBsYW5uZXIgaW5mbyBzdHJ1Y3R1cmVzLgorICoKKyAq IFRyYW5zZmVyIGpvaW4gYW5kIHJlc3RyaWN0aW9uIGNsYXVzZXMgZnJvbSB0aGUgcmVtb3Zl ZCByZWxhdGlvbiB0byB0aGUKKyAqIHJlbWFpbmluZyBvbmUuIFdlIGNoYW5nZSB0aGUgVmFy cyBvZiB0aGUgY2xhdXNlIHRvIHBvaW50IHRvIHRoZQorICogcmVtYWluaW5nIHJlbGF0aW9u IGluc3RlYWQgb2YgdGhlIHJlbW92ZWQgb25lLiBUaGUgY2xhdXNlcyB0aGF0IHJlcXVpcmUK KyAqIGEgc3Vic2V0IG9mIGpvaW5yZWxpZHMgYmVjb21lIHJlc3RyaWN0aW9uIGNsYXVzZXMg b2YgdGhlIHJlbWFpbmluZworICogcmVsYXRpb24sIGFuZCBvdGhlcnMgcmVtYWluIGpvaW4g Y2xhdXNlcy4gV2UgYXBwZW5kIHRoZW0gdG8KKyAqIGJhc2VyZXN0cmljdGluZm8gYW5kIGpv aW5pbmZvIHJlc3BlY3RpdmVseSwgdHJ5aW5nIG5vdCB0byBpbnRyb2R1Y2UKKyAqIGR1cGxp Y2F0ZXMuCisgKgorICogV2UgYWxzbyBoYXZlIHRvIHByb2Nlc3MgdGhlICdqb2luY2xhdXNl cycgbGlzdCBoZXJlLCBiZWNhdXNlIGl0CisgKiBjb250YWlucyBFQy1kZXJpdmVkIGpvaW4g Y2xhdXNlcyB3aGljaCBtdXN0IGJlY29tZSBmaWx0ZXIgY2xhdXNlcy4gSXQKKyAqIGlzIG5v dCBlbm91Z2ggdG8ganVzdCBjb3JyZWN0IHRoZSBFQ3MgYmVjYXVzZSB0aGUgRUMtZGVyaXZl ZAorICogcmVzdHJpY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYmVmb3JlIGpvaW4gcmVtb3ZhbCAo c2VlCisgKiBnZW5lcmF0ZV9iYXNlX2ltcGxpZWRfZXF1YWxpdGllcykuCisgKgorICogTk9U RTogUmVtZW1iZXIgdG8ga2VlcCB0aGUgY29kZSBpbiBzeW5jIHdpdGggUGxhbm5lckluZm8g dG8gYmUgc3VyZSBhbGwKKyAqIGNhY2hlZCByZWxpZHMgYW5kIHJlbGlkIGJpdG1hcHNldHMg Y2FuIGJlIGNvcnJlY3RseSBjbGVhbmVkIGR1cmluZyB0aGUgc2VsZgorICogam9pbiBlbGlt aW5hdGlvbiBwcm9jZWR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCityZW1vdmVfc2VsZl9qb2lu X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUGxhblJvd01hcmsgKmttYXJrLCBQbGFuUm93TWFy ayAqcm1hcmssCisJCQkJCSBSZWxPcHRJbmZvICp0b0tlZXAsIFJlbE9wdEluZm8gKnRvUmVt b3ZlLAorCQkJCQkgTGlzdCAqcmVzdHJpY3RsaXN0KQoreworCUxpc3QJICAgKmpvaW5pbmZv czsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQlpOworCUxpc3QJICAgKmppbmZvX2NhbmRp ZGF0ZXMgPSBOSUw7CisJTGlzdAkgICAqYmluZm9fY2FuZGlkYXRlcyA9IE5JTDsKKworCUFz c2VydCh0b0tlZXAtPnJlbGlkID4gMCk7CisJQXNzZXJ0KHRvUmVtb3ZlLT5yZWxpZCA+IDAp OworCisJLyoKKwkgKiBSZXBsYWNlIHRoZSBpbmRleCBvZiB0aGUgcmVtb3ZpbmcgdGFibGUg d2l0aCB0aGUga2VlcGluZyBvbmUuIFRoZQorCSAqIHRlY2huaXF1ZSBvZiByZW1vdmluZy9k aXN0cmlidXRpbmcgcmVzdHJpY3RpbmZvIGlzIHVzZWQgaGVyZSB0byBhdHRhY2gKKwkgKiBq dXN0IGFwcGVhcmVkIChmb3Iga2VlcGluZyByZWxhdGlvbikgam9pbiBjbGF1c2VzIGFuZCBh dm9pZCBhZGRpbmcKKwkgKiBkdXBsaWNhdGVzIG9mIHRob3NlIHRoYXQgYWxyZWFkeSBleGlz dCBpbiB0aGUgam9pbmluZm8gbGlzdC4KKwkgKi8KKwlqb2luaW5mb3MgPSBsaXN0X2NvcHko dG9SZW1vdmUtPmpvaW5pbmZvKTsKKwlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5m bywgam9pbmluZm9zKQorCXsKKwkJcmVtb3ZlX2pvaW5fY2xhdXNlX2Zyb21fcmVscyhyb290 LCByaW5mbywgcmluZm8tPnJlcXVpcmVkX3JlbGlkcyk7CisJCUNoYW5nZVZhck5vZGVzKChO b2RlICopIHJpbmZvLCB0b1JlbW92ZS0+cmVsaWQsIHRvS2VlcC0+cmVsaWQsIDApOworCisJ CWlmIChibXNfbWVtYmVyc2hpcChyaW5mby0+cmVxdWlyZWRfcmVsaWRzKSA9PSBCTVNfTVVM VElQTEUpCisJCQlqaW5mb19jYW5kaWRhdGVzID0gbGFwcGVuZChqaW5mb19jYW5kaWRhdGVz LCByaW5mbyk7CisJCWVsc2UKKwkJCWJpbmZvX2NhbmRpZGF0ZXMgPSBsYXBwZW5kKGJpbmZv X2NhbmRpZGF0ZXMsIHJpbmZvKTsKKwl9CisKKwkvKgorCSAqIENvbmNhdGVuYXRlIHJlc3Ry aWN0bGlzdCB0byB0aGUgbGlzdCBvZiBiYXNlIHJlc3RyaWN0aW9ucyBvZiB0aGUKKwkgKiBy ZW1vdmluZyB0YWJsZSBqdXN0IHRvIHNpbXBsaWZ5IHRoZSByZXBsYWNlbWVudCBwcm9jZWR1 cmU6IGFsbCBvZiB0aGVtCisJICogd2VyZW4ndCBjb25uZWN0ZWQgdG8gYW55IGtlZXBpbmcg cmVsYXRpb25zIGFuZCBuZWVkIHRvIGJlIGFkZGVkIHRvIHNvbWUKKwkgKiByZWxzLgorCSAq LworCXRvUmVtb3ZlLT5iYXNlcmVzdHJpY3RpbmZvID0gbGlzdF9jb25jYXQodG9SZW1vdmUt PmJhc2VyZXN0cmljdGluZm8sCisJCQkJCQkJCQkJCSByZXN0cmljdGxpc3QpOworCWZvcmVh Y2hfbm9kZShSZXN0cmljdEluZm8sIHJpbmZvLCB0b1JlbW92ZS0+YmFzZXJlc3RyaWN0aW5m bykKKwl7CisJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIHJpbmZvLCB0b1JlbW92ZS0+cmVs aWQsIHRvS2VlcC0+cmVsaWQsIDApOworCisJCWlmIChibXNfbWVtYmVyc2hpcChyaW5mby0+ cmVxdWlyZWRfcmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpCisJCQlqaW5mb19jYW5kaWRhdGVz ID0gbGFwcGVuZChqaW5mb19jYW5kaWRhdGVzLCByaW5mbyk7CisJCWVsc2UKKwkJCWJpbmZv X2NhbmRpZGF0ZXMgPSBsYXBwZW5kKGJpbmZvX2NhbmRpZGF0ZXMsIHJpbmZvKTsKKwl9CisK KwkvKgorCSAqIE5vdywgYWRkIGFsbCBub24tcmVkdW5kYW50IGNsYXVzZXMgdG8gdGhlIGtl ZXBpbmcgcmVsYXRpb24uCisJICogQ29udHJhZGljdG9yeSBvcGVyYXRpb24uIE9uIHRoZSBv bmUgc2lkZSwgd2UgcmVkdWNlIHRoZSBsZW5ndGggb2YKKwkgKiByZXN0cmljdCBsaXN0cyB0 aGF0IGNhbiBpbXBhY3QgcGxhbm5pbmcgb3IgZXhlY3V0aW5nIHRpbWUuCisJICogQWRkaXRp b25hbGx5LCB3ZSBpbXByb3ZlIHRoZSBhY2N1cmFjeSBvZiBjYXJkaW5hbGl0eSBlc3RpbWF0 aW9uLiBPbiB0aGUKKwkgKiBvdGhlciBzaWRlLCBpdCBpcyBvbmUgbW9yZSBwbGFjZSB0aGF0 IGNhbiBtYWtlIHBsYW5uaW5nIHRpbWUgbXVjaAorCSAqIGxvbmdlciBpbiBzcGVjaWZpYyBj YXNlcy4gSXQgd291bGQgaGF2ZSBiZWVuIGJldHRlciB0byBhdm9pZCBjYWxsaW5nCisJICog dGhlIGVxdWFsKCkgZnVuY3Rpb24gaGVyZSwgYnV0IGl0J3MgdGhlIG9ubHkgd2F5IHRvIGRl dGVjdCBkdXBsaWNhdGVkCisJICogaW5lcXVhbGl0eSBleHByZXNzaW9ucy4KKwkgKi8KKwlm b3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgYmluZm9fY2FuZGlkYXRlcykKKwl7 CisJCWJvb2wJCWlzX3JlZHVuZGFudCA9IGZhbHNlOworCisJCUFzc2VydCghYm1zX2lzX21l bWJlcih0b1JlbW92ZS0+cmVsaWQsIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpKTsKKworCQlm b3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCBzcmMsIHRvS2VlcC0+YmFzZXJlc3RyaWN0aW5m bykKKwkJeworCQkJaWYgKCFibXNfZXF1YWwoc3JjLT5jbGF1c2VfcmVsaWRzLCByaW5mby0+ Y2xhdXNlX3JlbGlkcykpCisJCQkJLyogQ29uc3QgYW5kIG5vbi1jb25zdCBleHByZXNzaW9u cyBjYW4ndCBiZSBlcXVhbCAqLworCQkJCWNvbnRpbnVlOworCisJCQlpZiAoc3JjID09IHJp bmZvIHx8CisJCQkJKHJpbmZvLT5wYXJlbnRfZWMgIT0gTlVMTAorCQkJCSAmJiBzcmMtPnBh cmVudF9lYyA9PSByaW5mby0+cGFyZW50X2VjKQorCQkJCXx8IHJlc3RyaWN0X2luZm9zX2xv Z2ljYWxseV9lcXVhbChyaW5mbywgc3JjKSkKKwkJCXsKKwkJCQlpc19yZWR1bmRhbnQgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghaXNfcmVkdW5kYW50KQorCQkJ ZGlzdHJpYnV0ZV9yZXN0cmljdGluZm9fdG9fcmVscyhyb290LCByaW5mbyk7CisJfQorCWZv cmVhY2hfbm9kZShSZXN0cmljdEluZm8sIHJpbmZvLCBqaW5mb19jYW5kaWRhdGVzKQorCXsK KwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7CisKKwkJQXNzZXJ0KCFibXNfaXNfbWVt YmVyKHRvUmVtb3ZlLT5yZWxpZCwgcmluZm8tPnJlcXVpcmVkX3JlbGlkcykpOworCisJCWZv cmVhY2hfbm9kZShSZXN0cmljdEluZm8sIHNyYywgdG9LZWVwLT5qb2luaW5mbykKKwkJewor CQkJaWYgKCFibXNfZXF1YWwoc3JjLT5jbGF1c2VfcmVsaWRzLCByaW5mby0+Y2xhdXNlX3Jl bGlkcykpCisJCQkJLyogQ2FuJ3QgY29tcGFyZSB0cml2aWFsbHkgZGlmZmVyZW50IGNsYXVz ZXMgKi8KKwkJCQljb250aW51ZTsKKworCQkJaWYgKHNyYyA9PSByaW5mbyB8fAorCQkJCShy aW5mby0+cGFyZW50X2VjICE9IE5VTEwKKwkJCQkgJiYgc3JjLT5wYXJlbnRfZWMgPT0gcmlu Zm8tPnBhcmVudF9lYykKKwkJCQl8fCByZXN0cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwo cmluZm8sIHNyYykpCisJCQl7CisJCQkJaXNfcmVkdW5kYW50ID0gdHJ1ZTsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCQlpZiAoIWlzX3JlZHVuZGFudCkKKwkJCWRpc3RyaWJ1dGVfcmVz dHJpY3RpbmZvX3RvX3JlbHMocm9vdCwgcmluZm8pOworCX0KKwlsaXN0X2ZyZWUoYmluZm9f Y2FuZGlkYXRlcyk7CisJbGlzdF9mcmVlKGppbmZvX2NhbmRpZGF0ZXMpOworCisJLyoKKwkg KiBBcnJhbmdlIGVxdWl2YWxlbmNlIGNsYXNzZXMsIG1lbnRpb25lZCByZW1vdmluZyBhIHRh YmxlLCB3aXRoIHRoZQorCSAqIGtlZXBpbmcgb25lOiB2YXJubyBvZiByZW1vdmluZyB0YWJs ZSBzaG91bGQgYmUgcmVwbGFjZWQgaW4gbWVtYmVycyBhbmQKKwkgKiBzb3VyY2VzIGxpc3Rz LiBBbHNvLCByZW1vdmUgZHVwbGljYXRlZCBlbGVtZW50cyBpZiB0aGlzIHJlcGxhY2VtZW50 CisJICogcHJvY2VkdXJlIGNyZWF0ZWQgdGhlbS4KKwkgKi8KKwlpID0gLTE7CisJd2hpbGUg KChpID0gYm1zX25leHRfbWVtYmVyKHRvUmVtb3ZlLT5lY2xhc3NfaW5kZXhlcywgaSkpID49 IDApCisJeworCQlFcXVpdmFsZW5jZUNsYXNzICplYyA9IChFcXVpdmFsZW5jZUNsYXNzICop IGxpc3RfbnRoKHJvb3QtPmVxX2NsYXNzZXMsIGkpOworCisJCXVwZGF0ZV9lY2xhc3Nlcyhl YywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJdG9LZWVwLT5lY2xhc3Nf aW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHRvS2VlcC0+ZWNsYXNzX2luZGV4ZXMsIGkpOwor CX0KKworCS8qCisJICogVHJhbnNmZXIgdGhlIHRhcmdldGxpc3QgYW5kIGF0dHJfbmVlZGVk IGZsYWdzLgorCSAqLworCisJZm9yZWFjaChsYywgdG9SZW1vdmUtPnJlbHRhcmdldC0+ZXhw cnMpCisJeworCQlOb2RlCSAgICpub2RlID0gbGZpcnN0KGxjKTsKKwkJQ2hhbmdlVmFyTm9k ZXMobm9kZSwgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkLCAwKTsKKwkJaWYgKCFs aXN0X21lbWJlcih0b0tlZXAtPnJlbHRhcmdldC0+ZXhwcnMsIG5vZGUpKQorCQkJdG9LZWVw LT5yZWx0YXJnZXQtPmV4cHJzID0gbGFwcGVuZCh0b0tlZXAtPnJlbHRhcmdldC0+ZXhwcnMs IG5vZGUpOworCX0KKworCWZvciAoaSA9IHRvS2VlcC0+bWluX2F0dHI7IGkgPD0gdG9LZWVw LT5tYXhfYXR0cjsgaSsrKQorCXsKKwkJaW50CQkJYXR0bm8gPSBpIC0gdG9LZWVwLT5taW5f YXR0cjsKKworCQl0b1JlbW92ZS0+YXR0cl9uZWVkZWRbYXR0bm9dID0gcmVwbGFjZV9yZWxp ZCh0b1JlbW92ZS0+YXR0cl9uZWVkZWRbYXR0bm9dLAorCQkJCQkJCQkJCQkJCSB0b1JlbW92 ZS0+cmVsaWQsIHRvS2VlcC0+cmVsaWQpOworCQl0b0tlZXAtPmF0dHJfbmVlZGVkW2F0dG5v XSA9IGJtc19hZGRfbWVtYmVycyh0b0tlZXAtPmF0dHJfbmVlZGVkW2F0dG5vXSwKKwkJCQkJ CQkJCQkJCQkgdG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5vXSk7CisJfQorCisJLyoKKwkg KiBJZiB0aGUgcmVtb3ZlZCByZWxhdGlvbiBoYXMgYSByb3cgbWFyaywgdHJhbnNmZXIgaXQg dG8gdGhlIHJlbWFpbmluZworCSAqIG9uZS4KKwkgKgorCSAqIElmIGJvdGggcmVscyBoYXZl IHJvdyBtYXJrcywganVzdCBrZWVwIHRoZSBvbmUgY29ycmVzcG9uZGluZyB0byB0aGUKKwkg KiByZW1haW5pbmcgcmVsYXRpb24sIGJlY2F1c2Ugd2UgdmVyaWZpZWQgZWFybGllciB0aGF0 IHRoZXkgaGF2ZSB0aGUgc2FtZQorCSAqIHN0cmVuZ3RoLgorCSAqLworCWlmIChybWFyaykK Kwl7CisJCWlmIChrbWFyaykKKwkJeworCQkJQXNzZXJ0KGttYXJrLT5tYXJrVHlwZSA9PSBy bWFyay0+bWFya1R5cGUpOworCisJCQlyb290LT5yb3dNYXJrcyA9IGxpc3RfZGVsZXRlX3B0 cihyb290LT5yb3dNYXJrcywgcm1hcmspOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogU2hv dWxkbid0IGhhdmUgaW5oZXJpdGFuY2UgY2hpbGRyZW4gaGVyZS4gKi8KKwkJCUFzc2VydChy bWFyay0+cnRpID09IHJtYXJrLT5wcnRpKTsKKworCQkJcm1hcmstPnJ0aSA9IHJtYXJrLT5w cnRpID0gdG9LZWVwLT5yZWxpZDsKKwkJfQorCX0KKworCS8qCisJICogUmVwbGFjZSB2YXJu byBpbiBhbGwgdGhlIHF1ZXJ5IHN0cnVjdHVyZXMsIGV4Y2VwdCBub2RlcyBSYW5nZVRibFJl ZgorCSAqIG90aGVyd2lzZSBsYXRlciByZW1vdmVfcmVsX2Zyb21fam9pbmxpc3Qgd2lsbCB5 aWVsZCBlcnJvcnMuCisJICovCisJQ2hhbmdlVmFyTm9kZXNFeHRlbmRlZCgoTm9kZSAqKSBy b290LT5wYXJzZSwgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkLCAwLCBmYWxzZSk7 CisKKwkvKiBSZXBsYWNlIGxpbmtzIGluIHRoZSBwbGFubmVyIGluZm8gKi8KKwlyZW1vdmVf cmVsX2Zyb21fcXVlcnkocm9vdCwgdG9SZW1vdmUsIHRvS2VlcC0+cmVsaWQsIE5VTEwsIE5V TEwpOworCisJLyogQXQgbGFzdCwgcmVwbGFjZSB2YXJubyBpbiByb290IHRhcmdldGxpc3Qg YW5kIEhBVklORyBjbGF1c2UgKi8KKwlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSByb290LT5w cm9jZXNzZWRfdGxpc3QsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCwgMCk7CisJ Q2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlLCB0 b1JlbW92ZS0+cmVsaWQsIHRvS2VlcC0+cmVsaWQsIDApOworCisJcmVwbGFjZV9yZWxpZChy b290LT5hbGxfcmVzdWx0X3JlbGlkcywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlk KTsKKwlyZXBsYWNlX3JlbGlkKHJvb3QtPmxlYWZfcmVzdWx0X3JlbGlkcywgdG9SZW1vdmUt PnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKworCS8qCisJICogVGhlcmUgbWF5IGJlIHJlZmVy ZW5jZXMgdG8gdGhlIHJlbCBpbiByb290LT5ma2V5X2xpc3QsIGJ1dCBpZiBzbywKKwkgKiBt YXRjaF9mb3JlaWduX2tleXNfdG9fcXVhbHMoKSB3aWxsIGdldCByaWQgb2YgdGhlbS4KKwkg Ki8KKworCS8qCisJICogRmluYWxseSwgcmVtb3ZlIHRoZSByZWwgZnJvbSB0aGUgYmFzZXJl bCBhcnJheSB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcKKwkgKiByZWZlcmVuY2VkIGFnYWlu LiAgKFdlIGNhbid0IGRvIHRoaXMgZWFybGllciBiZWNhdXNlCisJICogcmVtb3ZlX2pvaW5f Y2xhdXNlX2Zyb21fcmVscyB3aWxsIHRvdWNoIGl0LikKKwkgKi8KKwlyb290LT5zaW1wbGVf cmVsX2FycmF5W3RvUmVtb3ZlLT5yZWxpZF0gPSBOVUxMOworCisJLyogQW5kIG51a2UgdGhl IFJlbE9wdEluZm8sIGp1c3QgaW4gY2FzZSB0aGVyZSdzIGFub3RoZXIgYWNjZXNzIHBhdGgg Ki8KKwlwZnJlZSh0b1JlbW92ZSk7CisKKwkvKgorCSAqIE5vdyByZXBlYXQgY29uc3RydWN0 aW9uIG9mIGF0dHJfbmVlZGVkIGJpdHMgY29taW5nIGZyb20gYWxsIG90aGVyCisJICogc291 cmNlcy4KKwkgKi8KKwlyZWJ1aWxkX3BsYWNlaG9sZGVyX2F0dHJfbmVlZGVkKHJvb3QpOwor CXJlYnVpbGRfam9pbmNsYXVzZV9hdHRyX25lZWRlZChyb290KTsKKwlyZWJ1aWxkX2VjbGFz c19hdHRyX25lZWRlZChyb290KTsKKwlyZWJ1aWxkX2xhdGVyYWxfYXR0cl9uZWVkZWQocm9v dCk7Cit9CisKKy8qCisgKiBzcGxpdF9zZWxmam9pbl9xdWFscworICoJCVByb2Nlc3NlcyAn am9pbnF1YWxzJyBieSBidWlsZGluZyB0d28gbGlzdHM6IG9uZSBjb250YWluaW5nIHRoZSBx dWFscworICoJCXdoZXJlIHRoZSBjb2x1bW5zL2V4cHJzIGFyZSBvbiBlaXRoZXIgc2lkZSBv ZiB0aGUgam9pbiBtYXRjaCwgYW5kCisgKgkJYW5vdGhlciBvbmUgY29udGFpbmluZyB0aGUg cmVtYWluaW5nIHF1YWxzLgorICoKKyAqICdqb2lucXVhbHMnIG11c3Qgb25seSBjb250YWlu IHF1YWxzIGZvciBhIFJURV9SRUxBVElPTiBiZWluZyBqb2luZWQgdG8KKyAqIGl0c2VsZi4K KyAqLworc3RhdGljIHZvaWQKK3NwbGl0X3NlbGZqb2luX3F1YWxzKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpqb2lucXVhbHMsIExpc3QgKipzZWxmam9pbnF1YWxzLAorCQkJCQkgTGlz dCAqKm90aGVyam9pbnF1YWxzLCBpbnQgZnJvbSwgaW50IHRvKQoreworCUxpc3QJICAgKnNq b2lucXVhbHMgPSBOSUw7CisJTGlzdAkgICAqb2pvaW5xdWFscyA9IE5JTDsKKworCWZvcmVh Y2hfbm9kZShSZXN0cmljdEluZm8sIHJpbmZvLCBqb2lucXVhbHMpCisJeworCQlPcEV4cHIJ ICAgKmV4cHI7CisJCU5vZGUJICAgKmxlZnRleHByOworCQlOb2RlCSAgICpyaWdodGV4cHI7 CisKKwkJLyogSW4gZ2VuZXJhbCwgY2xhdXNlIGxvb2tzIGxpa2UgRihhcmcxKSA9IEcoYXJn MikgKi8KKwkJaWYgKCFyaW5mby0+bWVyZ2VvcGZhbWlsaWVzIHx8CisJCQlibXNfbnVtX21l bWJlcnMocmluZm8tPmNsYXVzZV9yZWxpZHMpICE9IDIgfHwKKwkJCWJtc19tZW1iZXJzaGlw KHJpbmZvLT5sZWZ0X3JlbGlkcykgIT0gQk1TX1NJTkdMRVRPTiB8fAorCQkJYm1zX21lbWJl cnNoaXAocmluZm8tPnJpZ2h0X3JlbGlkcykgIT0gQk1TX1NJTkdMRVRPTikKKwkJeworCQkJ b2pvaW5xdWFscyA9IGxhcHBlbmQob2pvaW5xdWFscywgcmluZm8pOworCQkJY29udGludWU7 CisJCX0KKworCQlleHByID0gKE9wRXhwciAqKSByaW5mby0+Y2xhdXNlOworCisJCWlmICgh SXNBKGV4cHIsIE9wRXhwcikgfHwgbGlzdF9sZW5ndGgoZXhwci0+YXJncykgIT0gMikKKwkJ eworCQkJb2pvaW5xdWFscyA9IGxhcHBlbmQob2pvaW5xdWFscywgcmluZm8pOworCQkJY29u dGludWU7CisJCX0KKworCQlsZWZ0ZXhwciA9IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSk7 CisJCXJpZ2h0ZXhwciA9IGNvcHlPYmplY3QoZ2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSkp OworCisJCWlmIChsZWZ0ZXhwciAmJiBJc0EobGVmdGV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJ CWxlZnRleHByID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSBsZWZ0ZXhwciktPmFyZzsK KwkJaWYgKHJpZ2h0ZXhwciAmJiBJc0EocmlnaHRleHByLCBSZWxhYmVsVHlwZSkpCisJCQly aWdodGV4cHIgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIHJpZ2h0ZXhwciktPmFyZzsK KworCQkvKgorCQkgKiBRdWl0ZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCBuYXJyb3dpbmcg dGhlIHVzZSBjYXNlLiBGb3IgZXhhbXBsZSwKKwkJICogd2hlbiB3ZSBoYXZlIGNhc3Qgb2Yg dGhlIHNhbWUgdmFyIHRvIGRpZmZlcmVudCAoYnV0IGNvbXBhdGlibGUpCisJCSAqIHR5cGVz LgorCQkgKi8KKwkJQ2hhbmdlVmFyTm9kZXMocmlnaHRleHByLCBibXNfc2luZ2xldG9uX21l bWJlcihyaW5mby0+cmlnaHRfcmVsaWRzKSwKKwkJCQkJICBibXNfc2luZ2xldG9uX21lbWJl cihyaW5mby0+bGVmdF9yZWxpZHMpLCAwKTsKKworCQlpZiAoZXF1YWwobGVmdGV4cHIsIHJp Z2h0ZXhwcikpCisJCQlzam9pbnF1YWxzID0gbGFwcGVuZChzam9pbnF1YWxzLCByaW5mbyk7 CisJCWVsc2UKKwkJCW9qb2lucXVhbHMgPSBsYXBwZW5kKG9qb2lucXVhbHMsIHJpbmZvKTsK Kwl9CisKKwkqc2VsZmpvaW5xdWFscyA9IHNqb2lucXVhbHM7CisJKm90aGVyam9pbnF1YWxz ID0gb2pvaW5xdWFsczsKK30KKworLyoKKyAqIENoZWNrIGZvciBhIGNhc2Ugd2hlbiB1bmlx dWVuZXNzIGlzIGF0IGxlYXN0IHBhcnRseSBkZXJpdmVkIGZyb20gYQorICogYmFzZXJlc3Ry aWN0aW5mbyBjbGF1c2UuIEluIHRoaXMgY2FzZSwgd2UgaGF2ZSBhIGNoYW5jZSB0byByZXR1 cm4gb25seQorICogb25lIHJvdyAoaWYgc3VjaCBjbGF1c2VzIG9uIGJvdGggc2lkZXMgb2Yg U0ogYXJlIGVxdWFsKSBvciBub3RoaW5nIChpZiB0aGV5CisgKiBhcmUgZGlmZmVyZW50KS4K KyAqLworc3RhdGljIGJvb2wKK21hdGNoX3VuaXF1ZV9jbGF1c2VzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpvdXRlciwgTGlzdCAqdWNsYXVzZXMsCisJCQkJCSBJbmRleCBy ZWxpZCkKK3sKKwlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgdWNsYXVzZXMp CisJeworCQlFeHByCSAgICpjbGF1c2U7CisJCU5vZGUJICAgKmljbGF1c2U7CisJCU5vZGUJ ICAgKmMxOworCQlib29sCQltYXRjaGVkID0gZmFsc2U7CisKKwkJQXNzZXJ0KG91dGVyLT5y ZWxpZCA+IDAgJiYgcmVsaWQgPiAwKTsKKworCQkvKiBPbmx5IGZpbHRlcnMgbGlrZSBmKFIu eDEsLi4uLFIueE4pID09IGV4cHIgd2Ugc2hvdWxkIGNvbnNpZGVyLiAqLworCQlBc3NlcnQo Ym1zX2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3JlbGlkcykgXgorCQkJICAgYm1zX2lzX2VtcHR5 KHJpbmZvLT5yaWdodF9yZWxpZHMpKTsKKworCQljbGF1c2UgPSAoRXhwciAqKSBjb3B5T2Jq ZWN0KHJpbmZvLT5jbGF1c2UpOworCQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSBjbGF1c2Us IHJlbGlkLCBvdXRlci0+cmVsaWQsIDApOworCisJCWljbGF1c2UgPSBibXNfaXNfZW1wdHko cmluZm8tPmxlZnRfcmVsaWRzKSA/IGdldF9yaWdodG9wKGNsYXVzZSkgOgorCQkJZ2V0X2xl ZnRvcChjbGF1c2UpOworCQljMSA9IGJtc19pc19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMp ID8gZ2V0X2xlZnRvcChjbGF1c2UpIDoKKwkJCWdldF9yaWdodG9wKGNsYXVzZSk7CisKKwkJ LyoKKwkJICogQ29tcGFyZSB0aGVzZSBsZWZ0IGFuZCByaWdodCBzaWRlcyB3aXRoIHRoZSBj b3JyZXNwb25kaW5nIHNpZGVzIG9mCisJCSAqIHRoZSBvdXRlcidzIGZpbHRlcnMuIElmIG5v IG9uZSBpcyBkZXRlY3RlZCAtIHJldHVybiBpbW1lZGlhdGVseS4KKwkJICovCisJCWZvcmVh Y2hfbm9kZShSZXN0cmljdEluZm8sIG9yaW5mbywgb3V0ZXItPmJhc2VyZXN0cmljdGluZm8p CisJCXsKKwkJCU5vZGUJICAgKm9jbGF1c2U7CisJCQlOb2RlCSAgICpjMjsKKworCQkJaWYg KG9yaW5mby0+bWVyZ2VvcGZhbWlsaWVzID09IE5JTCkKKwkJCQkvKiBEb24ndCBjb25zaWRl ciBjbGF1c2VzIHdoaWNoIGFyZW4ndCBzaW1pbGFyIHRvICdGKFgpPUcoWSknICovCisJCQkJ Y29udGludWU7CisKKwkJCUFzc2VydChpc19vcGNsYXVzZShvcmluZm8tPmNsYXVzZSkpOwor CisJCQlvY2xhdXNlID0gYm1zX2lzX2VtcHR5KG9yaW5mby0+bGVmdF9yZWxpZHMpID8KKwkJ CQlnZXRfcmlnaHRvcChvcmluZm8tPmNsYXVzZSkgOiBnZXRfbGVmdG9wKG9yaW5mby0+Y2xh dXNlKTsKKwkJCWMyID0gKGJtc19pc19lbXB0eShvcmluZm8tPmxlZnRfcmVsaWRzKSA/CisJ CQkJICBnZXRfbGVmdG9wKG9yaW5mby0+Y2xhdXNlKSA6IGdldF9yaWdodG9wKG9yaW5mby0+ Y2xhdXNlKSk7CisKKwkJCWlmIChlcXVhbChpY2xhdXNlLCBvY2xhdXNlKSAmJiBlcXVhbChj MSwgYzIpKQorCQkJeworCQkJCW1hdGNoZWQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJaWYgKCFtYXRjaGVkKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVy biB0cnVlOworfQorCisvKgorICogRmluZCBhbmQgcmVtb3ZlIHVuaXF1ZSBzZWxmIGpvaW5z IGluIGEgZ3JvdXAgb2YgYmFzZSByZWxhdGlvbnMgdGhhdCBoYXZlCisgKiB0aGUgc2FtZSBP aWQuCisgKgorICogUmV0dXJucyBhIHNldCBvZiByZWxpZHMgdGhhdCB3ZXJlIHJlbW92ZWQu CisgKi8KK3N0YXRpYyBSZWxpZHMKK3JlbW92ZV9zZWxmX2pvaW5zX29uZV9ncm91cChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3sKKwlSZWxpZHMJCXJlc3VsdCA9IE5V TEw7CisJaW50CQkJazsJCQkJLyogSW5kZXggb2Yga2VwdCByZWxhdGlvbiAqLworCWludAkJ CXIgPSAtMTsJCQkvKiBJbmRleCBvZiByZW1vdmVkIHJlbGF0aW9uICovCisKKwl3aGlsZSAo KHIgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCByKSkgPiAwKQorCXsKKwkJUmVsT3B0SW5m byAqaW5uZXIgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3JdOworCisJCWsgPSByOworCisJ CXdoaWxlICgoayA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIGspKSA+IDApCisJCXsKKwkJ CVJlbGlkcwkJam9pbnJlbGlkcyA9IE5VTEw7CisJCQlSZWxPcHRJbmZvICpvdXRlciA9IHJv b3QtPnNpbXBsZV9yZWxfYXJyYXlba107CisJCQlMaXN0CSAgICpyZXN0cmljdGxpc3Q7CisJ CQlMaXN0CSAgICpzZWxmam9pbnF1YWxzOworCQkJTGlzdAkgICAqb3RoZXJqb2lucXVhbHM7 CisJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCWJvb2wJCWppbmZvX2NoZWNrID0gdHJ1ZTsKKwkJ CVBsYW5Sb3dNYXJrICpvbWFyayA9IE5VTEw7CisJCQlQbGFuUm93TWFyayAqaW1hcmsgPSBO VUxMOworCQkJTGlzdAkgICAqdWNsYXVzZXMgPSBOSUw7CisKKwkJCS8qIEEgc2FuaXR5IGNo ZWNrOiB0aGUgcmVsYXRpb25zIGhhdmUgdGhlIHNhbWUgT2lkLiAqLworCQkJQXNzZXJ0KHJv b3QtPnNpbXBsZV9ydGVfYXJyYXlba10tPnJlbGlkID09CisJCQkJICAgcm9vdC0+c2ltcGxl X3J0ZV9hcnJheVtyXS0+cmVsaWQpOworCisJCQkvKgorCQkJICogSXQgaXMgaW1wb3NzaWJs ZSB0byBlbGltaW5hdGUgam9pbiBvZiB0d28gcmVsYXRpb25zIGlmIHRoZXkKKwkJCSAqIGJl bG9uZyB0byBkaWZmZXJlbnQgcnVsZXMgb2Ygb3JkZXIuIE90aGVyd2lzZSBwbGFubmVyIGNh bid0IGJlCisJCQkgKiBhYmxlIHRvIGZpbmQgYW55IHZhcmlhbnRzIG9mIGNvcnJlY3QgcXVl cnkgcGxhbi4KKwkJCSAqLworCQkJZm9yZWFjaChsYywgcm9vdC0+am9pbl9pbmZvX2xpc3Qp CisJCQl7CisJCQkJU3BlY2lhbEpvaW5JbmZvICppbmZvID0gKFNwZWNpYWxKb2luSW5mbyAq KSBsZmlyc3QobGMpOworCisJCQkJaWYgKChibXNfaXNfbWVtYmVyKGssIGluZm8tPnN5bl9s ZWZ0aGFuZCkgXgorCQkJCQkgYm1zX2lzX21lbWJlcihyLCBpbmZvLT5zeW5fbGVmdGhhbmQp KSB8fAorCQkJCQkoYm1zX2lzX21lbWJlcihrLCBpbmZvLT5zeW5fcmlnaHRoYW5kKSBeCisJ CQkJCSBibXNfaXNfbWVtYmVyKHIsIGluZm8tPnN5bl9yaWdodGhhbmQpKSkKKwkJCQl7CisJ CQkJCWppbmZvX2NoZWNrID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJ CWlmICghamluZm9fY2hlY2spCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBDaGVj ayBSb3cgTWFya3MgZXF1aXZhbGVuY2UuICBXZSBjYW4ndCByZW1vdmUgdGhlIGpvaW4gaWYg dGhlCisJCQkgKiByZWxhdGlvbnMgaGF2ZSByb3cgbWFya3Mgb2YgZGlmZmVyZW50IHN0cmVu Z3RoIChlLmcuIG9uZSBpcworCQkJICogbG9ja2VkIEZPUiBVUERBVEUgYW5kIGFub3RoZXIg anVzdCBoYXMgUk9XX01BUktfUkVGRVJFTkNFIGZvcgorCQkJICogRXZhbFBsYW5RdWFsIHJl Y2hlY2tpbmcpLgorCQkJICovCisJCQlmb3JlYWNoKGxjLCByb290LT5yb3dNYXJrcykKKwkJ CXsKKwkJCQlQbGFuUm93TWFyayAqcm93TWFyayA9IChQbGFuUm93TWFyayAqKSBsZmlyc3Qo bGMpOworCisJCQkJaWYgKHJvd01hcmstPnJ0aSA9PSBrKQorCQkJCXsKKwkJCQkJQXNzZXJ0 KGltYXJrID09IE5VTEwpOworCQkJCQlpbWFyayA9IHJvd01hcms7CisJCQkJfQorCQkJCWVs c2UgaWYgKHJvd01hcmstPnJ0aSA9PSByKQorCQkJCXsKKwkJCQkJQXNzZXJ0KG9tYXJrID09 IE5VTEwpOworCQkJCQlvbWFyayA9IHJvd01hcms7CisJCQkJfQorCisJCQkJaWYgKG9tYXJr ICYmIGltYXJrKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChvbWFyayAmJiBpbWFyayAm JiBvbWFyay0+bWFya1R5cGUgIT0gaW1hcmstPm1hcmtUeXBlKQorCQkJCWNvbnRpbnVlOwor CisJCQkvKgorCQkJICogV2Ugb25seSBkZWFsIHdpdGggYmFzZSByZWxzIGhlcmUsIHNvIHRo ZWlyIHJlbGlkcyBiaXRzZXQKKwkJCSAqIGNvbnRhaW5zIG9ubHkgb25lIG1lbWJlciAtLSB0 aGVpciByZWxpZC4KKwkJCSAqLworCQkJam9pbnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGpv aW5yZWxpZHMsIHIpOworCQkJam9pbnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxp ZHMsIGspOworCisJCQkvKgorCQkJICogUEhWcyBzaG91bGQgbm90IGltcG9zZSBhbnkgY29u c3RyYWludHMgb24gcmVtb3Zpbmcgc2VsZiBqb2lucy4KKwkJCSAqLworCisJCQkvKgorCQkJ ICogQXQgdGhpcyBzdGFnZSwgam9pbmluZm8gbGlzdHMgb2YgaW5uZXIgYW5kIG91dGVyIGNh biBjb250YWluCisJCQkgKiBvbmx5IGNsYXVzZXMsIHJlcXVpcmVkIGZvciBhIHN1cGVyaW9y IG91dGVyIGpvaW4gdGhhdCBjYW4ndAorCQkJICogaW5mbHVlbmNlIHRoaXMgb3B0aW1pemF0 aW9uLiBTbywgd2UgY2FuIGF2b2lkIHRvIGNhbGwgdGhlCisJCQkgKiBidWlsZF9qb2lucmVs X3Jlc3RyaWN0bGlzdCgpIHJvdXRpbmUuCisJCQkgKi8KKwkJCXJlc3RyaWN0bGlzdCA9IGdl bmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzKHJvb3QsIGpvaW5yZWxpZHMsCisJCQkJ CQkJCQkJCQkJCQlpbm5lci0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCQkJb3V0ZXIsIE5VTEwp OworCQkJaWYgKHJlc3RyaWN0bGlzdCA9PSBOSUwpCisJCQkJY29udGludWU7CisKKwkJCS8q CisJCQkgKiBQcm9jZXNzIHJlc3RyaWN0bGlzdCB0byBzZXBhcmF0ZSB0aGUgc2VsZiBqb2lu IHF1YWxzIG91dCBvZiB0aGUKKwkJCSAqIG90aGVyIHF1YWxzLiBlLmcgeCA9IHggZ29lcyB0 byBzZWxmam9pbnF1YWxzIGFuZCBhID0gYiB0bworCQkJICogb3RoZXJqb2lucXVhbHMuCisJ CQkgKi8KKwkJCXNwbGl0X3NlbGZqb2luX3F1YWxzKHJvb3QsIHJlc3RyaWN0bGlzdCwgJnNl bGZqb2lucXVhbHMsCisJCQkJCQkJCSAmb3RoZXJqb2lucXVhbHMsIGlubmVyLT5yZWxpZCwg b3V0ZXItPnJlbGlkKTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJlc3RyaWN0bGlzdCkg PT0KKwkJCQkJKGxpc3RfbGVuZ3RoKHNlbGZqb2lucXVhbHMpICsgbGlzdF9sZW5ndGgob3Ro ZXJqb2lucXVhbHMpKSk7CisKKwkJCS8qCisJCQkgKiBUbyBlbmFibGUgU0pFIGZvciB0aGUg b25seSBkZWdlbmVyYXRlIGNhc2Ugd2l0aG91dCBhbnkgc2VsZgorCQkJICogam9pbiBjbGF1 c2VzIGF0IGFsbCwgYWRkIGJhc2VyZXN0cmljdGluZm8gdG8gdGhpcyBsaXN0LiBUaGUKKwkJ CSAqIGRlZ2VuZXJhdGUgY2FzZSB3b3JrcyBvbmx5IGlmIGJvdGggc2lkZXMgaGF2ZSB0aGUg c2FtZSBjbGF1c2UuCisJCQkgKiBTbyBkb2Vzbid0IG1hdHRlciB3aGljaCBzaWRlIHRvIGFk ZC4KKwkJCSAqLworCQkJc2VsZmpvaW5xdWFscyA9IGxpc3RfY29uY2F0KHNlbGZqb2lucXVh bHMsIG91dGVyLT5iYXNlcmVzdHJpY3RpbmZvKTsKKworCQkJLyoKKwkJCSAqIERldGVybWlu ZSBpZiB0aGUgaW5uZXIgdGFibGUgY2FuIGR1cGxpY2F0ZSBvdXRlciByb3dzLiAgV2UgbXVz dAorCQkJICogYnlwYXNzIHRoZSB1bmlxdWUgcmVsIGNhY2hlIGhlcmUgc2luY2Ugd2UncmUg cG9zc2libHkgdXNpbmcgYQorCQkJICogc3Vic2V0IG9mIGpvaW4gcXVhbHMuIFdlIGNhbiB1 c2UgJ2ZvcmNlX2NhY2hlJyA9PSB0cnVlIHdoZW4gYWxsCisJCQkgKiBqb2luIHF1YWxzIGFy ZSBzZWxmLWpvaW4gcXVhbHMuICBPdGhlcndpc2UsIHdlIGNvdWxkIGVuZCB1cAorCQkJICog cHV0dGluZyBmYWxzZSBuZWdhdGl2ZXMgaW4gdGhlIGNhY2hlLgorCQkJICovCisJCQlpZiAo IWlubmVycmVsX2lzX3VuaXF1ZV9leHQocm9vdCwgam9pbnJlbGlkcywgaW5uZXItPnJlbGlk cywKKwkJCQkJCQkJCQlvdXRlciwgSk9JTl9JTk5FUiwgc2VsZmpvaW5xdWFscywKKwkJCQkJ CQkJCQlsaXN0X2xlbmd0aChvdGhlcmpvaW5xdWFscykgPT0gMCwKKwkJCQkJCQkJCQkmdWNs YXVzZXMpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogdWNsYXVzZXMgaXMgdGhl IGNvcHkgb2Ygb3V0ZXItPmJhc2VyZXN0cmljdGluZm8gdGhhdCBhc3NvY2lhdGVkIHdpdGgg YSBpbmRleC4KKwkJCSAqIFdlIGFscmVhZHkgcHJvdmVuIHRoYXQgYmFzZWQgb24ge291dGVy LT5iYXNlcmVzdHJpY3RpbmZvLCBzZWxmam9pbnF1YWxzfQorCQkJICogY29tcGFyc2lvbiB3 aXRoIHVuaXF1ZSBpbmRleCB3ZSBjYW4gZ3VhcmFudGVlcyB0aGF0IGZvciB0aGUgb3V0ZXIg cmVsIHRoZXJlIGlzCisJCQkgKiBhdCBtb3N0IG9uZSByb3cgd2hlcmUgY29sdW1ucyBlcXVh bCBnaXZlbiB2YWx1ZXMuIFNvbWV0aW1lcyB0aGF0IGlzIG5vdCBvay4gZS5nLgorCQkJICog IndoZXJlIHMxLmIgPSBzMi5iIGFuZCBzMS5hID0gMSBhbmQgczIuYSA9IDIiLiAodGhlIGlu ZGV4IGlzIGJhc2VkIG9uIGNvbHVtbihhLGIpLgorCQkJICogaW4gdGhlc2Ugc2NhcmVuaW8s IHdlIGFsc28gbmVlZCB0byB2YWxpZGF0ZSBlcXVhbGl0eSBvZiBvdXRlci0+YmFzZXJlc3Ry aWN0aW5mbworCQkJICogd2l0aCBpbm5lci0+b3V0ZXItPmJhc2VyZXN0cmljdGluZm8sCisJ CQkgKiBvciBlbHNlIHdlIHdvbid0IG1hdGNoIHRoZSBzYW1lIHJvdyBvbiBlYWNoIHNpZGUg b2YgdGhlIGpvaW4uCisJCQkgKi8KKwkJCWlmICghbWF0Y2hfdW5pcXVlX2NsYXVzZXMocm9v dCwgaW5uZXIsIHVjbGF1c2VzLCBvdXRlci0+cmVsaWQpKQorCQkJCWNvbnRpbnVlOworCisJ CQkvKgorCQkJICogV2UgY2FuIHJlbW92ZSBlaXRoZXIgcmVsYXRpb24sIHNvIHJlbW92ZSB0 aGUgaW5uZXIgb25lIGluIG9yZGVyCisJCQkgKiB0byBzaW1wbGlmeSB0aGlzIGxvb3AuCisJ CQkgKi8KKwkJCXJlbW92ZV9zZWxmX2pvaW5fcmVsKHJvb3QsIG9tYXJrLCBpbWFyaywgb3V0 ZXIsIGlubmVyLCByZXN0cmljdGxpc3QpOworCisJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJl cihyZXN1bHQsIHIpOworCisJCQkvKiBXZSBoYXZlIHJlbW92ZWQgdGhlIG91dGVyIHJlbGF0 aW9uLCB0cnkgdGhlIG5leHQgb25lLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogR2F0aGVyIGluZGV4ZXMgb2YgYmFzZSByZWxhdGlv bnMgZnJvbSB0aGUgam9pbmxpc3QgYW5kIHRyeSB0byBlbGltaW5hdGUgc2VsZgorICogam9p bnMuCisgKi8KK3N0YXRpYyBSZWxpZHMKK3JlbW92ZV9zZWxmX2pvaW5zX3JlY3Vyc2UoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5saXN0LCBSZWxpZHMgdG9SZW1vdmUpCit7CisJ TGlzdENlbGwgICAqamw7CisJUmVsaWRzCQlyZWxpZHMgPSBOVUxMOworCVNlbGZKb2luQ2Fu ZGlkYXRlICpjYW5kaWRhdGVzID0gTlVMTDsKKwlpbnQJCQlpOworCWludAkJCWo7CisJaW50 CQkJbnVtUmVsczsKKworCS8qIENvbGxlY3QgaW5kZXhlcyBvZiBiYXNlIHJlbGF0aW9ucyBv ZiB0aGUgam9pbiB0cmVlICovCisJZm9yZWFjaChqbCwgam9pbmxpc3QpCisJeworCQlOb2Rl CSAgICpqbG5vZGUgPSAoTm9kZSAqKSBsZmlyc3QoamwpOworCisJCWlmIChJc0Eoamxub2Rl LCBSYW5nZVRibFJlZikpCisJCXsKKwkJCWludAkJCXZhcm5vID0gKChSYW5nZVRibFJlZiAq KSBqbG5vZGUpLT5ydGluZGV4OworCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcm9vdC0+c2lt cGxlX3J0ZV9hcnJheVt2YXJub107CisKKwkJCS8qCisJCQkgKiBXZSBvbmx5IGNvbnNpZGVy IG9yZGluYXJ5IHJlbGF0aW9ucyBhcyBjYW5kaWRhdGVzIHRvIGJlIHJlbW92ZWQsCisJCQkg KiBhbmQgdGhlc2UgcmVsYXRpb25zIHNob3VsZCBub3QgaGF2ZSBUQUJMRVNBTVBMRSBjbGF1 c2VzCisJCQkgKiBzcGVjaWZpZWQuICBSZW1vdmluZyBhIHJlbGF0aW9uIHdpdGggVEFCTEVT QU1QTEUgY2xhdXNlIGNvdWxkCisJCQkgKiBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHN5bnRh eCBvZiB0aGUgcXVlcnkuCisJCQkgKiBCZWNhdXNlIG9mIFVQREFURS9ERUxFVEUgRVBRIG1l YWNoYW5pc20sIGN1cnJlbnRseSBRdWVyeS0+cmVzdWx0UmVsYXRpb24KKwkJCSAqIG9yIFF1 ZXJ5LT5tZXJnZVRhcmdldFJlbGF0aW9uIGFzc29jaWF0ZWQgcmVsIGNhbm5vdCBiZSBlbGlt aW5hdGVkLgorCQkJICovCisJCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiAm JgorCQkJCXJ0ZS0+cmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OICYmCisJCQkJcnRlLT50 YWJsZXNhbXBsZSA9PSBOVUxMICYmCisJCQkJdmFybm8gIT0gcm9vdC0+cGFyc2UtPnJlc3Vs dFJlbGF0aW9uICYmCisJCQkJdmFybm8gIT0gcm9vdC0+cGFyc2UtPm1lcmdlVGFyZ2V0UmVs YXRpb24pCisJCQl7CisJCQkJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKHZhcm5vLCByZWxpZHMp KTsKKwkJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHZhcm5vKTsKKwkJCX0K KwkJfQorCQllbHNlIGlmIChJc0Eoamxub2RlLCBMaXN0KSkKKwkJeworCQkJLyogUmVjdXJz aXZlbHkgZ28gaW5zaWRlIHRoZSBzdWItam9pbmxpc3QgKi8KKwkJCXRvUmVtb3ZlID0gcmVt b3ZlX3NlbGZfam9pbnNfcmVjdXJzZShyb290LCAoTGlzdCAqKSBqbG5vZGUsCisJCQkJCQkJ CQkJCQkgdG9SZW1vdmUpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgam9pbmxpc3Qgbm9kZSB0eXBlOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcoamxu b2RlKSk7CisJfQorCisJbnVtUmVscyA9IGJtc19udW1fbWVtYmVycyhyZWxpZHMpOworCisJ LyogTmVlZCBhdCBsZWFzdCB0d28gcmVsYXRpb25zIGZvciB0aGUgam9pbiAqLworCWlmIChu dW1SZWxzIDwgMikKKwkJcmV0dXJuIHRvUmVtb3ZlOworCisJLyoKKwkgKiBJbiBvcmRlciB0 byBmaW5kIHJlbGF0aW9ucyB3aXRoIHRoZSBzYW1lIG9pZCB3ZSBmaXJzdCBidWlsZCBhbiBh cnJheSBvZgorCSAqIGNhbmRpZGF0ZXMgYW5kIHRoZW4gc29ydCBpdCBieSBvaWQuCisJICov CisJY2FuZGlkYXRlcyA9IChTZWxmSm9pbkNhbmRpZGF0ZSAqKSBwYWxsb2Moc2l6ZW9mKFNl bGZKb2luQ2FuZGlkYXRlKSAqCisJCQkJCQkJCQkJCSAgbnVtUmVscyk7CisJaSA9IC0xOwor CWogPSAwOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIGkpKSA+PSAw KQorCXsKKwkJY2FuZGlkYXRlc1tqXS5yZWxpZCA9IGk7CisJCWNhbmRpZGF0ZXNbal0ucmVs b2lkID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtpXS0+cmVsaWQ7CisJCWorKzsKKwl9CisK Kwlxc29ydChjYW5kaWRhdGVzLCBudW1SZWxzLCBzaXplb2YoU2VsZkpvaW5DYW5kaWRhdGUp LAorCQkgIHNlbGZfam9pbl9jYW5kaWRhdGVzX2NtcCk7CisKKwkvKgorCSAqIEl0ZXJhdGl2 ZWx5IGZvcm0gYSBncm91cCBvZiByZWxhdGlvbiBpbmRleGVzIHdpdGggdGhlIHNhbWUgb2lk IGFuZAorCSAqIGxhdW5jaCB0aGUgcm91dGluZSB0aGF0IGRldGVjdHMgc2VsZi1qb2lucyBp biB0aGlzIGdyb3VwIGFuZCByZW1vdmVzCisJICogZXhjZXNzaXZlIHJhbmdlIHRhYmxlIGVu dHJpZXMuCisJICoKKwkgKiBBdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIGV4Y2x1ZGUg dGhlIGdyb3VwIGZyb20gdGhlIG92ZXJhbGwgcmVsaWRzCisJICogbGlzdC4gU28gZWFjaCBu ZXh0IGl0ZXJhdGlvbiBvZiB0aGUgY3ljbGUgd2lsbCBpbnZvbHZlIGxlc3MgYW5kIGxlc3MK KwkgKiB2YWx1ZSBvZiByZWxpZHMuCisJICovCisJaSA9IDA7CisJZm9yIChqID0gMTsgaiA8 IG51bVJlbHMgKyAxOyBqKyspCisJeworCQlpZiAoaiA9PSBudW1SZWxzIHx8IGNhbmRpZGF0 ZXNbal0ucmVsb2lkICE9IGNhbmRpZGF0ZXNbaV0ucmVsb2lkKQorCQl7CisJCQlpZiAoaiAt IGkgPj0gMikKKwkJCXsKKwkJCQkvKiBDcmVhdGUgYSBncm91cCBvZiByZWxhdGlvbiBpbmRl eGVzIHdpdGggdGhlIHNhbWUgb2lkICovCisJCQkJUmVsaWRzCQlncm91cCA9IE5VTEw7CisJ CQkJUmVsaWRzCQlyZW1vdmVkOworCisJCQkJd2hpbGUgKGkgPCBqKQorCQkJCXsKKwkJCQkJ Z3JvdXAgPSBibXNfYWRkX21lbWJlcihncm91cCwgY2FuZGlkYXRlc1tpXS5yZWxpZCk7CisJ CQkJCWkrKzsKKwkJCQl9CisJCQkJcmVsaWRzID0gYm1zX2RlbF9tZW1iZXJzKHJlbGlkcywg Z3JvdXApOworCisJCQkJLyoKKwkJCQkgKiBUcnkgdG8gcmVtb3ZlIHNlbGYtam9pbnMgZnJv bSBhIGdyb3VwIG9mIGlkZW50aWNhbCBlbnRyaWVzLgorCQkJCSAqIE1ha2UgdGhlIG5leHQg YXR0ZW1wdCBpdGVyYXRpdmVseSAtIGlmIHNvbWV0aGluZyBpcyBkZWxldGVkCisJCQkJICog ZnJvbSBhIGdyb3VwLCBjaGFuZ2VzIGluIGNsYXVzZXMgYW5kIGVxdWl2YWxlbmNlIGNsYXNz ZXMKKwkJCQkgKiBjYW4gZ2l2ZSB1cyBhIGNoYW5jZSB0byBmaW5kIG1vcmUgY2FuZGlkYXRl cy4KKwkJCQkgKi8KKwkJCQlkbworCQkJCXsKKwkJCQkJQXNzZXJ0KCFibXNfb3ZlcmxhcChn cm91cCwgdG9SZW1vdmUpKTsKKwkJCQkJcmVtb3ZlZCA9IHJlbW92ZV9zZWxmX2pvaW5zX29u ZV9ncm91cChyb290LCBncm91cCk7CisJCQkJCXRvUmVtb3ZlID0gYm1zX2FkZF9tZW1iZXJz KHRvUmVtb3ZlLCByZW1vdmVkKTsKKwkJCQkJZ3JvdXAgPSBibXNfZGVsX21lbWJlcnMoZ3Jv dXAsIHJlbW92ZWQpOworCQkJCX0gd2hpbGUgKCFibXNfaXNfZW1wdHkocmVtb3ZlZCkgJiYK KwkJCQkJCSBibXNfbWVtYmVyc2hpcChncm91cCkgPT0gQk1TX01VTFRJUExFKTsKKwkJCQli bXNfZnJlZShyZW1vdmVkKTsKKwkJCQlibXNfZnJlZShncm91cCk7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJLyogU2luZ2xlIHJlbGF0aW9uLCBqdXN0IHJlbW92ZSBpdCBmcm9tIHRo ZSBzZXQgKi8KKwkJCQlyZWxpZHMgPSBibXNfZGVsX21lbWJlcihyZWxpZHMsIGNhbmRpZGF0 ZXNbaV0ucmVsaWQpOworCQkJCWkgPSBqOworCQkJfQorCQl9CisJfQorCisJQXNzZXJ0KGJt c19pc19lbXB0eShyZWxpZHMpKTsKKworCXJldHVybiB0b1JlbW92ZTsKK30KKworLyoKKyAq IENvbXBhcmUgc2VsZi1qb2luIGNhbmRpZGF0ZXMgYnkgdGhlaXIgb2lkcy4KKyAqLworc3Rh dGljIGludAorc2VsZl9qb2luX2NhbmRpZGF0ZXNfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0 IHZvaWQgKmIpCit7CisJY29uc3QgU2VsZkpvaW5DYW5kaWRhdGUgKmNhID0gKGNvbnN0IFNl bGZKb2luQ2FuZGlkYXRlICopIGE7CisJY29uc3QgU2VsZkpvaW5DYW5kaWRhdGUgKmNiID0g KGNvbnN0IFNlbGZKb2luQ2FuZGlkYXRlICopIGI7CisKKwlpZiAoY2EtPnJlbG9pZCAhPSBj Yi0+cmVsb2lkKQorCQlyZXR1cm4gKGNhLT5yZWxvaWQgPCBjYi0+cmVsb2lkID8gLTEgOiAx KTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKgorICogRmluZCBhbmQgcmVtb3ZlIHVz ZWxlc3Mgc2VsZiBqb2lucy4KKyAqCisgKiBTZWFyY2ggZm9yIGpvaW5zIHdoZXJlIGEgcmVs YXRpb24gaXMgam9pbmVkIHRvIGl0c2VsZi4gSWYgdGhlIGpvaW4gY2xhdXNlCisgKiBmb3Ig ZWFjaCB0dXBsZSBmcm9tIG9uZSBzaWRlIG9mIHRoZSBqb2luIGlzIHByb3ZlbiB0byBtYXRj aCB0aGUgc2FtZQorICogcGh5c2ljYWwgcm93IChvciBub3RoaW5nKSBvbiB0aGUgb3RoZXIg c2lkZSwgdGhhdCBzZWxmLWpvaW4gY2FuIGJlCisgKiBlbGltaW5hdGVkIGZyb20gdGhlIHF1 ZXJ5LiAgU3VpdGFibGUgam9pbiBjbGF1c2VzIGFyZSBhc3N1bWVkIHRvIGJlIGluIHRoZQor ICogZm9ybSBvZiBYID0gWCwgYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIE5PVCBOVUxMIGNs YXVzZXMuCisgKgorICogRm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksIHdlIGRvbid0IGFw cGx5IHRoaXMgb3B0aW1pemF0aW9uIHRvIHNwZWNpYWwKKyAqIGpvaW5zLiBIZXJlIGlzIGEg bGlzdCBvZiB3aGF0IHdlIGNvdWxkIGRvIGluIHNvbWUgcGFydGljdWxhciBjYXNlczoKKyAq ICdhIGExIHNlbWkgam9pbiBhIGEyJzogaXMgcmVkdWNlZCB0byBpbm5lciBieSByZWR1Y2Vf dW5pcXVlX3NlbWlqb2lucywKKyAqIGFuZCB0aGVuIHJlbW92ZWQgbm9ybWFsbHkuCisgKiAn YSBhMSBhbnRpIGpvaW4gYSBhMic6IGNvdWxkIHNpbXBsaWZ5IHRvIGEgc2NhbiB3aXRoICdv dXRlciBxdWFscyBBTkQKKyAqIChJUyBOVUxMIG9uIGpvaW4gY29sdW1ucyBPUiBOT1QgaW5u ZXIgcXVhbHMpJy4KKyAqICdhIGExIGxlZnQgam9pbiBhIGEyJzogY291bGQgc2ltcGxpZnkg dG8gYSBzY2FuIGxpa2UgaW5uZXIgYnV0IHdpdGhvdXQKKyAqIE5PVCBOVUxMIGNvbmRpdGlv bnMgb24gam9pbiBjb2x1bW5zLgorICogJ2EgYTEgbGVmdCBqb2luIChhIGEyIGpvaW4gYikn OiBjYW4ndCBzaW1wbGlmeSB0aGlzLCBiZWNhdXNlIGpvaW4gdG8gYgorICogY2FuIGJvdGgg cmVtb3ZlIHJvd3MgYW5kIGludHJvZHVjZSBkdXBsaWNhdGVzLgorICoKKyAqIFRvIHNlYXJj aCBmb3IgcmVtb3ZhYmxlIGpvaW5zLCB3ZSBvcmRlciBhbGwgdGhlIHJlbGF0aW9ucyBvbiB0 aGVpciBPaWQsCisgKiBnbyBvdmVyIGVhY2ggc2V0IHdpdGggdGhlIHNhbWUgT2lkLCBhbmQg Y29uc2lkZXIgZWFjaCBwYWlyIG9mIHJlbGF0aW9ucworICogaW4gdGhpcyBzZXQuCisgKgor ICogVG8gcmVtb3ZlIHRoZSBqb2luLCB3ZSBtYXJrIG9uZSBvZiB0aGUgcGFydGljaXBhdGlu ZyByZWxhdGlvbnMgYXMgZGVhZAorICogYW5kIHJld3JpdGUgYWxsIHJlZmVyZW5jZXMgdG8g aXQgdG8gcG9pbnQgdG8gdGhlIHJlbWFpbmluZyByZWxhdGlvbi4KKyAqIFRoaXMgaW5jbHVk ZXMgbW9kaWZ5aW5nIFJlc3RyaWN0SW5mb3MsIEVxdWl2YWxlbmNlQ2xhc3NlcywgYW5kCisg KiBFcXVpdmFsZW5jZU1lbWJlcnMuIFdlIGFsc28gaGF2ZSB0byBtb2RpZnkgdGhlIHJvdyBt YXJrcy4gVGhlIGpvaW4gY2xhdXNlcworICogb2YgdGhlIHJlbW92ZWQgcmVsYXRpb24gYmVj b21lIGVpdGhlciByZXN0cmljdGlvbiBvciBqb2luIGNsYXVzZXMsIGJhc2VkIG9uCisgKiB3 aGV0aGVyIHRoZXkgcmVmZXJlbmNlIGFueSByZWxhdGlvbnMgbm90IHBhcnRpY2lwYXRpbmcg aW4gdGhlIHJlbW92ZWQgam9pbi4KKyAqCisgKiAnam9pbmxpc3QnIGlzIHRoZSB0b3AtbGV2 ZWwgam9pbmxpc3Qgb2YgdGhlIHF1ZXJ5LiBJZiBpdCBoYXMgYW55CisgKiByZWZlcmVuY2Vz IHRvIHRoZSByZW1vdmVkIHJlbGF0aW9ucywgd2UgdXBkYXRlIHRoZW0gdG8gcG9pbnQgdG8g dGhlCisgKiByZW1haW5pbmcgb25lcy4KKyAqLworTGlzdCAqCityZW1vdmVfdXNlbGVzc19z ZWxmX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKK3sKKwlSZWxp ZHMJCXRvUmVtb3ZlID0gTlVMTDsKKwlpbnQJCQlyZWxpZCA9IC0xOworCisJaWYgKCFlbmFi bGVfc2VsZl9qb2luX2VsaW1pbmF0aW9uIHx8IGpvaW5saXN0ID09IE5JTCB8fAorCQkobGlz dF9sZW5ndGgoam9pbmxpc3QpID09IDEgJiYgIUlzQShsaW5pdGlhbChqb2lubGlzdCksIExp c3QpKSkKKwkJcmV0dXJuIGpvaW5saXN0OworCisJLyoKKwkgKiBNZXJnZSBwYWlycyBvZiBy ZWxhdGlvbnMgcGFydGljaXBhdGVkIGluIHNlbGYtam9pbi4gUmVtb3ZlIHVubmVjZXNzYXJ5 CisJICogcmFuZ2UgdGFibGUgZW50cmllcy4KKwkgKi8KKwl0b1JlbW92ZSA9IHJlbW92ZV9z ZWxmX2pvaW5zX3JlY3Vyc2Uocm9vdCwgam9pbmxpc3QsIHRvUmVtb3ZlKTsKKworCWlmICh1 bmxpa2VseSh0b1JlbW92ZSAhPSBOVUxMKSkKKwl7CisJCS8qIEF0IHRoZSBlbmQsIHJlbW92 ZSBvcnBoYW5lZCByZWxhdGlvbiBsaW5rcyAqLworCQl3aGlsZSAoKHJlbGlkID0gYm1zX25l eHRfbWVtYmVyKHRvUmVtb3ZlLCByZWxpZCkpID49IDApCisJCXsKKwkJCWludAlucmVtb3Zl ZCA9IDA7CisKKwkJCWpvaW5saXN0ID0gcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0KGpvaW5s aXN0LCByZWxpZCwgJm5yZW1vdmVkKTsKKwkJCWlmIChucmVtb3ZlZCAhPSAxKQorCQkJCWVs b2coRVJST1IsICJmYWlsZWQgdG8gZmluZCByZWxhdGlvbiAlZCBpbiBqb2lubGlzdCIsIHJl bGlkKTsKKwkJfQorCX0KKworCXJldHVybiBqb2lubGlzdDsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubWFpbi5jCmluZGV4IDczNTU2MGU4Y2EuLjI5MTZiMzZlMzAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtMjMzLDYgKzIzMywx MSBAQCBxdWVyeV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCXJlZHVjZV91 bmlxdWVfc2VtaWpvaW5zKHJvb3QpOwogCisJLyoKKwkgKiBSZW1vdmUgc2VsZiBqb2lucyBv biBhIHVuaXF1ZSBjb2x1bW4uCisJICovCisJam9pbmxpc3QgPSByZW1vdmVfdXNlbGVzc19z ZWxmX2pvaW5zKHJvb3QsIGpvaW5saXN0KTsKKwogCS8qCiAJICogTm93IGRpc3RyaWJ1dGUg InBsYWNlaG9sZGVycyIgdG8gYmFzZSByZWxzIGFzIG5lZWRlZC4gIFRoaXMgaGFzIHRvIGJl CiAJICogZG9uZSBhZnRlciBqb2luIHJlbW92YWwgYmVjYXVzZSByZW1vdmFsIGNvdWxkIGNo YW5nZSB3aGV0aGVyIGEKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMK aW5kZXggNjk4ZWY2MDFiZS4uMjE1NWZkNDg3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcHVuaW9uLmMKQEAgLTYzOSw3ICs2MzksNyBAQCBidWlsZF9zZXRvcF9jaGls ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIG90aGVy d2lzZSBkbyBzdGF0aXN0aWNhbCBlc3RpbWF0aW9uLgogCSAqCiAJICogWFhYIHlvdSBkb24n dCByZWFsbHkgd2FudCB0byBrbm93IGFib3V0IHRoaXM6IHdlIGRvIHRoZSBlc3RpbWF0aW9u Ci0JICogdXNpbmcgdGhlIHN1YnF1ZXJ5J3Mgb3JpZ2luYWwgdGFyZ2V0bGlzdCBleHByZXNz aW9ucywgbm90IHRoZQorCSAqIHVzaW5nIHRoZSBzdWJyb290LT5wYXJzZSdzIG9yaWdpbmFs IHRhcmdldGxpc3QgZXhwcmVzc2lvbnMsIG5vdCB0aGUKIAkgKiBzdWJyb290LT5wcm9jZXNz ZWRfdGxpc3Qgd2hpY2ggbWlnaHQgc2VlbSBtb3JlIGFwcHJvcHJpYXRlLiAgVGhlIHJlYXNv bgogCSAqIGlzIHRoYXQgaWYgdGhlIHN1YnF1ZXJ5IGlzIGl0c2VsZiBhIHNldG9wLCBpdCBt YXkgcmV0dXJuIGEKIAkgKiBwcm9jZXNzZWRfdGxpc3QgY29udGFpbmluZyAidmFybm8gMCIg VmFycyBnZW5lcmF0ZWQgYnkKQEAgLTY0Nyw2ICs2NDcsOSBAQCBidWlsZF9zZXRvcF9jaGls ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIG1pZ2h0 aWx5LiAgV2Ugb3VnaHQgdG8gZ2V0IHJpZCBvZiB0aGUgInZhcm5vIDAiIGhhY2ssIGJ1dCB0 aGF0IHJlcXVpcmVzCiAJICogYSByZWRlc2lnbiBvZiB0aGUgcGFyc2V0cmVlIHJlcHJlc2Vu dGF0aW9uIG9mIHNldG9wcywgc28gdGhhdCB0aGVyZSBjYW4KIAkgKiBiZSBhbiBSVEUgY29y cmVzcG9uZGluZyB0byBlYWNoIHNldG9wJ3Mgb3V0cHV0LgorCSAqIE5vdGUsIHdlIHVzZSB0 aGlzIG5vdCBzdWJxdWVyeSdzIHRhcmdldGxpc3QgYnV0IHN1YnJvb3QtPnBhcnNlJ3MKKwkg KiB0YXJnZXRsaXN0LCBiZWNhdXNlIGl0IHdhcyByZXZpc2VkIGJ5IHNlbGYtam9pbiByZW1v dmFsLiAgc3VicXVlcnkncworCSAqIHRhcmdldGxpc3QgbWlnaHQgY29udGFpbiB0aGUgcmVm ZXJlbmNlcyB0byB0aGUgcmVtb3ZlZCByZWxpZHMuCiAJICovCiAJaWYgKHBOdW1Hcm91cHMp CiAJewpAQCAtNjU5LDcgKzY2Miw3IEBAIGJ1aWxkX3NldG9wX2NoaWxkX3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkqcE51bUdyb3VwcyA9IHJlbC0+ Y2hlYXBlc3RfdG90YWxfcGF0aC0+cm93czsKIAkJZWxzZQogCQkJKnBOdW1Hcm91cHMgPSBl c3RpbWF0ZV9udW1fZ3JvdXBzKHN1YnJvb3QsCi0JCQkJCQkJCQkJCSAgZ2V0X3RsaXN0X2V4 cHJzKHN1YnF1ZXJ5LT50YXJnZXRMaXN0LCBmYWxzZSksCisJCQkJCQkJCQkJCSAgZ2V0X3Rs aXN0X2V4cHJzKHN1YnJvb3QtPnBhcnNlLT50YXJnZXRMaXN0LCBmYWxzZSksCiAJCQkJCQkJ CQkJCSAgcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLT5yb3dzLAogCQkJCQkJCQkJCQkgIE5V TEwsCiAJCQkJCQkJCQkJCSAgTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXdy aXRlL3Jld3JpdGVNYW5pcC5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAu YwppbmRleCBmNGU2ODdjOTg2Li5mMjNlZTgyOTkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCisrKyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3 cml0ZU1hbmlwLmMKQEAgLTUzNSw2ICs1MzUsMzMgQEAgb2Zmc2V0X3JlbGlkX3NldChSZWxp ZHMgcmVsaWRzLCBpbnQgb2Zmc2V0KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBT dWJzdGl0dXRlIG5ld0lkIGJ5IG9sZElkIGluIHJlbGlkcy4KKyAqCisgKiBXZSBtdXN0IG1h a2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBCaXRtYXBzZXQgYmVmb3JlIG1ha2luZyBhbnkK KyAqIG1vZGlmaWNhdGlvbnMsIGJlY2F1c2UgdGhlIHNhbWUgcG9pbnRlciB0byBpdCBtaWdo dCBiZSBzaGFyZWQgYW1vbmcKKyAqIGRpZmZlcmVudCBwbGFjZXMuCisgKiBBbHNvLCB0aGlz IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluICdkZWxldGUgb25seScgbW9kZSAobmV3SWQgPCAw KS4KKyAqIEl0IGFsbG93cyB1cyB0byB1dGlsaXNlIHRoZSBzYW1lIGNvZGUgaW4gdGhlIHJl bW92ZV91c2VsZXNzX2pvaW5zIGFuZCB0aGUKKyAqIHJlbW92ZV9zZWxmX2pvaW5zIGZlYXR1 cmVzLgorICovCitCaXRtYXBzZXQgKgorcmVwbGFjZV9yZWxpZChSZWxpZHMgcmVsaWRzLCBp bnQgb2xkSWQsIGludCBuZXdJZCkKK3sKKwlpZiAoSVNfU1BFQ0lBTF9WQVJOTyhvbGRJZCkp CisJCXJldHVybiByZWxpZHM7CisKKwkvKiBEZWxldGUgcmVsaWQgd2l0aG91dCBzdWJzdGl0 dXRpb24uICovCisJaWYgKElTX1NQRUNJQUxfVkFSTk8obmV3SWQpKQorCQlyZXR1cm4gYm1z X2RlbF9tZW1iZXIoYm1zX2NvcHkocmVsaWRzKSwgb2xkSWQpOworCisJLyogU3Vic3RpdHV0 ZSBuZXdJZCBmb3Igb2xkSWQuICovCisJaWYgKGJtc19pc19tZW1iZXIob2xkSWQsIHJlbGlk cykpCisJCXJldHVybiBibXNfYWRkX21lbWJlcihibXNfZGVsX21lbWJlcihibXNfY29weShy ZWxpZHMpLCBvbGRJZCksIG5ld0lkKTsKKworCXJldHVybiByZWxpZHM7Cit9CisKIC8qCiAg KiBDaGFuZ2VWYXJOb2RlcyAtIGFkanVzdCBWYXIgbm9kZXMgZm9yIGEgc3BlY2lmaWMgY2hh bmdlIG9mIFJUIGluZGV4CiAgKgpAQCAtNTQzLDYgKzU3MCw3IEBAIG9mZnNldF9yZWxpZF9z ZXQoUmVsaWRzIHJlbGlkcywgaW50IG9mZnNldCkKICAqIHRvICduZXdfaW5kZXgnLiAgVGhl IHZhcm5vc3luIGZpZWxkcyBhcmUgY2hhbmdlZCB0b28uICBBbHNvLCBhZGp1c3Qgb3RoZXIK ICAqIG5vZGVzIHRoYXQgY29udGFpbiByYW5nZXRhYmxlIGluZGV4ZXMsIHN1Y2ggYXMgUmFu Z2VUYmxSZWYgYW5kIEpvaW5FeHByLgogICoKKyAqIGNoYW5nZV9SYW5nZVRibFJlZjogZG8g d2UgY2hhbmdlIFJhbmdlVGJsUmVmIG9yIG5vdC4gc2VlIENoYW5nZVZhck5vZGVzRXh0ZW5k ZWQuCiAgKiBOT1RFOiBhbHRob3VnaCB0aGlzIGhhcyB0aGUgZm9ybSBvZiBhIHdhbGtlciwg d2UgY2hlYXQgYW5kIG1vZGlmeSB0aGUKICAqIG5vZGVzIGluLXBsYWNlLiAgVGhlIGdpdmVu IGV4cHJlc3Npb24gdHJlZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZAogICogZWFybGllciB0 byBlbnN1cmUgdGhhdCBubyB1bndhbnRlZCBzaWRlLWVmZmVjdHMgb2NjdXIhCkBAIC01NTMs NiArNTgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlydF9pbmRleDsKIAlpbnQJCQlu ZXdfaW5kZXg7CiAJaW50CQkJc3VibGV2ZWxzX3VwOworCWJvb2wJCWNoYW5nZV9SYW5nZVRi bFJlZjsKIH0gQ2hhbmdlVmFyTm9kZXNfY29udGV4dDsKIAogc3RhdGljIGJvb2wKQEAgLTU4 NSw3ICs2MTQsNyBAQCBDaGFuZ2VWYXJOb2Rlc193YWxrZXIoTm9kZSAqbm9kZSwgQ2hhbmdl VmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkKIAkJCWNleHByLT5jdmFybm8gPSBjb250ZXh0 LT5uZXdfaW5kZXg7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JaWYgKElzQShub2RlLCBSYW5n ZVRibFJlZikpCisJaWYgKElzQShub2RlLCBSYW5nZVRibFJlZikgJiYgY29udGV4dC0+Y2hh bmdlX1JhbmdlVGJsUmVmKQogCXsKIAkJUmFuZ2VUYmxSZWYgKnJ0ciA9IChSYW5nZVRibFJl ZiAqKSBub2RlOwogCkBAIC02MzIsNiArNjYxLDc1IEBAIENoYW5nZVZhck5vZGVzX3dhbGtl cihOb2RlICpub2RlLCBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0ICpjb250ZXh0KQogCQl9CiAJ CXJldHVybiBmYWxzZTsKIAl9CisJaWYgKElzQShub2RlLCBSZXN0cmljdEluZm8pKQorCXsK KwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbm9kZTsKKwkJaW50 CQkJcmVsaWQgPSAtMTsKKwkJYm9vbAkJaXNfcmVxX2VxdWFsID0KKwkJCShyaW5mby0+cmVx dWlyZWRfcmVsaWRzID09IHJpbmZvLT5jbGF1c2VfcmVsaWRzKTsKKwkJYm9vbAkJY2xhdXNl X3JlbGlkc19pc19tdWx0aXBsZSA9CisJCQkoYm1zX21lbWJlcnNoaXAocmluZm8tPmNsYXVz ZV9yZWxpZHMpID09IEJNU19NVUxUSVBMRSk7CisKKwkJaWYgKGJtc19pc19tZW1iZXIoY29u dGV4dC0+cnRfaW5kZXgsIHJpbmZvLT5jbGF1c2VfcmVsaWRzKSkKKwkJeworCQkJZXhwcmVz c2lvbl90cmVlX3dhbGtlcigoTm9kZSAqKSByaW5mby0+Y2xhdXNlLCBDaGFuZ2VWYXJOb2Rl c193YWxrZXIsICh2b2lkICopIGNvbnRleHQpOworCQkJZXhwcmVzc2lvbl90cmVlX3dhbGtl cigoTm9kZSAqKSByaW5mby0+b3JjbGF1c2UsIENoYW5nZVZhck5vZGVzX3dhbGtlciwgKHZv aWQgKikgY29udGV4dCk7CisKKwkJCXJpbmZvLT5jbGF1c2VfcmVsaWRzID0KKwkJCQlyZXBs YWNlX3JlbGlkKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBjb250ZXh0LT5ydF9pbmRleCwgY29u dGV4dC0+bmV3X2luZGV4KTsKKwkJCXJpbmZvLT5udW1fYmFzZV9yZWxzID0gYm1zX251bV9t ZW1iZXJzKHJpbmZvLT5jbGF1c2VfcmVsaWRzKTsKKwkJCXJpbmZvLT5sZWZ0X3JlbGlkcyA9 CisJCQkJcmVwbGFjZV9yZWxpZChyaW5mby0+bGVmdF9yZWxpZHMsIGNvbnRleHQtPnJ0X2lu ZGV4LCBjb250ZXh0LT5uZXdfaW5kZXgpOworCQkJcmluZm8tPnJpZ2h0X3JlbGlkcyA9CisJ CQkJcmVwbGFjZV9yZWxpZChyaW5mby0+cmlnaHRfcmVsaWRzLCBjb250ZXh0LT5ydF9pbmRl eCwgY29udGV4dC0+bmV3X2luZGV4KTsKKwkJfQorCisJCWlmIChpc19yZXFfZXF1YWwpCisJ CQlyaW5mby0+cmVxdWlyZWRfcmVsaWRzID0gcmluZm8tPmNsYXVzZV9yZWxpZHM7CisJCWVs c2UKKwkJCXJpbmZvLT5yZXF1aXJlZF9yZWxpZHMgPQorCQkJCXJlcGxhY2VfcmVsaWQocmlu Zm8tPnJlcXVpcmVkX3JlbGlkcywgY29udGV4dC0+cnRfaW5kZXgsIGNvbnRleHQtPm5ld19p bmRleCk7CisKKwkJcmluZm8tPm91dGVyX3JlbGlkcyA9CisJCQlyZXBsYWNlX3JlbGlkKHJp bmZvLT5vdXRlcl9yZWxpZHMsIGNvbnRleHQtPnJ0X2luZGV4LCBjb250ZXh0LT5uZXdfaW5k ZXgpOworCQlyaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcyA9CisJCQlyZXBsYWNlX3JlbGlk KHJpbmZvLT5pbmNvbXBhdGlibGVfcmVsaWRzLCBjb250ZXh0LT5ydF9pbmRleCwgY29udGV4 dC0+bmV3X2luZGV4KTsKKworCQlpZiAocmluZm8tPm1lcmdlb3BmYW1pbGllcyAmJgorCQkJ Ym1zX2dldF9zaW5nbGV0b25fbWVtYmVyKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCAmcmVsaWQp ICYmCisJCQljbGF1c2VfcmVsaWRzX2lzX211bHRpcGxlICYmCisJCQlyZWxpZCA9PSBjb250 ZXh0LT5uZXdfaW5kZXggJiYgSXNBKHJpbmZvLT5jbGF1c2UsIE9wRXhwcikpCisJCXsKKwkJ CUV4cHIJICAgKmxlZnRPcDsKKwkJCUV4cHIJICAgKnJpZ2h0T3A7CisKKwkJCWxlZnRPcCA9 IChFeHByICopIGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSk7CisJCQlyaWdodE9wID0gKEV4 cHIgKikgZ2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSk7CisKKwkJCS8qCisJCQkgKiBmb3Ig U0pFIChzZWxmIGpvaW4gZWxpbWluYXRpb24pLCBjaGFuZ2luZyB2YXJub3Mgd2lsbCBtYWtl IHQxLmEgPSB0Mi5hCisJCQkgKiB0byAidDEuYSA9IHQxLmEiLCB3aGljaCBpcyBhbHdheXMg dHJ1ZSwgd2UgY2FuIG9wdGl6bWllZCBpdCBvdXQuCisJCQkgKiB0byBvcHRpbXppZWQgaXQg b3V0LCB3ZSB1c2UgZXF1YWwgdG8gdmFsaWRhdGUsCisJCQkgKiBidXQgd2UgYWxzbyBuZWVk IHRvIGFkZCBhIG5vdCBudWxsIHF1YWwgKE51bGxUZXN0KS4KKwkJCSAqCisJCQkqLworCQkJ aWYgKGxlZnRPcCAhPSBOVUxMICYmIGVxdWFsKGxlZnRPcCwgcmlnaHRPcCkpCisJCQl7CisJ CQkJTnVsbFRlc3QgICAqbnRlc3QgPSBtYWtlTm9kZShOdWxsVGVzdCk7CisKKwkJCQludGVz dC0+YXJnID0gbGVmdE9wOworCQkJCW50ZXN0LT5udWxsdGVzdHR5cGUgPSBJU19OT1RfTlVM TDsKKwkJCQludGVzdC0+YXJnaXNyb3cgPSBmYWxzZTsKKwkJCQludGVzdC0+bG9jYXRpb24g PSAtMTsKKwkJCQlyaW5mby0+Y2xhdXNlID0gKEV4cHIgKikgbnRlc3Q7CisJCQkJcmluZm8t Pm1lcmdlb3BmYW1pbGllcyA9IE5JTDsKKwkJCQlyaW5mby0+bGVmdF9lbSA9IE5VTEw7CisJ CQkJcmluZm8tPnJpZ2h0X2VtID0gTlVMTDsKKwkJCX0KKwkJCUFzc2VydChyaW5mby0+b3Jj bGF1c2UgPT0gTlVMTCk7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KIAlpZiAoSXNBKG5v ZGUsIEFwcGVuZFJlbEluZm8pKQogCXsKIAkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IChB cHBlbmRSZWxJbmZvICopIG5vZGU7CkBAIC02NjQsMzIgKzc2MiwzMSBAQCBDaGFuZ2VWYXJO b2Rlc193YWxrZXIoTm9kZSAqbm9kZSwgQ2hhbmdlVmFyTm9kZXNfY29udGV4dCAqY29udGV4 dCkKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBDaGFuZ2VWYXJOb2Rl c193YWxrZXIsIGNvbnRleHQpOwogfQogCisvKgorICogYWxtb3N0IGVxdWl2YWxlbnQgdG8g Q2hhbmdlVmFyTm9kZXMuIGFsc28gc2VlIGNvbW1lbnRzIGluIENoYW5nZVZhck5vZGVzLgor ICogZGlmZmVyZW5jZSB3aXRoIENoYW5nZVZhck5vZGVzOgorICogd2hlbiB3ZSB1c2UgQ2hh bmdlVmFyTm9kZXMgZm9yIG5vZGUgd2UgY2hhbmdlIGFsbCBvZiBpdCdzIHVuZGVybHlpbmcg bm9kZXMuCisgKiBidXQgZm9yIFNKRSB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSBub2RlIHR5 cGU6IFJhbmdlVGJsUmVmLCBpbiBzb21lIG9jY2FzaW9uLgorICogYmVjYXVzZSBTSkUgbGFz dCBzdGVwLCByZW1vdmVfcmVsX2Zyb21fam9pbmxpc3QgaXMgdG8KKyAqIHJlbW92ZSBsZWZ0 IG5vZGUgKFJhbmdlVGJsUmVmKSBvbmUgYnkgb25lLiBpZiBpbiBhbnkgY2FzZSB3aGlsZSB1 c2luZworICogQ2hhbmdlVmFyTm9kZXMsIGJ5IGFjY2lkZW50bHkgbGVhZiBub2RlIFJhbmdl VGJsUmVmIGFsc28gYmVpbmcgdXBkYXRlZAorICogdGhlbiByZW1vdmVfcmVsX2Zyb21fam9p bmxpc3Qgd2lsbCBoYXZlIGVycm9yLgorKi8KIHZvaWQKLUNoYW5nZVZhck5vZGVzKE5vZGUg Km5vZGUsIGludCBydF9pbmRleCwgaW50IG5ld19pbmRleCwgaW50IHN1YmxldmVsc191cCkK K0NoYW5nZVZhck5vZGVzRXh0ZW5kZWQoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBpbnQg bmV3X2luZGV4LAorCQkJCQkgICBpbnQgc3VibGV2ZWxzX3VwLCBib29sIGNoYW5nZV9SYW5n ZVRibFJlZikKIHsKIAlDaGFuZ2VWYXJOb2Rlc19jb250ZXh0IGNvbnRleHQ7CiAKIAljb250 ZXh0LnJ0X2luZGV4ID0gcnRfaW5kZXg7CiAJY29udGV4dC5uZXdfaW5kZXggPSBuZXdfaW5k ZXg7CiAJY29udGV4dC5zdWJsZXZlbHNfdXAgPSBzdWJsZXZlbHNfdXA7CisJY29udGV4dC5j aGFuZ2VfUmFuZ2VUYmxSZWYgPSBjaGFuZ2VfUmFuZ2VUYmxSZWY7CiAKLQkvKgotCSAqIE11 c3QgYmUgcHJlcGFyZWQgdG8gc3RhcnQgd2l0aCBhIFF1ZXJ5IG9yIGEgYmFyZSBleHByZXNz aW9uIHRyZWU7IGlmCi0JICogaXQncyBhIFF1ZXJ5LCBnbyBzdHJhaWdodCB0byBxdWVyeV90 cmVlX3dhbGtlciB0byBtYWtlIHN1cmUgdGhhdAotCSAqIHN1YmxldmVsc191cCBkb2Vzbid0 IGdldCBpbmNyZW1lbnRlZCBwcmVtYXR1cmVseS4KLQkgKi8KIAlpZiAobm9kZSAmJiBJc0Eo bm9kZSwgUXVlcnkpKQogCXsKIAkJUXVlcnkJICAgKnFyeSA9IChRdWVyeSAqKSBub2RlOwog Ci0JCS8qCi0JCSAqIElmIHdlIGFyZSBzdGFydGluZyBhdCBhIFF1ZXJ5LCBhbmQgc3VibGV2 ZWxzX3VwIGlzIHplcm8sIHRoZW4gd2UKLQkJICogbXVzdCBhbHNvIGZpeCByYW5nZXRhYmxl IGluZGV4ZXMgaW4gdGhlIFF1ZXJ5IGl0c2VsZiAtLS0gbmFtZWx5Ci0JCSAqIHJlc3VsdFJl bGF0aW9uLCBtZXJnZVRhcmdldFJlbGF0aW9uLCBleGNsUmVsSW5kZXggIGFuZCByb3dNYXJr cwotCQkgKiBlbnRyaWVzLiAgc3VibGV2ZWxzX3VwIGNhbm5vdCBiZSB6ZXJvIHdoZW4gcmVj dXJzaW5nIGludG8gYQotCQkgKiBzdWJxdWVyeSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGhh dmUgdGhlIHNhbWUgbG9naWMgaW5zaWRlCi0JCSAqIENoYW5nZVZhck5vZGVzX3dhbGtlci4K LQkJICovCiAJCWlmIChzdWJsZXZlbHNfdXAgPT0gMCkKIAkJewogCQkJTGlzdENlbGwgICAq bDsKQEAgLTcwMCw3ICs3OTcsNiBAQCBDaGFuZ2VWYXJOb2RlcyhOb2RlICpub2RlLCBpbnQg cnRfaW5kZXgsIGludCBuZXdfaW5kZXgsIGludCBzdWJsZXZlbHNfdXApCiAJCQlpZiAocXJ5 LT5tZXJnZVRhcmdldFJlbGF0aW9uID09IHJ0X2luZGV4KQogCQkJCXFyeS0+bWVyZ2VUYXJn ZXRSZWxhdGlvbiA9IG5ld19pbmRleDsKIAotCQkJLyogdGhpcyBpcyB1bmxpa2VseSB0byBl dmVyIGJlIHVzZWQsIGJ1dCAuLi4gKi8KIAkJCWlmIChxcnktPm9uQ29uZmxpY3QgJiYgcXJ5 LT5vbkNvbmZsaWN0LT5leGNsUmVsSW5kZXggPT0gcnRfaW5kZXgpCiAJCQkJcXJ5LT5vbkNv bmZsaWN0LT5leGNsUmVsSW5kZXggPSBuZXdfaW5kZXg7CiAKQEAgLTcxOCw2ICs4MTQsMTIg QEAgQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBpbnQgbmV3X2lu ZGV4LCBpbnQgc3VibGV2ZWxzX3VwKQogCQlDaGFuZ2VWYXJOb2Rlc193YWxrZXIobm9kZSwg JmNvbnRleHQpOwogfQogCit2b2lkCitDaGFuZ2VWYXJOb2RlcyhOb2RlICpub2RlLCBpbnQg cnRfaW5kZXgsIGludCBuZXdfaW5kZXgsIGludCBzdWJsZXZlbHNfdXApCit7CisJQ2hhbmdl VmFyTm9kZXNFeHRlbmRlZChub2RlLCBydF9pbmRleCwgbmV3X2luZGV4LCBzdWJsZXZlbHNf dXAsIHRydWUpOworfQorCiAvKgogICogU3Vic3RpdHV0ZSBuZXdyZWxpZCBmb3Igb2xkcmVs aWQgaW4gYSBSZWxpZCBzZXQKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CmluZGV4IDhjZjFhZmJhZDIuLjkxMzY0YzM3MDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCkBAIC05ODYsNiArOTg2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBD b25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAorCXsKKwkJeyJlbmFibGVfc2VsZl9qb2luX2VsaW1pbmF0aW9uIiwgUEdDX1VTRVJTRVQs IFFVRVJZX1RVTklOR19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZSByZW1vdmFs IG9mIHVuaXF1ZSBzZWxmLWpvaW5zLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOIHwg R1VDX05PVF9JTl9TQU1QTEUKKwkJfSwKKwkJJmVuYWJsZV9zZWxmX2pvaW5fZWxpbWluYXRp b24sCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJlbmFibGVf Z3JvdXBfYnlfcmVvcmRlcmluZyIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9E LAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHJlb3JkZXJpbmcgb2YgR1JPVVAgQlkga2V5 cy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNTg3NDhkMmNhNi4uM2IyYTRkYmNi NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE4NSw2ICsxODUsMTEgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogICogTm90IGFsbCBmaWVsZHMgYXJlIHByaW50ZWQu ICAoSW4gc29tZSBjYXNlcywgdGhlcmUgaXMgbm8gcHJpbnQgc3VwcG9ydCBmb3IKICAqIHRo ZSBmaWVsZCB0eXBlOyBpbiBvdGhlcnMsIGRvaW5nIHNvIHdvdWxkIGxlYWQgdG8gaW5maW5p dGUgcmVjdXJzaW9uIG9yCiAgKiBibG9hdCBkdW1wIG91dHB1dCBtb3JlIHRoYW4gc2VlbXMg dXNlZnVsLikKKyAqCisgKiBOT1RFOiBXaGVuIGFkZGluZyBuZXcgZW50cmllcyBjb250YWlu aW5nIHJlbGlkcyBhbmQgcmVsaWQgYml0bWFwc2V0cywKKyAqIHJlbWVtYmVyIHRvIGNoZWNr IHRoYXQgdGhleSB3aWxsIGJlIGNvcnJlY3RseSBwcm9jZXNzZWQgYnkKKyAqIHRoZSByZW1v dmVfc2VsZl9qb2luX3JlbCBmdW5jdGlvbiAtIHJlbGlkIG9mIHJlbW92aW5nIHJlbGF0aW9u IHdpbGwgYmUKKyAqIGNvcnJlY3RseSByZXBsYWNlZCB3aXRoIHRoZSBrZWVwaW5nIG9uZS4K ICAqLS0tLS0tLS0tLQogICovCiAjaWZuZGVmIEhBVkVfUExBTk5FUklORk9fVFlQRURFRgpA QCAtNzM0LDcgKzczOSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvblNjaGVtZURhdGEg KlBhcnRpdGlvblNjaGVtZTsKICAqIHBvcHVsYXRlIHRoZXNlIGZpZWxkcywgZm9yIGJhc2Ug cmVsczsgYnV0IHNvbWVkYXkgdGhleSBtaWdodCBiZSB1c2VkIGZvcgogICogam9pbiByZWxz IHRvbzoKICAqCi0gKgkJdW5pcXVlX2Zvcl9yZWxzIC0gbGlzdCBvZiBSZWxpZCBzZXRzLCBl YWNoIG9uZSBiZWluZyBhIHNldCBvZiBvdGhlcgorICoJCXVuaXF1ZV9mb3JfcmVscyAtIGxp c3Qgb2YgVW5pcXVlUmVsSW5mbywgZWFjaCBvbmUgYmVpbmcgYSBzZXQgb2Ygb3RoZXIKICAq CQkJCQlyZWxzIGZvciB3aGljaCB0aGlzIG9uZSBoYXMgYmVlbiBwcm92ZW4gdW5pcXVlCiAg KgkJbm9uX3VuaXF1ZV9mb3JfcmVscyAtIGxpc3Qgb2YgUmVsaWQgc2V0cywgZWFjaCBvbmUg YmVpbmcgYSBzZXQgb2YKICAqCQkJCQlvdGhlciByZWxzIGZvciB3aGljaCB3ZSBoYXZlIHRy aWVkIGFuZCBmYWlsZWQgdG8gcHJvdmUKQEAgLTk3Myw3ICs5NzgsNyBAQCB0eXBlZGVmIHN0 cnVjdCBSZWxPcHRJbmZvCiAJLyoKIAkgKiBjYWNoZSBzcGFjZSBmb3IgcmVtZW1iZXJpbmcg aWYgd2UgaGF2ZSBwcm92ZW4gdGhpcyByZWxhdGlvbiB1bmlxdWUKIAkgKi8KLQkvKiBrbm93 biB1bmlxdWUgZm9yIHRoZXNlIG90aGVyIHJlbGlkIHNldChzKSAqLworCS8qIGtub3duIHVu aXF1ZSBmb3IgdGhlc2Ugb3RoZXIgcmVsaWQgc2V0KHMpIGdpdmVuIGluIFVuaXF1ZVJlbElu Zm8ocykgKi8KIAlMaXN0CSAgICp1bmlxdWVfZm9yX3JlbHM7CiAJLyoga25vd24gbm90IHVu aXF1ZSBmb3IgdGhlc2Ugc2V0KHMpICovCiAJTGlzdAkgICAqbm9uX3VuaXF1ZV9mb3JfcmVs czsKQEAgLTM0NDQsNCArMzQ0OSwzNSBAQCB0eXBlZGVmIHN0cnVjdCBBZ2dUcmFuc0luZm8K IAlib29sCQlpbml0VmFsdWVJc051bGw7CiB9IEFnZ1RyYW5zSW5mbzsKIAorLyoKKyAqIFVu aXF1ZVJlbEluZm8gY2FjaGVzIGEgZmFjdCB0aGF0IGEgcmVsYXRpb24gaXMgdW5pcXVlIHdo ZW4gYmVpbmcgam9pbmVkCisgKiB0byBvdGhlciByZWxhdGlvbihzKS4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgVW5pcXVlUmVsSW5mbworeworCXBnX25vZGVfYXR0cihub19jb3B5X2VxdWFs LCBub19yZWFkLCBub19xdWVyeV9qdW1ibGUpCisKKwlOb2RlVGFnCQl0eXBlOworCisJLyoK KwkgKiBUaGUgcmVsYXRpb24gaW4gY29uc2lkZXJhdGlvbiBpcyB1bmlxdWUgd2hlbiBiZWlu ZyBqb2luZWQgd2l0aCB0aGlzIHNldAorCSAqIG9mIG90aGVyIHJlbGF0aW9uKHMpLgorCSAq LworCVJlbGlkcwkJb3V0ZXJyZWxpZHM7CisKKwkvKgorCSAqIFRoZSByZWxhdGlvbiBpbiBj b25zaWRlcmF0aW9uIGlzIHVuaXF1ZSB3aGVuIGNvbnNpZGVyaW5nIG9ubHkgY2xhdXNlcwor CSAqIHN1aXRhYmxlIGZvciBzZWxmLWpvaW4gKHBhc3NlZCBzcGxpdF9zZWxmam9pbl9xdWFs cygpKS4KKwkgKi8KKwlib29sCQlzZWxmX2pvaW47CisKKwkvKgorCSAqIEFkZGl0aW9uYWwg Y2xhdXNlcyBmcm9tIGEgYmFzZXJlc3RyaWN0aW5mbyBsaXN0IHRoYXQgd2VyZSB1c2VkIHRv IHByb3ZlCisJICogdGhlIHVuaXF1ZW5lc3MuICAgV2UgY2FjaGUgaXQgZm9yIHRoZSBzZWxm LWpvaW4gY2hlY2tpbmcgcHJvY2VkdXJlOiBhCisJICogc2VsZi1qb2luIGNhbiBiZSByZW1v dmVkIGlmIHRoZSBvdXRlciByZWxhdGlvbiBjb250YWlucyBzdHJpY3RseSB0aGUKKwkgKiBz YW1lIHNldCBvZiBjbGF1c2VzLgorCSAqLworCUxpc3QJICAgKmV4dHJhX2NsYXVzZXM7Cit9 IFVuaXF1ZVJlbEluZm87CisKICNlbmRpZgkJCQkJCQkvKiBQQVRITk9ERVNfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oIGIvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL29wdGltaXplci5oCmluZGV4IDJlMTIzZTA4YjcuLmIxZjgzZmFmZGMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAorKysgYi9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKQEAgLTE5Miw2ICsxOTIsOCBAQCBl eHRlcm4gU29ydEdyb3VwQ2xhdXNlICpnZXRfc29ydGdyb3VwcmVmX2NsYXVzZV9ub2VycihJ bmRleCBzb3J0cmVmLAogCQkJCQkJCQkJCQkgKiBvdXRwdXQgbGlzdCAqLwogI2RlZmluZSBQ VkNfUkVDVVJTRV9QTEFDRUhPTERFUlMJMHgwMDIwCS8qIHJlY3Vyc2UgaW50byBQbGFjZUhv bGRlclZhcgogCQkJCQkJCQkJCQkgKiBhcmd1bWVudHMgKi8KKyNkZWZpbmUgUFZDX0lOQ0xV REVfQ09OVkVSVFJPV1RZUEVTCTB4MDA0MCAgICAgLyogaW5jbHVkZSBDb252ZXJ0Um93dHlw ZUV4cHJzIGluCisJCQkJCQkJKiBvdXRwdXQgbGlzdCAqLwogCiBleHRlcm4gQml0bWFwc2V0 ICpwdWxsX3Zhcm5vcyhQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSk7CiBleHRlcm4g Qml0bWFwc2V0ICpwdWxsX3Zhcm5vc19vZl9sZXZlbChQbGFubmVySW5mbyAqcm9vdCwgTm9k ZSAqbm9kZSwgaW50IGxldmVsc3VwKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggNTQ4 NjlkNDQwMS4uNjRiYTg5ZmNiOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKQEAgLTcyLDYg KzcyLDkgQEAgZXh0ZXJuIHZvaWQgY3JlYXRlX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwpOwogZXh0ZXJuIGJvb2wgcmVsYXRpb25faGFzX3VuaXF1 ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJ CQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJCQkJCQkgIExpc3QgKmV4cHJsaXN0 LCBMaXN0ICpvcHJsaXN0KTsKK2V4dGVybiBib29sIHJlbGF0aW9uX2hhc191bmlxdWVfaW5k ZXhfZXh0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJ ICBMaXN0ICpyZXN0cmljdGxpc3QsIExpc3QgKmV4cHJsaXN0LAorCQkJCQkJCQkJCSAgTGlz dCAqb3BybGlzdCwgTGlzdCAqKmV4dHJhX2NsYXVzZXMpOwogZXh0ZXJuIGJvb2wgaW5kZXhj b2xfaXNfYm9vbF9jb25zdGFudF9mb3JfcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCQlJbmRleE9wdEluZm8gKmluZGV4LAogCQkJCQkJCQkJCQkJaW50IGluZGV4Y29s KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKaW5kZXggMGI2ZjBmNzk2OS4uOTM1MTBj Y2UxMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKQEAgLTIwLDYgKzIwLDcgQEAK IC8qIEdVQyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIERFRkFVTFRfQ1VSU09SX1RVUExFX0ZS QUNUSU9OIDAuMQogZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBjdXJzb3JfdHVwbGVfZnJh Y3Rpb247CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2VsZl9qb2luX2VsaW1p bmF0aW9uOwogCiAvKiBxdWVyeV9wbGFubmVyIGNhbGxiYWNrIHRvIGNvbXB1dGUgcXVlcnlf cGF0aGtleXMgKi8KIHR5cGVkZWYgdm9pZCAoKnF1ZXJ5X3BhdGhrZXlzX2NhbGxiYWNrKSAo UGxhbm5lckluZm8gKnJvb3QsIHZvaWQgKmV4dHJhKTsKQEAgLTExMyw2ICsxMTQsMTEgQEAg ZXh0ZXJuIGJvb2wgcXVlcnlfaXNfZGlzdGluY3RfZm9yKFF1ZXJ5ICpxdWVyeSwgTGlzdCAq Y29sbm9zLCBMaXN0ICpvcGlkcyk7CiBleHRlcm4gYm9vbCBpbm5lcnJlbF9pc191bmlxdWUo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJICAgUmVsaWRzIGpvaW5yZWxpZHMsIFJlbGlk cyBvdXRlcnJlbGlkcywgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCiAJCQkJCQkJICAgSm9pblR5 cGUgam9pbnR5cGUsIExpc3QgKnJlc3RyaWN0bGlzdCwgYm9vbCBmb3JjZV9jYWNoZSk7Citl eHRlcm4gYm9vbCBpbm5lcnJlbF9pc191bmlxdWVfZXh0KFBsYW5uZXJJbmZvICpyb290LCBS ZWxpZHMgam9pbnJlbGlkcywKKwkJCQkJCQkJICAgUmVsaWRzIG91dGVycmVsaWRzLCBSZWxP cHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsIExpc3Qg KnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJICAgYm9vbCBmb3JjZV9jYWNoZSwgTGlzdCAqKnVj bGF1c2VzKTsKK2V4dGVybiBMaXN0ICpyZW1vdmVfdXNlbGVzc19zZWxmX2pvaW5zKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpqb2ludHJlZSk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZv ciBwbGFuL3NldHJlZnMuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdy aXRlTWFuaXAuaCBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKaW5kZXgg YWM2ZDIwNDllOC4uMDc0ODQ3ZjFhNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmV3cml0 ZS9yZXdyaXRlTWFuaXAuaAorKysgYi9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5p cC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFJFV1JJVEVNQU5JUF9ICiAKICNpbmNs dWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgi CiAKIHN0cnVjdCBBdHRyTWFwOwkJCQkJLyogYXZvaWQgaW5jbHVkaW5nIGF0dG1hcC5oIGhl cmUgKi8KIApAQCAtNDEsMTEgKzQyLDE0IEBAIHR5cGVkZWYgZW51bSBSZXBsYWNlVmFyc05v TWF0Y2hPcHRpb24KIH0gUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uOwogCiAKK2V4dGVybiBC aXRtYXBzZXQgKnJlcGxhY2VfcmVsaWQoUmVsaWRzIHJlbGlkcywgaW50IG9sZElkLCBpbnQg bmV3SWQpOwogZXh0ZXJuIHZvaWQgQ29tYmluZVJhbmdlVGFibGVzKExpc3QgKipkc3RfcnRh YmxlLCBMaXN0ICoqZHN0X3Blcm1pbmZvcywKIAkJCQkJCQkgICBMaXN0ICpzcmNfcnRhYmxl LCBMaXN0ICpzcmNfcGVybWluZm9zKTsKIGV4dGVybiB2b2lkIE9mZnNldFZhck5vZGVzKE5v ZGUgKm5vZGUsIGludCBvZmZzZXQsIGludCBzdWJsZXZlbHNfdXApOwogZXh0ZXJuIHZvaWQg Q2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBpbnQgbmV3X2luZGV4 LAogCQkJCQkJICAgaW50IHN1YmxldmVsc191cCk7Cit2b2lkIENoYW5nZVZhck5vZGVzRXh0 ZW5kZWQoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBpbnQgbmV3X2luZGV4LAorCQkJCQkJ CWludCBzdWJsZXZlbHNfdXAsIGJvb2wgY2hhbmdlX1JhbmdlVGJsUmVmKTsKIGV4dGVybiB2 b2lkIEluY3JlbWVudFZhclN1YmxldmVsc1VwKE5vZGUgKm5vZGUsIGludCBkZWx0YV9zdWJs ZXZlbHNfdXAsCiAJCQkJCQkJCQlpbnQgbWluX3N1YmxldmVsc191cCk7CiBleHRlcm4gdm9p ZCBJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcF9ydGFibGUoTGlzdCAqcnRhYmxlLApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5vdXQKaW5kZXggNTYyMjc1MDUwMC4u YWQ4YWIyOTRmZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVp dmNsYXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mu b3V0CkBAIC00MzQsNiArNDM0LDM2IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKICAgIEZpbHRl cjogKCh1bmlxdWUxIElTIE5PVCBOVUxMKSBBTkQgKHVuaXF1ZTIgSVMgTk9UIE5VTEwpKQog KDIgcm93cykKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3MgYXJlIHByb2Nlc3NlZCBjb3Jy ZWN0bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0gRGlzYWJsZSBtZXJnZSBqb2lu cyBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91dCBtaXNzaW5nIGNvbW11dGF0 b3IuCistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRoZSBqb2luIGNsYXVzZSwgYmVj YXVzZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhlIEVDLgorc2V0IGVuYWJsZV9t ZXJnZWpvaW4gdG8gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9t IGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBtLmZm ICsgbi5mZiA9IHAuZjE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBKb2luIEZpbHRlcjogKChuLmZmICsgbi5mZikgPSBwLmYxKQorICAgLT4gIFNl cSBTY2FuIG9uIGVjMCBuCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlYzEgcAorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxl Y3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEg cCBvbiBwLmYxOjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFsaWFzMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKHAuZjEpOjpi aWdpbnQgPSAoKG4uZmYgKyBuLmZmKSk6OmludDhhbGlhczEpCisgICAtPiAgU2VxIFNjYW4g b24gZWMwIG4KKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGVjMSBwCisoNSByb3dzKQorCityZXNldCBlbmFibGVfbWVyZ2Vqb2luOwogLS0gdGhpcyBj b3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBwcmVzZW50CiBleHBsYWluIChjb3N0 cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEgd2hlcmUgdW5pcXVlMSA9IHVuaXF1ZTEg b3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApp bmRleCAwYzliMzEyZWFmLi5jMDdmOThiMWE4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv am9pbi5vdXQKQEAgLTYzNzksNiArNjM3OSwxMDY4IEBAIHNlbGVjdCAqIGZyb20KIC0tLS0r LS0tLSstLS0tKy0tLS0KICgwIHJvd3MpCiAKKy0tCistLSB0ZXN0IHRoYXQgc2VtaS0gb3Ig aW5uZXIgc2VsZi1qb2lucyBvbiBhIHVuaXF1ZSBjb2x1bW4gYXJlIHJlbW92ZWQKKy0tCist LSBlbmFibGUgb25seSBuZXN0bG9vcCB0byBnZXQgbW9yZSBwcmVkaWN0YWJsZSBwbGFucwor c2V0IGVuYWJsZV9oYXNoam9pbiB0byBvZmY7CitzZXQgZW5hYmxlX21lcmdlam9pbiB0byBv ZmY7CitjcmVhdGUgdGFibGUgc2ogKGEgaW50IHVuaXF1ZSwgYiBpbnQsIGMgaW50IHVuaXF1 ZSk7CitpbnNlcnQgaW50byBzaiB2YWx1ZXMgKDEsIG51bGwsIDIpLCAobnVsbCwgMiwgbnVs bCksICgyLCAxLCAxKTsKK2FuYWx5emUgc2o7CistLSBUcml2aWFsIHNlbGYtam9pbiBjYXNl LgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hl cmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogcQorICAgRmlsdGVyOiAo KGEgSVMgTk9UIE5VTEwpIEFORCAoYiA9IChhIC0gMSkpKQorKDIgcm93cykKKworc2VsZWN0 IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAx OworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxCisoMSByb3cpCisKKy0t IFNlbGYtam9pbiByZW1vdmFsIHBlcmZvcm1zIGFmdGVyIGEgc3VicXVlcnkgcHVsbC11cCBw cm9jZXNzIGFuZCBjb3VsZCByZW1vdmUKKy0tIHN1Y2gga2luZCBvZiBzZWxmLWpvaW4gdG9v LiBDaGVjayB0aGlzIG9wdGlvbi4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZy b20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIHNqIHEKKyAgICAgICAgICAg ICAgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPCAxMCk7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHEKKyAgIEZpbHRlcjogKChhIElTIE5P VCBOVUxMKSBBTkQgKGIgPCAxMCkpCisoMiByb3dzKQorCitzZWxlY3QgKiBmcm9tIHNqIHAK K3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBxCisgICAgICAgICAgICAgIHdoZXJl IHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisg MiB8IDEgfCAxCisoMSByb3cpCisKKy0tIERvbid0IHJlbW92ZSBzZWxmLWpvaW4gZm9yIHRo ZSBjYXNlIG9mIGVxdWFsaXR5IG9mIHR3byBkaWZmZXJlbnQgdW5pcXVlIGNvbHVtbnMuCitl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxLCBzaiB0MiB3aGVyZSB0 MS5hID0gdDIuYyBhbmQgdDEuYiBpcyBub3QgbnVsbDsKKyAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQyLmMpCisg ICAtPiAgU2VxIFNjYW4gb24gc2ogdDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICAgICAgICBGaWx0ZXI6IChiIElTIE5P VCBOVUxMKQorKDYgcm93cykKKworLS0gRW5zdXJlIHRoYXQgcmVsYXRpb25zIHdpdGggVEFC TEVTQU1QTEUgY2xhdXNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXMKKy0tIGNhbmRpZGF0ZXMg dG8gYmUgcmVtb3ZlZAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0 MQorICAgIGpvaW4gbGF0ZXJhbAorICAgICAgKHNlbGVjdCAqIGZyb20gc2ogdGFibGVzYW1w bGUgc3lzdGVtKHQxLmIpKSBzCisgICAgb24gdDEuYSA9IHMuYTsKKyAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MQor ICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogdDEuYSwgdDEuYgorICAgICAg ICAgQ2FjaGUgTW9kZTogYmluYXJ5CisgICAgICAgICAtPiAgU2FtcGxlIFNjYW4gb24gc2oK KyAgICAgICAgICAgICAgIFNhbXBsaW5nOiBzeXN0ZW0gKHQxLmIpCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh0MS5hID0gYSkKKyg4IHJvd3MpCisKKy0tIEVuc3VyZSB0aGF0IFNKRSBk b2VzIG5vdCBmb3JtIGEgc2VsZi1yZWZlcmVudGlhbCBsYXRlcmFsIGRlcGVuZGVuY3kKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEKKyAgICBsZWZ0IGpvaW4g bGF0ZXJhbAorICAgICAgKHNlbGVjdCB0MS5hIGFzIHQxYSwgKiBmcm9tIHNqIHQyKSBzCisg ICAgb24gdHJ1ZQord2hlcmUgdDEuYSA9IHMuYTsKKyAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogdDIK KyAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisoMiByb3dzKQorCistLSBEZWdlbmVyYXRl ZCBjYXNlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbQorICAoc2VsZWN0 IGEgYXMgeCBmcm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBxMSwKKyAgKHNlbGVjdCBhIGFzIHkg ZnJvbSBzaiB3aGVyZSBmYWxzZSkgYXMgcTIKK3doZXJlIHExLnggPSBxMi55OworICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCisoMiByb3dzKQorCistLSBXZSBjYW4n dCB1c2UgYSBjcm9zcy1FQyBnZW5lcmF0ZWQgc2VsZiBqb2luIHF1YWwgYmVjYXVzZSBvZiBj dXJyZW50IGxvZ2ljIG9mCistLSB0aGUgZ2VuZXJhdGVfam9pbl9pbXBsaWVkX2VxdWFsaXRp ZXMgcm91dGluZS4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEs IHNqIHQyIHdoZXJlIHQxLmEgPSB0MS5iIGFuZCB0MS5iID0gdDIuYiBhbmQgdDIuYiA9IHQy LmE7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQxLmEgPSB0 Mi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICBGaWx0ZXI6IChhID0g YikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAgICAgICAgRmlsdGVyOiAoYiA9IGEp CisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQx LCBzaiB0Miwgc2ogdDMKK3doZXJlIHQxLmEgPSB0MS5iIGFuZCB0MS5iID0gdDIuYiBhbmQg dDIuYiA9IHQyLmEgYW5kCisgICAgICB0MS5iID0gdDMuYiBhbmQgdDMuYiA9IHQzLmE7Cisg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQx LmEgPSB0My5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KHQxLmEgPSB0Mi5iKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAg ICAgICAgICBGaWx0ZXI6IChhID0gYikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0 MgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYiA9IGEpCisgICAtPiAgU2VxIFNjYW4gb24g c2ogdDMKKyAgICAgICAgIEZpbHRlcjogKGIgPSBhKQorKDEwIHJvd3MpCisKKy0tIERvdWJs ZSBzZWxmLWpvaW4gcmVtb3ZhbC4KKy0tIFVzZSBhIGNvbmRpdGlvbiBvbiAiYiArIDEiLCBu b3Qgb24gImIiLCBmb3IgdGhlIHNlY29uZCBqb2luLCBzbyB0aGF0CistLSB0aGUgZXF1aXZh bGVuY2UgY2xhc3MgaXMgZGlmZmVyZW50IGZyb20gdGhlIGZpcnN0IG9uZSwgYW5kIHdlIGNh bgorLS0gdGVzdCB0aGUgbm9uLWVjIGNvZGUgcGF0aC4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqCitmcm9tICBzaiB0MQorICAgICAgam9pbiBzaiB0MiBvbiB0MS5hID0gdDIu YSBhbmQgdDEuYiA9IHQyLmIKKwkgIGpvaW4gc2ogdDMgb24gdDIuYSA9IHQzLmEgYW5kIHQy LmIgKyAxID0gdDMuYiArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHQzCisgICBGaWx0ZXI6ICgoYSBJUyBOT1Qg TlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQgKChiICsgMSkgSVMgTk9UIE5VTEwpKQor KDIgcm93cykKKworLS0gc3Vic2VsZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVtb3ZlZCBy ZWxhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHQxLmEsIChzZWxlY3QgYSBm cm9tIHNqIHdoZXJlIGEgPSB0Mi5hIGFuZCBhID0gdDEuYSkKK2Zyb20gc2ogdDEsIHNqIHQy Cit3aGVyZSB0MS5hID0gdDIuYTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2ogdDIKKyAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisgICBT dWJQbGFuIDEKKyAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6 ICh0Mi5hID0gdDIuYSkKKyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqCisgICAgICAg ICAgICAgICAgIEZpbHRlcjogKGEgPSB0Mi5hKQorKDcgcm93cykKKworLS0gc2VsZi1qb2lu IHVuZGVyIG91dGVyIGpvaW4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0IGpvaW4gaW50OF90YmwgeiBvbiB4 LmEgPSB6LnExOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpv aW4KKyAgIEpvaW4gRmlsdGVyOiAoeS5hID0gei5xMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBz aiB5CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgegorKDYgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4 LmEgPSB5LmEKK2xlZnQgam9pbiBpbnQ4X3RibCB6IG9uIHkuYSA9IHoucTE7CisgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9pbiBGaWx0ZXI6 ICh5LmEgPSB6LnExKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHkKKyAgICAgICAgIEZpbHRl cjogKGEgSVMgTk9UIE5VTEwpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBpbnQ4X3RibCB6CisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tICgKKyAgc2VsZWN0IHQxLiosIHQyLmEgYXMgYXggZnJvbSBzaiB0 MSBqb2luIHNqIHQyCisgIG9uICh0MS5hID0gdDIuYSBhbmQgdDEuYyAqIHQxLmMgPSB0Mi5j ICsgMiBhbmQgdDIuYiBpcyBudWxsKQorKSBhcyBxMQorbGVmdCBqb2luCisgIChzZWxlY3Qg dDMuKiBmcm9tIHNqIHQzLCBzaiB0NCB3aGVyZSB0My5jID0gdDQuYykgYXMgcTIKK29uIHEx LmF4ID0gcTIuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKHQyLmEgPSB0 NC5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQyCisgICAgICAgICBGaWx0ZXI6ICgoYiBJ UyBOVUxMKSBBTkQgKGEgSVMgTk9UIE5VTEwpIEFORCAoKGMgKiBjKSA9IChjICsgMikpKQor ICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQ0CisgICAgICAgICBGaWx0ZXI6IChjIElTIE5PVCBO VUxMKQorKDYgcm93cykKKworLS0gVGVzdCB0aGF0IHBsYWNlaG9sZGVycyBhcmUgdXBkYXRl ZCBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgKiBmcm9tICh2YWx1ZXMgKDEpKSB4CitsZWZ0IGpvaW4gKHNlbGVjdCBjb2FsZXNj ZSh5LnExLCAxKSBmcm9tIGludDhfdGJsIHkKKwlyaWdodCBqb2luIHNqIGoxIGlubmVyIGpv aW4gc2ogajIgb24gajEuYSA9IGoyLmEKKwlvbiB0cnVlKSB6CitvbiB0cnVlOworICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAg IC0+ICBSZXN1bHQKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzaiBqMgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1Qg TlVMTCkKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGludDhfdGJsIHkKKyg3IHJvd3MpCisKKy0tIFRlc3QgdGhhdCByZWZlcmVu Y2VzIHRvIHRoZSByZW1vdmVkIHJlbCBpbiBsYXRlcmFsIHN1YnF1ZXJpZXMgYXJlIHJlcGxh Y2VkCistLSBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitleHBsYWluICh2ZXJib3Nl LCBjb3N0cyBvZmYpCitzZWxlY3QgdDMuYSBmcm9tIHNqIHQxCisJam9pbiBzaiB0MiBvbiB0 MS5hID0gdDIuYQorCWpvaW4gbGF0ZXJhbCAoc2VsZWN0IHQxLmEgb2Zmc2V0IDApIHQzIG9u IHRydWU7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6 ICh0Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB0MgorICAgICAgICAgT3V0 cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisgICAgICAgICBGaWx0ZXI6ICh0Mi5hIElTIE5PVCBO VUxMKQorICAgLT4gIFJlc3VsdAorICAgICAgICAgT3V0cHV0OiB0Mi5hCisoNyByb3dzKQor CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgdDMuYSBmcm9tIHNqIHQx CisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQorCWpvaW4gbGF0ZXJhbCAoc2VsZWN0ICog ZnJvbSAoc2VsZWN0IHQxLmEgb2Zmc2V0IDApIG9mZnNldCAwKSB0MyBvbiB0cnVlOworICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0cHV0OiAodDIuYSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuc2ogdDIKKyAgICAgICAgIE91dHB1dDogdDIuYSwg dDIuYiwgdDIuYworICAgICAgICAgRmlsdGVyOiAodDIuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogdDIuYQorKDcgcm93cykKKworZXhwbGFpbiAo dmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQ0LmEgZnJvbSBzaiB0MQorCWpvaW4gc2og dDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwgKHNlbGVjdCB0My5hIGZyb20gc2og dDMsIChzZWxlY3QgdDEuYSkgb2Zmc2V0IDApIHQ0IG9uIHRydWU7CisgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6IHQzLmEKKyAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuc2ogdDIKKyAgICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYwor ICAgICAgICAgRmlsdGVyOiAodDIuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuc2ogdDMKKyAgICAgICAgIE91dHB1dDogdDMuYQorKDcgcm93cykKKworLS0g Q2hlY2sgdXBkYXRpbmcgb2Ygc2VtaV9yaHNfZXhwcnMgbGlua3MgZnJvbSB1cHBlci1sZXZl bCBzZW1pIGpvaW4gdG8KKy0tIHRoZSByZW1vdmluZyByZWxhdGlvbgorZXhwbGFpbiAodmVy Ym9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQxLmEgZnJvbSBzaiB0MSB3aGVyZSB0MS5iIGlu ICgKKyAgc2VsZWN0IHQyLmIgZnJvbSBzaiB0MiBqb2luIHNqIHQzIG9uIHQyLmM9dDMuYyk7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkg Sm9pbgorICAgT3V0cHV0OiB0MS5hCisgICBKb2luIEZpbHRlcjogKHQxLmIgPSB0My5iKQor ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB0MQorICAgICAgICAgT3V0cHV0OiB0MS5h LCB0MS5iLCB0MS5jCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIE91dHB1dDogdDMu YywgdDMuYgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB0MworICAgICAg ICAgICAgICAgT3V0cHV0OiB0My5jLCB0My5iCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh0 My5jIElTIE5PVCBOVUxMKQorKDEwIHJvd3MpCisKKy0tCistLSBTSkUgY29ybmVyIGNhc2U6 IHVuaXF1ZW5lc3Mgb2YgYW4gaW5uZXIgaXMgW3BhcnRpYWxseV0gZGVyaXZlZCBmcm9tCist LSBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMuCistLSBYWFg6IFdlIHJlYWxseSBzaG91bGQg YWxsb3cgU0pFIGZvciB0aGVzZSBjb3JuZXIgY2FzZXM/CistLQorSU5TRVJUIElOVE8gc2og VkFMVUVTICgzLCAxLCAzKTsKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5E IGoxLmEgPSAyIEFORCBqMi5hID0gMzsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpv aW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAg ICAgICAgIEZpbHRlcjogKGEgPSAyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisgICAg ICAgICBGaWx0ZXI6IChhID0gMykKKyg2IHJvd3MpCisKKy0tIFJldHVybiBvbmUgcm93CitT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9 IDIgQU5EIGoyLmEgPSAzOworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0t Ky0tLSstLS0rLS0tCisgMiB8IDEgfCAxIHwgMyB8IDEgfCAzCisoMSByb3cpCisKKy0tIFJl bW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIg QU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkg QU5EIChhID0gMikpCisoMiByb3dzKQorCistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICog RlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBq Mi5hID0gMjsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSstLS0rLS0t Ky0tLQorIDIgfCAxIHwgMSB8IDIgfCAxIHwgMQorKDEgcm93KQorCistLSBSZW1vdmUgU0os IGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEgY29uc3RhbnQgZXhwcmVzc2lvbgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBq Mi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAo MCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1l c3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5P VCBOVUxMKSBBTkQgKGEgPSAoKChFWFRSQUNUKGRvdyBGUk9NIENVUlJFTlRfVElNRVNUQU1Q KDApKSAvICcxNSc6Om51bWVyaWMpICsgJzMnOjpudW1lcmljKSk6OmludGVnZXIpKQorKDIg cm93cykKKworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoy CitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgajEuYSA9IChFWFRSQUNUKERPVyBGUk9NIGN1 cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBG Uk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSBqMi5hOworIGEgfCBi IHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisgMyB8IDEgfCAz IHwgMyB8IDEgfCAzCisoMSByb3cpCisKKy0tIFJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5E IGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5E IChhID0gMSkpCisoMiByb3dzKQorCistLSBSZXR1cm4gbm8gcm93cworU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBqMi5h ID0gMTsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSstLS0rLS0tKy0t LQorKDAgcm93cykKKworLS0gU2h1ZmZsZSBhIGNsYXVzZS4gUmVtb3ZlIFNKCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0g ajIuYiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAxOworICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBO VUxMKSBBTkQgKGEgPSAxKSkKKygyIHJvd3MpCisKKy0tIFJldHVybiBubyByb3dzCitTRUxF Q1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgMSA9IGoxLmEg QU5EIGoyLmEgPSAxOworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0t LSstLS0rLS0tCisoMCByb3dzKQorCistLSBTSkUgQ29ybmVyIGNhc2U6IGEgJ2EueD1hLngn IGNsYXVzZSwgaGF2ZSByZXBsYWNlZCB3aXRoICdhLnggSVMgTk9UIE5VTEwnCistLSBhZnRl ciBTSiBlbGltaW5hdGlvbiBpdCBzaG91bGRuJ3QgYmUgYSBtZXJnZWpvaW5hYmxlIGNsYXVz ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB0NC4qCitGUk9NIChTRUxFQ1QgdDEu KiwgdDIuYSBBUyBhMSBGUk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIuYikgQVMg dDMKK0pPSU4gc2ogdDQgT04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQyOworICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICh0MS5iID0gdDIu YikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAgICAgICAgRmlsdGVyOiAoYSA9IDQy KQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5P VCBOVUxMKQorKDYgcm93cykKKworU0VMRUNUIHQ0LioKK0ZST00gKFNFTEVDVCB0MS4qLCB0 Mi5hIEFTIGExIEZST00gc2ogdDEsIHNqIHQyIFdIRVJFIHQxLmIgPSB0Mi5iKSBBUyB0Mwor Sk9JTiBzaiB0NCBPTiAodDQuYSA9IHQzLmEpIFdIRVJFIHQzLmExID0gNDI7CisgYSB8IGIg fCBjIAorLS0tKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIEZ1bmN0aW9uYWwgaW5kZXgKK0NS RUFURSBVTklRVUUgSU5ERVggc2pfZm5faWR4IE9OIHNqKChhICogYSkpOworLS0gUmVtb3Zl IFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgor CVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmoxLmEgPSAxIEFORCBqMi5hKmoyLmEgPSAx OworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKChhICogYSkg PSAxKSkKKygyIHJvd3MpCisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBqMS5iID0gajIuYiBB TkQgajEuYSpqMS5hID0gMSBBTkQgajIuYSpqMi5hID0gMjsKKyAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBTZXEgU2Nh biBvbiBzaiBqMQorICAgICAgICAgRmlsdGVyOiAoKGEgKiBhKSA9IDEpCisgICAtPiAgU2Vx IFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKChhICogYSkgPSAyKQorKDYgcm93 cykKKworLS0gUmVzdHJpY3Rpb24gY29udGFpbnMgZXhwcmVzc2lvbnMgaW4gYm90aCBzaWRl cywgUmVtb3ZlIFNKLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBq MSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5hKSA9IChFWFRS QUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5E IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQg PSAoajIuYSpqMi5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBqMgorICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5V TEwpIEFORCAoKGEgKiBhKSA9ICgoKEVYVFJBQ1QoZG93IEZST00gQ1VSUkVOVF9USU1FU1RB TVAoMCkpIC8gJzE1Jzo6bnVtZXJpYykgKyAnMyc6Om51bWVyaWMpKTo6aW50ZWdlcikpCiso MiByb3dzKQorCistLSBFbXB0eSBzZXQgb2Ygcm93cyBzaG91bGQgYmUgcmV0dXJuZWQKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgKGox LmEqajEuYSkgPSAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUg KyAzKTo6aW50CisgIEFORCAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgw KSkvMTUgKyAzKTo6aW50ID0gKGoyLmEqajIuYSk7CisgYSB8IGIgfCBjIHwgYSB8IGIgfCBj IAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFJlc3RyaWN0aW9u IGNvbnRhaW5zIHZvbGF0aWxlIGZ1bmN0aW9uIC0gZGlzYWJsZSBTSkUgZmVhdHVyZS4KK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBq MS5iID0gajIuYgorICBBTkQgKGoxLmEqajEuYy8zKSA9IChyYW5kb20oKS8zICsgMyk6Omlu dAorICBBTkQgKHJhbmRvbSgpLzMgKyAzKTo6aW50ID0gKGoyLmEqajIuYy8zKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGoxLmIgPSBqMi5iKQorICAgLT4gIFNlcSBT Y2FuIG9uIHNqIGoxCisgICAgICAgICBGaWx0ZXI6ICgoKGEgKiBjKSAvIDMpID0gKCgocmFu ZG9tKCkgLyAnMyc6OmRvdWJsZSBwcmVjaXNpb24pICsgJzMnOjpkb3VibGUgcHJlY2lzaW9u KSk6OmludGVnZXIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRl cjogKCgoKHJhbmRvbSgpIC8gJzMnOjpkb3VibGUgcHJlY2lzaW9uKSArICczJzo6ZG91Ymxl IHByZWNpc2lvbikpOjppbnRlZ2VyID0gKChhICogYykgLyAzKSkKKyg2IHJvd3MpCisKKy0t IFJldHVybiBvbmUgcm93CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEu YiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmMvMykgPSAocmFuZG9tKCkvMyArIDMpOjppbnQK KyAgQU5EIChyYW5kb20oKS8zICsgMyk6OmludCA9IChqMi5hKmoyLmMvMyk7CisgYSB8IGIg fCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKyAzIHwgMSB8IDMg fCAzIHwgMSB8IDMKKygxIHJvdykKKworLS0gTXVsdGlwbGUgZmlsdGVycworQ1JFQVRFIFVO SVFVRSBJTkRFWCBzal90ZW1wX2lkeDEgT04gc2ooYSxiLGMpOworLS0gUmVtb3ZlIFNKCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJF IGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajEuYyA9IDMgQU5EIGoyLmEgPSAyIEFO RCAzID0gajIuYzsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBO T1QgTlVMTCkgQU5EIChhID0gMikgQU5EIChjID0gMykpCisoMiByb3dzKQorCistLSBEb24n dCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKKwlTRUxFQ1QgKiBGUk9NIHNqIGox LCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajEuYSBBTkQgajEuYyA9IDMg QU5EIGoyLmEgPSAxIEFORCAzID0gajIuYzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAg U2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZpbHRlcjogKCgyID0gYSkgQU5EIChjID0g MykpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKChjID0g MykgQU5EIChhID0gMSkpCisoNiByb3dzKQorCitDUkVBVEUgVU5JUVVFIElOREVYIHNqX3Rl bXBfaWR4IE9OIHNqKGEsYik7CistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFO RCBqMS5hID0gMjsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo ajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZpbHRl cjogKGEgPSAyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisoNSByb3dzKQorCistLSBE b24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2og ajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajIuYTsKKyAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2Vx IFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKDIgPSBhKQorICAgLT4gIFNlcSBT Y2FuIG9uIHNqIGoxCisoNSByb3dzKQorCistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBq Mi5iIEFORCAoajEuYSA9IDEgT1IgajIuYSA9IDEpOworICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoajEuYiA9IGoyLmIpIEFORCAoKGox LmEgPSAxKSBPUiAoajIuYSA9IDEpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyg1IHJv d3MpCisKK0RST1AgSU5ERVggc2pfZm5faWR4LCBzal90ZW1wX2lkeDEsIHNqX3RlbXBfaWR4 OworLS0gVGVzdCB0aGF0IE9SIHByZWRpY2F0ZWQgYXJlIHVwZGF0ZWQgY29ycmVjdGx5IGFm dGVyIGpvaW4gcmVtb3ZhbAorQ1JFQVRFIFRBQkxFIHRhYl93aXRoX2ZsYWcgKCBpZCBJTlQg UFJJTUFSWSBLRVksIGlzX2ZsYWcgU01BTExJTlQpOworQ1JFQVRFIElOREVYIGlkeF90ZXN0 X2lzX2ZsYWcgT04gdGFiX3dpdGhfZmxhZyAoaXNfZmxhZyk7CitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgQ09VTlQoKikgRlJPTSB0YWJfd2l0aF9mbGFnCitXSEVSRQorCShpc19m bGFnIElTIE5VTEwgT1IgaXNfZmxhZyA9IDApCisJQU5EIGlkIElOIChTRUxFQ1QgaWQgRlJP TSB0YWJfd2l0aF9mbGFnIFdIRVJFIGlkIElOICgyLCAzKSk7CisgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB Z2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRhYl93aXRoX2ZsYWcKKyAg ICAgICAgIFJlY2hlY2sgQ29uZDogKGlkID0gQU5ZICgnezIsM30nOjppbnRlZ2VyW10pKQor ICAgICAgICAgRmlsdGVyOiAoKGlzX2ZsYWcgSVMgTlVMTCkgT1IgKGlzX2ZsYWcgPSAwKSkK KyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0YWJfd2l0aF9mbGFnX3BrZXkK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IEFOWSAoJ3syLDN9Jzo6aW50ZWdl cltdKSkKKyg2IHJvd3MpCisKK0RST1AgVEFCTEUgdGFiX3dpdGhfZmxhZzsKKy0tIEhBVklO RyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBwLmIgZnJvbSBzaiBwIGpv aW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkgcC5iIGhhdmluZyBzdW0ocC5hKSA9IDE7 CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcS5iCisg ICBGaWx0ZXI6IChzdW0ocS5hKSA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogcQorICAg ICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyg1IHJvd3MpCisKKy0tIHVwZGF0ZSBs YXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRhYmxlIGVudHJ5IHJlZmVyZW5jZQorZXhw bGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSAoc2VsZWN0IHguKiBm cm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAorICBsYXRlcmFsIGdlbmVyYXRl X3NlcmllcygxLCBxLmEpIGdzKGkpOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0cHV0OiAx CisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnNqIHkKKyAgICAgICAgIE91dHB1dDogeS5h LCB5LmIsIHkuYworICAgICAgICAgRmlsdGVyOiAoeS5hIElTIE5PVCBOVUxMKQorICAgLT4g IEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgZ3MKKyAgICAg ICAgIE91dHB1dDogZ3MuaQorICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2Vy aWVzKDEsIHkuYSkKKyg4IHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikK K3NlbGVjdCAxIGZyb20gKHNlbGVjdCB5LiogZnJvbSBzaiB4LCBzaiB5IHdoZXJlIHguYSA9 IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSwgcS5hKSBncyhpKTsKKyAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogMQorICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5zaiB5CisgICAgICAgICBPdXRwdXQ6IHkuYSwgeS5iLCB5LmMKKyAgICAgICAgIEZpbHRl cjogKHkuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFs b2cuZ2VuZXJhdGVfc2VyaWVzIGdzCisgICAgICAgICBPdXRwdXQ6IGdzLmkKKyAgICAgICAg IEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCB5LmEpCisoOCByb3dzKQorCist LSBUZXN0IHRoYXQgYSBub24tRUMtZGVyaXZlZCBqb2luIGNsYXVzZSBpcyBwcm9jZXNzZWQg Y29ycmVjdGx5LiBVc2UgYW4KKy0tIG91dGVyIGpvaW4gc28gdGhhdCB3ZSBjYW4ndCBmb3Jt IGFuIEVDLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHNqIHAgam9pbiBz aiBxIG9uIHAuYSA9IHEuYQorICBsZWZ0IGpvaW4gc2ogciBvbiBwLmEgKyBxLmEgPSByLmE7 CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9p biBGaWx0ZXI6ICgocS5hICsgcS5hKSA9IHIuYSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBx CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogcgorKDYgcm93cykKKworLS0gRklYTUUg dGhpcyBjb25zdGFudCBmYWxzZSBmaWx0ZXIgZG9lc24ndCBsb29rIGdvb2QuIFNob3VsZCB3 ZSBtZXJnZQorLS0gZXF1aXZhbGVuY2UgY2xhc3Nlcz8KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBwLmEgPSBxLmEgYW5kIHAuYiA9IDEg YW5kIHEuYiA9IDI7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBxCisgICBGaWx0ZXI6ICgoYSBJUyBO T1QgTlVMTCkgQU5EIChiID0gMikgQU5EIChiID0gMSkpCisoMiByb3dzKQorCistLSBDaGVj ayB0aGF0IGF0dHJfbmVlZGVkIGlzIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIHNlbGYtam9p biByZW1vdmFsLiBJbiB0aGlzCistLSB0ZXN0LCB0aGUgam9pbiBvZiBqMSB3aXRoIGoyIGlz IHJlbW92ZWQuIGsxLmIgaXMgcmVxdWlyZWQgYXQgZWl0aGVyIGoxIG9yIGoyLgorLS0gSWYg dGhpcyBpbmZvIGlzIGxvc3QsIGpvaW4gdGFyZ2V0bGlzdCBmb3IgKGsxLCBrMikgd2lsbCBu b3QgY29udGFpbiBrMS5iLgorLS0gVXNlIGluZGV4IHNjYW4gZm9yIGsxIHNvIHRoYXQgd2Ug ZG9uJ3QgZ2V0ICdiJyBmcm9tIHBoeXNpY2FsIHRsaXN0IHVzZWQgZm9yCistLSBzZXFzY2Fu LiBBbHNvIGRpc2FibGUgcmVvcmRlcmluZyBvZiBqb2lucyBiZWNhdXNlIHRoaXMgdGVzdCBk ZXBlbmRzIG9uIGEKKy0tIHBhcnRpY3VsYXIgam9pbiB0cmVlLgorY3JlYXRlIHRhYmxlIHNr IChhIGludCwgYiBpbnQpOworY3JlYXRlIGluZGV4IG9uIHNrKGEpOworc2V0IGpvaW5fY29s bGFwc2VfbGltaXQgdG8gMTsKK3NldCBlbmFibGVfc2Vxc2NhbiB0byBvZmY7CitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBvbiBrMS5h ID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBq MS5iID0gazEuYjsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGsxLmIgPSBq Mi5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBza19hX2lkeCBvbiBzayBrMQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2lu ZyBza19hX2lkeCBvbiBzayBrMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBr MS5hKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBzal9hX2tleSBvbiBzaiBqMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgSVMg Tk9UIE5VTEwpCisoOSByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAxIGZy b20KKwkoc2sgazEgam9pbiBzayBrMiBvbiBrMS5hID0gazIuYSkKKwlqb2luIChzaiBqMSBq b2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBqMi5iID0gazEuYjsKKyAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBKb2luIEZpbHRlcjogKGsxLmIgPSBqMi5iKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBrMQorICAg ICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBrMgorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBrMS5hKQorICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzal9hX2tleSBvbiBzaiBqMgorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgSVMgTk9UIE5VTEwpCisoOSByb3dzKQorCity ZXNldCBqb2luX2NvbGxhcHNlX2xpbWl0OworcmVzZXQgZW5hYmxlX3NlcXNjYW47CistLSBD aGVjayB0aGF0IGNsYXVzZXMgZnJvbSB0aGUgam9pbiBmaWx0ZXIgbGlzdCBpcyBub3QgbG9z dCBvbiB0aGUgc2VsZi1qb2luIHJlbW92YWwKK0NSRUFURSBUQUJMRSBlbXAxIChpZCBTRVJJ QUwgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIGNvZGUgaW50KTsKK0VYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZW1wMSBlMSwgZW1wMSBlMiBXSEVSRSBlMS5p ZCA9IGUyLmlkIEFORCBlMi5jb2RlIDw+IGUxLmNvZGU7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB1YmxpYy5lbXAxIGUyCisgICBPdXRwdXQ6 IGUyLmlkLCBlMi5jb2RlLCBlMi5pZCwgZTIuY29kZQorICAgRmlsdGVyOiAoZTIuY29kZSA8 PiBlMi5jb2RlKQorKDMgcm93cykKKworLS0gU2h1ZmZsZSBzZWxmLWpvaW5lZCByZWxhdGlv bnMuIE9ubHkgaW4gdGhlIGNhc2Ugb2YgaXRlcmF0aXZlIGRlbGV0aW9uCistLSBhdHRlbXB0 cyBleHBsYWlucyBvZiB0aGVzZSBxdWVyaWVzIHdpbGwgYmUgaWRlbnRpY2FsLgorQ1JFQVRF IFVOSVFVRSBJTkRFWCBPTiBlbXAxKChpZCppZCkpOworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMworV0hFUkUg YzEuaWQ9YzIuaWQgQU5EIGMxLmlkKmMyLmlkPWMzLmlkKmMzLmlkOworICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gZW1w MSBjMworICAgICAgICAgRmlsdGVyOiAoKGlkICogaWQpIElTIE5PVCBOVUxMKQorKDMgcm93 cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBj MSwgZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzEuaWQ9YzMuaWQgQU5EIGMxLmlkKmMzLmlk PWMyLmlkKmMyLmlkOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVn YXRlCisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMworICAgICAgICAgRmlsdGVyOiAoKGlk ICogaWQpIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMworV0hFUkUg YzMuaWQ9YzIuaWQgQU5EIGMzLmlkKmMyLmlkPWMxLmlkKmMxLmlkOworICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gZW1w MSBjMworICAgICAgICAgRmlsdGVyOiAoKGlkICogaWQpIElTIE5PVCBOVUxMKQorKDMgcm93 cykKKworLS0gQ2hlY2sgdGhlIHVzYWdlIG9mIGEgcGFyc2UgdHJlZSBieSB0aGUgc2V0IG9w ZXJhdGlvbnMgKGJ1ZyAjMTgxNzApCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYzEu Y29kZSBGUk9NIGVtcDEgYzEgTEVGVCBKT0lOIGVtcDEgYzIgT04gYzEuaWQgPSBjMi5pZAor V0hFUkUgYzIuaWQgSVMgTk9UIE5VTEwKK0VYQ0VQVCBBTEwKK1NFTEVDVCBjMy5jb2RlIEZS T00gZW1wMSBjMzsKKyAgICAgICAgUVVFUlkgUExBTiAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSGFzaFNldE9wIEV4Y2VwdCBBbGwKKyAgIC0+ICBTZXEgU2Nh biBvbiBlbXAxIGMyCisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMworKDMgcm93cykKKwor LS0gQ2hlY2sgdGhhdCBTSkUgcmVtb3ZlcyByZWZlcmVuY2VzIGZyb20gUEhWcyBjb3JyZWN0 bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSBsZWZ0IGpv aW4KKyAgICAoc2VsZWN0IGNvYWxlc2NlKHQzLmNvZGUsIDEpIGZyb20gZW1wMSB0MgorICAg ICAgICBsZWZ0IGpvaW4gKGVtcDEgdDMgam9pbiBlbXAxIHQ0IG9uIHQzLmlkID0gdDQuaWQp CisgICAgICAgIG9uIHRydWUpCitvbiB0cnVlOworICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEgU2Nh biBvbiBlbXAxIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBOZXN0ZWQg TG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIHQy CisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBlbXAxIHQ0CisoNyByb3dzKQorCistLSBDaGVjayB0aGF0IFNK RSByZW1vdmVzIHRoZSB3aG9sZSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAodmVyYm9zZSwg Y29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgICgoc2Vs ZWN0IDEgYXMgeCwgKiBmcm9tIGVtcDEgdDIpIHMxIGlubmVyIGpvaW4KKyAgICAgICAgKHNl bGVjdCAqIGZyb20gZW1wMSB0MykgczIgb24gczEuaWQgPSBzMi5pZCkKKyAgICBvbiB0cnVl Cit3aGVyZSBzMS54ID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgT3V0cHV0OiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVtcDEg dDEKKyAgICAgICAgIE91dHB1dDogdDEuaWQsIHQxLmNvZGUKKyAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgT3V0cHV0OiB0My5pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lbXAxIHQzCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmlkCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICgxID0gMSkKKyg5IHJvd3MpCisKKy0tIENoZWNrIHRoYXQgUEhWcyBk byBub3QgaW1wb3NlIGFueSBjb25zdHJhaW50cyBvbiByZW1vdmluZyBzZWxmIGpvaW5zCitl eHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIGVtcDEgdDEgam9p biBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQgbGVmdCBqb2luCisgICAgbGF0ZXJhbCAoc2Vs ZWN0IHQxLmlkIGFzIHQxaWQsICogZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxKSB0MykgcyBv biB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgT3V0cHV0 OiB0Mi5pZCwgdDIuY29kZSwgdDIuaWQsIHQyLmNvZGUsICh0Mi5pZCksIHQzLnQzCisgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVtcDEgdDIKKyAgICAgICAgIE91dHB1dDogdDIuaWQs IHQyLmNvZGUKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVf c2VyaWVzIHQzCisgICAgICAgICBPdXRwdXQ6IHQzLnQzLCB0Mi5pZAorICAgICAgICAgRnVu Y3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDEpCisoNyByb3dzKQorCitleHBsYWlu ICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LDEwKSB0MShpZCkgbGVmdCBqb2luCisgICAgbGF0ZXJhbCAoc2VsZWN0IHQxLmlkIGFzIHQx aWQsIHQyLmlkIGZyb20gZW1wMSB0MiBqb2luIGVtcDEgdDMgb24gdDIuaWQgPSB0My5pZCkK K29uIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgT3V0cHV0OiB0MS5p ZCwgKHQxLmlkKSwgdDMuaWQKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cu Z2VuZXJhdGVfc2VyaWVzIHQxCisgICAgICAgICBPdXRwdXQ6IHQxLmlkCisgICAgICAgICBG dW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApCisgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVtcDEgdDMKKyAgICAgICAgIE91dHB1dDogdDMuaWQsIHQxLmlkCisoNyBy b3dzKQorCistLSBDaGVjayB0aGF0IFNKRSByZXBsYWNlcyBqb2luIGNsYXVzZXMgaW52b2x2 aW5nIHRoZSByZW1vdmVkIHJlbCBjb3JyZWN0bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3Nl bGVjdCAqIGZyb20gZW1wMSB0MQorICAgaW5uZXIgam9pbiBlbXAxIHQyIG9uIHQxLmlkID0g dDIuaWQKKyAgICBsZWZ0IGpvaW4gZW1wMSB0MyBvbiB0MS5pZCA+IDEgYW5kIHQxLmlkIDwg MjsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoKHQyLmlkID4gMSkgQU5EICh0Mi5p ZCA8IDIpKQorICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgdDIKKyAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgdDMKKyg1IHJvd3MpCisKKy0tIENo ZWNrIHRoYXQgU0pFIGRvZXNuJ3QgcmVwbGFjZSB0aGUgdGFyZ2V0IHJlbGF0aW9uCitFWFBM QUlOIChDT1NUUyBPRkYpCitXSVRIIHQxIEFTIChTRUxFQ1QgKiBGUk9NIGVtcDEpCitVUERB VEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZST00gdDEKK1dIRVJFIHQxLmlkID0g ZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5jb2RlLCB0MS5jb2RlOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFVwZGF0ZSBvbiBlbXAxCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlbXAxCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBlbXAxX3BrZXkg b24gZW1wMSBlbXAxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGVtcDEu aWQpCisoNSByb3dzKQorCitJTlNFUlQgSU5UTyBlbXAxIFZBTFVFUyAoMSwgMSksICgyLCAx KTsKK1dJVEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1wMSkKK1VQREFURSBlbXAxIFNFVCBj b2RlID0gdDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUgdDEuaWQgPSBlbXAxLmlkIFJFVFVS TklORyBlbXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7CisgaWQgfCBjb2RlIHwgY29kZSAK Ky0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwgICAgMiB8ICAgIDEKKyAgMiB8ICAgIDIgfCAg ICAxCisoMiByb3dzKQorCitUUlVOQ0FURSBlbXAxOworRVhQTEFJTiAoQ09TVFMgT0ZGKQor VVBEQVRFIHNqIHNxIFNFVCBiID0gMSBGUk9NIHNqIGFzIHN6IFdIRVJFIHNxLmEgPSBzei5h OworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBzaiBzcQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKHNxLmEgPSBzei5hKQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHNqIHNxCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBzegorKDYgcm93cykKKworQ1JFQVRF IFJVTEUgc2pfZGVsX3J1bGUgQVMgT04gREVMRVRFIFRPIHNqCisgIERPIElOU1RFQUQKKyAg ICBVUERBVEUgc2ogU0VUIGEgPSAxIFdIRVJFIGEgPSBvbGQuYTsKK0VYUExBSU4gKENPU1RT IE9GRikgREVMRVRFIEZST00gc2o7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVcGRh dGUgb24gc2ogc2pfMQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRl cjogKHNqLmEgPSBzal8xLmEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogc2pfMQor ICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gc2oKKyg2IHJvd3MpCisKK0RST1AgUlVMRSBzal9kZWxfcnVsZSBPTiBzaiBDQVNDQURF OworLS0gQ2hlY2sgdGhhdCBTSkUgZG9lcyBub3QgbWlzdGFrZW5seSBvbWl0IHF1YWwgY2xh dXNlcyAoYnVnICMxODE4NykKK2luc2VydCBpbnRvIGVtcDEgdmFsdWVzICgxLCAxKTsKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAxIGZyb20gZW1wMSBmdWxsIGpvaW4KKyAgICAo c2VsZWN0ICogZnJvbSBlbXAxIHQxIGpvaW4KKyAgICAgICAgZW1wMSB0MiBqb2luIGVtcDEg dDMgb24gdDIuaWQgPSB0My5pZAorICAgICAgICBvbiB0cnVlCisgICAgd2hlcmUgZmFsc2Up IHMgb24gdHJ1ZQord2hlcmUgZmFsc2U7CisgICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1lIEZpbHRl cjogZmFsc2UKKygyIHJvd3MpCisKK3NlbGVjdCAxIGZyb20gZW1wMSBmdWxsIGpvaW4KKyAg ICAoc2VsZWN0ICogZnJvbSBlbXAxIHQxIGpvaW4KKyAgICAgICAgZW1wMSB0MiBqb2luIGVt cDEgdDMgb24gdDIuaWQgPSB0My5pZAorICAgICAgICBvbiB0cnVlCisgICAgd2hlcmUgZmFs c2UpIHMgb24gdHJ1ZQord2hlcmUgZmFsc2U7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCiso MCByb3dzKQorCistLSBDaGVjayB0aGF0IFNKRSBkb2VzIG5vdCBtaXN0YWtlbmx5IHJlLXVz ZSBrbm93bGVkZ2Ugb2YgcmVsYXRpb24gdW5pcXVlbmVzcworLS0gbWFkZSB3aXRoIGRpZmZl cmVudCBzZXQgb2YgcXVhbHMKK2luc2VydCBpbnRvIGVtcDEgdmFsdWVzICgyLCAxKTsKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSB3aGVyZSBleGlzdHMg KHNlbGVjdCAqIGZyb20gZW1wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hlcmUgdDIuaWQgPSB0MS5jb2RlIGFuZCB0Mi5jb2RlID4gMCk7CisgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAg U2VxIFNjYW4gb24gZW1wMSB0MQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZW1wMV9wa2V5 IG9uIGVtcDEgdDIKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHQxLmNvZGUpCisgICAg ICAgICBGaWx0ZXI6IChjb2RlID4gMCkKKyg1IHJvd3MpCisKK3NlbGVjdCAqIGZyb20gZW1w MSB0MSB3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gZW1wMSB0MgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdDIuaWQgPSB0MS5jb2RlIGFuZCB0Mi5j b2RlID4gMCk7CisgaWQgfCBjb2RlIAorLS0tLSstLS0tLS0KKyAgMSB8ICAgIDEKKyAgMiB8 ICAgIDEKKygyIHJvd3MpCisKKy0tIFdlIGNhbiByZW1vdmUgdGhlIGpvaW4gZXZlbiBpZiB3 ZSBmaW5kIHRoZSBqb2luIGNhbid0IGR1cGxpY2F0ZSByb3dzIGFuZAorLS0gdGhlIGJhc2Ug cXVhbHMgb2YgZWFjaCBzaWRlIGFyZSBkaWZmZXJlbnQuICBJbiB0aGUgZm9sbG93aW5nIGNh c2Ugd2UgZW5kIHVwCistLSBtb3ZpbmcgcXVhbHMgb3ZlciB0byBzMSB0byBtYWtlIGl0IHNv IGl0IGNhbid0IG1hdGNoIGFueSByb3dzLgorY3JlYXRlIHRhYmxlIHNsKGEgaW50LCBiIGlu dCwgYyBpbnQpOworY3JlYXRlIHVuaXF1ZSBpbmRleCBvbiBzbChhLCBiKTsKK3ZhY3V1bSBh bmFseXplIHNsOworLS0gQm90aCBzaWRlcyBhcmUgdW5pcXVlLCBidXQgYmFzZSBxdWFscyBh cmUgZGlmZmVyZW50CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNsIHQx LCBzbCB0MiB3aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEuYiA9IDEgYW5kIHQyLmIgPSAyOwor ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICh0MS5hID0gdDIuYSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MQorICAgICAgICAgRmlsdGVyOiAoYiA9IDEpCisg ICAtPiAgU2VxIFNjYW4gb24gc2wgdDIKKyAgICAgICAgIEZpbHRlcjogKGIgPSAyKQorKDYg cm93cykKKworLS0gQ2hlY2sgTnVsbFRlc3QgaW4gYmFzZXJlc3RyaWN0aW5mbyBsaXN0Citl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0Mgord2hlcmUg dDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMgorICBhbmQgdDEuYyBJUyBO T1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBhbmQgdDIuYiBJUyBOT1QgTlVMTCBh bmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIuYSBJ UyBOT1QgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAodDEuYSA9IHQyLmEpCisgICAtPiAgU2VxIFNjYW4gb24gc2wgdDEKKyAgICAgICAg IEZpbHRlcjogKChjIElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9UIE5VTEwpIEFORCAoYSBJ UyBOT1QgTlVMTCkgQU5EIChiID0gMSkpCisgICAtPiAgU2VxIFNjYW4gb24gc2wgdDIKKyAg ICAgICAgIEZpbHRlcjogKChjIElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9UIE5VTEwpIEFO RCAoYSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMikpCisoNiByb3dzKQorCitleHBsYWluICh2 ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0Mgord2hlcmUg dDEuYiA9IHQyLmIgYW5kIHQyLmEgPSAzIGFuZCB0MS5hID0gMworICBhbmQgdDEuYyBJUyBO T1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBhbmQgdDIuYiBJUyBOT1QgTlVMTCBh bmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIuYSBJ UyBOT1QgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g cHVibGljLnNsIHQyCisgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMsIHQyLmEsIHQyLmIs IHQyLmMKKyAgIEZpbHRlcjogKCh0Mi5jIElTIE5PVCBOVUxMKSBBTkQgKHQyLmIgSVMgTk9U IE5VTEwpIEFORCAodDIuYSBJUyBOT1QgTlVMTCkgQU5EICh0Mi5hID0gMykpCisoMyByb3dz KQorCistLSBKb2luIHF1YWwgaXNuJ3QgbWVyZ2Vqb2luYWJsZSwgYnV0IGlubmVyIGlzIHVu aXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNq IG4yIFdIRVJFIG4xLmEgPD4gbjIuYSBBTkQgbjIuYSA9IDE7CisgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAobjEuYSA8PiBuMi5hKQorICAgLT4gIFNlcSBT Y2FuIG9uIHNqIG4yCisgICAgICAgICBGaWx0ZXI6IChhID0gMSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBzaiBuMQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTQorKFNFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIu YSkgcTAsIHNsCitXSEVSRSBxMC5hID0gMTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgSm9pbiBGaWx0ZXI6IChuMS5hIDw+IG4yLmEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNq IG4yCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0gMSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzaiBuMQorKDcgcm93cykKKworLS0gQ2hlY2sgb3B0aW1pemF0aW9uIGRpc2FibGluZyBp ZiBpdCB3aWxsIHZpb2xhdGUgc3BlY2lhbCBqb2luIGNvbmRpdGlvbnMuCistLSBUd28gaWRl bnRpY2FsIGpvaW5lZCByZWxhdGlvbnMgc2F0aXNmaWVzIHNlbGYgam9pbiByZW1vdmFsIGNv bmRpdGlvbnMgYnV0CistLSBzdGF5IGluIGRpZmZlcmVudCBzcGVjaWFsIGpvaW4gaW5mb3Mu CitDUkVBVEUgVEFCTEUgc2pfdDEgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRBQkxF IHNqX3QyIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90MyAoaWQgc2Vy aWFsLCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDQgKGlkIHNlcmlhbCwgYSBpbnQpOwor Q1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MyBVU0lORyBidHJlZSAoYSxpZCk7CitDUkVB VEUgVU5JUVVFIElOREVYIE9OIHNqX3QyIFVTSU5HIGJ0cmVlIChpZCk7CitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqX3QxCitKT0lOICgKKwlTRUxFQ1Qgc2pfdDIu aWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBUUlVF IEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0gc2pf dDIuaWQKKwkJKQorCSkgdDJ0M3Q0CitPTiBzal90MS5pZCA9IHQydDN0NC5pZAorSk9JTiAo CisJU0VMRUNUIHNqX3QyLmlkIEFTIGlkIEZST00gc2pfdDIKKwlXSEVSRSBFWElTVFMKKwkJ KAorCQlTRUxFQ1QgVFJVRSBGUk9NIHNqX3QzLHNqX3Q0IFdIRVJFIHNqX3QzLmEgPSAxIEFO RCBzal90My5pZCA9IHNqX3QyLmlkCisJCSkKKwkpIF90MnQzdDQKK09OIHNqX3QxLmlkID0g X3QydDN0NC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6 IChzal90My5pZCA9IHNqX3QxLmlkKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBK b2luIEZpbHRlcjogKHNqX3QyLmlkID0gc2pfdDMuaWQpCisgICAgICAgICAtPiAgTmVzdGVk IExvb3AgU2VtaSBKb2luCisgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBHcm91cCBLZXk6IHNqX3QzLmlkCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzal90NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBzal90MworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoYSA9IDEpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEluZGV4 IFNjYW4gb24gc2pfdDNfYV9pZF9pZHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhID0gMSkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2pfdDJfaWRfaWR4IG9uIHNq X3QyIHNqX3QyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IHNqX3QzLmlkKQorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNqX3QzX2FfaWRfaWR4 IG9uIHNqX3QzIHNqX3QzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICgoYSA9IDEpIEFORCAoaWQgPSBzal90My5pZCkpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gc2pfdDQgc2pfdDRfMQorICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBzal90Ml9pZF9pZHggb24gc2pfdDIKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IHNqX3QyXzEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gc2pfdDEK KygyNCByb3dzKQorCistLQorLS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0tCist LSBCb3RoIHNpZGVzIGhhdmUgZXhwbGljaXQgTG9ja1Jvd3MgbWFya3MKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCBhMS5hIEZST00gc2ogYTEsc2ogYTIgV0hFUkUgKGExLmE9YTIu YSkgRk9SIFVQREFURTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTG9ja1Jvd3MKKyAgIC0+ICBTZXEg U2NhbiBvbiBzaiBhMgorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKygzIHJv d3MpCisKK3Jlc2V0IGVuYWJsZV9oYXNoam9pbjsKK3Jlc2V0IGVuYWJsZV9tZXJnZWpvaW47 CiAtLQogLS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNvcnJlY3QgY29sdW1uIHJlZmVyZW5j ZXMgYXJlIHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5v dXQKaW5kZXggOTEwODlhYzIxNS4uNGM4YzVjOTUzYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2OCwxMCArMTY4LDExIEBAIHNlbGVjdCBuYW1l LCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgfCBvZmYKICBlbmFibGVfcGFydGl0 aW9ud2lzZV9qb2luICAgICAgfCBvZmYKICBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZSAg ICAgfCBvbgorIGVuYWJsZV9zZWxmX2pvaW5fZWxpbWluYXRpb24gICB8IG9uCiAgZW5hYmxl X3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0o MjMgcm93cykKKygyNCByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQg ZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1h eSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFz dCBwb3N0bWFzdGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv ZXF1aXZjbGFzcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbApp bmRleCAyOGVkNzkxMGQwLi43ZmMyMTU5MzQ5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9lcXVpdmNsYXNzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVp dmNsYXNzLnNxbApAQCAtMjU5LDYgKzI1OSwyMiBAQCBkcm9wIHVzZXIgcmVncmVzc191c2Vy X2VjdGVzdDsKIGV4cGxhaW4gKGNvc3RzIG9mZikKICAgc2VsZWN0ICogZnJvbSB0ZW5rMSB3 aGVyZSB1bmlxdWUxID0gdW5pcXVlMSBhbmQgdW5pcXVlMiA9IHVuaXF1ZTI7CiAKKy0tIFRl c3QgdGhhdCBicm9rZW4gRUNzIGFyZSBwcm9jZXNzZWQgY29ycmVjdGx5IGR1cmluZyBzZWxm IGpvaW4gcmVtb3ZhbC4KKy0tIERpc2FibGUgbWVyZ2Ugam9pbnMgc28gdGhhdCB3ZSBkb24n dCBnZXQgYW4gZXJyb3IgYWJvdXQgbWlzc2luZyBjb21tdXRhdG9yLgorLS0gVGVzdCBib3Ro IG9yaWVudGF0aW9ucyBvZiB0aGUgam9pbiBjbGF1c2UsIGJlY2F1c2Ugb25seSBvbmUgb2Yg dGhlbSBicmVha3MKKy0tIHRoZSBFQy4KK3NldCBlbmFibGVfbWVyZ2Vqb2luIHRvIG9mZjsK KworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMw IG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBtLmZmICsgbi5mZiA9IHAuZjE7 CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0ICogZnJvbSBlYzAgbSBqb2luIGVj MCBuIG9uIG0uZmYgPSBuLmZmCisgIGpvaW4gZWMxIHAgb24gcC5mMTo6aW50OCA9IChtLmZm ICsgbi5mZik6OmludDhhbGlhczE7CisKK3Jlc2V0IGVuYWJsZV9tZXJnZWpvaW47CisKIC0t IHRoaXMgY291bGQgYmUgY29udmVydGVkLCBidXQgaXNuJ3QgYXQgcHJlc2VudAogZXhwbGFp biAoY29zdHMgb2ZmKQogICBzZWxlY3QgKiBmcm9tIHRlbmsxIHdoZXJlIHVuaXF1ZTEgPSB1 bmlxdWUxIG9yIHVuaXF1ZTIgPSB1bmlxdWUyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvam9pbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAppbmRl eCA4Y2ZjMTA1M2NiLi44ZjhjYzIxNjNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9qb2luLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbApAQCAt MjQwOSw2ICsyNDA5LDQ4OSBAQCBzZWxlY3QgKiBmcm9tCiBzZWxlY3QgKiBmcm9tCiAgIGlu dDhfdGJsIHggam9pbiAoaW50NF90YmwgeCBjcm9zcyBqb2luIGludDRfdGJsIHkoZmYpKSBq IG9uIHExID0gZjE7IC0tIG9rCiAKKy0tCistLSB0ZXN0IHRoYXQgc2VtaS0gb3IgaW5uZXIg c2VsZi1qb2lucyBvbiBhIHVuaXF1ZSBjb2x1bW4gYXJlIHJlbW92ZWQKKy0tCisKKy0tIGVu YWJsZSBvbmx5IG5lc3Rsb29wIHRvIGdldCBtb3JlIHByZWRpY3RhYmxlIHBsYW5zCitzZXQg ZW5hYmxlX2hhc2hqb2luIHRvIG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luIHRvIG9mZjsK KworY3JlYXRlIHRhYmxlIHNqIChhIGludCB1bmlxdWUsIGIgaW50LCBjIGludCB1bmlxdWUp OworaW5zZXJ0IGludG8gc2ogdmFsdWVzICgxLCBudWxsLCAyKSwgKG51bGwsIDIsIG51bGwp LCAoMiwgMSwgMSk7CithbmFseXplIHNqOworCistLSBUcml2aWFsIHNlbGYtam9pbiBjYXNl LgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hl cmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworc2VsZWN0IHAuKiBmcm9tIHNqIHAs IHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworCistLSBTZWxmLWpv aW4gcmVtb3ZhbCBwZXJmb3JtcyBhZnRlciBhIHN1YnF1ZXJ5IHB1bGwtdXAgcHJvY2VzcyBh bmQgY291bGQgcmVtb3ZlCistLSBzdWNoIGtpbmQgb2Ygc2VsZi1qb2luIHRvby4gQ2hlY2sg dGhpcyBvcHRpb24uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHAK K3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBxCisgICAgICAgICAgICAgIHdoZXJl IHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworc2VsZWN0ICogZnJvbSBzaiBwCit3aGVyZSBl eGlzdHMgKHNlbGVjdCAqIGZyb20gc2ogcQorICAgICAgICAgICAgICB3aGVyZSBxLmEgPSBw LmEgYW5kIHEuYiA8IDEwKTsKKworLS0gRG9uJ3QgcmVtb3ZlIHNlbGYtam9pbiBmb3IgdGhl IGNhc2Ugb2YgZXF1YWxpdHkgb2YgdHdvIGRpZmZlcmVudCB1bmlxdWUgY29sdW1ucy4KK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyIHdoZXJlIHQx LmEgPSB0Mi5jIGFuZCB0MS5iIGlzIG5vdCBudWxsOworCistLSBFbnN1cmUgdGhhdCByZWxh dGlvbnMgd2l0aCBUQUJMRVNBTVBMRSBjbGF1c2VzIGFyZSBub3QgY29uc2lkZXJlZCBhcwor LS0gY2FuZGlkYXRlcyB0byBiZSByZW1vdmVkCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHNqIHQxCisgICAgam9pbiBsYXRlcmFsCisgICAgICAoc2VsZWN0ICogZnJv bSBzaiB0YWJsZXNhbXBsZSBzeXN0ZW0odDEuYikpIHMKKyAgICBvbiB0MS5hID0gcy5hOwor CistLSBFbnN1cmUgdGhhdCBTSkUgZG9lcyBub3QgZm9ybSBhIHNlbGYtcmVmZXJlbnRpYWwg bGF0ZXJhbCBkZXBlbmRlbmN5CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHNqIHQxCisgICAgbGVmdCBqb2luIGxhdGVyYWwKKyAgICAgIChzZWxlY3QgdDEuYSBhcyB0 MWEsICogZnJvbSBzaiB0MikgcworICAgIG9uIHRydWUKK3doZXJlIHQxLmEgPSBzLmE7CisK Ky0tIERlZ2VuZXJhdGVkIGNhc2UuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tCisgIChzZWxlY3QgYSBhcyB4IGZyb20gc2ogd2hlcmUgZmFsc2UpIGFzIHExLAorICAo c2VsZWN0IGEgYXMgeSBmcm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBxMgord2hlcmUgcTEueCA9 IHEyLnk7CisKKy0tIFdlIGNhbid0IHVzZSBhIGNyb3NzLUVDIGdlbmVyYXRlZCBzZWxmIGpv aW4gcXVhbCBiZWNhdXNlIG9mIGN1cnJlbnQgbG9naWMgb2YKKy0tIHRoZSBnZW5lcmF0ZV9q b2luX2ltcGxpZWRfZXF1YWxpdGllcyByb3V0aW5lLgorZXhwbGFpbiAoY29zdHMgb2ZmKQor c2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIgd2hlcmUgdDEuYSA9IHQxLmIgYW5kIHQxLmIg PSB0Mi5iIGFuZCB0Mi5iID0gdDIuYTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAq IGZyb20gc2ogdDEsIHNqIHQyLCBzaiB0Mword2hlcmUgdDEuYSA9IHQxLmIgYW5kIHQxLmIg PSB0Mi5iIGFuZCB0Mi5iID0gdDIuYSBhbmQKKyAgICAgIHQxLmIgPSB0My5iIGFuZCB0My5i ID0gdDMuYTsKKworLS0gRG91YmxlIHNlbGYtam9pbiByZW1vdmFsLgorLS0gVXNlIGEgY29u ZGl0aW9uIG9uICJiICsgMSIsIG5vdCBvbiAiYiIsIGZvciB0aGUgc2Vjb25kIGpvaW4sIHNv IHRoYXQKKy0tIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUg Zmlyc3Qgb25lLCBhbmQgd2UgY2FuCistLSB0ZXN0IHRoZSBub24tZWMgY29kZSBwYXRoLgor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICoKK2Zyb20gIHNqIHQxCisgICAgICBqb2lu IHNqIHQyIG9uIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gdDIuYgorCSAgam9pbiBzaiB0MyBv biB0Mi5hID0gdDMuYSBhbmQgdDIuYiArIDEgPSB0My5iICsgMTsKKworLS0gc3Vic2VsZWN0 IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVtb3ZlZCByZWxhdGlvbgorZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0IHQxLmEsIChzZWxlY3QgYSBmcm9tIHNqIHdoZXJlIGEgPSB0Mi5hIGFu ZCBhID0gdDEuYSkKK2Zyb20gc2ogdDEsIHNqIHQyCit3aGVyZSB0MS5hID0gdDIuYTsKKwor LS0gc2VsZi1qb2luIHVuZGVyIG91dGVyIGpvaW4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3Nl bGVjdCAqIGZyb20gc2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0IGpvaW4gaW50 OF90YmwgeiBvbiB4LmEgPSB6LnExOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIHNqIHggam9pbiBzaiB5IG9uIHguYSA9IHkuYQorbGVmdCBqb2luIGludDhfdGJs IHogb24geS5hID0gei5xMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJv bSAoCisgIHNlbGVjdCB0MS4qLCB0Mi5hIGFzIGF4IGZyb20gc2ogdDEgam9pbiBzaiB0Mgor ICBvbiAodDEuYSA9IHQyLmEgYW5kIHQxLmMgKiB0MS5jID0gdDIuYyArIDIgYW5kIHQyLmIg aXMgbnVsbCkKKykgYXMgcTEKK2xlZnQgam9pbgorICAoc2VsZWN0IHQzLiogZnJvbSBzaiB0 Mywgc2ogdDQgd2hlcmUgdDMuYyA9IHQ0LmMpIGFzIHEyCitvbiBxMS5heCA9IHEyLmE7CisK Ky0tIFRlc3QgdGhhdCBwbGFjZWhvbGRlcnMgYXJlIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVy IGpvaW4gcmVtb3ZhbAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSAodmFs dWVzICgxKSkgeAorbGVmdCBqb2luIChzZWxlY3QgY29hbGVzY2UoeS5xMSwgMSkgZnJvbSBp bnQ4X3RibCB5CisJcmlnaHQgam9pbiBzaiBqMSBpbm5lciBqb2luIHNqIGoyIG9uIGoxLmEg PSBqMi5hCisJb24gdHJ1ZSkgegorb24gdHJ1ZTsKKworLS0gVGVzdCB0aGF0IHJlZmVyZW5j ZXMgdG8gdGhlIHJlbW92ZWQgcmVsIGluIGxhdGVyYWwgc3VicXVlcmllcyBhcmUgcmVwbGFj ZWQKKy0tIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwKK2V4cGxhaW4gKHZlcmJvc2Us IGNvc3RzIG9mZikKK3NlbGVjdCB0My5hIGZyb20gc2ogdDEKKwlqb2luIHNqIHQyIG9uIHQx LmEgPSB0Mi5hCisJam9pbiBsYXRlcmFsIChzZWxlY3QgdDEuYSBvZmZzZXQgMCkgdDMgb24g dHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQzLmEgZnJv bSBzaiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwgKHNl bGVjdCAqIGZyb20gKHNlbGVjdCB0MS5hIG9mZnNldCAwKSBvZmZzZXQgMCkgdDMgb24gdHJ1 ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQ0LmEgZnJvbSBz aiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwgKHNlbGVj dCB0My5hIGZyb20gc2ogdDMsIChzZWxlY3QgdDEuYSkgb2Zmc2V0IDApIHQ0IG9uIHRydWU7 CisKKy0tIENoZWNrIHVwZGF0aW5nIG9mIHNlbWlfcmhzX2V4cHJzIGxpbmtzIGZyb20gdXBw ZXItbGV2ZWwgc2VtaSBqb2luIHRvCistLSB0aGUgcmVtb3ZpbmcgcmVsYXRpb24KK2V4cGxh aW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCB0MS5hIGZyb20gc2ogdDEgd2hlcmUg dDEuYiBpbiAoCisgIHNlbGVjdCB0Mi5iIGZyb20gc2ogdDIgam9pbiBzaiB0MyBvbiB0Mi5j PXQzLmMpOworCistLQorLS0gU0pFIGNvcm5lciBjYXNlOiB1bmlxdWVuZXNzIG9mIGFuIGlu bmVyIGlzIFtwYXJ0aWFsbHldIGRlcml2ZWQgZnJvbQorLS0gYmFzZXJlc3RyaWN0aW5mbyBj bGF1c2VzLgorLS0gWFhYOiBXZSByZWFsbHkgc2hvdWxkIGFsbG93IFNKRSBmb3IgdGhlc2Ug Y29ybmVyIGNhc2VzPworLS0KKworSU5TRVJUIElOVE8gc2ogVkFMVUVTICgzLCAxLCAzKTsK KworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoy LmEgPSAzOworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoy IFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDM7CisKKy0tIFJl bW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIg QU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKy0tIFJldHVybiBvbmUgcm93CitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5E IGoyLmEgPSAyOworCistLSBSZW1vdmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEgY29u c3RhbnQgZXhwcmVzc2lvbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBz aiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1Qo RE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVY VFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoy LmE7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dI RVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVu dF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00g Y3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7CisKKy0tIFJlbW92 ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIg V0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKy0tIFJldHVy biBubyByb3dzCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIu YiBBTkQgajEuYSA9IDEgQU5EIGoyLmEgPSAxOworCistLSBTaHVmZmxlIGEgY2xhdXNlLiBS ZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNq IGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAxID0gajEuYSBBTkQgajIuYSA9IDE7CistLSBS ZXR1cm4gbm8gcm93cworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9 IGoyLmIgQU5EIDEgPSBqMS5hIEFORCBqMi5hID0gMTsKKworLS0gU0pFIENvcm5lciBjYXNl OiBhICdhLng9YS54JyBjbGF1c2UsIGhhdmUgcmVwbGFjZWQgd2l0aCAnYS54IElTIE5PVCBO VUxMJworLS0gYWZ0ZXIgU0ogZWxpbWluYXRpb24gaXQgc2hvdWxkbid0IGJlIGEgbWVyZ2Vq b2luYWJsZSBjbGF1c2UuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdDQuKgorRlJP TSAoU0VMRUNUIHQxLiosIHQyLmEgQVMgYTEgRlJPTSBzaiB0MSwgc2ogdDIgV0hFUkUgdDEu YiA9IHQyLmIpIEFTIHQzCitKT0lOIHNqIHQ0IE9OICh0NC5hID0gdDMuYSkgV0hFUkUgdDMu YTEgPSA0MjsKK1NFTEVDVCB0NC4qCitGUk9NIChTRUxFQ1QgdDEuKiwgdDIuYSBBUyBhMSBG Uk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIuYikgQVMgdDMKK0pPSU4gc2ogdDQg T04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQyOworCistLSBGdW5jdGlvbmFsIGlu ZGV4CitDUkVBVEUgVU5JUVVFIElOREVYIHNqX2ZuX2lkeCBPTiBzaigoYSAqIGEpKTsKKwor LS0gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGox LCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmoxLmEgPSAxIEFORCBqMi5h KmoyLmEgPSAxOworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5h KmoxLmEgPSAxIEFORCBqMi5hKmoyLmEgPSAyOworCistLSBSZXN0cmljdGlvbiBjb250YWlu cyBleHByZXNzaW9ucyBpbiBib3RoIHNpZGVzLCBSZW1vdmUgU0ouCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIK KyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3Rh bXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90 aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpOworLS0gRW1wdHkgc2V0 IG9mIHJvd3Mgc2hvdWxkIGJlIHJldHVybmVkCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBq MgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9X IEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJB Q1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5h KmoyLmEpOworCistLSBSZXN0cmljdGlvbiBjb250YWlucyB2b2xhdGlsZSBmdW5jdGlvbiAt IGRpc2FibGUgU0pFIGZlYXR1cmUuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmMv MykgPSAocmFuZG9tKCkvMyArIDMpOjppbnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6Omlu dCA9IChqMi5hKmoyLmMvMyk7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJPTSBz aiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5jLzMpID0g KHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkvMyArIDMpOjppbnQgPSAo ajIuYSpqMi5jLzMpOworCistLSBNdWx0aXBsZSBmaWx0ZXJzCitDUkVBVEUgVU5JUVVFIElO REVYIHNqX3RlbXBfaWR4MSBPTiBzaihhLGIsYyk7CisKKy0tIFJlbW92ZSBTSgorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBqMS5i ID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoxLmMgPSAzIEFORCBqMi5hID0gMiBBTkQgMyA9 IGoyLmM7CisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorCVNF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIDIgPSBq MS5hIEFORCBqMS5jID0gMyBBTkQgajIuYSA9IDEgQU5EIDMgPSBqMi5jOworCitDUkVBVEUg VU5JUVVFIElOREVYIHNqX3RlbXBfaWR4IE9OIHNqKGEsYik7CisKKy0tIERvbid0IHJlbW92 ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIg V0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyOworCistLSBEb24ndCByZW1vdmUgU0oK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJF IGoxLmIgPSBqMi5iIEFORCAyID0gajIuYTsKKworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5i ID0gajIuYiBBTkQgKGoxLmEgPSAxIE9SIGoyLmEgPSAxKTsKKworRFJPUCBJTkRFWCBzal9m bl9pZHgsIHNqX3RlbXBfaWR4MSwgc2pfdGVtcF9pZHg7CisKKy0tIFRlc3QgdGhhdCBPUiBw cmVkaWNhdGVkIGFyZSB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwKK0NS RUFURSBUQUJMRSB0YWJfd2l0aF9mbGFnICggaWQgSU5UIFBSSU1BUlkgS0VZLCBpc19mbGFn IFNNQUxMSU5UKTsKK0NSRUFURSBJTkRFWCBpZHhfdGVzdF9pc19mbGFnIE9OIHRhYl93aXRo X2ZsYWcgKGlzX2ZsYWcpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgQ09VTlQo KikgRlJPTSB0YWJfd2l0aF9mbGFnCitXSEVSRQorCShpc19mbGFnIElTIE5VTEwgT1IgaXNf ZmxhZyA9IDApCisJQU5EIGlkIElOIChTRUxFQ1QgaWQgRlJPTSB0YWJfd2l0aF9mbGFnIFdI RVJFIGlkIElOICgyLCAzKSk7CitEUk9QIFRBQkxFIHRhYl93aXRoX2ZsYWc7CisKKy0tIEhB VklORyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBwLmIgZnJvbSBzaiBw IGpvaW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkgcC5iIGhhdmluZyBzdW0ocC5hKSA9 IDE7CisKKy0tIHVwZGF0ZSBsYXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRhYmxlIGVu dHJ5IHJlZmVyZW5jZQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEg ZnJvbSAoc2VsZWN0IHguKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAor ICBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworCitleHBsYWluICh2 ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIChzZWxlY3QgeS4qIGZyb20gc2og eCwgc2ogeSB3aGVyZSB4LmEgPSB5LmEpIHEsCisgIGxhdGVyYWwgZ2VuZXJhdGVfc2VyaWVz KDEsIHEuYSkgZ3MoaSk7CisKKy0tIFRlc3QgdGhhdCBhIG5vbi1FQy1kZXJpdmVkIGpvaW4g Y2xhdXNlIGlzIHByb2Nlc3NlZCBjb3JyZWN0bHkuIFVzZSBhbgorLS0gb3V0ZXIgam9pbiBz byB0aGF0IHdlIGNhbid0IGZvcm0gYW4gRUMuCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAqIGZyb20gc2ogcCBqb2luIHNqIHEgb24gcC5hID0gcS5hCisgIGxlZnQgam9pbiBzaiBy IG9uIHAuYSArIHEuYSA9IHIuYTsKKworLS0gRklYTUUgdGhpcyBjb25zdGFudCBmYWxzZSBm aWx0ZXIgZG9lc24ndCBsb29rIGdvb2QuIFNob3VsZCB3ZSBtZXJnZQorLS0gZXF1aXZhbGVu Y2UgY2xhc3Nlcz8KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogcCwg c2ogcSB3aGVyZSBwLmEgPSBxLmEgYW5kIHAuYiA9IDEgYW5kIHEuYiA9IDI7CisKKy0tIENo ZWNrIHRoYXQgYXR0cl9uZWVkZWQgaXMgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgc2VsZi1q b2luIHJlbW92YWwuIEluIHRoaXMKKy0tIHRlc3QsIHRoZSBqb2luIG9mIGoxIHdpdGggajIg aXMgcmVtb3ZlZC4gazEuYiBpcyByZXF1aXJlZCBhdCBlaXRoZXIgajEgb3IgajIuCistLSBJ ZiB0aGlzIGluZm8gaXMgbG9zdCwgam9pbiB0YXJnZXRsaXN0IGZvciAoazEsIGsyKSB3aWxs IG5vdCBjb250YWluIGsxLmIuCistLSBVc2UgaW5kZXggc2NhbiBmb3IgazEgc28gdGhhdCB3 ZSBkb24ndCBnZXQgJ2InIGZyb20gcGh5c2ljYWwgdGxpc3QgdXNlZCBmb3IKKy0tIHNlcXNj YW4uIEFsc28gZGlzYWJsZSByZW9yZGVyaW5nIG9mIGpvaW5zIGJlY2F1c2UgdGhpcyB0ZXN0 IGRlcGVuZHMgb24gYQorLS0gcGFydGljdWxhciBqb2luIHRyZWUuCitjcmVhdGUgdGFibGUg c2sgKGEgaW50LCBiIGludCk7CitjcmVhdGUgaW5kZXggb24gc2soYSk7CitzZXQgam9pbl9j b2xsYXBzZV9saW1pdCB0byAxOworc2V0IGVuYWJsZV9zZXFzY2FuIHRvIG9mZjsKK2V4cGxh aW4gKGNvc3RzIG9mZikgc2VsZWN0IDEgZnJvbQorCShzayBrMSBqb2luIHNrIGsyIG9uIGsx LmEgPSBrMi5hKQorCWpvaW4gKHNqIGoxIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEpIG9u IGoxLmIgPSBrMS5iOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgMSBmcm9tCisJKHNr IGsxIGpvaW4gc2sgazIgb24gazEuYSA9IGsyLmEpCisJam9pbiAoc2ogajEgam9pbiBzaiBq MiBvbiBqMS5hID0gajIuYSkgb24gajIuYiA9IGsxLmI7CityZXNldCBqb2luX2NvbGxhcHNl X2xpbWl0OworcmVzZXQgZW5hYmxlX3NlcXNjYW47CisKKy0tIENoZWNrIHRoYXQgY2xhdXNl cyBmcm9tIHRoZSBqb2luIGZpbHRlciBsaXN0IGlzIG5vdCBsb3N0IG9uIHRoZSBzZWxmLWpv aW4gcmVtb3ZhbAorQ1JFQVRFIFRBQkxFIGVtcDEgKGlkIFNFUklBTCBQUklNQVJZIEtFWSBO T1QgTlVMTCwgY29kZSBpbnQpOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBlbXAxIGUxLCBlbXAxIGUyIFdIRVJFIGUxLmlkID0gZTIuaWQgQU5EIGUy LmNvZGUgPD4gZTEuY29kZTsKKworLS0gU2h1ZmZsZSBzZWxmLWpvaW5lZCByZWxhdGlvbnMu IE9ubHkgaW4gdGhlIGNhc2Ugb2YgaXRlcmF0aXZlIGRlbGV0aW9uCistLSBhdHRlbXB0cyBl eHBsYWlucyBvZiB0aGVzZSBxdWVyaWVzIHdpbGwgYmUgaWRlbnRpY2FsLgorQ1JFQVRFIFVO SVFVRSBJTkRFWCBPTiBlbXAxKChpZCppZCkpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgY291bnQoKikgRlJPTSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMzCitXSEVSRSBj MS5pZD1jMi5pZCBBTkQgYzEuaWQqYzIuaWQ9YzMuaWQqYzMuaWQ7CisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGVtcDEgYzEsIGVtcDEgYzIsIGVtcDEg YzMKK1dIRVJFIGMxLmlkPWMzLmlkIEFORCBjMS5pZCpjMy5pZD1jMi5pZCpjMi5pZDsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwgZW1w MSBjMiwgZW1wMSBjMworV0hFUkUgYzMuaWQ9YzIuaWQgQU5EIGMzLmlkKmMyLmlkPWMxLmlk KmMxLmlkOworCistLSBDaGVjayB0aGUgdXNhZ2Ugb2YgYSBwYXJzZSB0cmVlIGJ5IHRoZSBz ZXQgb3BlcmF0aW9ucyAoYnVnICMxODE3MCkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBjMS5jb2RlIEZST00gZW1wMSBjMSBMRUZUIEpPSU4gZW1wMSBjMiBPTiBjMS5pZCA9IGMy LmlkCitXSEVSRSBjMi5pZCBJUyBOT1QgTlVMTAorRVhDRVBUIEFMTAorU0VMRUNUIGMzLmNv ZGUgRlJPTSBlbXAxIGMzOworCistLSBDaGVjayB0aGF0IFNKRSByZW1vdmVzIHJlZmVyZW5j ZXMgZnJvbSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgIChzZWxlY3QgY29hbGVzY2UodDMuY29kZSwg MSkgZnJvbSBlbXAxIHQyCisgICAgICAgIGxlZnQgam9pbiAoZW1wMSB0MyBqb2luIGVtcDEg dDQgb24gdDMuaWQgPSB0NC5pZCkKKyAgICAgICAgb24gdHJ1ZSkKK29uIHRydWU7CisKKy0t IENoZWNrIHRoYXQgU0pFIHJlbW92ZXMgdGhlIHdob2xlIFBIVnMgY29ycmVjdGx5CitleHBs YWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIGVtcDEgdDEgbGVmdCBq b2luCisgICAgKChzZWxlY3QgMSBhcyB4LCAqIGZyb20gZW1wMSB0MikgczEgaW5uZXIgam9p bgorICAgICAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQzKSBzMiBvbiBzMS5pZCA9IHMyLmlk KQorICAgIG9uIHRydWUKK3doZXJlIHMxLnggPSAxOworCistLSBDaGVjayB0aGF0IFBIVnMg ZG8gbm90IGltcG9zZSBhbnkgY29uc3RyYWludHMgb24gcmVtb3Zpbmcgc2VsZiBqb2lucwor ZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBlbXAxIHQxIGpv aW4gZW1wMSB0MiBvbiB0MS5pZCA9IHQyLmlkIGxlZnQgam9pbgorICAgIGxhdGVyYWwgKHNl bGVjdCB0MS5pZCBhcyB0MWlkLCAqIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMSkgdDMpIHMg b24gdHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICogZnJv bSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgdDEoaWQpIGxlZnQgam9pbgorICAgIGxhdGVyYWwg KHNlbGVjdCB0MS5pZCBhcyB0MWlkLCB0Mi5pZCBmcm9tIGVtcDEgdDIgam9pbiBlbXAxIHQz IG9uIHQyLmlkID0gdDMuaWQpCitvbiB0cnVlOworCistLSBDaGVjayB0aGF0IFNKRSByZXBs YWNlcyBqb2luIGNsYXVzZXMgaW52b2x2aW5nIHRoZSByZW1vdmVkIHJlbCBjb3JyZWN0bHkK K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MQorICAgaW5uZXIg am9pbiBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQKKyAgICBsZWZ0IGpvaW4gZW1wMSB0MyBv biB0MS5pZCA+IDEgYW5kIHQxLmlkIDwgMjsKKworLS0gQ2hlY2sgdGhhdCBTSkUgZG9lc24n dCByZXBsYWNlIHRoZSB0YXJnZXQgcmVsYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1dJ VEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1wMSkKK1VQREFURSBlbXAxIFNFVCBjb2RlID0g dDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUgdDEuaWQgPSBlbXAxLmlkIFJFVFVSTklORyBl bXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7CisKK0lOU0VSVCBJTlRPIGVtcDEgVkFMVUVT ICgxLCAxKSwgKDIsIDEpOworCitXSVRIIHQxIEFTIChTRUxFQ1QgKiBGUk9NIGVtcDEpCitV UERBVEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZST00gdDEKK1dIRVJFIHQxLmlk ID0gZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5jb2RlLCB0MS5jb2RlOworCitU UlVOQ0FURSBlbXAxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitVUERBVEUgc2ogc3EgU0VU IGIgPSAxIEZST00gc2ogYXMgc3ogV0hFUkUgc3EuYSA9IHN6LmE7CisKK0NSRUFURSBSVUxF IHNqX2RlbF9ydWxlIEFTIE9OIERFTEVURSBUTyBzagorICBETyBJTlNURUFECisgICAgVVBE QVRFIHNqIFNFVCBhID0gMSBXSEVSRSBhID0gb2xkLmE7CitFWFBMQUlOIChDT1NUUyBPRkYp IERFTEVURSBGUk9NIHNqOworRFJPUCBSVUxFIHNqX2RlbF9ydWxlIE9OIHNqIENBU0NBREU7 CisKKy0tIENoZWNrIHRoYXQgU0pFIGRvZXMgbm90IG1pc3Rha2VubHkgb21pdCBxdWFsIGNs YXVzZXMgKGJ1ZyAjMTgxODcpCitpbnNlcnQgaW50byBlbXAxIHZhbHVlcyAoMSwgMSk7Citl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIGVtcDEgZnVsbCBqb2luCisgICAg KHNlbGVjdCAqIGZyb20gZW1wMSB0MSBqb2luCisgICAgICAgIGVtcDEgdDIgam9pbiBlbXAx IHQzIG9uIHQyLmlkID0gdDMuaWQKKyAgICAgICAgb24gdHJ1ZQorICAgIHdoZXJlIGZhbHNl KSBzIG9uIHRydWUKK3doZXJlIGZhbHNlOworc2VsZWN0IDEgZnJvbSBlbXAxIGZ1bGwgam9p bgorICAgIChzZWxlY3QgKiBmcm9tIGVtcDEgdDEgam9pbgorICAgICAgICBlbXAxIHQyIGpv aW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQzLmlkCisgICAgICAgIG9uIHRydWUKKyAgICB3aGVy ZSBmYWxzZSkgcyBvbiB0cnVlCit3aGVyZSBmYWxzZTsKKworLS0gQ2hlY2sgdGhhdCBTSkUg ZG9lcyBub3QgbWlzdGFrZW5seSByZS11c2Uga25vd2xlZGdlIG9mIHJlbGF0aW9uIHVuaXF1 ZW5lc3MKKy0tIG1hZGUgd2l0aCBkaWZmZXJlbnQgc2V0IG9mIHF1YWxzCitpbnNlcnQgaW50 byBlbXAxIHZhbHVlcyAoMiwgMSk7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tIGVtcDEgdDEgd2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIGVtcDEgdDIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHQyLmlkID0gdDEuY29kZSBh bmQgdDIuY29kZSA+IDApOworc2VsZWN0ICogZnJvbSBlbXAxIHQxIHdoZXJlIGV4aXN0cyAo c2VsZWN0ICogZnJvbSBlbXAxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGVyZSB0Mi5pZCA9IHQxLmNvZGUgYW5kIHQyLmNvZGUgPiAwKTsKKworLS0gV2Ug Y2FuIHJlbW92ZSB0aGUgam9pbiBldmVuIGlmIHdlIGZpbmQgdGhlIGpvaW4gY2FuJ3QgZHVw bGljYXRlIHJvd3MgYW5kCistLSB0aGUgYmFzZSBxdWFscyBvZiBlYWNoIHNpZGUgYXJlIGRp ZmZlcmVudC4gIEluIHRoZSBmb2xsb3dpbmcgY2FzZSB3ZSBlbmQgdXAKKy0tIG1vdmluZyBx dWFscyBvdmVyIHRvIHMxIHRvIG1ha2UgaXQgc28gaXQgY2FuJ3QgbWF0Y2ggYW55IHJvd3Mu CitjcmVhdGUgdGFibGUgc2woYSBpbnQsIGIgaW50LCBjIGludCk7CitjcmVhdGUgdW5pcXVl IGluZGV4IG9uIHNsKGEsIGIpOwordmFjdXVtIGFuYWx5emUgc2w7CisKKy0tIEJvdGggc2lk ZXMgYXJlIHVuaXF1ZSwgYnV0IGJhc2UgcXVhbHMgYXJlIGRpZmZlcmVudAorZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIgd2hlcmUgdDEuYSA9IHQy LmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMjsKKworLS0gQ2hlY2sgTnVsbFRlc3QgaW4g YmFzZXJlc3RyaWN0aW5mbyBsaXN0CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tIHNsIHQxLCBzbCB0Mgord2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0 Mi5iID0gMgorICBhbmQgdDEuYyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAor ICBhbmQgdDIuYiBJUyBOT1QgTlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEu YSBJUyBOT1QgTlVMTCBhbmQgdDIuYSBJUyBOT1QgTlVMTDsKK2V4cGxhaW4gKHZlcmJvc2Us IGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVyZSB0MS5iID0g dDIuYiBhbmQgdDIuYSA9IDMgYW5kIHQxLmEgPSAzCisgIGFuZCB0MS5jIElTIE5PVCBOVUxM IGFuZCB0Mi5jIElTIE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxMIGFuZCB0MS5i IElTIE5PVCBOVUxMCisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5hIElTIE5PVCBO VUxMOworCistLSBKb2luIHF1YWwgaXNuJ3QgbWVyZ2Vqb2luYWJsZSwgYnV0IGlubmVyIGlz IHVuaXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuMi5hIEZST00gc2ogbjEs IHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIuYSBBTkQgbjIuYSA9IDE7CisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyhTRUxFQ1QgbjIuYSBGUk9NIHNqIG4xLCBzaiBu MiBXSEVSRSBuMS5hIDw+IG4yLmEpIHEwLCBzbAorV0hFUkUgcTAuYSA9IDE7CisKKy0tIENo ZWNrIG9wdGltaXphdGlvbiBkaXNhYmxpbmcgaWYgaXQgd2lsbCB2aW9sYXRlIHNwZWNpYWwg am9pbiBjb25kaXRpb25zLgorLS0gVHdvIGlkZW50aWNhbCBqb2luZWQgcmVsYXRpb25zIHNh dGlzZmllcyBzZWxmIGpvaW4gcmVtb3ZhbCBjb25kaXRpb25zIGJ1dAorLS0gc3RheSBpbiBk aWZmZXJlbnQgc3BlY2lhbCBqb2luIGluZm9zLgorQ1JFQVRFIFRBQkxFIHNqX3QxIChpZCBz ZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90MiAoaWQgc2VyaWFsLCBhIGludCk7 CitDUkVBVEUgVEFCTEUgc2pfdDMgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRBQkxF IHNqX3Q0IChpZCBzZXJpYWwsIGEgaW50KTsKKworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBz al90MyBVU0lORyBidHJlZSAoYSxpZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIHNqX3Qy IFVTSU5HIGJ0cmVlIChpZCk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gc2pfdDEKK0pPSU4gKAorCVNFTEVDVCBzal90Mi5pZCBBUyBpZCBGUk9NIHNqX3QyCisJ V0hFUkUgRVhJU1RTCisJCSgKKwkJU0VMRUNUIFRSVUUgRlJPTSBzal90Myxzal90NCBXSEVS RSBzal90My5hID0gMSBBTkQgc2pfdDMuaWQgPSBzal90Mi5pZAorCQkpCisJKSB0MnQzdDQK K09OIHNqX3QxLmlkID0gdDJ0M3Q0LmlkCitKT0lOICgKKwlTRUxFQ1Qgc2pfdDIuaWQgQVMg aWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBUUlVFIEZST00g c2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0gc2pfdDIuaWQK KwkJKQorCSkgX3QydDN0NAorT04gc2pfdDEuaWQgPSBfdDJ0M3Q0LmlkOworCistLQorLS0g VGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0tCisKKy0tIEJvdGggc2lkZXMgaGF2ZSBl eHBsaWNpdCBMb2NrUm93cyBtYXJrcworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEx LmEgRlJPTSBzaiBhMSxzaiBhMiBXSEVSRSAoYTEuYT1hMi5hKSBGT1IgVVBEQVRFOworCity ZXNldCBlbmFibGVfaGFzaGpvaW47CityZXNldCBlbmFibGVfbWVyZ2Vqb2luOworCiAtLQog LS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNvcnJlY3QgY29sdW1uIHJlZmVyZW5jZXMgYXJl IHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZmJkYjkzMmU2 Yi4uYWUwYjM2ZjNiOCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM5MSw2 ICszOTEsNyBAQCBDYXRhbG9nSWQKIENhdGFsb2dJZE1hcEVudHJ5CiBDYXRhbG9nSW5kZXhT dGF0ZQogQ2hhbmdlVmFyTm9kZXNfY29udGV4dAorUmVwbGFjZVZhcm5vQ29udGV4dAogQ2hl Y2tQb2ludAogQ2hlY2tQb2ludFN0bXQKIENoZWNrcG9pbnRTdGF0c0RhdGEKQEAgLTI1ODIs NiArMjU4Myw3IEBAIFNlZW5SZWxzRW50cnkKIFNlbGVjdExpbWl0CiBTZWxlY3RTdG10CiBT ZWxlY3Rpdml0eQorU2VsZkpvaW5DYW5kaWRhdGUKIFNlbVRQYWRkZWQKIFNlbWlBbnRpSm9p bkZhY3RvcnMKIFNlcVNjYW4KQEAgLTQwMzQsNiArNDAzNiw3IEBAIHVuaWNvZGVTdHlsZUNv bHVtbkZvcm1hdAogdW5pY29kZVN0eWxlRm9ybWF0CiB1bmljb2RlU3R5bGVSb3dGb3JtYXQK IHVuaWNvZGVfbGluZXN0eWxlCitVbmlxdWVSZWxJbmZvCiB1bml0X2NvbnZlcnNpb24KIHVu bG9nZ2VkX3JlbGF0aW9uX2VudHJ5CiB1dGZfbG9jYWxfY29udmVyc2lvbl9mdW5jCi0tIAoy LjM5LjUKCg== --------------dnfm1XoAEM6SpfDKZo2VZz4z--