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 1u77tB-00AiLI-Qd for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Apr 2025 07:17:54 +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 1u77t9-00C3Rf-WC for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Apr 2025 07:17:52 +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 1u77t9-00C3RW-GS for pgsql-hackers@lists.postgresql.org; Tue, 22 Apr 2025 07:17:52 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1u77t5-001MjI-0w for pgsql-hackers@postgresql.org; Tue, 22 Apr 2025 07:17:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1745306266; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=08BrpFdYy9BKXGkpwooTvi7IasuU1Bj3Oof+rY+Fh9o=; b=H9LXrxB7xiWxaKn1gfOA5TpnaBJgsKqRTyY6vhPUtfQ8Qc+NPwV8hX2czehKMZFlXVH96m UVgUOtzIhJfbC27/9sssT7nfYvXBOA6KC+jTpsnnebCgy8yxwwb2IxjjsyoBjD6H/07z96 CYcEYme+wm5U0gtQJe/mOk7JDiAL4fU= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-278-ZC2B5uqONgesO7_oX_zpug-1; Tue, 22 Apr 2025 03:17:43 -0400 X-MC-Unique: ZC2B5uqONgesO7_oX_zpug-1 X-Mimecast-MFC-AGG-ID: ZC2B5uqONgesO7_oX_zpug_1745306262 Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-ac6caf952d7so460171766b.3 for ; Tue, 22 Apr 2025 00:17:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745306262; x=1745911062; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RVcc9D2sZscSnngU6FSgJVE6z3v56f3SycAyKWTHivs=; b=v/Rcvl17ckZVKtF8nMWC09Fn9tFAL1m4wcXBsVGao/WiqWx94b2siJihPSLw3n6RXF pmJjxDFHNIAkI2Uq71ttyMLu+pWFpxwiN2x3vSTIyegUdWXYHod1cie0RMA/EjRKcZhA NQBa/Rhrq3CfGUJUFt7AVjELWV8+kKU9/WK+Gzn5ClINUKOLAF5RgKBlAoGb3fq87CjX F5k9zpkstVfysUeFdx/3IYrp5imEZXLOiLyb6Au7c0YYBWA7BuXMnYjpq6fhJ5ZqhXIS fvOT2bV2zsm8Jxi9lewN/h5ukqGMdfs4KWCEci4FhxBD0NAE7fR84wzk9DRJBnVD6h66 iCRA== X-Forwarded-Encrypted: i=1; AJvYcCV+rZk2qpKuAoXCaFbIfsETbFweKpbhxHuPmYZCzeQz71d9XSSK6RFLB9Y4Em4XVll1U+p6n3Ikn+QUSJpu@postgresql.org X-Gm-Message-State: AOJu0YyTI/YIBC+d8iwE9Mhz83OjyLYmSqu+nufcQ0DZfKu53LH9wdWN 55VadhSbODDd9btzIh7k33+VOUwbBIZKKYqCqMN6scVMtLzBw1wtU6QmoUHd2iIasCC0CNBWFh+ iguqggDuf4UWfoi2EcPgyuj3FZex8V1U4EU5l8VWmawg+fQKv8MopAXhRHJs0wjbffc0xjsxMP9 n6ZUDTzmKx4lfhj/KDCio9nF0dWzlesTuY/FQj X-Gm-Gg: ASbGncs8CY8/upcqQGSI+/NfBOR5/wy+87vEXKWyUfUSIXWk/QNjWqZ8ufxCiV7lnux jU3YaegmQ8+VxQUggX0awKjcUZtq3VvOSJ0trm601wdA7GmiAr9r/+d7yIypSBcmPGC+8 X-Received: by 2002:a17:907:1b17:b0:acb:3f1d:ca7e with SMTP id a640c23a62f3a-acb74af0066mr1081270366b.8.1745306262063; Tue, 22 Apr 2025 00:17:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHQXepzFbEGDRuJpg+WdIlWAKhExxiGQ1jHHNWfrLl7Ij5XH3rixjs8D0aRj0Q/dbcMabLkS9Mtsjv9yOz+iqs= X-Received: by 2002:a17:907:1b17:b0:acb:3f1d:ca7e with SMTP id a640c23a62f3a-acb74af0066mr1081268966b.8.1745306261663; Tue, 22 Apr 2025 00:17:41 -0700 (PDT) MIME-Version: 1.0 References: <29c87c10-fdbc-4d0f-b0f4-15e14dd36bce@vondra.me> <7bcc0420-d457-4af5-a459-a4e5d929a665@vondra.me> In-Reply-To: From: Filip Janus Date: Tue, 22 Apr 2025 09:17:30 +0200 X-Gm-Features: ATxdqUFTSH9sqyKcYmdIoEiuZ4EwoOWjmPzKtEgY2zgxxDICw7fUM5U2o1Yl8FY Message-ID: Subject: Re: Proposal: Adding compression of temporary files To: Dmitry Dolgov <9erthalion6@gmail.com> Cc: Tomas Vondra , Alexander Korotkov , pgsql-hackers@postgresql.org X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: _VK12bdkotG6soTkHHls4O55acHcFlYJfAc_eSQUSDs_1745306262 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000c08449063358c749" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c08449063358c749 Content-Type: multipart/alternative; boundary="000000000000c08446063358c747" --000000000000c08446063358c747 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Since the patch was prepared months ago, it needs to be rebased. -Filip- ne 13. 4. 2025 v 21:53 odes=C3=ADlatel Dmitry Dolgov <9erthalion6@gmail.com= > napsal: > > On Fri, Mar 28, 2025 at 09:23:13AM GMT, Filip Janus wrote: > > > + else > > > + if (nbytesOriginal - file->pos !=3D 0) > > > + /* curOffset must be corrected also if compression is > > > + * enabled, nbytes was changed by compression but we > > > + * have to use the original value of nbytes > > > + */ > > > + file->curOffset-=3Dbytestowrite; > > > > > > It's not something introduced by the compression patch - the first pa= rt > > > is what we used to do before. But I find it a bit confusing - isn't i= t > > > mixing the correction of "logical file position" adjustment we did > > > before, and also the adjustment possibly needed due to compression? > > > > > > In fact, isn't it going to fail if the code gets multiple loops in > > > > > > while (wpos < file->nbytes) > > > { > > > ... > > > } > > > > > > because bytestowrite will be the value from the last loop? I haven't > > > tried, but I guess writing wide tuples (more than 8k) might fail. > > > > > > > I will definitely test it with larger tuples than 8K. > > > > Maybe I don't understand it correctly, > > the adjustment is performed in the case that file->nbytes and file->pos > > differ. > > So it must persist also if we are working with the compressed data, but > the > > problem is that data stored and compressed on disk has different sizes > than > > data incoming uncompressed ones, so what should be the correction value= . > > By debugging, I realized that the correction should correspond to the > size > > of > > bytestowrite from the last iteration of the loop. > > I agree, this looks strange. If the idea is to set curOffset to its > original value + pos, and the original value was advanced multiple times > by bytestowrite, it seems incorrect to adjust it by bytestowrite, it > seems incorrect to adjust it only once. From what I see current tests do > not exercise a case where the while will get multiple loops, so it looks > fine. > > At the same time maybe I'm missing something, but how exactly such test > for 8k tuples and multiple loops in the while block should look like? > E.g. when I force a hash join on a table with a single wide text column, > the minimal tuple that is getting written to the temporary file still > has rather small length, I assume due to toasting. Is there some other > way to achieve that? > > --000000000000c08446063358c747 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Since the patch was prepared months ago, it needs to = be rebased.

=C2=A0 =C2=A0 -Filip-

ne 13. 4. 2025 v=C2=A021:53 odes=C3=ADlatel Dmitry D= olgov <9erthalion6@gmail.com> napsal:
&g= t; On Fri, Mar 28, 2025 at 09:23:13AM GMT, Filip Janus wrote:
> > +=C2=A0 =C2=A0 else
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (nbytesOriginal - file->pos != =3D 0)
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* curOffset must be c= orrected also if compression is
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* enabled, nbyte= s was changed by compression but we
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* have to use th= e original value of nbytes
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 file->curOffset-=3D= bytestowrite;
> >
> > It's not something introduced by the compression patch - the = first part
> > is what we used to do before. But I find it a bit confusing - isn= 't it
> > mixing the correction of "logical file position" adjust= ment we did
> > before, and also the adjustment possibly needed due to compressio= n?
> >
> > In fact, isn't it going to fail if the code gets multiple loo= ps in
> >
> >=C2=A0 =C2=A0 =C2=A0while (wpos < file->nbytes)
> >=C2=A0 =C2=A0 =C2=A0{
> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 ...
> >=C2=A0 =C2=A0 =C2=A0}
> >
> > because bytestowrite will be the value from the last loop? I have= n't
> > tried, but I guess writing wide tuples (more than 8k) might fail.=
> >
>
> I will definitely test it with larger tuples than 8K.
>
> Maybe I don't understand it correctly,
> the adjustment is performed in the case that file->nbytes and file-= >pos
> differ.
> So it must persist also if we are working with the compressed data, bu= t the
> problem is that data stored and compressed on disk has different sizes= than
> data incoming uncompressed ones, so what should be the correction valu= e.
> By debugging, I realized that the correction should correspond to the = size
> of
> bytestowrite from the last iteration of the loop.

I agree, this looks strange. If the idea is to set curOffset to its
original value + pos, and the original value was advanced multiple times by bytestowrite, it seems incorrect to adjust it by bytestowrite, it
seems incorrect to adjust it only once. From what I see current tests do not exercise a case where the while will get multiple loops, so it looks fine.

At the same time maybe I'm missing something, but how exactly such test=
for 8k tuples and multiple loops in the while block should look like?
E.g. when I force a hash join on a table with a single wide text column, the minimal tuple that is getting written to the temporary file still
has rather small length, I assume due to toasting. Is there some other
way to achieve that?

--000000000000c08446063358c747-- --000000000000c08449063358c749 Content-Type: application/octet-stream; name="0002-Add-test-for-temporary-files-compression-this-commit.patch" Content-Disposition: attachment; filename="0002-Add-test-for-temporary-files-compression-this-commit.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9s69hjq1 RnJvbSA0MTk2ZjA1NmM2ZDVlOGVlYWMyM2EwNjQ0NzVkNTI0MTRiNDVjYTIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGaWxpcCBKYW51cyA8ZmphbnVzQHJlZGhhdC5jb20+CkRhdGU6 IFdlZCwgMTYgQXByIDIwMjUgMTI6MDg6MjggKzAyMDAKU3ViamVjdDogW1BBVENIIDIvMl0gQWRk IHRlc3QgZm9yIHRlbXBvcmFyeSBmaWxlcyBjb21wcmVzc2lvbiwgdGhpcyBjb21taXQKIGFkZHMg dGVzdHMgZm9yIGx6NCBhbmQgcGdsei4KCi0tLQogc3JjL3Rlc3QvcmVncmVzcy9HTlVtYWtlZmls ZSAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUg ICAgICB8ICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9oYXNoX2x6NC5zcWwgIHwg NjI2ICsrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbl9o YXNoX3BnbHouc3FsIHwgNjI2ICsrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCAxMjU5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2hfbHo0LnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaF9wZ2x6LnNxbAoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvR05VbWFrZWZpbGUgYi9zcmMvdGVzdC9yZWdyZXNzL0dOVW1ha2Vm aWxlCmluZGV4IGVmMmJkZGY0MmNhLi4wMDc1N2E0NGNhNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9HTlVtYWtlZmlsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL0dOVW1ha2VmaWxlCkBA IC05NCw2ICs5NCwxMCBAQCBpbnN0YWxsZGlycy10ZXN0czogaW5zdGFsbGRpcnMKIFJFR1JFU1Nf T1BUUyA9IC0tZGxwYXRoPS4gLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCBcCiAJJChFWFRSQV9S RUdSRVNTX09QVFMpCiAKK2lmZXEgKCQod2l0aF9sejQpLHllcykKK292ZXJyaWRlIEVYVFJBX1RF U1RTIDo9IGpvaW5faGFzaF9sejQgJChFWFRSQV9URVNUUykKK2VuZGlmCisKIGNoZWNrOiBhbGwK IAkkKHBnX3JlZ3Jlc3NfY2hlY2spICQoUkVHUkVTU19PUFRTKSAtLXNjaGVkdWxlPSQoc3JjZGly KS9wYXJhbGxlbF9zY2hlZHVsZSAkKE1BWENPTk5PUFQpICQoRVhUUkFfVEVTVFMpCiAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDBmMzhjYWEwZDI0Li43NzAxZTU3ZmFkMyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xNSw3ICsxNSw2IEBAIHRlc3Q6IHRlc3Rf c2V0dXAKICMgVGhlIGZpcnN0IGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIC0tLS0tLS0tLS0K IHRlc3Q6IGJvb2xlYW4gY2hhciBuYW1lIHZhcmNoYXIgdGV4dCBpbnQyIGludDQgaW50OCBvaWQg ZmxvYXQ0IGZsb2F0OCBiaXQgbnVtZXJpYyB0eGlkIHV1aWQgZW51bSBtb25leSByYW5nZXR5cGVz IHBnX2xzbiByZWdwcm9jCi0KICMgLS0tLS0tLS0tLQogIyBUaGUgc2Vjb25kIGdyb3VwIG9mIHBh cmFsbGVsIHRlc3RzCiAjIG11bHRpcmFuZ2V0eXBlcyBkZXBlbmRzIG9uIHJhbmdldHlwZXMKQEAg LTEzNiwzICsxMzUsNiBAQCB0ZXN0OiBmYXN0X2RlZmF1bHQKICMgcnVuIHRhYmxlc3BhY2UgdGVz dCBhdCB0aGUgZW5kIGJlY2F1c2UgaXQgZHJvcHMgdGhlIHRhYmxlc3BhY2UgY3JlYXRlZCBkdXJp bmcKICMgc2V0dXAgdGhhdCBvdGhlciB0ZXN0cyBtYXkgdXNlLgogdGVzdDogdGFibGVzcGFjZQor CisjIHRoaXMgdGVzdCBpcyBlcXVpdmFsZW50IHRvIGpvaW5faGFzaCB0ZXN0IGp1c3QgdGhlIGNv bXByZXNzaW9uIGlzIGVuYWJsZWQKK3Rlc3Q6IGpvaW5faGFzaF9wZ2x6CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2hfbHo0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pvaW5faGFzaF9sejQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4xZDE5YzE5ODBlMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW5faGFzaF9sejQuc3FsCkBAIC0wLDAgKzEsNjI2IEBACistLQorLS0gZXhlcmNpc2VzIGZv ciB0aGUgaGFzaCBqb2luIGNvZGUKKy0tCisKK2JlZ2luOworCitzZXQgbG9jYWwgbWluX3BhcmFs bGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgbG9jYWwgcGFyYWxsZWxfc2V0dXBfY29zdCA9 IDA7CitzZXQgbG9jYWwgZW5hYmxlX2hhc2hqb2luID0gb247CitzZXQgbG9jYWwgdGVtcF9maWxl X2NvbXByZXNzaW9uID0gJ2x6NCc7CisKKy0tIEV4dHJhY3QgYnVja2V0IGFuZCBiYXRjaCBjb3Vu dHMgZnJvbSBhbiBleHBsYWluIGFuYWx5emUgcGxhbi4gIEluCistLSBnZW5lcmFsIHdlIGNhbid0 IG1ha2UgYXNzZXJ0aW9ucyBhYm91dCBob3cgbWFueSBiYXRjaGVzIChvcgorLS0gYnVja2V0cykg d2lsbCBiZSByZXF1aXJlZCBiZWNhdXNlIGl0IGNhbiB2YXJ5LCBidXQgd2UgY2FuIGluIHNvbWUK Ky0tIHNwZWNpYWwgY2FzZXMgYW5kIHdlIGNhbiBjaGVjayBmb3IgZ3Jvd3RoLgorY3JlYXRlIG9y IHJlcGxhY2UgZnVuY3Rpb24gZmluZF9oYXNoKG5vZGUganNvbikKK3JldHVybnMganNvbiBsYW5n dWFnZSBwbHBnc3FsCithcworJCQKK2RlY2xhcmUKKyAgeCBqc29uOworICBjaGlsZCBqc29uOwor YmVnaW4KKyAgaWYgbm9kZS0+PidOb2RlIFR5cGUnID0gJ0hhc2gnIHRoZW4KKyAgICByZXR1cm4g bm9kZTsKKyAgZWxzZQorICAgIGZvciBjaGlsZCBpbiBzZWxlY3QganNvbl9hcnJheV9lbGVtZW50 cyhub2RlLT4nUGxhbnMnKQorICAgIGxvb3AKKyAgICAgIHggOj0gZmluZF9oYXNoKGNoaWxkKTsK KyAgICAgIGlmIHggaXMgbm90IG51bGwgdGhlbgorICAgICAgICByZXR1cm4geDsKKyAgICAgIGVu ZCBpZjsKKyAgICBlbmQgbG9vcDsKKyAgICByZXR1cm4gbnVsbDsKKyAgZW5kIGlmOworZW5kOwor JCQ7CitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBoYXNoX2pvaW5fYmF0Y2hlcyhxdWVyeSB0 ZXh0KQorcmV0dXJucyB0YWJsZSAob3JpZ2luYWwgaW50LCBmaW5hbCBpbnQpIGxhbmd1YWdlIHBs cGdzcWwKK2FzCiskJAorZGVjbGFyZQorICB3aG9sZV9wbGFuIGpzb247CisgIGhhc2hfbm9kZSBq c29uOworYmVnaW4KKyAgZm9yIHdob2xlX3BsYW4gaW4KKyAgICBleGVjdXRlICdleHBsYWluIChh bmFseXplLCBmb3JtYXQgJydqc29uJycpICcgfHwgcXVlcnkKKyAgbG9vcAorICAgIGhhc2hfbm9k ZSA6PSBmaW5kX2hhc2goanNvbl9leHRyYWN0X3BhdGgod2hvbGVfcGxhbiwgJzAnLCAnUGxhbicp KTsKKyAgICBvcmlnaW5hbCA6PSBoYXNoX25vZGUtPj4nT3JpZ2luYWwgSGFzaCBCYXRjaGVzJzsK KyAgICBmaW5hbCA6PSBoYXNoX25vZGUtPj4nSGFzaCBCYXRjaGVzJzsKKyAgICByZXR1cm4gbmV4 dDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gTWFrZSBhIHNpbXBsZSByZWxhdGlvbiB3 aXRoIHdlbGwgZGlzdHJpYnV0ZWQga2V5cyBhbmQgY29ycmVjdGx5CistLSBlc3RpbWF0ZWQgc2l6 ZS4KK2NyZWF0ZSB0YWJsZSBzaW1wbGUgYXMKKyAgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAy MDAwMCkgQVMgaWQsICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJzsKK2FsdGVy IHRhYmxlIHNpbXBsZSBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKK2FuYWx5emUgc2ltcGxl OworCistLSBNYWtlIGEgcmVsYXRpb24gd2hvc2Ugc2l6ZSB3ZSB3aWxsIHVuZGVyLWVzdGltYXRl LiAgV2Ugd2FudCBzdGF0cworLS0gdG8gc2F5IDEwMDAgcm93cywgYnV0IGFjdHVhbGx5IHRoZXJl IGFyZSAyMCwwMDAgcm93cy4KK2NyZWF0ZSB0YWJsZSBiaWdnZXJfdGhhbl9pdF9sb29rcyBhcwor ICBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBhcyBpZCwgJ2FhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWEnOworYWx0ZXIgdGFibGUgYmlnZ2VyX3RoYW5faXRfbG9va3Mg c2V0IChhdXRvdmFjdXVtX2VuYWJsZWQgPSAnZmFsc2UnKTsKK2FsdGVyIHRhYmxlIGJpZ2dlcl90 aGFuX2l0X2xvb2tzIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOworYW5hbHl6ZSBiaWdnZXJf dGhhbl9pdF9sb29rczsKK3VwZGF0ZSBwZ19jbGFzcyBzZXQgcmVsdHVwbGVzID0gMTAwMCB3aGVy ZSByZWxuYW1lID0gJ2JpZ2dlcl90aGFuX2l0X2xvb2tzJzsKKworLS0gTWFrZSBhIHJlbGF0aW9u IHdob3NlIHNpemUgd2UgdW5kZXJlc3RpbWF0ZSBhbmQgdGhhdCBhbHNvIGhhcyBhCistLSBraW5k IG9mIHNrZXcgdGhhdCBicmVha3Mgb3VyIGJhdGNoaW5nIHNjaGVtZS4gIFdlIHdhbnQgc3RhdHMg dG8gc2F5CistLSAyIHJvd3MsIGJ1dCBhY3R1YWxseSB0aGVyZSBhcmUgMjAsMDAwIHJvd3Mgd2l0 aCB0aGUgc2FtZSBrZXkuCitjcmVhdGUgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCAoaWQgaW50LCB0 IHRleHQpOworYWx0ZXIgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCBzZXQgKGF1dG92YWN1dW1fZW5h YmxlZCA9ICdmYWxzZScpOworYWx0ZXIgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCBzZXQgKHBhcmFs bGVsX3dvcmtlcnMgPSAyKTsKK2FuYWx5emUgZXh0cmVtZWx5X3NrZXdlZDsKK2luc2VydCBpbnRv IGV4dHJlbWVseV9za2V3ZWQKKyAgc2VsZWN0IDQyIGFzIGlkLCAnYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYScKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApOwordXBk YXRlIHBnX2NsYXNzCisgIHNldCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9u X3NpemUoJ2V4dHJlbWVseV9za2V3ZWQnKSAvIDgxOTIKKyAgd2hlcmUgcmVsbmFtZSA9ICdleHRy ZW1lbHlfc2tld2VkJzsKKworLS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5v cm1vdXMgdHVwbGVzLgorY3JlYXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3Nlcmll cygxLCAyKSBhcyBpZCwgcnBhZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CithbHRlciB0YWJsZSB3 aWRlIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOworCistLSBUaGUgIm9wdGltYWwiIGNhc2U6 IHRoZSBoYXNoIHRhYmxlIGZpdHMgaW4gbWVtb3J5OyB3ZSBwbGFuIGZvciAxCistLSBiYXRjaCwg d2Ugc3RpY2sgdG8gdGhhdCBudW1iZXIsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRo aW4KKy0tIG91ciB3b3JrX21lbSBidWRnZXQKKworLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQg c2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7 CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBs aWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBz aW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBz aW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFz IGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRj aGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJv bSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBz ZXR0aW5nczsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgaGFzaCBqb2lu CitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNo X21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0g b2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRp YWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisg IGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1w bGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5n czsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4KK3NhdmVwb2lu dCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0g MjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICc0TUInOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRp cGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxh aW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1w bGUgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1w bGUgcyB1c2luZyAoaWQpOworc2VsZWN0IG9yaWdpbmFsID4gMSBhcyBpbml0aWFsbHlfbXVsdGli YXRjaCwgZmluYWwgPiBvcmlnaW5hbCBhcyBpbmNyZWFzZWRfYmF0Y2hlcworICBmcm9tIGhhc2hf am9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBz aW1wbGUgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIFRo ZSAiZ29vZCIgY2FzZTogYmF0Y2hlcyByZXF1aXJlZCwgYnV0IHdlIHBsYW4gdGhlIHJpZ2h0IG51 bWJlcjsgd2UKKy0tIHBsYW4gZm9yIHNvbWUgbnVtYmVyIG9mIGJhdGNoZXMsIGFuZCB3ZSBzdGlj ayB0byB0aGF0IG51bWJlciwgYW5kCistLSBwZWFrIG1lbW9yeSB1c2FnZSBzYXlzIHdpdGhpbiBv dXIgd29ya19tZW0gYnVkZ2V0CisKKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdz Oworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxv Y2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0g MS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRp YWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisg IGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1w bGUgciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5n czsKKworLS0gcGFyYWxsZWwgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitzYXZl cG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVt X211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7 CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpv aW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpv aW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5 X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJv bSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSBy IGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOwor CistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLWF3YXJlIGhhc2ggam9pbgorc2F2ZXBvaW50IHNl dHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwor c2V0IGxvY2FsIHdvcmtfbWVtID0gJzE5MmtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBs aWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitleHBsYWlu IChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxl IHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxl IHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0 Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pv aW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2lt cGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKKy0tIHBhcmFsbGVsIGZ1bGwgbXVsdGktYmF0Y2ggaGFz aCBqb2luCitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2lt cGxlIHMgdXNpbmcgKGlkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBUaGUgImJhZCIg Y2FzZTogZHVyaW5nIGV4ZWN1dGlvbiB3ZSBuZWVkIHRvIGluY3JlYXNlIG51bWJlciBvZgorLS0g YmF0Y2hlczsgaW4gdGhpcyBjYXNlIHdlIHBsYW4gZm9yIDEgYmF0Y2gsIGFuZCBpbmNyZWFzZSBh dCBsZWFzdCBhCistLSBjb3VwbGUgb2YgdGltZXMsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5 cyB3aXRoaW4gb3VyIHdvcmtfbWVtCistLSBidWRnZXQKKworLS0gbm9uLXBhcmFsbGVsCitzYXZl cG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDA7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVt X211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgq KSBGUk9NIHNpbXBsZSByIEpPSU4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyBVU0lORyAoaWQpOwor c2VsZWN0IGNvdW50KCopIEZST00gc2ltcGxlIHIgSk9JTiBiaWdnZXJfdGhhbl9pdF9sb29rcyBz IFVTSU5HIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNo LCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2lu X2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgRlJPTSBzaW1wbGUgciBKT0lOIGJpZ2dl cl90aGFuX2l0X2xvb2tzIHMgVVNJTkcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdz OworCistLSBwYXJhbGxlbCB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBoYXNoIGpvaW4KK3NhdmVw b2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMjsKK3NldCBsb2NhbCB3b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9jYWwgaGFzaF9tZW1f bXVsdGlwbGllciA9IDEuMDsKK3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsK K2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9p biBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJv bSBzaW1wbGUgciBqb2luIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVj dCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwg YXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1 c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdp dGggcGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9j YWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitzZXQgbG9jYWwgd29ya19t ZW0gPSAnMTkya0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQg bG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAg c2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9sb29rcyBz IHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJpZ2dlcl90 aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlh bGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAg ZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBs ZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJh Y2sgdG8gc2V0dGluZ3M7CisKKy0tIFRoZSAidWdseSIgY2FzZTogaW5jcmVhc2luZyB0aGUgbnVt YmVyIG9mIGJhdGNoZXMgZHVyaW5nIGV4ZWN1dGlvbgorLS0gZG9lc24ndCBoZWxwLCBzbyBzdG9w IHRyeWluZyB0byBmaXQgaW4gd29ya19tZW0gYW5kIGhvcGUgZm9yIHRoZQorLS0gYmVzdDsgaW4g dGhpcyBjYXNlIHdlIHBsYW4gZm9yIDEgYmF0Y2gsIGluY3JlYXNlcyBqdXN0IG9uY2UgYW5kCist LSB0aGVuIHN0b3AgaW5jcmVhc2luZyBiZWNhdXNlIHRoYXQgZGlkbid0IGhlbHAgYXQgYWxsLCBz byB3ZSBibG93CistLSByaWdodCB0aHJvdWdoIHRoZSB3b3JrX21lbSBidWRnZXQgYW5kIGhvcGUg Zm9yIHRoZSBiZXN0Li4uCisKKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOwor c2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2Fs IHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4w OworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBq b2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20g c2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCAqIGZy b20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUg ciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8g c2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtb2JsaXZpb3VzIGhhc2ggam9p bgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAyOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCBo YXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNo ID0gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1w bGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCop IGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVj dCAqIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBz aW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJh Y2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUgaGFzaCBq b2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDE7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2Fs IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hh c2ggPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2lt cGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgq KSBmcm9tIHNpbXBsZSByIGpvaW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CitzZWxl Y3QgKiBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20g c2ltcGxlIHIgam9pbiBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxi YWNrIHRvIHNldHRpbmdzOworCistLSBBIGNvdXBsZSBvZiBvdGhlciBoYXNoIGpvaW4gdGVzdHMg dW5yZWxhdGVkIHRvIHdvcmtfbWVtIG1hbmFnZW1lbnQuCisKKy0tIENoZWNrIHRoYXQgRVhQTEFJ TiBBTkFMWVpFIGhhcyBkYXRhIGV2ZW4gaWYgdGhlIGxlYWRlciBkb2Vzbid0IHBhcnRpY2lwYXRl CitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDI7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNo X21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxvY2FsIHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNp cGF0aW9uID0gb2ZmOworc2VsZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQk KTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBFeGVyY2lzZSByZXNjYW5zLiAgV2UnbGwg dHVybiBvZmYgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gc28KKy0tIHRoYXQgd2UgY2Fu IGNoZWNrIHRoYXQgaW5zdHJ1bWVudGF0aW9uIGNvbWVzIGJhY2sgY29ycmVjdGx5LgorCitjcmVh dGUgdGFibGUgam9pbl9mb28gYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAzKSBhcyBpZCwg J3h4eHh4Jzo6dGV4dCBhcyB0OworYWx0ZXIgdGFibGUgam9pbl9mb28gc2V0IChwYXJhbGxlbF93 b3JrZXJzID0gMCk7CitjcmVhdGUgdGFibGUgam9pbl9iYXIgYXMgc2VsZWN0IGdlbmVyYXRlX3Nl cmllcygxLCAxMDAwMCkgYXMgaWQsICd4eHh4eCc6OnRleHQgYXMgdDsKK2FsdGVyIHRhYmxlIGpv aW5fYmFyIHNldCAocGFyYWxsZWxfd29ya2VycyA9IDIpOworCistLSBtdWx0aS1iYXRjaCB3aXRo IHJlc2NhbiwgcGFyYWxsZWwtb2JsaXZpb3VzCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRp b24gPSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFy YWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFs ID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNjRr Qic7CitzZXQgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikK KyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBi MS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkg c3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5p ZCAtIDE7CitzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICBsZWZ0IGpvaW4gKHNlbGVj dCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlk KSkgc3MKKyAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3Mu aWQgLSAxOworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2lu X2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQg am9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBi MiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2lu X2Zvby5pZCA+IHNzLmlkIC0gMTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBz aW5nbGUtYmF0Y2ggd2l0aCByZXNjYW4sIHBhcmFsbGVsLW9ibGl2aW91cworc2F2ZXBvaW50IHNl dHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworc2V0IHBhcmFsbGVsX2xl YWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2V0IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3Np emUgPSAwOworc2V0IHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworc2V0IHBhcmFsbGVsX3R1cGxl X2Nvc3QgPSAwOworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0 IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0 IHdvcmtfbWVtID0gJzRNQic7CitzZXQgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxh aW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0 IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIg YjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9p bl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICBs ZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9i YXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpv aW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJhdGNoCisg IGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2lu X2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEg am9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3Mu aWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNl dHRpbmdzOworCistLSBtdWx0aS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwtYXdhcmUKK3Nh dmVwb2ludCBzZXR0aW5nczsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworc2V0IHBh cmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2V0IG1pbl9wYXJhbGxlbF90YWJs ZV9zY2FuX3NpemUgPSAwOworc2V0IHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworc2V0IHBhcmFs bGVsX3R1cGxlX2Nvc3QgPSAwOworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIg PSAyOworc2V0IGVuYWJsZV9tYXRlcmlhbCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0g b2ZmOworc2V0IHdvcmtfbWVtID0gJzY0a0InOworc2V0IGhhc2hfbWVtX211bHRpcGxpZXIgPSAx LjA7CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9v CisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2lu IGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCAr IDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2VsZWN0IGNvdW50KCopIGZyb20gam9p bl9mb28KKyAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBq b2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQg KyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKK3NlbGVjdCBmaW5hbCA+IDEgYXMgbXVs dGliYXRjaAorICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpv aW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zv by5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CiskJCk7Cityb2xs YmFjayB0byBzZXR0aW5nczsKKworLS0gc2luZ2xlLWJhdGNoIHdpdGggcmVzY2FuLCBwYXJhbGxl bC1hd2FyZQorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0g b247CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWluX3Bh cmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7 CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJsZV9t ZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNE1CJzsKK3NldCBoYXNoX21lbV9tdWx0 aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJv bSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9i YXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlk IDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKK3NlbGVjdCBjb3VudCgq KSBmcm9tIGpvaW5fZm9vCisgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9p bl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcworICBvbiBqb2luX2Zvby5p ZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgZmluYWwg PiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVj dCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIx LnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAg b24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOwor JCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIEEgZnVsbCBvdXRlciBqb2luIHdoZXJl IGV2ZXJ5IHJlY29yZCBpcyBtYXRjaGVkLgorCistLSBub24tcGFyYWxsZWwKK3NhdmVwb2ludCBz ZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsK K2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSBy IGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0ICBjb3VudCgqKSBm cm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworcm9sbGJh Y2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsaXNtIG5vdCBwb3NzaWJsZSB3aXRoIHBhcmFs bGVsLW9ibGl2aW91cyBmdWxsIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVu YWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50 KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Citz ZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVz aW5nIChpZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWxpc20gaXMgcG9z c2libGUgd2l0aCBwYXJhbGxlbC1hd2FyZSBmdWxsIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRp bmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworZXhw bGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVs bCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgIGNvdW50KCopIGZyb20g c2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Cityb2xsYmFjayB0 byBzZXR0aW5nczsKKworLS0gQSBmdWxsIG91dGVyIGpvaW4gd2hlcmUgZXZlcnkgcmVjb3JkIGlz IG5vdCBtYXRjaGVkLgorCistLSBub24tcGFyYWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3Nl dCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK2V4cGxhaW4gKGNv c3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIg am9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKK3NlbGVjdCAgY291bnQoKikgZnJv bSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7 Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWxpc20gbm90IHBvc3NpYmxlIHdp dGggcGFyYWxsZWwtb2JsaXZpb3VzIGZ1bGwgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7 CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNlbGVj dCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIu aWQgPSAwIC0gcy5pZCk7CitzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRl ciBqb2luIHNpbXBsZSBzIG9uIChyLmlkID0gMCAtIHMuaWQpOworcm9sbGJhY2sgdG8gc2V0dGlu Z3M7CisKKy0tIHBhcmFsbGVsaXNtIGlzIHBvc3NpYmxlIHdpdGggcGFyYWxsZWwtYXdhcmUgZnVs bCBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0 ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5p ZCA9IDAgLSBzLmlkKTsKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVy IGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7Cityb2xsYmFjayB0byBzZXR0aW5n czsKKworCistLSBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIGh1Z2UgdHVwbGVzIChu b3RlIHVzZSBvZiBub24tc3RyaWN0CistLSBleHByZXNzaW9uIGFuZCBsZWZ0IGpvaW4gcmVxdWly ZWQgdG8gZ2V0IHRoZSBkZXRvYXN0ZWQgdHVwbGUgaW50bworLS0gdGhlIGhhc2ggdGFibGUpCisK Ky0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luIChoaXRzIEV4ZWNQYXJh bGxlbEhhc2hMb2FkVHVwbGUgYW5kCistLSBzdHNfcHV0dHVwbGUgb3ZlcnNpemVkIHR1cGxlIGNh c2VzIGJlY2F1c2UgaXQncyBtdWx0aS1iYXRjaCkKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBlbmFibGVfcGFyYWxsZWxf aGFzaCA9IG9uOworc2V0IHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBoYXNoX21lbV9tdWx0aXBs aWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgbGVuZ3RoKG1heChzLnQp KQorICBmcm9tIHdpZGUgbGVmdCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAn JyBhcyB0IGZyb20gd2lkZSkgcyB1c2luZyAoaWQpOworc2VsZWN0IGxlbmd0aChtYXgocy50KSkK K2Zyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFz IHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0 Y2gKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBsZW5ndGgobWF4KHMu dCkpCisgIGZyb20gd2lkZSBsZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8 ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0 aW5nczsKKworCistLSBIYXNoIGpvaW4gcmV1c2VzIHRoZSBIT1Qgc3RhdHVzIGJpdCB0byBpbmRp Y2F0ZSBtYXRjaCBzdGF0dXMuIFRoaXMgY2FuIG9ubHkKKy0tIGJlIGd1YXJhbnRlZWQgdG8gcHJv ZHVjZSBjb3JyZWN0IHJlc3VsdHMgaWYgYWxsIHRoZSBoYXNoIGpvaW4gdHVwbGUgbWF0Y2gKKy0t IGJpdHMgYXJlIHJlc2V0IGJlZm9yZSByZXVzZS4gVGhpcyBpcyBkb25lIHVwb24gbG9hZGluZyB0 aGVtIGludG8gdGhlCistLSBoYXNodGFibGUuCitTQVZFUE9JTlQgc2V0dGluZ3M7CitTRVQgZW5h YmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXpl ID0gMDsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9j b3N0ID0gMDsKK0NSRUFURSBUQUJMRSBoanRlc3RfbWF0Y2hiaXRzX3QxKGlkIGludCk7CitDUkVB VEUgVEFCTEUgaGp0ZXN0X21hdGNoYml0c190MihpZCBpbnQpOworSU5TRVJUIElOVE8gaGp0ZXN0 X21hdGNoYml0c190MSBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gaGp0ZXN0X21hdGNoYml0c190 MiBWQUxVRVMgKDIpOworLS0gVXBkYXRlIHNob3VsZCBjcmVhdGUgYSBIT1QgdHVwbGUuIElmIHRo aXMgc3RhdHVzIGJpdCBpc24ndCBjbGVhcmVkLCB3ZSB3b24ndAorLS0gY29ycmVjdGx5IGVtaXQg dGhlIE5VTEwtZXh0ZW5kZWQgdW5tYXRjaGluZyB0dXBsZSBpbiBmdWxsIGhhc2ggam9pbi4KK1VQ REFURSBoanRlc3RfbWF0Y2hiaXRzX3QyIHNldCBpZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGhqdGVz dF9tYXRjaGJpdHNfdDEgdDEgRlVMTCBKT0lOIGhqdGVzdF9tYXRjaGJpdHNfdDIgdDIgT04gdDEu aWQgPSB0Mi5pZAorICBPUkRFUiBCWSB0MS5pZDsKKy0tIFRlc3Qgc2VyaWFsIGZ1bGwgaGFzaCBq b2luLgorLS0gUmVzZXR0aW5nIHBhcmFsbGVsX3NldHVwX2Nvc3Qgc2hvdWxkIGZvcmNlIGEgc2Vy aWFsIHBsYW4uCistLSBKdXN0IHRvIGJlIHNhZmUsIGhvd2V2ZXIsIHNldCBlbmFibGVfcGFyYWxs ZWxfaGFzaCB0byBvZmYsIGFzIHBhcmFsbGVsIGZ1bGwKKy0tIGhhc2ggam9pbnMgYXJlIG9ubHkg c3VwcG9ydGVkIHdpdGggc2hhcmVkIGhhc2h0YWJsZXMuCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9j b3N0OworU0VUIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworU0VMRUNUICogRlJPTSBoanRl c3RfbWF0Y2hiaXRzX3QxIHQxIEZVTEwgSk9JTiBoanRlc3RfbWF0Y2hiaXRzX3QyIHQyIE9OIHQx LmlkID0gdDIuaWQ7CitST0xMQkFDSyBUTyBzZXR0aW5nczsKKworcm9sbGJhY2s7CisKKy0tIFZl cmlmeSB0aGF0IGhhc2gga2V5IGV4cHJlc3Npb25zIHJlZmVyZW5jZSB0aGUgY29ycmVjdAorLS0g bm9kZXMuIEhhc2hqb2luJ3MgaGFzaGtleXMgbmVlZCB0byByZWZlcmVuY2UgaXRzIG91dGVyIHBs YW4sIEhhc2gncworLS0gbmVlZCB0byByZWZlcmVuY2UgSGFzaCdzIG91dGVyIHBsYW4gKHdoaWNo IGlzIGJlbG93IEhhc2hKb2luJ3MKKy0tIGlubmVyIHBsYW4pLiBJdCdzIG5vdCB0cml2aWFsIHRv IHZlcmlmeSB0aGF0IHRoZSByZWZlcmVuY2VzIGFyZQorLS0gY29ycmVjdCAod2UgZG9uJ3QgZGlz cGxheSB0aGUgaGFzaGtleXMgdGhlbXNlbHZlcyksIGJ1dCBpZiB0aGUKKy0tIGhhc2hrZXlzIGNv bnRhaW4gc3VicGxhbiByZWZlcmVuY2VzLCB0aG9zZSB3aWxsIGJlIGRpc3BsYXllZC4gRm9yY2UK Ky0tIHN1YnBsYW5zIHRvIGFwcGVhciBqdXN0IGFib3V0IGV2ZXJ5d2hlcmUuCistLQorLS0gQnVn IHJlcG9ydDoKKy0tIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FQcEhm ZHZHVmVnRl9US0tSaUJyU21hdEpMMmRSOXV3RkN1UiUyQnRlUV84dEVYVThteGclNDBtYWlsLmdt YWlsLmNvbQorLS0KK0JFR0lOOworU0VUIExPQ0FMIGVuYWJsZV9zb3J0ID0gT0ZGOyAtLSBhdm9p ZCBtZXJnZWpvaW5zCitTRVQgTE9DQUwgZnJvbV9jb2xsYXBzZV9saW1pdCA9IDE7IC0tIGFsbG93 cyBlYXN5IGNoYW5naW5nIG9mIGpvaW4gb3JkZXIKKworQ1JFQVRFIFRBQkxFIGhqdGVzdF8xIChh IHRleHQsIGIgaW50LCBpZCBpbnQsIGMgYm9vbCk7CitDUkVBVEUgVEFCTEUgaGp0ZXN0XzIgKGEg Ym9vbCwgaWQgaW50LCBiIHRleHQsIGMgaW50KTsKKworSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwg YiwgaWQsIGMpIFZBTFVFUyAoJ3RleHQnLCAyLCAxLCBmYWxzZSk7IC0tIG1hdGNoZXMKK0lOU0VS VCBJTlRPIGhqdGVzdF8xKGEsIGIsIGlkLCBjKSBWQUxVRVMgKCd0ZXh0JywgMSwgMiwgZmFsc2Up OyAtLSBmYWlscyBpZCBqb2luIGNvbmRpdGlvbgorSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwg aWQsIGMpIFZBTFVFUyAoJ3RleHQnLCAyMCwgMSwgZmFsc2UpOyAtLSBmYWlscyA8IDUwCitJTlNF UlQgSU5UTyBoanRlc3RfMShhLCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDEsIDEsIGZhbHNl KTsgLS0gZmFpbHMgKFNFTEVDVCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMq NSkKKworSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwg J2Fub3RoZXInLCAyKTsgLS0gbWF0Y2hlcworSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIs IGMpIFZBTFVFUyAodHJ1ZSwgMywgJ2Fub3RoZXInLCA3KTsgLS0gZmFpbHMgaWQgam9pbiBjb25k aXRpb24KK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMgKHRydWUsIDEs ICdhbm90aGVyJywgOTApOyAgLS0gZmFpbHMgPCA1NQorSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwg aWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwgJ2Fub3RoZXInLCAzKTsgLS0gZmFpbHMgKFNFTEVD VCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKK0lOU0VSVCBJTlRPIGhq dGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMgKHRydWUsIDEsICd0ZXh0JywgMSk7IC0tICBmYWls cyBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9T RSkKK1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lk OjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVz dF8xLCBoanRlc3RfMgorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBo anRlc3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVD VCBoanRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAg ICBBTkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+ IGhqdGVzdF8yLmI7CisKK1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVz dF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQy CitGUk9NIGhqdGVzdF8xLCBoanRlc3RfMgorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxF Q1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAq IDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAq IDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBo anRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkK K1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpy ZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8y LCBoanRlc3RfMQorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRl c3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBo anRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBB TkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhq dGVzdF8yLmI7CisKK1NFTEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8x LnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitG Uk9NIGhqdGVzdF8yLCBoanRlc3RfMQorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1Qg MSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUp ID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUp IDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRl c3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK1JPTExCQUNLOworCistLSBWZXJpZnkgdGhhdCB3ZSBi ZWhhdmUgc2FuZWx5IHdoZW4gdGhlIGlubmVyIGhhc2gga2V5cyBjb250YWluIHBhcmFtZXRlcnMK Ky0tICh0aGF0IGlzLCBvdXRlciBvciBsYXRlcmFsIHJlZmVyZW5jZXMpLiAgVGhpcyBzaXR1YXRp b24gaGFzIHRvIGRlZmVhdAorLS0gcmUtdXNlIG9mIHRoZSBpbm5lciBoYXNoIHRhYmxlIGFjcm9z cyByZXNjYW5zLgorYmVnaW47CitzZXQgbG9jYWwgZW5hYmxlX2hhc2hqb2luID0gb247CisKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBpOC5xMiwgc3MuKiBmcm9tCitpbnQ4X3RibCBpOCwK K2xhdGVyYWwgKHNlbGVjdCB0MS5maXZldGhvdXMsIGk0LmYxIGZyb20gdGVuazEgdDEgam9pbiBp bnQ0X3RibCBpNAorICAgICAgICAgb24gdDEuZml2ZXRob3VzID0gaTQuZjEraTgucTIgb3JkZXIg YnkgMSwyKSBzczsKKworc2VsZWN0IGk4LnEyLCBzcy4qIGZyb20KK2ludDhfdGJsIGk4LAorbGF0 ZXJhbCAoc2VsZWN0IHQxLmZpdmV0aG91cywgaTQuZjEgZnJvbSB0ZW5rMSB0MSBqb2luIGludDRf dGJsIGk0CisgICAgICAgICBvbiB0MS5maXZldGhvdXMgPSBpNC5mMStpOC5xMiBvcmRlciBieSAx LDIpIHNzOworCityb2xsYmFjazsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pv aW5faGFzaF9wZ2x6LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW5faGFzaF9wZ2x6LnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjY4NmFmYWIyNzIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luX2hhc2hfcGdsei5zcWwK QEAgLTAsMCArMSw2MjYgQEAKKy0tCistLSBleGVyY2lzZXMgZm9yIHRoZSBoYXNoIGpvaW4gY29k ZQorLS0KKworYmVnaW47CisKK3NldCBsb2NhbCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXpl ID0gMDsKK3NldCBsb2NhbCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK3NldCBsb2NhbCBlbmFi bGVfaGFzaGpvaW4gPSBvbjsKK3NldCBsb2NhbCB0ZW1wX2ZpbGVfY29tcHJlc3Npb24gPSAncGds eic7CisKKy0tIEV4dHJhY3QgYnVja2V0IGFuZCBiYXRjaCBjb3VudHMgZnJvbSBhbiBleHBsYWlu IGFuYWx5emUgcGxhbi4gIEluCistLSBnZW5lcmFsIHdlIGNhbid0IG1ha2UgYXNzZXJ0aW9ucyBh Ym91dCBob3cgbWFueSBiYXRjaGVzIChvcgorLS0gYnVja2V0cykgd2lsbCBiZSByZXF1aXJlZCBi ZWNhdXNlIGl0IGNhbiB2YXJ5LCBidXQgd2UgY2FuIGluIHNvbWUKKy0tIHNwZWNpYWwgY2FzZXMg YW5kIHdlIGNhbiBjaGVjayBmb3IgZ3Jvd3RoLgorY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24g ZmluZF9oYXNoKG5vZGUganNvbikKK3JldHVybnMganNvbiBsYW5ndWFnZSBwbHBnc3FsCithcwor JCQKK2RlY2xhcmUKKyAgeCBqc29uOworICBjaGlsZCBqc29uOworYmVnaW4KKyAgaWYgbm9kZS0+ PidOb2RlIFR5cGUnID0gJ0hhc2gnIHRoZW4KKyAgICByZXR1cm4gbm9kZTsKKyAgZWxzZQorICAg IGZvciBjaGlsZCBpbiBzZWxlY3QganNvbl9hcnJheV9lbGVtZW50cyhub2RlLT4nUGxhbnMnKQor ICAgIGxvb3AKKyAgICAgIHggOj0gZmluZF9oYXNoKGNoaWxkKTsKKyAgICAgIGlmIHggaXMgbm90 IG51bGwgdGhlbgorICAgICAgICByZXR1cm4geDsKKyAgICAgIGVuZCBpZjsKKyAgICBlbmQgbG9v cDsKKyAgICByZXR1cm4gbnVsbDsKKyAgZW5kIGlmOworZW5kOworJCQ7CitjcmVhdGUgb3IgcmVw bGFjZSBmdW5jdGlvbiBoYXNoX2pvaW5fYmF0Y2hlcyhxdWVyeSB0ZXh0KQorcmV0dXJucyB0YWJs ZSAob3JpZ2luYWwgaW50LCBmaW5hbCBpbnQpIGxhbmd1YWdlIHBscGdzcWwKK2FzCiskJAorZGVj bGFyZQorICB3aG9sZV9wbGFuIGpzb247CisgIGhhc2hfbm9kZSBqc29uOworYmVnaW4KKyAgZm9y IHdob2xlX3BsYW4gaW4KKyAgICBleGVjdXRlICdleHBsYWluIChhbmFseXplLCBmb3JtYXQgJydq c29uJycpICcgfHwgcXVlcnkKKyAgbG9vcAorICAgIGhhc2hfbm9kZSA6PSBmaW5kX2hhc2goanNv bl9leHRyYWN0X3BhdGgod2hvbGVfcGxhbiwgJzAnLCAnUGxhbicpKTsKKyAgICBvcmlnaW5hbCA6 PSBoYXNoX25vZGUtPj4nT3JpZ2luYWwgSGFzaCBCYXRjaGVzJzsKKyAgICBmaW5hbCA6PSBoYXNo X25vZGUtPj4nSGFzaCBCYXRjaGVzJzsKKyAgICByZXR1cm4gbmV4dDsKKyAgZW5kIGxvb3A7Citl bmQ7CiskJDsKKworLS0gTWFrZSBhIHNpbXBsZSByZWxhdGlvbiB3aXRoIHdlbGwgZGlzdHJpYnV0 ZWQga2V5cyBhbmQgY29ycmVjdGx5CistLSBlc3RpbWF0ZWQgc2l6ZS4KK2NyZWF0ZSB0YWJsZSBz aW1wbGUgYXMKKyAgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgQVMgaWQsICdhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJzsKK2FsdGVyIHRhYmxlIHNpbXBsZSBzZXQg KHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsKK2FuYWx5emUgc2ltcGxlOworCistLSBNYWtlIGEgcmVs YXRpb24gd2hvc2Ugc2l6ZSB3ZSB3aWxsIHVuZGVyLWVzdGltYXRlLiAgV2Ugd2FudCBzdGF0cwor LS0gdG8gc2F5IDEwMDAgcm93cywgYnV0IGFjdHVhbGx5IHRoZXJlIGFyZSAyMCwwMDAgcm93cy4K K2NyZWF0ZSB0YWJsZSBiaWdnZXJfdGhhbl9pdF9sb29rcyBhcworICBzZWxlY3QgZ2VuZXJhdGVf c2VyaWVzKDEsIDIwMDAwKSBhcyBpZCwgJ2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWEnOworYWx0ZXIgdGFibGUgYmlnZ2VyX3RoYW5faXRfbG9va3Mgc2V0IChhdXRvdmFjdXVtX2Vu YWJsZWQgPSAnZmFsc2UnKTsKK2FsdGVyIHRhYmxlIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHNldCAo cGFyYWxsZWxfd29ya2VycyA9IDIpOworYW5hbHl6ZSBiaWdnZXJfdGhhbl9pdF9sb29rczsKK3Vw ZGF0ZSBwZ19jbGFzcyBzZXQgcmVsdHVwbGVzID0gMTAwMCB3aGVyZSByZWxuYW1lID0gJ2JpZ2dl cl90aGFuX2l0X2xvb2tzJzsKKworLS0gTWFrZSBhIHJlbGF0aW9uIHdob3NlIHNpemUgd2UgdW5k ZXJlc3RpbWF0ZSBhbmQgdGhhdCBhbHNvIGhhcyBhCistLSBraW5kIG9mIHNrZXcgdGhhdCBicmVh a3Mgb3VyIGJhdGNoaW5nIHNjaGVtZS4gIFdlIHdhbnQgc3RhdHMgdG8gc2F5CistLSAyIHJvd3Ms IGJ1dCBhY3R1YWxseSB0aGVyZSBhcmUgMjAsMDAwIHJvd3Mgd2l0aCB0aGUgc2FtZSBrZXkuCitj cmVhdGUgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCAoaWQgaW50LCB0IHRleHQpOworYWx0ZXIgdGFi bGUgZXh0cmVtZWx5X3NrZXdlZCBzZXQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOwor YWx0ZXIgdGFibGUgZXh0cmVtZWx5X3NrZXdlZCBzZXQgKHBhcmFsbGVsX3dvcmtlcnMgPSAyKTsK K2FuYWx5emUgZXh0cmVtZWx5X3NrZXdlZDsKK2luc2VydCBpbnRvIGV4dHJlbWVseV9za2V3ZWQK KyAgc2VsZWN0IDQyIGFzIGlkLCAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYScK KyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApOwordXBkYXRlIHBnX2NsYXNzCisgIHNl dCByZWx0dXBsZXMgPSAyLCByZWxwYWdlcyA9IHBnX3JlbGF0aW9uX3NpemUoJ2V4dHJlbWVseV9z a2V3ZWQnKSAvIDgxOTIKKyAgd2hlcmUgcmVsbmFtZSA9ICdleHRyZW1lbHlfc2tld2VkJzsKKwor LS0gTWFrZSBhIHJlbGF0aW9uIHdpdGggYSBjb3VwbGUgb2YgZW5vcm1vdXMgdHVwbGVzLgorY3Jl YXRlIHRhYmxlIHdpZGUgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAyKSBhcyBpZCwgcnBh ZCgnJywgMzIwMDAwLCAneCcpIGFzIHQ7CithbHRlciB0YWJsZSB3aWRlIHNldCAocGFyYWxsZWxf d29ya2VycyA9IDIpOworCistLSBUaGUgIm9wdGltYWwiIGNhc2U6IHRoZSBoYXNoIHRhYmxlIGZp dHMgaW4gbWVtb3J5OyB3ZSBwbGFuIGZvciAxCistLSBiYXRjaCwgd2Ugc3RpY2sgdG8gdGhhdCBu dW1iZXIsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRoaW4KKy0tIG91ciB3b3JrX21l bSBidWRnZXQKKworLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9j YWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQgbG9jYWwgd29ya19t ZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFp biAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBs ZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBs ZSBzIHVzaW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJh dGNoLCBmaW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9q b2luX2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNp bXBsZSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFy YWxsZWwgd2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGlu Z3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQg bG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0g MS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworZXhwbGFpbiAoY29z dHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVz aW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVz aW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBm aW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2Jh dGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBz IHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwg d2l0aCBwYXJhbGxlbC1hd2FyZSBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBs b2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3b3Jr X21lbSA9ICc0TUInOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQg bG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAg c2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOwor c2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOwor c2VsZWN0IG9yaWdpbmFsID4gMSBhcyBpbml0aWFsbHlfbXVsdGliYXRjaCwgZmluYWwgPiBvcmln aW5hbCBhcyBpbmNyZWFzZWRfYmF0Y2hlcworICBmcm9tIGhhc2hfam9pbl9iYXRjaGVzKAorJCQK KyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQp OworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIFRoZSAiZ29vZCIgY2FzZTogYmF0 Y2hlcyByZXF1aXJlZCwgYnV0IHdlIHBsYW4gdGhlIHJpZ2h0IG51bWJlcjsgd2UKKy0tIHBsYW4g Zm9yIHNvbWUgbnVtYmVyIG9mIGJhdGNoZXMsIGFuZCB3ZSBzdGljayB0byB0aGF0IG51bWJlciwg YW5kCistLSBwZWFrIG1lbW9yeSB1c2FnZSBzYXlzIHdpdGhpbiBvdXIgd29ya19tZW0gYnVkZ2V0 CisKKy0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEy OGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29z dHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVz aW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBzIHVz aW5nIChpZCk7CitzZWxlY3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBm aW5hbCA+IG9yaWdpbmFsIGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2Jh dGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIHNpbXBsZSBz IHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWwg d2l0aCBwYXJhbGxlbC1vYmxpdmlvdXMgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7Citz ZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQgbG9jYWwg d29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7 CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvZmY7CitleHBsYWluIChjb3N0cyBv ZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcg KGlkKTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcg KGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFs ID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hl cygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNp bmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3aXRo IHBhcmFsbGVsLWF3YXJlIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2Fs IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGxvY2FsIHdvcmtfbWVt ID0gJzE5MmtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworc2V0IGxv Y2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3Nl bGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKK3Nl bGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2lu YWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisg IHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsK KyQkKTsKKy0tIHBhcmFsbGVsIGZ1bGwgbXVsdGktYmF0Y2ggaGFzaCBqb2luCitzZWxlY3QgY291 bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsK K3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBUaGUgImJhZCIgY2FzZTogZHVyaW5nIGV4ZWN1 dGlvbiB3ZSBuZWVkIHRvIGluY3JlYXNlIG51bWJlciBvZgorLS0gYmF0Y2hlczsgaW4gdGhpcyBj YXNlIHdlIHBsYW4gZm9yIDEgYmF0Y2gsIGFuZCBpbmNyZWFzZSBhdCBsZWFzdCBhCistLSBjb3Vw bGUgb2YgdGltZXMsIGFuZCBwZWFrIG1lbW9yeSB1c2FnZSBzdGF5cyB3aXRoaW4gb3VyIHdvcmtf bWVtCistLSBidWRnZXQKKworLS0gbm9uLXBhcmFsbGVsCitzYXZlcG9pbnQgc2V0dGluZ3M7Citz ZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitzZXQgbG9jYWwg d29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7 CitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBGUk9NIHNpbXBsZSByIEpP SU4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyBVU0lORyAoaWQpOworc2VsZWN0IGNvdW50KCopIEZS T00gc2ltcGxlIHIgSk9JTiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIFVTSU5HIChpZCk7CitzZWxl Y3Qgb3JpZ2luYWwgPiAxIGFzIGluaXRpYWxseV9tdWx0aWJhdGNoLCBmaW5hbCA+IG9yaWdpbmFs IGFzIGluY3JlYXNlZF9iYXRjaGVzCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBz ZWxlY3QgY291bnQoKikgRlJPTSBzaW1wbGUgciBKT0lOIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMg VVNJTkcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBwYXJhbGxlbCB3 aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBoYXNoIGpvaW4KK3NhdmVwb2ludCBzZXR0aW5nczsKK3Nl dCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK3NldCBsb2NhbCB3 b3JrX21lbSA9ICcxMjhrQic7CitzZXQgbG9jYWwgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsK K3NldCBsb2NhbCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9mZjsKK2V4cGxhaW4gKGNvc3RzIG9m ZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9s b29rcyBzIHVzaW5nIChpZCk7CitzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJp Z2dlcl90aGFuX2l0X2xvb2tzIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMg aW5pdGlhbGx5X211bHRpYmF0Y2gsIGZpbmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNo ZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9t IHNpbXBsZSByIGpvaW4gYmlnZ2VyX3RoYW5faXRfbG9va3MgcyB1c2luZyAoaWQpOworJCQpOwor cm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUg aGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDE7CitzZXQgbG9jYWwgd29ya19tZW0gPSAnMTkya0InOworc2V0 IGxvY2FsIGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFs bGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZy b20gc2ltcGxlIHIgam9pbiBiaWdnZXJfdGhhbl9pdF9sb29rcyBzIHVzaW5nIChpZCk7CitzZWxl Y3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGJpZ2dlcl90aGFuX2l0X2xvb2tzIHMgdXNp bmcgKGlkKTsKK3NlbGVjdCBvcmlnaW5hbCA+IDEgYXMgaW5pdGlhbGx5X211bHRpYmF0Y2gsIGZp bmFsID4gb3JpZ2luYWwgYXMgaW5jcmVhc2VkX2JhdGNoZXMKKyAgZnJvbSBoYXNoX2pvaW5fYmF0 Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpvaW4gYmlnZ2VyX3Ro YW5faXRfbG9va3MgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisK Ky0tIFRoZSAidWdseSIgY2FzZTogaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgZHVy aW5nIGV4ZWN1dGlvbgorLS0gZG9lc24ndCBoZWxwLCBzbyBzdG9wIHRyeWluZyB0byBmaXQgaW4g d29ya19tZW0gYW5kIGhvcGUgZm9yIHRoZQorLS0gYmVzdDsgaW4gdGhpcyBjYXNlIHdlIHBsYW4g Zm9yIDEgYmF0Y2gsIGluY3JlYXNlcyBqdXN0IG9uY2UgYW5kCistLSB0aGVuIHN0b3AgaW5jcmVh c2luZyBiZWNhdXNlIHRoYXQgZGlkbid0IGhlbHAgYXQgYWxsLCBzbyB3ZSBibG93CistLSByaWdo dCB0aHJvdWdoIHRoZSB3b3JrX21lbSBidWRnZXQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0Li4uCisK Ky0tIG5vbi1wYXJhbGxlbAorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworc2V0IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtC JzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFpbiAoY29zdHMg b2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9za2V3 ZWQgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRy ZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCAqIGZyb20gaGFzaF9qb2luX2JhdGNo ZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVseV9z a2V3ZWQgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBh cmFsbGVsIHdpdGggcGFyYWxsZWwtb2JsaXZpb3VzIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRp bmdzOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0 IGxvY2FsIHdvcmtfbWVtID0gJzEyOGtCJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVy ID0gMS4wOworc2V0IGxvY2FsIGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworZXhwbGFpbiAo Y29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJlbWVs eV9za2V3ZWQgcyB1c2luZyAoaWQpOworc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9p biBleHRyZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCAqIGZyb20gaGFzaF9qb2lu X2JhdGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBzaW1wbGUgciBqb2luIGV4dHJl bWVseV9za2V3ZWQgcyB1c2luZyAoaWQpOworJCQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisK Ky0tIHBhcmFsbGVsIHdpdGggcGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0 dGluZ3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7Citz ZXQgbG9jYWwgd29ya19tZW0gPSAnMTI4a0InOworc2V0IGxvY2FsIGhhc2hfbWVtX211bHRpcGxp ZXIgPSAxLjA7CitzZXQgbG9jYWwgZW5hYmxlX3BhcmFsbGVsX2hhc2ggPSBvbjsKK2V4cGxhaW4g KGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRyZW1l bHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGpv aW4gZXh0cmVtZWx5X3NrZXdlZCBzIHVzaW5nIChpZCk7CitzZWxlY3QgKiBmcm9tIGhhc2hfam9p bl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gc2ltcGxlIHIgam9pbiBleHRy ZW1lbHlfc2tld2VkIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOwor CistLSBBIGNvdXBsZSBvZiBvdGhlciBoYXNoIGpvaW4gdGVzdHMgdW5yZWxhdGVkIHRvIHdvcmtf bWVtIG1hbmFnZW1lbnQuCisKKy0tIENoZWNrIHRoYXQgRVhQTEFJTiBBTkFMWVpFIGhhcyBkYXRh IGV2ZW4gaWYgdGhlIGxlYWRlciBkb2Vzbid0IHBhcnRpY2lwYXRlCitzYXZlcG9pbnQgc2V0dGlu Z3M7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CitzZXQg bG9jYWwgd29ya19tZW0gPSAnNE1CJzsKK3NldCBsb2NhbCBoYXNoX21lbV9tdWx0aXBsaWVyID0g MS4wOworc2V0IGxvY2FsIHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0gb2ZmOworc2Vs ZWN0ICogZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9t IHNpbXBsZSByIGpvaW4gc2ltcGxlIHMgdXNpbmcgKGlkKTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNl dHRpbmdzOworCistLSBFeGVyY2lzZSByZXNjYW5zLiAgV2UnbGwgdHVybiBvZmYgcGFyYWxsZWxf bGVhZGVyX3BhcnRpY2lwYXRpb24gc28KKy0tIHRoYXQgd2UgY2FuIGNoZWNrIHRoYXQgaW5zdHJ1 bWVudGF0aW9uIGNvbWVzIGJhY2sgY29ycmVjdGx5LgorCitjcmVhdGUgdGFibGUgam9pbl9mb28g YXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAzKSBhcyBpZCwgJ3h4eHh4Jzo6dGV4dCBhcyB0 OworYWx0ZXIgdGFibGUgam9pbl9mb28gc2V0IChwYXJhbGxlbF93b3JrZXJzID0gMCk7CitjcmVh dGUgdGFibGUgam9pbl9iYXIgYXMgc2VsZWN0IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgYXMg aWQsICd4eHh4eCc6OnRleHQgYXMgdDsKK2FsdGVyIHRhYmxlIGpvaW5fYmFyIHNldCAocGFyYWxs ZWxfd29ya2VycyA9IDIpOworCistLSBtdWx0aS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwt b2JsaXZpb3VzCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFsbGVsX2hhc2gg PSBvZmY7CitzZXQgcGFyYWxsZWxfbGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWlu X3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9 IDA7CitzZXQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDI7CitzZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJs ZV9tZXJnZWpvaW4gPSBvZmY7CitzZXQgd29ya19tZW0gPSAnNjRrQic7CitzZXQgaGFzaF9tZW1f bXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0IGNvdW50KCop IGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpv aW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zv by5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgY291 bnQoKikgZnJvbSBqb2luX2ZvbworICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9t IGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgb24gam9pbl9m b28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworc2VsZWN0IGZp bmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2luX2JhdGNoZXMoCiskJAorICBz ZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9pbiAoc2VsZWN0IGIxLmlk LCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1c2luZyAoaWQpKSBzcwor ICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5pZCA+IHNzLmlkIC0g MTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBzaW5nbGUtYmF0Y2ggd2l0aCBy ZXNjYW4sIHBhcmFsbGVsLW9ibGl2aW91cworc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJs ZV9wYXJhbGxlbF9oYXNoID0gb2ZmOworc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9u ID0gb2ZmOworc2V0IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOworc2V0IHBhcmFs bGVsX3NldHVwX2Nvc3QgPSAwOworc2V0IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworc2V0IG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGVuYWJsZV9tYXRlcmlhbCA9 IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IHdvcmtfbWVtID0gJzRNQic7 CitzZXQgaGFzaF9tZW1fbXVsdGlwbGllciA9IDEuMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAg c2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5p ZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MK KyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQgam9pbl9mb28uaWQgPiBzcy5pZCAt IDE7CitzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICBsZWZ0IGpvaW4gKHNlbGVjdCBi MS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9pbl9iYXIgYjIgdXNpbmcgKGlkKSkg c3MKKyAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQg LSAxOworc2VsZWN0IGZpbmFsID4gMSBhcyBtdWx0aWJhdGNoCisgIGZyb20gaGFzaF9qb2luX2Jh dGNoZXMoCiskJAorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxlZnQgam9p biAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2JhciBiMiB1 c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zv by5pZCA+IHNzLmlkIC0gMTsKKyQkKTsKK3JvbGxiYWNrIHRvIHNldHRpbmdzOworCistLSBtdWx0 aS1iYXRjaCB3aXRoIHJlc2NhbiwgcGFyYWxsZWwtYXdhcmUKK3NhdmVwb2ludCBzZXR0aW5nczsK K3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0 aWNpcGF0aW9uID0gb2ZmOworc2V0IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOwor c2V0IHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworc2V0IHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAw Oworc2V0IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworc2V0IGVuYWJsZV9t YXRlcmlhbCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IHdvcmtfbWVt ID0gJzY0a0InOworc2V0IGhhc2hfbWVtX211bHRpcGxpZXIgPSAxLjA7CitleHBsYWluIChjb3N0 cyBvZmYpCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisgICAgbGVmdCBqb2luIChz ZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVzaW5n IChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBzcy5pZCArIDEgYW5kIGpvaW5fZm9vLmlk ID4gc3MuaWQgLSAxOworc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAgbGVmdCBqb2lu IChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBiMSBqb2luIGpvaW5fYmFyIGIyIHVz aW5nIChpZCkpIHNzCisgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBqb2luX2Zvby5p ZCA+IHNzLmlkIC0gMTsKK3NlbGVjdCBmaW5hbCA+IDEgYXMgbXVsdGliYXRjaAorICBmcm9tIGhh c2hfam9pbl9iYXRjaGVzKAorJCQKKyAgc2VsZWN0IGNvdW50KCopIGZyb20gam9pbl9mb28KKyAg ICBsZWZ0IGpvaW4gKHNlbGVjdCBiMS5pZCwgYjEudCBmcm9tIGpvaW5fYmFyIGIxIGpvaW4gam9p bl9iYXIgYjIgdXNpbmcgKGlkKSkgc3MKKyAgICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBh bmQgam9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsK KworLS0gc2luZ2xlLWJhdGNoIHdpdGggcmVzY2FuLCBwYXJhbGxlbC1hd2FyZQorc2F2ZXBvaW50 IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNoID0gb247CitzZXQgcGFyYWxsZWxf bGVhZGVyX3BhcnRpY2lwYXRpb24gPSBvZmY7CitzZXQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5f c2l6ZSA9IDA7CitzZXQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitzZXQgcGFyYWxsZWxfdHVw bGVfY29zdCA9IDA7CitzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7Citz ZXQgZW5hYmxlX21hdGVyaWFsID0gb2ZmOworc2V0IGVuYWJsZV9tZXJnZWpvaW4gPSBvZmY7Citz ZXQgd29ya19tZW0gPSAnNE1CJzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhw bGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgY291bnQoKikgZnJvbSBqb2luX2ZvbworICAgIGxl ZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2luX2Jh ciBiMiB1c2luZyAoaWQpKSBzcworICAgIG9uIGpvaW5fZm9vLmlkIDwgc3MuaWQgKyAxIGFuZCBq b2luX2Zvby5pZCA+IHNzLmlkIC0gMTsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGpvaW5fZm9vCisg IGxlZnQgam9pbiAoc2VsZWN0IGIxLmlkLCBiMS50IGZyb20gam9pbl9iYXIgYjEgam9pbiBqb2lu X2JhciBiMiB1c2luZyAoaWQpKSBzcworICBvbiBqb2luX2Zvby5pZCA8IHNzLmlkICsgMSBhbmQg am9pbl9mb28uaWQgPiBzcy5pZCAtIDE7CitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gK KyAgZnJvbSBoYXNoX2pvaW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBjb3VudCgqKSBmcm9tIGpv aW5fZm9vCisgICAgbGVmdCBqb2luIChzZWxlY3QgYjEuaWQsIGIxLnQgZnJvbSBqb2luX2JhciBi MSBqb2luIGpvaW5fYmFyIGIyIHVzaW5nIChpZCkpIHNzCisgICAgb24gam9pbl9mb28uaWQgPCBz cy5pZCArIDEgYW5kIGpvaW5fZm9vLmlkID4gc3MuaWQgLSAxOworJCQpOworcm9sbGJhY2sgdG8g c2V0dGluZ3M7CisKKy0tIEEgZnVsbCBvdXRlciBqb2luIHdoZXJlIGV2ZXJ5IHJlY29yZCBpcyBt YXRjaGVkLgorCistLSBub24tcGFyYWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2Nh bCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9m ZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBz aW1wbGUgcyB1c2luZyAoaWQpOworc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwg b3V0ZXIgam9pbiBzaW1wbGUgcyB1c2luZyAoaWQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisK Ky0tIHBhcmFsbGVsaXNtIG5vdCBwb3NzaWJsZSB3aXRoIHBhcmFsbGVsLW9ibGl2aW91cyBmdWxs IGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGVuYWJsZV9wYXJhbGxlbF9oYXNo ID0gb2ZmOworc2V0IGxvY2FsIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIg ZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgIGNvdW50KCopIGZy b20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Cityb2xsYmFj ayB0byBzZXR0aW5nczsKKworLS0gcGFyYWxsZWxpc20gaXMgcG9zc2libGUgd2l0aCBwYXJhbGxl bC1hd2FyZSBmdWxsIGhhc2ggam9pbgorc2F2ZXBvaW50IHNldHRpbmdzOworc2V0IGxvY2FsIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICAgICBzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBs ZSBzIHVzaW5nIChpZCk7CitzZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRl ciBqb2luIHNpbXBsZSBzIHVzaW5nIChpZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworLS0g QSBmdWxsIG91dGVyIGpvaW4gd2hlcmUgZXZlcnkgcmVjb3JkIGlzIG5vdCBtYXRjaGVkLgorCist LSBub24tcGFyYWxsZWwKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2Vs ZWN0ICBjb3VudCgqKSBmcm9tIHNpbXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAo ci5pZCA9IDAgLSBzLmlkKTsKK3NlbGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91 dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7Cityb2xsYmFjayB0byBzZXR0 aW5nczsKKworLS0gcGFyYWxsZWxpc20gbm90IHBvc3NpYmxlIHdpdGggcGFyYWxsZWwtb2JsaXZp b3VzIGZ1bGwgaGFzaCBqb2luCitzYXZlcG9pbnQgc2V0dGluZ3M7CitzZXQgZW5hYmxlX3BhcmFs bGVsX2hhc2ggPSBvZmY7CitzZXQgbG9jYWwgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhl ciA9IDI7CitleHBsYWluIChjb3N0cyBvZmYpCisgICAgIHNlbGVjdCAgY291bnQoKikgZnJvbSBz aW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24gKHIuaWQgPSAwIC0gcy5pZCk7Citz ZWxlY3QgIGNvdW50KCopIGZyb20gc2ltcGxlIHIgZnVsbCBvdXRlciBqb2luIHNpbXBsZSBzIG9u IChyLmlkID0gMCAtIHMuaWQpOworcm9sbGJhY2sgdG8gc2V0dGluZ3M7CisKKy0tIHBhcmFsbGVs aXNtIGlzIHBvc3NpYmxlIHdpdGggcGFyYWxsZWwtYXdhcmUgZnVsbCBoYXNoIGpvaW4KK3NhdmVw b2ludCBzZXR0aW5nczsKK3NldCBsb2NhbCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMjsKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgICAgc2VsZWN0ICBjb3VudCgqKSBmcm9tIHNp bXBsZSByIGZ1bGwgb3V0ZXIgam9pbiBzaW1wbGUgcyBvbiAoci5pZCA9IDAgLSBzLmlkKTsKK3Nl bGVjdCAgY291bnQoKikgZnJvbSBzaW1wbGUgciBmdWxsIG91dGVyIGpvaW4gc2ltcGxlIHMgb24g KHIuaWQgPSAwIC0gcy5pZCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworCistLSBleGVyY2lz ZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIGh1Z2UgdHVwbGVzIChub3RlIHVzZSBvZiBub24tc3Ry aWN0CistLSBleHByZXNzaW9uIGFuZCBsZWZ0IGpvaW4gcmVxdWlyZWQgdG8gZ2V0IHRoZSBkZXRv YXN0ZWQgdHVwbGUgaW50bworLS0gdGhlIGhhc2ggdGFibGUpCisKKy0tIHBhcmFsbGVsIHdpdGgg cGFyYWxsZWwtYXdhcmUgaGFzaCBqb2luIChoaXRzIEV4ZWNQYXJhbGxlbEhhc2hMb2FkVHVwbGUg YW5kCistLSBzdHNfcHV0dHVwbGUgb3ZlcnNpemVkIHR1cGxlIGNhc2VzIGJlY2F1c2UgaXQncyBt dWx0aS1iYXRjaCkKK3NhdmVwb2ludCBzZXR0aW5nczsKK3NldCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMjsKK3NldCBlbmFibGVfcGFyYWxsZWxfaGFzaCA9IG9uOworc2V0IHdv cmtfbWVtID0gJzEyOGtCJzsKK3NldCBoYXNoX21lbV9tdWx0aXBsaWVyID0gMS4wOworZXhwbGFp biAoY29zdHMgb2ZmKQorICBzZWxlY3QgbGVuZ3RoKG1heChzLnQpKQorICBmcm9tIHdpZGUgbGVm dCBqb2luIChzZWxlY3QgaWQsIGNvYWxlc2NlKHQsICcnKSB8fCAnJyBhcyB0IGZyb20gd2lkZSkg cyB1c2luZyAoaWQpOworc2VsZWN0IGxlbmd0aChtYXgocy50KSkKK2Zyb20gd2lkZSBsZWZ0IGpv aW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRlKSBzIHVz aW5nIChpZCk7CitzZWxlY3QgZmluYWwgPiAxIGFzIG11bHRpYmF0Y2gKKyAgZnJvbSBoYXNoX2pv aW5fYmF0Y2hlcygKKyQkCisgIHNlbGVjdCBsZW5ndGgobWF4KHMudCkpCisgIGZyb20gd2lkZSBs ZWZ0IGpvaW4gKHNlbGVjdCBpZCwgY29hbGVzY2UodCwgJycpIHx8ICcnIGFzIHQgZnJvbSB3aWRl KSBzIHVzaW5nIChpZCk7CiskJCk7Cityb2xsYmFjayB0byBzZXR0aW5nczsKKworCistLSBIYXNo IGpvaW4gcmV1c2VzIHRoZSBIT1Qgc3RhdHVzIGJpdCB0byBpbmRpY2F0ZSBtYXRjaCBzdGF0dXMu IFRoaXMgY2FuIG9ubHkKKy0tIGJlIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBjb3JyZWN0IHJlc3Vs dHMgaWYgYWxsIHRoZSBoYXNoIGpvaW4gdHVwbGUgbWF0Y2gKKy0tIGJpdHMgYXJlIHJlc2V0IGJl Zm9yZSByZXVzZS4gVGhpcyBpcyBkb25lIHVwb24gbG9hZGluZyB0aGVtIGludG8gdGhlCistLSBo YXNodGFibGUuCitTQVZFUE9JTlQgc2V0dGluZ3M7CitTRVQgZW5hYmxlX3BhcmFsbGVsX2hhc2gg PSBvbjsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBwYXJhbGxl bF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBU QUJMRSBoanRlc3RfbWF0Y2hiaXRzX3QxKGlkIGludCk7CitDUkVBVEUgVEFCTEUgaGp0ZXN0X21h dGNoYml0c190MihpZCBpbnQpOworSU5TRVJUIElOVE8gaGp0ZXN0X21hdGNoYml0c190MSBWQUxV RVMgKDEpOworSU5TRVJUIElOVE8gaGp0ZXN0X21hdGNoYml0c190MiBWQUxVRVMgKDIpOworLS0g VXBkYXRlIHNob3VsZCBjcmVhdGUgYSBIT1QgdHVwbGUuIElmIHRoaXMgc3RhdHVzIGJpdCBpc24n dCBjbGVhcmVkLCB3ZSB3b24ndAorLS0gY29ycmVjdGx5IGVtaXQgdGhlIE5VTEwtZXh0ZW5kZWQg dW5tYXRjaGluZyB0dXBsZSBpbiBmdWxsIGhhc2ggam9pbi4KK1VQREFURSBoanRlc3RfbWF0Y2hi aXRzX3QyIHNldCBpZCA9IDI7CitTRUxFQ1QgKiBGUk9NIGhqdGVzdF9tYXRjaGJpdHNfdDEgdDEg RlVMTCBKT0lOIGhqdGVzdF9tYXRjaGJpdHNfdDIgdDIgT04gdDEuaWQgPSB0Mi5pZAorICBPUkRF UiBCWSB0MS5pZDsKKy0tIFRlc3Qgc2VyaWFsIGZ1bGwgaGFzaCBqb2luLgorLS0gUmVzZXR0aW5n IHBhcmFsbGVsX3NldHVwX2Nvc3Qgc2hvdWxkIGZvcmNlIGEgc2VyaWFsIHBsYW4uCistLSBKdXN0 IHRvIGJlIHNhZmUsIGhvd2V2ZXIsIHNldCBlbmFibGVfcGFyYWxsZWxfaGFzaCB0byBvZmYsIGFz IHBhcmFsbGVsIGZ1bGwKKy0tIGhhc2ggam9pbnMgYXJlIG9ubHkgc3VwcG9ydGVkIHdpdGggc2hh cmVkIGhhc2h0YWJsZXMuCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9jb3N0OworU0VUIGVuYWJsZV9w YXJhbGxlbF9oYXNoID0gb2ZmOworU0VMRUNUICogRlJPTSBoanRlc3RfbWF0Y2hiaXRzX3QxIHQx IEZVTEwgSk9JTiBoanRlc3RfbWF0Y2hiaXRzX3QyIHQyIE9OIHQxLmlkID0gdDIuaWQ7CitST0xM QkFDSyBUTyBzZXR0aW5nczsKKworcm9sbGJhY2s7CisKKy0tIFZlcmlmeSB0aGF0IGhhc2gga2V5 IGV4cHJlc3Npb25zIHJlZmVyZW5jZSB0aGUgY29ycmVjdAorLS0gbm9kZXMuIEhhc2hqb2luJ3Mg aGFzaGtleXMgbmVlZCB0byByZWZlcmVuY2UgaXRzIG91dGVyIHBsYW4sIEhhc2gncworLS0gbmVl ZCB0byByZWZlcmVuY2UgSGFzaCdzIG91dGVyIHBsYW4gKHdoaWNoIGlzIGJlbG93IEhhc2hKb2lu J3MKKy0tIGlubmVyIHBsYW4pLiBJdCdzIG5vdCB0cml2aWFsIHRvIHZlcmlmeSB0aGF0IHRoZSBy ZWZlcmVuY2VzIGFyZQorLS0gY29ycmVjdCAod2UgZG9uJ3QgZGlzcGxheSB0aGUgaGFzaGtleXMg dGhlbXNlbHZlcyksIGJ1dCBpZiB0aGUKKy0tIGhhc2hrZXlzIGNvbnRhaW4gc3VicGxhbiByZWZl cmVuY2VzLCB0aG9zZSB3aWxsIGJlIGRpc3BsYXllZC4gRm9yY2UKKy0tIHN1YnBsYW5zIHRvIGFw cGVhciBqdXN0IGFib3V0IGV2ZXJ5d2hlcmUuCistLQorLS0gQnVnIHJlcG9ydDoKKy0tIGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FQcEhmZHZHVmVnRl9US0tSaUJyU21h dEpMMmRSOXV3RkN1UiUyQnRlUV84dEVYVThteGclNDBtYWlsLmdtYWlsLmNvbQorLS0KK0JFR0lO OworU0VUIExPQ0FMIGVuYWJsZV9zb3J0ID0gT0ZGOyAtLSBhdm9pZCBtZXJnZWpvaW5zCitTRVQg TE9DQUwgZnJvbV9jb2xsYXBzZV9saW1pdCA9IDE7IC0tIGFsbG93cyBlYXN5IGNoYW5naW5nIG9m IGpvaW4gb3JkZXIKKworQ1JFQVRFIFRBQkxFIGhqdGVzdF8xIChhIHRleHQsIGIgaW50LCBpZCBp bnQsIGMgYm9vbCk7CitDUkVBVEUgVEFCTEUgaGp0ZXN0XzIgKGEgYm9vbCwgaWQgaW50LCBiIHRl eHQsIGMgaW50KTsKKworSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZBTFVFUyAo J3RleHQnLCAyLCAxLCBmYWxzZSk7IC0tIG1hdGNoZXMKK0lOU0VSVCBJTlRPIGhqdGVzdF8xKGEs IGIsIGlkLCBjKSBWQUxVRVMgKCd0ZXh0JywgMSwgMiwgZmFsc2UpOyAtLSBmYWlscyBpZCBqb2lu IGNvbmRpdGlvbgorSU5TRVJUIElOVE8gaGp0ZXN0XzEoYSwgYiwgaWQsIGMpIFZBTFVFUyAoJ3Rl eHQnLCAyMCwgMSwgZmFsc2UpOyAtLSBmYWlscyA8IDUwCitJTlNFUlQgSU5UTyBoanRlc3RfMShh LCBiLCBpZCwgYykgVkFMVUVTICgndGV4dCcsIDEsIDEsIGZhbHNlKTsgLS0gZmFpbHMgKFNFTEVD VCBoanRlc3RfMS5iICogNSkgPSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKKworSU5TRVJUIElOVE8g aGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwgMSwgJ2Fub3RoZXInLCAyKTsgLS0g bWF0Y2hlcworSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAodHJ1ZSwg MywgJ2Fub3RoZXInLCA3KTsgLS0gZmFpbHMgaWQgam9pbiBjb25kaXRpb24KK0lOU0VSVCBJTlRP IGhqdGVzdF8yKGEsIGlkLCBiLCBjKSBWQUxVRVMgKHRydWUsIDEsICdhbm90aGVyJywgOTApOyAg LS0gZmFpbHMgPCA1NQorSU5TRVJUIElOVE8gaGp0ZXN0XzIoYSwgaWQsIGIsIGMpIFZBTFVFUyAo dHJ1ZSwgMSwgJ2Fub3RoZXInLCAzKTsgLS0gZmFpbHMgKFNFTEVDVCBoanRlc3RfMS5iICogNSkg PSAoU0VMRUNUIGhqdGVzdF8yLmMqNSkKK0lOU0VSVCBJTlRPIGhqdGVzdF8yKGEsIGlkLCBiLCBj KSBWQUxVRVMgKHRydWUsIDEsICd0ZXh0JywgMSk7IC0tICBmYWlscyBoanRlc3RfMS5hIDw+IGhq dGVzdF8yLmI7CisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCBoanRlc3Rf MS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0 ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8xLCBoanRlc3RfMgorV0hF UkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisg ICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisg ICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRl c3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK1NF TEVDVCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdj bGFzcyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8xLCBo anRlc3RfMgorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3Rf Mi5pZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRl c3RfMi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQg KFNFTEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVz dF8yLmI7CisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCBoanRlc3RfMS5h IGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFzcyB0MSwgaGp0ZXN0 XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8yLCBoanRlc3RfMQorV0hFUkUK KyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5pZCA9IDEpCisgICAg QU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3RfMi5jKjUpCisgICAg QU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNFTEVDVCBoanRlc3Rf Mi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8yLmI7CisKK1NFTEVD VCBoanRlc3RfMS5hIGExLCBoanRlc3RfMi5hIGEyLGhqdGVzdF8xLnRhYmxlb2lkOjpyZWdjbGFz cyB0MSwgaGp0ZXN0XzIudGFibGVvaWQ6OnJlZ2NsYXNzIHQyCitGUk9NIGhqdGVzdF8yLCBoanRl c3RfMQorV0hFUkUKKyAgICBoanRlc3RfMS5pZCA9IChTRUxFQ1QgMSBXSEVSRSBoanRlc3RfMi5p ZCA9IDEpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpID0gKFNFTEVDVCBoanRlc3Rf Mi5jKjUpCisgICAgQU5EIChTRUxFQ1QgaGp0ZXN0XzEuYiAqIDUpIDwgNTAKKyAgICBBTkQgKFNF TEVDVCBoanRlc3RfMi5jICogNSkgPCA1NQorICAgIEFORCBoanRlc3RfMS5hIDw+IGhqdGVzdF8y LmI7CisKK1JPTExCQUNLOworCistLSBWZXJpZnkgdGhhdCB3ZSBiZWhhdmUgc2FuZWx5IHdoZW4g dGhlIGlubmVyIGhhc2gga2V5cyBjb250YWluIHBhcmFtZXRlcnMKKy0tICh0aGF0IGlzLCBvdXRl ciBvciBsYXRlcmFsIHJlZmVyZW5jZXMpLiAgVGhpcyBzaXR1YXRpb24gaGFzIHRvIGRlZmVhdAor LS0gcmUtdXNlIG9mIHRoZSBpbm5lciBoYXNoIHRhYmxlIGFjcm9zcyByZXNjYW5zLgorYmVnaW47 CitzZXQgbG9jYWwgZW5hYmxlX2hhc2hqb2luID0gb247CisKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCBpOC5xMiwgc3MuKiBmcm9tCitpbnQ4X3RibCBpOCwKK2xhdGVyYWwgKHNlbGVjdCB0 MS5maXZldGhvdXMsIGk0LmYxIGZyb20gdGVuazEgdDEgam9pbiBpbnQ0X3RibCBpNAorICAgICAg ICAgb24gdDEuZml2ZXRob3VzID0gaTQuZjEraTgucTIgb3JkZXIgYnkgMSwyKSBzczsKKworc2Vs ZWN0IGk4LnEyLCBzcy4qIGZyb20KK2ludDhfdGJsIGk4LAorbGF0ZXJhbCAoc2VsZWN0IHQxLmZp dmV0aG91cywgaTQuZjEgZnJvbSB0ZW5rMSB0MSBqb2luIGludDRfdGJsIGk0CisgICAgICAgICBv biB0MS5maXZldGhvdXMgPSBpNC5mMStpOC5xMiBvcmRlciBieSAxLDIpIHNzOworCityb2xsYmFj azsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000c08449063358c749 Content-Type: application/octet-stream; name="0001-This-commit-adds-support-for-temporary-files-compres.patch" Content-Disposition: attachment; filename="0001-This-commit-adds-support-for-temporary-files-compres.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9s69hjl0 RnJvbSBhNmE0NjVjZjA2MGU5ZTBiMjVlZTMzODliYjU3NjU3YmUyNjBmNjZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGaWxpcCBKYW51cyA8ZmphbnVzQHJlZGhhdC5jb20+CkRhdGU6 IFdlZCwgMTYgQXByIDIwMjUgMTI6MDM6MDMgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvMl0gVGhp cyBjb21taXQgYWRkcyBzdXBwb3J0IGZvciB0ZW1wb3JhcnkgZmlsZXMgY29tcHJlc3Npb24sCiBp dCBjYW4gYmUgdXNlZCBvbmx5IGZvciBoYXNoam9pbnMgbm93LgoKSXQgYWxzbyBhZGRzIEdVQyBw YXJhbWV0ZXIgdGVtcF9maWxlX2NvbXByZXNzaW9uIHRoYXQgZW5hYmxlcyB0aGlzIGZ1bmN0aW9u YWxpdHkuCkZvciBub3csIGl0IHN1cHBvcnRzIGp1c3QgbHo0IGFuZCBwZ2x6IGFsZ29yaXRobXMu IEluIHRoZSBmdXR1cmUsIGl0CmNvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgenN0ZCBzdXBwb3J0 LgoKSXQgaW1wbGVtZW50cyBqdXN0IG9uZSB3b3JraW5nIGJ1ZmZlciBmb3IgY29tcHJlc3Npb24g YW5kIGRlY29tcHJlc3Npb24gdG8gYXZvaWQKbWVtb3J5IHdhc3RpbmcuIFRoZSBidWZmZXIgaXMg YWxsb2NhdGVkIGluIHRoZSB0b3AgbWVtb3J5IGNvbnRleHQuCi0tLQogc3JjL01ha2VmaWxlLmds b2JhbC5pbiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RidWlsZGJ1ZmZlcnMuYyAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYmFja3Vw L2JhY2t1cF9tYW5pZmVzdC5jICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSGFzaGpvaW4uYyAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv ZmlsZS9idWZmaWxlLmMgICAgICAgICAgICB8IDIxOSArKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAyNCArKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9iYWNr ZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2J1ZmZpbGUuaCAgICAgICAgICAgICAgICAgfCAgMTMgKy0KIDEwIGZpbGVzIGNo YW5nZWQsIDI1MiBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvTWFrZWZpbGUuZ2xvYmFsLmluIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgppbmRleCA2NzIy ZmJkZjM2NS4uNmZmNjdiZGExN2MgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4K KysrIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgpAQCAtMjAxLDYgKzIwMSw3IEBAIHdpdGhfbGli dXJpbmcJPSBAd2l0aF9saWJ1cmluZ0AKIHdpdGhfbGlieG1sCT0gQHdpdGhfbGlieG1sQAogd2l0 aF9saWJ4c2x0CT0gQHdpdGhfbGlieHNsdEAKIHdpdGhfbGx2bQk9IEB3aXRoX2xsdm1ACit3aXRo X2x6NAk9IEB3aXRoX2x6NEAKIHdpdGhfc3lzdGVtX3R6ZGF0YSA9IEB3aXRoX3N5c3RlbV90emRh dGFACiB3aXRoX3V1aWQJPSBAd2l0aF91dWlkQAogd2l0aF96bGliCT0gQHdpdGhfemxpYkAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZGJ1ZmZlcnMuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZGJ1ZmZlcnMuYwppbmRleCAwNzA3MjU0ZDE4 ZS4uOWNjMzcxZjQ3ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Ri dWlsZGJ1ZmZlcnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGRidWZm ZXJzLmMKQEAgLTU0LDcgKzU0LDcgQEAgZ2lzdEluaXRCdWlsZEJ1ZmZlcnMoaW50IHBhZ2VzUGVy QnVmZmVyLCBpbnQgbGV2ZWxTdGVwLCBpbnQgbWF4TGV2ZWwpCiAJICogQ3JlYXRlIGEgdGVtcG9y YXJ5IGZpbGUgdG8gaG9sZCBidWZmZXIgcGFnZXMgdGhhdCBhcmUgc3dhcHBlZCBvdXQgb2YKIAkg KiBtZW1vcnkuCiAJICovCi0JZ2ZiYi0+cGZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChmYWxzZSk7 CisJZ2ZiYi0+cGZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChmYWxzZSwgZmFsc2UpOwogCWdmYmIt Pm5GaWxlQmxvY2tzID0gMDsKIAogCS8qIEluaXRpYWxpemUgZnJlZSBwYWdlIG1hbmFnZW1lbnQu ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFja3VwX21hbmlmZXN0LmMgYi9z cmMvYmFja2VuZC9iYWNrdXAvYmFja3VwX21hbmlmZXN0LmMKaW5kZXggMjJlMmJlMzdjOTUuLmM5 ZjdkYWExNDk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFja3VwX21hbmlmZXN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3VwL2JhY2t1cF9tYW5pZmVzdC5jCkBAIC02NSw3ICs2 NSw3IEBAIEluaXRpYWxpemVCYWNrdXBNYW5pZmVzdChiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFu aWZlc3QsCiAJCW1hbmlmZXN0LT5idWZmaWxlID0gTlVMTDsKIAllbHNlCiAJewotCQltYW5pZmVz dC0+YnVmZmlsZSA9IEJ1ZkZpbGVDcmVhdGVUZW1wKGZhbHNlKTsKKwkJbWFuaWZlc3QtPmJ1ZmZp bGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChmYWxzZSwgZmFsc2UpOwogCQltYW5pZmVzdC0+bWFuaWZl c3RfY3R4ID0gcGdfY3J5cHRvaGFzaF9jcmVhdGUoUEdfU0hBMjU2KTsKIAkJaWYgKHBnX2NyeXB0 b2hhc2hfaW5pdChtYW5pZmVzdC0+bWFuaWZlc3RfY3R4KSA8IDApCiAJCQllbG9nKEVSUk9SLCAi ZmFpbGVkIHRvIGluaXRpYWxpemUgY2hlY2tzdW0gb2YgYmFja3VwIG1hbmlmZXN0OiAlcyIsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaGpvaW4uYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jCmluZGV4IDU2NjFhZDc2ODMwLi4zODQyNjVjYTc0 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2hqb2luLmMKQEAgLTE0MzQsNyArMTQzNCw3IEBA IEV4ZWNIYXNoSm9pblNhdmVUdXBsZShNaW5pbWFsVHVwbGUgdHVwbGUsIHVpbnQzMiBoYXNodmFs dWUsCiAJewogCQlNZW1vcnlDb250ZXh0IG9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyho YXNodGFibGUtPnNwaWxsQ3h0KTsKIAotCQlmaWxlID0gQnVmRmlsZUNyZWF0ZVRlbXAoZmFsc2Up OworCQlmaWxlID0gQnVmRmlsZUNyZWF0ZUNvbXByZXNzVGVtcChmYWxzZSk7CiAJCSpmaWxlcHRy ID0gZmlsZTsKIAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9idWZmaWxlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2ZpbGUvYnVmZmlsZS5jCmluZGV4IDM2NmQ3MGQzOGExLi4xMGRhNjMwODAwNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2ZpbGUvYnVmZmlsZS5jCkBAIC01Myw2ICs1MywxOCBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInV0aWxzL3Jl c293bmVyLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKworI2luY2x1ZGUgImNvbW1v bi9wZ19semNvbXByZXNzLmgiCisjaWZkZWYgVVNFX0xaNAorI2luY2x1ZGUgPGx6NC5oPgorI2Vu ZGlmCisKKyNkZWZpbmUgTk9fTFo0X1NVUFBPUlQoKSBcCisJZXJlcG9ydChFUlJPUiwgXAorCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBcCisJCQkgZXJybXNnKCJj b21wcmVzc2lvbiBtZXRob2QgbHo0IG5vdCBzdXBwb3J0ZWQiKSwgXAorCQkJIGVycmRldGFpbCgi VGhpcyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYnVpbHQgd2l0aCBs ejQgc3VwcG9ydC4iKSkpCiAKIC8qCiAgKiBXZSBicmVhayBCdWZGaWxlcyBpbnRvIGdpZ2FieXRl LXNpemVkIHNlZ21lbnRzLCByZWdhcmRsZXNzIG9mIFJFTFNFR19TSVpFLgpAQCAtNjIsNiArNzQs OCBAQAogI2RlZmluZSBNQVhfUEhZU0lDQUxfRklMRVNJWkUJMHg0MDAwMDAwMAogI2RlZmluZSBC VUZGSUxFX1NFR19TSVpFCQkoTUFYX1BIWVNJQ0FMX0ZJTEVTSVpFIC8gQkxDS1NaKQogCitpbnQg dGVtcF9maWxlX2NvbXByZXNzaW9uID0gVEVNUF9OT05FX0NPTVBSRVNTSU9OOworCiAvKgogICog VGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgYnVmZmVyZWQgZmlsZSB0aGF0IGNvbnNp c3RzIG9mIG9uZSBvcgogICogbW9yZSBwaHlzaWNhbCBmaWxlcyAoZWFjaCBhY2Nlc3NlZCB0aHJv dWdoIGEgdmlydHVhbCBmaWxlIGRlc2NyaXB0b3IKQEAgLTk1LDcgKzEwOSw4IEBAIHN0cnVjdCBC dWZGaWxlCiAJb2ZmX3QJCWN1ck9mZnNldDsJCS8qIG9mZnNldCBwYXJ0IG9mIGN1cnJlbnQgcG9z ICovCiAJaW50CQkJcG9zOwkJCS8qIG5leHQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiBidWZmZXIg Ki8KIAlpbnQJCQluYnl0ZXM7CQkJLyogdG90YWwgIyBvZiB2YWxpZCBieXRlcyBpbiBidWZmZXIg Ki8KLQorCWJvb2wJCQljb21wcmVzczsgLyrCoFN0YXRlIG9mIHVzZWdlIGZpbGUgY29tcHJlc3Np b24gKi8KKyAgIGNoYXIgICAgICAgICpjQnVmZmVyOwogCS8qCiAJICogWFhYIFNob3VsZCBpZGVh bGx5IHVzZSBQR0lPQWxpZ25lZEJsb2NrLCBidXQgbWlnaHQgbmVlZCBhIHdheSB0byBhdm9pZAog CSAqIHdhc3RpbmcgcGVyLWZpbGUgYWxpZ25tZW50IHBhZGRpbmcgd2hlbiBzb21lIHVzZXJzIGNy ZWF0ZSBtYW55IGZpbGVzLgpAQCAtMTI3LDYgKzE0Miw4IEBAIG1ha2VCdWZGaWxlQ29tbW9uKGlu dCBuZmlsZXMpCiAJZmlsZS0+Y3VyT2Zmc2V0ID0gMDsKIAlmaWxlLT5wb3MgPSAwOwogCWZpbGUt Pm5ieXRlcyA9IDA7CisJZmlsZS0+Y29tcHJlc3MgPSBmYWxzZTsKKyAgIGZpbGUtPmNCdWZmZXIg PSBOVUxMOwogCiAJcmV0dXJuIGZpbGU7CiB9CkBAIC0xODgsOSArMjA1LDE3IEBAIGV4dGVuZEJ1 ZkZpbGUoQnVmRmlsZSAqZmlsZSkKICAqIE5vdGU6IGlmIGludGVyWGFjdCBpcyB0cnVlLCB0aGUg Y2FsbGVyIGhhZCBiZXR0ZXIgYmUgY2FsbGluZyB1cyBpbiBhCiAgKiBtZW1vcnkgY29udGV4dCwg YW5kIHdpdGggYSByZXNvdXJjZSBvd25lciwgdGhhdCB3aWxsIHN1cnZpdmUgYWNyb3NzCiAgKiB0 cmFuc2FjdGlvbiBib3VuZGFyaWVzLgorICoKKyAqIElmIGNvbXByZXNzIGlzIHRydWUgdGhlIHRl bXBvcmFyeSBmaWxlcyB3aWxsIGJlIGNvbXByZXNzZWQgYmVmb3JlCisgKiB3cml0aW5nIG9uIGRp c2suCisgKgorICogTm90ZTogVGhlIGNvbXByZXNzaW9uIGRvZXMgbm90IHN1cHBvcnQgcmFuZG9t IGFjY2Vzcy4gT25seSB0aGUgaGFzaCBqb2lucworICogdXNlIGl0IGZvciBub3cuIFRoZSBzZWVr IG9wZXJhdGlvbiBvdGhlciB0aGFuIHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAqIGJ1 ZmZpbGUgd2lsbCBjb3JydXB0IHRlbXBvcmFyeSBkYXRhIG9mZnNldHMuCisgKgogICovCiBCdWZG aWxlICoKLUJ1ZkZpbGVDcmVhdGVUZW1wKGJvb2wgaW50ZXJYYWN0KQorQnVmRmlsZUNyZWF0ZVRl bXAoYm9vbCBpbnRlclhhY3QsIGJvb2wgY29tcHJlc3MpCiB7CiAJQnVmRmlsZSAgICAqZmlsZTsK IAlGaWxlCQlwZmlsZTsKQEAgLTIxMiw5ICsyMzcsNDcgQEAgQnVmRmlsZUNyZWF0ZVRlbXAoYm9v bCBpbnRlclhhY3QpCiAJZmlsZSA9IG1ha2VCdWZGaWxlKHBmaWxlKTsKIAlmaWxlLT5pc0ludGVy WGFjdCA9IGludGVyWGFjdDsKIAorCWlmICh0ZW1wX2ZpbGVfY29tcHJlc3Npb24gIT0gVEVNUF9O T05FX0NPTVBSRVNTSU9OKQorCXsKKwkJZmlsZS0+Y29tcHJlc3MgPSBjb21wcmVzczsKKwl9CisK IAlyZXR1cm4gZmlsZTsKLX0KIAorfQorLyoKKyAqIFdyYXBwZXIgZm9yIEJ1ZmZpbGVDcmVhdGVU ZW1wCisgKiBXZSB3YW50IHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWVtb3J5IGFsbG9jYXRpb25z IGZvciB0aGUgY29tcHJlc3Npb24gYnVmZmVyLAorICogb25seSBvbmUgYnVmZmVyIGZvciBhbGwg Y29tcHJlc3Npb24gb3BlcmF0aW9ucyBpcyBlbm91Z2gKKyAqLworQnVmRmlsZSAqCitCdWZGaWxl Q3JlYXRlQ29tcHJlc3NUZW1wKGJvb2wgaW50ZXJYYWN0KXsKKyAgIHN0YXRpYyBjaGFyICogYnVm ZiA9IE5VTEw7CisgICBCdWZGaWxlICp0bXBCdWZGaWxlID0gQnVmRmlsZUNyZWF0ZVRlbXAoaW50 ZXJYYWN0LCB0cnVlKTsKKworICAgaWYgKGJ1ZmYgPT0gTlVMTCAmJiB0ZW1wX2ZpbGVfY29tcHJl c3Npb24gIT0gVEVNUF9OT05FX0NPTVBSRVNTSU9OKQorICAgeworCQlpbnQgc2l6ZSA9IDA7CisK KwkJc3dpdGNoICh0ZW1wX2ZpbGVfY29tcHJlc3Npb24pCisJCXsKKwkJCWNhc2UgVEVNUF9MWjRf Q09NUFJFU1NJT046CisjaWZkZWYgVVNFX0xaNAorCQkJCXNpemUgPSBMWjRfY29tcHJlc3NCb3Vu ZChCTENLU1opK3NpemVvZihpbnQpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQljYXNlIFRFTVBf UEdMWl9DT01QUkVTU0lPTjoKKwkJCQlzaXplID0gcGdsel9tYXhpbXVtX2NvbXByZXNzZWRfc2l6 ZShCTENLU1osIEJMQ0tTWikrc2l6ZW9mKGludCk7CisJCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJ ICogUGVyc2lzdGVudCBidWZmZXIgZm9yIGFsbCB0ZW1wb3JhcnkgZmlsZSBjb21wcmVzc2lvbnMK KwkJICovCisJCWJ1ZmYgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6 ZSk7CisJfQorCXRtcEJ1ZkZpbGUtPmNCdWZmZXIgPSBidWZmOworCXJldHVybiB0bXBCdWZGaWxl OworfQogLyoKICAqIEJ1aWxkIHRoZSBuYW1lIGZvciBhIGdpdmVuIHNlZ21lbnQgb2YgYSBnaXZl biBCdWZGaWxlLgogICovCkBAIC0yNzUsNiArMzM4LDcgQEAgQnVmRmlsZUNyZWF0ZUZpbGVTZXQo RmlsZVNldCAqZmlsZXNldCwgY29uc3QgY2hhciAqbmFtZSkKIAlmaWxlLT5maWxlc1swXSA9IE1h a2VOZXdGaWxlU2V0U2VnbWVudChmaWxlLCAwKTsKIAlmaWxlLT5yZWFkT25seSA9IGZhbHNlOwog CisKIAlyZXR1cm4gZmlsZTsKIH0KIApAQCAtNDU3LDExICs1MjEsNzUgQEAgQnVmRmlsZUxvYWRC dWZmZXIoQnVmRmlsZSAqZmlsZSkKIAkvKgogCSAqIFJlYWQgd2hhdGV2ZXIgd2UgY2FuIGdldCwg dXAgdG8gYSBmdWxsIGJ1ZmZlcmxvYWQuCiAJICovCi0JZmlsZS0+bmJ5dGVzID0gRmlsZVJlYWQo dGhpc2ZpbGUsCisJaWYgKCFmaWxlLT5jb21wcmVzcykKKwl7CisKKwkJLyoKKwkJKiBSZWFkIHdo YXRldmVyIHdlIGNhbiBnZXQsIHVwIHRvIGEgZnVsbCBidWZmZXJsb2FkLgorCQkqLworCQlmaWxl LT5uYnl0ZXMgPSBGaWxlUmVhZCh0aGlzZmlsZSwKIAkJCQkJCQlmaWxlLT5idWZmZXIuZGF0YSwK LQkJCQkJCQlzaXplb2YoZmlsZS0+YnVmZmVyLmRhdGEpLAorCQkJCQkJCXNpemVvZihmaWxlLT5i dWZmZXIpLAorCQkJCQkJCWZpbGUtPmN1ck9mZnNldCwKKwkJCQkJCQlXQUlUX0VWRU5UX0JVRkZJ TEVfUkVBRCk7CisJLyoKKwkgKiBSZWFkIGFuZCBkZWNvbXByZXNzIGRhdGEgZnJvbSB0aGUgdGVt cG9yYXJ5IGZpbGUKKwkgKiBUaGUgZmlyc3QgcmVhZGluZyBsb2FkcyBzaXplIG9mIHRoZSBjb21w cmVzc2VkIGJsb2NrCisJICogU2Vjb25kIHJlYWRpbmcgbG9hZHMgY29tcHJlc3NlZCBkYXRhCisJ ICovCisJfSBlbHNlIHsKKwkJaW50IG5yZWFkOworCQlpbnQgbmJ5dGVzOworCisJCW5yZWFkID0g RmlsZVJlYWQodGhpc2ZpbGUsCisJCQkJCQkJJm5ieXRlcywKKwkJCQkJCQlzaXplb2YobmJ5dGVz KSwKKwkJCQkJCQlmaWxlLT5jdXJPZmZzZXQsCisJCQkJCQkJV0FJVF9FVkVOVF9CVUZGSUxFX1JF QUQpOworCQkvKiBpZiBub3QgRU9GIGxldCdzIGNvbnRpbnVlICovCisJCWlmIChucmVhZCA+IDAp CisJCXsKKwkJCS8qIEEgbG9uZyBsaWZlIGJ1ZmZlciBsaW1pdHMgbnVtYmVyIG9mIG1lbW9yeSBh bGxvY2F0aW9ucyAqLworCQkJY2hhciAqIGJ1ZmYgPSBmaWxlLT5jQnVmZmVyOworCisJCQlBc3Nl cnQoZmlsZS0+Y0J1ZmZlciAhPSBOVUxMKTsKKwkJCS8qCisJCQkgKiBSZWFkIGNvbXByZXNzZWQg ZGF0YSwgY3VyT2Zmc2V0IGRpZmZlcnMgd2l0aCBwb3MKKwkJCSAqIEl0IHJlYWRzIGxlc3MgZGF0 YSB0aGFuIGl0IHJldHVybnMgdG8gY2FsbGVyCisJCQkgKiBTbyB0aGUgY3VyT2Zmc2V0IG11c3Qg YmUgYWR2YW5jZWQgaGVyZSBiYXNlZCBvbiBjb21wcmVzc2VkIHNpemUKKwkJCSAqLworCQkJZmls ZS0+Y3VyT2Zmc2V0Kz1zaXplb2YobmJ5dGVzKTsKKworCQkJbnJlYWQgPSBGaWxlUmVhZCh0aGlz ZmlsZSwKKwkJCQkJCQlidWZmLAorCQkJCQkJCW5ieXRlcywKIAkJCQkJCQlmaWxlLT5jdXJPZmZz ZXQsCiAJCQkJCQkJV0FJVF9FVkVOVF9CVUZGSUxFX1JFQUQpOworCisJCQlzd2l0Y2ggKHRlbXBf ZmlsZV9jb21wcmVzc2lvbikKKwkJCXsKKwkJCQljYXNlIFRFTVBfTFo0X0NPTVBSRVNTSU9OOgor I2lmZGVmIFVTRV9MWjQKKwkJCQkJZmlsZS0+bmJ5dGVzID0gTFo0X2RlY29tcHJlc3Nfc2FmZShi dWZmLAorCQkJCQkJZmlsZS0+YnVmZmVyLmRhdGEsbmJ5dGVzLHNpemVvZihmaWxlLT5idWZmZXIp KTsKKyNlbmRpZgorCQkJCQlicmVhazsKKworCQkJCWNhc2UgVEVNUF9QR0xaX0NPTVBSRVNTSU9O OgorCQkJCQlmaWxlLT5uYnl0ZXMgPSBwZ2x6X2RlY29tcHJlc3MoYnVmZixuYnl0ZXMsCisJCQkJ CQlmaWxlLT5idWZmZXIuZGF0YSxzaXplb2YoZmlsZS0+YnVmZmVyKSxmYWxzZSk7CisJCQkJCWJy ZWFrOworCQkJfQorCQkJZmlsZS0+Y3VyT2Zmc2V0ICs9IG5yZWFkOworCisJCQlpZiAoZmlsZS0+ bmJ5dGVzIDwgMCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBX0NPUlJVUFRFRCksCisJCQkJCQkgZXJybXNnX2ludGVybmFsKCJjb21wcmVzc2VkIGx6NCBk YXRhIGlzIGNvcnJ1cHQiKSkpOworCQl9CisKKwl9CisKIAlpZiAoZmlsZS0+bmJ5dGVzIDwgMCkK IAl7CiAJCWZpbGUtPm5ieXRlcyA9IDA7CkBAIC00OTQsOSArNjIyLDYxIEBAIHN0YXRpYyB2b2lk CiBCdWZGaWxlRHVtcEJ1ZmZlcihCdWZGaWxlICpmaWxlKQogewogCWludAkJCXdwb3MgPSAwOwot CWludAkJCWJ5dGVzdG93cml0ZTsKKwlpbnQJCQlieXRlc3Rvd3JpdGUgPSAwOwogCUZpbGUJCXRo aXNmaWxlOwogCisKKwkvKiBTYXZlIG5ieXRlcyB2YWx1ZSBiZWNhdXNlIHRoZSBzaXplIGNoYW5n ZXMgZHVlIHRvIGNvbXByZXNzaW9uICovCisJaW50IG5ieXRlc09yaWdpbmFsID0gZmlsZS0+bmJ5 dGVzOworCisJY2hhciAqIERhdGFUb1dyaXRlOworCURhdGFUb1dyaXRlID0gZmlsZS0+YnVmZmVy LmRhdGE7CisKKwkvKgorCSAqIFByZXBhcmUgY29tcHJlc3NlZCBkYXRhIHRvIHdyaXRlCisJICog c2l6ZSBvZiBjb21wcmVzc2VkIGJsb2NrIG5lZWRzIHRvIGJlIGFkZGVkIGF0IHRoZSBiZWdnaW5p bmcgb2YgdGhlCisJICogY29tcHJlc3NlZCBkYXRhCisJICovCisKKworCWlmIChmaWxlLT5jb21w cmVzcykgeworCQljaGFyICogY0RhdGE7CisJCWludCBjU2l6ZSA9IDA7CisKKwkJQXNzZXJ0KGZp bGUtPmNCdWZmZXIgIT0gTlVMTCk7CisJCWNEYXRhID0gZmlsZS0+Y0J1ZmZlcjsKKworCQlzd2l0 Y2ggKHRlbXBfZmlsZV9jb21wcmVzc2lvbikKKwkJCXsKKwkJCWNhc2UgVEVNUF9MWjRfQ09NUFJF U1NJT046CisJCQkJeworI2lmZGVmIFVTRV9MWjQKKwkJCQlpbnQgY0J1ZmZlclNpemUgPSBMWjRf Y29tcHJlc3NCb3VuZChmaWxlLT5uYnl0ZXMpOworCQkJCS8qCisJCQkJKiBVc2luZyBzdHJlYW0g Y29tcHJlc3Npb24gd291bGQgbGVhZCB0byB0aGUgc2xpZ2h0IGltcHJvdmVtZW50IGluCisJCQkJ KiBjb21wcmVzc2lvbiByYXRpbworCQkJCSovCisJCQkJY1NpemUgPSBMWjRfY29tcHJlc3NfZGVm YXVsdChmaWxlLT5idWZmZXIuZGF0YSwKKwkJCQkJY0RhdGEgKyBzaXplb2YoaW50KSxmaWxlLT5u Ynl0ZXMsIGNCdWZmZXJTaXplKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2Ug VEVNUF9QR0xaX0NPTVBSRVNTSU9OOgorCQkJCWNTaXplID0gcGdsel9jb21wcmVzcyhmaWxlLT5i dWZmZXIuZGF0YSxmaWxlLT5uYnl0ZXMsCisJCQkJCWNEYXRhICsgc2l6ZW9mKGludCksUEdMWl9z dHJhdGVneV9hbHdheXMpOworCQkJCWJyZWFrOworCQkJfQorCisKKwkJLyogV3JpdGUgc2l6ZSBv ZiBjb21wcmVzc2VkIGJsb2NrIGluIGZyb250IG9mIGNvbXByZXNzZWQgZGF0YQorCQkgKiBJdCdz IHVzZWQgdG8gZGV0ZXJtaW5lIGFtb3VudCBvZiBkYXRhIHRvIHJlYWQgd2l0aGluCisJCSAqIGRl Y29tcHJlc3Npb24gcHJvY2VzcworCQkgKi8KKwkJbWVtY3B5KGNEYXRhLCZjU2l6ZSxzaXplb2Yo aW50KSk7CisJCWZpbGUtPm5ieXRlcz1jU2l6ZSArIHNpemVvZihpbnQpOworCQlEYXRhVG9Xcml0 ZSA9IGNEYXRhOworCX0KKwogCS8qCiAJICogVW5saWtlIEJ1ZkZpbGVMb2FkQnVmZmVyLCB3ZSBt dXN0IGR1bXAgdGhlIHdob2xlIGJ1ZmZlciBldmVuIGlmIGl0CiAJICogY3Jvc3NlcyBhIGNvbXBv bmVudC1maWxlIGJvdW5kYXJ5OyBzbyB3ZSBuZWVkIGEgbG9vcC4KQEAgLTUzNSw3ICs3MTUsNyBA QCBCdWZGaWxlRHVtcEJ1ZmZlcihCdWZGaWxlICpmaWxlKQogCQkJSU5TVFJfVElNRV9TRVRfWkVS Tyhpb19zdGFydCk7CiAKIAkJYnl0ZXN0b3dyaXRlID0gRmlsZVdyaXRlKHRoaXNmaWxlLAotCQkJ CQkJCQkgZmlsZS0+YnVmZmVyLmRhdGEgKyB3cG9zLAorCQkJCQkJCQkgRGF0YVRvV3JpdGUgKyB3 cG9zLAogCQkJCQkJCQkgYnl0ZXN0b3dyaXRlLAogCQkJCQkJCQkgZmlsZS0+Y3VyT2Zmc2V0LAog CQkJCQkJCQkgV0FJVF9FVkVOVF9CVUZGSUxFX1dSSVRFKTsKQEAgLTU2NCw3ICs3NDQsMTkgQEAg QnVmRmlsZUR1bXBCdWZmZXIoQnVmRmlsZSAqZmlsZSkKIAkgKiBsb2dpY2FsIGZpbGUgcG9zaXRp b24sIGllLCBvcmlnaW5hbCB2YWx1ZSArIHBvcywgaW4gY2FzZSB0aGF0IGlzIGxlc3MKIAkgKiAo YXMgY291bGQgaGFwcGVuIGR1ZSB0byBhIHNtYWxsIGJhY2t3YXJkcyBzZWVrIGluIGEgZGlydHkg YnVmZmVyISkKIAkgKi8KLQlmaWxlLT5jdXJPZmZzZXQgLT0gKGZpbGUtPm5ieXRlcyAtIGZpbGUt PnBvcyk7CisKKworCWlmICghZmlsZS0+Y29tcHJlc3MpCisJCWZpbGUtPmN1ck9mZnNldCAtPSAo ZmlsZS0+bmJ5dGVzIC0gZmlsZS0+cG9zKTsKKwllbHNlCisJCWlmIChuYnl0ZXNPcmlnaW5hbCAt IGZpbGUtPnBvcyAhPSAwKQorCQkJLyogY3VyT2Zmc2V0IG11c3QgYmUgY29ycmVjdGVkIGFsc28g aWYgY29tcHJlc3Npb24gaXMKKwkJCSAqIGVuYWJsZWQsIG5ieXRlcyB3YXMgY2hhbmdlZCBieSBj b21wcmVzc2lvbiBidXQgd2UKKwkJCSAqIGhhdmUgdG8gdXNlIHRoZSBvcmlnaW5hbCB2YWx1ZSBv ZiBuYnl0ZXMKKwkJCSAqLworCQkJZmlsZS0+Y3VyT2Zmc2V0LT1ieXRlc3Rvd3JpdGU7CisKKwog CWlmIChmaWxlLT5jdXJPZmZzZXQgPCAwKQkvKiBoYW5kbGUgcG9zc2libGUgc2VnbWVudCBjcm9z c2luZyAqLwogCXsKIAkJZmlsZS0+Y3VyRmlsZS0tOwpAQCAtNTc3LDYgKzc2OSw3IEBAIEJ1ZkZp bGVEdW1wQnVmZmVyKEJ1ZkZpbGUgKmZpbGUpCiAJICovCiAJZmlsZS0+cG9zID0gMDsKIAlmaWxl LT5uYnl0ZXMgPSAwOworCiB9CiAKIC8qCkBAIC02MDIsOCArNzk1LDE0IEBAIEJ1ZkZpbGVSZWFk Q29tbW9uKEJ1ZkZpbGUgKmZpbGUsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGJvb2wgZXhhY3Qs IGJvb2wgZW9mT0spCiAJewogCQlpZiAoZmlsZS0+cG9zID49IGZpbGUtPm5ieXRlcykKIAkJewot CQkJLyogVHJ5IHRvIGxvYWQgbW9yZSBkYXRhIGludG8gYnVmZmVyLiAqLwotCQkJZmlsZS0+Y3Vy T2Zmc2V0ICs9IGZpbGUtPnBvczsKKwkJCS8qIFRyeSB0byBsb2FkIG1vcmUgZGF0YSBpbnRvIGJ1 ZmZlci4KKwkJCSAqCisJCQkgKiBjdXJPZmZzZXQgaXMgbW92ZWQgd2l0aGluIEJ1ZkZpbGVMb2Fk QnVmZmVyCisJCQkgKiBiZWNhdXNlIHN0b3JlZCBkYXRhIHNpemUgZGlmZmVycyBmcm9tIGxvYWRl ZC8KKwkJCSAqIGRlY29tcHJlc3NlZCBzaXplCisJCQkgKiAqLworCQkJaWYgKCFmaWxlLT5jb21w cmVzcykKKwkJCQlmaWxlLT5jdXJPZmZzZXQgKz0gZmlsZS0+cG9zOwogCQkJZmlsZS0+cG9zID0g MDsKIAkJCWZpbGUtPm5ieXRlcyA9IDA7CiAJCQlCdWZGaWxlTG9hZEJ1ZmZlcihmaWxlKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggNjBiMTI0NDZhMWMuLmFlMDUyNjQwYWMw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNzgsNiArNzgsNyBAQAogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL3N5bmNyZXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fpby5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZmaWxlLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb3B5ZGly LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIKQEAgLTQ2Myw2ICs0NjQsMTggQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBkZWZhdWx0X3RvYXN0X2NvbXBy ZXNzaW9uX29wdGlvbnNbXSA9IHsKICNlbmRpZgogCXtOVUxMLCAwLCBmYWxzZX0KIH07CisvKgor ICogcGdseiBhbmQgenN0ZCBzdXBwb3J0IHNob3VsZCBiZSBhZGRlZCBhcyBmdXR1cmUgZW5oYW5j ZW1lbnQKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgdGVt cF9maWxlX2NvbXByZXNzaW9uX29wdGlvbnNbXSA9IHsKKwl7Im5vIiwgVEVNUF9OT05FX0NPTVBS RVNTSU9OLCBmYWxzZX0sCisJeyJwZ2x6IiwgVEVNUF9QR0xaX0NPTVBSRVNTSU9OLCBmYWxzZX0s CisjaWZkZWYgIFVTRV9MWjQKKwl7Imx6NCIsIFRFTVBfTFo0X0NPTVBSRVNTSU9OLCBmYWxzZX0s CisjZW5kaWYKKwl7TlVMTCwgMCwgZmFsc2V9Cit9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNv bmZpZ19lbnVtX2VudHJ5IHdhbF9jb21wcmVzc2lvbl9vcHRpb25zW10gPSB7CiAJeyJwZ2x6Iiwg V0FMX0NPTVBSRVNTSU9OX1BHTFosIGZhbHNlfSwKQEAgLTUwNTgsNiArNTA3MSwxNyBAQCBzdHJ1 Y3QgY29uZmlnX2VudW0gQ29uZmlndXJlTmFtZXNFbnVtW10gPQogCQlOVUxMLCBOVUxMLCBOVUxM CiAJfSwKIAorCXsKKwkJeyJ0ZW1wX2ZpbGVfY29tcHJlc3Npb24iLCBQR0NfVVNFUlNFVCwgQ0xJ RU5UX0NPTk5fU1RBVEVNRU5ULAorCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBkZWZhdWx0IGNv bXByZXNzaW9uIG1ldGhvZCBmb3IgY29tcHJlc3NpYmxlIHZhbHVlcy4iKSwKKwkJCU5VTEwKKwkJ fSwKKwkJJnRlbXBfZmlsZV9jb21wcmVzc2lvbiwKKwkJVEVNUF9OT05FX0NPTVBSRVNTSU9OLAor CQl0ZW1wX2ZpbGVfY29tcHJlc3Npb25fb3B0aW9ucywKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0s CisKIAl7CiAJCXsiZGVmYXVsdF90cmFuc2FjdGlvbl9pc29sYXRpb24iLCBQR0NfVVNFUlNFVCwg Q0xJRU5UX0NPTk5fU1RBVEVNRU5ULAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSB0cmFuc2Fj dGlvbiBpc29sYXRpb24gbGV2ZWwgb2YgZWFjaCBuZXcgdHJhbnNhY3Rpb24uIiksCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggMzQ4MjZkMDEz ODAuLjc3OTYxYTQ1ZDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC0xODIsNiArMTgyLDcgQEAKIAogI21heF9ub3RpZnlfcXVldWVfcGFn ZXMgPSAxMDQ4NTc2CSMgbGltaXRzIHRoZSBudW1iZXIgb2YgU0xSVSBwYWdlcyBhbGxvY2F0ZWQK IAkJCQkJIyBmb3IgTk9USUZZIC8gTElTVEVOIHF1ZXVlCisjdGVtcF9maWxlX2NvbXByZXNzaW9u ID0gJ25vJwkjIGVuYWJsZXMgdGVtcG9yYXJ5IGZpbGVzIGNvbXByZXNzaW9uCiAKICNmaWxlX2Nv cHlfbWV0aG9kID0gY29weQkjIHRoZSBkZWZhdWx0IGlzIHRoZSBmaXJzdCBvcHRpb24KIAkJCQkJ IyAJY29weQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMgYi9z cmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwppbmRleCBlNTI5Y2ViODI2MC4uZDg2MmUy MmVmMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5jCkBAIC01OTIsNyArNTkyLDcgQEAgTG9n aWNhbFRhcGVTZXRDcmVhdGUoYm9vbCBwcmVhbGxvY2F0ZSwgU2hhcmVkRmlsZVNldCAqZmlsZXNl dCwgaW50IHdvcmtlcikKIAkJbHRzLT5wZmlsZSA9IEJ1ZkZpbGVDcmVhdGVGaWxlU2V0KCZmaWxl c2V0LT5mcywgZmlsZW5hbWUpOwogCX0KIAllbHNlCi0JCWx0cy0+cGZpbGUgPSBCdWZGaWxlQ3Jl YXRlVGVtcChmYWxzZSk7CisJCWx0cy0+cGZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChmYWxzZSwg ZmFsc2UpOwogCiAJcmV0dXJuIGx0czsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L3NvcnQvdHVwbGVzdG9yZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMK aW5kZXggYzlhZWNhYjhkNjYuLmVmODU5MjRjZDIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9zb3J0L3R1cGxlc3RvcmUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxl c3RvcmUuYwpAQCAtODYwLDcgKzg2MCw3IEBAIHR1cGxlc3RvcmVfcHV0dHVwbGVfY29tbW9uKFR1 cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cGxlKQogCQkJICovCiAJCQlvbGRjeHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPmNvbnRleHQtPnBhcmVudCk7CiAKLQkJCXN0YXRl LT5teWZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChzdGF0ZS0+aW50ZXJYYWN0KTsKKwkJCXN0YXRl LT5teWZpbGUgPSBCdWZGaWxlQ3JlYXRlVGVtcChzdGF0ZS0+aW50ZXJYYWN0LCBmYWxzZSk7CiAK IAkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1ZmZpbGUuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmZmlsZS5oCmlu ZGV4IGEyZjQ4MjFmMjQwLi45MzFhMjExMDM4YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZmaWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZmaWxlLmgKQEAgLTMy LDExICszMiwyMiBAQAogCiB0eXBlZGVmIHN0cnVjdCBCdWZGaWxlIEJ1ZkZpbGU7CiAKK3R5cGVk ZWYgZW51bQoreworCVRFTVBfTk9ORV9DT01QUkVTU0lPTiwKKwlURU1QX1BHTFpfQ09NUFJFU1NJ T04sCisJVEVNUF9MWjRfQ09NUFJFU1NJT04KK30gVGVtcENvbXByZXNzaW9uOworCitleHRlcm4g UEdETExJTVBPUlQgaW50IHRlbXBfZmlsZV9jb21wcmVzc2lvbjsKKworCiAvKgogICogcHJvdG90 eXBlcyBmb3IgZnVuY3Rpb25zIGluIGJ1ZmZpbGUuYwogICovCiAKLWV4dGVybiBCdWZGaWxlICpC dWZGaWxlQ3JlYXRlVGVtcChib29sIGludGVyWGFjdCk7CitleHRlcm4gQnVmRmlsZSAqQnVmRmls ZUNyZWF0ZUNvbXByZXNzVGVtcChib29sIGludGVyWGFjdCk7CitleHRlcm4gQnVmRmlsZSAqQnVm RmlsZUNyZWF0ZVRlbXAoYm9vbCBpbnRlclhhY3QsIGJvb2wgY29tcHJlc3MpOwogZXh0ZXJuIHZv aWQgQnVmRmlsZUNsb3NlKEJ1ZkZpbGUgKmZpbGUpOwogcGdfbm9kaXNjYXJkIGV4dGVybiBzaXpl X3QgQnVmRmlsZVJlYWQoQnVmRmlsZSAqZmlsZSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiBl eHRlcm4gdm9pZCBCdWZGaWxlUmVhZEV4YWN0KEJ1ZkZpbGUgKmZpbGUsIHZvaWQgKnB0ciwgc2l6 ZV90IHNpemUpOwotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000c08449063358c749--