public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-21  1:36 Mario Deilmann
  0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-21  1:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Thu, 21 Mar 2002 10:28:39 +0100 (MET)

 Dear Neil,
 
 again thanks for your help. The hint was very helpful to get the right
 output but I cannot see why I got an error like
 
 /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
 parse error before `;' token
 
 only because I changed the sequence of some includes. The code with the
 nested headers looks syntactically correct for me. The only thing I would
 expect from a different include sequence are problems with definitions not
 a parse error.
 
 Anyhow I also didn't want to investigate more on this because I have no
 clue what I should look for and because I have a workaround if I ommit
 nested headers. So if this is enough to close the bugreport please do so.
 
 Viele Gruesse / Best Regards
 
 -- Mario 
 
 Mario Deilmann
 Senior Sales Engineer
 --------------------------------------------------------------------
 //// pallas 
 Pallas GmbH / Hermuelheimer Str. 10 / 50321 Bruehl / Germany
 Mario.Deilmann@pallas.com / www.pallas.com
 Tel +49-2232-1896-31 / Fax +49-2232-1896-29
 --------------------------------------------------------------------
 
 On Wed, 20 Mar 2002, Neil Booth wrote:
 
 > Mario Deilmann wrote:-
 > 
 > > I tried gcc -E -H on both files and there are a LOT of differences (about
 > > 1200). I have looked into the differences and most of them obviously are
 > > caused by the different include sequence. 
 > > 
 > > I have no idea where I should look for the important differences ? Any
 > > idea ?
 > 
 > Try
 > 
 > gcc <options> file.c -E -H > /dev/null
 > 
 > which just lists the header trail.  Then have a look at the first header
 > where they diverge, and figure out why.  It's either because your path
 > is different, or a command line or builtin macro is different.  I can't
 > help you any more than that I'm afraid.
 > 
 > Neil.
 > 
 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-26  2:16 Mario Deilmann
  0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-26  2:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Tue, 26 Mar 2002 11:05:14 +0100 (MET)

   This message is in MIME format.  The first part should be readable text,
   while the remaining parts are likely unreadable without MIME-aware tools.
   Send mail to mime@docserver.cac.washington.edu for more info.
 
 ---559023410-758783491-1017137114=:8152
 Content-Type: TEXT/PLAIN; charset=US-ASCII
 
 
 Neil,
 
 here comes the output of 
 
 g++ -Wall -E buffer.cc > out_ok
 g++ -Wall -E buffer.cpp > out_notok
 
 I'll sent you in my previous mail the output you suggested me to look at -
 sorry for the misunderstanding. 
 
 > I'm quite sure there are no bugs in this part of CPP.  People use it in
 > millions of situations every day.
 
 That's of course no argument to be error-free ! 
 
 > > You don't need to replicate my system. With the source code example I send
 > > you you could replicate the error on a lot of systems.
 > 
 > I can't, on g++ on Linux I get:
 > 
 > $ g++ -c -Wall buffer.cpp 
 > buffer.cpp: In method `char TSourceBuffer::GetLine()':
 > buffer.cpp:137: warning: unused variable `int lineNumber'
 > $ 
 > 
 > in both directories error/ and no-error/ of your tarball.
 >
 
 OK, that a simple warning no problem at all, uncomment the variable to
 avoid the warning.
 
 On Suse 7.2 with gcc 2.95.3 and on RedHat 7.2 with gcc 2.96 I also get no
 error with both versions ? Mmmh, maybe I tested it with a gcc >= 3.00. But
 I cannot access this machine at the moment sorry. So the only machine
 where I can reproduce it is the Sun Solaris machine. Maybe I updated my
 linux boxes to early.
 
 I try to install gcc 3.0.4 in the meantime on Linux though it failed under
 Solaris with the gcc 3.0.0 maybe that's a hint - but this is another bug
 report.
 
 > 
 > No, that is not preprocessed source.  You sent me the include trace,
 > which was *completely different for the two compilers*.  How can you
 > expect to get the same result when the compilers are reading different
 > header files?
 
 This is definetly wrong !!!
 
 The version of the programm includes the following headers in the file
 buffer.cc and this is ok for g++ 3.0.0.
 
 #include <stdio.h>
 #include <string.h>
 #include <time.h>
 #include <stdio.h>
 #include <string.h>
 #include <fstream.h>
 
 #include <iostream>
 
 #include "common.h"
 #include "misc.h"
 #include "error.h"
 #include "buffer.h"
 
 using namespace std ;
 
 The other version buffer.cpp includes (and this is not ok for g++ 3.0.0
 but for CC 5.0)
 
 #include <stdio.h>
 #include <string.h>
 #include <iostream>
 #include <time.h>
 #include "common.h"
 
  in common.h 
  #include "misc.h"
  
 #include "buffer.h"
 
  in buffer.h
  #include <fstream.h>
  #include <stdio.h>
  #include <string.h>
  #include "misc.h"
  #include "error.h"
 
 So you end up with the same headers in a different sequence !
 
 Both programs include only the following headers NO others.
 
 system headers:
 
 #include <stdio.h>
 #include <string.h>
 #include <iostream>
 #include <time.h>
 #include <fstream.h>
 #include <stdio.h>  
 #include <string.h>
 
 and
 
 #include "common.h"
 #include "misc.h"
 #include "error.h"
 #include "buffer.h"
 
 > How can you expect to get the same result when the compilers are reading
 > different header files?
 
 I expect the same results due to the fact that the include sequence in a
 given C/C++ programm should be of no relevance (if there are no
 dependecies - and that's what I expect from the system headers). 
 Furthermore the program with the nested include sequence causes an error
 in different system headers not in the user code. It's vivid that you get
 different traces though the include sequence is different.
 
 -- Mario
 
 
 
 
 
 
 ---559023410-758783491-1017137114=:8152
 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=out_notok
 Content-Transfer-Encoding: BASE64
 Content-ID: <Pine.SOL.3.95q.1020326110513.8152E@pooh>
 Content-Description: 
 
 IyAyMCAiYnVmZmVyLmNwcCINCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
 Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
 ZGlvLmgiIDEgMyA0DQojIDE0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
 Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8u
 aCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
 cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAz
 IDQNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
 Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMyA0DQp0
 eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0Ow0KIyAx
 NSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
 b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0DQojIDM0ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQojcHJhZ21hIGlkZW50
 ICJAKCMpc3RkaW8uaAkxLjY5CTk4LzA3LzEzIFNNSSINCg0KIyAxICIvdXNy
 L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTMgIi91
 c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQNCiNwcmFnbWEg
 aWRlbnQgIkAoIylmZWF0dXJlX3Rlc3RzLmgJMS4xNwk5Ny8xMi8wNCBTTUki
 DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0K
 IyA5ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNA0KI3ByYWdt
 YSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4xNgk5OS8wNS8yNSBTTUkiDQoj
 IDE0OCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQNCmV4dGVy
 biAiQyIgew0KIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIg
 MyA0DQp9DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu
 aCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTc1ICIvdXNyL2luY2x1
 ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMyA0DQp9DQojIDM3ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRl
 L3N5cy92YV9saXN0LmgiIDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS9zeXMv
 dmFfbGlzdC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl2YV9saXN0LmgJ
 MS4xMQk5Ny8xMS8yMiBTTUkiDQojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Zh
 X2xpc3QuaCIgMyA0DQpleHRlcm4gIkMiIHsNCg0KDQoNCnR5cGVkZWYgdm9p
 ZCAqX192YV9saXN0Ow0KDQoNCg0KDQoNCn0NCiMgMzggIi9ob21lL21kZWls
 L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
 aW5jbHVkZS9zdGRpby5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3Rk
 aW9fdGFnLmgiIDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS9zdGRpb190YWcu
 aCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4
 LzA0LzIwIFNNSSINCg0KDQpleHRlcm4gIkMiIHsNCiMgMjEgIi91c3IvaW5j
 bHVkZS9zdGRpb190YWcuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBGSUxFIF9f
 RklMRTsNCg0KDQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv
 Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRp
 by5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAx
 IDMgNA0KIyA5ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQNCiNw
 cmFnbWEgaWRlbnQgIkAoIylzdGRpb19pbXBsLmgJMS44CTk5LzA2LzMwIFNN
 SSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0
 DQojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAyIDMgNA0KDQoN
 CmV4dGVybiAiQyIgew0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBzc2l6
 ZV90Ow0KIyAzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0DQpz
 dHJ1Y3QgRklMRQ0Kew0KDQoNCg0KDQogICAgICAgIHNzaXplX3QgX2NudDsN
 CiAgICAgICAgdW5zaWduZWQgY2hhciAqX3B0cjsNCg0KICAgICAgICB1bnNp
 Z25lZCBjaGFyICpfYmFzZTsNCiAgICAgICAgdW5zaWduZWQgY2hhciBfZmxh
 ZzsNCiAgICAgICAgdW5zaWduZWQgY2hhciBfZmlsZTsNCiAgICAgICAgdW5z
 aWduZWQgX19vcmllbnRhdGlvbjoyOw0KICAgICAgICB1bnNpZ25lZCBfX2lv
 bm9sb2NrOjE7DQogICAgICAgIHVuc2lnbmVkIF9fZmlsbGVyOjU7DQp9Ow0K
 DQoNCg0KDQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
 aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIg
 MiAzIDQNCiMgNTAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
 cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQN
 CmV4dGVybiAiQyIgew0KDQoNCg0KDQp0eXBlZGVmIF9fRklMRSBGSUxFOw0K
 DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7DQoj
 IDc0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVm
 IGxvbmcgbG9uZyBfX2xvbmdsb25nX3Q7DQojIDg4ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
 Y2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVmIGxvbmcgb2ZmX3Q7DQoNCg0K
 DQoNCg0KDQoNCnR5cGVkZWYgX19sb25nbG9uZ190IG9mZjY0X3Q7DQoNCg0K
 DQoNCg0KDQp0eXBlZGVmIGxvbmcgZnBvc190Ow0KDQoNCg0KDQoNCg0KDQp0
 eXBlZGVmIF9fbG9uZ2xvbmdfdCBmcG9zNjRfdDsNCiMgMTMyICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVmIF9fdmFfbGlzdCBf
 X25vdF92YV9saXN0X187DQojIDIwMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
 Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
 ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJTEUgX19pb2JbMjBdOw0KIyAyMTUgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiB1bnNpZ25l
 ZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsNCiMgMjQ0ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gdW5zaWduZWQgY2hhciAq
 X2J1ZmVuZHRhYltdOw0KZXh0ZXJuIEZJTEUgKl9sYXN0YnVmOw0KIyAyNzUg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
 YXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiBpbnQg
 cmVtb3ZlKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHJlbmFtZShjb25z
 dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gRklMRSAqdG1wZmls
 ZSh2b2lkKTsNCmV4dGVybiBjaGFyICp0bXBuYW0oY2hhciAqKTsNCg0KZXh0
 ZXJuIGNoYXIgKnRtcG5hbV9yKGNoYXIgKik7DQoNCmV4dGVybiBpbnQgZmNs
 b3NlKEZJTEUgKik7DQpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOw0KZXh0
 ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsN
 CmV4dGVybiBGSUxFICpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
 ciAqLCBGSUxFICopOw0KZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hh
 ciAqKTsNCg0KDQpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFy
 ICosIHNpemVfdCk7DQpleHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsN
 Cg0KZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNp
 emVfdCk7DQoNCmV4dGVybiBpbnQgZnByaW50ZihGSUxFICosIGNvbnN0IGNo
 YXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25z
 dCBjaGFyICosIC4uLik7DQoNCmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNo
 YXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBzY2FuZihjb25zdCBjaGFyICos
 IC4uLik7DQoNCg0KDQoNCmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqLCBz
 aXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsNCg0KDQpleHRlcm4gaW50IHNw
 cmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7DQoNCmV4dGVybiBp
 bnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0K
 ZXh0ZXJuIGludCB2ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n
 bnVjX3ZhX2xpc3QpOw0KZXh0ZXJuIGludCB2cHJpbnRmKGNvbnN0IGNoYXIg
 KiwgX19nbnVjX3ZhX2xpc3QpOw0KDQoNCg0KZXh0ZXJuIGludCB2c25wcmlu
 dGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp
 c3QpOw0KDQpleHRlcm4gaW50IHZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hh
 ciAqLCBfX2dudWNfdmFfbGlzdCk7DQpleHRlcm4gaW50IGZnZXRjKEZJTEUg
 Kik7DQpleHRlcm4gY2hhciAqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7
 DQpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAqKTsNCmV4dGVybiBpbnQg
 ZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0ZXJuIGludCBnZXRj
 KEZJTEUgKik7DQpleHRlcm4gaW50IGdldGNoYXIodm9pZCk7DQpleHRlcm4g
 Y2hhciAqZ2V0cyhjaGFyICopOw0KZXh0ZXJuIGludCBwdXRjKGludCwgRklM
 RSAqKTsNCmV4dGVybiBpbnQgcHV0Y2hhcihpbnQpOw0KZXh0ZXJuIGludCBw
 dXRzKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHVuZ2V0YyhpbnQsIEZJ
 TEUgKik7DQpleHRlcm4gc2l6ZV90IGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBz
 aXplX3QsIEZJTEUgKik7DQpleHRlcm4gc2l6ZV90IGZ3cml0ZShjb25zdCB2
 b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOw0KZXh0ZXJuIGludCBm
 Z2V0cG9zKEZJTEUgKiwgZnBvc190ICopOw0KZXh0ZXJuIGludCBmc2VlayhG
 SUxFICosIGxvbmcsIGludCk7DQpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAq
 LCBjb25zdCBmcG9zX3QgKik7DQpleHRlcm4gbG9uZyBmdGVsbChGSUxFICop
 Ow0KZXh0ZXJuIHZvaWQgcmV3aW5kKEZJTEUgKik7DQpleHRlcm4gdm9pZCBj
 bGVhcmVycihGSUxFICopOw0KZXh0ZXJuIGludCBmZW9mKEZJTEUgKik7DQpl
 eHRlcm4gaW50IGZlcnJvcihGSUxFICopOw0KZXh0ZXJuIHZvaWQgcGVycm9y
 KGNvbnN0IGNoYXIgKik7DQoNCg0KZXh0ZXJuIGludCBfX2ZpbGJ1ZihGSUxF
 ICopOw0KZXh0ZXJuIGludCBfX2Zsc2J1ZihpbnQsIEZJTEUgKik7DQojIDM1
 MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
 b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJ
 TEUgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAq
 Y3Rlcm1pZChjaGFyICopOw0KZXh0ZXJuIGludCBmaWxlbm8oRklMRSAqKTsN
 CiMgMzY0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRl
 cm4gdm9pZCBmbG9ja2ZpbGUoRklMRSAqKTsNCmV4dGVybiBpbnQgZnRyeWxv
 Y2tmaWxlKEZJTEUgKik7DQpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxF
 ICopOw0KZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkKEZJTEUgKik7DQpleHRl
 cm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7DQpleHRlcm4gaW50IHB1
 dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOw0KZXh0ZXJuIGludCBwdXRjaGFy
 X3VubG9ja2VkKGludCk7DQojIDM3OSAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
 Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
 ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwg
 Y29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7
 DQpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNo
 YXIgKik7DQpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICos
 IGNvbnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gY2hhciAqb3B0YXJnOw0K
 ZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0Ow0KZXh0ZXJuIGlu
 dCBnZXR3KEZJTEUgKik7DQpleHRlcm4gaW50IHB1dHcoaW50LCBGSUxFICop
 Ow0KZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsNCg0KDQoNCg0KDQoNCg0K
 ZXh0ZXJuIGludCBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsNCmV4dGVy
 biBvZmZfdCBmdGVsbG8oRklMRSAqKTsNCiMgNDA4ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
 Y2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gRklMRSAqZm9wZW42NChjb25z
 dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gRklMRSAqZnJlb3Bl
 bjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0
 ZXJuIEZJTEUgKnRtcGZpbGU2NCh2b2lkKTsNCmV4dGVybiBpbnQgZmdldHBv
 czY0KEZJTEUgKiwgZnBvczY0X3QgKik7DQpleHRlcm4gaW50IGZzZXRwb3M2
 NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOw0KZXh0ZXJuIGludCBmc2Vl
 a282NChGSUxFICosIG9mZjY0X3QsIGludCk7DQpleHRlcm4gb2ZmNjRfdCBm
 dGVsbG82NChGSUxFICopOw0KIyA1ODYgIi9ob21lL21kZWlsL2Jpbi8uLi9s
 aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
 dGRpby5oIiAzIDQNCn0NCiMgMjEgImJ1ZmZlci5jcHAiIDINCiMgMSAiL3Vz
 ci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRl
 L3N0cmluZy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdHJpbmcuaAkx
 LjIyCTk3LzEyLzIyIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Zl
 YXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9zdHJp
 bmcuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDMgIi91c3IvaW5j
 bHVkZS9zdHJpbmcuaCIgMyA0DQpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQg
 KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KZXh0ZXJuIHZvaWQgKm1lbW1v
 dmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7DQpleHRlcm4gY2hh
 ciAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFy
 ICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQpl
 eHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4
 dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl
 X3QpOw0KDQpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0
 IHZvaWQgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNo
 YXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgc3RyY29sbChjb25z
 dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHN0cm5jbXAo
 Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpleHRlcm4g
 c2l6ZV90IHN0cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7
 DQoNCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNp
 emVfdCk7DQpleHRlcm4gY2hhciAqc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50
 KTsNCmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0
 IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICos
 IGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBj
 aGFyICosIGludCk7DQpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFy
 ICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0
 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpzdHJ0b2so
 Y2hhciAqLCBjb25zdCBjaGFyICopOw0KDQoNCmV4dGVybiBjaGFyICpzdHJ0
 b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQoNCmV4dGVy
 biB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7DQpleHRlcm4g
 Y2hhciAqc3RyZXJyb3IoaW50KTsNCmV4dGVybiBzaXplX3Qgc3RybGVuKGNv
 bnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gdm9pZCAqbWVtY2NweSh2b2lk
 ICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOw0KDQoNCg0KDQpleHRl
 cm4gY2hhciAqc3Ryc2lnbmFsKGludCk7DQpleHRlcm4gaW50IGZmcyhpbnQp
 Ow0KZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3Qg
 Y2hhciAqKTsNCmV4dGVybiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAq
 LCBjb25zdCBjaGFyICosIHNpemVfdCk7DQoNCg0KDQoNCg0KZXh0ZXJuIGNo
 YXIgKnN0cmR1cChjb25zdCBjaGFyICopOw0KIyAxNDYgIi91c3IvaW5jbHVk
 ZS9zdHJpbmcuaCIgMyA0DQp9DQojIDIyICJidWZmZXIuY3BwIiAyDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIg
 MSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 aW9zdHJlYW0iIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFt
 LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAz
 DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMw0KIyAzNSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz
 Mi43L2JpdHMvYysrY29uZmlnLmgiIDIgMw0KIyA0MCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIg
 Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMNCg0KIyAx
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 aW9zLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMN
 CiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9pb3Nmd2QuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2Nv
 bmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQojIDEgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAx
 IDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0cmluZ2Z3ZC5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysr
 Y29uZmlnLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDIgMw0KDQpuYW1lc3BhY2Ug
 c3RkDQp7DQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3Qg
 Y2hhcl90cmFpdHM7DQoNCiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0
 czxjaGFyPjsNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+
 DQogICAgY2xhc3MgYWxsb2NhdG9yOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
 VD4sDQogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf
 Q2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19zdHJpbmc7DQoNCiAgdHlwZWRl
 ZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOw0KDQoNCg0KfQ0KIyA0MSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
 c2Z3ZC5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMw0KDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29s
 YXJpczIuNy9iaXRzL2MrK2lvLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp
 dHMvYysraW8uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvY3N0ZGlvIiAxIDMNCiMgMzEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9jc3RkaW8iIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMN
 CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9jc3RkaW8uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25m
 aWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAx
 IDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9jc3RkZGVmLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRl
 L3N0ZGRlZi5oIiAxIDMgNA0KIyAxNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9s
 aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
 dGRkZWYuaCIgMyA0DQp0eXBlZGVmIGludCBwdHJkaWZmX3Q7DQojIDM5ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
 ZGRlZi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OnB0
 cmRpZmZfdDsNCiAgdXNpbmcgOjpzaXplX3Q7DQp9DQojIDM5ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgi
 IDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2NzdGRpby5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
 ZS9zdGRpby5oIiAxIDMgNA0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMNCiMgODYgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
 aW8uaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJTEU7DQog
 IHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5nIDo6Y2xlYXJlcnI7DQogIHVz
 aW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5nIDo6ZmVy
 cm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0YzsNCiAg
 dXNpbmcgOjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1c2luZyA6
 OmZvcGVuOw0KICB1c2luZyA6OmZwcmludGY7DQogIHVzaW5nIDo6ZnB1dGM7
 DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6ZnJlYWQ7DQogIHVzaW5n
 IDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5nIDo6ZnNl
 ZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVsbDsNCiAg
 dXNpbmcgOjpmd3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNpbmcgOjpn
 ZXRjaGFyOw0KICB1c2luZyA6OmdldHM7DQogIHVzaW5nIDo6cGVycm9yOw0K
 ICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRjOw0KICB1c2luZyA6
 OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpyZW1vdmU7
 DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsNCiAgdXNp
 bmcgOjpzY2FuZjsNCiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5nIDo6c2V0
 dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRmOw0KICB1c2luZyA6OnNzY2FuZjsN
 CiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5hbTsNCiAgdXNp
 bmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVzaW5nIDo6
 dnByaW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzIgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIgMw0KIyAz
 NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1
 bi1zb2xhcmlzMi43L2JpdHMvYysraW8uaCIgMiAzDQojIDEgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMNCiMgMzcg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4t
 c29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 Yml0cy9ndGhyLmgiIDEgMw0KIyA5OCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5o
 IiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z
 cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMN
 CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
 Yy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
 YXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0DQojIDE4ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQNCiNwcmFnbWEgaWRl
 bnQgIkAoIylwdGhyZWFkLmgJMS4yNgk5OC8wNC8xMiBTTUkiDQoNCg0KIyAx
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDI1
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KI3ByYWdt
 YSBpZGVudCAiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBTTUkiDQoNCiMg
 MSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyOCAi
 L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
 cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNA0KIyAxICIv
 dXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMjkg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
 YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQNCg0KDQoN
 Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAxIDMgNA0K
 IyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0DQojcHJh
 Z21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMgk5Ni8wOC8wMSBTTUki
 DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
 MyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAyIDMg
 NA0KDQoNCmV4dGVybiAiQyIgew0KIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9t
 YWNodHlwZXMuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBfcGh5c2Fkcl90IHsg
 aW50IHJbMV07IH0gKnBoeXNhZHJfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgX2xh
 YmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90Ow0KDQoNCg0KdHlwZWRl
 ZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsNCg0KDQp9DQojIDM0ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDQ1ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1
 ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNA0KIyA5ICIvdXNyL2luY2x1ZGUv
 c3lzL2ludF90eXBlcy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylpbnRf
 dHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIg0KIyA0MiAiL3Vzci9pbmNsdWRl
 L3N5cy9pbnRfdHlwZXMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMv
 aXNhX2RlZnMuaCIgMSAzIDQNCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvaW50
 X3R5cGVzLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDYyICIvdXNy
 L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCnR5cGVkZWYgY2hhciBp
 bnQ4X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBpbnQxNl90Ow0KdHlw
 ZWRlZiBpbnQgaW50MzJfdDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIGxvbmcg
 aW50NjRfdDsNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90
 Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsNCnR5cGVkZWYg
 dW5zaWduZWQgaW50IHVpbnQzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIHVuc2ln
 bmVkIGxvbmcgbG9uZyB1aW50NjRfdDsNCiMgOTQgIi91c3IvaW5jbHVkZS9z
 eXMvaW50X3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQ2NF90IGludG1heF90
 Ow0KdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7DQojIDExMCAiL3Vzci9p
 bmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGludCBpbnRw
 dHJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsNCg0KDQoN
 Cg0KDQoNCg0KdHlwZWRlZiBjaGFyIGludF9sZWFzdDhfdDsNCg0KDQoNCg0K
 DQp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7DQp0eXBlZGVmIGludCBp
 bnRfbGVhc3QzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgbG9uZyBpbnRf
 bGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRf
 bGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3Qx
 Nl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7DQoN
 Cg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRfbGVhc3Q2
 NF90Ow0KDQoNCg0KDQp9DQojIDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lz
 L3R5cGVzLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0K
 IyA2MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5
 cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7DQp0eXBlZGVmIHVuc2lnbmVk
 IGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7DQojIDg1ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
 Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25nIHRfc2NhbGFy
 X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdF91c2NhbGFyX3Q7DQoNCg0K
 DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7DQp0eXBlZGVm
 IHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBp
 bnQgdWludF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nX3Q7DQoN
 CnR5cGVkZWYgY2hhciAqY2FkZHJfdDsNCnR5cGVkZWYgbG9uZyBkYWRkcl90
 Ow0KdHlwZWRlZiBzaG9ydCBjbnRfdDsNCg0KDQp0eXBlZGVmIHVsb25nX3Qg
 cGFkZHJfdDsNCiMgMTI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
 aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVz
 LmgiIDMgNA0KdHlwZWRlZiB1bG9uZ190IHBmbl90Ow0KdHlwZWRlZiB1bG9u
 Z190IHBnY250X3Q7DQp0eXBlZGVmIGxvbmcgc3BnY250X3Q7DQoNCnR5cGVk
 ZWYgdWNoYXJfdCB1c2VfdDsNCnR5cGVkZWYgc2hvcnQgc3lzaWRfdDsNCnR5
 cGVkZWYgc2hvcnQgaW5kZXhfdDsNCnR5cGVkZWYgdm9pZCAqdGltZW91dF9p
 ZF90Ow0KdHlwZWRlZiB2b2lkICpidWZjYWxsX2lkX3Q7DQojIDE2MyAiL2hv
 bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
 Mi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5cGVkZWYgdWxv
 bmdfdCBpbm9fdDsNCnR5cGVkZWYgbG9uZyBibGtjbnRfdDsNCnR5cGVkZWYg
 dWxvbmdfdCBmc2Jsa2NudF90Ow0KdHlwZWRlZiB1bG9uZ190IGZzZmlsY250
 X3Q7DQojIDE4MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
 IDQNCnR5cGVkZWYgdV9sb25nbG9uZ190IGlubzY0X3Q7DQp0eXBlZGVmIGxv
 bmdsb25nX3QgYmxrY250NjRfdDsNCnR5cGVkZWYgdV9sb25nbG9uZ190IGZz
 YmxrY250NjRfdDsNCnR5cGVkZWYgdV9sb25nbG9uZ190IGZzZmlsY250NjRf
 dDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgbG9uZyBibGtzaXplX3Q7DQoNCg0K
 DQp0eXBlZGVmIGVudW0geyBfQl9GQUxTRSwgX0JfVFJVRSB9IGJvb2xlYW5f
 dDsNCiMgMjA4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
 NA0KdHlwZWRlZiBpbnQ2NF90IHBhZDY0X3Q7DQp0eXBlZGVmIHVpbnQ2NF90
 IHVwYWQ2NF90Ow0KIyAyMjEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
 LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlw
 ZXMuaCIgMyA0DQp0eXBlZGVmIGxvbmdsb25nX3Qgb2Zmc2V0X3Q7DQp0eXBl
 ZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Ow0KdHlwZWRlZiB1X2xvbmds
 b25nX3QgbGVuX3Q7DQp0eXBlZGVmIGxvbmdsb25nX3QgZGlza2FkZHJfdDsN
 CiMgMjQyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0K
 dHlwZWRlZiB1bmlvbiB7DQogICAgICAgIG9mZnNldF90IF9mOw0KICAgICAg
 ICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIGludDMyX3QgX3U7DQogICAg
 ICAgICAgICAgICAgaW50MzJfdCBfbDsNCiAgICAgICAgfSBfcDsNCn0gbGxv
 ZmZfdDsNCiMgMjYyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIv
 c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgi
 IDMgNA0KdHlwZWRlZiB1bmlvbiB7DQogICAgICAgIGRpc2thZGRyX3QgX2Y7
 DQogICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgaW50MzJfdCBf
 dTsNCiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOw0KICAgICAgICB9IF9w
 Ow0KfSBsbGRhZGRyX3Q7DQoNCg0KdHlwZWRlZiB1aW50X3Qga19mbHRzZXRf
 dDsNCiMgMjg3ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
 NA0KdHlwZWRlZiBsb25nIGlkX3Q7DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHVp
 bnRfdCB1c2Vjb25kc190Ow0KDQoNCg0KdHlwZWRlZiBsb25nIHN1c2Vjb25k
 c190Ow0KIyAzMDggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
 cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
 MyA0DQp0eXBlZGVmIHVsb25nX3QgbWFqb3JfdDsNCnR5cGVkZWYgdWxvbmdf
 dCBtaW5vcl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc2hvcnQgcHJpX3Q7DQoj
 IDMyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5
 cGVkZWYgdXNob3J0X3Qgb19tb2RlX3Q7DQp0eXBlZGVmIHNob3J0IG9fZGV2
 X3Q7DQp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7DQp0eXBlZGVmIG9fdWlk
 X3Qgb19naWRfdDsNCnR5cGVkZWYgc2hvcnQgb19ubGlua190Ow0KdHlwZWRl
 ZiBzaG9ydCBvX3BpZF90Ow0KdHlwZWRlZiB1c2hvcnRfdCBvX2lub190Ow0K
 DQoNCg0KDQoNCnR5cGVkZWYgaW50IGtleV90Ow0KDQoNCg0KdHlwZWRlZiB1
 bG9uZ190IG1vZGVfdDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBsb25nIHVp
 ZF90Ow0KDQoNCg0KdHlwZWRlZiB1aWRfdCBnaWRfdDsNCg0KDQoNCg0KDQoN
 CnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsNCnR5cGVkZWYgdW5z
 aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7DQoNCnR5cGVkZWYgc3RydWN0IF9w
 dGhyZWFkX211dGV4IHsNCiAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAg
 ICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9mbGFnWzRdOw0KICAgICAg
 ICAgICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9tdXRleF90eXBlOw0KICAg
 ICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsNCiAgICAgICAgdW5pb24g
 ew0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg
 ICAgICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9wYWRbOF07DQogICAg
 ICAgICAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0Ow0KICAgICAg
 ICAgICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9tdXRleF9vd25lcjY0Ow0K
 ICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9sb2NrOw0KICAgICAgICB1cGFk
 NjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsNCn0gcHRocmVhZF9tdXRleF90
 Ow0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jb25kIHsNCiAgICAgICAg
 c3RydWN0IHsNCiAgICAgICAgICAgICAgICB1aW50OF90IF9fcHRocmVhZF9j
 b25kX2ZsYWdbNF07DQogICAgICAgICAgICAgICAgdWludDMyX3QgX19wdGhy
 ZWFkX2NvbmRfdHlwZTsNCiAgICAgICAgfSBfX3B0aHJlYWRfY29uZF9mbGFn
 czsNCiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX2NvbmRfZGF0YTsNCn0g
 cHRocmVhZF9jb25kX3Q7DQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhy
 ZWFkX3J3bG9jayB7DQogICAgICAgIGludDMyX3QgX19wdGhyZWFkX3J3bG9j
 a19yZWFkZXJzOw0KICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfcndsb2Nr
 X3R5cGU7DQogICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfbWFn
 aWM7DQogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMVsz
 XTsNCiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQyWzJd
 Ow0KICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07
 DQp9IHB0aHJlYWRfcndsb2NrX3Q7DQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0
 IF9wdGhyZWFkX2F0dHIgew0KICAgICAgICB2b2lkICpfX3B0aHJlYWRfYXR0
 cnA7DQp9IHB0aHJlYWRfYXR0cl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc3Ry
 dWN0IF9wdGhyZWFkX211dGV4YXR0ciB7DQogICAgICAgIHZvaWQgKl9fcHRo
 cmVhZF9tdXRleGF0dHJwOw0KfSBwdGhyZWFkX211dGV4YXR0cl90Ow0KDQoN
 Cg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2NvbmRhdHRyIHsNCiAg
 ICAgICAgdm9pZCAqX19wdGhyZWFkX2NvbmRhdHRycDsNCn0gcHRocmVhZF9j
 b25kYXR0cl90Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfb25jZSB7DQog
 ICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9vbmNlX3BhZFs0XTsNCn0gcHRo
 cmVhZF9vbmNlX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJl
 YWRfcndsb2NrYXR0ciB7DQogICAgICAgIHZvaWQgKl9fcHRocmVhZF9yd2xv
 Y2thdHRycDsNCn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7DQoNCnR5cGVkZWYg
 dWxvbmdfdCBkZXZfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIHVsb25nX3Qgbmxp
 bmtfdDsNCnR5cGVkZWYgbG9uZyBwaWRfdDsNCiMgNDc2ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25nIHRpbWVf
 dDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIGNsb2NrX3Q7DQoNCg0KDQoNCnR5
 cGVkZWYgaW50IGNsb2NraWRfdDsNCg0KDQoNCg0KdHlwZWRlZiBpbnQgdGlt
 ZXJfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNo
 YXI7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsNCnR5cGVkZWYg
 dW5zaWduZWQgaW50IHVpbnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxv
 bmc7DQojIDU1MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
 IDQNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7DQp0eXBlZGVmIHVu
 c2lnbmVkIHNob3J0IHVfc2hvcnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1
 X2ludDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7DQp0eXBlZGVm
 IHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90Ow0KdHlwZWRl
 ZiBxdWFkX3QgcXVhZDsNCg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRl
 L3N5cy9zZWxlY3QuaCIgMSAzIDQNCiMgMTIgIi91c3IvaW5jbHVkZS9zeXMv
 c2VsZWN0LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXNlbGVjdC5oCTEu
 MTYJOTgvMDQvMjcgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
 dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxNSAiL3Vzci9pbmNsdWRlL3N5cy9z
 ZWxlY3QuaCIgMiAzIDQNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGlt
 ZS5oIiAxIDMgNA0KIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMg
 NA0KI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUuaAkyLjYyCTk4LzAyLzA0IFNN
 SSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIg
 MSAzIDQNCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNA0K
 DQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDkgIi91c3IvaW5jbHVk
 ZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCB0aW1ldmFsIHsNCiAgICAgICAg
 dGltZV90IHR2X3NlYzsNCiAgICAgICAgc3VzZWNvbmRzX3QgdHZfdXNlYzsN
 Cn07DQojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpzdHJ1
 Y3QgdGltZXpvbmUgew0KICAgICAgICBpbnQgdHpfbWludXRlc3dlc3Q7DQog
 ICAgICAgIGludCB0el9kc3R0aW1lOw0KfTsNCg0KDQoNCg0KDQp9DQojIDEw
 MCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNA0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDEwMSAiL3Vzci9p
 bmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0KDQpleHRlcm4gIkMiIHsN
 CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpzdHJ1Y3Qg
 aXRpbWVydmFsIHsNCiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2
 YWw7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOw0KfTsNCiMg
 MjAzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQp0eXBlZGVmIGxv
 bmdsb25nX3QgaHJ0aW1lX3Q7DQojIDMxNSAiL3Vzci9pbmNsdWRlL3N5cy90
 aW1lLmgiIDMgNA0KaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3Ry
 dWN0IHRpbWV2YWwgKik7DQojIDMyNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1l
 LmgiIDMgNA0KaW50IGdldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwg
 Kik7DQppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRp
 bWV2YWwgKik7DQoNCmludCBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3Qg
 aXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7DQojIDM2NCAiL3Vz
 ci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNA0KaW50IHNldHRpbWVvZmRheShz
 dHJ1Y3QgdGltZXZhbCAqLCB2b2lkICopOw0KDQpocnRpbWVfdCBnZXRocnRp
 bWUodm9pZCk7DQpocnRpbWVfdCBnZXRocnZ0aW1lKHZvaWQpOw0KIyAzODQg
 Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCmludCBnZXR0aW1lb2Zk
 YXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsNCiMgNDA1ICIvdXNyL2lu
 Y2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1l
 LmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCiNw
 cmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMS4zNgk5OC8wMy8yNyBTTUkiDQoN
 CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0
 DQojIDE5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDIwICIvdXNy
 L2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA2
 NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0DQpzdHJ1Y3QgdG0gew0KICAg
 ICAgICBpbnQgdG1fc2VjOw0KICAgICAgICBpbnQgdG1fbWluOw0KICAgICAg
 ICBpbnQgdG1faG91cjsNCiAgICAgICAgaW50IHRtX21kYXk7DQogICAgICAg
 IGludCB0bV9tb247DQogICAgICAgIGludCB0bV95ZWFyOw0KICAgICAgICBp
 bnQgdG1fd2RheTsNCiAgICAgICAgaW50IHRtX3lkYXk7DQogICAgICAgIGlu
 dCB0bV9pc2RzdDsNCn07DQoNCg0KDQpleHRlcm4gY2xvY2tfdCBjbG9jayh2
 b2lkKTsNCmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3Qp
 Ow0KZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOw0KZXh0ZXJu
 IHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsNCmV4dGVybiBjaGFyICphc2N0aW1l
 KGNvbnN0IHN0cnVjdCB0bSAqKTsNCmV4dGVybiBjaGFyICpjdGltZShjb25z
 dCB0aW1lX3QgKik7DQpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3Qg
 dGltZV90ICopOw0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0
 IHRpbWVfdCAqKTsNCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciAqLCBz
 aXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOw0KDQoN
 Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICos
 IHN0cnVjdCB0bSAqKTsNCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9y
 KGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQoNCg0KZXh0
 ZXJuIGNoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
 LCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUv
 c3lzL3RpbWVfaW1wbC5oIiAxIDMgNA0KIyAxNSAiL3Vzci9pbmNsdWRlL3N5
 cy90aW1lX2ltcGwuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpdGltZV9p
 bXBsLmgJMS4zCTk4LzAyLzEzIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUv
 c3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTggIi91c3IvaW5jbHVk
 ZS9zeXMvdGltZV9pbXBsLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj
 IDM2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCnR5cGVk
 ZWYgc3RydWN0IHRpbWVzcGVjIHsNCiAgICAgICAgdGltZV90IHR2X3NlYzsN
 CiAgICAgICAgbG9uZyB0dl9uc2VjOw0KfSB0aW1lc3BlY190Ow0KIyA2MCAi
 L3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0DQp0eXBlZGVmIHN0
 cnVjdCB0aW1lc3BlYyB0aW1lc3RydWNfdDsNCiMgNzkgIi91c3IvaW5jbHVk
 ZS9zeXMvdGltZV9pbXBsLmgiIDMgNA0KdHlwZWRlZiBzdHJ1Y3QgaXRpbWVy
 c3BlYyB7DQogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsN
 CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOw0KfSBpdGltZXJz
 cGVjX3Q7DQojIDEzMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIg
 MyA0DQp9DQojIDEwNCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQNCiMg
 MTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCnVuaW9uIHNpZ3ZhbCB7
 DQogICAgICAgIGludCBzaXZhbF9pbnQ7DQogICAgICAgIHZvaWQgKnNpdmFs
 X3B0cjsNCn07DQoNCg0KDQoNCnN0cnVjdCBzaWdldmVudCB7DQogICAgICAg
 IGludCBzaWdldl9ub3RpZnk7DQogICAgICAgIGludCBzaWdldl9zaWdubzsN
 CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOw0KICAgICAgICB2
 b2lkICgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBzaWd2YWwpOw0K
 ICAgICAgICBwdGhyZWFkX2F0dHJfdCAqc2lnZXZfbm90aWZ5X2F0dHJpYnV0
 ZXM7DQogICAgICAgIGludCBfX3NpZ2V2X3BhZDI7DQp9Ow0KDQoNCmV4dGVy
 biBpbnQgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVj
 ICopOw0KZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCwgc3Ry
 dWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNs
 b2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGlu
 dCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKiwg
 dGltZXJfdCAqKTsNCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3Qp
 Ow0KZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOw0KZXh0
 ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJz
 cGVjICopOw0KZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGlu
 dCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKiwNCiAgICAgICAgICAgICAg
 ICBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsNCmV4dGVybiBpbnQgbmFub3NsZWVw
 KGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7
 DQoNCg0KDQoNCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOw0KDQpleHRlcm4g
 Y2hhciAqdHpuYW1lWzJdOw0KDQoNCmV4dGVybiBsb25nIF9zeXNjb25mKGlu
 dCk7DQoNCg0KDQoNCg0KDQpleHRlcm4gbG9uZyB0aW1lem9uZTsNCmV4dGVy
 biBpbnQgZGF5bGlnaHQ7DQojIDE3NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
 MyA0DQpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNoYXIgKik7
 DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IGdldGRhdGVfZXJyOw0KIyAyNzIg
 Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMgNA0Kc3RhdGljIGNoYXIgKg0KYXNj
 dGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqX190bSwgY2hhciAqX19idWYpDQp7
 DQogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2FzY3RpbWVfcihjb25z
 dCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsNCiAgICAgICAgcmV0dXJuIChfX3Bv
 c2l4X2FzY3RpbWVfcihfX3RtLCBfX2J1ZikpOw0KfQ0Kc3RhdGljIGNoYXIg
 Kg0KY3RpbWVfcihjb25zdCB0aW1lX3QgKl9fdGltZSwgY2hhciAqX19idWYp
 DQp7DQogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2N0aW1lX3IoY29u
 c3QgdGltZV90ICosIGNoYXIgKik7DQogICAgICAgIHJldHVybiAoX19wb3Np
 eF9jdGltZV9yKF9fdGltZSwgX19idWYpKTsNCn0NCiMgMzM0ICIvdXNyL2lu
 Y2x1ZGUvdGltZS5oIiAzIDQNCn0NCiMgNDA2ICIvdXNyL2luY2x1ZGUvc3lz
 L3RpbWUuaCIgMiAzIDQNCiMgNDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu
 aCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0
 DQojIDQxOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0K
 DQoNCg0KfQ0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz
 IDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA0NSAiL3Vzci9pbmNsdWRlL3N5
 cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVmIGxvbmcgZmRfbWFzazsNCg0KdHlw
 ZWRlZiBsb25nIGZkc19tYXNrOw0KIyA3MyAiL3Vzci9pbmNsdWRlL3N5cy9z
 ZWxlY3QuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBmZF9zZXQgew0KDQoNCg0K
 ICAgICAgICBsb25nIGZkc19iaXRzWygoKDEwMjQpKygoKHNpemVvZiAoZmRz
 X21hc2spICogOCkpLTEpKS8oKHNpemVvZiAoZmRzX21hc2spICogOCkpKV07
 DQp9IGZkX3NldDsNCiMgOTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
 IDMgNA0KZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0
 ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsNCg0KDQoNCg0KDQoN
 Cn0NCiMgNTY1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
 MyA0DQojIDU4MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
 IDQNCn0NCiMgMjIgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
 cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDIg
 MyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDIzICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNA0KIyAxICIvdXNy
 L2luY2x1ZGUvc2NoZWQuaCIgMSAzIDQNCiMgMTEgIi91c3IvaW5jbHVkZS9z
 Y2hlZC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzY2hlZC5oCTEuOQk5
 OC8wMS8xNiBTTUkiDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
 Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90
 eXBlcy5oIiAxIDMgNA0KIyAxNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg
 MyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDE1ICIv
 dXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN
 Cg0KDQpzdHJ1Y3Qgc2NoZWRfcGFyYW0gew0KICAgICAgICBpbnQgc2NoZWRf
 cHJpb3JpdHk7DQogICAgICAgIGludCBzY2hlZF9uaWNlbGltOw0KICAgICAg
 ICBpbnQgc2NoZWRfbmljZTsNCiAgICAgICAgaW50IHNjaGVkX3BhZFs2XTsN
 Cg0KDQoNCn07DQojIDQ0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMyA0DQpp
 bnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFy
 YW0gKnBhcmFtKTsNCmludCBzY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIGNv
 bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOw0KaW50IHNjaGVkX2dl
 dHNjaGVkdWxlcihwaWRfdCBwaWQpOw0KaW50IHNjaGVkX3NldHNjaGVkdWxl
 cihwaWRfdCBwaWQsIGludCBwb2xpY3ksDQogICAgICAgICAgICAgICAgY29u
 c3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7DQppbnQgc2NoZWRfeWll
 bGQodm9pZCk7DQppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9s
 aWN5KTsNCmludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kp
 Ow0KaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVj
 dCB0aW1lc3BlYyAqaW50ZXJ2YWwpOw0KIyA2NSAiL3Vzci9pbmNsdWRlL3Nj
 aGVkLmgiIDMgNA0KfQ0KIyAyNCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
 Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3B0aHJl
 YWQuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA5NSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
 LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBf
 Y2xlYW51cCB7DQogICAgICAgIHVpbnRwdHJfdCBwdGhyZWFkX2NsZWFudXBf
 cGFkWzRdOw0KfSBfY2xlYW51cF90Ow0KDQoNCg0Kdm9pZCBfX3B0aHJlYWRf
 Y2xlYW51cF9wdXNoKHZvaWQgKCpyb3V0aW5lKSh2b2lkICopLCB2b2lkICph
 cmdzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IGNhZGRyX3QgZnAsIF9jbGVhbnVwX3QgKmluZm8pOw0Kdm9pZCBfX3B0aHJl
 YWRfY2xlYW51cF9wb3AoaW50IGV4LCBfY2xlYW51cF90ICppbmZvKTsNCmNh
 ZGRyX3QgX2dldGZwKHZvaWQpOw0KIyAxMjkgIi9ob21lL21kZWlsL2Jpbi8u
 Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
 ZS9wdGhyZWFkLmgiIDMgNA0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5p
 dChwdGhyZWFkX2F0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
 X2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJl
 YWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90
 KTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZShjb25z
 dCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7DQpleHRlcm4gaW50IHB0
 aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgKiwgdm9p
 ZCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihj
 b25zdCBwdGhyZWFkX2F0dHJfdCAqLCB2b2lkICoqKTsNCmV4dGVybiBpbnQg
 cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICos
 IGludCk7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0
 ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50
 IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQp
 Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUoY29uc3QgcHRo
 cmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0
 dHJfc2V0aW5oZXJpdHNjaGVkKHB0aHJlYWRfYXR0cl90ICosIGludCk7DQpl
 eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3Qg
 cHRocmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFk
 X2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiwgaW50KTsN
 CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5KGNvbnN0
 IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
 ZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1
 Y3Qgc2NoZWRfcGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
 ZXRzY2hlZHBhcmFtKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVk
 X3BhcmFtICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFk
 X3QgKiwgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgdm9pZCAqICgqKSh2b2lkICopLCB2b2lkICop
 Ow0KZXh0ZXJuIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKiwg
 dm9pZCAoKikodm9pZCkpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4ocHRo
 cmVhZF90LCB2b2lkICoqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2go
 cHRocmVhZF90KTsNCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCh2b2lkICop
 Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbChwdGhyZWFkX3QpOw0KZXh0
 ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90LCBpbnQs
 IGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsNCmV4dGVybiBpbnQgcHRo
 cmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50ICosIHN0cnVjdCBz
 Y2hlZF9wYXJhbSAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxz
 dGF0ZShpbnQsIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5j
 ZWx0eXBlKGludCwgaW50ICopOw0KZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0
 Y2FuY2VsKHZvaWQpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsKHB0aHJl
 YWRfdCwgcHRocmVhZF90KTsNCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl
 YXRlKHB0aHJlYWRfa2V5X3QgKiwgdm9pZCAoKikodm9pZCAqKSk7DQpleHRl
 cm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90KTsNCmV4
 dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90LCBj
 b25zdCB2b2lkICopOw0KZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lm
 aWMocHRocmVhZF9rZXlfdCk7DQpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRf
 c2VsZih2b2lkKTsNCg0KDQoNCg0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
 YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7DQpleHRlcm4gaW50
 IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kocHRocmVhZF9tdXRleGF0dHJf
 dCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJl
 ZChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRlcm4gaW50IHB0
 aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9tdXRl
 eGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhh
 dHRyX3NldHByb3RvY29sKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsN
 CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2woY29u
 c3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50
 IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0
 ZXhhdHRyX3QgKiwgaW50KTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0
 dHJfZ2V0cHJpb2NlaWxpbmcoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq
 LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhy
 ZWFkX211dGV4X3QgKiwgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqKTsN
 CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0
 ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJl
 YWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxv
 Y2socHRocmVhZF9tdXRleF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211
 dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICopOw0KZXh0ZXJuIGludCBw
 dGhyZWFkX211dGV4X3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhfdCAq
 LCBpbnQsIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9nZXRw
 cmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50ICopOw0KZXh0ZXJu
 IGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQocHRocmVhZF9jb25kYXR0cl90
 ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kocHRo
 cmVhZF9jb25kYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh
 dHRyX3NldHBzaGFyZWQocHRocmVhZF9jb25kYXR0cl90ICosIGludCk7DQpl
 eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBw
 dGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy
 ZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqLCBjb25zdCBwdGhyZWFk
 X2NvbmRhdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0
 cm95KHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2Nv
 bmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJuIGludCBw
 dGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJu
 IGludCBwdGhyZWFkX2NvbmRfd2FpdChwdGhyZWFkX2NvbmRfdCAqLCBwdGhy
 ZWFkX211dGV4X3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1l
 ZHdhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
 c3RydWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
 Z2V0Z3VhcmRzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAq
 KTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhy
 ZWFkX2F0dHJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2dl
 dGNvbmN1cnJlbmN5KHZvaWQpOw0KZXh0ZXJuIGludCBwdGhyZWFkX3NldGNv
 bmN1cnJlbmN5KGludCBuZXd2YWwpOw0KZXh0ZXJuIGludCBwdGhyZWFkX211
 dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsN
 CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBw
 dGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRo
 cmVhZF9yd2xvY2tfaW5pdChwdGhyZWFkX3J3bG9ja190ICosDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfcndsb2Nr
 YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95
 KHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcnds
 b2NrX3JkbG9jayhwdGhyZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBw
 dGhyZWFkX3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsN
 CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKHB0aHJlYWRfcnds
 b2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9j
 ayhwdGhyZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3
 bG9ja191bmxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQg
 cHRocmVhZF9yd2xvY2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3Qg
 Kik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0
 aHJlYWRfcndsb2NrYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3
 bG9ja2F0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
 dCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9z
 ZXRwc2hhcmVkKHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCk7DQojIDMw
 NCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
 b2xhcmlzMi43LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0DQp9DQojIDM4
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzDQoNCnR5cGVk
 ZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7DQp0eXBlZGVmIHB0
 aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7DQp0eXBlZGVmIHB0aHJl
 YWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsNCg0KDQoNCg0KDQoNCiNw
 cmFnbWEgd2VhayBwdGhyZWFkX29uY2UNCiNwcmFnbWEgd2VhayBwdGhyZWFk
 X2tleV9jcmVhdGUNCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUN
 CiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljDQojcHJhZ21hIHdl
 YWsgcHRocmVhZF9zZXRzcGVjaWZpYw0KI3ByYWdtYSB3ZWFrIHB0aHJlYWRf
 Y3JlYXRlDQoNCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sNCiNw
 cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sNCiNwcmFnbWEgd2Vh
 ayBwdGhyZWFkX211dGV4X3VubG9jaw0KIyA3OCAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv
 Z3Roci1kZWZhdWx0LmgiIDMNCnN0YXRpYyB2b2lkICpfX2d0aHJlYWRfYWN0
 aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsNCg0Kc3RhdGlj
 IGlubGluZSBpbnQNCl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkNCnsNCiAg
 cmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7DQp9DQojIDQyNyAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z
 b2xhcmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMNCnN0YXRpYyBpbmxp
 bmUgaW50DQpfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25j
 ZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkNCnsNCiAgaWYgKF9fZ3RocmVhZF9h
 Y3RpdmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBm
 dW5jKTsNCiAgZWxzZQ0KICAgIHJldHVybiAtMTsNCn0NCg0Kc3RhdGljIGlu
 bGluZSBpbnQNCl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5
 X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQ0Kew0KICByZXR1cm4g
 cHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOw0KfQ0KDQpzdGF0aWMg
 aW5saW5lIGludA0KX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5
 X3Qga2V5LCB2b2lkICpwdHIpDQp7DQoNCiAgaWYgKHB0cikNCiAgICByZXR1
 cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsNCiAgZWxzZQ0KICAg
 IHJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFk
 X2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpDQp7DQogIHJldHVy
 biBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7DQp9DQoNCnN0YXRpYyBpbmxp
 bmUgdm9pZCAqDQpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9r
 ZXlfdCBrZXkpDQp7DQogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChr
 ZXkpOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX3NldHNw
 ZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIp
 DQp7DQogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7
 DQp9DQoNCnN0YXRpYyBpbmxpbmUgaW50DQpfX2d0aHJlYWRfbXV0ZXhfbG9j
 ayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQ0Kew0KICBpZiAoX19ndGhy
 ZWFkX2FjdGl2ZV9wICgpKQ0KICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xv
 Y2sgKG11dGV4KTsNCiAgZWxzZQ0KICAgIHJldHVybiAwOw0KfQ0KDQpzdGF0
 aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3Ro
 cmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9hY3Rp
 dmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrICht
 dXRleCk7DQogIGVsc2UNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlu
 bGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9t
 dXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAo
 KSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsN
 CiAgZWxzZQ0KICAgIHJldHVybiAwOw0KfQ0KIyA5OSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp
 dHMvZ3Roci5oIiAyIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2lvLmgi
 IDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdHlwZWRlZiBsb25nIHN0
 cmVhbW9mZjsNCiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsNCg0K
 DQoNCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsNCg0KICB0eXBl
 ZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOw0KDQoNCg0KICB0eXBl
 ZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsNCg0KDQogIHN0cnVjdCBfX2lvc19m
 bGFncw0KICB7DQogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOw0KDQog
 ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw
 MDAxOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4
 MDAwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9
 IDB4MDAwNDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXgg
 PSAweDAwMDg7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50
 ZXJuYWwgPSAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
 X1NfbGVmdCA9IDB4MDAyMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
 ZSBfU19vY3QgPSAweDAwNDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
 cGUgX1NfcmlnaHQgPSAweDAwODA7DQogICAgc3RhdGljIGNvbnN0IF9faW50
 X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsNCiAgICBzdGF0aWMgY29u
 c3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsNCiAgICBzdGF0
 aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7DQog
 ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgw
 MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAw
 eDEwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1
 ZiA9IDB4MjAwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191
 cHBlcmNhc2UgPSAweDQwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
 cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7
 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g
 MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBf
 X2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7DQoN
 Cg0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4
 MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g
 MHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0
 ID0gMHgwNDsNCg0KDQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
 YXBwID0gMHgwMTsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19h
 dGUgPSAweDAyOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jp
 biA9IDB4MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4g
 PSAweDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9
 IDB4MTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMg
 PSAweDIwOw0KICB9Ow0KfQ0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAx
 IDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9jd2NoYXIuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytj
 b25maWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
 IiAxIDMNCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzDQojIDQyICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMNCiMg
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
 b2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDEgMyA0DQojIDE4ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQojcHJhZ21hIGlkZW50
 ICJAKCMpd2NoYXIuaAkxLjMxCTk4LzA1LzA0IFNNSSINCg0KIyAxICIvdXNy
 L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMjEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KIyAxICIvdXNyL2lu
 Y2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQojIDIyICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N0
 ZGlvX3RhZy5oIiAxIDMgNA0KIyAyMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
 Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3dj
 aGFyLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgi
 IDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDMgNA0K
 I3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyX2ltcGwuaAkxLjIJOTgvMDIvMjcg
 U01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAz
 IDQNCiMgMTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0DQoN
 Cg0KZXh0ZXJuICJDIiB7DQoNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQoNCg0K
 DQogICAgICAgIGludCBfX2ZpbGxlcls2XTsNCg0KfSBfX21ic3RhdGVfdDsN
 Cg0KDQoNCn0NCiMgMjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAy
 IDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyNSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
 cmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KDQoNCiMg
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
 b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0DQojIDMwICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQoNCiMgMSAi
 L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1
 ZGUvY3R5cGUuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpY3R5cGUuaAkx
 LjMwCTk4LzAxLzE2IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Zl
 YXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9jdHlw
 ZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA0OCAiL3Vzci9pbmNs
 dWRlL2N0eXBlLmgiIDMgNA0KZXh0ZXJuIGludCBpc2FsbnVtKGludCk7DQpl
 eHRlcm4gaW50IGlzYWxwaGEoaW50KTsNCmV4dGVybiBpbnQgaXNjbnRybChp
 bnQpOw0KZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7DQpleHRlcm4gaW50IGlz
 Z3JhcGgoaW50KTsNCmV4dGVybiBpbnQgaXNsb3dlcihpbnQpOw0KZXh0ZXJu
 IGludCBpc3ByaW50KGludCk7DQpleHRlcm4gaW50IGlzcHVuY3QoaW50KTsN
 CmV4dGVybiBpbnQgaXNzcGFjZShpbnQpOw0KZXh0ZXJuIGludCBpc3VwcGVy
 KGludCk7DQpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7DQpleHRlcm4gaW50
 IHRvbG93ZXIoaW50KTsNCmV4dGVybiBpbnQgdG91cHBlcihpbnQpOw0KDQoN
 Cg0KDQpleHRlcm4gaW50IGlzYXNjaWkoaW50KTsNCmV4dGVybiBpbnQgdG9h
 c2NpaShpbnQpOw0KZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOw0KZXh0ZXJu
 IGludCBfdG91cHBlcihpbnQpOw0KDQoNCg0KZXh0ZXJuIHVuc2lnbmVkIGNo
 YXIgX19jdHlwZVtdOw0KZXh0ZXJuIHVuc2lnbmVkIGludCAqX19jdHlwZV9t
 YXNrOw0KZXh0ZXJuIGludCAqX190cmFuc191cHBlcjsNCmV4dGVybiBpbnQg
 Kl9fdHJhbnNfbG93ZXI7DQojIDE2MyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
 IDMgNA0KfQ0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
 L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIg
 MyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
 Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQN
 CiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
 dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KDQoN
 CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0DQojIDM4
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQpleHRl
 cm4gIkMiIHsNCiMgNjEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAz
 IDQNCnR5cGVkZWYgbG9uZyB3aW50X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBp
 bnQgd2N0eXBlX3Q7DQojIDEwMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
 Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFy
 LmgiIDMgNA0KdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7DQojIDEx
 MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
 b2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0ZXJuIGlu
 dCBpc3dhbHBoYSh3aW50X3QpOw0KZXh0ZXJuIGludCBpc3d1cHBlcih3aW50
 X3QpOw0KZXh0ZXJuIGludCBpc3dsb3dlcih3aW50X3QpOw0KZXh0ZXJuIGlu
 dCBpc3dkaWdpdCh3aW50X3QpOw0KZXh0ZXJuIGludCBpc3d4ZGlnaXQod2lu
 dF90KTsNCmV4dGVybiBpbnQgaXN3YWxudW0od2ludF90KTsNCmV4dGVybiBp
 bnQgaXN3c3BhY2Uod2ludF90KTsNCmV4dGVybiBpbnQgaXN3cHVuY3Qod2lu
 dF90KTsNCmV4dGVybiBpbnQgaXN3cHJpbnQod2ludF90KTsNCmV4dGVybiBp
 bnQgaXN3Z3JhcGgod2ludF90KTsNCmV4dGVybiBpbnQgaXN3Y250cmwod2lu
 dF90KTsNCmV4dGVybiBpbnQgaXN3Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7
 DQpleHRlcm4gd2ludF90IHRvd2xvd2VyKHdpbnRfdCk7DQpleHRlcm4gd2lu
 dF90IHRvd3VwcGVyKHdpbnRfdCk7DQpleHRlcm4gd2ludF90IGZnZXR3Yyhf
 X0ZJTEUgKik7DQpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwg
 aW50LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IGZwdXR3Yyh3aW50X3Qs
 IF9fRklMRSAqKTsNCmV4dGVybiBpbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3Qg
 KiwgX19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwg
 X19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBnZXR3YyhfX0ZJTEUgKik7DQpl
 eHRlcm4gd2ludF90IGdldHdjaGFyKHZvaWQpOw0KZXh0ZXJuIHdpbnRfdCBw
 dXR3Yyh3aW50X3QsIF9fRklMRSAqKTsNCmV4dGVybiB3aW50X3QgcHV0d2No
 YXIod2ludF90KTsNCmV4dGVybiBkb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFy
 X3QgKiwgd2NoYXJfdCAqKik7DQpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qg
 d2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOw0KZXh0ZXJuIHVuc2lnbmVk
 IGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGlu
 dCk7DQpleHRlcm4gd2NoYXJfdCAqd2NzY2F0KHdjaGFyX3QgKiwgY29uc3Qg
 d2NoYXJfdCAqKTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2No
 YXJfdCAqLCB3Y2hhcl90KTsNCmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdj
 aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiBpbnQgd2NzY29s
 bChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4g
 d2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsN
 CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0
 IHdjaGFyX3QgKik7DQpleHRlcm4gc2l6ZV90IHdjc2xlbihjb25zdCB3Y2hh
 cl90ICopOw0KZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBj
 b25zdCB3Y2hhcl90ICosIHNpemVfdCk7DQpleHRlcm4gaW50IHdjc25jbXAo
 Y29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7DQpl
 eHRlcm4gd2NoYXJfdCAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFy
 X3QgKiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrKGNvbnN0
 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiB3Y2hhcl90
 ICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7DQpleHRlcm4g
 c2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
 Kik7DQpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwg
 Y29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qg
 d2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtKHdj
 aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGlu
 dCB3Y3dpZHRoKGNvbnN0IHdjaGFyX3QpOw0KZXh0ZXJuIHdjdHlwZV90IHdj
 dHlwZShjb25zdCBjaGFyICopOw0KIyAxNjkgIi9ob21lL21kZWlsL2Jpbi8u
 Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
 ZS93Y2hhci5oIiAzIDQNCmV4dGVybiB3Y2hhcl90ICpfX3djc3Rva194cGc1
 KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsNCmV4
 dGVybiBzaXplX3QgX193Y3NmdGltZV94cGc1KHdjaGFyX3QgKiwgc2l6ZV90
 LCBjb25zdCB3Y2hhcl90ICosDQogICAgICAgIGNvbnN0IHN0cnVjdCB0bSAq
 KTsNCiMgMTgwICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQpl
 eHRlcm4gd2ludF90IGJ0b3djKGludCk7DQpleHRlcm4gaW50IGZ3cHJpbnRm
 KF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7DQpleHRlcm4gaW50
 IGZ3c2NhbmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsNCmV4
 dGVybiBpbnQgZndpZGUoX19GSUxFICosIGludCk7DQpleHRlcm4gaW50IG1i
 c2luaXQoY29uc3QgbWJzdGF0ZV90ICopOw0KZXh0ZXJuIHNpemVfdCBtYnJs
 ZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCmV4dGVy
 biBzaXplX3QgbWJydG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6
 ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyh3
 Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJzdGF0ZV90ICop
 Ow0KZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwgY29u
 c3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGludCBzd3NjYW5mKGNvbnN0
 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGlu
 dCB2ZndwcmludGYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgX192YV9s
 aXN0KTsNCmV4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCAqLCBf
 X3ZhX2xpc3QpOw0KZXh0ZXJuIGludCB2c3dwcmludGYod2NoYXJfdCAqLCBz
 aXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgX192YV9saXN0KTsNCmV4dGVybiBz
 aXplX3Qgd2NydG9tYihjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsN
 CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJf
 dCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gd2NoYXJfdCAq
 d2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4
 dGVybiBpbnQgd2N0b2Iod2ludF90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVt
 Y2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsNCmV4dGVy
 biBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
 Kiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3Qg
 KiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIHdjaGFyX3Qg
 KndtZW1tb3ZlKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3Qp
 Ow0KZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQod2NoYXJfdCAqLCB3Y2hhcl90
 LCBzaXplX3QpOw0KZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3Qg
 KiwgLi4uKTsNCmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwg
 Li4uKTsNCiMgMzE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIv
 c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0
 DQpleHRlcm4gd2ludF90IF9fZmdldHdjX3hwZzUoX19GSUxFICopOw0KZXh0
 ZXJuIHdpbnRfdCBfX2dldHdjX3hwZzUoX19GSUxFICopOw0KZXh0ZXJuIHdp
 bnRfdCBfX2dldHdjaGFyX3hwZzUodm9pZCk7DQpleHRlcm4gd2ludF90IF9f
 ZnB1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90
 IF9fcHV0d2NfeHBnNSh3aW50X3QsIF9fRklMRSAqKTsNCmV4dGVybiB3aW50
 X3QgX19wdXR3Y2hhcl94cGc1KHdpbnRfdCk7DQpleHRlcm4gd2NoYXJfdCAq
 X19mZ2V0d3NfeHBnNSh3Y2hhcl90ICosIGludCwgX19GSUxFICopOw0KZXh0
 ZXJuIGludCBfX2ZwdXR3c194cGc1KGNvbnN0IHdjaGFyX3QgKiwgX19GSUxF
 ICopOw0KZXh0ZXJuIHdpbnRfdCBfX3VuZ2V0d2NfeHBnNSh3aW50X3QsIF9f
 RklMRSAqKTsNCiMgMzUyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
 aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIg
 MyA0DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfY3djaGFyLmgiIDIgMw0KIyA1NyAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzDQpu
 YW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6bWJzdGF0ZV90Ow0KfQ0KIyA0
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBv
 cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGZwb3MNCiAgICB7DQog
 ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90
 eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7
 DQogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7DQoNCiAgICBwdWJsaWM6DQog
 ICAgICBfX3N0YXRlX3R5cGUNCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1
 cm4gX01fc3Q7IH0NCg0KICAgICAgdm9pZA0KICAgICAgc3RhdGUoX19zdGF0
 ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9DQoNCg0KDQogICAgICBm
 cG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlw
 ZSgpKSB7IH0NCg0KICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3Rh
 dGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpDQogICAgICA6IF9NX29m
 ZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQ0KDQogICAgICBvcGVyYXRvciBz
 dHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAg
 ZnBvcyYNCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9N
 X29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGZwb3Mm
 DQogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYg
 LT0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zDQogICAg
 ICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQ0KICAgICAgew0KICAgICAg
 ICBmcG9zIF9fdCgqdGhpcyk7DQogICAgICAgIF9fdCArPSBfX29mZjsNCiAg
 ICAgICAgcmV0dXJuIF9fdDsNCiAgICAgIH0NCg0KICAgICAgZnBvcw0KICAg
 ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAg
 ICAgZnBvcyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgLT0gX19vZmY7DQog
 ICAgICAgIHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGJvb2wNCiAg
 ICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0DQogICAg
 ICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAg
 IGJvb2wNCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNv
 bnN0DQogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9
 DQoNCiAgICAgIHN0cmVhbW9mZg0KICAgICAgX01fcG9zaXRpb24oKSBjb25z
 dCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgdm9pZA0KICAgICAgX01f
 cG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9
 DQogICAgfTsNCg0KDQogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh
 bXBvczsNCg0KDQoNCn0NCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
 LmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz
 DQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQog
 IHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOw0KDQoNCiAg
 dm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0KDQogIHZvaWQN
 CiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhy
 b3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19s
 b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190
 aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk
 DQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3Mp
 Ow0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh
 ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNv
 bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3J1bnRpbWVf
 ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
 cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f
 dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2
 b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
 cyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg
 Y2hhciogX19zKTsNCn0NCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQoNCm5hbWVzcGFj
 ZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3Mg
 YmFzaWNfaW9zOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNs
 YXNzIGJhc2ljX3N0cmVhbWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
 ID4NCiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
 PF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
 cl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
 aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgIHR5cGVu
 YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi
 YXNpY19zdHJpbmdidWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAg
 ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g
 Pg0KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
 cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g
 YWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdz
 dHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAg
 dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNs
 YXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
 clQ+ID4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmOw0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
 aXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOw0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29mc3Ry
 ZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJh
 c2ljX2ZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAg
 Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
 Q2hhclQ+ID4NCiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOw0KDQoN
 Cg0KICBjbGFzcyBpb3NfYmFzZTsNCg0KDQogIHR5cGVkZWYgYmFzaWNfaW9z
 PGNoYXI+IGlvczsNCiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4g
 c3RyZWFtYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0
 cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07
 DQogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07DQog
 IHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsNCiAg
 dHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJl
 YW07DQogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3Ry
 aW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFy
 PiBzdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFy
 PiBmaWxlYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlm
 c3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3Ry
 ZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsN
 CiMgMTI5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfaW9zZndkLmgiIDMNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEg
 Mw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4
 Y2VwdGlvbiIgMw0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0ZA0K
 ew0KICBjbGFzcyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgZXhj
 ZXB0aW9uKCkgdGhyb3coKSB7IH0NCiAgICB2aXJ0dWFsIH5leGNlcHRpb24o
 KSB0aHJvdygpOw0KICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNv
 bnN0IHRocm93KCk7DQogIH07DQoNCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6
 IHB1YmxpYyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2V4
 Y2VwdGlvbigpIHRocm93KCkgeyB9DQogICAgdmlydHVhbCB+YmFkX2V4Y2Vw
 dGlvbigpIHRocm93KCk7DQogIH07DQoNCiAgdHlwZWRlZiB2b2lkICgqdGVy
 bWluYXRlX2hhbmRsZXIpICgpOw0KICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVj
 dGVkX2hhbmRsZXIpICgpOw0KDQogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90
 ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7DQogIHZvaWQg
 dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0K
 DQogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVj
 dGVkX2hhbmRsZXIpIHRocm93KCk7DQogIHZvaWQgdW5leHBlY3RlZCgpIF9f
 YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KICBib29sIHVuY2F1
 Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7DQp9DQoNCn0NCiMgNDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg
 MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2NoYXJfdHJhaXRzLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMw0KDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9jc3RyaW5nLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMw0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
 Zi5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMw0KIyA0MCAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIg
 Mw0KIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0DQojIDQxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
 cmluZy5oIiAyIDMNCiMgNjYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCm5hbWVzcGFjZSBzdGQN
 CnsNCiAgdXNpbmcgOjptZW1jcHk7DQogIHVzaW5nIDo6bWVtbW92ZTsNCiAg
 dXNpbmcgOjpzdHJjcHk7DQogIHVzaW5nIDo6c3RybmNweTsNCiAgdXNpbmcg
 OjpzdHJjYXQ7DQogIHVzaW5nIDo6c3RybmNhdDsNCiAgdXNpbmcgOjptZW1j
 bXA7DQogIHVzaW5nIDo6c3RyY21wOw0KICB1c2luZyA6OnN0cmNvbGw7DQog
 IHVzaW5nIDo6c3RybmNtcDsNCiAgdXNpbmcgOjpzdHJ4ZnJtOw0KICB1c2lu
 ZyA6OnN0cmNzcG47DQogIHVzaW5nIDo6c3Ryc3BuOw0KICB1c2luZyA6OnN0
 cnRvazsNCiAgdXNpbmcgOjptZW1zZXQ7DQogIHVzaW5nIDo6c3RyZXJyb3I7
 DQogIHVzaW5nIDo6c3RybGVuOw0KDQogIHVzaW5nIDo6bWVtY2hyOw0KDQog
 IGlubGluZSB2b2lkKg0KICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBz
 aXplX3QgX19uKQ0KICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25z
 dCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9DQoNCiAgdXNpbmcgOjpzdHJj
 aHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cmNocihjaGFyKiBfX3MxLCBp
 bnQgX19uKQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nh
 c3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9DQoNCiAgdXNpbmcgOjpz
 dHJwYnJrOw0KDQogIGlubGluZSBjaGFyKg0KICBzdHJwYnJrKGNoYXIqIF9f
 czEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z
 dHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsg
 fQ0KDQogIHVzaW5nIDo6c3RycmNocjsNCg0KICBpbmxpbmUgY2hhcioNCiAg
 c3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQ0KICB7IHJldHVybiBfX2J1
 aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg
 X19uKTsgfQ0KDQogIHVzaW5nIDo6c3Ryc3RyOw0KDQogIGlubGluZSBjaGFy
 Kg0KICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikNCiAg
 eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNo
 YXIqPihfX3MxKSwgX19zMik7IH0NCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9m
 cG9zLmgiIDEgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzDQoNCm5hbWVzcGFjZSBz
 dGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPg0KICAgIHN0
 cnVjdCBjaGFyX3RyYWl0cw0KICAgIHsNCiAgICAgIHR5cGVkZWYgX0NoYXJU
 IGNoYXJfdHlwZTsNCg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
 dF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7DQog
 ICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0YXRpYyB2b2lk
 DQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5
 cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoNCiAgICAgIHN0
 YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv
 bnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0g
 X19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgbHQoY29uc3Qg
 Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAg
 ICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50
 DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
 Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAgew0KICAgICAg
 ICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQ0KICAg
 ICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19faV0pKQ0KICAgICAg
 ICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDog
 MTsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgICAgIHN0YXRp
 YyBzaXplX3QNCiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykN
 CiAgICAgIHsNCiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7
 DQogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsNCiAgICAgICAgcmV0dXJu
 IChfX3AgLSBfX3MpOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg
 Y2hhcl90eXBlKg0KICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywg
 c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpDQogICAgICB7DQog
 ICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVf
 dChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkNCiAgICAgICAgICBpZiAoKl9f
 cCA9PSBfX2EpIHJldHVybiBfX3A7DQogICAgICAgIHJldHVybiAwOw0KICAg
 ICAgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgbW92ZShj
 aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90
 IF9fbikNCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9f
 czEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAg
 ICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9f
 czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAg
 IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19u
 ICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9DQoNCiAgICAgIHN0YXRpYyBjaGFy
 X3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBf
 X24sIGNoYXJfdHlwZSBfX2EpDQogICAgICB7DQogICAgICAgIGZvciAoY2hh
 cl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApDQog
 ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7DQogICAgICAgIHJldHVybiBf
 X3M7DQogICAgICB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAg
 IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyBy
 ZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGludF90
 eXBlDQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykg
 eyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQ0KDQogICAgICBzdGF0aWMgYm9v
 bA0KICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
 bnN0IGludF90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19jMSA9PSBf
 X2MyOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgZW9mKCkg
 eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0xKTsgfQ0KDQogICAg
 ICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5
 cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9m
 KCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0NCiAgICB9Ow0KDQoNCg0KICB0
 ZW1wbGF0ZTw+DQogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+DQogICAg
 ew0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgaW50IGludF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z
 X3R5cGU7DQogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0
 YXRpYyB2b2lkDQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25z
 dCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoN
 CiAgICAgIHN0YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUm
 IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJu
 IF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAg
 bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
 YzIpDQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBz
 dGF0aWMgaW50DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19z
 MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAg
 eyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0NCg0KICAgICAg
 c3RhdGljIHNpemVfdA0KICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog
 X19zKQ0KICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0NCg0KICAgICAg
 c3RhdGljIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hh
 cl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19h
 KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBl
 Kj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMg
 Y2hhcl90eXBlKg0KICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0
 IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJu
 IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwg
 X19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIGNv
 cHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
 emVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5
 cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0NCg0KICAgICAgc3Rh
 dGljIGNoYXJfdHlwZSoNCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg
 c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkNCiAgICAgIHsgcmV0dXJuIHN0
 YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7
 IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZQ0KICAgICAgdG9fY2hhcl90
 eXBlKGNvbnN0IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0
 aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0NCg0KDQoNCiAgICAgIHN0YXRp
 YyBpbnRfdHlwZQ0KICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl
 JiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
 c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0NCg0KICAgICAg
 c3RhdGljIGJvb2wNCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBl
 JiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJu
 IF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAg
 ICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEp
 KTsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2Yo
 Y29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIChfX2MgPT0g
 ZW9mKCkpID8gMCA6IF9fYzsgfQ0KICB9Ow0KIyAyNjQgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gNCiAgICB7DQogICAg
 ICBfQ2hhclQgX01fYzsNCiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hh
 clQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9DQoNCiAgICAgIGJvb2wN
 CiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJu
 IF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0NCiAgICB9Ow0KfQ0KIyA0MiAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
 cy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xv
 Y2FsZWZ3ZC5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzDQoNCiMgMSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz
 Mi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMw0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvYml0cy9jKytsb2NhbGUuaCIgMSAzDQojIDM2ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvYml0cy9jKytsb2NhbGUuaCIgMw0KbmFtZXNwYWNlIHN0ZA0K
 ew0KICB0eXBlZGVmIGludCogX19jX2xvY2FsZTsNCn0NCiMgNDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5o
 IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
 c29sYXJpczIuNy8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQNCiMgMTEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
 YXJpczIuNy8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMyA0DQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQNCiMgMjUgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0DQojcHJhZ21hIGlkZW50
 ICJAKCMpbGltaXRzLmgJMS40OAk5OC8wNy8yMCBTTUkiDQoNCiMgMSAiL3Vz
 ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDI4ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQojIDEgIi91
 c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgMjkgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQNCiMgNDAgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5j
 bHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMgNA0KIyA5ICIvdXNyL2luY2x1
 ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMp
 aW50X2xpbWl0cy5oCTEuNQk5OC8wMS8wNiBTTUkiDQojIDQ0ICIvdXNyL2lu
 Y2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk
 ZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgNDUgIi91c3IvaW5jbHVkZS9z
 eXMvaW50X2xpbWl0cy5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAx
 NjIgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQNCn0NCiMg
 NDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
 c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQNCg0K
 DQoNCmV4dGVybiAiQyIgew0KIyAzMDcgIi9ob21lL21kZWlsL2Jpbi8uLi9s
 aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
 eXNsaW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3Rk
 LmgiIDEgMyA0DQojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAz
 IDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl1bmlzdGQuaAkxLjM2CTk4LzA3LzE2
 IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu
 aCIgMSAzIDQNCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDIg
 MyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDI2NCAiL3Vzci9pbmNsdWRlL3N5
 cy91bmlzdGQuaCIgMyA0DQp9DQojIDMwOCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRl
 L3N5c2xpbWl0cy5oIiAyIDMgNA0KIyAzMTggIi9ob21lL21kZWlsL2Jpbi8u
 Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
 ZS9zeXNsaW1pdHMuaCIgMyA0DQpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQp
 Ow0KIyAzMjggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
 Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0
 DQp9DQojIDEyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0
 DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfY2xpbWl0cy5oIiAyIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
 cmluZy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMw0KDQojIDEgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIu
 Ny9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 cmluZ2Z3ZC5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRz
 LmgiIDEgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDEg
 Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2l0ZXJhdG9yLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysr
 Y29uZmlnLmgiIDEgMw0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMw0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
 Zi5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAx
 IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
 ZXMuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQoNCm5h
 bWVzcGFjZSBzdGQNCnsNCg0Kc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7
 fTsNCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9Ow0Kc3RydWN0IGZv
 cndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3Rh
 ZyB7fTsNCnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1
 YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCByYW5kb21f
 YWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0
 ZXJhdG9yX3RhZyB7fTsNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
 VHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsN
 CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
 cnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rp
 c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50
 ZXI7DQogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7DQp9Ow0KDQpzdHJ1Y3Qg
 b3V0cHV0X2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf
 dGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVf
 dHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlw
 ZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7
 DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
 IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBmb3J3YXJk
 X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf
 VHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j
 ZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBf
 VHAmIHJlZmVyZW5jZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg
 Y2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
 ciB7DQogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl
 cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQog
 IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRl
 ZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7DQp9
 Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
 cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiByYW5k
 b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg
 dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2Ug
 ZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAg
 dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfQ2F0ZWdvcnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRy
 ZGlmZl90LA0KICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xh
 c3MgX1JlZmVyZW5jZSA9IF9UcCY+DQpzdHJ1Y3QgaXRlcmF0b3Igew0KICB0
 eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl
 ZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVy
 ZW5jZV90eXBlOw0KICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7DQogIHR5
 cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0l0ZXJhdG9yPg0Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQog
 IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29y
 eSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl
 cmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBl
 bmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5
 cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBv
 aW50ZXI7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVu
 Y2UgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0
 cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gew0KICB0eXBlZGVmIHJhbmRv
 bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0
 eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBk
 aWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0
 eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNz
 IF9UcD4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gew0K
 ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
 X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl
 ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgY29u
 c3QgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJl
 bmNlOw0KfTsNCiMgMTQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
 dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCl9faXRlcmF0b3Jf
 Y2F0ZWdvcnkoY29uc3QgX0l0ZXImKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1l
 IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9D
 YXRlZ29yeTsNCiAgcmV0dXJuIF9DYXRlZ29yeSgpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
 aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKg0KX19kaXN0YW5jZV90eXBl
 KGNvbnN0IF9JdGVyJikNCnsNCiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu
 YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+
 KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlw
 ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoNCl9f
 dmFsdWVfdHlwZShjb25zdCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNf
 Y2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90
 eXBlKj4oMCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGlu
 ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
 YXRlZ29yeQ0KaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkg
 eyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9DQoNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
 X3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoNCmRpc3RhbmNlX3R5
 cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBl
 KF9faSk7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5
 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQp2
 YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVf
 dHlwZShfX2kpOyB9DQoNCn0NCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
 ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m
 dW5jcy5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQojIDM0ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr
 LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAz
 DQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9jb25jZXB0X2NoZWNrLmgiIDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
 Y3MuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N
 CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
 dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0Kew0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgd2hpbGUgKF9fZmlyc3Qg
 IT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0NCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
 bmNlPg0KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRl
 cmF0b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
 bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
 bmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlz
 dGFuY2UmIF9fbikNCnsNCg0KICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
 dCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFt
 ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl
 X3R5cGUNCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
 cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQoN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICB0eXBlbmFtZSBpdGVyYXRv
 cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u
 ID0gMDsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgKytf
 X2ZpcnN0OyArK19fbjsNCiAgfQ0KICByZXR1cm4gX19uOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5saW5lIHR5
 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
 OjpkaWZmZXJlbmNlX3R5cGUNCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0
 ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
 DQogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0Kew0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBy
 ZXR1cm4gX19sYXN0IC0gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
 YWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KZGlzdGFu
 Y2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
 YXN0KQ0Kew0KDQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
 PF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICBfQ2F0
 ZWdvcnk7DQogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
 X0NhdGVnb3J5KCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
 ciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9J
 bnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3Jf
 dGFnKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICB3aGlsZSAoX19u
 LS0pICsrX19pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
 YWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19h
 ZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNl
 IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
 ZXJhdG9yX3RhZykNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCiAgaWYgKF9fbiA+IDApDQogICAgd2hpbGUgKF9fbi0t
 KSArK19faTsNCiAgZWxzZQ0KICAgIHdoaWxlIChfX24rKykgLS1fX2k7DQp9
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
 YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9t
 QWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwNCiAgICAgICAg
 ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 X19pICs9IF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
 dG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBhZHZhbmNlKF9J
 bnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pDQp7DQoNCiAgX19h
 ZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsNCn0N
 Cg0KfQ0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz
 DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGxfaXRlcmF0b3IuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmNsYXNzIGJhY2tfaW5zZXJ0X2l0
 ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0NvbnRhaW5lciogY29udGFpbmVy
 Ow0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5
 cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
 YXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQogIHR5cGVk
 ZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCBwb2lu
 dGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KDQogIGV4cGxpY2l0
 IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250
 YWluZXIoJl9feCkge30NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
 aW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVy
 Ojp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7DQogICAgY29udGFpbmVyLT5wdXNo
 X2JhY2soX192YWx1ZSk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGJh
 Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
 IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u
 dGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9DQogIGJh
 Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGlu
 dCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 Q29udGFpbmVyPg0KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
 YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7DQogIHJl
 dHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmNsYXNzIGZyb250
 X2luc2VydF9pdGVyYXRvciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIq
 IGNvbnRhaW5lcjsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyIGNv
 bnRhaW5lcl90eXBlOw0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
 aXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
 Ow0KICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm
 IHZvaWQgcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0K
 ICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg
 X194KSA6IGNvbnRhaW5lcigmX194KSB7fQ0KICBmcm9udF9pbnNlcnRfaXRl
 cmF0b3I8X0NvbnRhaW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt
 ZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7DQogICAgY29u
 dGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOw0KICAgIHJldHVybiAqdGhp
 czsNCiAgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m
 IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGZyb250X2luc2Vy
 dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
 ICp0aGlzOyB9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
 PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmlubGluZSBmcm9udF9pbnNl
 cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRh
 aW5lciYgX194KSB7DQogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
 X0NvbnRhaW5lcj4oX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250
 YWluZXI+DQpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0K
 ICBfQ29udGFpbmVyKiBjb250YWluZXI7DQogIHR5cGVuYW1lIF9Db250YWlu
 ZXI6Oml0ZXJhdG9yIGl0ZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRh
 aW5lciBjb250YWluZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFs
 dWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAg
 dHlwZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVu
 Y2U7DQoNCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlw
 ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQ0KICAgIDogY29udGFp
 bmVyKCZfX3gpLCBpdGVyKF9faSkge30NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9D
 b250YWluZXI+Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRh
 aW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGl0ZXIgPSBjb250
 YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICArK2l0ZXI7DQog
 ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29u
 dGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgaW5z
 ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1
 cm4gKnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
 cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+DQppbmxp
 bmUNCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29u
 dGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQp7DQogIHR5cGVkZWYgdHlw
 ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOw0KICByZXR1cm4g
 aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkp
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
 ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwNCiAgICAg
 ICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+DQpjbGFzcyByZXZl
 cnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0KICB0eXBlZGVmIHJldmVy
 c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJh
 dG9yLCBfVHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7DQpwcm90ZWN0
 ZWQ6DQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsNCnB1Ymxp
 YzoNCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVy
 YXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAg
 dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm
 IF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5j
 ZTsNCg0KICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQ0K
 ICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0Jp
 ZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpDQogICAgOiBjdXJyZW50KF9feCkg
 e30NCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyBy
 ZXR1cm4gY3VycmVudDsgfQ0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
 bnN0IHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3Vy
 cmVudDsNCiAgICByZXR1cm4gKi0tX190bXA7DQogIH0NCiAgcG9pbnRlciBv
 cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0N
 CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7DQogICAgLS1jdXJyZW50Ow0KICAg
 IHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvcisrKGludCkg
 ew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7DQogICAgLS1jdXJyZW50Ow0K
 ICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItLSgp
 IHsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQog
 IF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAq
 dGhpczsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9
 DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBj
 bGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgYm9vbCBvcGVy
 YXRvcj09KA0KICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy
 YXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwNCiAg
 ICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRl
 ciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpDQp7DQogIHJldHVybiBf
 X3guYmFzZSgpID09IF9feS5iYXNlKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0
 YW5jZT4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oDQogICAgY29uc3QgcmV2
 ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl
 ZiwgX0Rpc3RhbmNlPiYgX194LA0KICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl
 Y3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5j
 ZT4mIF9feSkNCnsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9DQojIDE5
 MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
 X2l0ZXJhdG9yLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpj
 bGFzcyByZXZlcnNlX2l0ZXJhdG9yDQp7DQpwcm90ZWN0ZWQ6DQogIF9JdGVy
 YXRvciBjdXJyZW50Ow0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0
 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQ0K
 ICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHR5cGVu
 YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQog
 ICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
 YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAg
 ICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHR5cGVuYW1lIGl0
 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyDQogICAgICAgICAg
 cG9pbnRlcjsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
 X0l0ZXJhdG9yPjo6cmVmZXJlbmNlDQogICAgICAgICAgcmVmZXJlbmNlOw0K
 DQogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7DQogIHR5cGVk
 ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOw0KDQpwdWJs
 aWM6DQogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQ0KICBleHBsaWNpdCByZXZl
 cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194
 KSB7fQ0KDQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkg
 OiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
 X0l0ZXI+DQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVy
 YXRvcjxfSXRlcj4mIF9feCkNCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkg
 e30NCg0KICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBj
 dXJyZW50OyB9DQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQog
 ICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsNCiAgICByZXR1cm4gKi0t
 X190bXA7DQogIH0NCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyBy
 ZXR1cm4gJihvcGVyYXRvciooKSk7IH0NCg0KICBfU2VsZiYgb3BlcmF0b3Ir
 KygpIHsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9
 DQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7DQogICAgX1NlbGYgX190bXAg
 PSAqdGhpczsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0K
 ICB9DQogIF9TZWxmJiBvcGVyYXRvci0tKCkgew0KICAgICsrY3VycmVudDsN
 CiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3ItLShp
 bnQpIHsNCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgICsrY3VycmVu
 dDsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCg0KICBfU2VsZiBvcGVyYXRv
 cisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiBf
 U2VsZihjdXJyZW50IC0gX19uKTsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3Ir
 PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCAtPSBfX247
 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLShk
 aWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7DQogICAgcmV0dXJuIF9TZWxm
 KGN1cnJlbnQgKyBfX24pOw0KICB9DQogIF9TZWxmJiBvcGVyYXRvci09KGRp
 ZmZlcmVuY2VfdHlwZSBfX24pIHsNCiAgICBjdXJyZW50ICs9IF9fbjsNCiAg
 ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o
 ZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyAr
 IF9fbik7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpp
 bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
 X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z
 dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1
 cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAg
 ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
 PiYgX195KSB7DQogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBib29s
 IG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
 JiBfX3gsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf
 aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiAhKF9feCA9
 PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5s
 aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
 ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
 dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiBf
 X3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpp
 bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
 X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z
 dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1
 cm4gIShfX3kgPCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJh
 dG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0
 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAg
 ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0K
 ICByZXR1cm4gIShfX3ggPCBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0l0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8
 X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQpvcGVyYXRvci0oY29uc3Qg
 cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAg
 Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAg
 cmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8
 X0l0ZXJhdG9yPg0Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0
 b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAg
 ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgew0K
 ICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNl
 KCkgLSBfX24pOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsDQogICAg
 ICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNo
 YXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBw
 dHJkaWZmX3Q+DQpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsNCnB1YmxpYzoN
 CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICB0eXBlZGVmIF9UcmFp
 dHMgdHJhaXRzX3R5cGU7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsNCg0KICB0eXBlZGVmIGlucHV0
 X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf
 VHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5
 cGU7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVm
 IGNvbnN0IF9UcCYgcmVmZXJlbmNlOw0KDQogIGlzdHJlYW1faXRlcmF0b3Io
 KSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2UpIHt9DQogIGlzdHJlYW1f
 aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3Mp
 IHsgX01fcmVhZCgpOyB9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
 bnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9DQogIHBvaW50ZXIgb3BlcmF0b3It
 PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgaXN0
 cmVhbV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsNCiAgICBfTV9yZWFkKCk7
 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGlzdHJlYW1faXRlcmF0b3Ig
 b3BlcmF0b3IrKyhpbnQpIHsNCiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1w
 ID0gKnRoaXM7DQogICAgX01fcmVhZCgpOw0KICAgIHJldHVybiBfX3RtcDsN
 CiAgfQ0KDQogIGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRv
 ciYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01f
 b2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0p
 OyB9DQoNCnByaXZhdGU6DQogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOw0K
 ICBfVHAgX01fdmFsdWU7DQogIGJvb2wgX01fb2s7DQoNCiAgdm9pZCBfTV9y
 ZWFkKCkgew0KICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFt
 KSA/IHRydWUgOiBmYWxzZTsNCiAgICBpZiAoX01fb2spIHsNCiAgICAgICpf
 TV9zdHJlYW0gPj4gX01fdmFsdWU7DQogICAgICBfTV9vayA9ICpfTV9zdHJl
 YW0gPyB0cnVlIDogZmFsc2U7DQogICAgfQ0KICB9DQp9Ow0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNs
 YXNzIF9EaXN0Pg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPT0oY29uc3QgaXN0
 cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBf
 X3gsDQogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf
 Q2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7DQogIHJldHVybiBfX3gu
 X01fZXF1YWwoX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
 c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4NCmlubGlu
 ZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
 LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0KICAgICAgICAgICBj
 b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBf
 RGlzdD4mIF9feSkgew0KICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOw0K
 fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsDQogICAgICAgICAgY2xhc3Mg
 X0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
 aGFyVD4gPg0KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7DQpwdWJsaWM6DQog
 IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgdHlwZWRlZiBfVHJhaXRz
 IHRyYWl0c190eXBlOw0KICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoNCiAgdHlwZWRlZiBvdXRwdXRf
 aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZv
 aWQgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw
 ZTsNCiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCBy
 ZWZlcmVuY2U7DQoNCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUm
 IF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQ0KICBv
 c3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hh
 clQqIF9fYykNCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9f
 Yykge30NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29u
 c3QgX1RwJiBfX3ZhbHVlKSB7DQogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVl
 Ow0KICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5n
 Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBvc3RyZWFtX2l0ZXJhdG9y
 PF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIG9zdHJl
 YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz
 OyB9DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQp
 IHsgcmV0dXJuICp0aGlzOyB9DQpwcml2YXRlOg0KICBvc3RyZWFtX3R5cGUq
 IF9NX3N0cmVhbTsNCiAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7DQp9Ow0K
 IyA0MTcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0bF9pdGVyYXRvci5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQpjbGFzcyBfX25vcm1hbF9pdGVy
 YXRvcg0KICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0
 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksDQogICAgICAgICAgICAgICAg
 ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLA0K
 ICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
 Pjo6ZGlmZmVyZW5jZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICBpdGVy
 YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwNCiAgICAgICAgICAg
 ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j
 ZT4NCnsNCg0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3IgX01fY3VycmVudDsN
 Cg0KcHVibGljOg0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
 YXRvciwgX0NvbnRhaW5lcj4gbm9ybWFsX2l0ZXJhdG9yX3R5cGU7DQogIHR5
 cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlw
 ZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRv
 cl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBl
 bmFtZSBfX3RyYWl0c190eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQog
 IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90
 eXBlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3Ry
 YWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7DQogIHR5cGVkZWYgdHlwZW5h
 bWUgX190cmFpdHNfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsNCg0KICBf
 X25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg
 eyB9DQoNCiAgZXhwbGljaXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0
 ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQ0KDQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0l0ZXI+DQogIGlubGluZSBfX25vcm1hbF9pdGVy
 YXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5l
 cj4mIF9faSkNCiAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9DQoN
 Cg0KICByZWZlcmVuY2UNCiAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
 Kl9NX2N1cnJlbnQ7IH0NCg0KICBwb2ludGVyDQogIG9wZXJhdG9yLT4oKSBj
 b25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9DQoNCiAgbm9ybWFsX2l0ZXJh
 dG9yX3R5cGUmDQogIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0
 dXJuICp0aGlzOyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUNCiAgb3Bl
 cmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1
 cnJlbnQrKyk7IH0NCg0KDQogIG5vcm1hbF9pdGVyYXRvcl90eXBlJg0KICBv
 cGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQ0K
 DQogIG5vcm1hbF9pdGVyYXRvcl90eXBlDQogIG9wZXJhdG9yLS0oaW50KSB7
 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9DQoN
 Cg0KICByZWZlcmVuY2UNCiAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNl
 X3R5cGUmIF9fbikgY29uc3QNCiAgeyByZXR1cm4gX01fY3VycmVudFtfX25d
 OyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmDQogIG9wZXJhdG9yKz0o
 Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pDQogIHsgX01fY3VycmVudCAr
 PSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90
 eXBlDQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikg
 Y29uc3QNCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu
 dCArIF9fbik7IH0NCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZSYNCiAgb3Bl
 cmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikNCiAgeyBfTV9j
 dXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgbm9ybWFsX2l0
 ZXJhdG9yX3R5cGUNCiAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlw
 ZSYgX19uKSBjb25zdA0KICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf
 TV9jdXJyZW50IC0gX19uKTsgfQ0KDQogIGRpZmZlcmVuY2VfdHlwZQ0KICBv
 cGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u
 c3QNCiAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9
 DQoNCiAgY29uc3QgX0l0ZXJhdG9yJg0KICBiYXNlKCkgY29uc3QgeyByZXR1
 cm4gX01fY3VycmVudDsgfQ0KfTsNCg0KDQoNCnRlbXBsYXRlPHR5cGVuYW1l
 IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
 b250YWluZXI+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I9PShjb25zdCBfX25v
 cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
 DQogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
 clIsIF9Db250YWluZXI+JiBfX3JocykNCnsgcmV0dXJuIF9fbGhzLmJhc2Uo
 KSA9PSBfX3Jocy5iYXNlKCk7IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0
 ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRh
 aW5lcj4NCmlubGluZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFs
 X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAg
 ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
 X0NvbnRhaW5lcj4mIF9fcmhzKQ0KeyByZXR1cm4gIShfX2xocyA9PSBfX3Jo
 cyk7IH0NCg0KDQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
 cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQppbmxp
 bmUgYm9vbA0Kb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
 dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICBjb25z
 dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg
 X19yaHMpDQp7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7
 IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
 X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCmlubGluZSBib29s
 DQpvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
 TCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgIGNvbnN0IF9fbm9y
 bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykN
 CnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0NCg0KdGVtcGxhdGU8dHlwZW5h
 bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg
 X0NvbnRhaW5lcj4NCmlubGluZSBib29sDQpvcGVyYXRvcjw9KGNvbnN0IF9f
 bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
 cywNCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
 dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KeyByZXR1cm4gIShfX3JocyA8
 IF9fbGhzKTsgfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0
 eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KaW5s
 aW5lIGJvb2wNCm9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
 X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICBj
 b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
 PiYgX19yaHMpDQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9DQoNCnRl
 bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
 cj4NCmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
 YWluZXI+DQpvcGVyYXRvcisoX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
 LCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAg
 ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
 ZXI+JiBfX2kpDQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
 b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9DQoNCn0NCiMg
 MzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9pdGVyYXRvci5oIiAyIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1v
 cnkuaCIgMSAzDQojIDE5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
 MSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9j
 Kytjb25maWcuaCIgMSAzDQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Bh
 aXIuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfcGFpci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCnN0cnVjdCBwYWly
 IHsNCiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsNCiAgdHlwZWRlZiBfVDIg
 c2Vjb25kX3R5cGU7DQoNCiAgX1QxIGZpcnN0Ow0KICBfVDIgc2Vjb25kOw0K
 DQoNCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30NCg0KDQoNCiAg
 cGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3Qo
 X19hKSwgc2Vjb25kKF9fYikge30NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Ux
 LCBjbGFzcyBfVTI+DQogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9f
 cCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30N
 Cn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGlu
 ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
 Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5m
 aXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxp
 bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
 Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5m
 aXJzdCA8IF9feS5maXJzdCB8fA0KICAgICAgICAgKCEoX195LmZpcnN0IDwg
 X194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29s
 IG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
 cGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5s
 aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs
 IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJuIF9feSA8
 IF9feDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0K
 aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg
 X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiAh
 KF9feSA8IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
 IF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEs
 IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICBy
 ZXR1cm4gIShfX3ggPCBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
 LCBjbGFzcyBfVDI+DQoNCg0KaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf
 cGFpcihfVDEgX194LCBfVDIgX195KQ0KDQoNCg0Kew0KICByZXR1cm4gcGFp
 cjxfVDEsIF9UMj4oX194LCBfX3kpOw0KfQ0KDQp9DQojIDM4ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
 aCIgMiAzDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMNCiMgMTkgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgi
 IDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQoj
 IDIxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy90
 eXBlX3RyYWl0cy5oIiAyIDMNCiMgNTcgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCnRlbXBsYXRl
 IDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Ow0KdHlwZWRlZiBfQm9v
 bDx0cnVlPiBfX3RydWVfdHlwZTsNCnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9f
 ZmFsc2VfdHlwZTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBf
 X3R5cGVfdHJhaXRzIHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19k
 dW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiMgODEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMN
 CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
 Y29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp
 dmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5
 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk
 ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0
 eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQoN
 CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gew0KICAg
 dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
 b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
 dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3Ry
 dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBf
 X3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry
 dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVf
 dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
 Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
 ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
 dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
 T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
 dHM8c2lnbmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
 X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190
 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5
 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
 YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
 dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
 DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
 bmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
 YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsN
 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
 cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K
 DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsN
 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
 b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
 YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk
 ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+
 IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7DQogICB0eXBlZGVmIF9f
 dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQog
 ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
 dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
 c2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
 c190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
 IGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
 X3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVf
 dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
 Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
 ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
 dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
 T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
 dHM8aW50PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
 X2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
 IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
 dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQog
 ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
 DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0K
 dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+
 IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
 dF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
 aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk
 ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5
 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0
 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsN
 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
 dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
 YXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
 cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
 cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVl
 X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5
 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
 cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
 bWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
 aXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
 UE9EX3R5cGU7DQp9Ow0KIyAxOTkgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCnRlbXBsYXRlPD4g
 c3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsNCiAgIHR5cGVkZWYgX190
 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAg
 IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
 Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
 aWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
 X3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
 dHJhaXRzPGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
 dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry
 dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
 dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsN
 Cn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk
 b3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
 ZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190
 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg
 IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN
 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1Rw
 Kj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
 dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
 dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
 dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAg
 dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQoN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsN
 CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVt
 cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gew0KICB0eXBlZGVm
 IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry
 dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlw
 ZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
 ZWdlcjxzaWduZWQgY2hhcj4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
 bnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
 PHVuc2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
 ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3
 Y2hhcl90PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K
 fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsN
 CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1w
 bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gew0K
 ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBs
 YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gew0KICB0eXBlZGVmIF9f
 dHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0
 IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gew0KICB0eXBlZGVmIF9fdHJ1
 ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9J
 c19pbnRlZ2VyPGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
 ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1
 bnNpZ25lZCBsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
 cmFsOw0KfTsNCiMgMjk2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsNCiAgIHR5cGVk
 ZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7DQp9Ow0KDQoNCm5hbWVzcGFjZSBz
 dGQgew0KICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt
 ZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsNCn07DQoN
 CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
 aW5lcj4NCnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9y
 bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7DQogICB0
 eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7DQp9Ow0KIyA0MSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNl
 LmgiIDIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyA0MyAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
 IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2NzdGRsaWIuaCIgMSAzDQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29s
 YXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgMzggIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgi
 IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMNCiMgMzkgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMw0K
 IyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2NzdGRsaWIuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
 bGliLmgiIDEgMyA0DQojIDI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
 Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkbGli
 LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYi5oCTEuNDQJOTgv
 MDEvMjIgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90
 ZXN0cy5oIiAxIDMgNA0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
 Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxp
 Yi5oIiAyIDMgNA0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQu
 aCIgMSAzIDQNCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQN
 CiNwcmFnbWEgaWRlbnQgIkAoIyl3YWl0LmgJMS4yMQk5Ny8wNC8wOCBTTUki
 DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
 MyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQoj
 IDIxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0KDQoNCiMg
 MSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAxIDMgNA0KIyAxNiAi
 L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCiNwcmFnbWEgaWRl
 bnQgIkAoIylyZXNvdXJjZS5oCTEuMjUJOTgvMDYvMzAgU01JIg0KDQojIDEg
 Ii91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAx
 OSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNA0KDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
 YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQNCiMgMjEg
 Ii91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQNCiMgMSAiL3Vz
 ci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0DQojIDIyICIvdXNyL2luY2x1
 ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj
 IDY3ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0KdHlwZWRl
 ZiB1bnNpZ25lZCBsb25nIHJsaW1fdDsNCiMgMTAyICIvdXNyL2luY2x1ZGUv
 c3lzL3Jlc291cmNlLmgiIDMgNA0Kc3RydWN0IHJsaW1pdCB7DQogICAgICAg
 IHJsaW1fdCBybGltX2N1cjsNCiAgICAgICAgcmxpbV90IHJsaW1fbWF4Ow0K
 fTsNCg0KDQoNCg0KdHlwZWRlZiB1X2xvbmdsb25nX3QgcmxpbTY0X3Q7DQoN
 Cg0KDQoNCg0Kc3RydWN0IHJsaW1pdDY0IHsNCiAgICAgICAgcmxpbTY0X3Qg
 cmxpbV9jdXI7DQogICAgICAgIHJsaW02NF90IHJsaW1fbWF4Ow0KfTsNCiMg
 MTQzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0Kc3RydWN0
 IHJ1c2FnZSB7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOw0K
 ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsNCiAgICAgICAgbG9u
 ZyBydV9tYXhyc3M7DQogICAgICAgIGxvbmcgcnVfaXhyc3M7DQogICAgICAg
 IGxvbmcgcnVfaWRyc3M7DQogICAgICAgIGxvbmcgcnVfaXNyc3M7DQogICAg
 ICAgIGxvbmcgcnVfbWluZmx0Ow0KICAgICAgICBsb25nIHJ1X21hamZsdDsN
 CiAgICAgICAgbG9uZyBydV9uc3dhcDsNCiAgICAgICAgbG9uZyBydV9pbmJs
 b2NrOw0KICAgICAgICBsb25nIHJ1X291YmxvY2s7DQogICAgICAgIGxvbmcg
 cnVfbXNnc25kOw0KICAgICAgICBsb25nIHJ1X21zZ3JjdjsNCiAgICAgICAg
 bG9uZyBydV9uc2lnbmFsczsNCiAgICAgICAgbG9uZyBydV9udmNzdzsNCiAg
 ICAgICAgbG9uZyBydV9uaXZjc3c7DQp9Ow0KIyAxOTMgIi91c3IvaW5jbHVk
 ZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQpleHRlcm4gaW50IHNldHJsaW1pdChp
 bnQsIGNvbnN0IHN0cnVjdCBybGltaXQgKik7DQpleHRlcm4gaW50IGdldHJs
 aW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7DQoNCg0KDQoNCmV4dGVybiBp
 bnQgc2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKik7
 DQpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdDY0
 ICopOw0KDQoNCmV4dGVybiBpbnQgZ2V0cHJpb3JpdHkoaW50LCBpZF90KTsN
 CmV4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOw0KZXh0
 ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOw0KIyAy
 MjggIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQp9DQojIDI1
 ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCiMgMSAiL3Vzci9p
 bmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1
 ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc2ln
 aW5mby5oCTEuNTQJOTgvMDMvMjcgU01JIg0KDQojIDEgIi91c3IvaW5jbHVk
 ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxOSAiL3Vzci9pbmNs
 dWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j
 bHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQNCiMgMjAgIi91c3IvaW5jbHVkZS9z
 eXMvc2lnaW5mby5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAxMjYg
 Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL3Vzci9p
 bmNsdWRlL3N5cy9tYWNoc2lnLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1
 ZGUvc3lzL21hY2hzaWcuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpbWFj
 aHNpZy5oCTEuMTQJOTgvMDIvMDUgU01JIg0KDQoNCiMgMSAiL3Vzci9pbmNs
 dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIwICIvdXNyL2lu
 Y2x1ZGUvc3lzL21hY2hzaWcuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN
 CiMgMTEwICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMyA0DQp9DQoj
 IDEyNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0DQojIDIw
 NiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNA0KIyAxICIvdXNy
 L2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAxIDMgNA0KIyAyMDcgIi91c3Iv
 aW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNA0KIyAyMTcgIi91c3IvaW5j
 bHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNs
 dWRlL3N5cy90eXBlcy5oIiAxIDMgNA0KIyAyMTggIi91c3IvaW5jbHVkZS9z
 eXMvc2lnaW5mby5oIiAyIDMgNA0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgc2ln
 aW5mbyB7DQoNCg0KDQogICAgICAgIGludCBzaV9zaWdubzsNCiAgICAgICAg
 aW50IHNpX2NvZGU7DQogICAgICAgIGludCBzaV9lcnJubzsNCg0KDQoNCiAg
 ICAgICAgdW5pb24gew0KDQogICAgICAgICAgICAgICAgaW50IF9fcGFkWygo
 MTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsNCg0KICAgICAgICAgICAgICAg
 IHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfX3Bp
 ZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsNCg0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p
 b24gc2lndmFsIF9fdmFsdWU7DQoNCg0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIH0gX19raWxsOw0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIGNsb2NrX3QgX191dGltZTsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7DQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tf
 dCBfX3N0aW1lOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
 IF9fY2xkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOw0K
 ICAgICAgICAgICAgICAgIH0gX19wcm9jOw0KDQogICAgICAgICAgICAgICAg
 c3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRk
 cjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsNCiAgICAgICAg
 ICAgICAgICB9IF9fZmF1bHQ7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qg
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgIGxvbmcgX19iYW5kOw0KICAgICAgICAgICAg
 ICAgIH0gX19maWxlOw0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsNCg0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFtcDsN
 Cg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lzY2Fs
 bDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2ZhdWx0Ow0KICAgICAg
 ICAgICAgICAgICAgICAgICAgbG9uZyBfX3N5c2FyZ1s4XTsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgIGludCBfX21zdGF0ZVsxMF07DQogICAgICAgICAg
 ICAgICAgfSBfX3Byb2Y7DQoNCiAgICAgICAgfSBfX2RhdGE7DQoNCn0gc2ln
 aW5mb190Ow0KIyAzNTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAz
 IDQNCnR5cGVkZWYgc3RydWN0IGtfc2lnaW5mbyB7DQogICAgICAgIGludCBz
 aV9zaWdubzsNCiAgICAgICAgaW50IHNpX2NvZGU7DQogICAgICAgIGludCBz
 aV9lcnJubzsNCg0KDQoNCiAgICAgICAgdW5pb24gew0KICAgICAgICAgICAg
 ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBf
 X3BpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlv
 biBzaWd2YWwgX192YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgfSBfX2tpbGw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgY2xvY2tfdCBfX3V0aW1lOw0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3N0YXR1czsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3Rp
 bWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7
 DQogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7DQogICAgICAg
 ICAgICAgICAgfSBfX3Byb2M7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qg
 ew0KICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgaW50IF9fdHJhcG5vOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOw0KICAgICAgICAgICAgICAg
 IH0gX19mYXVsdDsNCg0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZkOw0KICAgICAgICAgICAg
 ICAgICAgICAgICAgbG9uZyBfX2JhbmQ7DQogICAgICAgICAgICAgICAgfSBf
 X2ZpbGU7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAg
 ICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOw0KDQoNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7DQoNCg0K
 DQogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2NhbGw7DQog
 ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsNCg0KDQoNCiAgICAg
 ICAgICAgICAgICB9IF9fcHJvZjsNCg0KICAgICAgICB9IF9fZGF0YTsNCg0K
 fSBrX3NpZ2luZm9fdDsNCg0KdHlwZWRlZiBzdHJ1Y3Qgc2lncXVldWUgew0K
 ICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKnNxX25leHQ7DQogICAgICAgIGtf
 c2lnaW5mb190IHNxX2luZm87DQogICAgICAgIHZvaWQgKCpzcV9mdW5jKShz
 dHJ1Y3Qgc2lncXVldWUgKik7DQogICAgICAgIHZvaWQgKnNxX2JhY2twdHI7
 DQoNCn0gc2lncXVldWVfdDsNCiMgNDU0ICIvdXNyL2luY2x1ZGUvc3lzL3Np
 Z2luZm8uaCIgMyA0DQp9DQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQu
 aCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDEg
 MyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0DQoj
 cHJhZ21hIGlkZW50ICJAKCMpcHJvY3NldC5oCTEuMTgJOTgvMDYvMzAgU01J
 Ig0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5
 cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIzICIvdXNyL2luY2x1ZGUv
 c3lzL3Byb2NzZXQuaCIgMiAzIDQNCiMgNDAgIi91c3IvaW5jbHVkZS9zeXMv
 cHJvY3NldC5oIiAzIDQNCnR5cGVkZWYgZW51bQ0KDQogICAgICAgIGlkdHlw
 ZQ0KDQogICAgICAgICAgICAgICAgew0KICAgICAgICBQX1BJRCwNCiAgICAg
 ICAgUF9QUElELA0KICAgICAgICBQX1BHSUQsDQoNCiAgICAgICAgUF9TSUQs
 DQogICAgICAgIFBfQ0lELA0KICAgICAgICBQX1VJRCwNCiAgICAgICAgUF9H
 SUQsDQogICAgICAgIFBfQUxMLA0KICAgICAgICBQX0xXUElEDQp9IGlkdHlw
 ZV90Ow0KIyA2NCAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0K
 dHlwZWRlZiBlbnVtIGlkb3Agew0KICAgICAgICBQT1BfRElGRiwNCg0KDQog
 ICAgICAgIFBPUF9BTkQsDQoNCg0KICAgICAgICBQT1BfT1IsDQoNCg0KICAg
 ICAgICBQT1BfWE9SDQoNCg0KfSBpZG9wX3Q7DQoNCg0KDQoNCg0KDQoNCnR5
 cGVkZWYgc3RydWN0IHByb2NzZXQgew0KICAgICAgICBpZG9wX3QgcF9vcDsN
 Cg0KDQoNCg0KICAgICAgICBpZHR5cGVfdCBwX2xpZHR5cGU7DQoNCg0KICAg
 ICAgICBpZF90IHBfbGlkOw0KDQogICAgICAgIGlkdHlwZV90IHBfcmlkdHlw
 ZTsNCg0KDQogICAgICAgIGlkX3QgcF9yaWQ7DQp9IHByb2NzZXRfdDsNCiMg
 MTI5ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0DQp9DQojIDI3
 ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0KDQoNCmV4dGVy
 biAiQyIgew0KIyA4NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNA0K
 ZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOw0KZXh0ZXJuIHBpZF90IHdhaXRw
 aWQocGlkX3QsIGludCAqLCBpbnQpOw0KDQoNCmV4dGVybiBpbnQgd2FpdGlk
 KGlkdHlwZV90LCBpZF90LCBzaWdpbmZvX3QgKiwgaW50KTsNCmV4dGVybiBw
 aWRfdCB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOw0KDQoN
 Cg0KDQpleHRlcm4gcGlkX3Qgd2FpdDQocGlkX3QsIGludCAqLCBpbnQsIHN0
 cnVjdCBydXNhZ2UgKik7DQojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0
 LmgiIDMgNA0KfQ0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt
 bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5o
 IiAyIDMgNA0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KdHlwZWRlZiBzdHJ1
 Y3Qgew0KICAgICAgICBpbnQgcXVvdDsNCiAgICAgICAgaW50IHJlbTsNCn0g
 ZGl2X3Q7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgICAgbG9uZyBxdW90
 Ow0KICAgICAgICBsb25nIHJlbTsNCn0gbGRpdl90Ow0KDQoNCnR5cGVkZWYg
 c3RydWN0IHsNCiAgICAgICAgbG9uZyBsb25nIHF1b3Q7DQogICAgICAgIGxv
 bmcgbG9uZyByZW07DQp9IGxsZGl2X3Q7DQojIDE0OCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
 bmNsdWRlL3N0ZGxpYi5oIiAzIDQNCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9f
 Y3R5cGVbXTsNCg0KDQoNCmV4dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFy
 ICopOw0KZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7DQpleHRlcm4g
 bG9uZyBpbnQgYXRvbChjb25zdCBjaGFyICopOw0KZXh0ZXJuIGRvdWJsZSBz
 dHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsNCmV4dGVybiBsb25nIGlu
 dCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOw0KZXh0ZXJu
 IHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFy
 ICoqLCBpbnQpOw0KDQpleHRlcm4gaW50IHJhbmQodm9pZCk7DQpleHRlcm4g
 dm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOw0KDQoNCmV4dGVybiBpbnQgcmFu
 ZF9yKHVuc2lnbmVkIGludCAqKTsNCg0KDQpleHRlcm4gdm9pZCAqY2FsbG9j
 KHNpemVfdCwgc2l6ZV90KTsNCmV4dGVybiB2b2lkIGZyZWUodm9pZCAqKTsN
 CmV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsNCmV4dGVybiB2b2lkICpy
 ZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsNCg0KZXh0ZXJuIHZvaWQgYWJvcnQo
 dm9pZCk7DQpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7DQpl
 eHRlcm4gdm9pZCBleGl0KGludCk7DQpleHRlcm4gdm9pZCBfZXhpdGhhbmRs
 ZSh2b2lkKTsNCmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsN
 CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7DQoNCmV4dGVybiB2
 b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXpl
 X3QsIHNpemVfdCwNCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNv
 bnN0IHZvaWQgKikpOw0KZXh0ZXJuIHZvaWQgcXNvcnQodm9pZCAqLCBzaXpl
 X3QsIHNpemVfdCwNCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNv
 bnN0IHZvaWQgKikpOw0KDQpleHRlcm4gaW50IGFicyhpbnQpOw0KZXh0ZXJu
 IGRpdl90IGRpdihpbnQsIGludCk7DQpleHRlcm4gbG9uZyBpbnQgbGFicyhs
 b25nKTsNCmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsNCg0KZXh0
 ZXJuIGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVf
 dCk7DQpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsN
 CmV4dGVybiBpbnQgd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7DQoNCmV4dGVy
 biBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNp
 emVfdCk7DQpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qg
 d2NoYXJfdCAqLCBzaXplX3QpOw0KDQoNCg0KDQpleHRlcm4gZG91YmxlIGRy
 YW5kNDgodm9pZCk7DQpleHRlcm4gZG91YmxlIGVyYW5kNDgodW5zaWduZWQg
 c2hvcnQgKik7DQpleHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0
 ICopOw0KZXh0ZXJuIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsN
 CmV4dGVybiBsb25nIGxyYW5kNDgodm9pZCk7DQpleHRlcm4gbG9uZyBtcmFu
 ZDQ4KHZvaWQpOw0KZXh0ZXJuIGxvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9y
 dCAqKTsNCmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVk
 IHNob3J0ICopOw0KZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsNCmV4dGVy
 biBpbnQgcHV0ZW52KGNoYXIgKik7DQpleHRlcm4gdm9pZCBzZXRrZXkoY29u
 c3QgY2hhciAqKTsNCiMgMjE5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
 Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkbGli
 LmgiIDMgNA0KZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7DQoNCg0KZXh0
 ZXJuIGludCBta3N0ZW1wNjQoY2hhciAqKTsNCg0KDQoNCg0KDQoNCmV4dGVy
 biBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICplY3Z0
 KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKmZj
 dnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7DQpleHRlcm4gY2hhciAq
 Z2N2dChkb3VibGUsIGludCwgY2hhciAqKTsNCmV4dGVybiBpbnQgZ2V0c3Vi
 b3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOw0KZXh0ZXJu
 IGludCBncmFudHB0KGludCk7DQpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVu
 c2lnbmVkLCBjaGFyICosIHNpemVfdCk7DQpleHRlcm4gY2hhciAqbDY0YShs
 b25nKTsNCmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsNCmV4dGVybiBj
 aGFyICpwdHNuYW1lKGludCk7DQpleHRlcm4gbG9uZyByYW5kb20odm9pZCk7
 DQpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICop
 Ow0KZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7DQpleHRl
 cm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsNCmV4dGVybiBpbnQgdHR5c2xv
 dCh2b2lkKTsNCmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsNCmV4dGVybiB2
 b2lkICp2YWxsb2Moc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJuIGludCBkdXAy
 KGludCwgaW50KTsNCmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRvdWJsZSwg
 aW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKnFmY3Z0KGxvbmcg
 ZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7DQpleHRlcm4gY2hhciAqcWdj
 dnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsNCmV4dGVybiBjaGFyICpn
 ZXRjd2QoY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIGNvbnN0IGNoYXIgKmdl
 dGV4ZWNuYW1lKHZvaWQpOw0KZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQp
 Ow0KZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25z
 dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKm9wdGFyZzsNCmV4dGVybiBpbnQg
 b3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsNCmV4dGVybiBjaGFyICpnZXRwYXNz
 KGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0cGFzc3BocmFzZShj
 b25zdCBjaGFyICopOw0KZXh0ZXJuIGludCBnZXRwdyh1aWRfdCwgY2hhciAq
 KTsNCmV4dGVybiBpbnQgaXNhdHR5KGludCk7DQpleHRlcm4gdm9pZCAqbWVt
 YWxpZ24oc2l6ZV90LCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIgKnR0eW5hbWUo
 aW50KTsNCg0KDQpleHRlcm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIg
 Kik7DQpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7DQpleHRl
 cm4gbGxkaXZfdCBsbGRpdihsb25nIGxvbmcsIGxvbmcgbG9uZyk7DQpleHRl
 cm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7DQpleHRlcm4g
 bG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp
 Ow0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbChjb25zdCBj
 aGFyICosIGNoYXIgKiosIGludCk7DQpleHRlcm4gY2hhciAqdWxsdG9zdHIo
 dW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOw0KIyA0MTIgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z
 LjAvaW5jbHVkZS9zdGRsaWIuaCIgMyA0DQp9DQojIDQyICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAy
 IDMNCiMgNzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9jc3RkbGliLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNp
 bmcgOjpkaXZfdDsNCiAgdXNpbmcgOjpsZGl2X3Q7DQoNCiAgdXNpbmcgOjph
 Ym9ydDsNCiAgdXNpbmcgOjphYnM7DQogIHVzaW5nIDo6YXRleGl0Ow0KICB1
 c2luZyA6OmF0b2Y7DQogIHVzaW5nIDo6YXRvaTsNCiAgdXNpbmcgOjphdG9s
 Ow0KICB1c2luZyA6OmJzZWFyY2g7DQogIHVzaW5nIDo6Y2FsbG9jOw0KICB1
 c2luZyA6OmRpdjsNCiAgdXNpbmcgOjpleGl0Ow0KICB1c2luZyA6OmZyZWU7
 DQogIHVzaW5nIDo6Z2V0ZW52Ow0KICB1c2luZyA6OmxhYnM7DQogIHVzaW5n
 IDo6bGRpdjsNCiAgdXNpbmcgOjptYWxsb2M7DQogIHVzaW5nIDo6bWJsZW47
 DQogIHVzaW5nIDo6bWJzdG93Y3M7DQogIHVzaW5nIDo6bWJ0b3djOw0KICB1
 c2luZyA6OnFzb3J0Ow0KICB1c2luZyA6OnJhbmQ7DQogIHVzaW5nIDo6cmVh
 bGxvYzsNCiAgdXNpbmcgOjpzcmFuZDsNCiAgdXNpbmcgOjpzdHJ0b2Q7DQog
 IHVzaW5nIDo6c3RydG9sOw0KICB1c2luZyA6OnN0cnRvdWw7DQogIHVzaW5n
 IDo6c3lzdGVtOw0KICB1c2luZyA6Ondjc3RvbWJzOw0KICB1c2luZyA6Ondj
 dG9tYjsNCg0KICBpbmxpbmUgbG9uZw0KICBhYnMobG9uZyBfX2kpIHsgcmV0
 dXJuIGxhYnMoX19pKTsgfQ0KDQogIGlubGluZSBsZGl2X3QNCiAgZGl2KGxv
 bmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0N
 Cn0NCiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzDQoj
 IDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9uZXciIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL25ldyIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzDQojIDM1ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvbmV3IiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIg
 MSAzDQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 bmV3IiAyIDMNCg0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0ZA0K
 ew0KICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uDQogIHsN
 CiAgcHVibGljOg0KICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9DQogICAg
 dmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsNCiAgfTsNCg0KICBzdHJ1
 Y3Qgbm90aHJvd190IHsgfTsNCiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBu
 b3Rocm93Ow0KICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsNCiAg
 bmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsNCn0N
 Cg0KDQp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChz
 dGQ6OmJhZF9hbGxvYyk7DQp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNp
 emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsNCnZvaWQgb3BlcmF0b3Ig
 ZGVsZXRlKHZvaWQgKikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRl
 W10odm9pZCAqKSB0aHJvdygpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6
 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lk
 ICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro
 cm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAq
 LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lkIG9wZXJh
 dG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0
 aHJvdygpOw0KDQoNCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpz
 aXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9
 DQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZv
 aWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9DQp9DQojIDQ3
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
 YWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMNCiMgNDkgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
 YmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzDQoj
 IDUwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi
 IDEgMw0KIyA1MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz
 DQojIDUyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQoj
 IDUzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfYWxnb2Jhc2UuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoN
 CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
 ZEl0ZXIyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChf
 Rm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopDQp7
 DQogIF9UcCBfX3RtcCA9ICpfX2E7DQogICpfX2EgPSAqX19iOw0KICAqX19i
 ID0gX190bXA7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIx
 LCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KaW5saW5lIHZvaWQgaXRlcl9zd2Fw
 KF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19pdGVyX3N3YXAoX19h
 LCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9UcD4NCmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19i
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgX1RwIF9fdG1wID0gX19hOw0K
 ICBfX2EgPSBfX2I7DQogIF9fYiA9IF9fdG1wOw0KfQ0KDQoNCg0KDQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGNvbnN0IF9UcCYgbWlu
 KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyBy
 ZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5l
 IGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f
 Yikgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBpZiAoX19hIDwgX19i
 KSByZXR1cm4gX19iOyByZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1p
 bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9f
 Y29tcCkgew0KDQogIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19i
 OyByZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
 cyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAm
 IF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgew0KDQog
 IGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19h
 Ow0KfQ0KIyAxMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
 cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4N
 CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikNCnsNCiAg
 Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2Zp
 cnN0KQ0KICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICByZXR1cm4gX19y
 ZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
 ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGlu
 ZSBfT3V0cHV0SXRlcg0KX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
 c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICBfT3V0cHV0
 SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9E
 aXN0YW5jZSopDQp7DQogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
 IF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7DQogICAgKl9fcmVzdWx0ID0g
 Kl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICAgICsrX19yZXN1bHQ7DQog
 IH0NCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X1RwPg0KaW5saW5lIF9UcCoNCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCog
 X19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpDQp7
 DQogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICog
 KF9fbGFzdCAtIF9fZmlyc3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f
 bGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
 dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBfT3V0cHV0SXRl
 ciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
 dXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQp7DQogIHJldHVybiBf
 X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAg
 ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLA0KICAgICAgICAg
 ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlu
 bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmly
 c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkN
 CnsNCiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
 LA0KICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
 dCksDQogICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAqIF9f
 Y29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19y
 ZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkN
 CnsNCiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwg
 X19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5l
 IF9UcCogX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf
 VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgIF9fdHJ1ZV90eXBlKQ0Kew0KICByZXR1cm4gX19jb3B5X3RyaXZp
 YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoNCg0KdGVtcGxh
 dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
 cyBfVHA+DQppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJ
 dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCop
 DQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo
 YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yDQogICAgICAgICAgX1Ry
 aXZpYWw7DQogIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3Qs
 IF9fcmVzdWx0LCBfVHJpdmlhbCgpKTsNCn0NCg0KdGVtcGxhdGU8dHlwZW5h
 bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxpbmUg
 X091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
 bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkNCnsNCiAg
 cmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0
 LCBfX3Jlc3VsdC5iYXNlKCksDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSkpOw0KfQ0KDQp0ZW1wbGF0
 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4N
 CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19m
 aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBl
 KQ0Kew0KICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
 cmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0
 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4N
 CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19m
 aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl
 KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8
 X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICByZXR1cm4gX19j
 b3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1
 bHQsIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
 dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCmlubGluZSBfT3V0cHV0
 SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
 ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
 dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkNCnsNCiAgdHlwZWRl
 ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6
 X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJz
 dCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlu
 bGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
 cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICBfT3V0
 cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCg0KICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
 bm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs
 Ow0KICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jl
 c3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFz
 cyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
 ZXIyLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSBfQmlk
 aXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25h
 bEl0ZXIxIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
 dG9yX3RhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBf
 X2xhc3QpDQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7DQogIHJldHVy
 biBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
 c3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0
 YW5jZT4NCmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3
 YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
 ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
 ZXNzX2l0ZXJhdG9yX3RhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopDQp7DQogIGZvciAoX0Rpc3Rh
 bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQ0K
 ICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1
 bHQ7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl
 Y3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAg
 ICAgICAgIGNsYXNzIF9Cb29sVHlwZT4NCnN0cnVjdCBfX2NvcHlfYmFja3dh
 cmRfZGlzcGF0Y2gNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
 cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5
 DQogICAgICAgICAgX0NhdDsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
 cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlw
 ZQ0KICAgICAgICAgIF9EaXN0YW5jZTsNCg0KICBzdGF0aWMgX0JpZGlyZWN0
 aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
 b25hbEl0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7DQogICAg
 cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
 dWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0KfTsNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlz
 cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBf
 VHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFz
 dCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVt
 ID0gX19sYXN0IC0gX19maXJzdDsNCiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g
 X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsNCiAgICByZXR1
 cm4gX19yZXN1bHQgLSBfTnVtOw0KICB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1RwPg0Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25z
 dCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCnsNCiAgc3RhdGljIF9UcCog
 Y29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
 VHAqIF9fcmVzdWx0KSB7DQogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9k
 aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCiAgICAgIDo6Y29w
 eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+DQppbmxpbmUgX0JJMiBf
 X2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
 IF9CSTIgX19yZXN1bHQpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
 dHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVf
 dHlwZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxf
 YXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFsOw0KICBy
 ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U
 cml2aWFsPg0KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0
 LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
 eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291
 dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7DQogIHJl
 dHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0
 LCBfX3Jlc3VsdC5iYXNlKCkpKTsNCn0NCg0KdGVtcGxhdGUgPHR5cGVuYW1l
 IF9CSTEsIHR5cGVuYW1lIF9CSTI+DQppbmxpbmUgX0JJMiBfX2NvcHlfYmFj
 a3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C
 STEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBl
 KXsNCiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19s
 YXN0LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
 LCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk
 X2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgew0KICB0
 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O
 b3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0
 cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJh
 c2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsNCn0NCg0KdGVtcGxh
 dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQppbmxpbmUgX0JJ
 MiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEg
 X19maXJzdCwgX0JJMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f
 ZmFsc2VfdHlwZSkgew0KICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf
 aXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBf
 X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0
 LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQp9DQoNCnRl
 bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KaW5saW5l
 IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
 LCBfQkkyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 Cg0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
 QkkxPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9iYWNr
 d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf
 X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQp9DQoNCg0KDQoNCnRlbXBsYXRl
 IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1
 dEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlf
 bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
 X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICBmb3IgKCA7IF9fY291bnQg
 PiAwOyAtLV9fY291bnQpIHsNCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsN
 CiAgICArK19fZmlyc3Q7DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1
 cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19y
 ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3Mg
 X1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIHBhaXI8X1JBSXRl
 ciwgX091dHB1dEl0ZXI+DQpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9T
 aXplIF9fY291bnQsDQogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN
 CiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9S
 QUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7DQogIHJldHVybiBw
 YWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJz
 dCwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0K
 aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+DQpfX2NvcHlf
 bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJ
 dGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBf
 X2NvdW50LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0
 b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0K
 aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+DQpjb3B5X24o
 X0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRl
 ciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19j
 b3VudCwgX19yZXN1bHQpOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFz
 cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCnZvaWQgZmlsbChfRm9yd2Fy
 ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
 JiBfX3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
 dCkNCiAgICAqX19maXJzdCA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCl9P
 dXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf
 X24sIGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
 Zmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICByZXR1cm4gX19m
 aXJzdDsNCn0NCg0KDQoNCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hh
 ciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LA0KICAgICAgICAg
 ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpDQp7DQogIHVuc2ln
 bmVkIGNoYXIgX190bXAgPSBfX2M7DQogIG1lbXNldChfX2ZpcnN0LCBfX3Rt
 cCwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCmlubGluZSB2b2lkIGZpbGwo
 c2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpDQp7DQog
 IHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOw0KICBtZW1zZXQoX19maXJzdCwg
 c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBf
 X2ZpcnN0KTsNCn0NCg0KaW5saW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0
 LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykNCnsNCiAgY2hhciBf
 X3RtcCA9IF9fYzsNCiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
 c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlubGluZSB1bnNpZ25lZCBjaGFy
 KiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
 aGFyJiBfX2MpDQp7DQogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg
 X19jKTsNCiAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQp9DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfU2l6ZT4NCmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNo
 YXIqIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpDQp7DQogIGZpbGwoX19m
 aXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsNCiAgcmV0dXJuIF9fZmlyc3Qg
 KyBfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlubGluZSBj
 aGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBj
 aGFyJiBfX2MpDQp7DQogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg
 X19jKTsNCiAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQp9DQoNCg0KDQoNCg0K
 dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
 Mj4NCnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChf
 SW5wdXRJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
 IF9fZmlyc3QyKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
 Kl9fZmlyc3QxID09ICpfX2ZpcnN0Mikgew0KICAgICsrX19maXJzdDE7DQog
 ICAgKytfX2ZpcnN0MjsNCiAgfQ0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy
 MSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
 IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpwYWlyPF9JbnB1dEl0ZXIxLCBf
 SW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
 SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
 IF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
 IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0
 MikpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0N
 CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2Zp
 cnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KaW5saW5lIGJvb2wgZXF1YWwo
 X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
 ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQoNCg0KICBmb3IgKCA7IF9fZmlyc3QxICE9
 IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCEo
 Kl9fZmlyc3QxID09ICpfX2ZpcnN0MikpDQogICAgICByZXR1cm4gZmFsc2U7
 DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
 YXRlPg0KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEs
 IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICBfSW5w
 dXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
 cmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
 KytfX2ZpcnN0MSwgKytfX2ZpcnN0MikNCiAgICBpZiAoIV9fYmluYXJ5X3By
 ZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIGZhbHNl
 Ow0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KYm9vbCBsZXhp
 Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
 cHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIp
 DQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 Cg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
 IT0gX19sYXN0Mg0KICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIp
 IHsNCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgcmV0
 dXJuIHRydWU7DQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAg
 ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDEgPT0g
 X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
 cyBfQ29tcGFyZT4NCmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lu
 cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
 LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgZm9yICggOyBf
 X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDINCiAg
 ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgaWYgKF9f
 Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICByZXR1cm4gdHJ1
 ZTsNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAg
 ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDEgPT0g
 X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KfQ0KDQppbmxpbmUg
 Ym9vbA0KbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQg
 Y2hhciogX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25z
 dCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAgICAg
 ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qy
 KQ0Kew0KICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmly
 c3QxOw0KICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmly
 c3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEs
 IF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAgcmV0dXJuIF9f
 cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7
 DQp9DQoNCmlubGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNv
 bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
 X19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpDQp7DQoNCiAgcmV0dXJu
 IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciop
 IF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
 c3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
 IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7DQoNCg0KDQoNCg0KDQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
 DQppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0
 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
 MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCiAgd2hpbGUgKF9fZmlyc3Qx
 ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlm
 ICgqX19maXJzdDEgPCAqX19maXJzdDIpDQogICAgICByZXR1cm4gLTE7DQog
 ICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAgICAgIHJldHVybiAx
 Ow0KICAgICsrX19maXJzdDE7DQogICAgKytfX2ZpcnN0MjsNCiAgfQ0KICBp
 ZiAoX19maXJzdDIgPT0gX19sYXN0Mikgew0KICAgIHJldHVybiAhKF9fZmly
 c3QxID09IF9fbGFzdDEpOw0KICB9DQogIGVsc2Ugew0KICAgIHJldHVybiAt
 MTsNCiAgfQ0KfQ0KDQppbmxpbmUgaW50DQpfX2xleGljb2dyYXBoaWNhbF9j
 b21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
 Y2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
 c3QyKQ0Kew0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAt
 IF9fZmlyc3QxOw0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0
 MiAtIF9fZmlyc3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAo
 X19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAg
 cmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdA0KICAgICAgICAgICAg
 ICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
 PCBfX2xlbjIgPyAtMSA6IDEpKTsNCn0NCg0KaW5saW5lIGludA0KX19sZXhp
 Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3Qx
 LCBjb25zdCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf
 X2xhc3QyKQ0Kew0KDQogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21w
 YXJlXzN3YXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
 b25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3Qx
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
 bmVkIGNoYXIqKSBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7DQoNCg0K
 DQoNCg0KDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
 c3MgX0lucHV0SXRlcjI+DQppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf
 M3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
 MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgcmV0dXJu
 IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19s
 YXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOw0KfQ0KDQp9DQojIDIxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5
 LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDI4ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KIyAx
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5j
 dGV4Y2VwdC5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz
 LmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQN
 CnsNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsN
 Cg0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0K
 ICB2b2lkDQogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0K
 ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9f
 dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk
 DQogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN
 CiAgdm9pZA0KICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh
 ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv
 bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9y
 YW5nZShjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19y
 dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
 X3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9p
 ZA0KICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
 DQoNCiAgdm9pZA0KICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
 aGFyKiBfX3MpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJl
 KGNvbnN0IGNoYXIqIF9fcyk7DQp9DQojIDI5ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
 c3RkZGVmLmgiIDEgMw0KIyAzMCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o
 IiAxIDMNCiMgMzEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzDQoj
 IDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfYWxsb2MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMw0KIyAzNyAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3Nl
 cnQuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0DQoj
 IDExICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNA0KI3ByYWdtYSBpZGVu
 dCAiQCgjKWFzc2VydC5oCTEuOQk5Mi8wNy8xNCBTTUkiDQoNCg0KZXh0ZXJu
 ICJDIiB7DQoNCg0KDQpleHRlcm4gdm9pZCBfX2Fzc2VydChjb25zdCBjaGFy
 ICosIGNvbnN0IGNoYXIgKiwgaW50KTsNCg0KDQoNCg0KDQp9DQojIDM4ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fz
 c2VydC5oIiAyIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCg0KDQoNCg0KDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
 aHJlYWRzLmgiIDEgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvYml0cy9ndGhyLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMiAzDQojIDUx
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
 dGhyZWFkcy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDY2ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
 IiAzDQpzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UNCnsNCg0KDQoNCg0KICB0eXBl
 ZGVmIHNpemVfdCBfUkNfdDsNCg0KDQoNCiAgIHZvbGF0aWxlIF9SQ190IF9N
 X3JlZl9jb3VudDsNCg0KDQoNCg0KICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9y
 ZWZfY291bnRfbG9jazsNCiAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6
 IF9NX3JlZl9jb3VudChfX24pDQogICAgew0KDQogICAgICBfX2d0aHJlYWRf
 bXV0ZXhfdCBfX3RtcCA9IHt7ezB9LCAwfSwge3t7MH19fSwgezB9fTsNCiAg
 ICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7DQoNCg0KDQoNCg0KICAg
 IH0NCiMgMTEyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGxfdGhyZWFkcy5oIiAzDQogIHZvaWQgX01faW5jcigpIHsNCiAg
 ICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOw0K
 ICAgICsrX01fcmVmX2NvdW50Ow0KICAgIF9fZ3RocmVhZF9tdXRleF91bmxv
 Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgfQ0KICBfUkNfdCBfTV9kZWNy
 KCkgew0KICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRf
 bG9jayk7DQogICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j
 b3VudDsNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291
 bnRfbG9jayk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQojIDE2MyAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
 ZHMuaCIgMw0KfTsNCiMgMjg0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzDQp0ZW1wbGF0ZSA8aW50
 IF9faW5zdD4NCnN0cnVjdCBfU1RMX211dGV4X3NwaW4gew0KICBlbnVtIHsg
 X19sb3dfbWF4ID0gMzAsIF9faGlnaF9tYXggPSAxMDAwIH07DQoNCg0KICBz
 dGF0aWMgdW5zaWduZWQgX19tYXg7DQogIHN0YXRpYyB1bnNpZ25lZCBfX2xh
 c3Q7DQp9Ow0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnVuc2lnbmVkIF9T
 VExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9IF9TVExfbXV0ZXhfc3Bp
 bjxfX2luc3Q+OjpfX2xvd19tYXg7DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0
 Pg0KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9
 IDA7DQojIDMxMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RsX3RocmVhZHMuaCIgMw0Kc3RydWN0IF9TVExfbXV0ZXhfbG9j
 aw0Kew0KDQoNCg0KDQoNCg0KDQogIF9fZ3RocmVhZF9tdXRleF90IF9NX2xv
 Y2s7DQogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsNCiMgMzQyICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
 IiAzDQogIH0NCiAgdm9pZCBfTV9hY3F1aXJlX2xvY2soKSB7DQoNCg0KDQog
 ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOw0KICB9DQogIHZv
 aWQgX01fcmVsZWFzZV9sb2NrKCkgew0KDQoNCg0KICAgIF9fZ3RocmVhZF9t
 dXRleF91bmxvY2soJl9NX2xvY2spOw0KICB9DQojIDQ1MyAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIg
 Mw0KfTsNCiMgNDkyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGxfdGhyZWFkcy5oIiAzDQpzdHJ1Y3QgX1NUTF9hdXRvX2xv
 Y2sNCnsNCiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOw0KDQogIF9TVExf
 YXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2so
 X19sb2NrKQ0KICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQ0K
 ICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr
 KCk7IH0NCg0KcHJpdmF0ZToNCiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NU
 TF9hdXRvX2xvY2smKTsNCiAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9h
 dXRvX2xvY2smKTsNCn07DQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgNjgg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
 bGxvYy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1wbGF0ZSA8
 aW50IF9faW5zdD4NCmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsN
 Cg0KcHJpdmF0ZToNCg0KICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhz
 aXplX3QpOw0KICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCos
 IHNpemVfdCk7DQogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29v
 bV9oYW5kbGVyKSgpOw0KDQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFs
 bG9jYXRlKHNpemVfdCBfX24pDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9
 IG1hbGxvYyhfX24pOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3Vs
 dCA9IF9TX29vbV9tYWxsb2MoX19uKTsNCiAgICByZXR1cm4gX19yZXN1bHQ7
 DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg
 c2l6ZV90ICkNCiAgew0KICAgIGZyZWUoX19wKTsNCiAgfQ0KDQogIHN0YXRp
 YyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90
 IF9fbmV3X3N6KQ0KICB7DQogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9j
 KF9fcCwgX19uZXdfc3opOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl
 c3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOw0KICAgIHJl
 dHVybiBfX3Jlc3VsdDsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkICgqIF9fc2V0
 X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpDQogIHsNCiAgICB2
 b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7
 DQogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7DQogICAg
 cmV0dXJuKF9fb2xkKTsNCiAgfQ0KDQp9Ow0KDQoNCg0KdGVtcGxhdGUgPGlu
 dCBfX2luc3Q+DQp2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
 aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsNCg0K
 dGVtcGxhdGUgPGludCBfX2luc3Q+DQp2b2lkKg0KX19tYWxsb2NfYWxsb2Nf
 dGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQ0K
 ew0KICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICB2
 b2lkKiBfX3Jlc3VsdDsNCg0KICAgIGZvciAoOzspIHsNCiAgICAgICAgX19t
 eV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
 Ow0KICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0
 ZDo6X190aHJvd19iYWRfYWxsb2MoKTsgfQ0KICAgICAgICAoKl9fbXlfbWFs
 bG9jX2hhbmRsZXIpKCk7DQogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9f
 bik7DQogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsN
 CiAgICB9DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCogX19t
 YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Mo
 dm9pZCogX19wLCBzaXplX3QgX19uKQ0Kew0KICAgIHZvaWQgKCogX19teV9t
 YWxsb2NfaGFuZGxlcikoKTsNCiAgICB2b2lkKiBfX3Jlc3VsdDsNCg0KICAg
 IGZvciAoOzspIHsNCiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9f
 bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBpZiAoMCA9PSBf
 X215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2Mo
 KTsgfQ0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAg
 ICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7DQogICAgICAgIGlm
 IChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9DQp9DQoNCnR5
 cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9j
 Ow0KDQp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmNsYXNz
 IHNpbXBsZV9hbGxvYyB7DQoNCnB1YmxpYzoNCiAgICBzdGF0aWMgX1RwKiBh
 bGxvY2F0ZShzaXplX3QgX19uKQ0KICAgICAgeyByZXR1cm4gMCA9PSBfX24g
 PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChf
 VHApKTsgfQ0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpDQogICAg
 ICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9U
 cCkpOyB9DQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwg
 c2l6ZV90IF9fbikNCiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRl
 YWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9DQogICAgc3Rh
 dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkNCiAgICAgIHsgX0FsbG9j
 OjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQ0KfTsNCg0KDQoN
 Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBkZWJ1Z19h
 bGxvYyB7DQoNCnByaXZhdGU6DQoNCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsN
 Cg0KDQoNCnB1YmxpYzoNCg0KICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
 ZV90IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9B
 bGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOw0KICAgICoo
 c2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsNCiAgICByZXR1cm4gX19yZXN1bHQg
 KyAoaW50KSBfU19leHRyYTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkIGRlYWxs
 b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgY2hhciog
 X19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7DQogICAg
 KHZvaWQpKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSB8fCAoX19hc3Nl
 cnQoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTAp
 LCAwKSk7DQogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g
 KyAoaW50KSBfU19leHRyYSk7DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVh
 bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9f
 bmV3X3N6KQ0KICB7DQogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19w
 IC0gKGludCkgX1NfZXh0cmE7DQogICAgKHZvaWQpKCgqKHNpemVfdCopX19y
 ZWFsX3AgPT0gX19vbGRfc3opIHx8IChfX2Fzc2VydCgiKihzaXplX3QqKV9f
 cmVhbF9wID09IF9fb2xkX3N6IiwgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMTk3KSwgMCkpOw0KICAg
 IGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQ0KICAgICAgX0FsbG9jOjpyZWFs
 bG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr
 IChpbnQpIF9TX2V4dHJhKTsNCiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBf
 X25ld19zejsNCiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRy
 YTsNCiAgfQ0KDQp9Ow0KIyAyNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Ym9v
 bCB0aHJlYWRzLCBpbnQgaW5zdD4NCmNsYXNzIF9fZGVmYXVsdF9hbGxvY190
 ZW1wbGF0ZSB7DQoNCnByaXZhdGU6DQoNCg0KICBlbnVtIHtfQUxJR04gPSA4
 fTsNCiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07DQogIGVudW0ge19ORlJF
 RUxJU1RTID0gMTZ9Ow0KICBzdGF0aWMgc2l6ZV90DQogIF9TX3JvdW5kX3Vw
 KHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsg
 KHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7
 IH0NCg0KICB1bmlvbiBfT2JqIHsNCiAgICAgICAgdW5pb24gX09iaiogX01f
 ZnJlZV9saXN0X2xpbms7DQogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFb
 MV07DQogIH07DQoNCiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVf
 bGlzdFtdOw0KDQogIHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgo
 c2l6ZV90IF9fYnl0ZXMpIHsNCiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMp
 ICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsNCiAg
 fQ0KDQoNCiAgc3RhdGljIHZvaWQqIF9TX3JlZmlsbChzaXplX3QgX19uKTsN
 Cg0KDQogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXplX3QgX19z
 aXplLCBpbnQmIF9fbm9ianMpOw0KDQoNCiAgc3RhdGljIGNoYXIqIF9TX3N0
 YXJ0X2ZyZWU7DQogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsNCiAgc3Rh
 dGljIHNpemVfdCBfU19oZWFwX3NpemU7DQoNCg0KICAgIHN0YXRpYyBfU1RM
 X211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsNCg0KDQoNCg0K
 DQogICAgY2xhc3MgX0xvY2s7DQogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOw0K
 ICAgIGNsYXNzIF9Mb2NrIHsNCiAgICAgICAgcHVibGljOg0KICAgICAgICAg
 ICAgX0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9y
 X2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH07IH0NCiAgICAgICAgICAgIH5f
 TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9j
 ay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQ0KICAgIH07DQoNCnB1YmxpYzoN
 Cg0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICB7
 DQogICAgdm9pZCogX19yZXQgPSAwOw0KDQogICAgaWYgKF9fbiA+IChzaXpl
 X3QpIF9NQVhfQllURVMpIHsNCiAgICAgIF9fcmV0ID0gbWFsbG9jX2FsbG9j
 OjphbGxvY2F0ZShfX24pOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIF9P
 YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdA0KICAgICAgICAgID0gX1Nf
 ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsNCg0KDQoNCg0K
 DQogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7DQoNCiAgICAgIF9PYmoq
 IF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgaWYgKF9fcmVz
 dWx0ID09IDApDQogICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5k
 X3VwKF9fbikpOw0KICAgICAgZWxzZSB7DQogICAgICAgICpfX215X2ZyZWVf
 bGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOw0KICAgICAg
 ICBfX3JldCA9IF9fcmVzdWx0Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIHJl
 dHVybiBfX3JldDsNCiAgfTsNCg0KDQogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh
 dGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgaWYgKF9fbiA+
 IChzaXplX3QpIF9NQVhfQllURVMpDQogICAgICBtYWxsb2NfYWxsb2M6OmRl
 YWxsb2NhdGUoX19wLCBfX24pOw0KICAgIGVsc2Ugew0KICAgICAgX09iaiog
 dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0DQogICAgICAgICAgPSBfU19mcmVl
 X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAgICAgX09iaiog
 X19xID0gKF9PYmoqKV9fcDsNCg0KDQoNCg0KICAgICAgX0xvY2sgX19sb2Nr
 X2luc3RhbmNlOw0KDQogICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsg
 PSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBf
 X3E7DQoNCiAgICB9DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0
 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6
 KTsNCg0KfSA7DQoNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
 PHRydWUsIDA+IGFsbG9jOw0KdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVt
 cGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7DQoNCnRlbXBs
 YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29s
 IG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
 dGhyZWFkcywgX19pbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNv
 bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
 dD4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wg
 X190aHJlYWRzLCBpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
 PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
 X2luc3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
 dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpDQp7DQog
 IHJldHVybiBmYWxzZTsNCn0NCg0KDQoNCg0KDQoNCg0KdGVtcGxhdGUgPGJv
 b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhcioNCl9fZGVmYXVsdF9h
 bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2Fs
 bG9jKHNpemVfdCBfX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i
 anMpDQp7DQogICAgY2hhciogX19yZXN1bHQ7DQogICAgc2l6ZV90IF9fdG90
 YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0KICAgIHNpemVfdCBfX2J5
 dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7DQoNCiAg
 ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsNCiAgICAg
 ICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOw0KICAgICAgICBfU19zdGFy
 dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7DQogICAgICAgIHJldHVybihfX3Jl
 c3VsdCk7DQogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXpl
 KSB7DQogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19z
 aXplKTsNCiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9i
 anM7DQogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAg
 ICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICBy
 ZXR1cm4oX19yZXN1bHQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHNpemVf
 dCBfX2J5dGVzX3RvX2dldCA9DQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0
 ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7DQoNCiAgICAg
 ICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsNCiAgICAgICAgICAgIF9PYmoq
 IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9DQogICAgICAgICAgICAgICAg
 ICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5
 dGVzX2xlZnQpOw0KDQogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2Zy
 ZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0Ow0K
 ICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0
 X2ZyZWU7DQogICAgICAgIH0NCiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj
 aGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOw0KICAgICAgICBpZiAoMCA9
 PSBfU19zdGFydF9mcmVlKSB7DQogICAgICAgICAgICBzaXplX3QgX19pOw0K
 ICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0K
 ICAgICAgICAgICAgX09iaiogX19wOw0KDQoNCg0KICAgICAgICAgICAgZm9y
 IChfX2kgPSBfX3NpemU7DQogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6
 ZV90KSBfTUFYX0JZVEVTOw0KICAgICAgICAgICAgICAgICBfX2kgKz0gKHNp
 emVfdCkgX0FMSUdOKSB7DQogICAgICAgICAgICAgICAgX19teV9mcmVlX2xp
 c3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOw0K
 ICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAg
 ICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsNCiAgICAgICAgICAgICAgICAg
 ICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5r
 Ow0KICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIq
 KV9fcDsNCiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z
 dGFydF9mcmVlICsgX19pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4o
 X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7DQoNCg0KICAgICAg
 ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIF9TX2Vu
 ZF9mcmVlID0gMDsNCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh
 ciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQoN
 Cg0KDQogICAgICAgIH0NCiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0
 ZXNfdG9fZ2V0Ow0KICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy
 ZWUgKyBfX2J5dGVzX3RvX2dldDsNCiAgICAgICAgcmV0dXJuKF9TX2NodW5r
 X2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KICAgIH0NCn0NCg0KDQoNCg0K
 DQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQp2b2lk
 Kg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
 Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pDQp7DQogICAgaW50IF9fbm9ianMg
 PSAyMDsNCiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u
 LCBfX25vYmpzKTsNCiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp
 c3Q7DQogICAgX09iaiogX19yZXN1bHQ7DQogICAgX09iaiogX19jdXJyZW50
 X29iajsNCiAgICBfT2JqKiBfX25leHRfb2JqOw0KICAgIGludCBfX2k7DQoN
 CiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7DQogICAg
 X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9p
 bmRleChfX24pOw0KDQoNCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1
 bms7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9P
 YmoqKShfX2NodW5rICsgX19uKTsNCiAgICAgIGZvciAoX19pID0gMTsgOyBf
 X2krKykgew0KICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsN
 CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9v
 YmogKyBfX24pOw0KICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7
 DQogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9s
 aW5rID0gMDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9IGVsc2Ug
 ew0KICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3Rf
 bGluayA9IF9fbmV4dF9vYmo7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICBy
 ZXR1cm4oX19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRz
 LCBpbnQgaW5zdD4NCnZvaWQqDQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
 dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IHNpemVfdCBfX29sZF9zeiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opDQp7
 DQogICAgdm9pZCogX19yZXN1bHQ7DQogICAgc2l6ZV90IF9fY29weV9zejsN
 Cg0KICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYg
 X19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7DQogICAgICAgIHJl
 dHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsNCiAgICB9DQogICAgaWYg
 KF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19z
 eikpIHJldHVybihfX3ApOw0KICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19u
 ZXdfc3opOw0KICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/
 IF9fb2xkX3N6IDogX19uZXdfc3o7DQogICAgbWVtY3B5KF9fcmVzdWx0LCBf
 X3AsIF9fY29weV9zeik7DQogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6
 KTsNCiAgICByZXR1cm4oX19yZXN1bHQpOw0KfQ0KDQoNCiAgICB0ZW1wbGF0
 ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgX1NUTF9tdXRl
 eF9sb2NrDQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
 cywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jaw0KICAgICAgICA9
 IHsge3t7MH0sIDB9LCB7e3swfX19LCB7MH19IH07DQoNCg0KDQp0ZW1wbGF0
 ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpjaGFyKiBfX2RlZmF1
 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFy
 dF9mcmVlID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
 X19pbnN0Pg0KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
 ZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOw0KDQp0ZW1wbGF0ZSA8
 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzaXplX3QgX19kZWZhdWx0
 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9z
 aXplID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
 bnN0Pg0KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
 ZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUNCl9fZGVmYXVsdF9hbGxv
 Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3Rb
 DQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
 bnN0Pjo6X05GUkVFTElTVFMNCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwg
 MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsNCiMgNTI2ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIg
 Mw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmNsYXNzIGFsbG9jYXRvciB7DQog
 IHR5cGVkZWYgYWxsb2MgX0FsbG9jOw0KcHVibGljOg0KICB0eXBlZGVmIHNp
 emVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
 Y2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYg
 Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVm
 ZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl
 Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxj
 bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9j
 YXRvcjxfVHAxPiBvdGhlcjsNCiAgfTsNCg0KICBhbGxvY2F0b3IoKSB0aHJv
 dygpIHt9DQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygp
 IHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3Qg
 YWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQ0KICB+YWxsb2NhdG9yKCkg
 dGhyb3coKSB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194
 KSBjb25zdCB7IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRk
 cmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194
 OyB9DQoNCg0KDQogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u
 c3Qgdm9pZCogPSAwKSB7DQogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGlj
 X2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1Rw
 KSkpDQogICAgICAgICAgICAgICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9p
 ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAg
 IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkp
 OyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQ0K
 ICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQog
 IHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFs
 KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBv
 aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZTw+
 DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KcHVibGljOg0KICB0eXBlZGVm
 IHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
 cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOw0KICB0eXBl
 ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgdm9p
 ZCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
 Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhl
 cjsNCiAgfTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
 X1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8
 X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0dXJuIHRy
 dWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlu
 bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBj
 b25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0N
 CiMgNjAyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
 X0FsbG9jPg0Kc3RydWN0IF9fYWxsb2NhdG9yIHsNCiAgX0FsbG9jIF9fdW5k
 ZXJseWluZ19hbGxvYzsNCg0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
 DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlw
 ZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z
 dF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBl
 ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9U
 cCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
 Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9B
 bGxvYz4gb3RoZXI7DQogIH07DQoNCiAgX19hbGxvY2F0b3IoKSB0aHJvdygp
 IHt9DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRo
 cm93KCkNCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5
 aW5nX2FsbG9jKSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4NCiAgX19h
 bGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19h
 KSB0aHJvdygpDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k
 ZXJseWluZ19hbGxvYykge30NCiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7
 fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7
 IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25z
 dF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQoNCg0K
 ICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g
 MCkgew0KICAgIHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0YXRpY19j
 YXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBz
 aXplb2YoX1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9pZCBk
 ZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsg
 X191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXpl
 b2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0
 aHJvdygpDQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHAp
 OyB9DQoNCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9U
 cCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQ0KICB2b2lkIGRl
 c3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0NCn07DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBfX2FsbG9jYXRvcjx2b2lk
 LCBfQWxsb2M+IHsNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0
 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
 dm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9w
 b2ludGVyOw0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCg0KICB0ZW1w
 bGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRl
 ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOw0KICB9Ow0KfTsN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5l
 IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
 Yz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
 b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEu
 X191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpp
 bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg
 X0FsbG9jPiYgX19hMSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
 X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQ0Kew0KICByZXR1cm4g
 X19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdf
 YWxsb2M7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGludCBpbnN0Pg0KaW5s
 aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
 bGF0ZTxpbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
 bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikNCnsNCiAgcmV0dXJuIHRy
 dWU7DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wg
 b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
 c3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2Nf
 YWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpDQp7DQogIHJldHVybiBmYWxzZTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sIG9w
 ZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAg
 ICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7
 DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
 Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxf
 QWxsb2M+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdf
 YWxsb2M8X0FsbG9jPiYpIHsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KIyA3MzIg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
 bGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh
 dG9yPg0Kc3RydWN0IF9BbGxvY190cmFpdHMNCnsNCiAgc3RhdGljIGNvbnN0
 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7DQogIHR5cGVkZWYgdHlw
 ZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVy
 IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg
 Y2xhc3MgX0FsbG9jYXRvcj4NCmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf
 VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7DQoNCg0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0Kc3RydWN0IF9BbGxvY190
 cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0KICBzdGF0aWMgY29u
 c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNp
 bXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRl
 ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxv
 Y190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
 ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
 dHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19h
 bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVk
 ZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
 X2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxj
 bGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kc3RydWN0
 IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
 X190aHJlYWRzLCBfX2luc3Q+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wg
 X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxs
 b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
 X2luc3Q+ID4NCiAgICAgICAgICBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBf
 X2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
 cmVhZHMsIF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0K
 fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpz
 dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4g
 Pg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
 cnVlOw0KICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9j
 PF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRv
 cjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsN
 Cn07DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
 IGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAg
 ICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19h
 bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPg0Kew0KICBzdGF0aWMgY29uc3Qg
 Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNpbXBs
 ZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4g
 PiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f
 bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlw
 ZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg
 Ym9vbCBfX3RociwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRz
 PF9UcCwNCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVs
 dF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4NCnsNCiAgc3Rh
 dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlw
 ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
 dGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQog
 IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
 cGxhdGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgYWxsb2NhdG9yX3R5
 cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
 IGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h
 bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAg
 c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAg
 dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
 ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk
 ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQp9
 DQojIDIyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAz
 NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
 X2NvbnN0cnVjdC5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9uZXciIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMNCg0K
 bmFtZXNwYWNlIHN0ZA0Kew0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgdm9pZCBfQ29uc3Ry
 dWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsNCm5ldyAoKHZv
 aWQqKSBfX3ApIF9UMShfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9UMT4NCmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsNCiAg
 bmV3ICgodm9pZCopIF9fcCkgX1QxKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfVHA+DQppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikg
 ew0KICBfX3BvaW50ZXItPn5fVHAoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9Gb3J3YXJkSXRlcmF0b3I+DQp2b2lkDQpfX2Rlc3Ryb3lfYXV4KF9Gb3J3
 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs
 IF9fZmFsc2VfdHlwZSkNCnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
 dDsgKytfX2ZpcnN0KQ0KICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9p
 ZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl
 cmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
 cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQNCl9fZGVz
 dHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
 b3IgX19sYXN0LCBfVHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
 ZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcg0KICAgICAg
 ICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7DQogIF9fZGVzdHJveV9hdXgoX19m
 aXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCmlubGluZSB2b2lk
 IF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ
 dGVyYXRvciBfX2xhc3QpIHsNCiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFz
 dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KaW5saW5lIHZvaWQg
 X0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQ0KaW5saW5lIHZvaWQgX0Rlc3Ry
 b3koaW50KiwgaW50Kikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcq
 LCBsb25nKikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxv
 YXQqKSB7fQ0KaW5saW5lIHZvaWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91Ymxl
 Kikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90
 Kikge30NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
 Pg0KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDIm
 IF9fdmFsdWUpIHsNCiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPg0KaW5saW5lIHZvaWQgY29uc3RydWN0
 KF9UMSogX19wKSB7DQogIF9Db25zdHJ1Y3QoX19wKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9UcD4NCmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3Bv
 aW50ZXIpIHsNCiAgX0Rlc3Ryb3koX19wb2ludGVyKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBkZXN0
 cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
 ciBfX2xhc3QpIHsNCiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsNCn0N
 Cg0KfQ0KIyAyMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
 ZXMuaCIgMSAzDQojIDI0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx
 IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0bF90ZW1wYnVmLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9UcD4NCnBhaXI8X1RwKiwgcHRyZGlmZl90Pg0KX19n
 ZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopDQp7
 DQogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9m
 KF9UcCkpKQ0KICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp
 Ow0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICBfVHAqIF9fdG1wID0g
 KF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOw0K
 ICAgIGlmIChfX3RtcCAhPSAwKQ0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwg
 cHRyZGlmZl90PihfX3RtcCwgX19sZW4pOw0KICAgIF9fbGVuIC89IDI7DQog
 IH0NCg0KICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAs
 IDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIHBhaXI8
 X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZm
 X3QgX19sZW4pIHsNCiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIo
 X19sZW4sIChfVHAqKSAwKTsNCn0NCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxj
 bGFzcyBfVHA+DQppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90
 ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikgew0KICBy
 ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDAp
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kdm9pZCByZXR1cm5fdGVt
 cG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgew0KICBmcmVlKF9fcCk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+
 DQpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7DQpwcml2YXRlOg0KICBwdHJk
 aWZmX3QgX01fb3JpZ2luYWxfbGVuOw0KICBwdHJkaWZmX3QgX01fbGVuOw0K
 ICBfVHAqIF9NX2J1ZmZlcjsNCg0KICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZl
 cigpIHsNCiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47DQogICAgX01f
 YnVmZmVyID0gMDsNCg0KICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgy
 MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQ0KICAgICAgX01fbGVuID0gMjE0
 NzQ4MzY0NyAvIHNpemVvZihfVHApOw0KDQogICAgd2hpbGUgKF9NX2xlbiA+
 IDApIHsNCiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVu
 ICogc2l6ZW9mKF9UcCkpOw0KICAgICAgaWYgKF9NX2J1ZmZlcikNCiAgICAg
 ICAgYnJlYWs7DQogICAgICBfTV9sZW4gLz0gMjsNCiAgICB9DQogIH0NCg0K
 ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1
 ZV90eXBlKSB7fQ0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0
 IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsNCiAgICB1bmluaXRpYWxpemVk
 X2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsNCiAgfQ0KDQpwdWJs
 aWM6DQogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVu
 OyB9DQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0
 dXJuIF9NX29yaWdpbmFsX2xlbjsgfQ0KICBfVHAqIGJlZ2luKCkgeyByZXR1
 cm4gX01fYnVmZmVyOyB9DQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVm
 ZmVyICsgX01fbGVuOyB9DQoNCiAgX1RlbXBvcmFyeV9idWZmZXIoX0Zvcndh
 cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg
 ew0KDQogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46
 Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3INCiAgICAgICAgICAg
 IF9Ucml2aWFsOw0KDQogICAgdHJ5IHsNCiAgICAgIF9NX2xlbiA9IDA7DQog
 ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7DQogICAg
 ICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsNCiAgICAgIGlmIChfTV9sZW4gPiAw
 KQ0KICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1Ry
 aXZpYWwoKSk7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9NX2J1
 ZmZlcik7IF9NX2J1ZmZlciA9IDA7IF9NX2xlbiA9IDA7IHRocm93OyB9Ow0K
 ICB9DQoNCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgew0KICAgIGRlc3Ryb3ko
 X01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOw0KICAgIGZyZWUoX01f
 YnVmZmVyKTsNCiAgfQ0KDQpwcml2YXRlOg0KDQogIF9UZW1wb3JhcnlfYnVm
 ZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30NCiAgdm9pZCBvcGVy
 YXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQ0KfTsNCg0KDQoN
 CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLA0KICAgICAgICAg
 IGNsYXNzIF9UcA0KICAgICAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGl0
 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0K
 ICAgICAgICAgPg0Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMg
 X1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPg0Kew0K
 ICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg
 X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQogICAgOiBfVGVtcG9yYXJ5X2J1
 ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkg
 e30NCiAgfnRlbXBvcmFyeV9idWZmZXIoKSB7fQ0KfTsNCg0KfQ0KIyAyNSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21l
 bW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM0ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5p
 bml0aWFsaXplZC5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyAzNSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5p
 dGlhbGl6ZWQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ
 dGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2Nv
 cHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
 dWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K
 ew0KICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3
 YXJkSXRlcj4NCl9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHlf
 YXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCnsN
 CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSB7DQog
 ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f
 Y3VyKQ0KICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQog
 ICAgcmV0dXJuIF9fY3VyOw0KICB9DQogIGNhdGNoKC4uLikgeyBfRGVzdHJv
 eShfX3Jlc3VsdCwgX19jdXIpOyB0aHJvdzsgfTsNCn0NCg0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
 cyBfVHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRf
 Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBf
 VHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Rw
 Pjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgcmV0dXJuIF9fdW5pbml0aWFs
 aXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNf
 UE9EKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
 c3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KICB1bmlu
 aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
 IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
 X3Jlc3VsdCkNCnsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9f
 Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsNCn0NCg0KaW5s
 aW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2Zp
 cnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7DQogIG1lbW1vdmUoX19y
 ZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOw0KICByZXR1cm4g
 X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCmlubGluZSB3
 Y2hhcl90Kg0KdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9f
 Zmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwNCiAgICAgICAgICAgICAg
 ICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkNCnsNCiAgbWVtbW92ZShfX3Jlc3Vs
 dCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmly
 c3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
 Ow0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
 IF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIs
 IF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0
 SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAg
 ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg
 ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgX0ZvcndhcmRJ
 dGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSB7DQogICAgZm9yICggOyBf
 X2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQ0K
 ICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQogICAgcmV0
 dXJuIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBf
 X2N1cik7DQogIH0NCiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0
 LCBfX2N1cik7IHRocm93OyB9Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
 bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0
 ZXI+DQppbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJ
 dGVyPg0KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRl
 ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg
 ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAg
 ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9SYW5k
 b21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICBy
 ZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigN
 CiAgICAgICAgICAgICAgICAgX19sYXN0LA0KICAgICAgICAgICAgICAgICB1
 bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkp
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
 emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0
 ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lu
 cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAg
 ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBf
 X3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVz
 dWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
 dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
 DQppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+DQp1bmlu
 aXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
 Y291bnQsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
 ZXN1bHQpIHsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m
 aXJzdCwgX19jb3VudCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0K
 fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
 X1RwPg0KaW5saW5lIHZvaWQNCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf
 Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVl
 X3R5cGUpDQp7DQogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2
 b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9f
 Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkNCnsNCiAg
 X0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsNCiAgdHJ5IHsNCiAgICBm
 b3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikNCiAgICAgIF9Db25z
 dHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgfQ0KICBjYXRjaCguLi4pIHsgX0Rl
 c3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAx
 Pg0KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJ
 dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCwgX1RwMSop
 DQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6
 aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgX191bmluaXRpYWxpemVkX2ZpbGxf
 YXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOw0KDQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlu
 bGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m
 aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
 ZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IGNvbnN0IF9UcCYgX194KQ0Kew0KICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChf
 X2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsN
 Cn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
 IF9TaXplLCBjbGFzcyBfVHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3Vu
 aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
 X1NpemUgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
 X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0Kew0KICByZXR1cm4gZmlsbF9uKF9f
 Zmlyc3QsIF9fbiwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
 YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCl9Gb3J3YXJkSXRl
 cg0KX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9f
 Zmlyc3QsIF9TaXplIF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 IGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3YXJk
 SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSB7DQogICAgZm9yICggOyBf
 X24gPiAwOyAtLV9fbiwgKytfX2N1cikNCiAgICAgIF9Db25zdHJ1Y3QoJipf
 X2N1ciwgX194KTsNCiAgICByZXR1cm4gX19jdXI7DQogIH0NCiAgY2F0Y2go
 Li4uKSB7IF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07DQp9
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXpl
 LCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+DQppbmxpbmUgX0ZvcndhcmRJdGVy
 DQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
 LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVHAxKikNCnsNCiAgdHlw
 ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlw
 ZSBfSXNfUE9EOw0KICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9h
 dXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf
 VHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQp1bmluaXRpYWxpemVkX2ZpbGxf
 bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAm
 IF9feCkNCnsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19m
 aXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoj
 IDIzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVy
 Pg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHlf
 Y29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
 MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
 aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkNCnsNCiAgX0Zvcndh
 cmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBf
 X2xhc3QxLCBfX3Jlc3VsdCk7DQogIHRyeSB7DQogICAgcmV0dXJuIHVuaW5p
 dGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOw0KICB9
 DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0
 aHJvdzsgfTsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
 SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPg0KaW5saW5lIF9G
 b3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2Fy
 ZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
 ciBfX2xhc3QpDQp7DQogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwg
 X19taWQsIF9feCk7DQogIHRyeSB7DQogICAgcmV0dXJuIHVuaW5pdGlhbGl6
 ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsNCiAgfQ0KICBjYXRj
 aCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07
 DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
 cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX3Vu
 aW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J
 bnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7
 DQogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHko
 X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsNCiAgdHJ5IHsNCiAgICB1
 bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOw0KICB9
 DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsg
 dGhyb3c7IH07DQp9DQoNCn0NCiMgMjYgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdf
 c3RvcmFnZV9pdGVyLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg
 Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
 cmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KY2xhc3MgcmF3X3N0b3JhZ2VfaXRl
 cmF0b3Igew0KcHJvdGVjdGVkOg0KICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0
 ZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
 dGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
 DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
 dm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KDQog
 IGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0
 b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQ0KICByYXdfc3RvcmFnZV9pdGVy
 YXRvciYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgcmF3X3N0
 b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu
 dCkgew0KICAgIGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7DQog
 ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIHJhd19zdG9yYWdlX2l0ZXJhdG9y
 PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mIG9wZXJhdG9yKysoKSB7DQogICAg
 KytfTV9pdGVyOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICByYXdfc3Rv
 cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IG9wZXJhdG9y
 KysoaW50KSB7DQogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ
 dGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOw0KICAgICsrX01faXRlcjsN
 CiAgICByZXR1cm4gX190bXA7DQogIH0NCn07DQoNCg0KfQ0KIyAyNyAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9y
 eS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogdGVtcGxhdGU8Y2xh
 c3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7DQogICBfVHAxKiBfTV9w
 dHI7DQogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3Ap
 IHt9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0
 ciB7DQpwcml2YXRlOg0KICBfVHAqIF9NX3B0cjsNCg0KcHVibGljOg0KICB0
 eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7DQoNCiAgZXhwbGljaXQgYXV0b19w
 dHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30NCiAg
 YXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2Eu
 cmVsZWFzZSgpKSB7fQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhdXRv
 X3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpDQogICAgOiBfTV9w
 dHIoX19hLnJlbGVhc2UoKSkge30NCg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9
 KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgew0KICAgIHJlc2V0KF9fYS5yZWxl
 YXNlKCkpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQogIHRlbXBsYXRl
 IDxjbGFzcyBfVHAxPg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRy
 PF9UcDE+JiBfX2EpIHRocm93KCkgew0KICAgIHJlc2V0KF9fYS5yZWxlYXNl
 KCkpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQoNCg0KDQoNCiAgfmF1
 dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9DQoNCiAgX1RwJiBvcGVyYXRv
 ciooKSBjb25zdCB0aHJvdygpIHsNCiAgICByZXR1cm4gKl9NX3B0cjsNCiAg
 fQ0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsNCiAgICBy
 ZXR1cm4gX01fcHRyOw0KICB9DQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3co
 KSB7DQogICAgcmV0dXJuIF9NX3B0cjsNCiAgfQ0KICBfVHAqIHJlbGVhc2Uo
 KSB0aHJvdygpIHsNCiAgICBfVHAqIF9fdG1wID0gX01fcHRyOw0KICAgIF9N
 X3B0ciA9IDA7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIHZvaWQgcmVz
 ZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsNCiAgICBpZiAoX19wICE9IF9N
 X3B0cikgew0KICAgICAgZGVsZXRlIF9NX3B0cjsNCiAgICAgIF9NX3B0ciA9
 IF9fcDsNCiAgICB9DQogIH0NCg0KDQoNCg0KDQpwdWJsaWM6DQogIGF1dG9f
 cHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpDQogICAgOiBf
 TV9wdHIoX19yZWYuX01fcHRyKSB7fQ0KDQogIGF1dG9fcHRyJiBvcGVyYXRv
 cj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgew0KICAgIGlm
 IChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpIHsNCiAgICAgIGRlbGV0
 ZSBfTV9wdHI7DQogICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7DQogICAg
 fQ0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFz
 cyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygp
 DQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFz
 ZSgpKTsgfQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0
 b19wdHI8X1RwMT4oKSB0aHJvdygpDQogICAgeyByZXR1cm4gYXV0b19wdHI8
 X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQ0KfTsNCg0KfQ0KIyA0NCAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmlu
 Zy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzDQojIDQ1ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
 Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfaW9zZndkLmgiIDEgMw0KIyA0NiAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNf
 c3RyaW5nLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMNCg0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvYml0cy9hdG9taWNpdHkuaCIgMSAzDQojIDMzICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 Yml0cy9hdG9taWNpdHkuaCIgMw0KdHlwZWRlZiBpbnQgX0F0b21pY193b3Jk
 Ow0KDQpzdGF0aWMgaW50DQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykp
 DQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCog
 X19tZW0sIGludCBfX3ZhbCkNCnsNCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIg
 X19sb2NrOw0KICBfQXRvbWljX3dvcmQgX19yZXN1bHQsIF9fdG1wOw0KDQog
 IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJWyUxXSwgJTBcblx0
 Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiDQog
 ICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCINCiAgICAgICAg
 ICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAgICAgICAgICAgICAg
 ICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
 ciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y
 eSIpOw0KICBfX3Jlc3VsdCA9ICpfX21lbTsNCiAgKl9fbWVtICs9IF9fdmFs
 Ow0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiCSUlZzAsIFslMF0iDQog
 ICAgICAgICAgICAgICAgICAgICAgIDoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgOiAiciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDog
 Im1lbW9yeSIpOw0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnN0YXRpYyB2
 b2lkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2F0b21pY19h
 ZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkN
 CnsNCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIgX19sb2NrOw0KICBfQXRvbWlj
 X3dvcmQgX190bXA7DQoNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxk
 c3R1YglbJTFdLCAlMFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJ
 Y21wCSUwLCAwXG5cdCINCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJ
 MWJcblx0Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCSBub3AiDQogICAg
 ICAgICAgICAgICAgICAgICAgIDogIj0mciIgKF9fdG1wKQ0KICAgICAgICAg
 ICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykNCiAgICAgICAgICAgICAg
 ICAgICAgICAgOiAibWVtb3J5Iik7DQogICpfX21lbSArPSBfX3ZhbDsNCiAg
 X19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIg0KICAgICAg
 ICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgICAgICAgICAgICAgIDog
 InIiICgmX19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
 cnkiKTsNCn0NCg0Kc3RhdGljIGludA0KX19hdHRyaWJ1dGVfXyAoKF9fdW51
 c2VkX18pKQ0KX19jb21wYXJlX2FuZF9zd2FwICh2b2xhdGlsZSBsb25nICpf
 X3AsIGxvbmcgX19vbGR2YWwsIGxvbmcgX19uZXd2YWwpDQp7DQogIHN0YXRp
 YyB1bnNpZ25lZCBjaGFyIF9fbG9jazsNCiAgbG9uZyBfX3JldCwgX190bXA7
 DQoNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxkc3R1YglbJTFdLCAl
 MFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJY21wCSUwLCAwXG5c
 dCINCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0Ig0KICAg
 ICAgICAgICAgICAgICAgICAgICAiCSBub3AiDQogICAgICAgICAgICAgICAg
 ICAgICAgIDogIj0mciIgKF9fdG1wKQ0KICAgICAgICAgICAgICAgICAgICAg
 ICA6ICJyIiAoJl9fbG9jaykNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
 bWVtb3J5Iik7DQogIGlmICgqX19wICE9IF9fb2xkdmFsKQ0KICAgIF9fcmV0
 ID0gMDsNCiAgZWxzZQ0KICAgIHsNCiAgICAgICpfX3AgPSBfX25ld3ZhbDsN
 CiAgICAgIF9fcmV0ID0gMTsNCiAgICB9DQogIF9fYXNtX18gX192b2xhdGls
 ZV9fKCJzdGIJJSVnMCwgWyUwXSINCiAgICAgICAgICAgICAgICAgICAgICAg
 Og0KICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykNCiAg
 ICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7DQoNCiAgcmV0dXJu
 IF9fcmV0Ow0KfQ0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMw0KDQpuYW1lc3BhY2Ug
 c3RkDQp7DQojIDgzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N
 CiAgICBjbGFzcyBiYXNpY19zdHJpbmcNCiAgICB7DQoNCiAgICBwdWJsaWM6
 DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0
 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBl
 Ow0KICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7DQogICAg
 ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlw
 ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNl
 X3R5cGUgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
 ZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7DQogICAgICB0eXBlZGVm
 IHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVy
 ZW5jZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVy
 IHBvaW50ZXI7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29u
 c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOw0KICAgICAgdHlwZWRlZiBfX25v
 cm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9y
 Ow0KICAgICAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2lu
 dGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJhdG9yOw0KICAgICAgdHlw
 ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9y
 ZXZlcnNlX2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
 dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQogICAgcHJpdmF0
 ZToNCiMgMTE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICAgICAgc3RydWN0IF9SZXANCiAg
 ICAgIHsNCg0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVi
 aW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOw0KIyAxMzYgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0
 cmluZy5oIiAzDQogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1Nf
 bWF4X3NpemU7DQogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVy
 bWluYWw7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsNCiAgICAg
 ICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5Ow0KICAgICAgICBfQXRvbWljX3dv
 cmQgX01fcmVmZXJlbmNlczsNCg0KICAgICAgICBib29sDQogICAgICAgIF9N
 X2lzX2xlYWtlZCgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVy
 ZW5jZXMgPCAwOyB9DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19z
 aGFyZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz
 ID4gMDsgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fc2V0X2xlYWtl
 ZCgpDQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9DQoNCiAgICAg
 ICAgdm9pZA0KICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQ0KICAgICAgICB7
 IF9NX3JlZmVyZW5jZXMgPSAwOyB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAg
 ICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBy
 ZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0NCg0KICAg
 ICAgICBfQ2hhclQmDQogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykg
 dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107
 IH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2dyYWIoY29uc3Qg
 X0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikNCiAg
 ICAgICAgeyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9
 PSBfX2FsbG9jMikgPw0KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01f
 Y2xvbmUoX19hbGxvYzEpOyB9DQoNCg0KICAgICAgICBzdGF0aWMgX1JlcCoN
 CiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7DQoN
 CiAgICAgICAgdm9pZA0KICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxv
 YyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fZXhjaGFuZ2Vf
 YW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApDQogICAgICAgICAg
 ICBfTV9kZXN0cm95KF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgICB2b2lk
 DQogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsN
 Cg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJv
 dygpDQogICAgICAgIHsNCiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3Jl
 ZmVyZW5jZXMsIDEpOw0KICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7
 DQogICAgICAgIH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2Ns
 b25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOw0KIyAy
 MDggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh
 c2ljX3N0cmluZy5oIiAzDQogICAgICAgIGlubGluZSBzdGF0aWMgYm9vbA0K
 ICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVfdCk7DQoNCiAg
 ICAgIH07DQoNCg0KICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxv
 Yw0KICAgICAgew0KICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2Rh
 dCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIDogX0FsbG9jKF9fYSks
 IF9NX3AoX19kYXQpIHsgfQ0KDQogICAgICAgIF9DaGFyVCogX01fcDsNCiAg
 ICAgIH07DQoNCiAgICBwdWJsaWM6DQoNCg0KDQogICAgICBzdGF0aWMgY29u
 c3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0x
 KTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIG11dGFibGUgX0FsbG9jX2hp
 ZGVyIF9NX2RhdGFwbHVzOw0KDQoNCg0KICAgICAgc3RhdGljIHNpemVfdHlw
 ZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9m
 KF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXpl
 X3R5cGUpXTsNCg0KICAgICAgX0NoYXJUKg0KICAgICAgX01fZGF0YSgpIGNv
 bnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9DQoNCiAg
 ICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApDQogICAg
 ICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0NCg0KICAg
 ICAgX1JlcCoNCiAgICAgIF9NX3JlcCgpIGNvbnN0DQogICAgICB7IHJldHVy
 biAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd
 KTsgfQ0KDQoNCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9NX2liZWdpbigp
 IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0NCg0KICAg
 ICAgaXRlcmF0b3INCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBp
 dGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9DQoNCiAgICAg
 IHZvaWQNCiAgICAgIF9NX2xlYWsoKQ0KICAgICAgew0KICAgICAgICBpZiAo
 IV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAgICAgICAgICBfTV9sZWFr
 X2hhcmQoKTsNCiAgICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9N
 X2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAgICAgIHsNCiAgICAg
 ICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhy
 b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7DQog
 ICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOw0KICAgICAgfQ0K
 DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf
 X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdA0KICAgICAgew0KICAgICAg
 ICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19w
 b3M7DQogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/
 IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7DQogICAgICAgIHJldHVy
 biAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsNCiAgICAgIH0N
 Cg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4NCiAgICAg
 ICAgc3RhdGljIHZvaWQNCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq
 IF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQ0KICAgICAg
 ICB7DQogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCAr
 K19fcCkNCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwg
 Kl9fazEpOw0KICAgICAgICB9DQoNCiAgICAgIHN0YXRpYyB2b2lkDQogICAg
 ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBp
 dGVyYXRvciBfX2syKQ0KICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19r
 MS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQ0KDQogICAgICBzdGF0aWMgdm9p
 ZA0KICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRl
 cmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikNCiAgICAgIHsgX1Nf
 Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0N
 Cg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0No
 YXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQ0KICAgICAg
 eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsg
 fQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfY29weV9jaGFycyhf
 Q2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQq
 IF9fazIpDQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwg
 X19rMiAtIF9fazEpOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX211dGF0
 ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlw
 ZSBfX2xlbjIpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9sZWFrX2hhcmQo
 KTsNCg0KICAgICAgc3RhdGljIF9SZXAmDQogICAgICBfU19lbXB0eV9yZXAo
 KQ0KICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZf
 U19lbXB0eV9yZXBfc3RvcmFnZSk7IH0NCg0KICAgIHB1YmxpYzoNCg0KDQoN
 Cg0KICAgICAgaW5saW5lDQogICAgICBiYXNpY19zdHJpbmcoKTsNCg0KICAg
 ICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm
 IF9fYSk7DQoNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0
 cmluZyYgX19zdHIpOw0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj
 X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAg
 ICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7DQogICAgICBiYXNpY19z
 dHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
 cG9zLA0KICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0
 IF9BbGxvYyYgX19hKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9D
 aGFyVCogX19zLCBzaXplX3R5cGUgX19uLA0KICAgICAgICAgICAgICAgICAg
 IGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KICAgICAgYmFzaWNf
 c3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9
 IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19u
 LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsN
 Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAg
 ICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5w
 dXRJdGVyYXRvciBfX2VuZCwNCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
 IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KDQogICAgICB+YmFzaWNfc3Ry
 aW5nKCkNCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0
 X2FsbG9jYXRvcigpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
 ICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1
 cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQ0KDQogICAgICBiYXNpY19zdHJp
 bmcmDQogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0
 dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmlu
 ZyYNCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlz
 LT5hc3NpZ24oMSwgX19jKTsgfQ0KDQoNCiAgICAgIGl0ZXJhdG9yDQogICAg
 ICBiZWdpbigpDQogICAgICB7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAg
 ICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7DQogICAgICB9DQoNCiAg
 ICAgIGNvbnN0X2l0ZXJhdG9yDQogICAgICBiZWdpbigpIGNvbnN0DQogICAg
 ICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9DQoNCiAg
 ICAgIGl0ZXJhdG9yDQogICAgICBlbmQoKQ0KICAgICAgew0KICAgICAgICAg
 X01fbGVhaygpOw0KICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo
 KSArIHRoaXMtPnNpemUoKSk7DQogICAgICB9DQoNCiAgICAgIGNvbnN0X2l0
 ZXJhdG9yDQogICAgICBlbmQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gY29u
 c3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQog
 ICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICByYmVnaW4oKQ0KICAgICAg
 eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0NCg0K
 ICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkg
 Y29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
 dGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3INCiAg
 ICAgIHJlbmQoKQ0KICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0
 aGlzLT5iZWdpbigpKTsgfQ0KDQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJh
 dG9yDQogICAgICByZW5kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0
 X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0NCg0KICAgIHB1
 YmxpYzoNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBzaXplKCkgY29uc3Qg
 eyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQ0KDQogICAgICBzaXpl
 X3R5cGUNCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgp
 LT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBtYXhf
 c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9DQoN
 CiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hh
 clQgX19jKTsNCg0KICAgICAgdm9pZA0KICAgICAgcmVzaXplKHNpemVfdHlw
 ZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9DQoNCiAg
 ICAgIHNpemVfdHlwZQ0KICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVy
 biBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0NCg0KICAgICAgdm9pZA0KICAg
 ICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7DQoNCiAgICAg
 IHZvaWQNCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6
 ZSgpLCAwKTsgfQ0KDQogICAgICBib29sDQogICAgICBlbXB0eSgpIGNvbnN0
 IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9DQoNCg0KICAgICAgY29u
 c3RfcmVmZXJlbmNlDQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19w
 b3MpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9
 DQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXShzaXplX3R5
 cGUgX19wb3MpDQogICAgICB7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAg
 ICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107DQogICAgICB9DQoNCiAgICAg
 IGNvbnN0X3JlZmVyZW5jZQ0KICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29u
 c3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkp
 DQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
 Zzo6YXQiKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOw0KICAg
 ICAgfQ0KDQogICAgICByZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBf
 X24pDQogICAgICB7DQogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQ0KICAg
 ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0
 Iik7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAgICAgcmV0dXJuIF9NX2Rh
 dGEoKVtfX25dOw0KICAgICAgfQ0KDQoNCiAgICAgIGJhc2ljX3N0cmluZyYN
 CiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
 eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQ0KDQogICAgICBiYXNp
 Y19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19z
 KSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQ0KDQogICAgICBiYXNp
 Y19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0
 dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0NCg0KICAg
 ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0
 cmluZyYgX19zdHIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBh
 cHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
 cG9zLCBzaXplX3R5cGUgX19uKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K
 ICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
 KTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0
 IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9f
 cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBiYXNp
 Y19zdHJpbmcmDQogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJU
 IF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
 Pg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIGFwcGVuZChfSW5w
 dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQog
 ICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p
 ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0NCg0KICAgICAgdm9pZA0KICAg
 ICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpDQogICAgICB7IHRoaXMtPnJlcGxh
 Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0NCg0KICAgICAg
 YmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu
 ZyYgX19zdHIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3Np
 Z24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z
 LCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhp
 cy0+YXNzaWduKF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwgX19zdHIuX01fZm9s
 ZChfX3BvcywgX19uKSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmlu
 ZyYNCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
 IF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyAr
 IF9fbik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWdu
 KGNvbnN0IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXNz
 aWduKF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K
 DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3NpZ24oc2l6ZV90eXBl
 IF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
 Y2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9DQoNCiAg
 ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBi
 YXNpY19zdHJpbmcmDQogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBf
 X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQogICAgICAgIHsgcmV0
 dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19m
 aXJzdCwgX19sYXN0KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbnNlcnQo
 aXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAg
 ICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0NCg0K
 ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgICAg
 IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19i
 ZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQ0KICAgICAgICB7IHRoaXMtPnJl
 cGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0NCg0KICAgICAgYmFz
 aWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNv
 bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7DQogICAgICAgIGl0
 ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7DQogICAgICAgIHRoaXMt
 PnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2liZWdpbigpLCBfX3N0ci5f
 TV9pZW5kKCkpOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoN
 CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUg
 X19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAg
 ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pDQogICAgICB7
 DQogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7DQog
 ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2NoZWNr
 KF9fcG9zMiksDQogICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9s
 ZChfX3BvczIsIF9fbikpOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAg
 ICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXpl
 X3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
 KQ0KICAgICAgew0KICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhf
 X3Bvcyk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fcywg
 X19zICsgX19uKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K
 DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBl
 IF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRo
 aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
 cykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChz
 aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpDQog
 ICAgICB7DQogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks
 IF9fbiwgX19jKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K
 DQogICAgICBpdGVyYXRvcg0KICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwg
 X0NoYXJUIF9fYyA9IF9DaGFyVCgpKQ0KICAgICAgew0KICAgICAgICBzaXpl
 X3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhp
 cy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2Mp
 Ow0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAg
 ICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0N
 Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgZXJhc2Uoc2l6ZV90eXBl
 IF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpDQogICAgICB7DQog
 ICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg
 X01fZm9sZChfX3BvcywgX19uKSwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAg
 ICBpdGVyYXRvcg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikN
 CiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24g
 LSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0
 aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0K
 ICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgICBy
 ZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7DQogICAgICB9DQoNCiAgICAgIGl0
 ZXJhdG9yDQogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv
 ciBfX2xhc3QpDQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBf
 X2ZpcnN0IC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2Uo
 X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7DQogICAg
 ICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAgICAgcmV0dXJu
 IF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19z
 dHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
 eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikNCiAgICAgIHsN
 CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3Mp
 LCBfTV9mb2xkKF9fcG9zLCBfX24pLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOw0KICAgICAg
 fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVf
 dHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJp
 bmcmIF9fc3RyLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz
 aXplX3R5cGUgX19uMik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg
 IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u
 c3QgX0NoYXJUKiBfX3MsDQogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24y
 KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
 aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOw0KICAgICAg
 fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVf
 dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
 KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
 aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIHRyYWl0c190eXBlOjps
 ZW5ndGgoX19zKSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYN
 CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
 MSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpDQogICAgICB7DQogICAg
 ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f
 Zm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7DQogICAgICB9DQoNCiAg
 ICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p
 MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikN
 CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z
 dHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0
 cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
 X19pMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
 VCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+
 cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsIF9fcyArIF9fbik7IH0NCg0KICAg
 ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx
 LCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsg
 cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyB0cmFpdHNfdHlwZTo6bGVu
 Z3RoKF9fcykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJl
 cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBl
 IF9fbiwgX0NoYXJUIF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
 bnB1dEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAg
 IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwNCiAgICAg
 ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv
 ciBfX2syKQ0KICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9f
 aTIsIF9fazEsIF9fazIsDQogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
 b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnko
 KSk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBf
 SW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAg
 ICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9J
 bnB1dEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAgICAgICAgX0lucHV0
 SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICAgICAg
 dGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19z
 dHJpbmcmDQogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
 cmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAg
 ICAgICAgX0Z3ZEl0ZXJhdG9yIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFn
 KTsNCg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+DQogICAg
 ICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgo
 X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBf
 X2EsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQ0K
 ICAgICAgICB7DQogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
 cl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7DQog
 ICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9f
 YSwgX1RhZygpKTsNCiAgICAgICAgfQ0KDQogICAgICB0ZW1wbGF0ZTxjbGFz
 cyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICBf
 U19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
 IGNvbnN0IF9BbGxvYyYgX19hLA0KICAgICAgICAgICAgICAgICAgICAgICAg
 IF9fdHJ1ZV90eXBlKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIF9T
 X2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVl
 X3R5cGU+KF9fZW5kKSwgX19hKTsNCiAgICAgICAgfQ0KDQogICAgICB0ZW1w
 bGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0K
 ICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBf
 X2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIHsNCiAgICAgICAg
 ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50
 ZWdyYWwgX0ludGVncmFsOw0KICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1
 Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7DQogICAg
 ICAgIH0NCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAg
 ICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICAgX1NfY29uc3RydWN0KF9J
 bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h
 LA0KICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7
 DQoNCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4NCiAgICAg
 ICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJ
 dGVyIF9fZW5kLCBfRndkSXRlciBfX2JlZywgY29uc3QgX0FsbG9jJiBfX2Es
 DQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
 DQoNCiAgICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICBfU19jb25zdHJ1Y3Qo
 c2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f
 YSk7DQoNCiAgICBwdWJsaWM6DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAg
 Y29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9f
 cG9zID0gMCkgY29uc3Q7DQoNCiAgICAgIHZvaWQNCiAgICAgIHN3YXAoYmFz
 aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsNCg0K
 DQogICAgICBjb25zdCBfQ2hhclQqDQogICAgICBjX3N0cigpIGNvbnN0DQog
 ICAgICB7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUo
 KTsNCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19u
 XSwgX1JlcDo6X1NfdGVybWluYWwpOw0KICAgICAgICByZXR1cm4gX01fZGF0
 YSgpOw0KICAgICAgfQ0KDQogICAgICBjb25zdCBfQ2hhclQqDQogICAgICBk
 YXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9DQoNCiAgICAgIGFs
 bG9jYXRvcl90eXBlDQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
 ZXR1cm4gX01fZGF0YXBsdXM7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAg
 ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
 emVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
 IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
 cG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19z
 dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBz
 aXplX3R5cGUNCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
 dHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5m
 aW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0N
 Cg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNp
 emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUN
 CiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
 dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
 LT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9
 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZpbmQoY29uc3QgX0NoYXJU
 KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7
 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZpbmQoY29uc3QgX0NoYXJU
 KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7
 IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
 bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZp
 bmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7
 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25z
 dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0
 ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIHNp
 emVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9f
 cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsNCg0K
 ICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9D
 aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFp
 dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K
 ICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
 b3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2Ms
 IF9fcG9zKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFz
 dF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w
 b3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9s
 YXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0N
 Cg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3Qg
 X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
 Y29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29m
 KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywg
 X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAg
 c2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6
 ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo
 aXMtPnJmaW5kKF9fYywgX19wb3MpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K
 ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBf
 X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19w
 b3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAg
 ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
 eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
 IF9fbikgY29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9m
 aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
 cyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0
 X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp
 OyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9ub3Rf
 b2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7DQoN
 CiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25z
 dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9z
 KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9v
 ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg
 ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBf
 Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAg
 ICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsNCiAgICAgIHNpemVfdHlw
 ZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
 c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJu
 IHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5
 cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
 IGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
 ID0gbnBvcykgY29uc3Q7DQoNCiAgICAgIGJhc2ljX3N0cmluZw0KICAgICAg
 c3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu
 cG9zKSBjb25zdA0KICAgICAgew0KICAgICAgICBpZiAoX19wb3MgPiB0aGlz
 LT5zaXplKCkpDQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
 c2ljX3N0cmluZzo6c3Vic3RyIik7DQogICAgICAgIHJldHVybiBiYXNpY19z
 dHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOw0KICAgICAgfQ0KDQogICAgICBp
 bnQNCiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
 Y29uc3QNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
 aXMtPnNpemUoKTsNCiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0
 ci5zaXplKCk7DQogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Np
 emUsIF9fb3NpemUpOw0KDQogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw
 ZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOw0K
 ICAgICAgICBpZiAoIV9fcikNCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBf
 X29zaXplOw0KICAgICAgICByZXR1cm4gX19yOw0KICAgICAgfQ0KDQogICAg
 ICBpbnQNCiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
 cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsNCg0K
 ICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNp
 emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAg
 ICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikg
 Y29uc3Q7DQoNCiAgICAgIGludA0KICAgICAgY29tcGFyZShjb25zdCBfQ2hh
 clQqIF9fcykgY29uc3Q7DQoNCg0KDQogICAgICBpbnQNCiAgICAgIGNvbXBh
 cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No
 YXJUKiBfX3MpIGNvbnN0Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUo
 c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJU
 KiBfX3MsDQogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsN
 Cg0KICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJh
 c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJh
 c2ljX3N0cmluZygpDQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAo
 KS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0NCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
 VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNv
 bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
 cmhzKQ0KICAgIHsNCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
 dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOw0KICAgICAgX19zdHIuYXBwZW5k
 KF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
 LF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywN
 CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
 aXRzLF9BbGxvYz4mIF9fcmhzKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg
 ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPg0KICAgIG9w
 ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
 clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
 b2M+DQogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
 IF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAg
 Y29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7DQogICAgICBiYXNpY19zdHJp
 bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsNCiAg
 ICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7
 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNp
 Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+DQogICAgb3BlcmF0
 b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
 Yz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRl
 ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry
 aW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5
 cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc3RyaW5nX3R5
 cGUgX19zdHIoX19saHMpOw0KICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90
 eXBlKDEpLCBfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0K
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
 aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBv
 cGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
 IF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
 c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg
 eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQ0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
 ZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I9
 PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
 YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
 DQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
 cmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
 X19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g
 MDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wN
 CiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
 YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
 DQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
 cmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICAg
 Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
 X19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0g
 MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
 ICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
 aXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9D
 aGFyVCogX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo
 cykgIT0gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l
 IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
 VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNv
 bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
 cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
 b3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
 IF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
 IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg
 MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
 ICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg
 ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
 Yz4mIF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
 ID4gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJv
 b2wNCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
 X1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNvbnN0
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
 KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
 cmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
 cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
 b3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAgICAg
 IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
 IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwg
 MDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wN
 CiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
 YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
 DQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
 cmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
 X19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0g
 MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
 ICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAg
 ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
 bG9jPiYgX19yaHMpDQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
 ID49IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBi
 b29sDQogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
 LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNv
 bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
 cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAg
 IG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hh
 clQqIF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
 ID49IDA7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9v
 bA0KICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAg
 ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f
 bGhzKSA8PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxp
 bmUgdm9pZA0KICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICBiYXNpY19zdHJpbmc8X0No
 YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IF9fbGhzLnN3
 YXAoX19yaHMpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf
 aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFz
 aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLA0KICAgICAgICAg
 ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
 X19zdHIpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX29zdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
 dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywNCiAgICAgICAgICAgICAg
 IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
 IF9fc3RyKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAgIGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hh
 clQgX19kZWxpbSk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l
 IGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jg0KICAgIGdldGxpbmUo
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLA0KICAgICAg
 ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
 X19zdHIpOw0KfQ0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCg0KDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0
 aG0uaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDMNCg0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
 aCIgMSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0Lmgi
 IDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu
 aCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx
 IDMNCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDEgMw0KIyAz
 NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
 X2FsZ28uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMNCm5h
 bWVzcGFjZSBzdGQNCnsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
 QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPg0K
 dm9pZA0KX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
 c3QsDQogICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0
 YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkNCnsNCiAgX0Rpc3RhbmNl
 IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICB3aGlsZSAo
 X19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFy
 ZW50KSA8IF9fdmFsdWUpIHsNCiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
 eCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7DQogICAgX19ob2xlSW5kZXgg
 PSBfX3BhcmVudDsNCiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
 IC8gMjsNCiAgfQ0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh
 bHVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
 dG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lk
 DQpfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
 c3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
 bGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAgX19wdXNoX2hlYXAoX19m
 aXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlz
 dGFuY2UoMCksDQogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
 DQppbmxpbmUgdm9pZA0KcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
 ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0Kew0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3B1c2hfaGVhcF9hdXgoX19m
 aXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
 eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
 RGlzdGFuY2UsIGNsYXNzIF9UcCwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
 ZT4NCnZvaWQNCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
 X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICBf
 RGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9f
 Y29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4
 IC0gMSkgLyAyOw0KICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4
 ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7
 DQogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg
 X19wYXJlbnQpOw0KICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7DQogICAg
 X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7DQogIH0NCiAgKihf
 X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh
 cmUsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQpp
 bmxpbmUgdm9pZA0KX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVy
 YXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
 dGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwNCiAgICAgICAgICAg
 ICAgICBfRGlzdGFuY2UqLCBfVHAqKQ0Kew0KICBfX3B1c2hfaGVhcChfX2Zp
 cnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
 YW5jZSgwKSwNCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf
 X2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
 ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkDQpwdXNoX2hl
 YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
 c3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgX0NvbXBhcmUgX19jb21w
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 CiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLA0K
 ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBf
 X3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
 IF9UcD4NCnZvaWQNCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
 dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwNCiAgICAgICAg
 ICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkNCnsNCiAgX0Rp
 c3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsNCiAgX0Rpc3RhbmNl
 IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOw0KICB3aGls
 ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgaWYgKCooX19maXJz
 dCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hp
 bGQgLSAxKSkpDQogICAgICBfX3NlY29uZENoaWxkLS07DQogICAgKihfX2Zp
 cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
 ZCk7DQogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOw0KICAgIF9f
 c2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsNCiAgfQ0K
 ICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgew0KICAgICooX19maXJz
 dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
 IC0gMSkpOw0KICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7
 DQogIH0NCiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9f
 dG9wSW5kZXgsIF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
 bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
 ZT4NCmlubGluZSB2b2lkDQpfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
 YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0K
 ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9U
 cCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQ0Kew0KICAqX19yZXN1bHQgPSAqX19m
 aXJzdDsNCiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCks
 IF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
 IF9UcD4NCmlubGluZSB2b2lkDQpfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNj
 ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgIF9UcCopDQp7DQogIF9fcG9wX2hlYXAo
 X19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwNCiAgICAgICAgICAg
 ICBfVHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
 KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
 b3I+DQppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
 b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
 c3NJdGVyYXRvciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 DQogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90
 eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
 Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNs
 YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQp2b2lkDQpfX2FkanVzdF9oZWFw
 KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19o
 b2xlSW5kZXgsDQogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1Rw
 IF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9f
 dG9wSW5kZXggPSBfX2hvbGVJbmRleDsNCiAgX0Rpc3RhbmNlIF9fc2Vjb25k
 Q2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOw0KICB3aGlsZSAoX19zZWNv
 bmRDaGlsZCA8IF9fbGVuKSB7DQogICAgaWYgKF9fY29tcCgqKF9fZmlyc3Qg
 KyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
 LSAxKSkpKQ0KICAgICAgX19zZWNvbmRDaGlsZC0tOw0KICAgICooX19maXJz
 dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp
 Ow0KICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICBfX3Nl
 Y29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7DQogIH0NCiAg
 aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAqKF9fZmlyc3Qg
 KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAt
 IDEpKTsNCiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0K
 ICB9DQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3Rv
 cEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D
 b21wYXJlLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2
 b2lkDQpfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
 LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICBf
 UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf
 Q29tcGFyZSBfX2NvbXAsDQogICAgICAgICAgIF9EaXN0YW5jZSopDQp7DQog
 ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICBfX2FkanVzdF9oZWFwKF9fZmly
 c3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3Qp
 LA0KICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U
 cCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KX19wb3BfaGVhcF9h
 dXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfQ29t
 cGFyZSBfX2NvbXApDQp7DQogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
 IC0gMSwgX19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAs
 DQogICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
 c3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KcG9wX2hlYXAoX1JhbmRvbUFj
 Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICBfUmFuZG9tQWNjZXNz
 SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3BvcF9oZWFw
 X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwg
 X19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
 dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkDQpf
 X21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAg
 ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCos
 IF9EaXN0YW5jZSopDQp7DQogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikg
 cmV0dXJuOw0KICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
 Ow0KICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOw0KDQog
 IHdoaWxlICh0cnVlKSB7DQogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
 X3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsN
 CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOw0KICAgIF9fcGFyZW50
 LS07DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
 dGVyYXRvcj4NCmlubGluZSB2b2lkDQptYWtlX2hlYXAoX1JhbmRvbUFjY2Vz
 c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
 c3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fbWFrZV9oZWFw
 KF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgX192YWx1ZV90eXBl
 KF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
 Q29tcGFyZSwNCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
 ZT4NCnZvaWQNCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
 X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAg
 ICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQ0Kew0K
 ICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsNCiAgX0Rpc3Rh
 bmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgX0Rpc3RhbmNlIF9f
 cGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICB3aGlsZSAodHJ1ZSkgew0K
 ICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBf
 VHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwNCiAgICAgICAgICAgICAgICAg
 IF9fY29tcCk7DQogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAg
 ICBfX3BhcmVudC0tOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
 ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIHZv
 aWQNCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwN
 CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t
 cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCg0KICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9f
 Y29tcCwNCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf
 X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0Kdm9pZCBzb3J0X2hlYXAoX1Jh
 bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
 YXRvciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdo
 aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkNCiAgICBwb3BfaGVhcChfX2Zp
 cnN0LCBfX2xhc3QtLSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
 QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZA0Kc29ydF9o
 ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAg
 IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29t
 cCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkNCiAgICBwb3BfaGVh
 cChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsNCn0NCg0KfQ0KIyAzNSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
 Z28uaCIgMiAzDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4o
 Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9f
 YykNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIGlmIChfX2EgPCBfX2Ip
 DQogICAgaWYgKF9fYiA8IF9fYykNCiAgICAgIHJldHVybiBfX2I7DQogICAg
 ZWxzZSBpZiAoX19hIDwgX19jKQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICBl
 bHNlDQogICAgICByZXR1cm4gX19hOw0KICBlbHNlIGlmIChfX2EgPCBfX2Mp
 DQogICAgcmV0dXJuIF9fYTsNCiAgZWxzZSBpZiAoX19iIDwgX19jKQ0KICAg
 IHJldHVybiBfX2M7DQogIGVsc2UNCiAgICByZXR1cm4gX19iOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBj
 b25zdCBfVHAmDQpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
 JiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApDQp7DQoN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIGlmIChf
 X2NvbXAoX19hLCBfX2IpKQ0KICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQ0K
 ICAgICAgcmV0dXJuIF9fYjsNCiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBf
 X2MpKQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICBlbHNlDQogICAgICByZXR1
 cm4gX19hOw0KICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQ0KICAgIHJl
 dHVybiBfX2E7DQogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpDQogICAg
 cmV0dXJuIF9fYzsNCiAgZWxzZQ0KICAgIHJldHVybiBfX2I7DQp9DQoNCg0K
 dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9GdW5jdGlvbj4N
 Cl9GdW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
 dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQ0Kew0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
 Zmlyc3QpDQogICAgX19mKCpfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fZjsNCn0N
 Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+
 DQppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwg
 X0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGNv
 bnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgIGlucHV0
 X2l0ZXJhdG9yX3RhZykNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
 ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQ0KICAgICsrX19maXJzdDsNCiAg
 cmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
 dGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9JbnB1dEl0ZXIgZmlu
 ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
 KQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgq
 X19maXJzdCkpDQogICAgKytfX2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdDsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
 cyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7
 DQogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
 cj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQNCiAgICA9IChfX2xh
 c3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQogIGZvciAoIDsgX190cmlwX2NvdW50
 ID4gMCA7IC0tX190cmlwX2NvdW50KSB7DQogICAgaWYgKCpfX2ZpcnN0ID09
 IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAg
 ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAg
 ICsrX19maXJzdDsNCg0KICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0
 dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYgKCpfX2Zp
 cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7
 DQogIH0NCg0KICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgew0KICBjYXNl
 IDM6DQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
 dDsNCiAgICArK19fZmlyc3Q7DQogIGNhc2UgMjoNCiAgICBpZiAoKl9fZmly
 c3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsN
 CiAgY2FzZSAxOg0KICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
 IF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDA6DQogIGRlZmF1
 bHQ6DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQpf
 UmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9f
 Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0K
 ew0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50DQogICAgPSAoX19s
 YXN0IC0gX19maXJzdCkgPj4gMjsNCg0KICBmb3IgKCA7IF9fdHJpcF9jb3Vu
 dCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgew0KICAgIGlmIChfX3ByZWQoKl9f
 Zmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAg
 ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAg
 KytfX2ZpcnN0Ow0KDQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
 biBfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCg0KICAgIGlmIChfX3ByZWQo
 Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQog
 IH0NCg0KICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgew0KICBjYXNlIDM6
 DQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0K
 ICAgICsrX19maXJzdDsNCiAgY2FzZSAyOg0KICAgIGlmIChfX3ByZWQoKl9f
 Zmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogIGNh
 c2UgMToNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
 c3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDA6DQogIGRlZmF1bHQ6DQog
 ICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0lucHV0SXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIF9JbnB1dEl0ZXIgZmlu
 ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQ0Kew0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0
 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQppbmxpbmUgX0lu
 cHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
 ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
 dGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFz
 dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0N
 Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2Fy
 ZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
 cndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgaWYgKF9fZmlyc3QgPT0gX19s
 YXN0KQ0KICAgIHJldHVybiBfX2xhc3Q7DQogIF9Gb3J3YXJkSXRlciBfX25l
 eHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsN
 CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkNCiAgICAgIHJldHVybiBf
 X2ZpcnN0Ow0KICAgIF9fZmlyc3QgPSBfX25leHQ7DQogIH0NCiAgcmV0dXJu
 IF9fbGFzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
 Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4NCl9Gb3J3YXJkSXRlciBhZGphY2Vu
 dF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
 Y2F0ZSBfX2JpbmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09
 IF9fbGFzdCkNCiAgICByZXR1cm4gX19sYXN0Ow0KICBfRm9yd2FyZEl0ZXIg
 X19uZXh0ID0gX19maXJzdDsNCiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0
 KSB7DQogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQp
 KQ0KICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgX19maXJzdCA9IF9fbmV4
 dDsNCiAgfQ0KICByZXR1cm4gX19sYXN0Ow0KfQ0KDQoNCg0KDQoNCg0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
 U2l6ZT4NCnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
 dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLA0KICAgICAgICAgICBf
 U2l6ZSYgX19uKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBmb3IgKCA7IF9f
 Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0
 ID09IF9fdmFsdWUpDQogICAgICArK19fbjsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXpl
 Pg0Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
 ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAgICAgICAgICAg
 X1NpemUmIF9fbikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
 X2ZpcnN0KQ0KICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgKytf
 X247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
 VHA+DQp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
 ZmZlcmVuY2VfdHlwZQ0KY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
 dXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
 SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOw0KICBmb3IgKCA7IF9f
 Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0
 ID09IF9fdmFsdWUpDQogICAgICArK19fbjsNCiAgcmV0dXJuIF9fbjsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNh
 dGU+DQp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
 ZmZlcmVuY2VfdHlwZQ0KY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf
 SW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHR5cGVu
 YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90
 eXBlIF9fbiA9IDA7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
 X19maXJzdCkNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICsr
 X19uOw0KICByZXR1cm4gX19uOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4NCl9Gb3J3
 YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
 YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCg0KICBpZiAo
 X19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0K
 ICAgIHJldHVybiBfX2ZpcnN0MTsNCg0KDQogIF9Gb3J3YXJkSXRlcjIgX190
 bXAoX19maXJzdDIpOw0KICArK19fdG1wOw0KICBpZiAoX190bXAgPT0gX19s
 YXN0MikNCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9f
 Zmlyc3QyKTsNCg0KDQoNCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7DQoN
 CiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgX0ZvcndhcmRJdGVy
 MSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICB3aGlsZSAoX19maXJzdDEg
 IT0gX19sYXN0MSkgew0KICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwg
 X19sYXN0MSwgKl9fZmlyc3QyKTsNCiAgICBpZiAoX19maXJzdDEgPT0gX19s
 YXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0KDQogICAgX19wID0gX19w
 MTsNCiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCiAgICBpZiAoKytfX2N1
 cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0KDQog
 ICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgew0KICAgICAgaWYgKCsr
 X19wID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAg
 ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1
 cm4gX19sYXN0MTsNCiAgICB9DQoNCiAgICArK19fZmlyc3QxOw0KICB9DQog
 IHJldHVybiBfX2ZpcnN0MTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
 YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQ
 cmVkPg0KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp
 cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAg
 ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf
 X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19w
 cmVkaWNhdGUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 Cg0KDQoNCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg
 PT0gX19sYXN0MikNCiAgICByZXR1cm4gX19maXJzdDE7DQoNCg0KICBfRm9y
 d2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsNCiAgKytfX3RtcDsNCiAgaWYg
 KF9fdG1wID09IF9fbGFzdDIpIHsNCiAgICB3aGlsZSAoX19maXJzdDEgIT0g
 X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
 KQ0KICAgICAgKytfX2ZpcnN0MTsNCiAgICByZXR1cm4gX19maXJzdDE7DQog
 IH0NCg0KDQoNCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7DQoNCiAgX19w
 MSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgX0ZvcndhcmRJdGVyMSBfX2N1
 cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19s
 YXN0MSkgew0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7DQog
 ICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0K
 ICAgICAgICBicmVhazsNCiAgICAgICsrX19maXJzdDE7DQogICAgfQ0KICAg
 IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgq
 X19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICArK19fZmlyc3QxOw0KICAg
 IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgcmV0dXJuIF9fbGFz
 dDE7DQoNCiAgICBfX3AgPSBfX3AxOw0KICAgIF9fY3VycmVudCA9IF9fZmly
 c3QxOw0KICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4g
 X19sYXN0MTsNCg0KICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50
 LCAqX19wKSkgew0KICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpDQogICAg
 ICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgICAgIGlmICgrK19fY3VycmVudCA9
 PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gX19sYXN0MTsNCiAgICB9DQoN
 CiAgICArK19fZmlyc3QxOw0KICB9DQogIHJldHVybiBfX2ZpcnN0MTsNCn0N
 Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9J
 bnRlZ2VyLCBjbGFzcyBfVHA+DQpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0Zv
 cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1Rw
 JiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIGlmIChf
 X2NvdW50IDw9IDApDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2Ugew0K
 ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOw0K
 ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgX0ludGVn
 ZXIgX19uID0gX19jb3VudCAtIDE7DQogICAgICBfRm9yd2FyZEl0ZXIgX19p
 ID0gX19maXJzdDsNCiAgICAgICsrX19pOw0KICAgICAgd2hpbGUgKF9faSAh
 PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgew0KICAg
 ICAgICArK19faTsNCiAgICAgICAgLS1fX247DQogICAgICB9DQogICAgICBp
 ZiAoX19uID09IDApDQogICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg
 ZWxzZQ0KICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192
 YWwpOw0KICAgIH0NCiAgICByZXR1cm4gX19sYXN0Ow0KICB9DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBj
 bGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQcmVkPg0KX0ZvcndhcmRJdGVyIHNl
 YXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQs
 IGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgX0Jp
 bmFyeVByZWQgX19iaW5hcnlfcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChf
 X2NvdW50IDw9IDApDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2Ugew0K
 ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgaWYgKF9f
 YmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkNCiAgICAgICAgYnJlYWs7
 DQogICAgICArK19fZmlyc3Q7DQogICAgfQ0KICAgIHdoaWxlIChfX2ZpcnN0
 ICE9IF9fbGFzdCkgew0KICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAt
 IDE7DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsNCiAgICAg
 ICsrX19pOw0KICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9
 IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsNCiAgICAgICAg
 KytfX2k7DQogICAgICAgIC0tX19uOw0KICAgICAgfQ0KICAgICAgaWYgKF9f
 biA9PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2Ug
 ew0KICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgew0KICAgICAgICAg
 IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkNCiAgICAgICAgICAg
 IGJyZWFrOw0KICAgICAgICAgICsrX19pOw0KICAgICAgICB9DQogICAgICAg
 IF9fZmlyc3QgPSBfX2k7DQogICAgICB9DQogICAgfQ0KICAgIHJldHVybiBf
 X2xhc3Q7DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
 ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KX0ZvcndhcmRJdGVyMiBz
 d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
 YXJkSXRlcjIgX19maXJzdDIpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCg0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2Zp
 cnN0MSwgKytfX2ZpcnN0MikNCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9f
 Zmlyc3QyKTsNCiAgcmV0dXJuIF9fZmlyc3QyOw0KfQ0KDQoNCg0KdGVtcGxh
 dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
 cyBfVW5hcnlPcGVyYXRpb24+DQpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lu
 cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl
 cmF0aW9uIF9fdW5hcnlfb3ApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCg0KDQoNCg0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
 X19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5
 X29wKCpfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
 bGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5T3Bl
 cmF0aW9uPg0KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f
 Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAg
 ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jl
 c3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9u
 IF9fYmluYXJ5X29wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KDQoNCg0KICBmb3IgKCA7IF9f
 Zmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsr
 X19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmly
 c3QxLCAqX19maXJzdDIpOw0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2
 b2lkIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
 ciBfX2xhc3QsDQogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1
 ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCnsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0g
 X19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xk
 X3ZhbHVlKQ0KICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0
 ZSwgY2xhc3MgX1RwPg0Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBf
 X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
 IF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQ0K
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7
 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKF9fcHJl
 ZCgqX19maXJzdCkpDQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1
 dEl0ZXIsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShf
 SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUs
 IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs
 ICsrX19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19v
 bGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0Ow0KICByZXR1cm4g
 X19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
 bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1Rw
 Pg0KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19m
 aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg
 X19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBf
 X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAg
 ICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6
 ICpfX2ZpcnN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPg0K
 dm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
 dGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3Ig
 KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgKl9fZmly
 c3QgPSBfX2dlbigpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0
 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPg0KX091dHB1dEl0
 ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
 IF9HZW5lcmF0b3IgX19nZW4pDQp7DQoNCg0KDQoNCg0KDQogIGZvciAoIDsg
 X19uID4gMDsgLS1fX24sICsrX19maXJzdCkNCiAgICAqX19maXJzdCA9IF9f
 Z2VuKCk7DQogIHJldHVybiBfX2ZpcnN0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUg
 PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
 VHA+DQpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmly
 c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkN
 CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGZvciAoIDsgX19maXJzdCAh
 PSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBpZiAoISgqX19maXJzdCA9PSBf
 X3ZhbHVlKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAg
 ICArK19fcmVzdWx0Ow0KICAgIH0NCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
 ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQpfT3V0cHV0SXRlciByZW1vdmVfY29w
 eV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
 bHQsIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQog
 IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBp
 ZiAoIV9fcHJlZCgqX19maXJzdCkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
 X2ZpcnN0Ow0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBf
 X3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
 Y2xhc3MgX1RwPg0KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIg
 X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
 ICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fZmlyc3QgPSBmaW5kKF9fZmly
 c3QsIF9fbGFzdCwgX192YWx1ZSk7DQogIF9Gb3J3YXJkSXRlciBfX2kgPSBf
 X2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsr
 X19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KX0Zv
 cndhcmRJdGVyIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
 cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1By
 ZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX2ZpcnN0ID0g
 ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7DQogIF9Gb3J3YXJk
 SXRlciBfX2kgPSBfX2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdCA9PSBfX2xh
 c3QgPyBfX2ZpcnN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJl
 bW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7
 DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
 X091dHB1dEl0ZXIsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIF9fdW5pcXVl
 X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
 bHQsIF9UcCopDQp7DQoNCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg
 Kl9fcmVzdWx0ID0gX192YWx1ZTsNCiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
 X2xhc3QpDQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsNCiAg
 ICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAgICorK19fcmVzdWx0ID0g
 X192YWx1ZTsNCiAgICB9DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+
 DQppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVy
 IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf
 dGFnKQ0Kew0KDQogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f
 bGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
 ZXI+DQpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
 Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJh
 dG9yX3RhZykNCnsNCg0KICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgd2hp
 bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCEoKl9fcmVzdWx0
 ID09ICpfX2ZpcnN0KSkNCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7
 DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1
 dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
 dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 T3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp
 ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsNCiAgcmV0
 dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf
 X3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
 Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsDQog
 ICAgICAgICAgY2xhc3MgX1RwPg0KX091dHB1dEl0ZXIgX191bmlxdWVfY29w
 eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
 X2JpbmFyeV9wcmVkLCBfVHAqKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KDQogIF9UcCBfX3ZhbHVlID0gKl9fZmly
 c3Q7DQogICpfX3Jlc3VsdCA9IF9fdmFsdWU7DQogIHdoaWxlICgrK19fZmly
 c3QgIT0gX19sYXN0KQ0KICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl
 LCAqX19maXJzdCkpIHsNCiAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg
 ICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICB9DQogIHJldHVybiAr
 K19fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
 Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpp
 bmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
 Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
 YmluYXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQ0Kew0KDQogIHJldHVybiBfX3VuaXF1
 ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3By
 ZWQsDQogICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp
 cnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
 cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpfRm9y
 d2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
 bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQp7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCg0KDQogICpfX3Jlc3VsdCA9ICpfX2Zp
 cnN0Ow0KICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAo
 IV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVz
 dWx0ID0gKl9fZmlyc3Q7DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs
 IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQppbmxpbmUgX091dHB1dEl0ZXIg
 dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
 SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f
 Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogIHJldHVybiBf
 X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmlu
 YXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
 Y2F0ZWdvcnkoX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9G
 b3J3YXJkSXRlcj4NCl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVy
 IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 Cg0KICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3Qp
 Ow0KICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2Zp
 cnN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
 c3MgX0JpbmFyeVByZWRpY2F0ZT4NCl9Gb3J3YXJkSXRlciB1bmlxdWUoX0Zv
 cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
 ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl
 ZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19maXJzdCA9IGFkamFjZW50X2Zp
 bmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsNCiAgcmV0dXJu
 IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5h
 cnlfcHJlZCk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
 aW9uYWxJdGVyPg0Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy
 IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAg
 ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgew0KICB3aGls
 ZSAodHJ1ZSkNCiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJz
 dCA9PSAtLV9fbGFzdCkNCiAgICAgIHJldHVybjsNCiAgICBlbHNlDQogICAg
 ICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQp2b2lkIF9fcmV2ZXJzZShf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
 X2xhc3QsDQogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
 X3RhZykgew0KICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkNCiAgICBpdGVy
 X3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+DQppbmxpbmUgdm9pZCByZXZlcnNl
 KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf
 Y2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
 ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ
 dGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
 IF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdoaWxl
 IChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIC0tX19sYXN0Ow0KICAgICpf
 X3Jlc3VsdCA9ICpfX2xhc3Q7DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICBy
 ZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0V1
 Y2xpZGVhblJpbmdFbGVtZW50Pg0KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9f
 Z2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikNCnsN
 CiAgd2hpbGUgKF9fbiAhPSAwKSB7DQogICAgX0V1Y2xpZGVhblJpbmdFbGVt
 ZW50IF9fdCA9IF9fbSAlIF9fbjsNCiAgICBfX20gPSBfX247DQogICAgX19u
 ID0gX190Ow0KICB9DQogIHJldHVybiBfX207DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJk
 SXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsDQogICAgICAg
 ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICBfRGlzdGFuY2UqLA0KICAgICAgICAgICAgICAgICAg
 ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCA9
 PSBfX21pZGRsZSkNCiAgICByZXR1cm4gX19sYXN0Ow0KICBpZiAoX19sYXN0
 ID09IF9fbWlkZGxlKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KDQogIF9Gb3J3
 YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOw0KICBkbyB7DQogICAgc3dh
 cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7DQogICAgaWYgKF9fZmlyc3Qg
 PT0gX19taWRkbGUpDQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICB9
 IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOw0KDQogIF9Gb3J3YXJkSXRl
 ciBfX25ld19taWRkbGUgPSBfX2ZpcnN0Ow0KDQogIF9fZmlyc3QyID0gX19t
 aWRkbGU7DQoNCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgew0KICAg
 IHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsNCiAgICBpZiAoX19m
 aXJzdCA9PSBfX21pZGRsZSkNCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7
 DQogICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQ0KICAgICAgX19m
 aXJzdDIgPSBfX21pZGRsZTsNCiAgfQ0KDQogIHJldHVybiBfX25ld19taWRk
 bGU7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
 ciwgY2xhc3MgX0Rpc3RhbmNlPg0KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90
 YXRlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
 YW5jZSosDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp
 b25hbF9pdGVyYXRvcl90YWcpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkNCiAg
 ICByZXR1cm4gX19sYXN0Ow0KICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQ0K
 ICAgIHJldHVybiBfX2ZpcnN0Ow0KDQogIF9fcmV2ZXJzZShfX2ZpcnN0LCBf
 X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogIF9f
 cmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJh
 dG9yX3RhZygpKTsNCg0KICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAm
 JiBfX21pZGRsZSAhPSBfX2xhc3QpDQogICAgc3dhcCAoKl9fZmlyc3QrKywg
 Ki0tX19sYXN0KTsNCg0KICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgew0K
 ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs
 X2l0ZXJhdG9yX3RhZygpKTsNCiAgICByZXR1cm4gX19sYXN0Ow0KICB9DQog
 IGVsc2Ugew0KICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlk
 aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAgcmV0dXJuIF9fZmly
 c3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
 dGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCl9SYW5kb21BY2Nl
 c3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
 X21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
 Y2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9EaXN0YW5jZSAqLCBfVHAgKikNCnsNCg0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9f
 Zmlyc3Q7DQogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7
 DQogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7DQogIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRs
 ZSk7DQoNCiAgaWYgKF9fayA9PSAwKQ0KICAgIHJldHVybiBfX2xhc3Q7DQoN
 CiAgZWxzZSBpZiAoX19rID09IF9fbCkgew0KICAgIHN3YXBfcmFuZ2VzKF9f
 Zmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7DQogICAgcmV0dXJuIF9fcmVz
 dWx0Ow0KICB9DQoNCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19r
 KTsNCg0KICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9f
 aSsrKSB7DQogICAgX1RwIF9fdG1wID0gKl9fZmlyc3Q7DQogICAgX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsNCg0KICAgIGlmIChfX2sgPCBf
 X2wpIHsNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9f
 bC9fX2Q7IF9faisrKSB7DQogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsg
 X19sKSB7DQogICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsNCiAgICAg
 ICAgICBfX3AgLT0gX19sOw0KICAgICAgICB9DQoNCiAgICAgICAgKl9fcCA9
 ICooX19wICsgX19rKTsNCiAgICAgICAgX19wICs9IF9fazsNCiAgICAgIH0N
 CiAgICB9DQoNCiAgICBlbHNlIHsNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9f
 aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsNCiAgICAgICAg
 aWYgKF9fcCA8IF9fbGFzdCAtIF9faykgew0KICAgICAgICAgICpfX3AgPSAq
 KF9fcCArIF9fayk7DQogICAgICAgICAgX19wICs9IF9fazsNCiAgICAgICAg
 fQ0KDQogICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOw0KICAgICAgICBf
 X3AgLT0gX19sOw0KICAgICAgfQ0KICAgIH0NCg0KICAgICpfX3AgPSBfX3Rt
 cDsNCiAgICArK19fZmlyc3Q7DQogIH0NCg0KICByZXR1cm4gX19yZXN1bHQ7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUg
 X0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
 cndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KICByZXR1cm4gX19yb3RhdGUoX19maXJz
 dCwgX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9fZGlz
 dGFuY2VfdHlwZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgIF9faXRl
 cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ
 dGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
 ZEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICBfRm9y
 d2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
 Cg0KICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21p
 ZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRv
 bV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgew0KDQogIHJldHVybiBscmFuZDQ4
 KCkgJSBfX247DQoNCg0KDQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
 bmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9
 PSBfX2xhc3QpIHJldHVybjsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
 X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAg
 aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19p
 IC0gX19maXJzdCkgKyAxKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
 ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4N
 CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
 dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
 ICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0
 ID09IF9fbGFzdCkgcmV0dXJuOw0KICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
 IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAg
 ICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2Zp
 cnN0KSArIDEpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
 ZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpf
 T3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmly
 c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBf
 X24pDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsNCiAg
 ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7DQogIF9E
 aXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7DQoNCiAgd2hp
 bGUgKF9fbSA+IDApIHsNCiAgICBpZiAoX19yYW5kb21fbnVtYmVyKF9fcmVt
 YWluaW5nKSA8IF9fbSkgew0KICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7DQog
 ICAgICArK19fb3V0Ow0KICAgICAgLS1fX207DQogICAgfQ0KDQogICAgLS1f
 X3JlbWFpbmluZzsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgcmV0dXJuIF9f
 b3V0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
 cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNs
 YXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQpfT3V0cHV0SXRlciByYW5k
 b21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
 ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
 dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19y
 YW5kKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fcmVt
 YWluaW5nID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jl
 bWFpbmluZyk7DQogIF9EaXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFp
 bmluZyk7DQoNCiAgd2hpbGUgKF9fbSA+IDApIHsNCiAgICBpZiAoX19yYW5k
 KF9fcmVtYWluaW5nKSA8IF9fbSkgew0KICAgICAgKl9fb3V0ID0gKl9fZmly
 c3Q7DQogICAgICArK19fb3V0Ow0KICAgICAgLS1fX207DQogICAgfQ0KDQog
 ICAgLS1fX3JlbWFpbmluZzsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgcmV0
 dXJuIF9fb3V0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCl9S
 YW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9f
 Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5j
 ZSBfX24pDQp7DQogIF9EaXN0YW5jZSBfX20gPSAwOw0KICBfRGlzdGFuY2Ug
 X190ID0gX19uOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9f
 bSA8IF9fbjsgKytfX20sICsrX19maXJzdCkNCiAgICBfX291dFtfX21dID0g
 Kl9fZmlyc3Q7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQog
 ICAgKytfX3Q7DQogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJl
 cihfX3QpOw0KICAgIGlmIChfX00gPCBfX24pDQogICAgICBfX291dFtfX01d
 ID0gKl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJu
 IF9fb3V0ICsgX19tOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
 ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsDQogICAgICAgICAgY2xhc3Mg
 X1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19m
 aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdl
 bmVyYXRvciYgX19yYW5kLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pDQp7DQoNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KDQogIF9EaXN0YW5jZSBfX20gPSAwOw0KICBfRGlzdGFuY2UgX190ID0g
 X19uOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9f
 bjsgKytfX20sICsrX19maXJzdCkNCiAgICBfX291dFtfX21dID0gKl9fZmly
 c3Q7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgKytf
 X3Q7DQogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZChfX3QpOw0KICAgIGlm
 IChfX00gPCBfX24pDQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7DQog
 ICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJuIF9fb3V0ICsgX19tOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv
 bUFjY2Vzc0l0ZXI+DQppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXINCnJhbmRv
 bV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmly
 c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCg0KICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19v
 dXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsDQogICAg
 ICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4NCmlubGluZSBf
 UmFuZG9tQWNjZXNzSXRlcg0KcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9f
 Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICBfUmFu
 ZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
 X19vdXRfbGFzdCwNCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVy
 YXRvciYgX19yYW5kKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgcmV0dXJuIF9fcmFu
 ZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOw0KfQ0KDQoN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp
 Y2F0ZT4NCl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIg
 X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
 dGUgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
 aXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
 dHVybiBfX2ZpcnN0Ow0KDQogIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQ0K
 ICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsN
 Cg0KICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCg0KICB3aGls
 ZSAoKytfX25leHQgIT0gX19sYXN0KQ0KICAgIGlmIChfX3ByZWQoKl9fbmV4
 dCkpIHsNCiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOw0KICAgICAg
 KytfX2ZpcnN0Ow0KICAgIH0NCg0KICByZXR1cm4gX19maXJzdDsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1By
 ZWRpY2F0ZT4NCl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlk
 aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
 aXRlcmF0b3JfdGFnKQ0Kew0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHdoaWxl
 ICh0cnVlKQ0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAg
 ICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19m
 aXJzdCkpDQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGVsc2UNCiAgICAg
 ICAgYnJlYWs7DQogICAgLS1fX2xhc3Q7DQogICAgd2hpbGUgKHRydWUpDQog
 ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBf
 X2ZpcnN0Ow0KICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkNCiAg
 ICAgICAgLS1fX2xhc3Q7DQogICAgICBlbHNlDQogICAgICAgIGJyZWFrOw0K
 ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICsrX19maXJz
 dDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
 bGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRp
 b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCg0KICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0
 LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0K
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVk
 aWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBfX2lucGxh
 Y2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
 ZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p
 DQp7DQogIGlmIChfX2xlbiA9PSAxKQ0KICAgIHJldHVybiBfX3ByZWQoKl9f
 Zmlyc3QpID8gX19sYXN0IDogX19maXJzdDsNCiAgX0ZvcndhcmRJdGVyIF9f
 bWlkZGxlID0gX19maXJzdDsNCiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4g
 LyAyKTsNCiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRp
 dGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksDQog
 ICAgICAgICAgICAgICAgX19taWRkbGUsDQogICAgICAgICAgICAgICAgX19p
 bnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19w
 cmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGlj
 YXRlLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRl
 ciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9f
 Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlz
 dGFuY2UgX19sZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf
 c2l6ZSkNCnsNCiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAg
 ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsNCiAgICBfUG9p
 bnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsNCiAgICBmb3IgKCA7IF9fZmly
 c3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQ0KICAgICAgaWYgKF9fcHJlZCgq
 X19maXJzdCkpIHsNCiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Ow0K
 ICAgICAgICArK19fcmVzdWx0MTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0K
 ICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7DQogICAgICAgICsrX19y
 ZXN1bHQyOw0KICAgICAgfQ0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0
 MiwgX19yZXN1bHQxKTsNCiAgICByZXR1cm4gX19yZXN1bHQxOw0KICB9DQog
 IGVsc2Ugew0KICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7
 DQogICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsNCiAgICByZXR1
 cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJl
 ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1
 ZmZlciwgX19idWZmZXJfc2l6ZSksDQogICAgICAgICAgICAgICAgICAgIF9f
 bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRp
 b25fYWRhcHRpdmUoDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlk
 ZGxlLCBfX2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
 KSk7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
 Y2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
 DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4
 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1Rw
 KiwgX0Rpc3RhbmNlKikNCnsNCiAgX1RlbXBvcmFyeV9idWZmZXI8X0Zvcndh
 cmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogIGlmIChf
 X2J1Zi5zaXplKCkgPiAwKQ0KICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRp
 b25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19i
 dWYucmVxdWVzdGVkX3NpemUoKSksDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkp
 Ow0KICBlbHNlDQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0
 aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVz
 dGVkX3NpemUoKSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
 dGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlciBz
 dGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19m
 aXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2UN
 CiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBf
 X2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
 cyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRp
 b24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX1RwIF9fcGl2b3QpDQp7DQogIHdoaWxlICh0cnVlKSB7DQogICAgd2hp
 bGUgKCpfX2ZpcnN0IDwgX19waXZvdCkNCiAgICAgICsrX19maXJzdDsNCiAg
 ICAtLV9fbGFzdDsNCiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpDQog
 ICAgICAtLV9fbGFzdDsNCiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkN
 CiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIGl0ZXJfc3dhcChfX2ZpcnN0
 LCBfX2xhc3QpOw0KICAgICsrX19maXJzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
 X0NvbXBhcmU+DQpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0
 aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
 ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgd2hp
 bGUgKHRydWUpIHsNCiAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bp
 dm90KSkNCiAgICAgICsrX19maXJzdDsNCiAgICAtLV9fbGFzdDsNCiAgICB3
 aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQ0KICAgICAgLS1fX2xh
 c3Q7DQogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpDQogICAgICByZXR1
 cm4gX19maXJzdDsNCiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsN
 CiAgICArK19fZmlyc3Q7DQogIH0NCn0NCg0KY29uc3QgaW50IF9fc3RsX3Ro
 cmVzaG9sZCA9IDE2Ow0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
 Y2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fdW5ndWFyZGVkX2xpbmVh
 cl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwp
 DQp7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsNCiAg
 LS1fX25leHQ7DQogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsNCiAgICAq
 X19sYXN0ID0gKl9fbmV4dDsNCiAgICBfX2xhc3QgPSBfX25leHQ7DQogICAg
 LS1fX25leHQ7DQogIH0NCiAgKl9fbGFzdCA9IF9fdmFsOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
 c3MgX0NvbXBhcmU+DQp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
 X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0K
 ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogIC0tX19u
 ZXh0Ow0KICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgew0KICAg
 ICpfX2xhc3QgPSAqX19uZXh0Ow0KICAgIF9fbGFzdCA9IF9fbmV4dDsNCiAg
 ICAtLV9fbmV4dDsNCiAgfQ0KICAqX19sYXN0ID0gX192YWw7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0K
 aW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVy
 IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICBfVHAgX192YWwgPSAq
 X19sYXN0Ow0KICBpZiAoX192YWwgPCAqX19maXJzdCkgew0KICAgIGNvcHlf
 YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsNCiAgICAq
 X19maXJzdCA9IF9fdmFsOw0KICB9DQogIGVsc2UNCiAgICBfX3VuZ3VhcmRl
 ZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
 X0NvbXBhcmU+DQppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
 IF9fY29tcCkNCnsNCiAgX1RwIF9fdmFsID0gKl9fbGFzdDsNCiAgaWYgKF9f
 Y29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7DQogICAgY29weV9iYWNrd2FyZChf
 X2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOw0KICAgICpfX2ZpcnN0ID0g
 X192YWw7DQogIH0NCiAgZWxzZQ0KICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p
 bnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0Kdm9pZCBfX2luc2VydGlvbl9z
 b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
 cm47DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCAr
 IDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgIF9fbGluZWFyX2luc2Vy
 dChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
 bXBhcmU+DQp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
 ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
 ZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9f
 Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47DQogIGZvciAoX1JhbmRvbUFjY2Vz
 c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p
 KQ0KICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVf
 dHlwZShfX2ZpcnN0KSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fdW5ndWFy
 ZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
 cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICBmb3IgKF9SYW5k
 b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr
 X19pKQ0KICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAo
 Kl9faSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
 ZXI+DQppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsNCiAg
 X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFz
 dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
 YXJlPg0Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21w
 YXJlIF9fY29tcCkNCnsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
 PSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAgICBfX3VuZ3Vh
 cmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
 IF9Db21wYXJlPg0KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u
 X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
 IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX191bmd1YXJkZWRfaW5zZXJ0
 aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
 Zmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
 b21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
 Pg0Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KICBpZiAoX19sYXN0IC0gX19m
 aXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgew0KICAgIF9faW5zZXJ0aW9uX3Nv
 cnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7DQogICAg
 X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3Ro
 cmVzaG9sZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlDQogICAgX19pbnNlcnRp
 b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBf
 X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
 c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlmIChfX2xh
 c3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7DQogICAgX19pbnNl
 cnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xk
 LCBfX2NvbXApOw0KICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9f
 Zmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsNCiAg
 fQ0KICBlbHNlDQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
 c3QsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlu
 bGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikNCnsNCiAgX1NpemUgX19rOw0K
 ICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOw0K
 ICByZXR1cm4gX19rOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
 Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+DQp2b2lkIF9faW50
 cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
 cCosDQogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1p
 dCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJl
 c2hvbGQpIHsNCiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7DQogICAg
 ICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOw0KICAg
 ICAgcmV0dXJuOw0KICAgIH0NCiAgICAtLV9fZGVwdGhfbGltaXQ7DQogICAg
 X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAgX191bmd1YXJkZWRf
 cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf
 X2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsNCiAgICBfX2lu
 dHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRo
 X2xpbWl0KTsNCiAgICBfX2xhc3QgPSBfX2N1dDsNCiAgfQ0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
 c3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX2ludHJvc29ydF9s
 b29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLA0KICAg
 ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21w
 YXJlIF9fY29tcCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBf
 X3N0bF90aHJlc2hvbGQpIHsNCiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw
 KSB7DQogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xh
 c3QsIF9fY29tcCk7DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIC0tX19k
 ZXB0aF9saW1pdDsNCiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9DQog
 ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19m
 aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAt
 IDEpLCBfX2NvbXApKSwNCiAgICAgICBfX2NvbXApOw0KICAgIF9faW50cm9z
 b3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGlt
 aXQsIF9fY29tcCk7DQogICAgX19sYXN0ID0gX19jdXQ7DQogIH0NCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0KaW5saW5lIHZv
 aWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
 ZXNzSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19m
 aXJzdCAhPSBfX2xhc3QpIHsNCiAgICBfX2ludHJvc29ydF9sb29wKF9fZmly
 c3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
 ZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0
 IC0gX19maXJzdCkgKiAyKTsNCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0
 KF9fZmlyc3QsIF9fbGFzdCk7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2
 b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
 Y2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
 X2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ICE9
 IF9fbGFzdCkgew0KICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmly
 c3QpLA0KICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2Zp
 cnN0KSAqIDIsDQogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAg
 IF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
 bXApOw0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
 Y2Vzc0l0ZXI+DQp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9t
 QWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KICBpZiAoX19sYXN0
 IC0gX19maXJzdCA8IDE1KSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2Zp
 cnN0LCBfX2xhc3QpOw0KICAgIHJldHVybjsNCiAgfQ0KICBfUmFuZG9tQWNj
 ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
 dCkgLyAyOw0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19t
 aWRkbGUpOw0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9f
 bGFzdCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t
 aWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21p
 ZGRsZSAtIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19s
 YXN0IC0gX19taWRkbGUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
 bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX2lucGxhY2Vf
 c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
 dCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sYXN0IC0gX19maXJz
 dCA8IDE1KSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
 c3QsIF9fY29tcCk7DQogICAgcmV0dXJuOw0KICB9DQogIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0
 KSAvIDI7DQogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p
 ZGRsZSwgX19jb21wKTsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlk
 ZGxlLCBfX2xhc3QsIF9fY29tcCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZm
 ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
 YW5kb21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLA0K
 ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV9zb3J0
 X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3Vs
 dCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQ0Kew0KICBfRGlzdGFuY2UgX190
 d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsNCg0KICB3aGlsZSAoX19sYXN0
 IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7DQogICAgX19yZXN1bHQgPSBt
 ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsDQogICAgICAg
 ICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3Qg
 KyBfX3R3b19zdGVwLA0KICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQp
 Ow0KICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsNCiAgfQ0KDQogIF9fc3Rl
 cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19z
 dGVwX3NpemUpOw0KICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw
 X3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LA0KICAgICAg
 ICBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
 ZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAgICAg
 ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21l
 cmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIy
 IF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsDQogICAgICAgICAg
 ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNl
 IF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgd2hpbGUgKF9f
 bGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgew0KICAgIF9fcmVzdWx0
 ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAg
 ICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2Zp
 cnN0ICsgX190d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgIF9fcmVz
 dWx0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICBfX2Zp
 cnN0ICs9IF9fdHdvX3N0ZXA7DQogIH0NCiAgX19zdGVwX3NpemUgPSBtaW4o
 X0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7DQoN
 CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAg
 ICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwNCiAgICAgICAg
 X19yZXN1bHQsDQogICAgICAgIF9fY29tcCk7DQp9DQoNCmNvbnN0IGludCBf
 X3N0bF9jaHVua19zaXplID0gNzsNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5k
 b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fY2h1bmtf
 aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
 X2xhc3QsIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpDQp7DQogIHdoaWxlIChf
 X2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgew0KICAgIF9faW5z
 ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7
 DQogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7DQogIH0NCiAgX19pbnNl
 cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh
 c3MgX0NvbXBhcmU+DQp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0Nv
 bXBhcmUgX19jb21wKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
 PSBfX2NodW5rX3NpemUpIHsNCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
 c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7DQogICAgX19m
 aXJzdCArPSBfX2NodW5rX3NpemU7DQogIH0NCiAgX19pbnNlcnRpb25fc29y
 dChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
 IF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9S
 YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rp
 c3RhbmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m
 aXJzdDsNCiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg
 X19sZW47DQoNCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1
 bmtfc2l6ZTsNCiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
 X2xhc3QsIF9fc3RlcF9zaXplKTsNCg0KICB3aGlsZSAoX19zdGVwX3NpemUg
 PCBfX2xlbikgew0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9f
 bGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsNCiAgICBfX3N0ZXBfc2l6
 ZSAqPSAyOw0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1
 ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7DQogICAgX19zdGVw
 X3NpemUgKj0gMjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
 bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2Us
 DQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2b2lkIF9fbWVyZ2Vfc29y
 dF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
 X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkNCnsN
 CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgX1Bv
 aW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47DQoNCiAg
 X0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsNCiAg
 X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3Rl
 cF9zaXplLCBfX2NvbXApOw0KDQogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9f
 bGVuKSB7DQogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0
 LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7DQogICAgX19zdGVw
 X3NpemUgKj0gMjsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg
 X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7
 DQogICAgX19zdGVwX3NpemUgKj0gMjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz
 cyBfRGlzdGFuY2U+DQp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9f
 YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
 ZSBfX2J1ZmZlcl9zaXplKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAoX19s
 YXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgX1JhbmRvbUFjY2Vzc0l0ZXIg
 X19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47DQogIGlmIChfX2xlbiA+IF9f
 YnVmZmVyX3NpemUpIHsNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
 Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQog
 ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf
 X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogIH0NCiAgZWxzZSB7DQogICAg
 X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf
 X2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7DQogICAgX19tZXJnZV9zb3J0X3dp
 dGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3Rh
 bmNlKikwKTsNCiAgfQ0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f
 bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3Qp
 LA0KICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21p
 ZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwg
 Y2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNsYXNzIF9Db21wYXJlPg0K
 dm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy
 IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
 ZSwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAo
 X19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgX1JhbmRvbUFjY2Vzc0l0
 ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47DQogIGlmIChfX2xlbiA+
 IF9fYnVmZmVyX3NpemUpIHsNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
 KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgX19z
 dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
 ciwgX19idWZmZXJfc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9fY29tcCk7DQogIH0NCiAgZWxzZSB7DQogICAgX19tZXJnZV9zb3J0X3dp
 dGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0
 YW5jZSopMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
 bXApOw0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwg
 X19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICB9DQogIF9fbWVyZ2Vf
 YWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl
 KF9fbWlkZGxlIC0gX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgX0Rp
 c3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVy
 X3NpemUsDQogICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNs
 YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4
 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCos
 IF9EaXN0YW5jZSopDQp7DQogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21B
 Y2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAo
 YnVmLmJlZ2luKCkgPT0gMCkNCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
 X19maXJzdCwgX19sYXN0KTsNCiAgZWxzZQ0KICAgIF9fc3RhYmxlX3NvcnRf
 YWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
 c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPg0KaW5s
 aW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIg
 X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
 b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsN
 CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g
 YnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogIGlmIChidWYuYmVnaW4oKSA9PSAw
 KQ0KICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qs
 IF9fY29tcCk7DQogIGVsc2UNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
 KF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSksDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCBzdGFibGVf
 c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJz
 dCksDQogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
 cnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
 ciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBzdGFibGVfc29ydChf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
 bXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIF9fc3RhYmxlX3NvcnRfYXV4
 KF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgX192YWx1
 ZV90eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh
 bmNlX3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgIF9fY29t
 cCk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
 ZXIsIGNsYXNzIF9UcD4NCnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFj
 Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUs
 DQogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
 dCwgX1RwKikNCnsNCiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsN
 CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19p
 IDwgX19sYXN0OyArK19faSkNCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQ0K
 ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAo
 Kl9faSksDQogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
 cnN0KSk7DQogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGluZSB2
 b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
 bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fcGFydGlh
 bF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw
 ZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
 ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19w
 YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgIF9S
 YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21w
 KQ0Kew0KICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7
 DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9f
 aSA8IF9fbGFzdDsgKytfX2kpDQogICAgaWYgKF9fY29tcCgqX19pLCAqX19m
 aXJzdCkpDQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf
 X2ksIF9UcCgqX19pKSwgX19jb21wLA0KICAgICAgICAgICAgICAgICBfX2Rp
 c3RhbmNlX3R5cGUoX19maXJzdCkpOw0KICBzb3J0X2hlYXAoX19maXJzdCwg
 X19taWRkbGUsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
 ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBw
 YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
 ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
 ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 DQoNCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
 dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0
 ZXIsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBfVHA+DQpf
 UmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0
 ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
 X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAq
 KQ0Kew0KICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkg
 cmV0dXJuIF9fcmVzdWx0X2xhc3Q7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9f
 cmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0Ow0KICB3aGlsZShf
 X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y
 ZXN1bHRfbGFzdCkgew0KICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19m
 aXJzdDsNCiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsNCiAgICArK19fZmly
 c3Q7DQogIH0NCiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
 dF9yZWFsX2xhc3QpOw0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsN
 CiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpDQogICAgICBf
 X2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksDQog
 ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xh
 c3QgLSBfX3Jlc3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgIF9U
 cCgqX19maXJzdCkpOw0KICAgICsrX19maXJzdDsNCiAgfQ0KICBzb3J0X2hl
 YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7DQogIHJl
 dHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGlu
 ZSBfUmFuZG9tQWNjZXNzSXRlcg0KcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0
 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
 ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LA0KICAg
 ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz
 dCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19m
 aXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBl
 KF9fcmVzdWx0X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
 cyBfQ29tcGFyZSwNCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
 IF9UcD4NCl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHko
 X0lucHV0SXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
 c0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAg
 aWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBf
 X3Jlc3VsdF9sYXN0Ow0KICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9y
 ZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsNCiAgd2hpbGUoX19maXJzdCAh
 PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh
 c3QpIHsNCiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7DQog
 ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9
 DQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s
 YXN0LCBfX2NvbXApOw0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsN
 CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQ0K
 ICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNl
 KDApLA0KICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRf
 cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAg
 ICAgICBfVHAoKl9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2Nv
 bXApOw0KICAgICsrX19maXJzdDsNCiAgfQ0KICBzb3J0X2hlYXAoX19yZXN1
 bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsNCiAgcmV0
 dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
 Q29tcGFyZT4NCmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcg0KcGFydGlhbF9z
 b3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz
 dWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
 ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHko
 X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19y
 ZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 X3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fbnRo
 X2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
 Y2Vzc0l0ZXIgX19udGgsDQogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
 Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0g
 X19maXJzdCA+IDMpIHsNCiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9
 DQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigq
 X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz
 dCAtIDEpKSkpOw0KICAgIGlmIChfX2N1dCA8PSBfX250aCkNCiAgICAgIF9f
 Zmlyc3QgPSBfX2N1dDsNCiAgICBlbHNlDQogICAgICBfX2xhc3QgPSBfX2N1
 dDsNCiAgfQ0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlu
 bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
 c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19s
 YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
 bXBhcmU+DQp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
 X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsDQogICAgICAgICAg
 ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29t
 cGFyZSBfX2NvbXApDQp7DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g
 Mykgew0KICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgIF9f
 dW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
 Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
 cCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQog
 ICAgaWYgKF9fY3V0IDw9IF9fbnRoKQ0KICAgICAgX19maXJzdCA9IF9fY3V0
 Ow0KICAgIGVsc2UNCiAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICB9DQogIF9f
 aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9D
 b21wYXJlPg0KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz
 c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsDQogICAg
 ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
 IF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19u
 dGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5
 cGUoX19maXJzdCksIF9fY29tcCk7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxj
 bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
 Pg0KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
 Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQ0Kew0K
 ICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBf
 X2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNlIF9faGFsZjsNCiAgX0Zvcndh
 cmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAg
 ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJz
 dDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmICgq
 X19taWRkbGUgPCBfX3ZhbCkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxl
 Ow0KICAgICAgKytfX2ZpcnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9f
 aGFsZiAtIDE7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9fbGVuID0gX19o
 YWxmOw0KICB9DQogIHJldHVybiBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgX0Zvcndh
 cmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
 d2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBjb25zdCBfVHAmIF9fdmFsKQ0Kew0KDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0
 LCBfX3ZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
 eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
 SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3Rh
 bmNlPg0KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy
 IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBf
 X2NvbXAsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7
 DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlz
 dGFuY2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAg
 d2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9IF9fbGVuID4+IDE7
 DQogICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWRk
 bGUsIF9faGFsZik7DQogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs
 KSkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgKytfX2Zp
 cnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAg
 fQ0KICAgIGVsc2UNCiAgICAgIF9fbGVuID0gX19oYWxmOw0KICB9DQogIHJl
 dHVybiBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
 dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIF9Gb3J3
 YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
 cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQ0Kew0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgcmV0dXJu
 IF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w
 LA0KICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19m
 aXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
 bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBfX3Vw
 cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
 JiBfX3ZhbCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0g
 MDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogIF9E
 aXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsNCg0K
 ICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19oYWxmID0gX19sZW4gPj4g
 MTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21p
 ZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX192YWwgPCAqX19taWRkbGUpDQog
 ICAgICBfX2xlbiA9IF9faGFsZjsNCiAgICBlbHNlIHsNCiAgICAgIF9fZmly
 c3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVu
 ID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAgfQ0KICByZXR1cm4g
 X19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
 Y2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChf
 Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
 bCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHJldHVybiBfX3Vw
 cGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsDQogICAgICAgICAg
 ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
 c3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBf
 X3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
 X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQ0Kew0K
 ICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBf
 X2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNlIF9faGFsZjsNCiAgX0Zvcndh
 cmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAg
 ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJz
 dDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmIChf
 X2NvbXAoX192YWwsICpfX21pZGRsZSkpDQogICAgICBfX2xlbiA9IF9faGFs
 ZjsNCiAgICBlbHNlIHsNCiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAg
 ICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg
 LSAxOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
 Q29tcGFyZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zv
 cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWws
 IF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3Qs
 IF9fbGFzdCwgX192YWwsIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
 Y2U+DQpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KX19lcXVh
 bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
 bGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgX0Rpc3Rh
 bmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2Uo
 X19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7
 DQogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0Ow0K
 DQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICBfX2hhbGYgPSBfX2xlbiA+
 PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICBhZHZhbmNlKF9f
 bWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkg
 ew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgKytfX2ZpcnN0
 Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAgfQ0K
 ICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAgX19sZW4g
 PSBfX2hhbGY7DQogICAgZWxzZSB7DQogICAgICBfX2xlZnQgPSBsb3dlcl9i
 b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOw0KICAgICAgYWR2YW5j
 ZShfX2ZpcnN0LCBfX2xlbik7DQogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91
 bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOw0KICAgICAgcmV0dXJu
 IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19y
 aWdodCk7DQogICAgfQ0KICB9DQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl
 ciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5l
 IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQplcXVhbF9yYW5n
 ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
 Y29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192
 YWwsDQogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
 X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
 IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4N
 CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQpfX2VxdWFsX3Jh
 bmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
 LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICBfQ29tcGFyZSBf
 X2NvbXAsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7
 DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlz
 dGFuY2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm
 dCwgX19yaWdodDsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o
 YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog
 ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX19jb21w
 KCpfX21pZGRsZSwgX192YWwpKSB7DQogICAgICBfX2ZpcnN0ID0gX19taWRk
 bGU7DQogICAgICArK19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9fbGVuIC0g
 X19oYWxmIC0gMTsNCiAgICB9DQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFs
 LCAqX19taWRkbGUpKQ0KICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgZWxz
 ZSB7DQogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p
 ZGRsZSwgX192YWwsIF9fY29tcCk7DQogICAgICBhZHZhbmNlKF9fZmlyc3Qs
 IF9fbGVuKTsNCiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlk
 ZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsNCiAgICAgIHJldHVybiBw
 YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmln
 aHQpOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
 IF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
 bXBhcmU+DQppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
 cj4NCmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
 ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAg
 X0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwg
 X19sYXN0LCBfX3ZhbCwgX19jb21wLA0KICAgICAgICAgICAgICAgICAgICAg
 ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQpib29sIGJpbmFyeV9z
 ZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
 c3QsDQogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQogIF9Gb3J3YXJkSXRlciBfX2kg
 PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsNCiAgcmV0
 dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
 IF9Db21wYXJlPg0KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf
 X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
 ICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgX0Nv
 bXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f
 Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7DQogIHJldHVybiBfX2kg
 IT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOw0KfQ0KDQoNCg0K
 dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
 MiwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBtZXJnZShfSW5w
 dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAg
 ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
 MiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
 ZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAoX19maXJz
 dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAg
 aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgKl9fcmVzdWx0
 ID0gKl9fZmlyc3QyOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9DQogICAg
 ZWxzZSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAr
 K19fZmlyc3QxOw0KICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJl
 dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
 X2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
 cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRl
 ciwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJdGVyIG1l
 cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
 LA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
 bnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICBfT3V0cHV0
 SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
 X2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKF9fY29tcCgqX19maXJz
 dDIsICpfX2ZpcnN0MSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
 MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICAgIGVsc2Ugew0KICAg
 ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsN
 CiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1cm4gY29weShf
 X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
 ZXN1bHQpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
 b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV93aXRo
 b3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t
 aWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
 aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQ0Kew0KICBp
 ZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApDQogICAgcmV0dXJuOw0K
 ICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsNCiAgICBpZiAoKl9fbWlk
 ZGxlIDwgKl9fZmlyc3QpDQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t
 aWRkbGUpOw0KICAgIHJldHVybjsNCiAgfQ0KICBfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICBfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogIF9EaXN0YW5jZSBfX2xl
 bjExID0gMDsNCiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICBpZiAoX19s
 ZW4xID4gX19sZW4yKSB7DQogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7DQog
 ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgX19zZWNv
 bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly
 c3RfY3V0KTsNCiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0
 LCBfX2xlbjIyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBfX2xlbjIyID0gX19s
 ZW4yIC8gMjsNCiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7
 DQogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p
 ZGRsZSwgKl9fc2Vjb25kX2N1dCk7DQogICAgZGlzdGFuY2UoX19maXJzdCwg
 X19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICB9DQogIF9CaWRpcmVjdGlvbmFs
 SXRlciBfX25ld19taWRkbGUNCiAgICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwg
 X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9i
 dWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsNCiAg
 X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25k
 X2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2Us
 IGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
 KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
 ZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sZW4x
 ID09IDAgfHwgX19sZW4yID09IDApDQogICAgcmV0dXJuOw0KICBpZiAoX19s
 ZW4xICsgX19sZW4yID09IDIpIHsNCiAgICBpZiAoX19jb21wKCpfX21pZGRs
 ZSwgKl9fZmlyc3QpKQ0KICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlk
 ZGxlKTsNCiAgICByZXR1cm47DQogIH0NCiAgX0JpZGlyZWN0aW9uYWxJdGVy
 IF9fZmlyc3RfY3V0ID0gX19maXJzdDsNCiAgX0JpZGlyZWN0aW9uYWxJdGVy
 IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICBfRGlzdGFuY2UgX19sZW4x
 MSA9IDA7DQogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgaWYgKF9fbGVu
 MSA+IF9fbGVuMikgew0KICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAg
 IGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgIF9fc2Vjb25k
 X2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0
 X2N1dCwgX19jb21wKTsNCiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNv
 bmRfY3V0LCBfX2xlbjIyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBfX2xlbjIy
 ID0gX19sZW4yIC8gMjsNCiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s
 ZW4yMik7DQogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0
 LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsNCiAgICBkaXN0
 YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogIH0NCiAg
 X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQ0KICAgID0gcm90YXRl
 KF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgX19t
 ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19u
 ZXdfbWlkZGxlLCBfX2xlbjExLCBfX2xlbjIyLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9fY29tcCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
 X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g
 X19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBf
 X2xlbjIyLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
 ZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAg
 ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQpfQmlkaXJlY3Rpb25hbEl0ZXIx
 IF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
 aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
 cjIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQ0Kew0KICBfQmlkaXJl
 Y3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsNCiAgaWYgKF9fbGVuMSA+IF9f
 bGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgIF9fYnVm
 ZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0K
 ICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7
 DQogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19m
 aXJzdCk7DQogIH0NCiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3Np
 emUpIHsNCiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk
 ZGxlLCBfX2J1ZmZlcik7DQogICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf
 X2ZpcnN0KTsNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwg
 X19idWZmZXJfZW5kLCBfX2xhc3QpOw0KICB9DQogIGVsc2UNCiAgICByZXR1
 cm4gcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rp
 b25hbEl0ZXIzPg0KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3
 YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
 MSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
 MiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpDQp7DQogIGlmIChf
 X2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJk
 KF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogIGlmIChfX2ZpcnN0
 MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
 c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogIC0tX19sYXN0MTsNCiAgLS1f
 X2xhc3QyOw0KICB3aGlsZSAodHJ1ZSkgew0KICAgIGlmICgqX19sYXN0MiA8
 ICpfX2xhc3QxKSB7DQogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOw0K
 ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpDQogICAgICAgIHJldHVy
 biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0
 KTsNCiAgICAgIC0tX19sYXN0MTsNCiAgICB9DQogICAgZWxzZSB7DQogICAg
 ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOw0KICAgICAgaWYgKF9fZmlyc3Qy
 ID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
 Zmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICAgIC0tX19sYXN0
 MjsNCiAgICB9DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
 dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAg
 ICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBh
 cmU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0Jp
 ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
 dDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
 dDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlm
 IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3
 YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogIGlmIChfX2Zp
 cnN0MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
 Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogIC0tX19sYXN0MTsNCiAg
 LS1fX2xhc3QyOw0KICB3aGlsZSAodHJ1ZSkgew0KICAgIGlmIChfX2NvbXAo
 Kl9fbGFzdDIsICpfX2xhc3QxKSkgew0KICAgICAgKi0tX19yZXN1bHQgPSAq
 X19sYXN0MTsNCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAg
 ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy
 LCBfX3Jlc3VsdCk7DQogICAgICAtLV9fbGFzdDE7DQogICAgfQ0KICAgIGVs
 c2Ugew0KICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgIGlm
 IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9i
 YWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAg
 ICAtLV9fbGFzdDI7DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
 X1BvaW50ZXI+DQp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9u
 YWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
 ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAg
 IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAg
 ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh
 bmNlIF9fYnVmZmVyX3NpemUpDQp7DQogIGlmIChfX2xlbjEgPD0gX19sZW4y
 ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX1BvaW50ZXIg
 X19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
 ZXIpOw0KICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk
 ZGxlLCBfX2xhc3QsIF9fZmlyc3QpOw0KICB9DQogIGVsc2UgaWYgKF9fbGVu
 MiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX1BvaW50ZXIgX19idWZmZXJf
 ZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAg
 X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs
 IF9fYnVmZmVyX2VuZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlIHsNCiAgICBf
 QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICAg
 IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsN
 CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgX0Rpc3RhbmNlIF9f
 bGVuMjIgPSAwOw0KICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsNCiAgICAg
 IF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgYWR2YW5jZShfX2ZpcnN0
 X2N1dCwgX19sZW4xMSk7DQogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i
 b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOw0KICAgICAg
 ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQog
 ICAgfQ0KICAgIGVsc2Ugew0KICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7
 DQogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQogICAg
 ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl
 LCAqX19zZWNvbmRfY3V0KTsNCiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f
 Zmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICB9DQogICAgX0JpZGlyZWN0aW9u
 YWxJdGVyIF9fbmV3X21pZGRsZSA9DQogICAgICBfX3JvdGF0ZV9hZGFwdGl2
 ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4x
 IC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIs
 IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICBfX21lcmdlX2FkYXB0
 aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu
 MTEsDQogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwg
 X19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19t
 aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx
 LA0KICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19i
 dWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh
 c3MgX1BvaW50ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2b2lk
 IF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
 DQogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
 bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
 SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
 IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAgICAgICAgICAgICAgICAg
 ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
 emUsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0K
 ew0KICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZm
 ZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko
 X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICBtZXJnZShfX2J1
 ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0
 LCBfX2NvbXApOw0KICB9DQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZl
 cl9zaXplKSB7DQogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf
 X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAgX19tZXJnZV9iYWNr
 d2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu
 ZCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAg
 fQ0KICBlbHNlIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j
 dXQgPSBfX2ZpcnN0Ow0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u
 ZF9jdXQgPSBfX21pZGRsZTsNCiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7
 DQogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICAgIGlmIChfX2xlbjEg
 PiBfX2xlbjIpIHsNCiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAg
 ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICBfX3Nl
 Y29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m
 aXJzdF9jdXQsIF9fY29tcCk7DQogICAgICBkaXN0YW5jZShfX21pZGRsZSwg
 X19zZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAgICB9DQogICAgZWxzZSB7DQog
 ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsNCiAgICAgIGFkdmFuY2UoX19z
 ZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAgICAgIF9fZmlyc3RfY3V0ID0gdXBw
 ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9f
 Y29tcCk7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwg
 X19sZW4xMSk7DQogICAgfQ0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l
 d19taWRkbGUgPQ0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9j
 dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEs
 DQogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwg
 X19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0
 LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0KICAgICAg
 ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np
 emUsIF9fY29tcCk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRk
 bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0K
 ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZm
 ZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7DQogIH0NCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFz
 cyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4
 KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
 bmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0
 YW5jZSBfX2xlbjEgPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRs
 ZSwgX19sZW4xKTsNCiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7DQogIGRpc3Rh
 bmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7DQoNCiAgX1RlbXBvcmFy
 eV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmly
 c3QsIF9fbGFzdCk7DQogIGlmIChfX2J1Zi5iZWdpbigpID09IDApDQogICAg
 X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19s
 YXN0LCBfX2xlbjEsIF9fbGVuMik7DQogIGVsc2UNCiAgICBfX21lcmdlX2Fk
 YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19s
 ZW4yLA0KICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rp
 c3RhbmNlKF9fYnVmLnNpemUoKSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsDQogICAgICAgICAgY2xh
 c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkIF9f
 aW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
 bmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3Rh
 bmNlKiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
 cmUgX19jb21wKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4xID0gMDsNCiAgZGlz
 dGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7DQogIF9EaXN0YW5j
 ZSBfX2xlbjIgPSAwOw0KICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBf
 X2xlbjIpOw0KDQogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFs
 SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoX19i
 dWYuYmVnaW4oKSA9PSAwKQ0KICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
 X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9f
 Y29tcCk7DQogIGVsc2UNCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3Qs
 IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLA0KICAgICAgICAg
 ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNp
 emUoKSksDQogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPg0KaW5saW5lIHZv
 aWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
 IF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
 Y3Rpb25hbEl0ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp
 ZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3Qp
 DQogICAgcmV0dXJuOw0KICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs
 IF9fbWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX192
 YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
 bGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0Jp
 ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwg
 X0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlm
 IChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkN
 CiAgICByZXR1cm47DQogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwg
 X19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfX3Zh
 bHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwN
 CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQoNCg0KDQoN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
 dGVyMj4NCmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
 bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
 IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo
 X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0K
 ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4g
 ZmFsc2U7DQogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpDQog
 ICAgICArK19fZmlyc3QxOw0KICAgIGVsc2UNCiAgICAgICsrX19maXJzdDEs
 ICsrX19maXJzdDI7DQoNCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
 cHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPg0KYm9vbCBpbmNsdWRlcyhfSW5w
 dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAg
 ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
 bGFzdDIsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJz
 dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlm
 IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQ0KICAgICAgcmV0dXJu
 IGZhbHNlOw0KICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
 c3QyKSkNCiAgICAgICsrX19maXJzdDE7DQogICAgZWxzZQ0KICAgICAgKytf
 X2ZpcnN0MSwgKytfX2ZpcnN0MjsNCg0KICByZXR1cm4gX19maXJzdDIgPT0g
 X19sYXN0MjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
 bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0
 SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
 cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAg
 ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
 X2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
 X2ZpcnN0Mikgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg
 ICAgKytfX2ZpcnN0MTsNCiAgICB9DQogICAgZWxzZSBpZiAoKl9fZmlyc3Qy
 IDwgKl9fZmlyc3QxKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
 DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg
 ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQog
 ICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9
 DQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly
 c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
 cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJ
 dGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
 cjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
 MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg
 ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j
 b21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJz
 dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAg
 aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICpf
 X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAg
 fQ0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
 IHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAgICsrX19m
 aXJzdDI7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKl9fcmVzdWx0ID0g
 Kl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19maXJz
 dDI7DQogICAgfQ0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIGNv
 cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs
 IF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
 MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091
 dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0
 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
 bGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
 dGVyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUg
 KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikN
 CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgKytfX2Zp
 cnN0MTsNCiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQog
 ICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAgICAgKl9fcmVzdWx0
 ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19m
 aXJzdDI7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgcmV0dXJuIF9f
 cmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
 YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAg
 ICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rp
 b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
 Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUg
 X19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19m
 aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAg
 IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgKytf
 X2ZpcnN0MTsNCiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
 aXJzdDEpKQ0KICAgICAgKytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAg
 ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQog
 ICAgICArK19fZmlyc3QyOw0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQog
 IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+
 DQpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp
 cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
 X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
 ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo
 X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0K
 ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsNCiAgICAgICpfX3Jl
 c3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICAr
 K19fcmVzdWx0Ow0KICAgIH0NCiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAq
 X19maXJzdDEpDQogICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAg
 ICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICBy
 ZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
 ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQ29t
 cGFyZT4NCl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx
 IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
 ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
 cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
 JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlmIChfX2NvbXAoKl9fZmly
 c3QxLCAqX19maXJzdDIpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJz
 dDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX3Jlc3VsdDsNCiAg
 ICB9DQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx
 KSkNCiAgICAgICsrX19maXJzdDI7DQogICAgZWxzZSB7DQogICAgICArK19f
 Zmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9DQogIHJldHVybiBj
 b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs
 YXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXINCnNldF9zeW1tZXRyaWNf
 ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
 X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
 MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
 IF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
 X2ZpcnN0Mikgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg
 ICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICAg
 IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgKl9f
 cmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICAg
 ICsrX19yZXN1bHQ7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKytfX2Zp
 cnN0MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICByZXR1cm4gY29w
 eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
 X19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
 LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQogICAg
 ICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlcg0Kc2V0X3N5bW1l
 dHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
 dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
 dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19jb21wKCpf
 X2ZpcnN0MSwgKl9fZmlyc3QyKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9f
 Zmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7
 DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
 cnN0MSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAg
 ICsrX19maXJzdDI7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgICBl
 bHNlIHsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0K
 ICAgIH0NCiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHko
 X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQp9DQoNCg0KDQoNCnRl
 bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgbWF4
 X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
 X2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
 cm4gX19maXJzdDsNCiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJz
 dDsNCiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCpf
 X3Jlc3VsdCA8ICpfX2ZpcnN0KQ0KICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0
 Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 Rm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPg0KX0ZvcndhcmRJdGVyIG1h
 eF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
 Y29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
 dXJuIF9fZmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
 c3Q7DQogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmIChf
 X2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJz
 dDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3
 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0Kew0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQog
 IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogIHdoaWxlICgr
 K19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICgqX19maXJzdCA8ICpfX3Jl
 c3VsdCkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgcmV0dXJuIF9f
 cmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
 bGFzcyBfQ29tcGFyZT4NCl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9y
 d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 Cg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0K
 ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSAo
 KytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
 LCAqX19yZXN1bHQpKQ0KICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICBy
 ZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
 QmlkaXJlY3Rpb25hbEl0ZXI+DQpib29sIG5leHRfcGVybXV0YXRpb24oX0Jp
 ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
 X2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmly
 c3QgPT0gX19sYXN0KQ0KICAgIHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0
 aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19p
 ID09IF9fbGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFz
 dDsNCiAgLS1fX2k7DQoNCiAgZm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9u
 YWxJdGVyIF9faWkgPSBfX2k7DQogICAgLS1fX2k7DQogICAgaWYgKCpfX2kg
 PCAqX19paSkgew0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9f
 bGFzdDsNCiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQ0KICAgICAg
 ICB7fQ0KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVy
 c2UoX19paSwgX19sYXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0N
 CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19m
 aXJzdCwgX19sYXN0KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQog
 IH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
 Y2xhc3MgX0NvbXBhcmU+DQpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGly
 ZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0K
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgaWYgKF9fZmlyc3QgPT0g
 X19sYXN0KQ0KICAgIHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJ
 dGVyIF9faSA9IF9fZmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19pID09IF9f
 bGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAg
 LS1fX2k7DQoNCiAgZm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVy
 IF9faWkgPSBfX2k7DQogICAgLS1fX2k7DQogICAgaWYgKF9fY29tcCgqX19p
 LCAqX19paSkpIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBf
 X2xhc3Q7DQogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQ0K
 ICAgICAgICB7fQ0KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAg
 IHJldmVyc2UoX19paSwgX19sYXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0K
 ICAgIH0NCiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVy
 c2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAg
 ICB9DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
 SXRlcj4NCmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
 DQogICAgcmV0dXJuIGZhbHNlOw0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
 ID0gX19maXJzdDsNCiAgKytfX2k7DQogIGlmIChfX2kgPT0gX19sYXN0KQ0K
 ICAgIHJldHVybiBmYWxzZTsNCiAgX19pID0gX19sYXN0Ow0KICAtLV9faTsN
 Cg0KICBmb3IoOzspIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9
 IF9faTsNCiAgICAtLV9faTsNCiAgICBpZiAoKl9faWkgPCAqX19pKSB7DQog
 ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Ow0KICAgICAg
 d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpDQogICAgICAgIHt9DQogICAgICBp
 dGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgcmV2ZXJzZShfX2lpLCBfX2xh
 c3QpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlmIChfX2kg
 PT0gX19maXJzdCkgew0KICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3Qp
 Ow0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgfQ0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFy
 ZT4NCmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
 X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAg
 cmV0dXJuIGZhbHNlOw0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m
 aXJzdDsNCiAgKytfX2k7DQogIGlmIChfX2kgPT0gX19sYXN0KQ0KICAgIHJl
 dHVybiBmYWxzZTsNCiAgX19pID0gX19sYXN0Ow0KICAtLV9faTsNCg0KICBm
 b3IoOzspIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsN
 CiAgICAtLV9faTsNCiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgew0K
 ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAg
 IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpDQogICAgICAgIHt9DQog
 ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgcmV2ZXJzZShfX2lp
 LCBfX2xhc3QpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlm
 IChfX2kgPT0gX19maXJzdCkgew0KICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf
 X2xhc3QpOw0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgfQ0KfQ0K
 DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3
 YXJkSXRlcj4NCl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVy
 IF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
 ZXIgX19sYXN0MikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K
 ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpDQog
 ICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
 ciAhPSBfX2xhc3QyOyArK19faXRlcikNCiAgICAgIGlmICgqX19maXJzdDEg
 PT0gKl9faXRlcikNCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICByZXR1
 cm4gX19sYXN0MTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
 IGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4N
 Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3Qx
 LCBfSW5wdXRJdGVyIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0
 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
 IF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
 c3QxOyArK19fZmlyc3QxKQ0KICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRl
 ciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpDQog
 ICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpDQogICAgICAg
 IHJldHVybiBfX2ZpcnN0MTsNCiAgcmV0dXJuIF9fbGFzdDE7DQp9DQojIDMz
 OTAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 bF9hbGdvLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
 bGFzcyBfRm9yd2FyZEl0ZXIyPg0KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5k
 KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
 MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
 Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRl
 cmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAg
 ICByZXR1cm4gX19sYXN0MTsNCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVy
 MSBfX3Jlc3VsdCA9IF9fbGFzdDE7DQogICAgd2hpbGUgKDEpIHsNCiAgICAg
 IF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0DQogICAgICAgID0gc2VhcmNo
 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7DQogICAg
 ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAgICAgIHJldHVy
 biBfX3Jlc3VsdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfX3Jlc3VsdCA9
 IF9fbmV3X3Jlc3VsdDsNCiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1
 bHQ7DQogICAgICAgICsrX19maXJzdDE7DQogICAgICB9DQogICAgfQ0KICB9
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBf
 Rm9yd2FyZEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNh
 dGU+DQpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBf
 X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
 SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
 YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
 DQp7DQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBf
 X2xhc3QxOw0KICBlbHNlIHsNCiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0
 ID0gX19sYXN0MTsNCiAgICB3aGlsZSAoMSkgew0KICAgICAgX0ZvcndhcmRJ
 dGVyMSBfX25ld19yZXN1bHQNCiAgICAgICAgPSBzZWFyY2goX19maXJzdDEs
 IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOw0KICAgICAg
 aWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4g
 X19yZXN1bHQ7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19yZXN1bHQgPSBf
 X25ld19yZXN1bHQ7DQogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0
 Ow0KICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0K
 fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj
 bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPg0KX0JpZGlyZWN0aW9uYWxJdGVy
 MQ0KX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBf
 QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgIF9CaWRp
 cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIg
 X19sYXN0MiwNCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
 YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgdHlwZWRlZiByZXZlcnNl
 X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAg
 dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+
 IF9SZXZJdGVyMjsNCg0KICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEp
 Ow0KICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOw0KICBfUmV2SXRl
 cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19y
 bGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0
 ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7DQoNCiAgaWYgKF9fcnJlc3VsdCA9
 PSBfX3JsYXN0MSkNCiAgICByZXR1cm4gX19sYXN0MTsNCiAgZWxzZSB7DQog
 ICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5i
 YXNlKCk7DQogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmly
 c3QyLCBfX2xhc3QyKSk7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9DQp9
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
 cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9CaW5h
 cnlQcmVkaWNhdGU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIxDQpfX2ZpbmRfZW5k
 KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFs
 SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
 MiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0KICAg
 ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rp
 b25hbF9pdGVyYXRvcl90YWcsDQogICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
 dGUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlv
 bmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
 dG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsNCg0KICBfUmV2
 SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOw0KICBfUmV2SXRlcjIgX19ybGFz
 dDIoX19maXJzdDIpOw0KICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNo
 KF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0
 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K
 DQogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpDQogICAgcmV0dXJuIF9f
 bGFzdDE7DQogIGVsc2Ugew0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19y
 ZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOw0KICAgIGFkdmFuY2UoX19yZXN1
 bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOw0KICAgIHJldHVy
 biBfX3Jlc3VsdDsNCiAgfQ0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9G
 b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQppbmxpbmUgX0Zv
 cndhcmRJdGVyMQ0KZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg
 X0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgX0ZvcndhcmRJdGVy
 MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICByZXR1cm4gX19maW5k
 X2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQog
 ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
 dDEpLA0KICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
 KF9fZmlyc3QyKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
 ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9C
 aW5hcnlQcmVkaWNhdGU+DQppbmxpbmUgX0ZvcndhcmRJdGVyMQ0KZmluZF9l
 bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh
 c3QxLA0KICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh
 cmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
 X2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0K
 DQogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp
 cnN0MiwgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
 cl9jYXRlZ29yeShfX2ZpcnN0MSksDQogICAgICAgICAgICAgICAgICAgIF9f
 aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLA0KICAgICAgICAgICAgICAg
 ICAgICBfX2NvbXApOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
 UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KYm9vbCBfX2lz
 X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9f
 bikNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsNCiAgZm9yIChfRGlz
 dGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkg
 ew0KICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGls
 ZF0pDQogICAgICByZXR1cm4gZmFsc2U7DQogICAgaWYgKChfX2NoaWxkICYg
 MSkgPT0gMCkNCiAgICAgICsrX19wYXJlbnQ7DQogIH0NCiAgcmV0dXJuIHRy
 dWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
 Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPg0K
 Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0
 cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsDQogICAgICAgICAgICAgICBfRGlz
 dGFuY2UgX19uKQ0Kew0KICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOw0KICBm
 b3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytf
 X2NoaWxkKSB7DQogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwg
 X19maXJzdFtfX2NoaWxkXSkpDQogICAgICByZXR1cm4gZmFsc2U7DQogICAg
 aWYgKChfX2NoaWxkICYgMSkgPT0gMCkNCiAgICAgICsrX19wYXJlbnQ7DQog
 IH0NCiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
 ZG9tQWNjZXNzSXRlcj4NCmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFj
 Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0K
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX2lzX2hlYXAoX19m
 aXJzdCwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy
 aW5nPg0KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBf
 X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
 ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQ0Kew0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0
 LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCg0KDQoNCnRl
 bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpib29sIGlzX3NvcnRlZChf
 Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIHRy
 dWU7DQoNCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQogIGZv
 ciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25l
 eHQsICsrX19uZXh0KSB7DQogICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkN
 CiAgICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIHJldHVybiB0cnVlOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3Ry
 aWN0V2Vha09yZGVyaW5nPg0KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVy
 IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
 ICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlm
 IChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICByZXR1cm4gdHJ1ZTsNCg0KICBf
 Rm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCiAgZm9yICgrK19fbmV4
 dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25l
 eHQpIHsNCiAgICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkNCiAg
 ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIHJldHVybiB0cnVlOw0KfQ0K
 DQp9DQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyA1MCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 YmFzaWNfc3RyaW5nLnRjYyIgMSAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzDQpu
 YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0
 IF9DaGFyVA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz46Og0KICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNf
 c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQog
 ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog
 ICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXAp
 KS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
 b2M+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
 X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5n
 PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsNCg0KDQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy
 VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0
 b3JhZ2VbDQogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsg
 c2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07DQoN
 Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfSW5JdGVyPg0KICAgICAgX0NoYXJUKg0KICAgICAgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgICBfU19jb25z
 dHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
 bG9jJiBfX2EsDQogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
 dGFnKQ0KICAgICAgew0KICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYg
 X19hID09IF9BbGxvYygpKQ0KICAgICAgICAgIHJldHVybiBfU19lbXB0eV9y
 ZXAoKS5fTV9yZWZjb3B5KCk7DQoNCiAgICAgICAgX0NoYXJUIF9fYnVmWzEw
 MF07DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOw0KICAgICAgICB3aGls
 ZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNp
 emVvZihfQ2hhclQpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fYnVm
 W19faSsrXSA9ICpfX2JlZzsNCiAgICAgICAgICAgICsrX19iZWc7DQogICAg
 ICAgICAgfQ0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUo
 X19pLCBfX2EpOw0KICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N
 X3JlZmRhdGEoKSwgX19idWYsIF9faSk7DQogICAgICAgIF9fci0+X01fbGVu
 Z3RoID0gX19pOw0KICAgICAgICB0cnkNCiAgICAgICAgICB7DQoNCg0KDQog
 ICAgICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICB7DQogICAgICAg
 ICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9f
 ci0+X01fbGVuZ3RoOw0KICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0
 ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5Ow0KICAg
 ICAgICAgICAgICAgIGZvciAoOzspDQogICAgICAgICAgICAgICAgICB7DQog
 ICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAg
 ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBf
 X3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFs
 Ow0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVm
 ZGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
 ICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpDQogICAgICAgICAgICAgICAg
 ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpf
 X2JlZzsNCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAg
 ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xl
 biA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgICAgICAgICAg
 IF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEs
 IF9fYSk7DQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19h
 bm90aGVyLT5fTV9yZWZkYXRhKCksDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsNCiAgICAg
 ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAg
 ICAgICBfX3IgPSBfX2Fub3RoZXI7DQogICAgICAgICAgICAgICAgX19yLT5f
 TV9sZW5ndGggPSBfX2xlbjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAg
 IH0NCiAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgIHsNCiAgICAgICAg
 ICAgIF9fci0+X01fZGVzdHJveShfX2EpOw0KICAgICAgICAgICAgdGhyb3c7
 DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
 IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRl
 cj4NCiAgICAgIF9DaGFyVCoNCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
 X1RyYWl0cyxfQWxsb2M+OjoNCiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy
 IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg
 ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAg
 IHsNCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNp
 emVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7DQoNCiAgICAgICAg
 aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkNCiAgICAg
 ICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOw0KDQoN
 CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywg
 X19hKTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgeyBfU19jb3B5X2NoYXJz
 KF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9DQogICAgICAg
 IGNhdGNoKC4uLikNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX3ItPl9N
 X2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg
 IH0NCiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7DQoNCiAgICAg
 ICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1p
 bmFsOw0KICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAg
 ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJh
 c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX1Nf
 Y29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B
 bGxvYyYgX19hKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2Eg
 PT0gX0FsbG9jKCkpDQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5f
 TV9yZWZjb3B5KCk7DQoNCg0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf
 Y3JlYXRlKF9fbiwgX19hKTsNCiAgICAgIHRyeQ0KICAgICAgICB7DQogICAg
 ICAgICAgaWYgKF9fbikNCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3Np
 Z24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsNCiAgICAgICAgfQ0K
 ICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19yLT5f
 TV9kZXN0cm95KF9fYSk7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0N
 CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOw0KICAgICAgX19yLT5fTV9y
 ZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAgcmV0
 dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
 bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
 b2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf
 X3N0cikNCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n
 cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLA0KICAgICAg
 ICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
 X1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9B
 bGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNp
 emVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
 dHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
 Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
 X24pDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01f
 Y2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9j
 KCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf
 c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNf
 c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
 X3BvcywNCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
 X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
 X19zdHIuX01fY2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9f
 YSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19z
 dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19z
 dHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
 IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
 KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCog
 X19zLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T
 X2NvbnN0cnVjdChfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
 KSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
 ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K
 ICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBj
 b25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0
 cnVjdChfX24sIF9fYywgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
 bWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+
 DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
 DQogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0
 ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBs
 dXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQ0KICAg
 IHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0
 cmluZyYgX19zdHIpDQogICAgew0KICAgICAgaWYgKF9NX3JlcCgpICE9IF9f
 c3RyLl9NX3JlcCgpKQ0KICAgICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0
 b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7DQogICAgICAg
 ICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9f
 YSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsNCiAgICAgICAgICBfTV9yZXAo
 KS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXAp
 Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
 dHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8
 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoNCiAgICBfTV9kZXN0
 cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQ0KICAgIHsNCiAgICAg
 IHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNp
 dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOw0KICAgICAgX1Jhd19ieXRlc19h
 bGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
 dGhpcyksIF9fc2l6ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
 ICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+OjpfTV9sZWFrX2hhcmQoKQ0KICAgIHsNCiAgICAgIGlmIChfTV9y
 ZXAoKS0+X01faXNfc2hhcmVkKCkpDQogICAgICAgIF9NX211dGF0ZSgwLCAw
 LCAwKTsNCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19z
 dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBfTV9tdXRh
 dGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5
 cGUgX19sZW4yKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXpl
 ID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3
 X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOw0KICAgICAg
 Y29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19s
 ZW4xOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29s
 ZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7DQoNCiAgICAgIGlmIChfTV9yZXAo
 KS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkp
 DQogICAgICAgIHsNCg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9
 IGdldF9hbGxvY2F0b3IoKTsNCiAgICAgICAgICBfUmVwKiBfX3IgPSBfUmVw
 OjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsNCiAgICAgICAgICB0cnkN
 CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9fcG9zKQ0KICAg
 ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0
 YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsNCiAgICAgICAgICAgICAgaWYgKF9f
 aG93X211Y2gpDQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
 X19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7
 DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2Fs
 bG9jYXRvcigpKTsNCiAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg
 ICB9DQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsNCiAg
 ICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsNCiAgICAgIH0N
 CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu
 MikNCiAgICAgICAgew0KDQogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUo
 X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNo
 KTsNCiAgICAgICAgfQ0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJs
 ZSgpOw0KICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7
 DQogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJt
 aW5hbDsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2b2lk
 DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
 cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpDQogICAgew0KICAgICAgaWYgKF9f
 cmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hh
 cmVkKCkpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlz
 LT5tYXhfc2l6ZSgpKQ0KICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJy
 b3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOw0KICAgICAgICAgIGFsbG9j
 YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsNCiAgICAgICAgICBf
 Q2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMg
 LSB0aGlzLT5zaXplKCkpOw0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNw
 b3NlKF9fYSk7DQogICAgICAgICAgX01fZGF0YShfX3RtcCk7DQogICAgICAg
 IH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZCBiYXNp
 Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2lj
 X3N0cmluZyYgX19zKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKS0+X01f
 aXNfbGVha2VkKCkpDQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFi
 bGUoKTsNCiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgp
 KQ0KICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOw0K
 ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2Fs
 bG9jYXRvcigpKQ0KICAgICAgICB7DQogICAgICAgICAgX0NoYXJUKiBfX3Rt
 cCA9IF9NX2RhdGEoKTsNCiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRh
 KCkpOw0KICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsNCiAgICAgICAg
 fQ0KDQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBiYXNpY19z
 dHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRf
 YWxsb2NhdG9yKCkpOw0KICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIo
 X19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsNCiAg
 ICAgICAgICAqdGhpcyA9IF9fdG1wMjsNCiAgICAgICAgICBfX3MgPSBfX3Rt
 cDE7DQogICAgICAgIH0NCiAgICB9DQojIDM1NiAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
 IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
 VHJhaXRzLCBfQWxsb2M+OjpfUmVwKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
 clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9TX2NyZWF0ZShz
 aXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQ0KICAg
 IHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KDQoNCiAgICAgIGlmIChfX2Nh
 cGFjaXR5ID4gX1NfbWF4X3NpemUpDQoNCg0KDQogICAgICAgIF9fdGhyb3df
 bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOw0KDQoN
 Cg0KDQogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAq
 IHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOw0KDQoNCiAgICAgIHZv
 aWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9j
 YXRlKF9fc2l6ZSk7DQogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2Up
 IF9SZXA7DQogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsN
 CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7DQogICAgICBfX3AtPl9N
 X2xlbmd0aCA9IDA7DQogICAgICByZXR1cm4gX19wOw0KICAgIH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
 cGVuYW1lIF9BbGxvYz4NCiAgICBfQ2hhclQqDQogICAgYmFzaWNfc3RyaW5n
 PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX01fY2xv
 bmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpDQog
 ICAgew0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xl
 bmd0aCArIF9fcmVzLCBfX2FsbG9jKTsNCiAgICAgIGlmIChfTV9sZW5ndGgp
 DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgdHJh
 aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEo
 KSwgX01fbGVuZ3RoKTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAg
 ICAgICAgIHsNCiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxs
 b2MpOw0KICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7DQog
 ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAgfQ0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
 ZW5hbWUgX0FsbG9jPg0KICBpbmxpbmUgYm9vbA0KDQoNCg0KDQogICAgYmFz
 aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQog
 ICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikNCg0K
 ICAgIHsNCiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2IDogX19z
 KSA8IF9fcjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9p
 ZA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
 OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAg
 ICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X2xl
 bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsNCiAgICAgIHNp
 emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19z
 aXplIDwgX19uKQ0KICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXpl
 LCBfX2MpOw0KICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQ0KICAgICAg
 ICB0aGlzLT5lcmFzZShfX24pOw0KDQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
 bG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+DQogICAg
 ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAg
 ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog
 ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
 IF9JbnB1dEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgX0lucHV0SXRl
 ciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpDQogICAgICB7DQogICAgICAg
 IGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7DQogICAgICAgIHJldHVy
 biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwg
 X19zLl9NX2llbmQoKSk7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
 DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgICAg
 YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAg
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg
 ICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBf
 Rm9yd2FyZEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
 dGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAg
 ICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7DQogICAgICAg
 IHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOw0KICAgICAg
 ICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihk
 aXN0YW5jZShfX2sxLCBfX2syKSk7DQoNCiAgICAgICAgaWYgKF9fZG1heCA8
 PSBfX2RuZXcpDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh
 c2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOw0KICAgICAgICBzaXplX3R5cGUg
 X19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAgICAgIF9NX211dGF0
 ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOw0KDQogICAgICAgIGlmIChfX2Ru
 ZXcpDQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29m
 ZiwgX19rMSwgX19rMik7DQoNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAg
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShzaXplX3R5
 cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5n
 JiBfX3N0ciwNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVf
 dHlwZSBfX24yKQ0KICAgIHsNCiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl
 KF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9z
 MiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xk
 KF9fcG9zMiwgX19uMikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N
 CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAg
 ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAg
 YXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KDQoN
 Cg0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAg
 ICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsN
 CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAg
 IHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJl
 cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigp
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgp
 KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5n
 PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVuZChjb25zdCBi
 YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
 ZSBfX24pDQogICAgew0KDQoNCg0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
 bWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgp
 Ow0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAg
 ICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gdGhpcy0+
 cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so
 X19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f
 Zm9sZChfX3BvcywgX19uKSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
 Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+Jg0K
 ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAg
 ICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pDQog
 ICAgew0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6
 ZSgpOw0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAg
 ICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gdGhp
 cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBf
 X24pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19z
 dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAgICBiYXNpY19zdHJp
 bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgYXBwZW5kKHNpemVf
 dHlwZSBfX24sIF9DaGFyVCBfX2MpDQogICAgew0KICAgICAgc2l6ZV90eXBl
 IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fbGVu
 ID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf
 X2xlbik7DQogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp
 LCBfTV9pZW5kKCksIF9fbiwgX19jKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
 QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
 Yz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAg
 ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
 bG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
 bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAg
 ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg
 X19zaXplX3R5cGU7DQogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFp
 dHM6Omxlbmd0aChfX2xocyk7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3Ry
 Ow0KICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7
 DQogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOw0K
 ICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0
 cjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4NCiAgICBvcGVyYXRvcisoX0No
 YXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
 X0FsbG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19z
 dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOw0K
 ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5
 cGUgX19zaXplX3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOw0K
 ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7DQogICAg
 ICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7DQogICAgICBfX3N0ci5hcHBl
 bmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVu
 ZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
 ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
 dHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy
 YXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykNCiAgICB7
 DQogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOw0KICAgICAg
 c2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsNCiAgICAg
 IGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9f
 bjIpDQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
 bmc6OnJlcGxhY2UiKTsNCiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24x
 LCBfX24yKTsNCg0KICAgICAgaWYgKF9fbjIpDQogICAgICAgIHRyYWl0c190
 eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOw0K
 ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
 Yz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
 OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
 LCBfQWxsb2M+OjoNCiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUg
 X19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgaWYg
 KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X291dF9v
 Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7DQoNCiAgICAgIGlmIChf
 X24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykNCiAgICAgICAgX19uID0gdGhp
 cy0+c2l6ZSgpIC0gX19wb3M7DQoNCiAgICAgIHRyYWl0c190eXBlOjpjb3B5
 KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7DQoNCiAgICAgIHJldHVy
 biBfX247DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0K
 ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K
 ICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg
 c2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUg
 X19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90IF9feHBvcyA9
 IF9fcG9zOw0KICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRh
 KCk7DQogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytf
 X3hwb3MpDQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2Rh
 dGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQ0KICAgICAgICAgIHJldHVy
 biBfX3hwb3M7DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
 VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZChfQ2hhclQgX19jLCBz
 aXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBl
 IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jl
 dCA9IG5wb3M7DQogICAgICBpZiAoX19wb3MgPCBfX3NpemUpDQogICAgICAg
 IHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo
 KTsNCiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7
 DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6
 ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOw0KICAgICAgICAgIGlm
 IChfX3ApDQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsNCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
 ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
 dHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
 clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIHJmaW5kKGNvbnN0IF9DaGFy
 VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
 DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
 KTsNCiAgICAgIGlmIChfX24gPD0gX19zaXplKQ0KICAgICAgICB7DQogICAg
 ICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsN
 CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsN
 CiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp
 ZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywg
 X19uKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsNCiAg
 ICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOw0K
 ICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
 VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmZpbmQoX0NoYXJUIF9fYywg
 c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlw
 ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0K
 ICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAt
 IDE7DQogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQ0KICAgICAgICAg
 ICAgX194cG9zID0gX19wb3M7DQoNCiAgICAgICAgICBmb3IgKCsrX194cG9z
 OyBfX3hwb3MtLSA+IDA7ICkNCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw
 ZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpDQogICAgICAgICAgICAg
 IHJldHVybiBfX3hwb3M7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9z
 Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp
 bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi
 YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBm
 aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w
 b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgZm9yICg7
 IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykNCiAgICAg
 ICAgew0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5
 cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOw0KICAgICAg
 ICAgIGlmIChfX3ApDQogICAgICAgICAgICByZXR1cm4gX19wb3M7DQogICAg
 ICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
 IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
 VHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0No
 YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u
 c3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
 ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pDQogICAgICAgIHsNCiAg
 ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykNCiAgICAgICAgICAgIF9f
 c2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRvDQogICAgICAgICAgICB7DQog
 ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg
 X01fZGF0YSgpW19fc2l6ZV0pKQ0KICAgICAgICAgICAgICAgIHJldHVybiBf
 X3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6
 ZS0tICE9IDApOw0KICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAg
 ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNf
 c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9m
 aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
 cywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3Qg
 X194cG9zID0gX19wb3M7DQogICAgICBmb3IgKDsgX19uICYmIF9feHBvcyA8
 IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpDQogICAgICAgIGlmICghdHJhaXRz
 X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkNCiAg
 ICAgICAgICByZXR1cm4gX194cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRf
 Zmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u
 c3QNCiAgICB7DQogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7DQogICAg
 ICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykNCiAg
 ICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10s
 IF9fYykpDQogICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVy
 biBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp
 Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUN
 CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoN
 CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
 X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAg
 ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlm
 IChfX3NpemUgJiYgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKC0t
 X19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsN
 CiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp
 ZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19z
 aXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsNCiAgICAg
 ICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOw0KICAgICAg
 ICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
 QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
 bG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
 YWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQg
 X19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6
 ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3Np
 emUpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3Bv
 cykNCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRv
 DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5
 cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQ0KICAgICAgICAgICAg
 ICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAg
 d2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5w
 b3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAg
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg
 IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
 dCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdA0KICAgIHsNCiAgICAgIHNp
 emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3R5
 cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+
 IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
 X3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAgICBzaXplX3R5cGUgX19yc2l6
 ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOw0KICAgICAgc2l6ZV90eXBl
 IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9f
 ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBf
 X3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAg
 ICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7
 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJh
 c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNv
 bXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0
 IGJhc2ljX3N0cmluZyYgX19zdHIsDQogICAgICAgICAgICBzaXplX3R5cGUg
 X19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QNCiAgICB7DQogICAgICBz
 aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90
 eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3Mx
 ID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpDQogICAgICAgIF9fdGhy
 b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0K
 ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3Mx
 LCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z
 aXplIC0gX19wb3MyLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9
 IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7DQogICAgICBpbnQgX19yID0gdHJh
 aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSAr
 IF9fcG9zMiwgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9f
 ciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQog
 ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFz
 aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgY29t
 cGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBz
 aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaW50IF9f
 ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3Np
 emUpOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9fciA9IF9fc2l6ZSAt
 IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHJldHVybiBfX3I7
 DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAg
 YmFzaWNfc3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBj
 b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0
 IF9DaGFyVCogX19zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBf
 X3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3Np
 emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
 bmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0
 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICBzaXplX3R5cGUgX19y
 c2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7DQogICAgICBzaXpl
 X3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7DQogICAgICBp
 bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
 b3MsIF9fcywgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9f
 ciA9IF9fcnNpemUgLSBfX29zaXplOw0KICAgICAgcmV0dXJuIF9fcjsNCiAg
 ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFzaWNf
 c3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBjb21wYXJl
 KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy
 VCogX19zLA0KICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQog
 ICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN
 CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19v
 dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAg
 ICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3Ro
 KF9fcyksIF9fbjIpOw0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o
 X19zaXplIC0gX19wb3MsIF9fbjEpOw0KICAgICAgc2l6ZV90eXBlIF9fbGVu
 ID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9fciA9IHRy
 YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f
 bGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3JzaXpl
 IC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQogIHRl
 bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9B
 bGxvYz4NCiAgICB2b2lkDQogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFz
 aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsDQog
 ICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0Fs
 bG9jOjpzaXplX3R5cGUgX19idWZzaXopDQogICAgew0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7DQogICAg
 ICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAg
 c2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAt
 IDEpOw0KICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgp
 LCBfX2J5dGVzKTsNCiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7
 DQogICAgfQ0KfQ0KIyA1MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgNDMgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
 IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2NjdHlwZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMw0KIyAxICIv
 dXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQNCiMgMzkgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMiAz
 DQojIDU1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfY2N0eXBlLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcg
 Ojppc2FsbnVtOw0KICB1c2luZyA6OmlzYWxwaGE7DQogIHVzaW5nIDo6aXNj
 bnRybDsNCiAgdXNpbmcgOjppc2RpZ2l0Ow0KICB1c2luZyA6OmlzZ3JhcGg7
 DQogIHVzaW5nIDo6aXNsb3dlcjsNCiAgdXNpbmcgOjppc3ByaW50Ow0KICB1
 c2luZyA6OmlzcHVuY3Q7DQogIHVzaW5nIDo6aXNzcGFjZTsNCiAgdXNpbmcg
 Ojppc3VwcGVyOw0KICB1c2luZyA6OmlzeGRpZ2l0Ow0KICB1c2luZyA6OnRv
 bG93ZXI7DQogIHVzaW5nIDo6dG91cHBlcjsNCn0NCiMgNDQgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
 IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25f
 ZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3Bh
 Y2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24o
 dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp
 Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQog
 IHZvaWQNCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9p
 ZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN
 CiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
 X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
 bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9l
 cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19v
 dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f
 dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
 aWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
 DQogIHZvaWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
 KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io
 Y29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3Nf
 ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyA0NSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIg
 Mw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDU2ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjbGFz
 cyB2ZWN0b3I7DQogIGNsYXNzIGxvY2FsZTsNCg0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzc3BhY2Uo
 X0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3ByaW50KF9DaGFy
 VCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQsIGNv
 bnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
 CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBs
 b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
 aW5saW5lIGJvb2wNCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxl
 Jik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu
 ZSBib29sDQogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v
 bA0KICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg
 ICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXN4
 ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2FsbnVt
 KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNncmFwaChfQ2hh
 clQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVD4NCiAgICBpbmxpbmUgX0NoYXJUDQogICAgdG91cHBlcihfQ2hhclQs
 IGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VD4NCiAgICBpbmxpbmUgX0NoYXJUDQogICAgdG9sb3dlcihfQ2hhclQsIGNv
 bnN0IGxvY2FsZSYpOw0KDQoNCg0KICBjbGFzcyBjdHlwZV9iYXNlOw0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY3R5cGU7DQog
 IHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47DQoNCg0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7
 DQoNCg0KICBjbGFzcyBjb2RlY3Z0X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0
 YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0Ow0KICB0ZW1wbGF0ZTw+IGNsYXNz
 IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsNCg0KDQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0
 eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOw0K
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
 dGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFz
 cyBudW1fZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N
 CiAgICBjbGFzcyBudW1fcHV0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+IGNsYXNzIG51bXB1bmN0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsNCg0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjb2xsYXRlOw0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzDQogICAgY29sbGF0ZV9ieW5hbWU7
 DQoNCg0KICBjbGFzcyB0aW1lX2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0
 b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXQ7DQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1i
 dWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXRfYnlu
 YW1lOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
 dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBj
 bGFzcyB0aW1lX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
 PiA+DQogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOw0KDQoNCiAgY2xhc3Mg
 bW9uZXlfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N
 CiAgICBjbGFzcyBtb25leV9nZXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9y
 PF9DaGFyVD4gPg0KICAgIGNsYXNzIG1vbmV5X3B1dDsNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xh
 c3MgbW9uZXlwdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBi
 b29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5h
 bWU7DQoNCg0KICBjbGFzcyBtZXNzYWdlc19iYXNlOw0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbWVzc2FnZXM7DQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlc19ieW5h
 bWU7DQoNCg0KICBjbGFzcyBsb2NhbGUNCiAgew0KICBwdWJsaWM6DQoNCiAg
 ICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsNCg0KDQogICAgY2xh
 c3MgZmFjZXQ7DQogICAgY2xhc3MgaWQ7DQogICAgY2xhc3MgX0ltcGw7DQoN
 CiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7DQogICAgZnJpZW5kIGNsYXNzIF9J
 bXBsOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAg
 ZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBs
 b2NhbGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAg
 ICAgIGZyaWVuZCBib29sDQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl
 JikgdGhyb3coKTsNCg0KDQoNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg
 bm9uZSA9IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0g
 MUwgPDwgMDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9
 IDFMIDw8IDE7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUg
 PSAxTCA8PCAyOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0g
 MUwgPDwgMzsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkg
 PSAxTCA8PCA0Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdl
 cyA9IDFMIDw8IDU7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9
 IChjb2xsYXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUg
 fCBtZXNzYWdlcyk7DQoNCg0KICAgIGxvY2FsZSgpIHRocm93KCk7DQoNCiAg
 ICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOw0KDQog
 ICAgZXhwbGljaXQNCiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zdGRfbmFt
 ZSk7DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0
 IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOw0KDQogICAgbG9jYWxlKGNv
 bnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl
 Z29yeSBfX2NhdCk7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+
 DQogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQq
 IF9fZik7DQoNCiAgICB+bG9jYWxlKCkgdGhyb3coKTsNCg0KICAgIGNvbnN0
 IGxvY2FsZSYNCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVy
 KSB0aHJvdygpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0K
 ICAgICAgbG9jYWxlDQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19v
 dGhlcik7DQoNCg0KICAgIHN0cmluZw0KICAgIG5hbWUoKSBjb25zdDsNCg0K
 ICAgIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhl
 cikgY29uc3QgdGhyb3cgKCk7DQoNCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
 ZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAo
 KQ0KICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7
 IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgICBib29sDQogICAgICBv
 cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywg
 X0FsbG9jPiYgX19zMSwNCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
 c3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsN
 Cg0KDQogICAgc3RhdGljIGxvY2FsZQ0KICAgIGdsb2JhbChjb25zdCBsb2Nh
 bGUmKTsNCg0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmDQogICAgY2xhc3Np
 YygpOw0KDQogIHByaXZhdGU6DQoNCiAgICBfSW1wbCogX01faW1wbDsNCg0K
 DQogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOw0KDQoNCiAgICBzdGF0
 aWMgX0ltcGwqIF9TX2dsb2JhbDsNCg0KICAgIHN0YXRpYyBjb25zdCBzaXpl
 X3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2Ow0KICAgIHN0YXRpYyBjb25zdCBz
 aXplX3QgX1NfbnVtX2ZhY2V0cyA9IDEzOw0KDQogICAgZXhwbGljaXQNCiAg
 ICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOw0KDQogICAgc3RhdGljIGlubGlu
 ZSB2b2lkDQogICAgX1NfaW5pdGlhbGl6ZSgpDQogICAgeyBpZiAoIV9TX2Ns
 YXNzaWMpIGNsYXNzaWMoKTsgfQ0KDQogICAgc3RhdGljIGNhdGVnb3J5DQog
 ICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsNCg0KICAgIHZv
 aWQNCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29u
 c3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOw0KICB9Ow0KDQoN
 Cg0KICBjbGFzcyBsb2NhbGU6Ol9JbXBsDQogIHsNCiAgcHVibGljOg0KDQog
 ICAgdHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+
 IF9fdmVjX2ZhY2V0Ow0KDQoNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0K
 ICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0Ow0KDQogICAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
 dCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsNCg0KICAgIHRl
 bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29sDQog
 ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KICBw
 cml2YXRlOg0KDQogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7DQogICAgX192
 ZWNfZmFjZXQqIF9NX2ZhY2V0czsNCiAgICBzdHJpbmcgX01fbmFtZXNbX1Nf
 bnVtX2NhdGVnb3JpZXNdOw0KICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7
 DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0
 eXBlW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T
 X2lkX251bWVyaWNbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog
 Y29uc3QgX1NfaWRfY29sbGF0ZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2Nh
 bGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107DQogICAgc3RhdGljIGNvbnN0
 IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107DQogICAgc3Rh
 dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107
 DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBf
 U19mYWNldF9jYXRlZ29yaWVzW107DQoNCiAgICBpbmxpbmUgdm9pZA0KICAg
 IF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpDQogICAgeyArK19NX3JlZmVy
 ZW5jZXM7IH0NCg0KICAgIGlubGluZSB2b2lkDQogICAgX01fcmVtb3ZlX3Jl
 ZmVyZW5jZSgpIHRocm93KCkNCiAgICB7DQogICAgICBpZiAoX01fcmVmZXJl
 bmNlcy0tID09IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAg
 ICAgICAgIHsgZGVsZXRlIHRoaXM7IH0NCiAgICAgICAgICBjYXRjaCguLi4p
 DQogICAgICAgICAgICB7IH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIF9J
 bXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsNCiAgICBfSW1wbChzdHJpbmcg
 X19uYW1lLCBzaXplX3QpOw0KICAgfl9JbXBsKCkgdGhyb3coKTsNCg0KICAg
 IGJvb2wNCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQ0KICAgIHsNCiAgICAg
 IGJvb2wgX19yZXQgPSB0cnVlOw0KICAgICAgZm9yIChzaXplX3QgaSA9IDA7
 IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkNCiAgICAgICAgX19y
 ZXQgJj0gX01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOw0KICAgICAg
 cmV0dXJuIF9fcmV0Ow0KICAgIH0NCiAgICB2b2lkDQogICAgX01fcmVwbGFj
 ZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOw0KDQogICAg
 dm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBj
 b25zdCBsb2NhbGU6OmlkKiBjb25zdCopOw0KDQogICAgdm9pZA0KICAgIF9N
 X3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6Omlk
 Kik7DQoNCiAgICB2b2lkDQogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBs
 b2NhbGU6OmlkKiwgZmFjZXQqKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1l
 IF9GYWNldD4NCiAgICAgIGlubGluZSB2b2lkDQogICAgICBfTV9pbml0X2Zh
 Y2V0KF9GYWNldCogX19mYWNldCkNCiAgICAgIHsgX01faW5zdGFsbF9mYWNl
 dCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0NCiAgfTsNCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgbG9jYWxlOjpsb2NhbGUoY29uc3Qg
 bG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikNCiAgICB7DQogICAgICBf
 TV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOw0KICAg
 ICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19m
 KTsNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9j
 YXRlZ29yaWVzOyArK19faSkNCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNb
 X19pXSA9ICIqIjsNCiAgICB9DQoNCg0KICBjbGFzcyBsb2NhbGU6OmZhY2V0
 DQogIHsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZyaWVuZCBj
 bGFzcyBsb2NhbGU6Ol9JbXBsOw0KDQogIHByb3RlY3RlZDoNCiAgICBleHBs
 aWNpdA0KICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOw0K
 DQogICAgdmlydHVhbA0KICAgIH5mYWNldCgpIHsgfTsNCg0KICAgIHN0YXRp
 YyB2b2lkDQogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9f
 Y2xvYywgY29uc3QgY2hhciogX19zKTsNCg0KICAgIHN0YXRpYyB2b2lkDQog
 ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOw0K
 DQogIHByaXZhdGU6DQogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7DQoNCiAg
 ICB2b2lkDQogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7DQoNCiAg
 ICB2b2lkDQogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7DQoN
 CiAgICBmYWNldChjb25zdCBmYWNldCYpOw0KDQogICAgdm9pZA0KICAgIG9w
 ZXJhdG9yPShjb25zdCBmYWNldCYpOw0KICB9Ow0KDQoNCg0KICBjbGFzcyBs
 b2NhbGU6OmlkDQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3Mg
 bG9jYWxlOw0KICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOw0KICAg
 IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25z
 dCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQog
 ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGJv
 b2wNCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsN
 Cg0KDQoNCg0KICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4Ow0KDQoNCiAg
 ICBzdGF0aWMgc2l6ZV90IF9TX2hpZ2h3YXRlcjsNCg0KICAgIHZvaWQNCiAg
 ICBvcGVyYXRvcj0oY29uc3QgaWQmKTsNCg0KICAgIGlkKGNvbnN0IGlkJik7
 DQoNCiAgcHVibGljOg0KDQoNCg0KICAgIGlkKCkgeyB9DQogIH07DQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYN
 CiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGJvb2wNCiAgICBoYXNfZmFj
 ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsNCn0NCiMgNDQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Mu
 aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL2lvc19iYXNlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMw0KDQpuYW1l
 c3BhY2Ugc3RkDQp7DQoNCg0KDQoNCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsg
 X01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5l
 IF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19h
 LCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn
 cyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f
 YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3J8
 KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyBy
 ZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz
 dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10
 ZmxhZ3MNCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0Zt
 dGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNf
 Y2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoN
 CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3J8PShfSW9zX0Zt
 dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7IHJldHVybiBf
 X2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0K
 ICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn
 cyBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlu
 bGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFn
 cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX19hID0g
 X19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3Bl
 cmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQ0KICB7IHJldHVybiBfSW9zX0Zt
 dGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCg0KICBlbnVt
 IF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwg
 MTYgfTsNCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvciYo
 X0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJl
 dHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0
 YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVu
 bW9kZQ0KICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Bl
 bm1vZGUgX19iKQ0KICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19j
 YXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0K
 ICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvcl4oX0lvc19PcGVu
 bW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJldHVybiBfSW9z
 X09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0
 PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBv
 cGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf
 X2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGlu
 ZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYg
 X19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19h
 ICYgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0
 b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0K
 ICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lv
 c19PcGVubW9kZQ0KICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpDQog
 IHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19h
 KSk7IH0NCg0KDQogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01faW9zX2lvc3Rh
 dGVfZW5kID0gMUwgPDwgMTYgfTsNCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRl
 DQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUg
 X19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50
 PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGlu
 ZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2Es
 IF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShz
 dGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
 OyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcl4oX0lv
 c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4g
 X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19j
 YXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRlDQog
 IG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf
 X2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGlu
 ZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9f
 YSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19hICYg
 X19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcl49
 KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0KICB7IHJl
 dHVybiBfX2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0
 YXRlDQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQ0KICB7IHJldHVy
 biBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0NCg0K
 ICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFM
 IDw8IDE2IH07DQoNCg0KICBjbGFzcyBpb3NfYmFzZQ0KICB7DQogIHB1Ymxp
 YzoNCg0KDQogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24N
 CiAgICB7DQogICAgcHVibGljOg0KDQoNCiAgICAgIGV4cGxpY2l0DQogICAg
 ICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7DQoNCiAg
 ICAgIHZpcnR1YWwNCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsNCg0KICAg
 ICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAgICAgd2hhdCgpIGNvbnN0IHRo
 cm93KCk7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZW51bSB7IF9NX2J1ZnNp
 emUgPSAyNTYgfTsNCiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsN
 Cg0KICAgIH07DQoNCg0KICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRm
 bGFnczsNCg0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEg
 PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsNCiAgICBz
 dGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxh
 Z3M6Ol9TX2RlYyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVk
 ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsNCiAgICBzdGF0
 aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
 Ol9TX2hleCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFs
 ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsNCiAgICBz
 dGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2Zs
 YWdzOjpfU19sZWZ0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0
 ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7DQogICAgc3RhdGlj
 IGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
 Ol9TX3JpZ2h0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50
 aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsN
 CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFn
 cyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOw0KICAgIHN0YXRpYyBjb25z
 dCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
 X1Nfc2hvd3BvaW50KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hv
 d3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsNCiAg
 ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19p
 b3NfZmxhZ3M6Ol9TX3NraXB3cyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZs
 YWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1
 Zik7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZt
 dGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOw0KICAgIHN0YXRp
 YyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9z
 X2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7DQogICAgc3RhdGljIGNvbnN0IGZt
 dGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19i
 YXNlZmllbGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZp
 ZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOw0K
 DQoNCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOw0KICAgIHN0
 YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxh
 Z3M6Ol9TX2JhZGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9m
 Yml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsNCiAgICBz
 dGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19m
 bGFnczo6X1NfZmFpbGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUg
 Z29vZGJpdCA9IGlvc3RhdGUoMCk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19P
 cGVubW9kZSBvcGVubW9kZTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg
 YXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7DQogICAgc3Rh
 dGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz
 OjpfU19hdGUpOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkg
 PSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsNCiAgICBzdGF0aWMg
 Y29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf
 aW4pOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k
 ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsNCiAgICBzdGF0aWMgY29uc3Qgb3Bl
 bm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMp
 Ow0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOw0KICAg
 IHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7DQogICAg
 c3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsNCiAgICBz
 dGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOw0KIyAyMTYg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lvc19i
 YXNlLmgiIDMNCiAgICBlbnVtIGV2ZW50DQogICAgew0KICAgICAgZXJhc2Vf
 ZXZlbnQsDQogICAgICBpbWJ1ZV9ldmVudCwNCiAgICAgIGNvcHlmbXRfZXZl
 bnQNCiAgICB9Ow0KDQogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJh
 Y2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOw0KDQogICAgdm9pZA0KICAg
 IHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBf
 X2luZGV4KTsNCg0KICBwcm90ZWN0ZWQ6DQoNCiAgICBzdHJlYW1zaXplIF9N
 X3ByZWNpc2lvbjsNCiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOw0KICAgIGZt
 dGZsYWdzIF9NX2ZsYWdzOw0KDQoNCg0KICAgIHN0cnVjdCBfQ2FsbGJhY2tf
 bGlzdA0KICAgIHsNCg0KICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7
 DQogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47DQogICAg
 ICBpbnQgX01faW5kZXg7DQogICAgICBpbnQgX01fcmVmY291bnQ7DQoNCiAg
 ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf
 X2ZuLCBpbnQgX19pbmRleCwNCiAgICAgICAgICAgICAgICAgICAgIF9DYWxs
 YmFja19saXN0KiBfX2NiKQ0KICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9m
 bihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsg
 fQ0KDQogICAgICB2b2lkDQogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyAr
 K19NX3JlZmNvdW50OyB9DQoNCiAgICAgIGludA0KICAgICAgX01fcmVtb3Zl
 X3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9NX3JlZmNvdW50LS07IH0NCiAgICB9
 Ow0KDQogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7DQoNCiAg
 ICB2b2lkDQogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhy
 b3coKTsNCg0KICAgIHZvaWQNCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2
 b2lkKTsNCg0KDQogICAgc3RydWN0IF9Xb3Jkcw0KICAgIHsNCiAgICAgIHZv
 aWQqIF9NX3B3b3JkOw0KICAgICAgbG9uZyBfTV9pd29yZDsNCiAgICB9Ow0K
 DQogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkcyA9IDg7DQog
 ICAgX1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOw0KICAg
 IF9Xb3JkcyBfTV9kdW1teTsNCiAgICBfV29yZHMqIF9NX3dvcmRzOw0KICAg
 IGludCBfTV93b3JkX2xpbWl0Ow0KDQogICAgX1dvcmRzJg0KICAgIF9NX2dy
 b3dfd29yZHMoaW50IF9faW5kZXgpOw0KDQoNCiAgICBsb2NhbGUgX01faW9z
 X2xvY2FsZTsNCg0KICAgIHZvaWQNCiAgICBfTV9pbml0KCk7DQoNCiAgcHVi
 bGljOg0KDQoNCg0KDQoNCiAgICBjbGFzcyBJbml0DQogICAgew0KICAgICAg
 ZnJpZW5kIGNsYXNzIGlvc19iYXNlOw0KICAgIHB1YmxpYzoNCiAgICAgIElu
 aXQoKTsNCiAgICAgIH5Jbml0KCk7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQog
 ICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsNCg0KICAgICAgc3Rh
 dGljIHZvaWQNCiAgICAgIF9TX2lvc19kZXN0cm95KCk7DQoNCiAgICBwcml2
 YXRlOg0KICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0Ow0KICAg
 ICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87DQogICAgfTsN
 Cg0KDQogICAgaW5saW5lIGZtdGZsYWdzDQogICAgZmxhZ3MoKSBjb25zdCB7
 IHJldHVybiBfTV9mbGFnczsgfQ0KDQogICAgaW5saW5lIGZtdGZsYWdzDQog
 ICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7DQogICAgICBmbXRm
 bGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgPSBfX2Zt
 dGZsOw0KICAgICAgcmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGlu
 ZSBmbXRmbGFncw0KICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7
 DQogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01f
 ZmxhZ3MgfD0gX19mbXRmbDsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9
 DQoNCiAgICBpbmxpbmUgZm10ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9f
 Zm10ZmwsIGZtdGZsYWdzIF9fbWFzaykNCiAgICB7DQogICAgICBmbXRmbGFn
 cyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgJj0gfl9fbWFz
 azsNCiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsNCiAg
 ICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZA0K
 ICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9f
 bWFzazsgfQ0KDQogICAgaW5saW5lIHN0cmVhbXNpemUNCiAgICBwcmVjaXNp
 b24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0NCg0KICAgIGlu
 bGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19w
 cmVjKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVj
 aXNpb247DQogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7DQogICAgICBy
 ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHN0cmVhbXNpemUN
 CiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9DQoNCiAg
 ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgIHdpZHRoKHN0cmVhbXNpemUgX193
 aWRlKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0
 aDsNCiAgICAgIF9NX3dpZHRoID0gX193aWRlOw0KICAgICAgcmV0dXJuIF9f
 b2xkOw0KICAgIH0NCg0KICAgIHN0YXRpYyBib29sDQogICAgc3luY193aXRo
 X3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7DQoNCg0KICAgIGxvY2FsZQ0K
 ICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgaW5saW5l
 IGxvY2FsZQ0KICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19s
 b2NhbGU7IH0NCg0KDQogICAgc3RhdGljIGludA0KICAgIHhhbGxvYygpIHRo
 cm93KCk7DQoNCiAgICBpbmxpbmUgbG9uZyYNCiAgICBpd29yZChpbnQgX19p
 eCkNCiAgICB7DQogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01f
 d29yZF9saW1pdCkNCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29y
 ZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOw0KICAgICAgcmV0dXJu
 IF9fd29yZC5fTV9pd29yZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZCom
 DQogICAgcHdvcmQoaW50IF9faXgpDQogICAgew0KICAgICAgX1dvcmRzJiBf
 X3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpDQogICAgICAgICAgICAg
 ICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3Jkcyhf
 X2l4KTsNCiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7DQogICAgfQ0K
 DQoNCiAgICB+aW9zX2Jhc2UoKTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgaW9z
 X2Jhc2UoKTsNCg0KDQogIHByaXZhdGU6DQogICAgaW9zX2Jhc2UoY29uc3Qg
 aW9zX2Jhc2UmKTsNCg0KICAgIGlvc19iYXNlJg0KICAgIG9wZXJhdG9yPShj
 b25zdCBpb3NfYmFzZSYpOw0KDQogIH07DQoNCg0KICBpbmxpbmUgaW9zX2Jh
 c2UmDQogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
 X19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7DQogICAgcmV0dXJu
 IF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9ib29s
 YWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNl
 dGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7DQogICAgcmV0dXJuIF9fYmFzZTsN
 CiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2hvd2Jhc2UoaW9zX2Jh
 c2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpz
 aG93YmFzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGlu
 ZSBpb3NfYmFzZSYNCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQ0K
 ICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOw0K
 ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2Um
 DQogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19i
 YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7DQogICAgcmV0dXJuIF9f
 YmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9zaG93cG9p
 bnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNldGYo
 aW9zX2Jhc2U6OnNob3dwb2ludCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAg
 fQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2hvd3Bvcyhpb3NfYmFzZSYg
 X19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dw
 b3MpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9z
 X2Jhc2UmDQogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog
 ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7DQogICAgcmV0
 dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2tp
 cHdzKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihp
 b3NfYmFzZTo6c2tpcHdzKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoN
 CiAgaW5saW5lIGlvc19iYXNlJg0KICBub3NraXB3cyhpb3NfYmFzZSYgX19i
 YXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdz
 KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i
 YXNlJg0KICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg
 IF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOw0KICAgIHJldHVy
 biBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vdXBw
 ZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5z
 ZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOw0KICAgIHJldHVybiBfX2Jhc2U7
 DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHVuaXRidWYoaW9zX2Jh
 c2UmIF9fYmFzZSkNCiAgew0KICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
 dW5pdGJ1Zik7DQogICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxp
 bmUgaW9zX2Jhc2UmDQogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQ0K
 ICB7DQogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOw0K
 ICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxpbmUgaW9zX2Jh
 c2UmDQogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICAg
 X19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRq
 dXN0ZmllbGQpOw0KICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s
 aW5lIGlvc19iYXNlJg0KICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsN
 CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFk
 anVzdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s
 aW5lIGlvc19iYXNlJg0KICByaWdodChpb3NfYmFzZSYgX19iYXNlKQ0KICB7
 DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6
 YWRqdXN0ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQog
 IGlubGluZSBpb3NfYmFzZSYNCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpDQog
 IHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6
 YmFzZWZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s
 aW5lIGlvc19iYXNlJg0KICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K
 ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNl
 ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUg
 aW9zX2Jhc2UmDQogIG9jdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
 X19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVs
 ZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlv
 c19iYXNlJg0KICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
 X19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRm
 aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
 b3NfYmFzZSYNCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7
 DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19i
 YXNlOjpmbG9hdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoN
 Cn0NCiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzDQojIDM4
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 c3RyZWFtYnVmLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25m
 aWcuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgi
 IDEgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMN
 CiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9zdHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMNCiMgNDMg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
 dHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMw0KIyA0NCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1
 Zi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6
 ZQ0KICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9U
 cmFpdHM+JiBfaW9zLA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sDQogICAgICAgICAg
 ICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q
 IF9fc2JvdXQpOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zg0K
 ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
 YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsN
 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBl
 IGludF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
 ZTo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l
 IHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsNCg0KDQogICAgICB0
 eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0KICAgICAg
 dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlw
 ZT4gX19zdHJlYW1idWZfdHlwZTsNCg0KICAgICAgZnJpZW5kIGNsYXNzIGJh
 c2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZyaWVu
 ZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
 Ow0KICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBl
 LCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1
 Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZy
 aWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJh
 aXRzX3R5cGU+Ow0KDQogICAgICBmcmllbmQgc3RyZWFtc2l6ZQ0KICAgICAg
 X19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFp
 dHNfdHlwZT4mIF9faW9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBf
 X3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19z
 Ym91dCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCg0KDQoNCg0KDQogICAgICBj
 aGFyX3R5cGUqIF9NX2J1ZjsNCg0KDQogICAgICBpbnRfdHlwZSBfTV9idWZf
 c2l6ZTsNCg0KDQogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7DQoN
 Cg0KDQogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOw0KDQoNCg0KDQoNCg0K
 ICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7DQogICAgICBjaGFyX3R5cGUq
 IF9NX2luX2N1cjsNCiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOw0KICAg
 ICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOw0KICAgICAgY2hhcl90eXBlKiBf
 TV9vdXRfY3VyOw0KICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOw0KDQoN
 CiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOw0KDQoNCiAgICAg
 IGxvY2FsZSBfTV9idWZfbG9jYWxlOw0KDQoNCiAgICAgIGJvb2wgX01fYnVm
 X2xvY2FsZV9pbml0Ow0KDQoNCg0KDQoNCg0KICAgICAgaW50X3R5cGUgX01f
 cGJhY2tfc2l6ZTsNCiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2s7DQogICAg
 ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgY2hhcl90
 eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsNCiAgICAgIGJvb2wgX01fcGJhY2tf
 aW5pdDsNCg0KDQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fcGJhY2tfY3Jl
 YXRlKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQ0K
 ICAgICAgICAgIHsNCiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9N
 X2luX2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgICAgIGludF90eXBlIF9f
 bGVuID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7DQogICAgICAgICAg
 ICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xl
 bik7DQogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1
 cjsNCiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5k
 Ow0KICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ss
 IF9NX3BiYWNrICsgX19sZW4pOw0KICAgICAgICAgICAgX01fcGJhY2tfaW5p
 dCA9IHRydWU7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQoNCg0KDQogICAg
 ICB2b2lkDQogICAgICBfTV9wYmFja19kZXN0cm95KCkNCiAgICAgIHsNCiAg
 ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpDQogICAgICAgICAgew0KDQogICAg
 ICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9w
 YmFjazsNCg0KDQogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQgPSAw
 Ow0KICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9l
 bmQgLSBfTV9wYmFjazsNCiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9s
 ZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsNCiAgICAgICAgICAg
 IGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pDQogICAgICAgICAgICAg
 IF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsNCg0KICAg
 ICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZl
 ICsgX19vZmZfY3VyLA0KICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFj
 a19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7DQogICAgICAgICAgICBfTV9wYmFj
 a19jdXJfc2F2ZSA9IF9fbnVsbDsNCiAgICAgICAgICAgIF9NX3BiYWNrX2Vu
 ZF9zYXZlID0gX19udWxsOw0KICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9
 IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCiAgICAgIHZv
 aWQNCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAg
 IHsNCiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOw0KICAg
 ICAgICBfTV9pbl9jdXIgKz0gX19uOw0KICAgICAgICBpZiAoX190ZXN0b3V0
 ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX291dF9jdXIgKz0g
 X19uOw0KICAgICAgfQ0KIyAxOTMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0KICAgICAgdm9p
 ZA0KICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAg
 IHsNCiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsNCg0KICAg
 ICAgICBfTV9vdXRfY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdGlu
 ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX2luX2N1ciArPSBf
 X247DQogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkNCiAg
 ICAgICAgICB7DQogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1
 cjsNCg0KICAgICAgICAgICAgaWYgKF9fdGVzdGluKQ0KICAgICAgICAgICAg
 ICBfTV9pbl9lbmQgKz0gX19uOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0K
 DQoNCg0KICAgICAgb2ZmX3R5cGUNCiAgICAgIF9NX291dF9idWZfc2l6ZSgp
 DQogICAgICB7DQogICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsNCiAgICAg
 ICAgaWYgKF9NX291dF9jdXIpDQogICAgICAgICAgew0KDQogICAgICAgICAg
 ICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpDQogICAgICAgICAgICAgIF9f
 cmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsN
 Cg0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IF9N
 X291dF9lbmQgLSBfTV9vdXRfY3VyOw0KICAgICAgICAgIH0NCiAgICAgICAg
 cmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KIyAyMzYgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0K
 ICAgICAgdm9pZA0KICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkN
 CiAgICAgIHsNCiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4p
 DQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVm
 KTsNCiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQ0KICAg
 ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYpOw0KICAgICAgfQ0K
 DQogICAgICB2b2lkDQogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5
 cGUgX19vZmYpDQogICAgICB7DQogICAgICAgIGJvb2wgX190ZXN0aW4gPSBf
 TV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KICAgICAgICBib29sIF9fdGVzdG91
 dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KICAgICAgICBpZiAoX190
 ZXN0aW4pDQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1Ziwg
 X01fYnVmICsgX19vZmYpOw0KICAgICAgICBpZiAoX190ZXN0b3V0KQ0KICAg
 ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7DQog
 ICAgICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIF9NX2lzX2luZGV0ZXJtaW5h
 dGUodm9pZCkNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl
 Ow0KDQogICAgICAgIGlmIChfTV9idWYpDQogICAgICAgICAgew0KICAgICAg
 ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pDQogICAgICAgICAg
 ICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9j
 dXIgPT0gX01faW5fZW5kOw0KICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBp
 b3NfYmFzZTo6b3V0KQ0KICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9i
 ZWcgPT0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7
 DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9
 DQoNCiAgcHVibGljOg0KICAgICAgdmlydHVhbA0KICAgICAgfmJhc2ljX3N0
 cmVhbWJ1ZigpDQogICAgICB7DQogICAgICAgIF9NX2J1Zl91bmlmaWVkID0g
 ZmFsc2U7DQogICAgICAgIF9NX2J1Zl9zaXplID0gMDsNCiAgICAgICAgX01f
 YnVmX3NpemVfb3B0ID0gMDsNCiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl
 OjpvcGVubW9kZSgwKTsNCiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g
 ZmFsc2U7DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBwdWJp
 bWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQ0KICAgICAgew0KICAgICAgICBs
 b2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOw0KICAgICAgICB0aGlzLT5p
 bWJ1ZShfX2xvYyk7DQogICAgICAgIHJldHVybiBfX3RtcDsNCiAgICAgIH0N
 Cg0KICAgICAgbG9jYWxlDQogICAgICBnZXRsb2MoKSBjb25zdA0KICAgICAg
 ew0KICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQ0KICAgICAgICAg
 IHJldHVybiBfTV9idWZfbG9jYWxlOw0KICAgICAgICBlbHNlDQogICAgICAg
 ICAgcmV0dXJuIGxvY2FsZSgpOw0KICAgICAgfQ0KDQoNCiAgICAgIF9fc3Ry
 ZWFtYnVmX3R5cGUqDQogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3Ms
 IHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVm
 KF9fcywgX19uKTsgfQ0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgcHVic2Vl
 a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXks
 DQogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg
 PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1
 cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0NCg0K
 ICAgICAgcG9zX3R5cGUNCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19z
 cCwNCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
 ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICB7IHJl
 dHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0NCg0KICAgICAg
 aW50DQogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9
 DQoNCg0KDQogICAgICBzdHJlYW1zaXplDQogICAgICBpbl9hdmFpbCgpDQog
 ICAgICB7DQogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7DQogICAgICAgIGlm
 IChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQ0KICAgICAg
 ICAgIHsNCiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0KICAgICAg
 ICAgICAgICB7DQogICAgICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xl
 biA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7DQog
 ICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j
 dXIgLSBfTV9wYmFjazsNCiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2
 ZV9sZW4gLSBfX3BiYWNrX2xlbjsNCiAgICAgICAgICAgICAgfQ0KICAgICAg
 ICAgICAgZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRy
 KCkgLSB0aGlzLT5ncHRyKCk7DQogICAgICAgICAgfQ0KICAgICAgICBlbHNl
 DQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsNCiAgICAg
 ICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAgICBpbnRfdHlwZQ0K
 ICAgICAgc25leHRjKCkNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19l
 b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIHJldHVybiAodGhp
 cy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkp
 Ow0KICAgICAgfQ0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgc2J1bXBjKCk7
 DQoNCiAgICAgIGludF90eXBlDQogICAgICBzZ2V0YygpDQogICAgICB7DQog
 ICAgICAgIGludF90eXBlIF9fcmV0Ow0KICAgICAgICBpZiAoX01faW5fY3Vy
 ICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICBfX3JldCA9
 IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOw0K
 ICAgICAgICBlbHNlDQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZs
 b3coKTsNCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAg
 ICBzdHJlYW1zaXplDQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3Ry
 ZWFtc2l6ZSBfX24pDQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19z
 LCBfX24pOyB9DQoNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRiYWNr
 YyhjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHN1
 bmdldGMoKTsNCg0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgc3B1dGMoY2hh
 cl90eXBlIF9fYyk7DQoNCiAgICAgIHN0cmVhbXNpemUNCiAgICAgIHNwdXRu
 KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAg
 IHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0NCg0KICAgIHBy
 b3RlY3RlZDoNCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpDQogICAgICA6IF9N
 X2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwNCiAgICAgIF9NX2J1Zl9z
 aXplX29wdChzdGF0aWNfY2FzdDxpbnRfdHlwZT4oMTAyNCkpLCBfTV9idWZf
 dW5pZmllZChmYWxzZSksDQogICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1
 cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3Vy
 KDApLA0KICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6
 b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwNCiAgICAg
 IF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX3NpemUoMSks
 IF9NX3BiYWNrKF9fbnVsbCksDQogICAgICBfTV9wYmFja19jdXJfc2F2ZShf
 X251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBfTV9wYmFja19p
 bml0KGZhbHNlKQ0KICAgICAgeyB9DQoNCg0KICAgICAgY2hhcl90eXBlKg0K
 ICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0NCg0K
 ICAgICAgY2hhcl90eXBlKg0KICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJu
 IF9NX2luX2N1cjsgfQ0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBlZ3B0
 cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQ0KDQogICAgICB2b2lk
 DQogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0N
 Cg0KICAgICAgdm9pZA0KICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywg
 Y2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkNCiAgICAg
 IHsNCiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOw0KICAgICAgICBfTV9p
 bl9jdXIgPSBfX2duZXh0Ow0KICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7
 DQogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9f
 Z2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkNCiAgICAgICAgICBfTV9tb2Rl
 ID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsNCiAgICAgIH0NCg0KDQogICAg
 ICBjaGFyX3R5cGUqDQogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N
 X291dF9iZWc7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgcHB0cigp
 IGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0NCg0KICAgICAgY2hhcl90
 eXBlKg0KICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5k
 OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHBidW1wKGludCBfX24pIHsgX01f
 b3V0X2N1ciArPSBfX247IH0NCg0KICAgICAgdm9pZA0KICAgICAgc2V0cChj
 aGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpDQogICAgICB7
 DQogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOw0K
 ICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOw0KICAgICAgICBpZiAoIShf
 TV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkN
 CiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7
 DQogICAgICB9DQoNCg0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGlt
 YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgICB7DQogICAgICAgIF9N
 X2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7DQogICAgICAgIGlmIChfTV9idWZf
 bG9jYWxlICE9IF9fbG9jKQ0KICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBf
 X2xvYzsNCiAgICAgIH0NCg0KDQogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVh
 bWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qDQogICAgICBzZXRidWYoY2hhcl90
 eXBlKiwgc3RyZWFtc2l6ZSkNCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0NCg0K
 ICAgICAgdmlydHVhbCBwb3NfdHlwZQ0KICAgICAgc2Vla29mZihvZmZfdHlw
 ZSwgaW9zX2Jhc2U6OnNlZWtkaXIsDQogICAgICAgICAgICAgIGlvc19iYXNl
 OjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpDQog
 ICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9DQoNCiAg
 ICAgIHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtwb3MocG9zX3R5cGUs
 DQogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl
 OjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICB7IHJldHVybiBwb3NfdHlw
 ZShvZmZfdHlwZSgtMSkpOyB9DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAg
 ICBzeW5jKCkgeyByZXR1cm4gMDsgfQ0KDQoNCiAgICAgIHZpcnR1YWwgc3Ry
 ZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQ0KDQog
 ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihjaGFyX3R5
 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGlu
 dF90eXBlDQogICAgICB1bmRlcmZsb3coKQ0KICAgICAgeyByZXR1cm4gdHJh
 aXRzX3R5cGU6OmVvZigpOyB9DQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUN
 CiAgICAgIHVmbG93KCkNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19y
 ZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190ZXN0
 ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7DQogICAgICAgIGJv
 b2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf
 TV9pbl9lbmQ7DQogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBl
 bmRpbmcpDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yZXQgPSB0cmFp
 dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7DQogICAgICAgICAg
 ICArK19NX2luX2N1cjsNCiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll
 ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkNCiAgICAgICAgICAgICAg
 KytfTV9vdXRfY3VyOw0KICAgICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9f
 cmV0Ow0KICAgICAgfQ0KDQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAg
 ICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkN
 CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQ0KDQoNCiAg
 ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNo
 YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHZpcnR1
 YWwgaW50X3R5cGUNCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRz
 X3R5cGU6OmVvZigpKQ0KICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVv
 ZigpOyB9DQojIDUxNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzDQogICAgcHJpdmF0ZToNCiAg
 ICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7
 DQoNCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmDQogICAgICBvcGVyYXRvcj0o
 Y29uc3QgX19zdHJlYW1idWZfdHlwZSYpOw0KDQogICAgfTsNCg0KfQ0KDQoN
 Cg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMw0KbmFt
 ZXNwYWNlIHN0ZCB7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
 IF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
 clQsIF9UcmFpdHM+OjoNCiAgICBzYnVtcGMoKQ0KICAgIHsNCiAgICAgIGlu
 dF90eXBlIF9fcmV0Ow0KICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9j
 dXIgPCBfTV9pbl9lbmQpDQogICAgICAgIHsNCiAgICAgICAgICBjaGFyX3R5
 cGUgX19jID0gKmdwdHIoKTsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgx
 KTsNCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlw
 ZShfX2MpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0
 ID0gdGhpcy0+dWZsb3coKTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
 aXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpp
 bnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
 OjoNCiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykNCiAgICB7DQogICAg
 ICBpbnRfdHlwZSBfX3JldDsNCiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01f
 aW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsNCiAgICAgIGJvb2wg
 X190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2Ms
 IHRoaXMtPmdwdHIoKVstMV0pOw0KICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwg
 X190ZXN0bmUpDQogICAgICAgIF9fcmV0ID0gcGJhY2tmYWlsKHRyYWl0c190
 eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAgIGVsc2UNCiAgICAgICAg
 ew0KICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsNCiAgICAgICAgICBf
 X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigp
 KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
 DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
 eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K
 ICAgIHN1bmdldGMoKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0Ow0K
 ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIp
 DQogICAgICAgIHsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQog
 ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9N
 X2luX2N1cik7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX19y
 ZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsNCiAgICAgIHJldHVybiBfX3JldDsN
 CiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJlYW1idWY8X0No
 YXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJlYW1idWY8
 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3B1dGMoY2hhcl90eXBlIF9fYykN
 CiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAgIGlmIChfTV9v
 dXRfYnVmX3NpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgICpfTV9vdXRf
 Y3VyID0gX19jOw0KICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsNCiAg
 ICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp
 Ow0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0gdGhp
 cy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOw0K
 ICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6
 ZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
 ICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg
 IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KICAgICAgd2hpbGUg
 KF9fcmV0IDwgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9f
 YnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgICBp
 ZiAoX19idWZfbGVuID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
 ICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7DQogICAgICAg
 ICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWlu
 aW5nKTsNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
 TV9pbl9jdXIsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19yZXQgKz0gX19s
 ZW47DQogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsNCiAgICAgICAgICAg
 ICAgX01faW5fY3VyX21vdmUoX19sZW4pOw0KICAgICAgICAgICAgfQ0KDQog
 ICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQ0KICAgICAgICAgICAgew0KICAg
 ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOw0KICAg
 ICAgICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkNCiAg
 ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlw
 ZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShf
 X2MpKTsNCiAgICAgICAgICAgICAgICAgICsrX19yZXQ7DQogICAgICAgICAg
 ICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
 YnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
 biBfX3JldDsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXpl
 DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg
 IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
 DQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQogICAgICB3
 aGlsZSAoX19yZXQgPCBfX24pDQogICAgICAgIHsNCiAgICAgICAgICBvZmZf
 dHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsNCiAgICAgICAg
 ICBpZiAoX19idWZfbGVuID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
 ICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsNCiAg
 ICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBf
 X3JlbWFpbmluZyk7DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
 KF9NX291dF9jdXIsIF9fcywgX19sZW4pOw0KICAgICAgICAgICAgICBfX3Jl
 dCArPSBfX2xlbjsNCiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOw0KICAg
 ICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOw0KICAgICAgICAg
 ICAgfQ0KDQogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQ0KICAgICAgICAg
 ICAgew0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVy
 Zmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOw0KICAgICAg
 ICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkNCiAgICAg
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAg
 ICAgICAgICAgICAgICAgKytfX3M7DQogICAgICAgICAgICAgICAgfQ0KICAg
 ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAg
 ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAg
 ICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fY29weV9z
 dHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywN
 CiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU
 LCBfVHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAgICAgICAgIGJh
 c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQ0KICB7
 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu
 dF90eXBlOw0KDQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAg
 IHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0K
 ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0Ow0KICAgICAgYm9vbCBfX3Rlc3Rw
 dXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAg
 IHRyeSB7DQogICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXpl
 ICE9IC0xKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9feHRyY3QgPSBf
 X3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsNCiAg
 ICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7DQogICAgICAgICAgICBfX3Ni
 aW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOw0KICAgICAgICAgICAgaWYg
 KF9feHRyY3QgPT0gX19idWZzaXplKQ0KICAgICAgICAgICAgICB7DQogICAg
 ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYmluLT5zZ2V0YygpOw0K
 ICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpDQog
 ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIF9faW9z
 LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAgICAgICAgICAgICAg
 ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
 ICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7DQogICAgICAg
 ICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgYnJl
 YWs7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2F0Y2goZXhjZXB0
 aW9uJiBfX2ZhaWwpIHsNCiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25z
 KCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkNCiAgICAgICAgICB0aHJv
 dzsNCiAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQp9DQoj
 IDUzMCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv
 cy5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL2Jhc2ljX2lvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMw0K
 IyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c2J1Zl9pdGVyLmgiIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xh
 c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9y
 PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+
 DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg
 Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
 Ow0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
 aXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsNCg0KICAgIHBy
 aXZhdGU6DQogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAg
 IGJvb2wgX01fZmFpbGVkOw0KDQogICAgcHVibGljOg0KICAgICAgaW5saW5l
 DQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z
 KSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01f
 ZmFpbGVkKCFfTV9zYnVmKSB7IH0NCg0KICAgICAgb3N0cmVhbWJ1Zl9pdGVy
 YXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQ0KICAgICAgOiBf
 TV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9DQoNCiAgICAg
 IG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcj0oX0NoYXJU
 IF9fYyk7DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBv
 cGVyYXRvciooKSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0K
 DQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3Ir
 KyhpbnQpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoNCiAg
 ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkg
 dGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgYm9v
 bA0KICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1
 cm4gX01fZmFpbGVkOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgaW5saW5lIG9zdHJl
 YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvc3RyZWFt
 YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hh
 clQgX19jKQ0KICAgIHsNCiAgICAgIGlmICghX01fZmFpbGVkICYmDQogICAg
 ICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19j
 KSxfVHJhaXRzOjplb2YoKSkpDQogICAgICBfTV9mYWlsZWQgPSB0cnVlOw0K
 ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
 IGlzdHJlYW1idWZfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxp
 bnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6
 b2ZmX3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0No
 YXJUJj4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9D
 aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
 X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90
 eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
 X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlw
 ZTsNCg0KICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
 VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmaXRlcl90eXBlOw0KDQogICAgcHJp
 dmF0ZToNCg0KDQoNCg0KDQoNCg0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9N
 X3NidWY7DQogICAgICBpbnRfdHlwZSBfTV9jOw0KDQogICAgcHVibGljOg0K
 ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkNCiAgICAgIDog
 X01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0NCg0KICAgICAgaXN0cmVh
 bWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQ0KICAg
 ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9DQoNCiAg
 ICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykg
 dGhyb3coKQ0KICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2MoLTIpIHsgfQ0K
 DQoNCg0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIG9wZXJhdG9yKigpIGNv
 bnN0DQogICAgICB7DQoNCiAgICAgICAgY2hhcl90eXBlIF9fcmV0Ow0KICAg
 ICAgICBpZiAoX01fc2J1ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90
 eXBlPigtMikpDQogICAgICAgICAgX19yZXQgPSBfTV9jOw0KICAgICAgICBl
 bHNlIGlmIChfTV9zYnVmKQ0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
 cGU6OnRvX2NoYXJfdHlwZShfTV9zYnVmLT5zZ2V0YygpKTsNCiAgICAgICAg
 ZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
 Pih0cmFpdHNfdHlwZTo6ZW9mKCkpOw0KICAgICAgICByZXR1cm4gX19yZXQ7
 DQogICAgICB9DQoNCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYNCiAg
 ICAgIG9wZXJhdG9yKysoKQ0KICAgICAgew0KICAgICAgICBpZiAoX01fc2J1
 ZikNCiAgICAgICAgICBfTV9zYnVmLT5zYnVtcGMoKTsNCiAgICAgICAgX01f
 YyA9IC0yOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAg
 ICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQ0KICAgICAgb3BlcmF0b3IrKyhp
 bnQpDQogICAgICB7DQogICAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSBf
 X29sZCA9ICp0aGlzOw0KICAgICAgICBpZiAoX01fc2J1ZikNCiAgICAgICAg
 ICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7DQogICAgICAgIF9N
 X2MgPSAtMjsNCiAgICAgICAgcmV0dXJuIF9fb2xkOw0KICAgICAgfQ0KDQog
 ICAgICBib29sDQogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVy
 X3R5cGUmIF9fYikNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19lb2Yg
 PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190aGlzZW9m
 ID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsNCiAg
 ICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYNCiAgICAgICAgICAg
 ICAgICAgICAgICB8fCBfX2IuX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsN
 CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190
 aGlzZW9mICYmICFfX2Jlb2YpKTsNCiAgICAgIH0NCg0KDQoNCg0KICAgICAg
 Ym9vbA0KICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBl
 JiBfX2IpIGNvbnN0DQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9m
 ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhpc2Vv
 ZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQog
 ICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmDQogICAgICAgICAg
 ICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7
 DQogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9f
 dGhpc2VvZiAmJiAhX19iZW9mKSk7DQogICAgICB9DQoNCiAgICB9Ow0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
 CiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVh
 bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAg
 ICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
 YWl0cz4mIF9fYikNCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0
 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAg
 ICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
 X1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7
 IH0NCn0NCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMN
 CiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2xvY2FsZV9mYWNldHMuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMNCiMgMzcg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
 dGltZS5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIg
 Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2N0aW1lLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
 MSAzIDQNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMNCiMgNTMgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzDQpuYW1l
 c3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6Y2xvY2tfdDsNCiAgdXNpbmcgOjp0
 aW1lX3Q7DQogIHVzaW5nIDo6dG07DQoNCiAgdXNpbmcgOjpjbG9jazsNCiAg
 dXNpbmcgOjpkaWZmdGltZTsNCiAgdXNpbmcgOjpta3RpbWU7DQogIHVzaW5n
 IDo6dGltZTsNCiAgdXNpbmcgOjphc2N0aW1lOw0KICB1c2luZyA6OmN0aW1l
 Ow0KICB1c2luZyA6OmdtdGltZTsNCiAgdXNpbmcgOjpsb2NhbHRpbWU7DQog
 IHVzaW5nIDo6c3RyZnRpbWU7DQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfaW9zLmgiIDEgMw0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQoNCg0K
 DQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRz
 L2N0eXBlX2Jhc2UuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jdHlw
 ZV9iYXNlLmgiIDMNCiAgc3RydWN0IGN0eXBlX2Jhc2UNCiAgew0KDQogICAg
 dHlwZWRlZiBpbnQqIF9fdG9fdHlwZTsNCg0KDQoNCiAgICB0eXBlZGVmIHVu
 c2lnbmVkIGludCBtYXNrOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVy
 ID0gMHgwMDAwMDAwMTsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9
 IDB4MDAwMDAwMDI7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAw
 eDAwMDA0MDAwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gMHgw
 MDAwMDAwNDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSAweDAw
 MDAwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gMHgwMDAw
 MDAwODsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IDB4MDAwMDgw
 MDA7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSAweDAwMDAyMDAw
 Ow0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gMHgwMDAwMDAyMDsN
 CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IDB4MDAwMDAwMTA7DQog
 ICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gPSAoMHgwMDAwNDAwMCB8IDB4
 MDAwMDAwMDQpOw0KICB9Ow0KIyA1NCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBfX2N0eXBl
 X2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGlj
 IGN0eXBlX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl
 ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz
 KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdA0KICAgICAgeyByZXR1
 cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9DQoNCiAgICAgIGNvbnN0IGNo
 YXJfdHlwZSoNCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29u
 c3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQ0K
 DQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICBzY2FuX2lzKG1hc2sg
 X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
 X19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMo
 X19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUq
 DQogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
 X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJl
 dHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9DQoN
 CiAgICAgIGNoYXJfdHlwZQ0KICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19j
 KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2Mp
 OyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHRvdXBwZXIo
 Y2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
 DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkp
 OyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgdG9sb3dlcihjaGFyX3R5
 cGUgX19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dl
 cihfX2MpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHRv
 bG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
 IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8s
 IF9faGkpOyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hh
 ciBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihf
 X2MpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXIqDQogICAgICB3aWRlbihjb25z
 dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9f
 dG8pIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xv
 LCBfX2hpLCBfX3RvKTsgfQ0KDQogICAgICBjaGFyDQogICAgICBuYXJyb3co
 Y2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QNCiAgICAgIHsg
 cmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQ0KDQog
 ICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICBuYXJyb3coY29uc3QgY2hh
 cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg
 ICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0DQogICAg
 ICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1
 bHQsIF9fdG8pOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNp
 dA0KICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMg
 PSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICB2aXJ0
 dWFsDQogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9DQoNCiAg
 ICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9faXMobWFzayBfX20sIGNoYXJf
 dHlwZSBfX2MpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBj
 aGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
 IGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgIG1hc2sqIF9f
 dmVjKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
 eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90
 eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
 IF9faGkpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFy
 X3R5cGUqDQogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hh
 cl90eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
 eXBlKiBfX2hpKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90
 eXBlDQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0K
 DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3Rv
 dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
 IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAg
 IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7DQoNCiAgICAgIHZp
 cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFy
 X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAw
 Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4o
 Y2hhcikgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
 DQogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy
 KiBfX2hpLA0KICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNv
 bnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyDQogICAgICBkb19uYXJy
 b3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7DQoNCiAg
 ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFycm93
 KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
 LA0KICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rl
 c3QpIGNvbnN0ID0gMDsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVf
 YWJzdHJhY3RfYmFzZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0K
 ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOw0KDQogICAgICBleHBsaWNp
 dA0KICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9h
 YnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0NCg0KICAgICAgc3Rh
 dGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgIHByb3RlY3RlZDoNCiAgICAgIHZp
 cnR1YWwNCiAgICAgIH5jdHlwZSgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGJv
 b2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCg0KICAgICAgdmlydHVhbCBj
 b25zdCBjaGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq
 IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv
 bnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1YWwg
 Y29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwg
 Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
 IGNvbnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1
 YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBf
 X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywNCiAgICAgICAgICAgICAgICAg
 IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJu
 IF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRv
 X3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJu
 IF9fYzsgfQ0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAg
 ICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
 cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAg
 ICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b2xvd2VyKGNoYXJf
 dHlwZSBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2M7IH0NCg0KICAg
 ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2Vy
 KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNo
 YXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0DQogICAg
 ICB7IHJldHVybiBjaGFyX3R5cGUoKTsgfQ0KDQogICAgICB2aXJ0dWFsIGNv
 bnN0IGNoYXIqDQogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBj
 b25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyDQog
 ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
 dA0KICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0NCg0KICAgICAgdmlydHVh
 bCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJyb3coY29uc3QgY2hh
 cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg
 ICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gX19oaTsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJU
 Pjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgY2xhc3MgY3R5cGU8Y2hh
 cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+DQogICAg
 ew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlw
 ZTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIGJvb2wgX01fZGVsOw0KICAg
 ICAgX190b190eXBlIGNvbnN0JiBfTV90b3VwcGVyOw0KICAgICAgX190b190
 eXBlIGNvbnN0JiBfTV90b2xvd2VyOw0KICAgICAgY29uc3QgbWFzayogY29u
 c3QmIF9NX2N0YWJsZTsNCiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOw0K
 DQogICAgcHVibGljOg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQog
 ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3Rh
 dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOw0KDQogICAgICBleHBsaWNp
 dA0KICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wg
 X19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgICBp
 bmxpbmUgYm9vbA0KICAgICAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z
 dDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNoYXIqDQogICAgICBpcyhjb25z
 dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykg
 Y29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgc2Nh
 bl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciog
 X19oaSkgY29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAg
 ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
 IGNoYXIqIF9faGkpIGNvbnN0Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg
 dmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIGNvbnN0IG1hc2sq
 DQogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJu
 IF9NX3RhYmxlOyB9DQoNCiAgICAgIGNvbnN0IG1hc2sqDQogICAgICBjbGFz
 c2ljX3RhYmxlKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fY3RhYmxl
 OyB9DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9faXMobWFzayBf
 X20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNv
 bnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSog
 X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u
 c3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAg
 ZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
 b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
 IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t
 LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBj
 b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
 IGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0
 Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRv
 X3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
 aGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAg
 ZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
 IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl
 KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAg
 ICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhcikgY29u
 c3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dp
 ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJf
 dHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyDQog
 ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
 dDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBk
 b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
 cGUqIF9faGksDQogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNo
 YXIqIF9fZGVzdCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQog
 ICAgY29uc3QgY3R5cGU8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PGN0eXBlPGNo
 YXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7DQojIDM5MiAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
 IiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z
 cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMN
 CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
 Yy1zdW4tc29sYXJpczIuNy9iaXRzL2N0eXBlX2lubGluZS5oIiAzDQogIGJv
 b2wNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhtYXNrIF9fbSwgY2hhciBfX2Mp
 IGNvbnN0DQogIHsgcmV0dXJuIF9NX3RhYmxlW19fY10gJiBfX207IH0NCg0K
 ICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIGlzKGNvbnN0IGNo
 YXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBj
 b25zdA0KICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQ0KICAgICAg
 Kl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107DQogICAgcmV0dXJuIF9f
 aGlnaDsNCiAgfQ0KDQogIGNvbnN0IGNoYXIqDQogIGN0eXBlPGNoYXI+OjoN
 CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0
 IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0KICAgIHdoaWxlIChfX2xvdyA8
 IF9faGlnaCAmJiAhKF9NX3RhYmxlWypfX2xvd10gJiBfX20pKQ0KICAgICAg
 KytfX2xvdzsNCiAgICByZXR1cm4gX19sb3c7DQogIH0NCg0KICBjb25zdCBj
 aGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNjYW5fbm90KG1hc2sgX19tLCBj
 b25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdA0K
 ICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoDQogICAgICAgICAgICYm
 IChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQ0KICAgICAgKytfX2xv
 dzsNCiAgICByZXR1cm4gX19sb3c7DQogIH0NCiMgMzkzICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgi
 IDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs
 YXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+DQogICAg
 ew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
 ZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlX2J5bmFtZShjb25z
 dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgcHJvdGVjdGVk
 Og0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfQ0K
 ICAgIH07DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgY3R5cGVfYnluYW1lPGNo
 YXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsN
 Cg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvY29kZWN2dC5oIiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMw0KIyAxNzMgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQu
 aCIgMw0KICBjbGFzcyBjb2RlY3Z0X2Jhc2UNCiAgew0KICBwdWJsaWM6DQog
 ICAgZW51bSByZXN1bHQNCiAgICB7DQogICAgICBvaywNCiAgICAgIHBhcnRp
 YWwsDQogICAgICBlcnJvciwNCiAgICAgIG5vY29udg0KICAgIH07DQogIH07
 DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
 ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3Mg
 X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UNCiAgICA6IHB1YmxpYyBsb2NhbGU6
 OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlDQogICAgew0KICAgIHB1Ymxp
 YzoNCg0KICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1
 bHQ7DQogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOw0KICAg
 ICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgX1N0YXRlVCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHJlc3VsdA0KICAg
 ICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl
 KiBfX2Zyb20sDQogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
 bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg
 ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2Vu
 ZCwNCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QN
 CiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRl
 LCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQp
 Ow0KICAgICAgfQ0KDQogICAgICByZXN1bHQNCiAgICAgIHVuc2hpZnQoc3Rh
 dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90
 eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf
 X3RvX25leHQpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNo
 aWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQ0KDQog
 ICAgICByZXN1bHQNCiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNv
 bnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICBjb25zdCBleHRl
 cm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
 b21fbmV4dCwNCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5f
 dHlwZSogX190b19lbmQsDQogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f
 bmV4dCkgY29uc3QNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmRv
 X2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwg
 X190b19uZXh0KTsNCiAgICAgIH0NCg0KICAgICAgaW50DQogICAgICBlbmNv
 ZGluZygpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
 X2VuY29kaW5nKCk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgYWx3YXlzX25v
 Y29udigpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
 X2Fsd2F5c19ub2NvbnYoKTsgfQ0KDQogICAgICBpbnQNCiAgICAgIGxlbmd0
 aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlw
 ZSogX19mcm9tLA0KICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBf
 X2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp
 cy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsg
 fQ0KDQogICAgICBpbnQNCiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJv
 dygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0N
 Cg0KICAgIHByb3RlY3RlZDoNCiAgICAgIGV4cGxpY2l0DQogICAgICBfX2Nv
 ZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
 bGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg
 IH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQ0KDQogICAgICB2aXJ0
 dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
 IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29u
 c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl
 KiYgX19mcm9tX25leHQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
 dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICBleHRl
 cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0
 dWFsIHJlc3VsdA0KICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0
 YXRlLCBleHRlcm5fdHlwZSogX190bywNCiAgICAgICAgICAgICAgICAgZXh0
 ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
 Y29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9f
 aW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
 ZnJvbSwNCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21f
 ZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAg
 ICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
 ZCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
 dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGlu
 ZygpIGNvbnN0IHRocm93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGJvb2wN
 CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsN
 Cg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2xlbmd0aChjb25zdCBz
 dGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAg
 ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf
 X21heCkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
 ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOw0KICAgIH07DQoN
 Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf
 RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0
 DQogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVy
 blQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoN
 CiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Ow0K
 ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsNCiAgICAgIHR5
 cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9T
 dGF0ZVQgc3RhdGVfdHlwZTsNCg0KDQogICAgICBzdGF0aWMgbG9jYWxlOjpp
 ZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvZGVjdnQoc2l6ZV90
 IF9fcmVmcyA9IDApDQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl
 PF9JbnRlcm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQ0KDQog
 ICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvZGVjdnQo
 KSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U
 LCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBs
 b2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVU
 Pjo6aWQ7DQojIDU5NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvY29kZWN2dC5oIiAzDQogIHRlbXBsYXRlPD4NCiAgICBjbGFz
 cyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4NCiAgICA6IHB1Ymxp
 YyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRl
 X3Q+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFy
 IGludGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBl
 Ow0KICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsNCg0KDQog
 ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQN
 CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgcHJv
 dGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvZGVjdnQoKTsNCg0K
 ICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX291dChzdGF0ZV90eXBl
 JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLA0KICAgICAg
 ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBp
 bnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAgICAgIGV4dGVy
 bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAg
 ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0Ow0KDQogICAg
 ICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBl
 JiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywNCiAgICAgICAgICAgICAg
 ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f
 bmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBk
 b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSog
 X19mcm9tLA0KICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv
 bV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg
 ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9f
 ZW5kLA0KICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
 bnN0Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZW5jb2Rpbmco
 KSBjb25zdCB0aHJvdygpOw0KDQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAg
 IGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOw0KDQogICAgICB2
 aXJ0dWFsIGludA0KICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm
 LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgICAgICAg
 IGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z
 dDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX21heF9sZW5ndGgo
 KSBjb25zdCB0aHJvdygpOw0KICB9Ow0KIyA3MDAgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMw0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5
 cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBw
 dWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+DQog
 ICAgew0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2Rl
 Y3Z0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApDQog
 ICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihf
 X3JlZnMpIHsgfQ0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAg
 ICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQojIDQxNiAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2Zh
 Y2V0cy5oIiAyIDMNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgX051bWVyaWNfZ2V0Ow0KDQoN
 Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xh
 c3MgX0Zvcm1hdF9jYWNoZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg
 IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hh
 cl90cmFpdHM8X0NoYXJUPiB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYg
 YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQogICAgICB0eXBl
 ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBl
 Ow0KDQoNCiAgICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7DQogICAgICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICAg
 ICAgZnJpZW5kIGNsYXNzIF9OdW1lcmljX2dldDsNCiAgICAgIGZyaWVuZCBj
 bGFzcyBudW1fZ2V0PF9DaGFyVD47DQogICAgICBmcmllbmQgY2xhc3MgbnVt
 X3B1dDxfQ2hhclQ+Ow0KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9D
 aGFyVD47DQogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0PF9DaGFyVD47
 DQogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ8X0NoYXJUPjsNCiAgICAg
 IGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0NoYXJUPjsNCg0KDQoNCg0KICAg
 ICAgc3RhdGljIGludCBfU19wd29yZF9peDsNCg0KDQoNCiAgICAgIGJvb2wg
 X01fdmFsaWQ7DQoNCg0KDQogICAgICBzdGF0aWMgY29uc3QgY2hhciBfU19s
 aXRlcmFsc1tdOw0KDQoNCg0KDQogICAgICBlbnVtDQogICAgICB7DQogICAg
 ICAgIF9TX21pbnVzLA0KICAgICAgICBfU19wbHVzLA0KICAgICAgICBfU194
 LA0KICAgICAgICBfU19YLA0KICAgICAgICBfU19kaWdpdHMsDQogICAgICAg
 IF9TX2RpZ2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwNCiAgICAgICAgX1Nf
 dWRpZ2l0cyA9IF9TX2RpZ2l0c19lbmQsDQogICAgICAgIF9TX3VkaWdpdHNf
 ZW5kID0gX1NfdWRpZ2l0cyArIDE2LA0KICAgICAgICBfU19lZSA9IF9TX2Rp
 Z2l0cyArIDE0LA0KICAgICAgICBfU19FZSA9IF9TX3VkaWdpdHMgKyAxNA0K
 ICAgICAgfTsNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxf
 cG9pbnQ7DQoNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5k
 c19zZXA7DQoNCg0KDQogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsN
 CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsNCg0KDQoNCiAgICAg
 IGJvb2wgX01fdXNlX2dyb3VwaW5nOw0KDQoNCg0KICAgICAgc3RyaW5nIF9N
 X2dyb3VwaW5nOw0KDQogICAgICBfRm9ybWF0X2NhY2hlKCk7DQoNCiAgICAg
 IH5fRm9ybWF0X2NhY2hlKCkgdGhyb3coKSB7IH0NCg0KDQoNCg0KICAgICAg
 c3RhdGljIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioNCiAgICAgIF9TX2dldChp
 b3NfYmFzZSYgX19pb3MpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9wb3B1
 bGF0ZShpb3NfYmFzZSYpOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAg
 X1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXZlbnQsIGlvc19iYXNl
 JiBfX2lvcywgaW50IF9faXgpIHRocm93KCk7DQogICAgfTsNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50IF9Gb3JtYXRfY2FjaGU8
 X0NoYXJUPjo6X1NfcHdvcmRfaXg7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJUPg0KICAgIGNvbnN0IGNoYXIgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+
 OjoNCiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVm
 MDEyMzQ1Njc4OUFCQ0RFRiI7DQoNCiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9j
 YWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgpOw0KDQoNCg0KDQoNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
 ICAgY2xhc3MgX051bWVyaWNfZ2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0K
 ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
 ZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCg0KDQogICAgICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQg
 Y2xhc3MgbnVtX2dldDsNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 LCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBjbGFzcyB0aW1l
 X2dldDsNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFt
 ZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ7DQog
 ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRl
 clQ+DQogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDsNCiAgICAgIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAg
 IGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsNCiAgICAgIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBj
 bGFzcyBtb25leV9wdXQ7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZXhwbGlj
 aXQNCiAgICAgIF9OdW1lcmljX2dldCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
 DQogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9DQoNCiAgICAgIGl0ZXJfdHlw
 ZQ0KICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90
 eXBlIF9fZW5kKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBjbGFzcyBudW1f
 Z2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAgICB7DQogICAgcHVibGlj
 Og0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0
 eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBjaGFy
 X3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7DQoNCiAgICAgIHN0YXRp
 YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVt
 X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
 cykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlw
 ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg
 ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
 LCBfX2VyciwgX192KTsgfQ0KDQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAg
 Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
 JiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
 c2hvcnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2lu
 LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90
 eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
 ZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
 dGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv
 X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KDQog
 ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
 cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3Nf
 YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
 dik7IH0NCiMgNjA3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgIGl0ZXJfdHlwZQ0K
 ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
 c19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
 X2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0N
 Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4s
 IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAg
 aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikg
 Y29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19p
 bywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBn
 ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
 IF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
 bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19n
 ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQojIDYyOSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
 X2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVy
 X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywN
 CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBf
 X3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQs
 IF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
 ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
 YXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
 ciwgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQo
 X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0
 ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
 X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjpp
 b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
 dik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl
 IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg
 ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
 LCBfX2VyciwgX192KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmly
 dHVhbCB+bnVtX2dldCgpIHsgfQ0KDQoNCg0KDQoNCiAgICAgIHZvaWQNCiAg
 ICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
 bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICBpb3NfYmFz
 ZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywNCiAgICAgICAgICAg
 ICAgICAgaW50JiBfX2Jhc2UsIGJvb2wgX19mcCA9IHRydWUpIGNvbnN0Ow0K
 DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJf
 dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
 JiwgYm9vbCYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
 DQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl
 JiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9ydCYpIGNvbnN0Ow0KICAgICAg
 dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGludCYp
 IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9f
 Z2V0IChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz
 ZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsNCg0KDQoNCg0KDQogICAgICB2
 aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl
 cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwN
 CiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
 dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmKSBjb25zdDsNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
 dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7DQoNCg0K
 DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChp
 dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z
 dGF0ZSYgX19lcnIsDQogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsNCg0K
 ICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5
 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
 X19lcnIsDQogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7DQoNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
 dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29uc3Q7DQoNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
 dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
 LA0KICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7DQogICAgfTsNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
 ICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOw0K
 DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PGNoYXIs
 IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPjo6DQogICAgX01fZXh0cmFj
 dChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLA0KICAgICAgICAg
 ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jh
 c2UmIF9faW8sDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
 X19lcnIsIGNoYXIqIF9feHRyYywNCiAgICAgICAgICAgICAgIGludCYgX19i
 YXNlLCBib29sIF9fZnApIGNvbnN0Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIF9O
 dW1lcmljX3B1dA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVm
 IF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0
 ZXJfdHlwZTsNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNpdA0KICAg
 ICAgX051bWVyaWNfcHV0KCkgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg
 IH5fTnVtZXJpY19wdXQoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgY2xhc3Mg
 bnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1
 YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg
 ICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRp
 YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVt
 X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
 cykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlw
 ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wg
 X192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBf
 X2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQo
 aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls
 bCwgbG9uZyBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19wdXQoX19z
 LCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAg
 ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5
 cGUgX19maWxsLA0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z
 dA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
 dik7IH0NCiMgNzczICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgIGl0ZXJfdHlwZQ0K
 ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf
 dHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgICB7IHJldHVy
 biBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBp
 dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
 X19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIGxvbmcgZG91Ymxl
 IF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwg
 X19maWxsLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0
 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
 bGwsDQogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAgICAg
 eyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0K
 ICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1fcHV0
 KCkgeyB9Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9f
 cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBi
 b29sIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQog
 ICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf
 X2ZpbGwsIGxvbmcgX192KSBjb25zdDsNCg0KDQoNCg0KDQoNCiAgICAgIHZp
 cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
 YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0
 Ow0KDQoNCg0KDQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAg
 IGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmls
 bCwgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90
 eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
 dHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBp
 b3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikg
 Y29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9wdXQ8
 X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVD4NCiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6
 OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf
 Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
 X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6
 aWQgaWQ7DQoNCiAgICBwcml2YXRlOg0KICAgICAgY2hhcl90eXBlIF9NX2Rl
 Y2ltYWxfcG9pbnQ7DQogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3Nl
 cDsNCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsNCiAgICAgIHN0cmluZ190
 eXBlIF9NX3RydWVuYW1lOw0KICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2Vu
 YW1lOw0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51
 bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y
 ZWZzKQ0KICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0NCg0K
 ICAgICAgZXhwbGljaXQNCiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19j
 bG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
 cykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9
 DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNv
 bnN0DQogICAgICB7IHJldHVybiBkb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K
 ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIGRvX3Rob3VzYW5kc19zZXAoKTsgfQ0KDQogICAg
 ICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIGRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAg
 ICAgIHRydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3RydWVu
 YW1lKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIGZhbHNlbmFt
 ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19mYWxzZW5hbWUoKTsgfQ0K
 DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1
 bmN0KCkgeyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBk
 b19kZWNpbWFsX3BvaW50KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2Rl
 Y2ltYWxfcG9pbnQ7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAg
 ICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4g
 X01fdGhvdXNhbmRzX3NlcDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZw0K
 ICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f
 Z3JvdXBpbmc7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAg
 ICAgZG9fdHJ1ZW5hbWUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdHJ1
 ZW5hbWU7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAg
 ZG9fZmFsc2VuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNl
 bmFtZTsgfQ0KDQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2luaXRpYWxpemVf
 bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOw0KICAgIH07
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6
 aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBudW1wdW5jdDxfQ2hhclQ+Ojpf
 TV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQ0KICAgIHsNCg0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bXB1bmN0
 PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j
 bG9jKTsNCg0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+DQogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1
 bmN0PF9DaGFyVD4NCiAgICB7DQogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j
 YWxlX251bXB1bmN0Ow0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0No
 YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
 aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBu
 dW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz
 ID0gMCkNCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpDQogICAg
 ICB7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u
 dW1wdW5jdCwgX19zKTsNCiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5j
 dChfTV9jX2xvY2FsZV9udW1wdW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90
 ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bnVtcHVuY3RfYnluYW1l
 KCkNCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u
 dW1wdW5jdCk7IH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJUPg0KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpm
 YWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0No
 YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
 aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
 IGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgY29sbGF0ZShzaXplX3Qg
 X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAg
 ICAgIGludA0KICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBj
 b25zdCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hh
 clQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShfX2xvMSwgX19oaTEsIF9fbG8y
 LCBfX2hpMik7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIHRyYW5z
 Zm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
 Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xv
 LCBfX2hpKTsgfQ0KDQogICAgICBsb25nDQogICAgICBoYXNoKGNvbnN0IF9D
 aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQ0KDQogIHBy
 b3RlY3RlZDoNCiAgICAgIH5jb2xsYXRlKCkgeyB9DQoNCiAgICAgIHZpcnR1
 YWwgaW50DQogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEs
 IGNvbnN0IF9DaGFyVCogX19oaTEsDQogICAgICAgICAgICAgICAgIGNvbnN0
 IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0Ow0K
 DQogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlDQogICAgICBkb190cmFuc2Zv
 cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv
 bnN0Ow0KDQogICAgICB2aXJ0dWFsIGxvbmcNCiAgICAgIGRvX2hhc2goY29u
 c3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0Ow0K
 ICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxv
 Y2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsNCg0KDQogIHRlbXBsYXRl
 PD4NCiAgICBpbnQNCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19jb21wYXJlKGNv
 bnN0IGNoYXIqIF9fbG8xLCBjb25zdCBjaGFyKiBfX2hpMSwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25z
 dCBjaGFyKiBfX2hpMikgY29uc3Q7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0
 cmluZw0KICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBj
 aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsNCg0KICB0ZW1w
 bGF0ZTw+DQogICAgbG9uZw0KICAgIGNvbGxhdGU8Y2hhcj46OmRvX2hhc2go
 Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoj
 IDEwMTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+DQogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0
 ZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRl
 ZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
 bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAg
 ICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZz
 ID0gMCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAg
 ICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRl
 PD4NCiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUo
 Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOw0KDQoNCg0KDQoNCiAgY2xh
 c3MgdGltZV9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVudW0gZGF0ZW9y
 ZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9Ow0KICB9Ow0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
 cj4NCiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
 LCBwdWJsaWMgdGltZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAg
 ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf
 SW5JdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
 aWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICB0aW1lX2dldChzaXplX3Qg
 X19yZWZzID0gMCkNCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwg
 X01fZGF5bmFtZXMoMCksIF9NX21vbnRobmFtZXMoMCkgeyB9DQoNCiAgICAg
 IGRhdGVvcmRlcg0KICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0DQogICAgICB7
 IHJldHVybiBkb19kYXRlX29yZGVyKCk7IH0NCg0KICAgICAgaXRlcl90eXBl
 DQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
 bmQsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVy
 biBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJyLCBfX3QpOyB9
 DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0X2RhdGUoaXRlcl90eXBl
 IF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLA0KICAgICAg
 ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwg
 X19mLCBfX2VyciwgX190KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAg
 IGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg
 aW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
 b3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
 IGRvX2dldF93ZWVrZGF5KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0K
 DQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90
 eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLA0KICAg
 ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
 KiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXRfbW9udGhuYW1l
 KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0KDQogICAgICBpdGVyX3R5
 cGUNCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf
 X2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgICAgIGlvc19iYXNl
 Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0K
 DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfnRpbWVf
 Z2V0KCkNCiAgICAgIHsNCiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFt
 ZXM7DQogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXluYW1lczsNCiAgICAgIH0N
 Cg0KICAgICAgdmlydHVhbCBkYXRlb3JkZXINCiAgICAgIGRvX2RhdGVfb3Jk
 ZXIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0N
 Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF90aW1l
 KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwNCiAgICAg
 ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0
 DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAgICAgdmlydHVhbCBpdGVy
 X3R5cGUNCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf
 dHlwZSAsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
 Ojppb3N0YXRlJiAsIHRtKiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7
 IH0NCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF93
 ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
 c2UmLA0KICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
 IF9fZXJyLCB0bSogX190KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVy
 X3R5cGUNCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywg
 aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAg
 ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u
 c3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRf
 eWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsDQog
 ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkg
 Y29uc3QNCiAgICAgIHsgcmV0dXJuIF9fczsgfQ0KDQogICAgICBtdXRhYmxl
 IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9kYXluYW1lczsNCiAgICAgIG11
 dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX21vbnRobmFtZXM7DQog
 ICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9Jbkl0ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9J
 bkl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDog
 cHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4NCiAgICB7DQogICAg
 cHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg
 ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhwbGlj
 aXQNCiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
 IF9fcmVmcyA9IDApDQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
 cj4oX19yZWZzKSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs
 DQogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0K
 ICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
 YmxpYyB0aW1lX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlw
 ZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRl
 ciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
 DQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVm
 cyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0NCg0KDQogICAg
 ICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
 ZSYgLCBjaGFyX3R5cGUgLA0KICAgICAgICAgIGNvbnN0IHRtKiAsIGNvbnN0
 IF9DaGFyVCogLA0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogKSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
 ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
 ZSBfX2ZpbGwsDQogICAgICAgICAgY29uc3QgdG0qIF9fdG1iLCBjaGFyIF9f
 Zm9ybWF0LCBjaGFyIF9fbW9kaWZpZXIgPSAwKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBfX2Zvcm1h
 dCwgX19tb2RpZmllcik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZp
 cnR1YWwNCiAgICAgIH50aW1lX3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
 IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
 YXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLA0KICAgICAgICAgICAgIGNo
 YXIgLCBjaGFyICkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9fczsgfQ0KICAg
 IH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 T3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091
 dEl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6
 IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPg0KICAgIHsNCiAg
 ICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQog
 ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhw
 bGljaXQNCiAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6
 ZV90IF9fcmVmcyA9IDApDQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091
 dEl0ZXI+IChfX3JlZnMpIHsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg
 dmlydHVhbA0KICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQ0KICAgIH07
 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
 bkl0ZXI+DQogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6
 ZmFjZXQNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hh
 clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw
 ZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
 X3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAg
 ICBleHBsaWNpdA0KICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAw
 KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90
 eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
 LCBib29sIF9faW50bCwNCiAgICAgICAgICBpb3NfYmFzZSYgX19mLCBpb3Nf
 YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50
 bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0NCg0KICAgICAgaXRlcl90eXBl
 DQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBi
 b29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgaW9zX2Jh
 c2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNv
 bnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRs
 LCBfX2YsIF9fZXJyLCBfX2RpZ2l0cyk7IH0NCg0KICAgIHByb3RlY3RlZDoN
 CiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leV9nZXQoKSB7IH0NCg0KICAg
 ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUg
 X19zLCBpdGVyX3R5cGUgLCBib29sICwNCiAgICAgICAgICAgICBpb3NfYmFz
 ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLA0KICAgICAgICAgICAgIGxvbmcg
 ZG91YmxlJiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAg
 ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUg
 X19zLCBpdGVyX3R5cGUgLCBib29sICwNCiAgICAgICAgICAgICBpb3NfYmFz
 ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLA0KICAgICAgICAgICAgIHN0cmlu
 Z190eXBlJiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCiAgICB9
 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
 SXRlcj4NCiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0
 ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBs
 b2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVk
 ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX091dEl0ZXIg
 aXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
 PiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
 DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtb25leV9wdXQoc2l6ZV90IF9f
 cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAg
 ICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9f
 aW50bCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICBjaGFyX3R5cGUgX19m
 aWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdA0KICAgICAgeyByZXR1
 cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX191bml0cyk7
 IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9f
 cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgY2hh
 cl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2Ys
 IF9fZmlsbCwgX19kaWdpdHMpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg
 ICB2aXJ0dWFsDQogICAgICB+bW9uZXlfcHV0KCkgeyB9DQoNCiAgICAgIHZp
 cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
 Ym9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwNCiAgICAgICAgICAgICBs
 b25nIGRvdWJsZSApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0K
 ICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5
 cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLA0KICAgICAg
 ICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0DQogICAgICB7IHJl
 dHVybiBfX3M7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBtb25l
 eV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHN0cnVjdCBtb25l
 eV9iYXNlDQogIHsNCiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3lt
 Ym9sLCBzaWduLCB2YWx1ZSB9Ow0KICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hh
 ciBmaWVsZFs0XTsgfTsNCg0KICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9T
 X2RlZmF1bHRfcGF0dGVybjsNCg0KDQoNCiAgICBzdGF0aWMgcGF0dGVybg0K
 ICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hh
 ciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7DQogIH07DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNsYXNzIG1vbmV5
 cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jh
 c2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFy
 VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
 clQ+IHN0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 bnRsID0gX0ludGw7DQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0K
 ICAgIHByaXZhdGU6DQogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2lu
 dDsNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOw0KICAgICAg
 c3RyaW5nIF9NX2dyb3VwaW5nOw0KICAgICAgc3RyaW5nX3R5cGUgX01fY3Vy
 cl9zeW1ib2w7DQogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWdu
 Ow0KICAgICAgc3RyaW5nX3R5cGUgX01fbmVnYXRpdmVfc2lnbjsNCiAgICAg
 IGludCBfTV9mcmFjX2RpZ2l0czsNCiAgICAgIHBhdHRlcm4gX01fcG9zX2Zv
 cm1hdDsNCiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsNCg0KICAgIHB1
 YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtb25leXB1bmN0KHNpemVf
 dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAg
 eyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQ0KDQogICAgICBleHBs
 aWNpdA0KICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6
 ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQogICAg
 ICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MpOyB9DQoNCiAg
 ICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0DQog
 ICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K
 ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQ0K
 DQogICAgICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3Ry
 aW5nX3R5cGUNCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QNCiAgICAgIHsg
 cmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0NCg0KICAgICAgc3Ry
 aW5nX3R5cGUNCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9DQoNCiAgICAg
 IHN0cmluZ190eXBlDQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQ0KDQog
 ICAgICBpbnQNCiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QNCiAgICAgIHsg
 cmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0NCg0KICAgICAgcGF0
 dGVybg0KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVy
 biB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0NCg0KICAgICAgcGF0dGVybg0K
 ICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
 LT5kb19uZWdfZm9ybWF0KCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAg
 IHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0KCkgeyB9DQoNCiAgICAgIHZp
 cnR1YWwgY2hhcl90eXBlDQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29u
 c3QNCiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0NCg0KICAg
 ICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rob3VzYW5kc19zZXAo
 KSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQ0K
 DQogICAgICB2aXJ0dWFsIHN0cmluZw0KICAgICAgZG9fZ3JvdXBpbmcoKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0NCg0KICAgICAg
 dmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fY3Vycl9zeW1ib2woKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0NCg0KICAg
 ICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fcG9zaXRpdmVfc2ln
 bigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9
 DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX25lZ2F0
 aXZlX3NpZ24oKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVf
 c2lnbjsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZnJhY19k
 aWdpdHMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7
 IH0NCg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19wb3NfZm9y
 bWF0KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0N
 Cg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19uZWdfZm9ybWF0
 KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0NCg0K
 DQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo
 X19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOw0KICAgIH07DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGxvY2Fs
 ZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNvbnN0
 IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+DQogICAgdm9p
 ZA0KICAgIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxp
 emVfbW9uZXlwdW5jdChfX2NfbG9jYWxlICkNCiAgICB7DQoNCiAgICB9DQoN
 CiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBtb25leXB1bmN0PGNoYXI+
 OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mp
 Ow0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
 b2wgX0ludGw+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJs
 aWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPg0KICAgIHsNCiAgICAgIF9f
 Y19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsNCiAgICBwdWJsaWM6
 DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl
 ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KDQogICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7DQoNCiAgICAgIGV4
 cGxpY2l0DQogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBf
 X3MsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBtb25leXB1bmN0PF9D
 aGFyVCwgX0ludGw+KF9fcmVmcykNCiAgICAgIHsNCiAgICAgICAgX1NfY3Jl
 YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7DQog
 ICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9t
 b25leXB1bmN0KTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAg
 IHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpDQogICAgICB7
 IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7
 IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9v
 bCBfSW50bD4NCiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9D
 aGFyVCwgX0ludGw+OjppbnRsOw0KDQoNCiAgc3RydWN0IG1lc3NhZ2VzX2Jh
 c2UNCiAgew0KICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7DQogIH07DQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2Vz
 IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNl
 DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
 YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
 c3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
 DQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVm
 cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBj
 YXRhbG9nDQogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYg
 X19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdA0KICAgICAgeyByZXR1
 cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQ0KDQogICAgICBzdHJpbmdfdHlw
 ZQ0KICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21z
 Z2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gZG9fZ2V0KF9fYyxfX3NldCxfX21zZ2lkLF9fcyk7IH0NCg0KICAg
 ICAgdm9pZA0KICAgICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0DQogICAg
 ICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6
 DQogICAgICB2aXJ0dWFsDQogICAgICB+bWVzc2FnZXMoKSB7IH0NCg0KDQoN
 CiAgICAgIHZpcnR1YWwgY2F0YWxvZw0KICAgICAgZG9fb3Blbihjb25zdCBi
 YXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdA0KICAg
 ICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl
 DQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJp
 bmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2Rm
 YXVsdDsgfQ0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGRvX2Nsb3Nl
 KGNhdGFsb2cpIGNvbnN0IHsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJU
 Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs
 YXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+
 DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
 YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
 c3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtZXNzYWdl
 c19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0K
 ICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdl
 c19ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBt
 ZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBj
 aGFyKiwgc2l6ZV90IF9fcmVmcyk7DQojIDE1MzIgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wN
 CiAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
 DQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
 YykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0NCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3By
 aW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyBy
 ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5
 cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2NudHJsKF9DaGFy
 VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNl
 X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
 Y250cmwsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
 DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNv
 bnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9f
 Yyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5s
 aW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f
 bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
 X19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAg
 aXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg
 IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
 KGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNkaWdpdChf
 Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu
 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
 c2U6OmRpZ2l0LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwdW5jdChfQ2hhclQgX19j
 LCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNl
 dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0
 LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg
 IGlubGluZSBib29sDQogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3Qg
 bG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
 X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5l
 IGJvb2wNCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
 X19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
 PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg
 ICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQog
 ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
 aXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBw
 ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJl
 dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVy
 KF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
 aW5saW5lIF9DaGFyVA0KICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3Qg
 bG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
 X0NoYXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0NCn0NCiMgMzcgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv
 cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBi
 YXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UNCiAgICB7DQogICAgcHVibGlj
 Og0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0
 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0K
 ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3Nf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
 cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
 cGU7DQoNCg0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
 clQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRl
 ZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0
 X3R5cGU7DQogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
 YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVk
 ZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdl
 dF90eXBlOw0KDQoNCiAgICBwcml2YXRlOg0KICAgICAgYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7DQogICAgICBjaGFyX3R5cGUg
 X01fZmlsbDsNCiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOw0KDQogICAg
 cHJvdGVjdGVkOg0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
 YWl0cz4qIF9NX3N0cmVhbWJ1ZjsNCiAgICAgIGlvc3RhdGUgX01fc3RyZWFt
 YnVmX3N0YXRlOw0KDQoNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01f
 aW9zX2ZjdHlwZTsNCg0KICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01f
 Zm51bXB1dDsNCg0KICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51
 bWdldDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZSBjb25zdCBfX2N0
 eXBlX3R5cGUqDQogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQ0KICAg
 ICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZTsgfQ0KDQogICAgICBvcGVyYXRv
 ciB2b2lkKigpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkg
 PyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQ0KDQogICAg
 ICBpbmxpbmUgYm9vbA0KICAgICAgb3BlcmF0b3IhKCkgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQ0KDQogICAgICBpbmxpbmUgaW9z
 dGF0ZQ0KICAgICAgcmRzdGF0ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBf
 TV9zdHJlYW1idWZfc3RhdGU7IH0NCg0KICAgICAgaW5saW5lIHZvaWQNCiAg
 ICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpDQogICAgICB7
 DQogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQ0KICAgICAgICAgIF9NX3N0
 cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7DQogICAgICAgIGVsc2UNCiAgICAg
 ICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0Ow0K
 ICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlv
 bnMoKSkpDQogICAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNf
 aW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7DQogICAg
 ICB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBzZXRzdGF0ZShpb3N0
 YXRlIF9fc3RhdGUpDQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3Rh
 dGUoKSB8IF9fc3RhdGUpOyB9DQoNCiAgICAgIGlubGluZSBib29sDQogICAg
 ICBnb29kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUo
 KSA9PSAwOyB9DQoNCiAgICAgIGlubGluZSBib29sDQogICAgICBlb2YoKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp
 dCkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZmFpbCgp
 IGNvbnN0DQogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJh
 ZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9DQoNCiAgICAgIGlubGluZSBib29s
 DQogICAgICBiYWQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJk
 c3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgaW9z
 dGF0ZQ0KICAgICAgZXhjZXB0aW9ucygpIGNvbnN0DQogICAgICB7IHJldHVy
 biBfTV9leGNlcHRpb247IH0NCg0KICAgICAgaW5saW5lIHZvaWQNCiAgICAg
 IGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkNCiAgICAgIHsNCiAgICAg
 ICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7DQogICAgICAgIHRoaXMtPmNs
 ZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7DQogICAgICB9DQoNCg0KICAgICAg
 ZXhwbGljaXQNCiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0No
 YXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpDQogICAgICB7IHRo
 aXMtPmluaXQoX19zYik7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJh
 c2ljX2lvcygpIHsgfQ0KDQoNCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFt
 PF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gX01fdGllOyB9DQoNCiAgICAgIGlubGluZSBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikNCiAgICAgIHsNCiAgICAg
 ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9N
 X3RpZTsNCiAgICAgICAgX01fdGllID0gX190aWVzdHI7DQogICAgICAgIHJl
 dHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAgaW5saW5lIGJhc2ljX3N0
 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgcmRidWYoKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9DQoNCiAgICAgIGJh
 c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgcmRidWYo
 YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOw0KDQog
 ICAgICBiYXNpY19pb3MmDQogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lv
 cyYgX19yaHMpOw0KDQogICAgICBpbmxpbmUgY2hhcl90eXBlDQogICAgICBm
 aWxsKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZpbGw7IH0NCg0KICAg
 ICAgaW5saW5lIGNoYXJfdHlwZQ0KICAgICAgZmlsbChjaGFyX3R5cGUgX19j
 aCkNCiAgICAgIHsNCiAgICAgICAgY2hhcl90eXBlIF9fb2xkID0gX01fZmls
 bDsNCiAgICAgICAgX01fZmlsbCA9IF9fY2g7DQogICAgICAgIHJldHVybiBf
 X29sZDsNCiAgICAgIH0NCg0KDQogICAgICBsb2NhbGUNCiAgICAgIGltYnVl
 KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICBjaGFyDQogICAgICBu
 YXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoN
 CiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0
 Ow0KDQogICAgcHJvdGVjdGVkOg0KDQogICAgICBiYXNpY19pb3MoKSA6IGlv
 c19iYXNlKCkNCiAgICAgIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbml0
 KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0K
 ICAgICAgYm9vbA0KICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxl
 OjpmYWNldCogX19mKQ0KICAgICAgew0KICAgICAgICBib29sIF9fcmV0ID0g
 ZmFsc2U7DQogICAgICAgIGlmIChfX2YpDQogICAgICAgICAgX19yZXQgPSB0
 cnVlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgX190aHJvd19iYWRfY2Fz
 dCgpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAg
 IHZvaWQNCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9f
 bG9jKTsNCiAgICB9Ow0KfQ0KDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMNCiMg
 MzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh
 c2ljX2lvcy50Y2MiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
 X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgIGJhc2ljX2lvczxf
 Q2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU
 LCBfVHJhaXRzPiogX19zYikNCiAgICB7DQogICAgICBiYXNpY19zdHJlYW1i
 dWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7DQog
 ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgdGhpcy0+Y2xlYXIo
 KTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
 X2lvczxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lvczxfQ2hhclQs
 IF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpDQog
 ICAgew0KDQoNCg0KDQogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMu
 X01fd29yZF9saW1pdCA8PSBfU19sb2NhbF93b3JkcykgPw0KICAgICAgICBf
 TV93b3JkX2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX2xpbWl0
 XTsNCiMgNjMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2Jhc2ljX2lvcy50Y2MiIDMNCiAgICAgIF9DYWxsYmFja19saXN0KiBf
 X2NiID0gX19yaHMuX01fY2FsbGJhY2tzOw0KICAgICAgaWYgKF9fY2IpDQog
 ICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsNCiAgICAgIF9NX2Nh
 bGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsNCiAgICAgIGlmIChfTV93b3Jk
 cyAhPSBfTV93b3JkX2FycmF5KQ0KICAgICAgICBkZWxldGUgW10gX01fd29y
 ZHM7DQogICAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOw0KDQogICAgICBf
 TV9jYWxsYmFja3MgPSBfX2NiOw0KICAgICAgZm9yIChpbnQgX19pID0gMDsg
 X19pIDwgX19yaHMuX01fd29yZF9saW1pdDsgKytfX2kpDQogICAgICAgIF9f
 d29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07DQogICAgICBpZiAo
 X01fd29yZHMgIT0gX01fd29yZF9hcnJheSkNCiAgICAgICAgZGVsZXRlIFtd
 IF9NX3dvcmRzOw0KICAgICAgX01fd29yZHMgPSBfX3dvcmRzOw0KICAgICAg
 X01fd29yZF9saW1pdCA9IF9fcmhzLl9NX3dvcmRfbGltaXQ7DQoNCiAgICAg
 IHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOw0KICAgICAgdGhpcy0+d2lk
 dGgoX19yaHMud2lkdGgoKSk7DQogICAgICB0aGlzLT5wcmVjaXNpb24oX19y
 aHMucHJlY2lzaW9uKCkpOw0KICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgp
 KTsNCiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsNCg0KICAgICAg
 dGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOw0KDQogICAg
 ICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsNCiAgICAgIHJl
 dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNoYXINCiAgICBiYXNpY19p
 b3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNo
 YXIgX19kZmF1bHQpIGNvbnN0DQogICAgeyByZXR1cm4gX01faW9zX2ZjdHlw
 ZS0+bmFycm93KF9fYywgX19kZmF1bHQpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIF9DaGFyVA0K
 ICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9f
 YykgY29uc3QNCiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT53aWRlbihf
 X2MpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHM+DQogICAgbG9jYWxlDQogICAgYmFzaWNfaW9zPF9DaGFy
 VCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAg
 ew0KICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsNCiAgICAg
 IGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7DQogICAgICBfTV9jYWNoZV9mYWNl
 dHMoX19sb2MpOw0KICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkNCiAg
 ICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOw0KICAgICAg
 cmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9pZA0KICAgIGJhc2lj
 X2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1Zjxf
 Q2hhclQsIF9UcmFpdHM+KiBfX3NiKQ0KICAgIHsNCg0KICAgICAgaW9zX2Jh
 c2U6Ol9NX2luaXQoKTsNCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3Nf
 bG9jYWxlKTsNCiAgICAgIF9NX3RpZSA9IDA7DQogICAgICBfTV9maWxsID0g
 dGhpcy0+d2lkZW4oJyAnKTsNCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2Ri
 aXQ7DQogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgX01fc3Ry
 ZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
 cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg
 IHsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykp
 DQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVf
 dHlwZT4oX19sb2MpOw0KDQogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0
 X3R5cGU+KF9fbG9jKSkNCiAgICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFj
 ZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOw0KICAgICAgaWYgKGhhc19mYWNl
 dDxfX251bWdldF90eXBlPihfX2xvYykpDQogICAgICAgIF9NX2ZudW1nZXQg
 PSAmdXNlX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsNCiAgICB9DQp9
 DQojIDIxNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvYmFzaWNfaW9zLmgiIDIgMw0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMNCiMgNDAgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry
 ZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
 IGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0No
 YXJULCBfVHJhaXRzPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCg0KICAgICAg
 dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
 bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAg
 ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBl
 Ow0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAg
 ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
 X19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9D
 aGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz
 aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0K
 ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
 YWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9w
 dXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsN
 CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7DQoN
 Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJl
 YW1idWZfdHlwZSogX19zYikNCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsg
 fQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsg
 fQ0KDQoNCiAgICAgIGNsYXNzIHNlbnRyeTsNCiAgICAgIGZyaWVuZCBjbGFz
 cyBzZW50cnk7DQoNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg
 IG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFt
 X3R5cGUmKSk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl
 cmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7DQoN
 CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChpb3Nf
 YmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7DQoNCg0KICAgICAgX19vc3Ry
 ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsNCg0KICAg
 ICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk
 IGxvbmcgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBv
 cGVyYXRvcjw8KGJvb2wgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
 DQogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikNCiAgICAgIHsNCiAgICAg
 ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAm
 IGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAgIGlmIChfX2ZtdCAmIGlv
 c19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQ0KICAgICAg
 ICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln
 bmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7DQogICAgICAg
 IGVsc2UNCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0
 aWNfY2FzdDxsb25nPihfX24pKTsNCiAgICAgIH0NCg0KICAgICAgX19vc3Ry
 ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9f
 bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
 c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCg0KICAgICAgX19vc3RyZWFt
 X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGludCBfX24pDQogICAgICB7DQog
 ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
 KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgICBpZiAoX19mbXQg
 JiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkNCiAg
 ICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1
 bnNpZ25lZCBsb25nPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsNCiAgICAg
 ICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
 YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQogICAgICBfX29z
 dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9f
 bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
 c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCiMgMTM1ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAz
 DQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoZG91
 YmxlIF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl
 cmF0b3I8PChmbG9hdCBfX2YpDQogICAgICB7IHJldHVybiB0aGlzLT5vcGVy
 YXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0NCg0KICAgICAg
 X19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl
 IF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0
 b3I8PChjb25zdCB2b2lkKiBfX3ApOw0KDQogICAgICBfX29zdHJlYW1fdHlw
 ZSYNCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7
 DQoNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBwdXQoY2hhcl90
 eXBlIF9fYyk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgd3Jp
 dGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0K
 ICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBmbHVzaCgpOw0KDQoNCiAg
 ICAgIHBvc190eXBlDQogICAgICB0ZWxscCgpOw0KDQogICAgICBfX29zdHJl
 YW1fdHlwZSYNCiAgICAgIHNlZWtwKHBvc190eXBlKTsNCg0KICAgICAgX19v
 c3RyZWFtX3R5cGUmDQogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6
 OnNlZWtkaXIpOw0KDQogICAgcHJpdmF0ZToNCg0KDQogICAgICBfX29zdHJl
 YW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX29zdHJlYW1fdHlw
 ZSYpOw0KDQogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90
 eXBlJik7DQoNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsNCg0KICAgICAg
 Ym9vbCBfTV9vazsNCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFp
 dHM+JiBfTV9vczsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQog
 ICAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9f
 b3MpOw0KDQogICAgICB+c2VudHJ5KCkNCiAgICAgIHsNCg0KICAgICAgICBp
 ZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNh
 dWdodF9leGNlcHRpb24oKSkNCiAgICAgICAgICB7DQoNCiAgICAgICAgICAg
 IGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMo
 KSA9PSAtMSkNCiAgICAgICAgICAgICAgX01fb3Muc2V0c3RhdGUoaW9zX2Jh
 c2U6OmJhZGJpdCk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICBv
 cGVyYXRvciBib29sKCkNCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9DQogICAg
 fTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
 ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 JiBfX291dCwgX0NoYXJUIF9fYyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsg
 cmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQ0KDQoNCiAg
 dGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxj
 aGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
 Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7DQoNCg0KICB0ZW1w
 bGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
 X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIs
 IF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQ0KICAgIHsgcmV0
 dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQ0KDQog
 IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxj
 aGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
 Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykNCiAg
 ICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
 ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOw0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19v
 c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJg0KICAgIG9wZXJhdG9yPDwoYmFz
 aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh
 ciogX19zKTsNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg
 YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8
 KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBj
 aGFyKiBfX3MpOw0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAg
 ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9y
 PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0
 IHNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJl
 aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9DQoNCiAgdGVt
 cGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIs
 IF9UcmFpdHM+ICYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh
 ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX3Mp
 DQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
 c3QgY2hhcio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGVuZGwoYmFzaWNfb3N0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+JiBfX29zKQ0KICAgIHsgcmV0dXJuIGZsdXNoKF9fb3Mu
 cHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZW5kcyhiYXNpY19vc3RyZWFt
 PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4gX19vcy5w
 dXQoX0NoYXJUKCkpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPiYNCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9
 DQoNCn0NCg0KDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMSAzDQojIDMyICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg
 Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfbG9jYWxlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAzDQoNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
 ZndkLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
 IiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAx
 IDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMSAzDQoj
 IDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfY2Vycm5vLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEg
 MyA0DQojIDExICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0DQojcHJhZ21h
 IGlkZW50ICJAKCMpZXJybm8uaAkxLjE1CTk4LzAzLzAyIFNNSSINCg0KDQoN
 Cg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMSAzIDQNCiMg
 MTEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0DQojcHJhZ21hIGlk
 ZW50ICJAKCMpZXJybm8uaAkxLjE5CTk4LzAxLzE0IFNNSSINCiMgMzUgIi91
 c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0DQpleHRlcm4gIkMiIHsNCiMg
 MTkxICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDMgNA0KfQ0KIyAxOCAi
 L3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7
 DQojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0DQpleHRlcm4gaW50
 ICpfX19lcnJubygpOw0KDQoNCg0KDQoNCg0KfQ0KIyAzOSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAy
 IDMNCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAz
 DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfY2xvY2FsZS5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUu
 aCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQNCiNw
 cmFnbWEgaWRlbnQgIkAoIylsb2NhbGUuaAkxLjE4CTk4LzAxLzIyIFNNSSIN
 CiMgNDYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0DQojIDEgIi91c3Iv
 aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyA0NyAiL3Vz
 ci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMgNA0KDQoNCg0KDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0DQojIDIwICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvbGliaW50bC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAo
 IylsaWJpbnRsLmgJMS4xMgk5Ny8wOC8yMCBTTUkiDQoNCiMgMSAiL3Vzci9p
 bmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyMyAiL2hvbWUvbWRl
 aWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMu
 MC9pbmNsdWRlL2xpYmludGwuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN
 CiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
 dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDMgNA0KZXh0
 ZXJuIGNoYXIgKmRjZ2V0dGV4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
 KiwgY29uc3QgaW50KTsNCmV4dGVybiBjaGFyICpkZ2V0dGV4dChjb25zdCBj
 aGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0dGV4dChj
 b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnRleHRkb21haW4oY29uc3Qg
 Y2hhciAqKTsNCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbihjb25zdCBj
 aGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gaW50IHdkaW5p
 dCh2b2lkKTsNCmV4dGVybiBpbnQgd2RjaGtpbmQod2NoYXJfdCk7DQpleHRl
 cm4gaW50IHdkYmluZGYod2NoYXJfdCwgd2NoYXJfdCwgaW50KTsNCmV4dGVy
 biB3Y2hhcl90ICp3ZGRlbGltKHdjaGFyX3QsIHdjaGFyX3QsIGludCk7DQpl
 eHRlcm4gd2NoYXJfdCBtY2ZpbGxlcih2b2lkKTsNCmV4dGVybiBpbnQgbWN3
 cmFwKHZvaWQpOw0KIyA3OCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt
 bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpYmludGwu
 aCIgMyA0DQp9DQojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0
 DQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQpzdHJ1Y3QgbGNvbnYgew0KICAg
 ICAgICBjaGFyICpkZWNpbWFsX3BvaW50Ow0KICAgICAgICBjaGFyICp0aG91
 c2FuZHNfc2VwOw0KICAgICAgICBjaGFyICpncm91cGluZzsNCiAgICAgICAg
 Y2hhciAqaW50X2N1cnJfc3ltYm9sOw0KICAgICAgICBjaGFyICpjdXJyZW5j
 eV9zeW1ib2w7DQogICAgICAgIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50Ow0K
 ICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsNCiAgICAgICAgY2hh
 ciAqbW9uX2dyb3VwaW5nOw0KICAgICAgICBjaGFyICpwb3NpdGl2ZV9zaWdu
 Ow0KICAgICAgICBjaGFyICpuZWdhdGl2ZV9zaWduOw0KICAgICAgICBjaGFy
 IGludF9mcmFjX2RpZ2l0czsNCiAgICAgICAgY2hhciBmcmFjX2RpZ2l0czsN
 CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOw0KICAgICAgICBjaGFyIHBf
 c2VwX2J5X3NwYWNlOw0KICAgICAgICBjaGFyIG5fY3NfcHJlY2VkZXM7DQog
 ICAgICAgIGNoYXIgbl9zZXBfYnlfc3BhY2U7DQogICAgICAgIGNoYXIgcF9z
 aWduX3Bvc247DQogICAgICAgIGNoYXIgbl9zaWduX3Bvc247DQp9Ow0KIyAx
 MDIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0DQpleHRlcm4gY2hhciAq
 c2V0bG9jYWxlKGludCwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBzdHJ1Y3Qg
 bGNvbnYgKmxvY2FsZWNvbnYodm9pZCk7DQoNCg0KDQoNCg0KDQp9DQojIDM5
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 Y2xvY2FsZS5oIiAyIDMNCg0KDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog
 IHVzaW5nIDo6bGNvbnY7DQogIHVzaW5nIDo6c2V0bG9jYWxlOw0KICB1c2lu
 ZyA6OmxvY2FsZWNvbnY7DQp9DQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9jc3RkbGliLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KIyAx
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvYml0cy9zdGRfbGltaXRzLmgiIDEgMw0KIyA0NSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xh
 cmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAzDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9i
 aXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL3N0
 ZF9saW1pdHMuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzDQojIDM4ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0
 LmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0DQojIDE2
 ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJA
 KCMpZmxvYXQuaAkxLjE1CTk3LzExLzIyIFNNSSINCg0KDQpleHRlcm4gIkMi
 IHsNCg0KDQoNCg0KDQpleHRlcm4gaW50IF9fZmx0X3JvdW5kcyh2b2lkKTsN
 CiMgOTcgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAzIDQNCn0NCiMgMzkgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxv
 YXQuaCIgMiAzDQojIDQ3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9zdGRfbGltaXRzLmgi
 IDIgMw0KDQpuYW1lc3BhY2Ugc3RkIHsNCg0KICAgIGVudW0gZmxvYXRfcm91
 bmRfc3R5bGUgew0KICAgICAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEs
 DQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwNCiAgICAgICAgcm91
 bmRfdG9fbmVhcmVzdCA9IDEsDQogICAgICAgIHJvdW5kX3Rvd2FyZF9pbmZp
 bml0eSA9IDIsDQogICAgICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkg
 PSAzDQogICAgfTsNCg0KICAgIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlIHsN
 CiAgICAgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwNCiAgICAgICAg
 ZGVub3JtX2Fic2VudCA9IDAsDQogICAgICAgIGRlbm9ybV9wcmVzZW50ID0g
 MQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVj
 dCBudW1lcmljX2xpbWl0cyB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
 IGlzX3NwZWNpYWxpemVkID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIF9U
 cCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
 IH0NCiAgICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJu
 IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IGRpZ2l0cyA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
 ZGlnaXRzMTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
 aWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
 aW50ZWdlciA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 c19leGFjdCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
 ZGl4ID0gMDsNCg0KICAgICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJv
 dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAg
 c3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3Rh
 dGljX2Nhc3Q8X1RwPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBp
 bnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
 dCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBp
 bnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
 dCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
 b3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
 b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGlj
 IF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
 X1RwPigwKTsgfQ0KICAgICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRo
 cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAg
 ICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJu
 IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAgc3RhdGljIF9UcCBk
 ZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
 KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
 ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
 ZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
 dWxvID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh
 cHMgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
 c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
 dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
 Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBf
 X2xpbWl0c19pbmZpbml0eSgpOw0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
 cD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigpOw0KICAgIHRlbXBsYXRlPHR5
 cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3NpZ25hbGluZ19OYU4oKTsNCiAg
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1f
 bWluKCk7DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0
 czxib29sPiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
 YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0
 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIHN0
 YXRpYyBib29sIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gdHJ1
 ZTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3Rh
 dGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 MDsgfQ0KICAgICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93
 KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
 YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAg
 c3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0
 dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRpYyBi
 b29sIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh
 dGljX2Nhc3Q8Ym9vbD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgc2ln
 bmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
 X2Nhc3Q8Ym9vbD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgZGVub3Jt
 X21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
 Ym9vbD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
 ZWM1NTkgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
 b3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
 bW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
 cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
 ZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxv
 YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
 bzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
 aW1pdHM8Y2hhcj4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
 cGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNoYXIgbWlu
 KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0NCiAgICAg
 ICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy
 biAxMjc7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
 IDc7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAg
 c3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
 cm4gMDsgfQ0KICAgICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRp
 YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
 YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
 ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAg
 ICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRp
 YyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIGNoYXIg
 c2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh
 dGljX2Nhc3Q8Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIGNoYXIgZGVu
 b3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
 c3Q8Y2hhcj4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 c19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 aXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
 IGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy
 ZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1l
 cmljX2xpbWl0czxzaWduZWQgY2hhcj4gew0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3Rh
 dGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
 cm4gKC0xMjgpOyB9DQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgo
 KSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQ0KDQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX3NpZ25lZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg
 ZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAg
 ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygp
 DQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
 X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0
 YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAg
 eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQogICAg
 ICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQog
 ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg
 fQ0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigp
 IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk
 IGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5v
 cm1fbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
 dDxzaWduZWQgY2hhcj4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg
 Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
 X3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVj
 dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPiB7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAg
 ICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
 YXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAyNTU7IH0NCg0K
 ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyB1bnNp
 Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJy
 b3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAg
 ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
 c2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
 TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
 cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K
 DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
 aGFyPigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWll
 dF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
 PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25l
 ZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0
 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICAg
 IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpDQog
 ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDAp
 OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
 ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
 PSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
 PSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
 dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
 b3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
 ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAg
 IH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxz
 aG9ydD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
 aXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gKC0zMjc2Ny0xKTsgfQ0KICAgICAg
 ICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy
 biAzMjc2NzsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
 ID0gMTU7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAg
 ICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9y
 KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
 TiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
 X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0K
 ICAgICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KICAgICAg
 ICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7
 IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0NCiAgICAgICAgc3Rh
 dGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KICAgICAgICBzdGF0
 aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
 cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9DQoNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAg
 ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
 PSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8
 PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
 Ow0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJv
 dygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVu
 c2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 NjU1MzU7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
 IDE2Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAg
 ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkNCiAg
 ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg
 c2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
 dCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
 MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
 dCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
 MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
 bml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
 cXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
 IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
 YnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
 bG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9y
 dCBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
 X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1
 bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAg
 ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
 c2hvcnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBk
 ZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNf
 Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
 cm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4g
 c3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gew0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAg
 c3RhdGljIGludCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgt
 MjE0NzQ4MzY0Ny0xKTsgfQ0KICAgICAgICBzdGF0aWMgaW50IG1heCgpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQ0KDQogICAg
 ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGludCBlcHNp
 bG9uKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAg
 IHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
 eHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
 cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
 eHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
 cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
 c19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
 bm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
 ZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBpbnQgaW5m
 aW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
 PGludD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0
 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7
 IH0NCiAgICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
 KQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQog
 ICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAg
 ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQ0KDQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
 c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVt
 cGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PiB7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
 dHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgICBzdGF0aWMg
 dW5zaWduZWQgaW50IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 KDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9DQoNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGludCBkaWdpdHMgPSAzMjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
 dCBkaWdpdHMxMCA9IDk7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X3NpZ25lZCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 c19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 aXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
 ZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9u
 KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0
 YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50
 IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
 bWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50
 IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
 bWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
 bSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
 IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1
 bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0
 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCiAgICAgICAg
 c3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0N
 CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkg
 dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
 ZCBpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVu
 b3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
 c3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
 X3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVj
 dCBudW1lcmljX2xpbWl0czxsb25nPiB7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0
 aWMgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgtMjE0
 NzQ4MzY0N0wtMSk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQ0KDQogICAg
 ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGxvbmcgZXBz
 aWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAg
 ICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAg
 eyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
 X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
 ZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
 X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
 ZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 aGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
 ZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
 X2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIGxvbmcg
 aW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
 YXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05h
 TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u
 Zz4oMCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigp
 IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4o
 MCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93
 KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0N
 Cg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
 c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
 PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
 eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsN
 Cg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
 bmVkIGxvbmc+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
 Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
 b25nIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAg
 ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpOyB9DQoNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHVuc2ln
 bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 MDsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJv
 cigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
 YU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
 bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoN
 CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJv
 dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
 bmc+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0
 X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
 dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
 IGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgICAg
 c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkNCiAg
 ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7
 IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0
 cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
 dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
 dHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
 dWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
 ZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
 c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9
 Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Zmxv
 YXQ+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
 ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJv
 dygpDQogICAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzUxRS0zOEY7IH0NCiAg
 ICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkNCiAgICAgICAgeyBy
 ZXR1cm4gMy40MDI4MjM0NjZFKzM4RjsgfQ0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBpbnQgZGlnaXRzID0gMjQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBp
 bnQgZGlnaXRzMTAgPSA3Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 c19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 c19pbnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
 IGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
 cmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4xOTIwOTI4OTZFLTA3RjsgfQ0K
 ICAgICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQog
 ICAgICAgIHsgcmV0dXJuIDEuMGY7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4Ow0KICAgICAgICBzdGF0
 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7DQoNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
 PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
 dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAg
 ICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAg
 ICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCiAgICAgICAg
 c3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyBy
 ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9DQogICAgICAgIHN0YXRp
 YyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJl
 dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCiAgICAgICAgc3RhdGlj
 IGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
 IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+
 IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+IHsNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAg
 ICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJl
 dHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRFLTMwODsgfQ0KICAgICAgICBzdGF0
 aWMgZG91YmxlIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS43
 OTc2OTMxMzQ4NjIzMTU3RSszMDg7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IGRpZ2l0cyA9IDUzOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50
 IGRpZ2l0czEwID0gMTU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X3NpZ25lZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X2ludGVnZXIgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 aXNfZXhhY3QgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBy
 YWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxRS0x
 NjsgfQ0KICAgICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiAxLjA7IH0NCg0KICAgICAgICBzdGF0
 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIxOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0Ow0KICAg
 ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4Ow0K
 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
 bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
 ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
 YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
 dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
 bHNlOw0KDQogICAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJv
 dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7
 IH0NCiAgICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygp
 DQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0N
 CiAgICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3co
 KQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9
 DQogICAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkN
 CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQ0K
 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
 c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxz
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
 ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
 dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07
 DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25n
 IGRvdWJsZT4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
 aWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGxvbmcgZG91Ymxl
 IG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMx
 MTIwOTM1MDYyNjI2Nzc4MTczMjE3NTI2MDNFLTQ5MzJMOyB9DQogICAgICAg
 IHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDg1NzU5MzI2NjI4MDA3MDE2
 RSs0OTMyTDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
 ID0gMTEzOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
 MzQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRy
 dWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBm
 YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBm
 YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog
 ICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiAxLjkyNTkyOTk0NDM4NzIzNTg1MzA1NTk3Nzk0
 MjU4NDkyNzMxOUUtMzRMOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJs
 ZSByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4w
 TDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
 ID0gLTE2MzgxOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
 bmVudDEwID0gLTQ5MzE7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
 X2V4cG9uZW50ID0gMTYzODQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
 bWF4X2V4cG9uZW50MTAgPSA0OTMyOw0KDQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
 bm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRp
 YyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAgeyBy
 ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9DQogICAgICAg
 IHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQ0K
 ICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRo
 cm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3Vi
 bGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1f
 bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
 b25nIGRvdWJsZT4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
 b2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIHRyYXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
 b3dhcmRfemVybzsNCiAgICB9Ow0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg
 MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9tZW1vcnkuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz
 DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3NidWZfaXRlci5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMg
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X2NjdHlwZS5oIiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAx
 IDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My90
 eXBlaW5mbyIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvZXhjZXB0aW9uIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzDQoNCmV4dGVybiAiQysr
 IiB7DQoNCm5hbWVzcGFjZSBfX2N4eGFiaXYxDQp7DQogIGNsYXNzIF9fY2xh
 c3NfdHlwZV9pbmZvOw0KfQ0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQog
 IGNsYXNzIHR5cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAg
 IHZpcnR1YWwgfnR5cGVfaW5mbygpOw0KDQogIHByaXZhdGU6DQoNCiAgICB0
 eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsNCiAgICB0
 eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0K
 ICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAg
 ZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShf
 X24pIHsgfQ0KDQogIHB1YmxpYzoNCg0KICAgIGNvbnN0IGNoYXIqIG5hbWUo
 KSBjb25zdA0KICAgIHsgcmV0dXJuIF9fbmFtZTsgfQ0KIyA4NiAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQogICAg
 Ym9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAg
 ICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0NCiAgICBib29s
 IG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAg
 ICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9DQoNCiAgICBi
 b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QN
 CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0NCg0KDQogIHB1
 YmxpYzoNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNv
 bnN0Ow0KDQogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNv
 bnN0Ow0KDQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9fY2F0
 Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJf
 b2JqLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9f
 b3V0ZXIpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNh
 c3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFy
 Z2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19v
 YmpfcHRyKSBjb25zdDsNCiAgfTsNCg0KICBjbGFzcyBiYWRfY2FzdCA6IHB1
 YmxpYyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2Nhc3Qo
 KSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3co
 KTsNCiAgfTsNCg0KICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2Vw
 dGlvbg0KICB7DQogIHB1YmxpYzoNCiAgICBiYWRfdHlwZWlkICgpIHRocm93
 KCkgeyB9DQogICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOw0K
 ICB9Ow0KfQ0KDQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0
 b3IuaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx
 IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAz
 NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu
 Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lk
 DQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQN
 CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9f
 dGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh
 ZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNf
 ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
 ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
 X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0K
 ICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f
 cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj
 aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9y
 KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jhbmdl
 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
 X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K
 ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
 DQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
 IF9fcyk7DQp9DQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
 MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDM1
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 dmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAzNiAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rv
 ci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM3ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9y
 LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAy
 IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25f
 ZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3Bh
 Y2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24o
 dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp
 Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQog
 IHZvaWQNCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9p
 ZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN
 CiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
 X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
 bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9l
 cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19v
 dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f
 dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
 aWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
 DQogIHZvaWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
 KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io
 Y29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3Nf
 ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyAzNiAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAy
 IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvY29uY2VwdF9jaGVjay5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzDQoN
 Cm5hbWVzcGFjZSBzdGQNCnsNCiMgNDggIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMw0KdGVtcGxhdGUg
 PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+
 DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0KICB0eXBl
 ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6
 YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAg
 YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
 IF9NX2RhdGFfYWxsb2NhdG9yOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNl
 KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2Fs
 bG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9l
 bmRfb2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIGFsbG9j
 YXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0
 Ow0KICBfVHAqIF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFn
 ZTsNCg0KICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyBy
 ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2
 b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAg
 eyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwg
 X19uKTsgfQ0KfTsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
 IF9BbGxvY2F0b3I+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf
 QWxsb2NhdG9yLCB0cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5h
 bWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf
 dHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3Jf
 dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9y
 X3R5cGUoKTsgfQ0KDQogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv
 Y2F0b3JfdHlwZSYpDQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDAp
 LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQog
 IF9UcCogX01fc3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9N
 X2VuZF9vZl9zdG9yYWdlOw0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
 X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2Nf
 dHlwZTsNCiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsg
 cmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9DQogIHZvaWQg
 X01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IF9B
 bGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9DQp9Ow0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX1ZlY3Rv
 cl9iYXNlDQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9B
 bGxvYywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
 cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5
 cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs
 bG9jPjo6X1NfaW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0
 eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
 b3JfdHlwZTsNCg0KICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5
 cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShzaXpl
 X3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f
 YSkgew0KICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBf
 TV9maW5pc2ggPSBfTV9zdGFydDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
 IF9NX3N0YXJ0ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0b3JfYmFzZSgpIHsg
 X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
 TV9zdGFydCk7IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
 c3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPg0KY2xhc3MgdmVjdG9yIDog
 cHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4NCnsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQpwcml2YXRlOg0KICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxf
 VHAsIF9BbGxvYz4gX0Jhc2U7DQogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0Fs
 bG9jPiB2ZWN0b3JfdHlwZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfVHAgdmFs
 dWVfdHlwZTsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOw0KICB0
 eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7DQogIHR5
 cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+
 IGl0ZXJhdG9yOw0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0
 X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsNCiAgdHlw
 ZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3Qg
 dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVf
 dCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
 dHlwZTsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3Jf
 dHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
 bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9y
 KCk7IH0NCg0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl
 cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2
 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0K
 cHJvdGVjdGVkOg0KICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7DQogIHVz
 aW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01f
 c3RhcnQ7DQogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7DQogIHVzaW5nIF9C
 YXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KcHJvdGVjdGVkOg0KICB2b2lk
 IF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Rw
 JiBfX3gpOw0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np
 dGlvbik7DQoNCnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
 biBpdGVyYXRvciAoX01fc3RhcnQpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGJl
 Z2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01f
 c3RhcnQpOyB9DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9y
 IChfTV9maW5pc2gpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
 IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9DQoNCiAg
 cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQ0KICAgIHsgcmV0dXJuIHJldmVy
 c2VfaXRlcmF0b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0
 b3IgcmJlZ2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl
 X2l0ZXJhdG9yKGVuZCgpKTsgfQ0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
 KQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0N
 CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QNCiAgICB7
 IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9DQoN
 CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdA0KICAgIHsgcmV0dXJuIHNpemVf
 dHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6
 ZSgpIGNvbnN0DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVv
 ZihfVHApOyB9DQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0DQogICAg
 eyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9z
 dG9yYWdlKSAtIGJlZ2luKCkpOyB9DQogIGJvb2wgZW1wdHkoKSBjb25zdA0K
 ICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICByZWZlcmVu
 Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2lu
 KCkgKyBfX24pOyB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
 emVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7
 IH0NCg0KICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv
 bnN0IHsNCiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgIF9f
 dGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsNCiAgfQ0KDQogIHJlZmVy
 ZW5jZSBhdChzaXplX3R5cGUgX19uKQ0KICAgIHsgX01fcmFuZ2VfY2hlY2so
 X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQ0KICBjb25zdF9yZWZlcmVu
 Y2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7IF9NX3JhbmdlX2No
 ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0NCg0KICBleHBsaWNp
 dCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
 cl90eXBlKCkpDQogICAgOiBfQmFzZShfX2EpIHt9DQoNCiAgdmVjdG9yKHNp
 emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgIGNv
 bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0K
 ICAgIDogX0Jhc2UoX19uLCBfX2EpDQogICAgeyBfTV9maW5pc2ggPSB1bmlu
 aXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQ0K
 DQogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQ0KICAgIDogX0Jh
 c2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIHsgX01fZmluaXNoID0g
 dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9
 DQoNCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkN
 CiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkp
 DQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJl
 Z2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICB0ZW1wbGF0
 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZlY3RvcihfSW5wdXRJdGVy
 YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAg
 ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
 KSkgOiBfQmFzZShfX2EpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
 bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN
 CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl
 Z3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4N
 CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRl
 Z2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7DQogICAgX01fc3RhcnQgPSBf
 TV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
 c3RhcnQgKyBfX247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m
 aWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1w
 bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlh
 bGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
 b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2Vf
 dHlwZSkgew0KICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s
 YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQog
 IH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0N
 Cg0KICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVj
 dG9yPF9UcCwgX0FsbG9jPiYgX194KTsNCiAgdm9pZCByZXNlcnZlKHNpemVf
 dHlwZSBfX24pIHsNCiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgew0KICAg
 ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAg
 ICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBf
 TV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQs
 IF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf
 TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0
 ID0gX190bXA7DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3Np
 emU7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
 Ow0KICAgIH0NCiAgfQ0KDQoNCg0KDQoNCg0KICB2b2lkIGFzc2lnbihzaXpl
 X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWdu
 KF9fbiwgX192YWwpOyB9DQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90
 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7DQoNCiAgdGVtcGxhdGUgPGNs
 YXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVy
 YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0
 eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6
 X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2go
 X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1w
 bGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3Bh
 dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl
 KQ0KICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1Rw
 KSBfX3ZhbCk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4N
 CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01f
 YXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
 cnkoX19maXJzdCkpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
 ZXJhdG9yPg0KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3Ig
 X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8
 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4
 KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
 X3RhZyk7DQoNCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu
 KCk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1
 cm4gKmJlZ2luKCk7IH0NCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAq
 KGVuZCgpIC0gMSk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25z
 dCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0NCg0KICB2b2lkIHB1c2hfYmFj
 ayhjb25zdCBfVHAmIF9feCkgew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01f
 ZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs
 IF9feCk7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0K
 ICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsNCiAgfQ0KICB2b2lk
 IHB1c2hfYmFjaygpIHsNCiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
 Zl9zdG9yYWdlKSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAg
 ICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9p
 bnNlcnRfYXV4KGVuZCgpKTsNCiAgfQ0KICB2b2lkIHN3YXAodmVjdG9yPF9U
 cCwgX0FsbG9jPiYgX194KSB7DQogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBf
 X3guX01fc3RhcnQpOw0KICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5f
 TV9maW5pc2gpOw0KICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg
 X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsNCiAgfQ0KDQogIGl0ZXJhdG9yIGlu
 c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgew0K
 ICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAg
 ICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9z
 aXRpb24gPT0gZW5kKCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs
 IF9feCk7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0K
 ICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194
 KTsNCiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsNCiAgfQ0KICBpdGVyYXRv
 ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgIHNpemVfdHlw
 ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmlu
 aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5k
 KCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytf
 TV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9h
 dXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOw0KICAgIHJldHVybiBiZWdpbigp
 ICsgX19uOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
 dG9yPg0KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl
 cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAg
 dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46
 Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7DQogICAgX01faW5zZXJ0X2Rpc3BhdGNo
 KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0K
 DQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9pbnNl
 cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0lu
 dGVnZXIgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1
 ZV90eXBlKQ0KICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5
 cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNz
 IF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp
 dGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
 cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAg
 ICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19p
 dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQogIH0NCg0KICB2b2lkIGlu
 c2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
 cCYgX194KQ0KICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194
 KTsgfQ0KDQogIHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9z
 LCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7DQoNCiAgdm9pZCBw
 b3BfYmFjaygpIHsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9N
 X2ZpbmlzaCk7DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19w
 b3NpdGlvbikgew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkN
 CiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9u
 KTsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7
 DQogICAgcmV0dXJuIF9fcG9zaXRpb247DQogIH0NCiAgaXRlcmF0b3IgZXJh
 c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7DQogICAg
 aXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOw0K
 ICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7DQogICAgX01fZmluaXNoID0gX01f
 ZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2Zp
 cnN0Ow0KICB9DQoNCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3Np
 emUsIGNvbnN0IF9UcCYgX194KSB7DQogICAgaWYgKF9fbmV3X3NpemUgPCBz
 aXplKCkpDQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5k
 KCkpOw0KICAgIGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6
 ZSAtIHNpemUoKSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5
 cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9
 DQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0K
 DQpwcm90ZWN0ZWQ6DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
 cmF0b3I+DQogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90
 eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
 ZEl0ZXJhdG9yIF9fbGFzdCkNCiAgew0KICAgIHBvaW50ZXIgX19yZXN1bHQg
 PSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIHRyeSB7DQogICAgICB1bmluaXRp
 YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAg
 ICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBf
 TV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsNCiAgfQ0K
 DQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBf
 TV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh
 c3QsIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KICAgIGZvciAoIDsgX19m
 aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgIHB1c2hfYmFjaygq
 X19maXJzdCk7DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
 ZEl0ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0Zvcndh
 cmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3Jf
 dGFnKQ0KICB7DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFu
 Y2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAgIF9NX3N0YXJ0ID0gX01f
 YWxsb2NhdGUoX19uKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
 YXJ0ICsgX19uOw0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
 eShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9p
 bnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAg
 IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
 KTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAg
 dm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAg
 ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
 cndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg
 IGZvcndhcmRfaXRlcmF0b3JfdGFnKTsNCn07DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj09
 KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9y
 PF9UcCwgX0FsbG9jPiYgX195KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9
 PSBfX3kuc2l6ZSgpICYmDQogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwg
 X194LmVuZCgpLCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcjwo
 Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8
 X1RwLCBfQWxsb2M+JiBfX3kpDQp7DQogIHJldHVybiBsZXhpY29ncmFwaGlj
 YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQo
 KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4N
 CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2
 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlu
 bGluZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv
 Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQog
 IHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X1RwLCBjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+KGNv
 bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9U
 cCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBi
 b29sDQpvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
 eCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVy
 biAhKF9feSA8IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
 YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj49KGNvbnN0IHZl
 Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
 bG9jPiYgX195KSB7DQogIHJldHVybiAhKF9feCA8IF9feSk7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZlY3RvcjxfVHAs
 X0FsbG9jPiYNCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0
 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0g
 dGhpcykgew0KICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6
 ZSgpOw0KICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgICBw
 b2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBf
 X3guYmVnaW4oKSwgX194LmVuZCgpKTsNCiAgICAgIGRlc3Ryb3koX01fc3Rh
 cnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0
 LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0
 YXJ0ID0gX190bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
 YXJ0ICsgX194bGVuOw0KICAgIH0NCiAgICBlbHNlIGlmIChzaXplKCkgPj0g
 X194bGVuKSB7DQogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4o
 KSwgX194LmVuZCgpLCBiZWdpbigpKSk7DQogICAgICBkZXN0cm95KF9faSwg
 ZW5kKCkpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJl
 Z2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7DQogICAg
 ICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9f
 eC5lbmQoKSwgX01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0g
 X01fc3RhcnQgKyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZl
 Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24s
 IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQ0Kew0KICBpZiAoX19uID4gY2Fw
 YWNpdHkoKSkgew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19u
 LCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0
 aGlzKTsNCiAgfQ0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsNCiAgICBm
 aWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01fZmluaXNoID0g
 dW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCks
 IF9fdmFsKTsNCiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2lu
 KCksIF9fbiwgX192YWwpLCBlbmQoKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
 ZXI+DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgo
 X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
 YXRvcl90YWcpIHsNCiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7DQogIGZv
 ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsr
 X19jdXIsICsrX19maXJzdCkNCiAgICAqX19jdXIgPSAqX19maXJzdDsNCiAg
 aWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIGVyYXNlKF9fY3VyLCBlbmQo
 KSk7DQogIGVsc2UNCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFz
 dCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
 dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4NCnZvaWQNCnZlY3Rvcjxf
 VHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmly
 c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogIHNp
 emVfdHlwZSBfX2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
 dCwgX19sZW4pOw0KDQogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsNCiAg
 ICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBf
 X2ZpcnN0LCBfX2xhc3QpKTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m
 aW5pc2gpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
 Zl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7
 DQogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFy
 dCArIF9fbGVuOw0KICB9DQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg
 ew0KICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9f
 bGFzdCwgX01fc3RhcnQpKTsNCiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwg
 ZW5kKCkpOw0KICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7
 DQogIH0NCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19m
 aXJzdDsNCiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOw0KICAgIGNvcHko
 X19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsNCiAgICBfTV9maW5pc2ggPSB1
 bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsN
 CiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
 DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0
 ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQ0Kew0KICBpZiAo
 X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3Ry
 dWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9m
 aW5pc2g7DQogICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFj
 a3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0
 ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOw0KICAgICpfX3Bvc2l0aW9uID0gX194
 X2NvcHk7DQogIH0NCiAgZWxzZSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9f
 b2xkX3NpemUgPSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu
 ID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAg
 IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQog
 ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsNCiAgICB0
 cnkgew0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
 KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7DQog
 ICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsNCiAg
 ICAgICsrX19uZXdfZmluaXNoOw0KICAgICAgX19uZXdfZmluaXNoID0gdW5p
 bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zpbmlz
 aCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X19uZXdfZmluaXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7IChkZXN0
 cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUo
 X19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9Ow0KDQogICAg
 ZGVzdHJveShiZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShf
 TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAg
 X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgX01fZmluaXNo
 ID0gX19uZXdfZmluaXNoLmJhc2UoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFn
 ZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOw0KICB9DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQNCnZlY3Rv
 cjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np
 dGlvbikNCnsNCiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn
 ZSkgew0KICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0g
 MSkpOw0KICAgICsrX01fZmluaXNoOw0KICAgIGNvcHlfYmFja3dhcmQoX19w
 b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksDQogICAgICAgICAg
 ICAgICAgICBpdGVyYXRvcihfTV9maW5pc2ggLSAxKSk7DQogICAgKl9fcG9z
 aXRpb24gPSBfVHAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXpl
 X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICBjb25zdCBzaXplX3R5
 cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6
 IDE7DQogICAgcG9pbnRlciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9f
 bGVuKTsNCiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0
 Ow0KICAgIHRyeSB7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
 emVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0
 YXJ0KTsNCiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOw0KICAgICAg
 KytfX25ld19maW5pc2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRp
 YWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l
 d19maW5pc2gpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3ko
 X19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25l
 d19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgIGRlc3Ryb3koYmVn
 aW4oKSwgZW5kKCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N
 X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0g
 X19uZXdfc3RhcnQ7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0K
 ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsN
 CiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
 DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0
 ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194
 KQ0Kew0KICBpZiAoX19uICE9IDApIHsNCiAgICBpZiAoc2l6ZV90eXBlKF9N
 X2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAg
 IF9UcCBfX3hfY29weSA9IF9feDsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
 X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl
 cmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19l
 bGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv
 cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQog
 ICAgICAgIF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dh
 cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p
 c2gpOw0KICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBf
 X24sIF9feF9jb3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAg
 ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxl
 bXNfYWZ0ZXIsIF9feF9jb3B5KTsNCiAgICAgICAgX01fZmluaXNoICs9IF9f
 biAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
 eShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAg
 ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxs
 KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAg
 fQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
 X29sZF9zaXplID0gc2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
 bGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAg
 ICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsN
 CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7DQog
 ICAgICB0cnkgew0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
 emVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0K
 ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf
 X25ld19maW5pc2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNo
 DQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg
 ZW5kKCksIF9fbmV3X2ZpbmlzaCk7DQogICAgICB9DQogICAgICBjYXRjaCgu
 Li4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01f
 ZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7
 IH07DQoNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQog
 ICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
 ZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQu
 YmFzZSgpOw0KICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo
 KTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFz
 ZSgpICsgX19sZW47DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
 ZXJhdG9yPg0Kdm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2Vf
 aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
 b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgZm9yICggOyBfX2ZpcnN0
 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3MgPSBpbnNlcnQo
 X19wb3MsICpfX2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs
 YXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxs
 b2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
 ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
 YWcpDQp7DQogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIHNpemVf
 dHlwZSBfX24gPSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
 X19uKTsNCiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g
 X01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
 X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl
 cmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19l
 bGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv
 cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQog
 ICAgICAgIF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dh
 cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p
 c2gpOw0KICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlv
 bik7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJ
 dGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19t
 aWQsIF9fZWxlbXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv
 cHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsNCiAgICAgICAgX01fZmlu
 aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlh
 bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zpbmlz
 aCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAg
 ICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAg
 IH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5cGUg
 X19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
 X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAg
 ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7
 DQogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOw0K
 ICAgICAgdHJ5IHsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
 aXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3
 X3N0YXJ0KTsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl
 ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsNCiAgICAg
 ICAgX19uZXdfZmluaXNoDQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2Nv
 cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmlu
 aXNoKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShf
 X25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3
 X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgICAgZGVz
 dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIF9NX2RlYWxsb2Nh
 dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0K
 ICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgICBf
 TV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOw0KICAgICAgX01fZW5k
 X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsNCiAg
 ICB9DQogIH0NCn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgMSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0
 b3IuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7
 DQoNCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVv
 Zih1bnNpZ25lZCBpbnQpKTsNCg0Kc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsN
 CiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01fbWFz
 azsNCiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2ln
 bmVkIGludCBfX3kpDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7
 fQ0KDQpwdWJsaWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBf
 TV9tYXNrKDApIHt9DQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
 biAhKCEoKl9NX3AgJiBfTV9tYXNrKSk7IH0NCiAgX0JpdF9yZWZlcmVuY2Um
 IG9wZXJhdG9yPShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICpfTV9w
 IHw9IF9NX21hc2s7DQogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsNCiAg
 ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJh
 dG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQ0KICAgIHsgcmV0dXJu
 ICp0aGlzID0gYm9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I9PShjb25z
 dCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIGJv
 b2woKnRoaXMpID09IGJvb2woX194KTsgfQ0KICBib29sIG9wZXJhdG9yPChj
 b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7DQogICAgcmV0dXJu
 ICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7DQogIH0NCiAgdm9pZCBmbGlw
 KCkgeyAqX01fcCBePSBfTV9tYXNrOyB9DQp9Ow0KDQppbmxpbmUgdm9pZCBz
 d2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQ0K
 ew0KICBib29sIF9fdG1wID0gX194Ow0KICBfX3ggPSBfX3k7DQogIF9feSA9
 IF9fdG1wOw0KfQ0KDQpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVi
 bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0K
 ew0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9v
 ZmZzZXQ7DQoNCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCog
 X194LCB1bnNpZ25lZCBpbnQgX195KQ0KICAgIDogX01fcChfX3gpLCBfTV9v
 ZmZzZXQoX195KSB7fQ0KDQogIHZvaWQgX01fYnVtcF91cCgpIHsNCiAgICBp
 ZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9N
 X29mZnNldCA9IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9DQogIHZv
 aWQgX01fYnVtcF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAw
 KSB7DQogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAg
 IC0tX01fcDsNCiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luY3IocHRyZGlm
 Zl90IF9faSkgew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBf
 TV9vZmZzZXQ7DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0KICAg
 IF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsN
 CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09S
 RF9CSVQ7DQogICAgICAtLV9NX3A7DQogICAgfSBlbHNlDQogICAgICBfTV9v
 ZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247DQogIH0NCg0KICBib29sIG9w
 ZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0
 IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQg
 PT0gX19pLl9NX29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yPChjb25z
 dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVy
 biBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01f
 b2Zmc2V0IDwgX19pLl9NX29mZnNldCk7DQogIH0NCiAgYm9vbCBvcGVyYXRv
 ciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQog
 ICAgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsNCiAgfQ0KICBib29sIG9wZXJh
 dG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0K
 ICAgIHJldHVybiBfX2kgPCAqdGhpczsNCiAgfQ0KICBib29sIG9wZXJhdG9y
 PD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAg
 ICByZXR1cm4gIShfX2kgPCAqdGhpcyk7DQogIH0NCiAgYm9vbCBvcGVyYXRv
 cj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQog
 ICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOw0KICB9DQp9Ow0KDQppbmxpbmUg
 cHRyZGlmZl90DQpvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
 JiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7DQogIHJl
 dHVybiBfX1dPUkRfQklUICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194
 Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7DQp9DQoNCg0Kc3RydWN0IF9C
 aXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlDQp7DQog
 IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVm
 IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRl
 cmF0b3IgaXRlcmF0b3I7DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9p
 dGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfaXRlcmF0b3IodW5zaWdu
 ZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBfQml0X2l0
 ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQoNCiAgcmVmZXJlbmNlIG9wZXJh
 dG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBf
 TV9vZmZzZXQpOyB9DQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAg
 IF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRl
 cmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9
 ICp0aGlzOw0KICAgIF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gX190bXA7
 DQogIH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7DQogICAgX01fYnVt
 cF9kb3duKCk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJhdG9y
 IG9wZXJhdG9yLS0oaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp
 czsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQog
 IH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f
 aSkgew0KICAgIF9NX2luY3IoX19pKTsNCiAgICByZXR1cm4gKnRoaXM7DQog
 IH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f
 aSkgew0KICAgICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0K
 ICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19p
 KSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBy
 ZXR1cm4gX190bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9y
 LShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3Ig
 X190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9
 DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9f
 aSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0NCn07DQoNCmlubGluZSBf
 Qml0X2l0ZXJhdG9yDQpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3Qg
 X0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0NCg0K
 DQpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0
 ZXJhdG9yX2Jhc2UNCnsNCiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsNCiAg
 dHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25z
 dCBib29sKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0
 b3IgY29uc3RfaXRlcmF0b3I7DQoNCiAgX0JpdF9jb25zdF9pdGVyYXRvcigp
 IDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfY29uc3Rf
 aXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kp
 DQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQogIF9C
 aXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQ0K
 ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zm
 c2V0KSB7fQ0KDQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z
 dCB7DQogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9N
 X29mZnNldCk7DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKyso
 KSB7DQogICAgX01fYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAg
 fQ0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGNv
 bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgX01fYnVtcF91cCgp
 Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYg
 b3BlcmF0b3ItLSgpIHsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1
 cm4gKnRoaXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShp
 bnQpIHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAg
 IF9NX2J1bXBfZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBj
 b25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19p
 KSB7DQogICAgX01faW5jcihfX2kpOw0KICAgIHJldHVybiAqdGhpczsNCiAg
 fQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5
 cGUgX19pKSB7DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRo
 aXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVu
 Y2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3Rt
 cCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAg
 Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
 IGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0K
 ICAgIHJldHVybiBfX3RtcCAtPSBfX2k7DQogIH0NCiAgY29uc3RfcmVmZXJl
 bmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIHJl
 dHVybiAqKCp0aGlzICsgX19pKTsNCiAgfQ0KfTsNCg0KaW5saW5lIF9CaXRf
 Y29uc3RfaXRlcmF0b3INCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25z
 dCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9f
 bjsgfQ0KDQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3Is
 IGJvb2wgX19pc19zdGF0aWM+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl
 IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
 PGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAg
 IGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
 dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0K
 ICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
 X2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgp
 LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJv
 dGVjdGVkOg0KICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3Qg
 X19uKQ0KICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl
 KChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0NCiAgdm9p
 ZCBfTV9kZWFsbG9jYXRlKCkgew0KICAgIGlmIChfTV9zdGFydC5fTV9wKQ0K
 ICAgICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5f
 TV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9l
 bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOw0KICB9DQoNCiAgdHlw
 ZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+
 OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y
 Ow0KICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9y
 IF9NX2ZpbmlzaDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFn
 ZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFz
 cyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1
 YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2ws
 IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9j
 YXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
 Y29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVj
 dG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQ0KICAgIDog
 X01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp
 IHt9DQoNCnByb3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
 dHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBl
 DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQoNCiAgdW5zaWduZWQgaW50KiBf
 TV9iaXRfYWxsb2Moc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2Nf
 dHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRf
 QklUKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9N
 X3N0YXJ0Ll9NX3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf
 TV9zdGFydC5fTV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsNCiAgfQ0KDQog
 IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01f
 ZmluaXNoOw0KICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0K
 fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9y
 X2Jhc2UNCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
 czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVk
 ZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46
 Ol9TX2luc3RhbmNlbGVzcz4NCiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoN
 CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxs
 b2NhdG9yX3R5cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0
 b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jh
 c2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCn0NCg0K
 DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0bF92ZWN0b3IuaCIgMSAzDQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzDQpuYW1l
 c3BhY2Ugc3RkDQp7DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+DQog
 IGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9y
 X2Jhc2U8X0FsbG9jPg0KICB7DQogIHB1YmxpYzoNCiAgICB0eXBlZGVmIGJv
 b2wgdmFsdWVfdHlwZTsNCiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
 DQogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAg
 IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgIHR5cGVk
 ZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7DQogICAgdHlwZWRlZiBfQml0X3Jl
 ZmVyZW5jZSogcG9pbnRlcjsNCiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNv
 bnN0X3BvaW50ZXI7DQoNCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRl
 cmF0b3I7DQogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0
 X2l0ZXJhdG9yOw0KDQogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
 bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgIHR5
 cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy
 YXRvcjsNCg0KICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxf
 QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgICBh
 bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgew0KICAgICAg
 cmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigp
 Ow0KICAgIH0NCg0KICBwcm90ZWN0ZWQ6DQogICAgdXNpbmcgX0J2ZWN0b3Jf
 YmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7DQogICAgdXNpbmcgX0J2ZWN0
 b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOw0KICAgIHVzaW5nIF9C
 dmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7DQogICAgdXNpbmcgX0J2
 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7DQogICAgdXNpbmcgX0J2
 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBw
 cm90ZWN0ZWQ6DQogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBf
 X24pIHsNCiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j
 KF9fbik7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g
 KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0YXJ0
 ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0
 YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIHZvaWQg
 X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkg
 ew0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y
 YWdlKSB7DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01f
 ZmluaXNoLCBfTV9maW5pc2ggKyAxKTsNCiAgICAgICAgKl9fcG9zaXRpb24g
 PSBfX3g7DQogICAgICAgICsrX01fZmluaXNoOw0KICAgICAgfQ0KICAgICAg
 ZWxzZSB7DQogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIg
 KiBzaXplKCkgOiBfX1dPUkRfQklUOw0KICAgICAgICB1bnNpZ25lZCBpbnQq
 IF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgIGl0ZXJhdG9y
 IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19x
 LCAwKSk7DQogICAgICAgICpfX2krKyA9IF9feDsNCiAgICAgICAgX01fZmlu
 aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAg
 X01fZGVhbGxvY2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
 IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0K
 ICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICB9
 DQogICAgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
 Pg0KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRv
 ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAg
 ICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOw0KICAgICAgX01fZmluaXNoID0g
 aXRlcmF0b3IoKTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsNCiAg
 ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAg
 ICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsNCiAgICB9DQoNCiAgICB0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2lu
 aXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
 d2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlw
 ZSBfX24gPSAwOw0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
 X24pOw0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgY29weShf
 X2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgICB9DQoNCiAgICB0ZW1w
 bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgdm9pZCBfTV9pbnNl
 cnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
 dG9yX3RhZykgew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
 KytfX2ZpcnN0KSB7DQogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq
 X19maXJzdCk7DQogICAgICAgICsrX19wb3M7DQogICAgICB9DQogICAgfQ0K
 DQogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAg
 dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
 c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogICAgICBpZiAo
 X19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9
 IDA7DQogICAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsN
 CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQog
 ICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01f
 ZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICAgIGNv
 cHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsNCiAgICAgICAgICBf
 TV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICAgIH0N
 CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
 c2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsNCiAgICAgICAgICB1bnNpZ25l
 ZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgICAg
 aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVy
 YXRvcihfX3EsIDApKTsNCiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3Qs
 IF9fbGFzdCwgX19pKTsNCiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9f
 cG9zaXRpb24sIGVuZCgpLCBfX2kpOw0KICAgICAgICAgIF9NX2RlYWxsb2Nh
 dGUoKTsNCiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
 X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICAg
 IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgICAgfQ0KICAg
 ICAgfQ0KICAgIH0NCg0KICBwdWJsaWM6DQogICAgaXRlcmF0b3IgYmVnaW4o
 KSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICAgIGNvbnN0X2l0ZXJhdG9yIGJl
 Z2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgICBpdGVyYXRv
 ciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0NCiAgICBjb25zdF9pdGVy
 YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICAg
 IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9p
 dGVyYXRvcihlbmQoKSk7IH0NCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
 IHJiZWdpbigpIGNvbnN0IHsNCiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNl
 X2l0ZXJhdG9yKGVuZCgpKTsNCiAgICB9DQogICAgcmV2ZXJzZV9pdGVyYXRv
 ciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg
 fQ0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsN
 CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp
 Ow0KICAgIH0NCg0KICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1
 cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgICBzaXplX3R5
 cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9
 DQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgICAgcmV0
 dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFn
 ZSwgMCkgLSBiZWdpbigpKTsNCiAgICB9DQogICAgYm9vbCBlbXB0eSgpIGNv
 bnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICAgIHJlZmVy
 ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pDQogICAgICB7IHJldHVy
 biAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0NCiAgICBj
 b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl
 KF9fbikpOyB9DQoNCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlw
 ZSBfX24pIGNvbnN0IHsNCiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgp
 KQ0KICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4i
 KTsNCiAgICB9DQoNCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikN
 CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylb
 X19uXTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19u
 KSBjb25zdA0KICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g
 KCp0aGlzKVtfX25dOyB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3Qg
 YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAg
 ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9DQoNCiAgICB2ZWN0
 b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAg
 ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
 KSkNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7
 DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgICBmaWxsKF9NX3N0
 YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAw
 KTsNCiAgICB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9f
 bikNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90
 eXBlKCkpDQogICAgew0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAg
 ICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7
 DQogICAgfQ0KDQogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9C
 dmVjdG9yX2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7DQog
 ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgICAgY29weShf
 X3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogICAgfQ0KDQoN
 Cg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgICB2b2lkIF9N
 X2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
 X3gsIF9fdHJ1ZV90eXBlKSB7DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7
 DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdl
 LCBfX3ggPyB+MCA6IDApOw0KICAgIH0NCg0KICAgIHRlbXBsYXRlIDxjbGFz
 cyBfSW5wdXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlz
 cGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
 bHNlX3R5cGUpIHsNCiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJz
 dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAg
 ICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQog
 ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
 dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
 ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICAgIDogX0J2ZWN0b3Jf
 YmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu
 YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
 bnRlZ3JhbDsNCiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJz
 dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogICAgfQ0KDQogICAgfnZlY3Rv
 cigpIHsgfQ0KDQogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9y
 JiBfX3gpIHsNCiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhp
 czsNCiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgew0KICAg
 ICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2luaXRpYWxpemUo
 X194LnNpemUoKSk7DQogICAgICB9DQogICAgICBjb3B5KF9feC5iZWdpbigp
 LCBfX3guZW5kKCksIGJlZ2luKCkpOw0KICAgICAgX01fZmluaXNoID0gYmVn
 aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICAgIHJl
 dHVybiAqdGhpczsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBfTV9m
 aWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgew0KICAgICAgaWYg
 KF9fbiA+IHNpemUoKSkgew0KICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As
 IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgICBp
 bnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsNCiAgICAgIH0NCiAg
 ICAgIGVsc2Ugew0KICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQo
 KSk7DQogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0
 b3JhZ2UsIF9feCA/IH4wIDogMCk7DQogICAgICB9DQogICAgfQ0KDQogICAg
 dm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9h
 c3NpZ24oX19uLCBfX3gpOyB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
 cHV0SXRlcmF0b3I+DQogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3Ig
 X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgICB0eXBl
 ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
 dGVncmFsIF9JbnRlZ3JhbDsNCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf
 X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgICB9DQoNCiAgICB0
 ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogICAgdm9pZCBfTV9hc3NpZ25f
 ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl
 X3R5cGUpDQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwg
 KGJvb2wpIF9fdmFsKTsgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXI+DQogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRl
 ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0K
 ICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
 YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0NCg0KICAgIHRlbXBsYXRlIDxj
 bGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgo
 X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
 IHsNCiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgICAgIGZv
 ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsr
 X19jdXIsICsrX19maXJzdCkNCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7
 DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIGVyYXNl
 KF9fY3VyLCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChl
 bmQoKSwgX19maXJzdCwgX19sYXN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0
 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2ln
 bl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
 dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
 dGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQog
 ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgICAg
 IGlmIChfX2xlbiA8IHNpemUoKSkNCiAgICAgICAgZXJhc2UoY29weShfX2Zp
 cnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgICBlbHNlIHsN
 CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQog
 ICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICAgIGNvcHko
 X19maXJzdCwgX19taWQsIGJlZ2luKCkpOw0KICAgICAgICBpbnNlcnQoZW5k
 KCksIF9fbWlkLCBfX2xhc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZv
 aWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7DQogICAgICBpZiAoY2FwYWNp
 dHkoKSA8IF9fbikgew0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N
 X2JpdF9hbGxvYyhfX24pOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJl
 Z2luKCksIGVuZCgpLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgICAgX01f
 ZGVhbGxvY2F0ZSgpOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f
 cSwgMCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f
 biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgfQ0KICAg
 IH0NCg0KICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigp
 OyB9DQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1
 cm4gKmJlZ2luKCk7IH0NCiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu
 ICooZW5kKCkgLSAxKTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkg
 Y29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9DQogICAgdm9pZCBwdXNo
 X2JhY2soYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfTV9maW5pc2guX01fcCAh
 PSBfTV9lbmRfb2Zfc3RvcmFnZSkNCiAgICAgICAgKl9NX2ZpbmlzaCsrID0g
 X194Ow0KICAgICAgZWxzZQ0KICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgp
 LCBfX3gpOw0KICAgIH0NCiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9B
 bGxvYz4mIF9feCkgew0KICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3gu
 X01fc3RhcnQpOw0KICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9N
 X2ZpbmlzaCk7DQogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2Us
 IF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7DQogICAgfQ0KICAgIGl0ZXJhdG9y
 IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2wo
 KSkgew0KICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g
 LSBiZWdpbigpOw0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2Vu
 ZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpDQogICAgICAg
 ICpfTV9maW5pc2grKyA9IF9feDsNCiAgICAgIGVsc2UNCiAgICAgICAgX01f
 aW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOw0KICAgICAgcmV0dXJuIGJl
 Z2luKCkgKyBfX247DQogICAgfQ0KDQoNCg0KICAgIHRlbXBsYXRlIDxjbGFz
 cyBfSW50ZWdlcj4NCiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy
 YXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICAg
 IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7DQogICAgfQ0KDQog
 ICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZvaWQg
 X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
 bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICAgIF9NX2luc2VydF9yYW5nZShf
 X3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
 Zmlyc3QpKTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
 SXRlcmF0b3I+DQogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
 biwNCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
 SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5h
 bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
 dGVncmFsOw0KICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24s
 IF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICAgIH0NCg0KICAg
 IHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6
 ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfX24gPT0gMCkg
 cmV0dXJuOw0KICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u
 KSB7DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks
 IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsNCiAgICAgICAg
 ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBl
 KF9fbiksIF9feCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNl
 X3R5cGUoX19uKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBz
 aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0K
 ICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xl
 bik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19w
 b3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIGZpbGxfbihf
 X2ksIF9fbiwgX194KTsNCiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bv
 c2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0K
 ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9z
 dG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09S
 RF9CSVQ7DQogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsN
 CiAgICAgIH0NCiAgICB9DQoNCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf
 X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0KICAgICAg
 X01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOw0KICAgIH0N
 Cg0KICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogICAg
 aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgICAg
 aWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQ0KICAgICAgICBjb3B5KF9f
 cG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAgIC0t
 X01fZmluaXNoOw0KICAgICAgcmV0dXJuIF9fcG9zaXRpb247DQogICAgfQ0K
 ICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y
 IF9fbGFzdCkgew0KICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVu
 ZCgpLCBfX2ZpcnN0KTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0N
 CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBf
 X3ggPSBib29sKCkpIHsNCiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgp
 KQ0KICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
 bmV3X3NpemUpLCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2Vy
 dChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgICB9DQog
 ICAgdm9pZCBmbGlwKCkgew0KICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9f
 cCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsg
 KytfX3ApDQogICAgICAgICpfX3AgPSB+Kl9fcDsNCiAgICB9DQoNCiAgICB2
 b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0NCiAgfTsN
 Cg0KDQp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsN
 Cg0KfQ0KIyAzOSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy
 IDMNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9GYWNldD4NCiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29u
 c3QgbG9jYWxlJiBfX290aGVyKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX2Nv
 cHkoKnRoaXMpOw0KICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2Vf
 ZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7DQogICAgICBy
 ZXR1cm4gX19jb3B5Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg
 ICBib29sDQogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0
 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAg
 ICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlw
 ZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAg
 ICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNl
 dDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOw0KICAgICAgcmV0dXJuIChfX2Zj
 b2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEu
 bGVuZ3RoKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
 Mi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNv
 bnN0IF9GYWNldCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv
 YykNCiAgICB7DQogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVj
 X2ZhY2V0IF9fdmVjX2ZhY2V0Ow0KICAgICAgc2l6ZV90IF9faSA9IF9GYWNl
 dDo6aWQuX01faW5kZXg7DQogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9
 IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsNCiAgICAgIGNvbnN0IGxvY2Fs
 ZTo6ZmFjZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07DQogICAgICBpZiAo
 X19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpDQogICAgICAg
 IF9fdGhyb3dfYmFkX2Nhc3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2Fz
 dDxjb25zdCBfRmFjZXQmPigqX19mcCk7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNv
 bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICB0eXBl
 ZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0Ow0K
 ICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7DQogICAg
 ICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2Zh
 Y2V0czsNCiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYm
 ICgqX19mYWNldClbX19pXSAhPSAwKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJU
 Pg0KICAgIF9Jbkl0ZXINCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIg
 X19zLCBfSW5JdGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsDQogICAgICAgICAg
 ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJn
 ZXRzLA0KICAgICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGlu
 dCYgX19yZW1haW4sIGJvb2wmIF9fZW9mKQ0KICAgIHsNCiAgICAgIHR5cGVk
 ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCiAgICAg
 IF9fZW9mID0gZmFsc2U7DQogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190
 aSA8IF9fbnRhcmdzOyArK19fdGkpDQogICAgICAgIF9fbWF0Y2hlc1tfX3Rp
 XSA9IF9fdGk7DQogICAgICBfX3JlbWFpbiA9IF9fbnRhcmdzOw0KICAgICAg
 c2l6ZV90IF9fcG9zID0gMDsNCiAgICAgIGRvDQogICAgICAgIHsNCiAgICAg
 ICAgICBpbnQgX190aSA9IDA7DQogICAgICAgICAgd2hpbGUgKF9fdGkgPCBf
 X3JlbWFpbiAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGld
 XS5zaXplKCkpDQogICAgICAgICAgICArK19fdGk7DQogICAgICAgICAgaWYg
 KF9fdGkgPT0gX19yZW1haW4pDQogICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgIGlmIChfX3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7DQogICAgICAgICAg
 ICAgIHJldHVybiBfX3M7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYg
 KF9fcyA9PSBfX2VuZCkNCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsNCiAg
 ICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZhbHNlOw0KICAgICAgICAgIGZv
 ciAoaW50IF9fdGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBf
 X3RhcmdldCA9IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsNCiAgICAg
 ICAgICAgICAgaWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgpKQ0KICAgICAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBf
 X3RhcmdldFtfX3Bvc10gIT0gKl9fcykNCiAgICAgICAgICAgICAgICAgICAg
 ew0KICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBf
 X21hdGNoZXNbLS1fX3JlbWFpbl07DQogICAgICAgICAgICAgICAgICAgICAg
 Y29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
 ICAgICAgIF9fbWF0Y2hlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0K
 ICAgICAgICAgICAgICArK19fdGkyOw0KICAgICAgICAgICAgfQ0KICAgICAg
 ICAgIGlmIChfX21hdGNoZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgICsrX19zOw0KICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAgICAg
 ICAgfQ0KICAgICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBf
 X3JlbWFpbjspDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
 X3BvcyA+IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpDQog
 ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19tYXRjaGVz
 W19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsNCiAgICAgICAgICAg
 ICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
 ICAgICAgKytfX3RpMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg
 ICAgd2hpbGUgKF9fcmVtYWluKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfRm9ybWF0
 X2NhY2hlPF9DaGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQ0KICAgIDogX01fdmFs
 aWQodHJ1ZSksIF9NX3VzZV9ncm91cGluZyhmYWxzZSkNCiAgICB7IH0NCg0K
 ICB0ZW1wbGF0ZTw+DQogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6X0Zvcm1h
 dF9jYWNoZSgpOw0KDQogIHRlbXBsYXRlPD4NCiAgICBfRm9ybWF0X2NhY2hl
 PHdjaGFyX3Q+OjpfRm9ybWF0X2NhY2hlKCk7DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfRm9ybWF0X2NhY2hlPF9D
 aGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQ0KICAgIHsNCiAg
 ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOw0KICAgICAgbnVt
 cHVuY3Q8X0NoYXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5j
 dDxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX01fdHJ1ZW5hbWUgPSBfX25w
 LnRydWVuYW1lKCk7DQogICAgICBfTV9mYWxzZW5hbWUgPSBfX25wLmZhbHNl
 bmFtZSgpOw0KICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNh
 bmRzX3NlcCgpOw0KICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVj
 aW1hbF9wb2ludCgpOw0KICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3Vw
 aW5nKCk7DQogICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5z
 aXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsNCiAg
 ICAgIF9NX3ZhbGlkID0gdHJ1ZTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgX0Zvcm1hdF9jYWNo
 ZTxfQ2hhclQ+OjoNCiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQg
 X19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQ0KICAg
 IHsNCiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsNCiAg
 ICAgIHN3aXRjaCAoX19ldikNCiAgICAgICAgew0KICAgICAgICBjYXNlIGlv
 c19iYXNlOjplcmFzZV9ldmVudDoNCiAgICAgICAgICBkZWxldGUgc3RhdGlj
 X2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsNCiAgICAgICAg
 ICBfX3AgPSAwOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIGlv
 c19iYXNlOjpjb3B5Zm10X2V2ZW50Og0KDQogICAgICAgICAgdHJ5DQogICAg
 ICAgICAgICB7IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47IH0N
 CiAgICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAgICB7IH0NCiAgICAg
 ICAgICBicmVhazsNCiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZl
 bnQ6DQogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hh
 clQ+Kj4oX19wKS0+X01fdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICBicmVh
 azsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQ+DQogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kg0KICAgIF9Gb3Jt
 YXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykNCiAg
 ICB7DQogICAgICBpZiAoIV9TX3B3b3JkX2l4KQ0KICAgICAgICBfU19wd29y
 ZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsNCiAgICAgIHZvaWQqJiBfX3Ag
 PSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7DQoNCg0KICAgICAgaWYgKF9f
 cCA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgYXV0b19wdHI8X0Zvcm1h
 dF9jYWNoZTxfQ2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hh
 clQ+KTsNCiAgICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zv
 cm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7DQogICAgICAg
 ICAgX19wID0gX19hcC5yZWxlYXNlKCk7DQogICAgICAgIH0NCiAgICAgIF9G
 b3JtYXRfY2FjaGU8X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9y
 bWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOw0KICAgICAgaWYgKCFfX25jcC0+
 X01fdmFsaWQpDQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7
 DQoNCiAgICAgIHJldHVybiBfX25jcDsNCiAgICB9DQojIDI1MCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0
 cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfSW5JdGVyPg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
 SXRlcj46Og0KICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBp
 b3NfYmFzZSYgLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
 ICwgY2hhciogLA0KICAgICAgICAgICAgICAgaW50JiAsIGJvb2wgKSBjb25z
 dA0KICAgIHsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0K
 ICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+
 OjoNCiAgICBfTV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4g
 X19iZWcsDQogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNo
 YXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgIGlv
 c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9f
 YmFzZSwNCiAgICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7DQoNCg0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
 cj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
 OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
 bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9z
 dGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAg
 IGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0K
 ICAgICAgICB7DQoNCg0KDQoNCg0KDQogICAgICAgICAgY2hhciBfX3h0cmNb
 MzJdID0geydcMCd9Ow0KICAgICAgICAgIGludCBfX2Jhc2U7DQogICAgICAg
 ICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
 cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgICAgICBjaGFyKiBfX3Nh
 bml0eTsNCiAgICAgICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAg
 ICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh
 c2UpOw0KICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
 aXQpDQogICAgICAgICAgICAgICYmIF9fbCA8PSAxDQogICAgICAgICAgICAg
 ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
 JiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAgICAgIF9fdiA9IF9f
 bDsNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBfX2VyciB8PSBpb3Nf
 YmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGVsc2UNCiAg
 ICAgICAgew0KICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFy
 X3R5cGU+IF9fZmNhY2hlX3R5cGU7DQogICAgICAgICAgX19mY2FjaGVfdHlw
 ZSogX19mbXQgPSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7DQogICAg
 ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1
 ZW5hbWUuY19zdHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
 ZmFsc2UgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7DQogICAgICAg
 ICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxl
 bmd0aChfX3RydWUpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19m
 YWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7
 DQoNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9
 IF9fZW5kOyArK19fcG9zKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJv
 b2wgX190ZXN0ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsNCiAgICAgICAg
 ICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107DQog
 ICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpDQogICAg
 ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z
 X2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAg
 ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz
 dGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikNCiAgICAgICAgICAgICAgICB7
 DQogICAgICAgICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAg
 ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBl
 bHNlIGlmIChfX3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikNCiAgICAg
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAxOw0KICAg
 ICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAg
 ICAgICAgICAgfQ0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAg
 ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICAg
 IH0NCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAg
 IF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAg
 IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
 X2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
 X2Vyciwgc2hvcnQmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBj
 aGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQog
 ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
 eHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5p
 dHk7DQogICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgbG9uZyBf
 X2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAg
 ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAg
 ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
 JiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fbCA+PSAo
 LTMyNzY3LTEpICYmIF9fbCA8PSAzMjc2NykNCiAgICAgICAgX192ID0gc3Rh
 dGljX2Nhc3Q8c2hvcnQ+KF9fbCk7DQogICAgICBlbHNlDQogICAgICAgIF9f
 ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19i
 ZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh
 clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
 dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
 b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdA0KICAg
 IHsNCg0KDQoNCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsNCiAg
 ICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2Vu
 ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0K
 ICAgICAgY2hhciogX19zYW5pdHk7DQogICAgICAoKihfX19lcnJubygpKSkg
 PSAwOw0KICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5p
 dHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
 YWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAq
 X19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAg
 ICAgICAgICYmIF9fbCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAy
 MTQ3NDgzNjQ3KQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9f
 bCk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
 YWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K
 ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K
 ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
 aW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
 JiBfX2VyciwgbG9uZyYgX192KSBjb25zdA0KICAgIHsNCg0KDQoNCiAgICAg
 IGNoYXIgX194dHJjWzMyXT0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsN
 CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
 X194dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nh
 bml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBsb25n
 IF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsNCiAg
 ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAg
 ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
 ICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2w7
 DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
 Yml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA0NTAgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
 YWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh
 clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
 dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
 b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3Yp
 IGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7
 J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChf
 X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs
 c2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19f
 ZXJybm8oKSkpID0gMDsNCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0
 cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAo
 IShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9f
 c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihf
 X19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUp
 DQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf
 X3VsKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
 OmZhaWxiaXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K
 ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K
 ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
 aW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
 JiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0DQogICAgew0KDQoN
 Cg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQg
 X19iYXNlOw0KICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8s
 IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNo
 YXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAg
 ICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19z
 YW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
 OjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAm
 JiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0K
 ICAgICAgICAgICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAyVSArIDEpKQ0K
 ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwp
 Ow0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
 bGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
 X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
 ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
 YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
 ZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0K
 ICAgICAgY2hhciBfX3h0cmNbMzJdID0geydcMCd9Ow0KICAgICAgaW50IF9f
 YmFzZTsNCiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBf
 X2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFy
 KiBfX3Nhbml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAg
 ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2Fu
 aXR5LCBfX2Jhc2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
 ZmFpbGJpdCkNCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYg
 Kl9fc2FuaXR5ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApDQog
 ICAgICAgIF9fdiA9IF9fdWw7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJy
 IHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7
 DQogICAgfQ0KIyA1NTggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVy
 DQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQo
 aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
 X2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZs
 b2F0JiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0
 cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01f
 ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
 YmFzZSwgdHJ1ZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAg
 ICAoKihfX19lcnJubygpKSkgPSAwOw0KDQoNCg0KICAgICAgZmxvYXQgX19m
 ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0cnRvZChfX3h0cmMsICZfX3Nhbml0
 eSkpOw0KDQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
 KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
 dHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAg
 X192ID0gX19mOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3Nf
 YmFzZTo6ZmFpbGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
 ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
 Pjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
 ZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv
 c3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QNCiAgICB7DQoNCg0K
 DQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBf
 X2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
 X19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBjaGFy
 KiBfX3Nhbml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAg
 ICBkb3VibGUgX19kID0gc3RydG9kKF9feHRyYywgJl9fc2FuaXR5KTsNCiAg
 ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAg
 ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
 ICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2Q7
 DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
 Yml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA2NDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
 YWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh
 clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
 dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
 b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNv
 bnN0DQogICAgew0KDQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsN
 CiAgICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
 X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0K
 DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lv
 LmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgY29uc3Qg
 Y2hhciogX19jb252Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i
 YXNlOjpvY3QpDQogICAgICAgIF9fY29udiA9ICIlTG8iOw0KICAgICAgZWxz
 ZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAg
 X19jb252ID0gIiVMWCI7DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9
 PSAwKQ0KICAgICAgICBfX2NvbnYgPSAiJUxpIjsNCiAgICAgIGVsc2UNCiAg
 ICAgICAgX19jb252ID0gIiVMZyI7DQoNCg0KICAgICAgbG9uZyBkb3VibGUg
 X19sZDsNCiAgICAgIGludCBfX3AgPSBzc2NhbmYoX194dHJjLCBfX2NvbnYs
 ICZfX2xkKTsNCiAgICAgIGlmIChfX3ANCiAgICAgICAgICAmJiBzdGF0aWNf
 Y2FzdDx0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppbnRfdHlwZT4oX19wKQ0K
 ICAgICAgICAhPSBfX3RyYWl0c190eXBlOjplb2YoKSkNCiAgICAgICAgX192
 ID0gX19sZDsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
 c2U6OmZhaWxiaXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoN
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
 ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
 Pjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
 ZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv
 c3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdA0KICAgIHsNCg0KICAg
 ICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAg
 ICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsNCiAgICAgIGZtdGZs
 YWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFz
 ZTo6YmFzZWZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
 aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7DQog
 ICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNl
 OjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsNCg0KDQoNCg0KICAgICAg
 Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0K
 ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
 X3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2Fu
 aXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHZvaWQq
 IF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRy
 YywgJl9fc2FuaXR5LCBfX2Jhc2UpKTsNCiAgICAgIGlmICghKF9fZXJyICYg
 aW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g
 X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkp
 KSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX3ZwOw0KICAgICAgZWxzZQ0KICAg
 ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KDQogICAgICBf
 X2lvLmZsYWdzKF9fZm10KTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9
 DQoNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 T3V0SXRlcj4NCiAgICBpbmxpbmUgX091dEl0ZXINCiAgICBfX3BhZChfT3V0
 SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpOw0KDQog
 IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+
 DQogICAgX1JhSXRlcg0KICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQg
 X19maWxsLCBpbnQgX19wYWRkaW5nLA0KICAgICAgICAgIHJhbmRvbV9hY2Nl
 c3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZpbGxfbihfX3MsIF9f
 ZmlsbCk7DQogICAgICByZXR1cm4gX19zICsgX19wYWRkaW5nOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
 SXRlciwgdHlwZW5hbWUgX1RhZz4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFk
 KF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywg
 X1RhZykNCiAgICB7DQogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkg
 eyAqX19zID0gX19maWxsOyArK19fczsgfQ0KICAgICAgcmV0dXJuIF9fczsN
 CiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX091dEl0ZXI+DQogICAgaW5saW5lIF9PdXRJdGVyDQogICAgX19wYWQo
 X091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQ0K
 ICAgIHsNCiAgICAgIHJldHVybiBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRk
 aW5nLA0KICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
 YWl0czxfT3V0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
 SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFkX251bWVyaWMoX091dEl0
 ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLA0KICAgICAgICAgICAgICAg
 ICAgX0NoYXJUICwgaW50ICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBj
 b25zdCogLCBfQ2hhclQgY29uc3QqICwNCiAgICAgICAgICAgICAgICAgIF9D
 aGFyVCBjb25zdCogKQ0KICB7DQoNCiAgICAgIHJldHVybiBfX3M7DQogICAg
 fQ0KDQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBvc3Ry
 ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4NCiAgICBfX3BhZF9udW1lcmljKG9z
 dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRm
 bGFncyBfX2ZsYWdzLA0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmls
 bCwgaW50IF9fd2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBj
 b25zdCogX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1
 Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fb3V0X2l0ZXI7DQogICAgICBpbnQgX19w
 YWRkaW5nID0gX193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICAg
 IGlmIChfX3BhZGRpbmcgPCAwKQ0KICAgICAgICBfX3BhZGRpbmcgPSAwOw0K
 ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAm
 IGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAgICAgIGJvb2wgX190ZXN0Zmll
 bGQgPSBfX3BhZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6
 bGVmdA0KICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09
 IGlvc19iYXNlOjppbnRlcm5hbDsNCg0KDQogICAgICBpZiAoX19maXJzdCAh
 PSBfX21pZGRsZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX190ZXN0
 ZmllbGQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fcGFkKF9f
 cywgX19maWxsLCBfX3BhZGRpbmcpOw0KICAgICAgICAgICAgICBfX3BhZGRp
 bmcgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNvcHkoX19maXJz
 dCwgX19taWRkbGUsIF9fcyk7DQogICAgICAgIH0NCiAgICAgIF9fb3V0X2l0
 ZXIgX19zMiA9IF9fczsNCg0KICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2Fm
 bGFncyAhPSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KICAgICAgICAg
 IF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBf
 X3BhZGRpbmcgPSAwOw0KICAgICAgICB9DQogICAgICBfX291dF9pdGVyIF9f
 czMgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOw0KICAgICAgaWYg
 KF9fcGFkZGluZykNCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3Bh
 ZGRpbmcpOw0KICAgICAgcmV0dXJuIF9fczM7DQogICAgfQ0KDQogIHRlbXBs
 YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAg
 IF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQog
 ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy
 X3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QNCiAgICB7DQogICAgICBj
 b25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9j
 YWNoZTxfQ2hhclQ+OjpfU19nZXQoX19pbyk7DQogICAgICBpb3NfYmFzZTo6
 Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsNCg0KICAgICAgaWYg
 KChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAg
 ICAgew0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAg
 ICAgICAgICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9f
 ZmlsbCwgZmFsc2UsIF9fdXYpOw0KICAgICAgICB9DQogICAgICBlbHNlDQog
 ICAgICAgIHsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7
 DQogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7DQogICAgICAg
 ICAgaWYgKF9fdikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19m
 aXJzdCA9IF9fZm10LT5fTV90cnVlbmFtZS5kYXRhKCk7DQogICAgICAgICAg
 ICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6
 ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxz
 ZW5hbWUuZGF0YSgpOw0KICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0
 ICsgX19mbXQtPl9NX2ZhbHNlbmFtZS5zaXplKCk7DQogICAgICAgICAgICB9
 DQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7DQogICAg
 ICAgIH0NCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAg
 dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQqDQogICAg
 X19ncm91cF9kaWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBj
 aGFyIGNvbnN0KiBfX2dyb3VwaW5nLA0KICAgICAgICAgICAgICAgICAgICBj
 aGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsDQog
 ICAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQ0KICAg
 IHsNCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcp
 DQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhf
 X3MsIF9fZ3JzZXAsDQogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9
 PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwNCiAg
 ICAgICAgICAgICAgX19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3Jv
 dXBpbmcpOw0KICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91
 cGluZzsNCiAgICAgICAgICAqX19zKysgPSBfX2dyc2VwOw0KICAgICAgICB9
 DQogICAgICBkbw0KICAgICAgICB7DQogICAgICAgICAgKl9fcysrID0gKl9f
 Zmlyc3QrKzsNCiAgICAgICAgfQ0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g
 X19sYXN0KTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBs
 YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBl
 bmFtZSBfVmFsdWVUPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfaW50
 ZWdlcihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m
 aWxsLCBib29sIF9fbmVnLA0KICAgICAgICAgICAgICBfVmFsdWVUIF9fdikN
 CiAgICB7DQoNCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNf
 bGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0Ow0KICAgICAgX0No
 YXJUIF9fZGlnaXRzW19NX3Jvb21dOw0KICAgICAgX0NoYXJUKiBfX2Zyb250
 ID0gX19kaWdpdHMgKyBfTV9yb29tOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZs
 YWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBjb25zdCBfRm9y
 bWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh
 clQ+OjpfU19nZXQoX19pbyk7DQogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxl
 ID0gX19mbXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsNCg0K
 ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxh
 Z3MgJiBfX2lvLmJhc2VmaWVsZCk7DQogICAgICBfQ2hhclQqIF9fc2lnbl9l
 bmQgPSBfX2Zyb250Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i
 YXNlOjpoZXgpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19mbGFncyAm
 IGlvc19iYXNlOjp1cHBlcmNhc2UpDQogICAgICAgICAgICBfX3RhYmxlICs9
 IDE2Ow0KICAgICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0g
 X190YWJsZVtfX3YgJiAxNV07DQogICAgICAgICAgd2hpbGUgKChfX3YgPj49
 IDQpICE9IDApOw0KICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Ow0K
 ICAgICAgICAgIGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQ0K
 ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19m
 bXQtPl9TX2xpdGVyYWxzW19fZm10LT5fU194ICsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAx
 IDogMCldOw0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVsw
 XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAo
 X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAgICAgew0KICAg
 ICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtf
 X3YgJiA3XTsNCiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7
 DQogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UN
 CiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQp
 ICE9IF9fdGFibGVbMF0pDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190
 YWJsZVswXTsNCiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCiAg
 ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBk
 bw0KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBd
 Ow0KICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsNCiAgICAg
 ICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCg0KICAgICAgICAgIGlmIChf
 X25lZyB8fCAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkNCiAgICAg
 ICAgICAgICotLV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQt
 Pl9TX3BsdXMgLSBfX25lZ107DQogICAgICAgIH0NCg0KDQogICAgICBpZiAo
 IV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkNCiAg
 ICAgICAgcmV0dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29t
 LCBfX3MpOw0KDQogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcp
 DQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywg
 X19maWxsLCBfX2lvLndpZHRoKDApLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfX2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jv
 b20pOw0KDQogICAgICBfQ2hhclQqIF9fcCA9IF9fZGlnaXRzOw0KICAgICAg
 d2hpbGUgKF9fZnJvbnQgPCBfX3NpZ25fZW5kKQ0KICAgICAgICAqX19wKysg
 PSAqX19mcm9udCsrOw0KICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10
 LT5fTV9ncm91cGluZy5kYXRhKCk7DQogICAgICBfX2Zyb250ID0gX19ncm91
 cF9kaWdpdHMoX19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwN
 CiAgICAgICAgX19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9f
 c2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7DQogICAgICByZXR1cm4g
 X19wYWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0
 aCgwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBf
 X3AsIF9fZnJvbnQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAg
 IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVy
 X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg
 bG9uZyBfX3YpIGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBf
 X3V2ID0gX192Ow0KICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOw0KICAgICAg
 aWYgKF9fdiA8IDApDQogICAgICAgIHsNCiAgICAgICAgICBfX25lZyA9IHRy
 dWU7DQogICAgICAgICAgX191diA9IC1fX3V2Ow0KICAgICAgICB9DQogICAg
 ICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwg
 X19uZWcsIF9fdXYpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAg
 IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVy
 X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwN
 CiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0DQogICAgeyBy
 ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs
 c2UsIF9fdik7IH0NCiMgOTY3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
 IF9PdXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfZmxvYXQo
 X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwN
 CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXpl
 X3QgX19zbGVuKQ0KICAgIHsNCg0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9
 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
 dHM+DQogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxf
 Q2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg
 ICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRy
 LCBzaXplX3QgX19zbGVuKQ0KICAgIHsNCiAgICAgIHNpemVfdCBfX3BhZGRp
 bmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDog
 MDsNCiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAg
 ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBl
 PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
 X19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3Rm
 aWVsZDsNCiAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0ciA9IF9fc3B0
 ciArIF9fc2xlbjsNCg0KICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jh
 c2U6OmludGVybmFsKQ0KICAgICAgIHsNCg0KICAgICAgICAgaWYgKF9fc3B0
 ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9PSAn
 LScpKQ0KICAgICAgICAgICB7DQogICAgICAgICAgICAgX19zID0gX19jdC53
 aWRlbigqX19zcHRyKTsNCiAgICAgICAgICAgICArK19fczsNCiAgICAgICAg
 ICAgICArK19fc3B0cjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgX19zID0g
 X19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7DQogICAgICAgICBfX3Bh
 ZGRpbmcgPSAwOw0KICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRqZmll
 bGQgIT0gaW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCiAgICAgICAgICBf
 X3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAg
 ICBfX3BhZGRpbmcgPSAwOw0KICAgICAgICB9DQoNCiAgICAgIGNoYXIgX19k
 ZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQp
 Ow0KICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9
 IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOw0KICAgICAg
 Zm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikNCiAg
 ICAgICB7DQoNCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9w
 b2ludCkNCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9p
 bnQ7DQoNCiAgICAgICAgIGVsc2UNCiAgICAgICAgICAgX19zID0gX19jdC53
 aWRlbigqX19zcHRyKTsNCiAgICAgICB9DQoNCiAgICAgIGlmIChfX3BhZGRp
 bmcpDQogICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOw0K
 ICAgICAgX19pby53aWR0aCgwKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg
 fQ0KDQogIGJvb2wNCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2Um
 IF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLA0KICAgICAg
 ICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCiAgdGVt
 cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQog
 ICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoN
 CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNo
 YXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgew0KICAg
 ICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1p
 dHM8ZG91YmxlPjo6ZGlnaXRzMTAgKyAzOw0KICAgICAgc3RyZWFtc2l6ZSBf
 X3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOw0KDQogICAgICBpZiAoX19wcmVj
 ID4gX19tYXhfcHJlYykNCiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsN
 Cg0KICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOw0KICAgICAg
 c2l6ZV90IF9fc2xlbjsNCg0KICAgICAgY2hhciBfX2ZidWZbMTZdOw0KICAg
 ICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwg
 X19wcmVjKSkNCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9f
 ZmJ1ZiwgX19wcmVjLCBfX3YpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3Ns
 ZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOw0KDQogICAgICBy
 ZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1
 ZiwgX19zbGVuKTsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBu
 dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90
 eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQog
 ICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQogICAg
 ICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0
 czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsNCiAgICAgIHN0cmVhbXNp
 emUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsNCg0KICAgICAgaWYgKF9f
 cHJlYyA+IF9fbWF4X3ByZWMpDQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3By
 ZWM7DQoNCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAyXTsNCiAg
 ICAgIHNpemVfdCBfX3NsZW47DQoNCiAgICAgIGNoYXIgX19mYnVmWzE2XTsN
 Cg0KICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1
 ZiwgJ0wnLCBfX3ByZWMpKQ0KICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9f
 c2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAg
 ICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7DQoN
 CiAgICAgIHJldHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmls
 bCwgX19zYnVmLCBfX3NsZW4pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRl
 cg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1
 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
 ZmlsbCwNCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAg
 IHsNCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdz
 Ow0KICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7DQogICAg
 ICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg
 aW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJu
 YWwpOw0KICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChp
 b3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7DQogICAgICB0
 cnkgew0KICAgICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50ZWdl
 cihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
 b25nPihfX3YpKTsNCiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQogICAg
 ICAgIHJldHVybiBfX3MyOw0KICAgICAgfQ0KICAgICAgY2F0Y2ggKC4uLikg
 ew0KICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsNCiAgICAgICAgdGhyb3c7
 DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+DQogICAgc3RydWN0
 IF9XZWVrZGF5bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15
 Pg0KICAgIHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4NCiAg
 ICB7IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1sxNF07IH07
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNo
 YXIqIGNvbnN0DQogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVtbXk+Ojpf
 U19uYW1lc1sxNF0gPQ0KICAgIHsNCiAgICAgICJTdW4iLCAiU3VuZGF5IiwN
 CiAgICAgICJNb24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldl
 ZCIsICJXZWRuZXNkYXkiLA0KICAgICAgIlRodSIsICJUaHVyc2RheSIsICJG
 cmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSINCiAgICB9Ow0KIyAx
 MTM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9s
 b2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4NCiAgICBzdHJ1Y3QgX01vbnRo
 bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0
 cnVjdCBfTW9udGhuYW1lczxjaGFyLF9EdW1teT4NCiAgICB7IHN0YXRpYyBj
 b25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1syNF07IH07DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0DQog
 ICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQ0K
 ICAgIHsNCiAgICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVh
 cnkiLCAiTWFyIiwgIk1hcmNoIiwNCiAgICAgICJBcHIiLCAiQXByaWwiLCAi
 TWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsDQogICAgICAiSnVsIiwgIkp1
 bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwNCiAg
 ICAgICJPY3QiLCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVj
 IiwgIkRlY2VtYmVyIg0KICAgIH07DQojIDExNjggIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAz
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
 cj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
 Pjo6DQogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90
 eXBlIF9fZW5kLA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lv
 LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQog
 ICAgew0KICAgICAgaWYgKCFfTV9kYXluYW1lcykNCiAgICAgICAgew0KICAg
 ICAgICAgIF9NX2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+
 WzE0XTsNCiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsg
 KytfX2kpDQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtk
 YXluYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOw0KICAgICAgICB9DQog
 ICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7DQogICAgICBpbnQgX19yZW1h
 aW4gPSAwOw0KICAgICAgaW50IF9fbWF0Y2hlc1sxNF07DQogICAgICBpdGVy
 X3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0
 LCBfTV9kYXluYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0K
 ICAgICAgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlm
 IChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAo
 X19yZW1haW4gPT0gMSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYg
 KF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAg
 ICAgIF9fdC0+dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOw0KICAgICAg
 ZWxzZQ0KICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7DQogICAgICBy
 ZXR1cm4gX19vdXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGlt
 ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X21vbnRobmFt
 ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsDQogICAgICAgICAg
 ICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm
 IF9fZXJyLCB0bSogX190KSBjb25zdA0KICAgIHsNCiAgICAgIGlmICghX01f
 bW9udGhuYW1lcykNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vbnRobmFt
 ZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOw0KICAgICAgICAg
 IGZvciAoaW50IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkNCiAgICAgICAg
 ICAgIF9NX21vbnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46
 Ol9TX25hbWVzW19faV07DQogICAgICAgIH0NCiAgICAgIGJvb2wgX19hdF9l
 b2YgPSBmYWxzZTsNCiAgICAgIGludCBfX3JlbWFpbiA9IDA7DQogICAgICBp
 bnQgX19tYXRjaGVzWzI0XTsNCiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9f
 bWF0Y2hfcGFyYWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVz
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19lcnIg
 PSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2VvZikg
 X19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4gPT0g
 MSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1sw
 XT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+dG1f
 bW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7DQogICAgICBlbHNlDQogICAgICAg
 IF9fZXJyIHw9IF9faW8uZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX291dDsN
 CiAgICB9DQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDIg
 Mw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6DQogICAgc2VudHJ5KGJhc2ljX29z
 dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQ0KICAgIDogX01fb2soX19v
 cy5nb29kKCkpLCBfTV9vcyhfX29zKQ0KICAgIHsNCg0KICAgICAgaWYgKF9N
 X29rICYmIF9fb3MudGllKCkpDQogICAgICAgIF9fb3MudGllKCktPmZsdXNo
 KCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
 CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0
 cmVhbV90eXBlJikpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
 cyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAg
 dHJ5DQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAg
 Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0K
 ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
 KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
 b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93
 Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRo
 aXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
 CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
 ZSYpKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg
 ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAg
 ICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4
 Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg
 ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg
 ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
 OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAg
 ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAg
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
 ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3Bl
 cmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQ0KICAgIHsN
 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2Vy
 YikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyBf
 X3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
 YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
 ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
 MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29z
 dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikN
 CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlm
 IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
 dW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo
 KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog
 ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp
 b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg
 IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg
 ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
 aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg
 ICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi
 YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9u
 ZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
 ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0
 aGlzLT5maWxsKCk7DQogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn
 cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk
 Ow0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1
 dCkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgYm9v
 bCBfX2IgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAm
 IGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQ0KICAg
 ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgdW5z
 aWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihf
 X24pOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQt
 PnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsNCiAgICAg
 ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg
 ICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
 ICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7DQogICAgICAgICAgICAgICAg
 ICBpZiAoX19iKQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAg
 ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
 DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
 dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K
 ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg
 ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
 Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcg
 X19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg
 ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAg
 ICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
 X01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQt
 PnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQo
 KSkNCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
 OjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4
 Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg
 ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg
 ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
 OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAg
 ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAg
 IH0NCiMgMjY0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9vc3RyZWFtLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
 aXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQ0KICAgIHsNCiAgICAgIHNl
 bnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAg
 ICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAg
 ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAg
 ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
 aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAg
 IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg
 ICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg
 ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
 aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+
 ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAg
 ICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0K
 ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No
 YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pDQog
 ICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAo
 X19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAg
 ICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
 cHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0
 aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAg
 ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
 dCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
 JiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0
 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAg
 ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
 KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAg
 fQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
 CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz
 aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0
 IHZvaWQqIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
 X2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9m
 bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbiku
 ZmFpbGVkKCkpDQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBj
 YXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQog
 ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
 Ow0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
 c19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7
 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhp
 czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
 aXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
 ZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQ0KICAgIHsNCiAg
 ICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAgICBfX3N0cmVhbWJ1
 Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgIHNlbnRy
 eSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fc2JpbiAmJiBfX2NlcmIp
 DQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywg
 X19zYmluLCBfX3Nib3V0KTsNCiAgICAgIGlmICghX19zYmluIHx8ICFfX3h0
 cmN0KQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
 dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
 Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykNCiAgICB7
 DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2Nl
 cmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJk
 YnVmKCktPnNwdXRjKF9fYyk7DQogICAgICAgICAgaWYgKF9fcHV0ICE9IHRy
 YWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKQ0KICAgICAgICAgICAgdGhp
 cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgIH0NCiAg
 ICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
 VCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1z
 aXplIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsN
 CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzdHJl
 YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24p
 Ow0KICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQ0KICAgICAgICAgICAg
 dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgIH0N
 CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29z
 dHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz46OmZsdXNoKCkNCiAgICB7DQogICAgICBzZW50cnkg
 X19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN
 CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1Zigp
 LT5wdWJzeW5jKCkgPT0gLTEpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
 ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX29zdHJl
 YW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQ0KICAgIHsNCiAgICAgIHBv
 c190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgYm9vbCBfX3Rl
 c3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOw0KDQogICAgICBpZiAoX190
 ZXN0b2spDQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl
 a29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsNCiAgICAg
 IHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAg
 ICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOw0KDQog
 ICAgICBpZiAoX190ZXN0b2spDQogICAgICAgIHsNCg0KDQogICAgICAgICAg
 cG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9f
 cG9zLCBpb3NfYmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJy
 ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlz
 LT5zZXRzdGF0ZShmYWlsYml0KTsNCg0KICAgICAgICB9DQogICAgICByZXR1
 cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
 VCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
 dHM+OjoNCiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNl
 ZWtkaXIgX19kKQ0KICAgIHsNCiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlz
 LT5mYWlsKCkgIT0gdHJ1ZTsNCg0KICAgICAgaWYgKF9fdGVzdG9rKQ0KICAg
 ICAgICB7DQoNCg0KICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+
 cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nf
 YmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190
 eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
 ZShmYWlsYml0KTsNCiAgICAgICAgfQ0KDQogICAgICByZXR1cm4gKnRoaXM7
 DQogICAgfQ0KIyA0NTcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL29zdHJlYW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgX19w
 YWRfY2hhcihiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsDQog
 ICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBf
 X29sZHMsDQogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3
 bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQ0KICAgIHsNCiAgICAg
 IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1Ry
 YWl0cyB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh
 aXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOw0KDQogICAgICBpbnRfdHlw
 ZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19v
 bGRsZW4pOw0KICAgICAgY2hhcl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2Fz
 dDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5
 cGUpICogX19wbGVuKSk7DQogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f
 cGFkcywgX19wbGVuLCBfX2lvcy5maWxsKCkpOw0KDQogICAgICBjaGFyX3R5
 cGUqIF9fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfX2VuZDsNCiAgICAgIHNp
 emVfdCBfX21vZCA9IDA7DQogICAgICBzaXplX3QgX19iZWdsZW47DQogICAg
 ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5mbGFncygpICYg
 aW9zX2Jhc2U6OmFkanVzdGZpZWxkOw0KDQogICAgICBpZiAoX19mbXQgPT0g
 aW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCg0KICAgICAgICAgIF9fYmVn
 ID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOw0KICAgICAgICAg
 IF9fYmVnbGVuID0gX19vbGRsZW47DQogICAgICAgICAgX19lbmQgPSBfX3Bh
 ZHM7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19i
 YXNlOjppbnRlcm5hbCkNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIHR5
 cGVkZWYgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsNCiAg
 ICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10ID0gX19jYWNoZV90
 eXBlOjpfU19nZXQoX19pb3MpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
 ZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRs
 ZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX19mbXQtPl9TX21pbnVzKTsNCiAgICAgICAgICBj
 b25zdCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpmaW5kKF9f
 b2xkcywgX19vbGRsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7DQog
 ICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX19taW51cyB8fCBfX3BsdXM7
 DQogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29sZHNbMF0gPT0gJzAn
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19vbGRzWzFdID09
 ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsNCg0KICAgICAgICAgIGlmIChf
 X3Rlc3RoZXgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fbmV3
 c1swXSA9IF9fb2xkc1swXTsNCiAgICAgICAgICAgICAgX19uZXdzWzFdID0g
 X19vbGRzWzFdOw0KICAgICAgICAgICAgICBfX21vZCArPSAyOw0KICAgICAg
 ICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRz
 ICsgX19tb2QpOw0KICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVu
 IC0gX19tb2Q7DQogICAgICAgICAgICAgIF9fZW5kID0gX19wYWRzOw0KICAg
 ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pDQog
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fbW9kICs9IF9fcGxlbjsN
 CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX21p
 bnVzID8gX19taW51cyArIDE6IF9fcGx1cyArIDE7DQogICAgICAgICAgICAg
 IF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOw0KICAg
 ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fc2lnbiAtIF9fb2xkczsNCiAgICAg
 ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fc2ln
 biArIF9fcGxlbik7DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
 KF9fbmV3cyArIF9fYmVnbGVuLCBfX3BhZHMsIF9fcGxlbik7DQogICAgICAg
 ICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQogICAg
 ICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2Jl
 Z2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j
 YXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAgICAgICB9DQogICAg
 ICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KDQogICAgICAgICAgX19i
 ZWcgPSBfX3BhZHM7DQogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQog
 ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xk
 cyk7DQogICAgICAgIH0NCg0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19u
 ZXdzLCBfX2JlZywgX19iZWdsZW4pOw0KICAgICAgdHJhaXRzX3R5cGU6OmNv
 cHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVn
 bGVuIC0gX19tb2QpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykNCiAgICB7
 DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90
 eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIp
 DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0K
 ICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D
 aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cp
 KTsNCiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOw0KICAgICAgICAg
 ICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsNCiAgICAgICAgICAgICAgaWYg
 KF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
 ICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgJl9fYywgX193LCBf
 X2xlbik7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAg
 ICAgICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFk
 cywgX19sZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAg
 ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
 bCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNl
 dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAo
 KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
 DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAg
 ICAgIH0NCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1w
 bGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIs
 IF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy
 LCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsNCiAgICAgIHR5
 cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1f
 dHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg
 X19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN
 CiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
 c3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAg
 ICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu
 X2FsbG9jYShfX3cgKyAxKSk7DQogICAgICAgICAgICAgIF9fcGFkc1swXSA9
 IF9fYzsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7DQog
 ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAg
 ICB7DQogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3Bh
 ZHMsICZfX2MsIF9fdywgX19sZW4pOw0KICAgICAgICAgICAgICAgICAgX19s
 ZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBf
 X291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19v
 dXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19vdXQ7DQog
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
 dHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgew0KICAgICAg
 dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
 ZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu
 dHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAg
 ICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
 X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7DQogICAg
 ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJl
 YW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQogICAgICAgICAgICAg
 IGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg
 ICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193
 LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQog
 ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAg
 ICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOw0K
 ICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0N
 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
 ICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
 YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2Vw
 dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg
 ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
 IHJldHVybiBfX291dDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykN
 CiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
 VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCg0KDQogICAgICB0eXBlZGVmIGNo
 YXJfdHJhaXRzPGNoYXI+IF9fY3RyYWl0c190eXBlOw0KDQogICAgICB0eXBl
 bmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQog
 ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90
 IF9fY2xlbiA9IF9fY3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAg
 ICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1
 aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7
 DQogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fY2xl
 bjsgKytfX2kpDQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRl
 bihfX3NbX19pXSk7DQogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7
 DQoNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
 ICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+
 KF9fY2xlbik7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v
 dXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBz
 dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf
 Q2hhclQpICogX193KSk7DQoNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9f
 bGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9f
 cGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX193cywgX193LCBfX2xlbik7DQog
 ICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsNCiAgICAgICAgICAg
 ICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAg
 ICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsNCiAgICAgICAg
 ICAgICAgX19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 X19vdXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4N
 CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJh
 dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv
 bnN0IGNoYXIqIF9fcykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29z
 dHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQogICAgICB0
 eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
 DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5
 DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193
 ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRz
 ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7
 DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2Fz
 dDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQogICAgICAg
 ICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQog
 ICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9f
 cywgX193LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBfX3MgPSBfX3Bh
 ZHM7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAg
 ICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s
 ZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAg
 ICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg
 ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
 KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0
 LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg
 ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N
 CiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
 bGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
 ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
 IF9fb3V0LA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpDQogICAgew0KICAgICAg
 dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
 ZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu
 dHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
 ICB7DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRh
 KCk7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgp
 Ow0KICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No
 YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykp
 Ow0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz
 dHJlYW1zaXplPihfX3N0ci5zaXplKCkpOw0KDQoNCg0KICAgICAgICAgIGlm
 IChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
 X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOw0K
 ICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9f
 bGVuID0gX193Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHN0cmVhbXNp
 emUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsN
 CiAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICBpZiAoX19y
 ZXMgIT0gX19sZW4pDQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf
 YmFzZTo6ZmFpbGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291
 dDsNCiAgICB9DQp9DQojIDI3OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzDQojIDQxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl
 YW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIg
 Mw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9pb3MuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z
 b2xhcmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMNCiMgNDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt
 LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJh
 c2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJU
 LCBfVHJhaXRzPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVk
 ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
 X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5
 cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlw
 ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCg0KDQogICAgICB0
 eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3Ry
 ZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQs
 IF9UcmFpdHM+IF9faW9zX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAgICAg
 IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
 IF9faXN0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D
 aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7DQogICAg
 ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOw0KDQogICAg
 cHJvdGVjdGVkOg0KDQogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsNCg0K
 ICAgIHB1YmxpYzoNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX2lz
 dHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikNCiAgICAgIHsNCiAgICAg
 ICAgdGhpcy0+aW5pdChfX3NiKTsNCiAgICAgICAgX01fZ2NvdW50ID0gc3Ry
 ZWFtc2l6ZSgwKTsNCiAgICAgIH0NCg0KICAgICAgdmlydHVhbA0KICAgICAg
 fmJhc2ljX2lzdHJlYW0oKQ0KICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1z
 aXplKDApOyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAgZnJp
 ZW5kIGNsYXNzIHNlbnRyeTsNCg0KDQoNCiAgICAgIF9faXN0cmVhbV90eXBl
 Jg0KICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShf
 X2lzdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog
 ICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
 ZSYpKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRv
 cj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOw0KDQoNCiAgICAg
 IF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24p
 Ow0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4o
 c2hvcnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg
 b3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsNCg0KICAgICAgX19p
 c3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsNCg0K
 ICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHVuc2ln
 bmVkIGludCYgX19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAg
 ICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90
 eXBlJg0KICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOw0K
 IyAxMjYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9pc3RyZWFtLmgiIDMNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAg
 ICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsNCg0KICAgICAgX19pc3RyZWFt
 X3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsNCg0KICAg
 ICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91
 YmxlJiBfX2YpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9w
 ZXJhdG9yPj4odm9pZComIF9fcCk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBl
 Jg0KICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsN
 Cg0KDQogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgICAgZ2NvdW50KHZv
 aWQpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0NCg0KICAg
 ICAgaW50X3R5cGUNCiAgICAgIGdldCh2b2lkKTsNCg0KICAgICAgX19pc3Ry
 ZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOw0KDQogICAg
 ICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywg
 c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAg
 aW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KGNoYXJfdHlwZSog
 X19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJuIGdldChfX3Ms
 IF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0cmVh
 bV90eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNo
 YXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90
 eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpDQogICAg
 ICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoN
 CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShjaGFyX3R5
 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsN
 Cg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGlu
 ZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJl
 dHVybiBnZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0N
 Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBpZ25vcmUoc3RyZWFt
 c2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6
 OmVvZigpKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHBlZWsodm9pZCk7
 DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgcmVhZChjaGFyX3R5
 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICBzdHJlYW1zaXpl
 DQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
 X24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHB1dGJhY2so
 Y2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAg
 ICAgdW5nZXQodm9pZCk7DQoNCiAgICAgIGludA0KICAgICAgc3luYyh2b2lk
 KTsNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRlbGxnKHZvaWQpOw0KDQog
 ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKHBvc190eXBlKTsN
 Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBzZWVrZyhvZmZfdHlw
 ZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOw0KDQogICAgcHJpdmF0ZToNCg0KDQog
 ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBf
 X2lzdHJlYW1fdHlwZSYpOw0KDQogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0
 IF9faXN0cmVhbV90eXBlJik7DQoNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBi
 YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsN
 CiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
 cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
 cmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj
 X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0
 eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu
 dF90eXBlIF9faW50X3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBz
 ZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBi
 b29sIF9fbm9za2lwd3MgPSBmYWxzZSk7DQoNCiAgICAgIG9wZXJhdG9yIGJv
 b2woKSB7IHJldHVybiBfTV9vazsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAg
 IGJvb2wgX01fb2s7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFt
 PF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsNCg0K
 ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08
 Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
 PGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpDQog
 ICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4o
 X19jKSk7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJh
 c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+Pihi
 YXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hh
 ciYgX19jKQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nh
 c3Q8Y2hhciY+KF9fYykpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No
 YXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOw0KDQogIHRl
 bXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxjaGFy
 LF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFy
 LF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyBy
 ZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7
 IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lz
 dHJlYW08Y2hhcixfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
 dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykN
 CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIq
 PihfX3MpKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtDQog
 ICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LA0K
 ICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPg0K
 ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAg
 dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
 ZWFtX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pb3N0
 cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikN
 CiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBl
 KF9fc2IpDQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJh
 c2ljX2lvc3RyZWFtKCkgeyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p
 c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgd3MoYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsNCn0NCg0KDQoNCg0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFt
 LnRjYyIgMSAzDQojIDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9pc3RyZWFtLnRjYyIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMw0K
 IyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 aXN0cmVhbS50Y2MiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgMzQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0u
 dGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShi
 YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u
 b3NraXB3cykNCiAgICB7DQogICAgICBpZiAoX19pbi5nb29kKCkpDQogICAg
 ICAgIHsNCiAgICAgICAgICBpZiAoX19pbi50aWUoKSkNCiAgICAgICAgICAg
 IF9faW4udGllKCktPmZsdXNoKCk7DQogICAgICAgICAgaWYgKCFfX25vc2tp
 cHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkNCiAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
 X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAgICAgY29u
 c3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBl
 X2lvcygpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
 ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9f
 YyA9IF9fc2ItPnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
 YyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg
 X19jKSkNCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsN
 Cg0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAg
 ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K
 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgaWYgKF9faW4u
 Z29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNlDQog
 ICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAg
 IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9
 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
 ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh
 bV90eXBlJikpDQogICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICBy
 ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko
 X19pb3NfdHlwZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
 ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm
 KShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
 ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAg
 ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg
 aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
 ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0K
 ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
 aXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
 ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhj
 ZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg
 ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg
 ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAg
 ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
 ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
 YXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
 YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
 KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
 ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
 dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
 ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
 ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
 ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
 eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
 ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
 ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
 JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
 c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
 IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
 b29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
 X2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
 dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0
 aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 OjoNCiAgICBvcGVyYXRvcj4+KGludCYgX19uKQ0KICAgIHsNCiAgICAgIHNl
 bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
 DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
 ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
 IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
 ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
 X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
 ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
 YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
 ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
 MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNp
 Z25lZCBpbnQmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0
 aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog
 ICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlv
 c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
 X2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
 ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdl
 dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAg
 ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0N
 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
 ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
 YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
 dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg
 ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
 IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0KICAgIHsN
 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlm
 IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
 PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAg
 ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAg
 ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
 LCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
 X19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
 dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
 ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
 ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
 ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
 ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg
 IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0
 b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5
 IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
 ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg
 ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
 b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYg
 KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAg
 IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
 Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAg
 ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
 DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
 dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K
 ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg
 ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAzNDQgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj
 IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
 ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
 YXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
 YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
 KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
 ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
 dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
 ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
 ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
 ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
 eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
 ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
 ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQ0K
 ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAg
 ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg
 X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
 DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
 KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
 ICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0
 c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo
 KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg
 ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog
 ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
 c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg
 ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg
 b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQ0KICAgIHsNCiAgICAgIHNl
 bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
 DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
 ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
 IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
 ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
 X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
 ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
 YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
 ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
 MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih2b2lk
 KiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
 bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
 ICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
 Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
 TV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
 KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAg
 dGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAg
 ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0K
 DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
 ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
 ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0
 aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
 ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
 IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 Pjo6DQogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0
 KQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAg
 ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOw0K
 ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg
 KF9fc2JvdXQgJiYgX19jZXJiKQ0KICAgICAgICBfX3h0cmN0ID0gX19jb3B5
 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7DQogICAgICBp
 ZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 Pjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGludF90
 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5
 cGUgX19jID0gX19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg
 c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJi
 KQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQog
 ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOw0K
 DQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAg
 ICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAg
 ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg
 fCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
 DQogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQ0KICAgIHsNCiAgICAgIF9NX2dj
 b3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsN
 CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN
 CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
 X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIGlu
 dF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7DQoN
 CiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQ0KICAgICAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7
 DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
 cl90eXBlKF9fYnVmdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg
 ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
 ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
 ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
 dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
 cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
 ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
 aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz
 dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAg
 ICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
 IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAxKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv
 X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgICAgICBjb25zdCBpbnRf
 dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg
 ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQog
 ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0K
 ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
 bGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf
 X2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19u
 IC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAg
 ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf
 dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICAr
 K19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
 dW1wYygpOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09
 IF9fZW9mOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
 PT0gX19pZGVsaW07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
 ICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpDQog
 ICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7DQogICAgICAg
 ICAgICAgIGlmIChfX3Rlc3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQog
 ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
 ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
 ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
 b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg
 ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAq
 X19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAg
 ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAg
 ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is
 IGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9
 IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAg
 IGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBf
 X2M7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g
 dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsN
 CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
 dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgICAg
 IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0K
 ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOw0KICAg
 ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGlt
 Ow0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv
 ZjsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSB0cnVlOw0KDQog
 ICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp
 bQ0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5z
 cHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAg
 IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
 ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
 ICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAgICAgICAg
 ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOw0KICAg
 ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGlt
 IHx8ICFfX3Rlc3RwdXQpDQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5z
 cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsNCiAg
 ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB0
 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAg
 IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAg
 ICAgICAgIHsNCg0KICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr
 Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAg
 ICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAgICAg
 ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
 cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
 VHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt
 c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9N
 X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
 dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlu
 dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAr
 K19NX2djb3VudDsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p
 ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQog
 ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
 cGU6OmVvZigpOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0g
 X19jID09IF9faWRlbGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVv
 ZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01f
 Z2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0K
 ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9
 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAg
 ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAg
 ICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2Yg
 PSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp
 bSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAgICAgICAgICB9DQoNCiAg
 ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB7
 DQogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsNCiAgICAgICAgICAg
 ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAg
 ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz
 dGRlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg
 IC0tX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19zYi0+c3B1dGJh
 Y2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7DQogICAgICAg
 ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg
 IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
 dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
 aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
 dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNo
 YXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo
 aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVy
 biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19k
 ZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2Vu
 dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiICYm
 IF9fbiA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g
 PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAg
 ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
 ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
 dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
 X19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVs
 aW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgICAgIGJvb2wgX190
 ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAgICAgICAgICAgIF9fbiA9
 IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7
 DQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYm
 ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgICAg
 IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
 ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
 ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAg
 ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAg
 ICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9f
 biAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pDQogICAgICAg
 ICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgIGlmIChfX3Rl
 c3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
 c2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
 OmludF90eXBlDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 OjoNCiAgICBwZWVrKHZvaWQpDQogICAgew0KICAgICAgaW50X3R5cGUgX19j
 ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN
 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg
 KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg
 ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
 DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog
 ICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2Nl
 cmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAgew0KICAg
 ICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
 b2YoKTsNCiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
 c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgaW50X3R5
 cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgICAgICBi
 b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAg
 ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv
 ZikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg
 ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN
 CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAg
 ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
 ICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAg
 ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rl
 c3Rlb2YpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
 c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg
 ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j
 aGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgICAgICArK19NX2dj
 b3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
 IH0NCiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
 ICAgICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgIHRoaXMt
 PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAg
 ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
 KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
 ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVs
 c2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
 Ow0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFt
 c2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQog
 ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0K
 ICAgIHsNCiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
 cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRy
 eSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
 ICAgICAgew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAg
 ew0KICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAg
 ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYo
 KS0+aW5fYXZhaWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAh
 PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpDQogICAgICAgICAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1p
 bihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9nY291
 bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsNCiAgICAg
 ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg
 ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
 Yml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhdGNo
 KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgICAgIHsNCg0KDQog
 ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
 cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
 ICAgICAgdGhyb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
 fQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiBfTV9nY291
 bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
 CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2Vu
 dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0K
 ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg
 ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
 OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
 ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8
 IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQ0KICAgICAgICAgICAg
 ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
 ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
 ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
 dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
 cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
 ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 fQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
 ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz
 aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB1bmdldCh2b2lk
 KQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkg
 X19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
 ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
 ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
 KCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0
 aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19l
 b2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt
 PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K
 ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg
 ICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
 c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg
 ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
 ZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
 dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBpbnQN
 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHN5
 bmModm9pZCkNCiAgICB7DQogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlw
 ZTo6ZW9mKCk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5
 IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
 ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg
 ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp
 Ow0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+
 cHVic3luYygpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
 c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg
 ICAgICAgICAgX19yZXQgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
 IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
 dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
 aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
 dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
 cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdGVsbGcodm9pZCkNCiAgICB7DQog
 ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsNCiAgICAgIF9N
 X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBfX3JldCA9IHRoaXMt
 PnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh
 c2U6OmluKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl
 cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAg
 ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
 ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
 YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAg
 ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9
 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
 ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc2Vl
 a2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01fZ2NvdW50ID0g
 MDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg
 aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
 ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0
 aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4p
 Ow0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9m
 Zl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
 ZmFpbGJpdCk7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChl
 eGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg
 ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAg
 ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
 OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAg
 ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg
 ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNl
 ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikN
 CiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9f
 Y2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl
 ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlu
 KTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShv
 ZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
 KGZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
 ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
 aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRl
 ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5
 cGU7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f
 Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IF9faW4uZ2V0KF9f
 Yyk7IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg
 ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUo
 aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19pbi5l
 eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
 ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
 ICAgICBlbHNlDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh
 aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi
 YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+
 PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
 VCogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf
 X3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
 aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0NoYXJU
 IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0
 eXBlX3R5cGU7DQogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsN
 Cg0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl
 cmIoX19pbiwgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAg
 ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7DQogICAgICAg
 ICAgICAgIGlmIChfX251bSA9PSAwKQ0KICAgICAgICAgICAgICAgIF9fbnVt
 ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOw0KDQogICAg
 ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm
 KCk7DQogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlw
 ZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgICAgICAgICAg
 aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
 IGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAg
 ICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9i
 YXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl
 b2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
 ZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
 dHNwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpf
 X3MrKyA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
 DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAg
 ICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAg
 ICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf
 YmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAg
 ICAgICAgICAgIGlmICghX190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIF9f
 c2ItPnNwdXRiYWNrYyhfX2MpOw0KICAgICAgICAgICAgICBlbHNlDQogICAg
 ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN
 Cg0KDQoNCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KDQog
 ICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7DQogICAgICAgICAgICB9DQog
 ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
 ICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
 OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u
 cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
 ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgaWYg
 KCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
 ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
 DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgd3Mo
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pDQogICAgew0K
 ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
 X19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0
 cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7
 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
 eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
 ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAg
 IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf
 X2NoYXJfdHlwZTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
 IF9faW4ucmRidWYoKTsNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19j
 dHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgIGNvbnN0
 IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgIF9f
 aW50X3R5cGUgX19jOw0KICAgICAgYm9vbCBfX3Rlc3Rlb2Y7DQogICAgICBi
 b29sIF9fdGVzdHNwOw0KDQogICAgICBkbw0KICAgICAgICB7DQogICAgICAg
 ICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgX190ZXN0ZW9m
 ID0gX19jID09IF9fZW9mOw0KICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw
 ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgIH0NCiAg
 ICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsNCg0KICAgICAg
 aWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQ0KICAgICAgICBfX3NiLT5z
 cHV0YmFja2MoX19jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19pbi5zZXRz
 dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47
 DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
 aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAg
 ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
 dHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy
 VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5
 cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOw0K
 ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl
 YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
 YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7
 DQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAg
 IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s
 IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg
 ICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX193
 ID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsN
 CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl
 X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOw0KDQogICAgICAgICAg
 X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAg
 ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dl
 dF9mY3R5cGVfaW9zKCk7DQogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
 X3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9f
 ZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rz
 cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOw0KICAg
 ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAg
 ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2Yg
 JiYgIV9fdGVzdHNwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf
 X3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg
 ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19z
 Yi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9
 PSBfX2VvZjsNCiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5p
 cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgICBpZiAoIV9fdGVzdGVvZikNCiAgICAgICAgICAgIF9fc2ItPnNw
 dXRiYWNrYyhfX2MpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9f
 aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgX19p
 bi53aWR0aCgwKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmICghX19leHRy
 YWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWls
 Yml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
 bWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkNCiAgICB7
 DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
 c3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQogICAgICB0eXBl
 ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBl
 IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
 aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAg
 ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
 b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
 c3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCg0KICAgICAg
 X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KICAgICAgYm9vbCBfX3Rl
 c3RkZWxpbSA9IGZhbHNlOw0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5
 cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7DQogICAgICBpZiAoX19j
 ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg
 ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOw0K
 DQogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRv
 X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgX19pbnRfdHlw
 ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2lu
 dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgX190
 ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgYm9vbCBf
 X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICB3aGlsZSAo
 X19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRl
 bGltKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0ciArPSBf
 VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgKytf
 X2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
 KCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsN
 CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07
 DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAg
 ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQog
 ICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl
 bGltKQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
 KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTxj
 bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4NCiAg
 ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAg
 Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
 DQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
 bG9jPiYgX19zdHIpDQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0
 ciwgX19pbi53aWRlbignXG4nKSk7IH0NCn0NCiMgMjkxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy
 IDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K
 ICBleHRlcm4gaXN0cmVhbSBjaW47DQogIGV4dGVybiBvc3RyZWFtIGNvdXQ7
 DQogIGV4dGVybiBvc3RyZWFtIGNlcnI7DQogIGV4dGVybiBvc3RyZWFtIGNs
 b2c7DQojIDU3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfaW9zdHJlYW0uaCIgMw0KICBzdGF0aWMgaW9zX2Jhc2U6Oklu
 aXQgX19pb2luaXQ7DQp9DQojIDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMw0KIyAyMyAiYnVmZmVyLmNwcCIg
 Mg0KIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyNCAiYnVm
 ZmVyLmNwcCIgMg0KIyAxICJjb21tb24uaCIgMQ0KDQoNCg0KIyAxICJtaXNj
 LmgiIDENCiMgNSAiY29tbW9uLmgiIDINCg0KZXh0ZXJuIGludCBjdXJyZW50
 TGluZU51bWJlcjsNCmV4dGVybiBpbnQgY3VycmVudE5lc3RpbmdMZXZlbDsN
 CiMgMjUgImJ1ZmZlci5jcHAiIDINCiMgMSAiYnVmZmVyLmgiIDENCg0KDQoN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JhY2t3
 YXJkL2ZzdHJlYW0uaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNr
 d2FyZF93YXJuaW5nLmgiIDEgMw0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2ZzdHJlYW0uaCIgMiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9m
 c3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMw0KDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt
 LmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEg
 Mw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMSAzDQojIDM4
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNp
 Y19maWxlLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcu
 aCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9iYXNpY19maWxlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMw0KIyA0
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
 aWNfZmlsZS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQoN
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RydWN0IF9f
 YmFzaWNfZmlsZV9iYXNlOiBwdWJsaWMgX19jX2ZpbGVfdHlwZQ0KICAgIHsN
 CiAgICAgIHZpcnR1YWwNCiAgICAgIH5fX2Jhc2ljX2ZpbGVfYmFzZSgpIHsg
 fTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIG92ZXJmbG93KGludCBf
 X2MgPSAoLTEpKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICB1
 bmRlcmZsb3coKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICB1
 ZmxvdygpID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHBiYWNr
 ZmFpbChpbnQgX19jKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6
 ZQ0KICAgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXpl
 IF9fbikgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAg
 IHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsNCg0K
 ICAgICAgdmlydHVhbCBzdHJlYW1vZmYNCiAgICAgIHNlZWtvZmYoc3RyZWFt
 b2ZmIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAg
 ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp
 biB8IGlvc19iYXNlOjpvdXQpID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJl
 YW1vZmYNCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLA0KICAgICAg
 ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6
 OmluIHwgaW9zX2Jhc2U6Om91dCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0
 cmVhbWJ1ZioNCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwgaW50IF9fbGVu
 KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKCkgPSAw
 Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9hbGxvY2F0ZSgpID0g
 MDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNfcmVh
 ZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsNCg0KICAgICAg
 dmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNfd3JpdGUoY29uc3QgX0No
 YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAgIHZpcnR1
 YWwgc3RyZWFtb2ZmDQogICAgICBzeXNfc2VlayhzdHJlYW1vZmYgX19vZmYs
 IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KSA9IDA7DQoNCiAgICAgIHZpcnR1
 YWwgaW50DQogICAgICBzeXNfY2xvc2UoKSA9IDA7DQoNCiAgICAgIHZpcnR1
 YWwgaW50DQogICAgICBzeXNfc3RhdCh2b2lkKiBfX3YpID0gMDsNCg0KICAg
 ICAgdmlydHVhbCBpbnQNCiAgICAgIHNob3dtYW55YygpID0gMDsNCg0KICAg
 ICAgdmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZSh2b2lkKiBfX3YpID0gMDsN
 CiAgICB9Ow0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
 Cg0KDQoNCiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGUNCg0KICAgIHsNCg0KICAg
 ICAgX19jX2ZpbGVfdHlwZSogX01fY2ZpbGU7DQogICAgICBib29sIF9NX2Nm
 aWxlX2NyZWF0ZWQ7DQoNCg0KDQoNCg0KDQogICAgcHVibGljOg0KICAgICAg
 X19iYXNpY19maWxlKF9fY19sb2NrKiBfX2xvY2sgPSAwKTsNCg0KICAgICAg
 dm9pZA0KICAgICAgX01fb3Blbl9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSBf
 X21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLA0KICAgICAg
 ICAgICAgICAgICAgIGNoYXIqIF9fY19tb2RlKTsNCg0KDQogICAgICBfX2Jh
 c2ljX2ZpbGUqDQogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9z
 X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOw0K
 DQoNCg0KDQoNCiAgICAgIF9fYmFzaWNfZmlsZSoNCiAgICAgIHN5c19vcGVu
 KF9fY19maWxlX3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
 bW9kZSk7DQoNCiAgICAgIF9DaGFyVA0KICAgICAgc3lzX2dldGMoKTsNCg0K
 ICAgICAgX0NoYXJUDQogICAgICBzeXNfdW5nZXRjKF9DaGFyVCk7DQoNCiAg
 ICAgIF9fYmFzaWNfZmlsZSoNCiAgICAgIGNsb3NlKCk7DQoNCiAgICAgIGJv
 b2wNCiAgICAgIGlzX29wZW4oKTsNCg0KDQoNCg0KDQogICAgICB2aXJ0dWFs
 DQogICAgICB+X19iYXNpY19maWxlKCk7DQoNCiAgICAgIHZpcnR1YWwgaW50
 DQogICAgICBvdmVyZmxvdyhpbnQgX19jID0gKC0xKSk7DQoNCiAgICAgIHZp
 cnR1YWwgaW50DQogICAgICB1bmRlcmZsb3coKTsNCg0KICAgICAgdmlydHVh
 bCBpbnQNCiAgICAgIHVmbG93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQog
 ICAgICBwYmFja2ZhaWwoaW50IF9fYyk7DQoNCg0KDQoNCiAgICAgIHZpcnR1
 YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19z
 LCBzdHJlYW1zaXplIF9fbik7DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgc3Ry
 ZWFtc2l6ZQ0KICAgICAgeHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXpl
 IF9fbik7DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmDQogICAg
 ICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIg
 X193YXksDQogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
 ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsNCg0KDQoNCg0K
 ICAgICAgdmlydHVhbCBzdHJlYW1vZmYNCiAgICAgIHNlZWtwb3Moc3RyZWFt
 b2ZmIF9fcG9zLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
 X19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7DQoNCiAg
 ICAgIHZpcnR1YWwgc3RyZWFtYnVmKg0KICAgICAgc2V0YnVmKF9DaGFyVCog
 X19iLCBpbnQgX19sZW4pOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
 c3luYygpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9hbGxvY2F0
 ZSgpOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAg
 IHN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCg0K
 DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3dyaXRl
 KGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCg0KDQoN
 CiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzeXNfc2VlayhzdHJl
 YW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KTsNCg0KICAg
 ICAgdmlydHVhbCBpbnQNCiAgICAgIHN5c19jbG9zZSgpOw0KDQogICAgICB2
 aXJ0dWFsIGludA0KICAgICAgc3lzX3N0YXQodm9pZCogX192KTsNCg0KICAg
 ICAgdmlydHVhbCBpbnQNCiAgICAgIHNob3dtYW55YygpOw0KDQogICAgICB2
 aXJ0dWFsIHZvaWQNCiAgICAgIGltYnVlKHZvaWQqIF9fdik7DQogICAgfTsN
 Cn0NCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYmFzaWNfZmlsZV9tb2Rl
 bC5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2Jhc2ljX2ZpbGVfbW9k
 ZWwuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6X19iYXNp
 Y19maWxlKF9fY19sb2NrKiApDQogICAgOiBfTV9jZmlsZShfX251bGwpLCBf
 TV9jZmlsZV9jcmVhdGVkKDA7KSB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQ+DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46On5fX2Jhc2lj
 X2ZpbGUoKQ0KICAgIHsNCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQog
 ICAgICAgIHsNCiAgICAgICAgICBmZmx1c2goX01fY2ZpbGUpOw0KICAgICAg
 ICAgIHRoaXMtPmNsb3NlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2lj
 X2ZpbGU8X0NoYXJUPjo6X01fb3Blbl9tb2RlKGlvc19iYXNlOjpvcGVubW9k
 ZSBfX21vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBpbnQmICwgaW50JiAsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBjaGFyKiBfX2NfbW9kZSkNCiAgICB7DQogICAgICBi
 b29sIF9fdGVzdGIgPSBfX21vZGUgJiBpb3NfYmFzZTo6YmluYXJ5Ow0KICAg
 ICAgYm9vbCBfX3Rlc3RpID0gX19tb2RlICYgaW9zX2Jhc2U6OmluOw0KICAg
 ICAgYm9vbCBfX3Rlc3RvID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAg
 ICAgIGJvb2wgX190ZXN0dCA9IF9fbW9kZSAmIGlvc19iYXNlOjp0cnVuYzsN
 CiAgICAgIGJvb2wgX190ZXN0YSA9IF9fbW9kZSAmIGlvc19iYXNlOjphcHA7
 DQoNCiAgICAgIGlmICghX190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0
 ICYmICFfX3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7
 DQogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAm
 JiBfX3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJhIik7DQog
 ICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiBfX3Rlc3R0ICYmICFf
 X3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7DQogICAg
 ICBpZiAoX190ZXN0aSAmJiAhX190ZXN0byAmJiAhX190ZXN0dCAmJiAhX190
 ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAiciIpOw0KICAgICAg
 aWYgKF9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAmJiAhX190ZXN0
 YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAicisiKTsNCiAgICAgIGlm
 IChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190ZXN0YSkN
 CiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidysiKTsNCiAgICAgIGlmIChf
 X3Rlc3RiKQ0KICAgICAgICBzdHJjYXQoX19jX21vZGUsICJiIik7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfX2Jhc2lj
 X2ZpbGU8X0NoYXJUPioNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lz
 X29wZW4oX19jX2ZpbGVfdHlwZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1v
 ZGUpDQogICAgew0KICAgICAgX19iYXNpY19maWxlKiBfX3JldCA9IF9fbnVs
 bDsNCg0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19maWxlKQ0K
 ICAgICAgICB7DQogICAgICAgICAgX01fY2ZpbGUgPSBfX2ZpbGU7DQogICAg
 ICAgICAgX01fY2ZpbGVfY3JlYXRlZCA9IDA7Ow0KICAgICAgICAgIF9fcmV0
 ID0gdGhpczsNCiAgICAgICAgfQ0KDQogICAgICByZXR1cm4gX19yZXQ7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hh
 clQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2dldGMoKQ0KICAg
 IHsNCiAgICAgIHJldHVybiBnZXRjIChfTV9jZmlsZSk7DQogICAgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQNCiAgICBf
 X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX3VuZ2V0YyhfQ2hhclQgX19zKQ0K
 ICAgIHsNCiAgICAgIHJldHVybiB1bmdldGMgKF9fcywgX01fY2ZpbGUpOw0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX19i
 YXNpY19maWxlPF9DaGFyVD4qDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46
 Om9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6b3Blbm1vZGUg
 X19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAp
 DQogICAgew0KICAgICAgX19iYXNpY19maWxlKiBfX3JldCA9IF9fbnVsbDsN
 CiAgICAgIGludCBfX3BfbW9kZSA9IDA7DQogICAgICBpbnQgX19yd19tb2Rl
 ID0gMDsNCiAgICAgIGNoYXIgX19jX21vZGVbNF07DQoNCiAgICAgIF9NX29w
 ZW5fbW9kZShfX21vZGUsIF9fcF9tb2RlLCBfX3J3X21vZGUsIF9fY19tb2Rl
 KTsNCg0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpDQogICAgICAgIHsN
 CiAgICAgICAgICBpZiAoKF9NX2NmaWxlID0gZm9wZW4oX19uYW1lLCBfX2Nf
 bW9kZSkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9jZmls
 ZV9jcmVhdGVkID0gMTs7DQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpczsN
 CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0
 Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
 Ym9vbA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojppc19vcGVuKCkgeyBy
 ZXR1cm4gX01fY2ZpbGUgIT0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioNCiAgICBfX2Jh
 c2ljX2ZpbGU8X0NoYXJUPjo6Y2xvc2UoKQ0KICAgIHsNCiAgICAgIF9fYmFz
 aWNfZmlsZSogX19yZXR2YWwgPSBzdGF0aWNfY2FzdDxfX2Jhc2ljX2ZpbGUq
 PihfX251bGwpOw0KICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYgZmNs
 b3NlKF9NX2NmaWxlKSkNCiAgICAgICAgX19yZXR2YWwgPSB0aGlzOw0KICAg
 ICAgcmV0dXJuIF9fcmV0dmFsOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fYmFzaWNfZmls
 ZTxfQ2hhclQ+Ojp4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19u
 KQ0KICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFt
 c2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp4c3B1dG4oY29uc3Qg
 X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJuIGZ3
 cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVhbW9mZg0KICAgIF9fYmFzaWNf
 ZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jh
 c2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkNCiAgICB7IGZzZWVrKF9N
 X2NmaWxlLCBfX29mZiwgX193YXkpOyByZXR1cm4gZnRlbGwoX01fY2ZpbGUp
 OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVh
 bW9mZg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0cmVh
 bW9mZiBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6b3Blbm1vZGUgKQ0KICAgIHsgZnNlZWsoX01fY2ZpbGUs
 IF9fcG9zLCBpb3NfYmFzZTo6YmVnKTsgcmV0dXJuIGZ0ZWxsKF9NX2NmaWxl
 KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQN
 CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpDQogICAgeyByZXR1
 cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIGludA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+
 OjpvdmVyZmxvdyhpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQNCiAgICBfX2Jh
 c2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJmbG93KCkNCiAgICB7IHJldHVybiAo
 LTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
 aW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkNCiAgICB7
 IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnBiYWNr
 ZmFpbChpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzdHJlYW1idWYqDQogICAgX19i
 YXNpY19maWxlPF9DaGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkNCiAg
 ICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRoaXMp
 OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50
 DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQ0KICAg
 IHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVD4NCiAgICBzdHJlYW1zaXplDQogICAgX19iYXNpY19maWxlPF9DaGFy
 VD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikNCiAg
 ICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoN
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6
 ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfd3JpdGUoY29uc3Qg
 X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJuIGZ3
 cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtb2ZmDQogICAgX19iYXNp
 Y19maWxlPF9DaGFyVD46OnN5c19zZWVrKHN0cmVhbW9mZiBfX3BvcywgaW9z
 X2Jhc2U6OnNlZWtkaXIgX193YXkpDQogICAgew0KICAgICAgZnNlZWsoX01f
 Y2ZpbGUsIF9fcG9zLCBfX3dheSk7DQogICAgICByZXR1cm4gZnRlbGwoX01f
 Y2ZpbGUpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VD4NCiAgICBpbnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2Ns
 b3NlKCkNCiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9DQoNCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAgX19i
 YXNpY19maWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkNCiAgICB7IHJl
 dHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
 DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnNob3dtYW55
 YygpDQogICAgeyByZXR1cm4gKC0xKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2ljX2ZpbGU8X0No
 YXJUPjo6aW1idWUodm9pZCogKSB7IH0NCn0NCiMgMjUxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgiIDIg
 Mw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQojIDQz
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 ZnN0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5oIiAx
 IDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
 CiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVh
 bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0K
 ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
 ZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
 ZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBl
 ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsN
 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl
 IG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
 PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7DQog
 ICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNf
 dHlwZT4gX19maWxlYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIF9fYmFzaWNf
 ZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7
 DQogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBfX3N0
 YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
 bmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7DQogICAg
 ICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0KDQog
 ICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7DQoNCiAgICBwcml2YXRlOg0K
 DQoNCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOw0KDQoNCiAgICAgIF9f
 c3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7DQogICAgICBfX3N0YXRlX3R5cGUg
 X01fc3RhdGVfYmVnOw0KDQoNCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7DQoN
 Cg0KICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOw0KDQoNCiAgICAgIGJv
 b2wgX01fbGFzdF9vdmVyZmxvd2VkOw0KDQogICAgcHVibGljOg0KDQogICAg
 ICBiYXNpY19maWxlYnVmKCk7DQoNCg0KICAgICAgYmFzaWNfZmlsZWJ1Zihf
 X2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUs
 DQogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRpY19j
 YXN0PGludF90eXBlPigxMDI0KSk7DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg
 IH5iYXNpY19maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+Y2xv
 c2UoKTsNCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg
 ICB9DQoNCg0KICAgICAgYm9vbA0KICAgICAgaXNfb3Blbih2b2lkKSBjb25z
 dCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3BlbigpIDogMDs7
 IH0NCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICBvcGVuKGNvbnN0
 IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSk7DQoNCiAg
 ICAgIF9fZmlsZWJ1Zl90eXBlKg0KICAgICAgY2xvc2Uodm9pZCk7DQoNCiAg
 ICBwcm90ZWN0ZWQ6DQogICAgICB2b2lkDQogICAgICBfTV9hbGxvY2F0ZV9p
 bnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fZGVz
 dHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAgICAg
 X01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQoNCg0KICAgICAgdm9pZA0K
 ICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KDQoNCiAgICAgIHZpcnR1YWwg
 c3RyZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKHZvaWQpOw0KDQoNCg0KDQoN
 CiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAgICAgIHVuZGVyZmxvdyh2b2lk
 KTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgcGJhY2tmYWls
 KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsNCiMgMTQ4ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVh
 bS5oIiAzDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBvdmVyZmxv
 dyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQojIDE1OCAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJl
 YW0uaCIgMw0KICAgICAgaW50X3R5cGUNCiAgICAgIF9NX3JlYWxseV9vdmVy
 ZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQoNCiAgICAg
 IHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoNCiAgICAgIHNldGJ1ZihjaGFy
 X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFs
 IHBvc190eXBlDQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3Nf
 YmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
 Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
 dXQpOw0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9z
 KHBvc190eXBlIF9fcG9zLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl
 bm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7
 DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKHZvaWQpDQogICAg
 ICB7DQogICAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBf
 TV9vdXRfYmVnIDwgX01fb3V0X2VuZDsNCiAgICAgICAgaWYgKF9fdGVzdHB1
 dCkNCiAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgX01fZmlsZS0+c3lu
 YygpOw0KDQoNCg0KDQoNCiAgICAgICAgICAgIHN0cmVhbW9mZiBfX2N1ciA9
 IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7DQogICAgICAg
 ICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBfTV9vdXRfYmVn
 Ow0KICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7DQogICAgICAg
 ICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsgX19vZmYpOw0KICAgICAg
 ICAgIH0NCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg
 ICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsIHZvaWQN
 CiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICB2
 aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9f
 cywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7DQogICAgICAgIHN0cmVhbXNp
 emUgX19yZXQgPSAwOw0KDQogICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0K
 ICAgICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAm
 JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsNCiAgICAgICAgICAg
 ICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAgICsrX19zOw0KICAgICAg
 ICAgICAgICAgICsrX01faW5fY3VyOw0KICAgICAgICAgICAgICB9DQogICAg
 ICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7DQogICAgICAgICAgfQ0KICAg
 ICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgX19yZXQgKz0gX19z
 dHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQpOw0KICAg
 ICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAgIHZpcnR1YWwg
 c3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19z
 LCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsNCiAgICAgICAgX01fcGJhY2tf
 ZGVzdHJveSgpOw0KICAgICAgICByZXR1cm4gX19zdHJlYW1idWZfdHlwZTo6
 eHNwdXRuKF9fcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAg
 ICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsNCiAgICB9Ow0KDQoNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 Y2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAg
 dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJh
 aXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
 dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5
 cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAg
 IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90
 eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5
 cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lz
 dHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAgICBfX2ZpbGVidWZf
 dHlwZSBfTV9maWxlYnVmOw0KDQogICAgcHVibGljOg0KDQogICAgICBiYXNp
 Y19pZnN0cmVhbSgpDQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCks
 IF9NX2ZpbGVidWYoKQ0KICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVm
 KTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfaWZzdHJlYW0o
 Y29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
 aW9zX2Jhc2U6OmluKQ0KICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwp
 LCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+aW5pdCgm
 X01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUp
 Ow0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfaWZzdHJlYW0oKQ0KICAgICAg
 eyB9DQoNCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICByZGJ1Zigp
 IGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90
 eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz
 X29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0N
 Cg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlv
 c19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pDQogICAg
 ICB7DQogICAgICAgIGlmIChfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUg
 fCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkNCiAgICAgICAgICB0aGlzLT5z
 ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQoNCiAgICAg
 IHZvaWQNCiAgICAgIGNsb3NlKHZvaWQpDQogICAgICB7DQogICAgICAgIGlm
 ICghX01fZmlsZWJ1Zi5jbG9zZSgpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0NCiAgICB9Ow0KDQoN
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHM+DQogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMgYmFzaWNf
 b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0K
 DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl
 ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVu
 YW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5
 cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBl
 Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5
 cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVm
 PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAg
 ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5
 cGU+IF9fb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIF9f
 ZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJsaWM6DQoNCiAg
 ICAgIGJhc2ljX29mc3RyZWFtKCkNCiAgICAgIDogX19vc3RyZWFtX3R5cGUo
 X19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMtPmluaXQoJl9N
 X2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19v
 ZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dHxp
 b3NfYmFzZTo6dHJ1bmMpDQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVs
 bCksIF9NX2ZpbGVidWYoKQ0KICAgICAgew0KICAgICAgICB0aGlzLT5pbml0
 KCZfTV9maWxlYnVmKTsNCiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9k
 ZSk7DQogICAgICB9DQoNCiAgICAgIH5iYXNpY19vZnN0cmVhbSgpDQogICAg
 ICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAgIHJkYnVm
 KHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmls
 ZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAg
 ICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVu
 KCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBf
 X3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
 b3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQ0KICAgICAgew0KICAg
 ICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19i
 YXNlOjpvdXQpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
 OjpmYWlsYml0KTsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAgICAgY2xv
 c2Uodm9pZCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNs
 b3NlKCkpDQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
 Ow0KICAgICAgfQ0KICAgIH07DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19m
 c3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFy
 VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf
 dHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
 X3R5cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
 bmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAg
 ICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5
 cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
 Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsNCiAgICAgIHR5
 cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4g
 X19pb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIF9fZmls
 ZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJsaWM6DQoNCiAgICAg
 IGJhc2ljX2ZzdHJlYW0oKQ0KICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19u
 dWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMtPmluaXQoJl9NX2Zp
 bGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19mc3Ry
 ZWFtKGNvbnN0IGNoYXIqIF9fcywNCiAgICAgICAgICAgICAgICAgICAgaW9z
 X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i
 YXNlOjpvdXQpDQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBf
 TV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+aW5pdCgmX01f
 ZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOw0K
 ICAgICAgfQ0KDQogICAgICB+YmFzaWNfZnN0cmVhbSgpDQogICAgICB7IH0N
 Cg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAgIHJkYnVmKHZvaWQp
 IGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90
 eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz
 X29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0N
 Cg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsDQog
 ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz
 ZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgew0KICAgICAgICBpZiAo
 IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpDQogICAgICAgICAgc2V0
 c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgfQ0KDQogICAgICB2
 b2lkDQogICAgICBjbG9zZSh2b2lkKQ0KICAgICAgew0KICAgICAgICBpZiAo
 IV9NX2ZpbGVidWYuY2xvc2UoKSkNCiAgICAgICAgICBzZXRzdGF0ZShpb3Nf
 YmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQogICAgfTsNCn0NCg0KDQoNCg0K
 DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2ZzdHJlYW0udGNjIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAzDQpuYW1lc3BhY2Ug
 c3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQs
 IF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9maWxlKCkNCiAgICB7DQog
 ICAgICBpZiAoIV9NX2ZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICBfTV9i
 dWZfdW5pZmllZCA9IDE7Ow0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg
 eyBfTV9maWxlID0gbmV3IF9fZmlsZV90eXBlKCZfTV9sb2NrKTsgfQ0KICAg
 ICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
 ICAgZGVsZXRlIF9NX2ZpbGU7DQogICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQog
 ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9h
 bGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQ0KICAgIHsNCiAgICAgIGlmICgh
 X01fYnVmICYmIF9NX2J1Zl9zaXplX29wdCkNCiAgICAgICAgew0KICAgICAg
 ICAgIF9NX2J1Zl9zaXplID0gX01fYnVmX3NpemVfb3B0Ow0KDQoNCiAgICAg
 ICAgICB0cnkgeyBfTV9idWYgPSBuZXcgY2hhcl90eXBlW19NX2J1Zl9zaXpl
 XTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsNCiAgICAgICAgICAgICAg
 dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgX01fYnVmX2FsbG9j
 YXRlZCA9IDE7Ow0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQN
 CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIF9N
 X2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCkNCiAgICB7DQogICAgICBpZiAo
 X01fYnVmX2FsbG9jYXRlZCkNCiAgICAgICAgew0KICAgICAgICAgIGRlbGV0
 ZSBbXSBfTV9idWY7DQogICAgICAgICAgX01fYnVmID0gX19udWxsOw0KICAg
 ICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSAwOzsNCiAgICAgICAgICB0aGlz
 LT5zZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOw0KICAgICAgICAgIHRo
 aXMtPnNldHAoX19udWxsLCBfX251bGwpOw0KICAgICAgICB9DQogICAgfQ0K
 DQogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIF9NX2FsbG9jYXRlX3BiYWNrX2J1ZmZlcigpDQogICAgew0K
 ICAgICAgaWYgKCFfTV9wYmFjayAmJiBfTV9wYmFja19zaXplKQ0KICAgICAg
 ICB7DQoNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX01fcGJhY2sg
 PSBuZXcgY2hhcl90eXBlW19NX3BiYWNrX3NpemVdOyB9DQogICAgICAgICAg
 Y2F0Y2goLi4uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBkZWxl
 dGUgW10gX01fcGJhY2s7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAg
 ICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxl
 YnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGJhc2ljX2ZpbGVidWYoKQ0K
 ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9maWxlKF9fbnVsbCksIF9N
 X3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksDQogICAgX01fc3RhdGVfYmVn
 KF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZCgwOyksDQogICAg
 X01fbGFzdF9vdmVyZmxvd2VkKDA7KQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
 Y19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGJhc2ljX2ZpbGVi
 dWYoX19jX2ZpbGVfdHlwZSogX19mLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19t
 b2RlLCBpbnRfdHlwZSBfX3MpDQogICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks
 IF9NX2ZpbGUoX19udWxsKSwgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgp
 KSwNCiAgICBfTV9zdGF0ZV9iZWcoX19zdGF0ZV90eXBlKCkpLCBfTV9idWZf
 YWxsb2NhdGVkKDA7KSwNCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoMDspDQog
 ICAgew0KICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KICAgICAgX01fZmls
 ZS0+c3lzX29wZW4oX19mLCBfX21vZGUpOw0KICAgICAgaWYgKHRoaXMtPmlz
 X29wZW4oKSkNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vZGUgPSBfX21v
 ZGU7DQogICAgICAgICAgaWYgKF9fcykNCiAgICAgICAgICAgIHsNCiAgICAg
 ICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX19zOw0KICAgICAgICAgICAg
 ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCiAgICAgICAgICAg
 ICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAg
 fQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
 dHM+OjpfX2ZpbGVidWZfdHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
 VCwgX1RyYWl0cz46Og0KICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3Nf
 YmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAgIF9fZmlsZWJ1
 Zl90eXBlICpfX3JldCA9IF9fbnVsbDsNCiAgICAgIGlmICghdGhpcy0+aXNf
 b3BlbigpKQ0KICAgICAgICB7DQogICAgICAgICAgX01fYWxsb2NhdGVfZmls
 ZSgpOw0KICAgICAgICAgIF9NX2ZpbGUtPm9wZW4oX19zLCBfX21vZGUpOw0K
 ICAgICAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQogICAgICAgICAgICB7
 DQogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigp
 Ow0KICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsN
 CiAgICAgICAgICAgICAgX01fbW9kZSA9IF9fbW9kZTsNCg0KDQogICAgICAg
 ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICAg
 IGlmIChfX21vZGUgJiBpb3NfYmFzZTo6YXRlDQogICAgICAgICAgICAgICAg
 ICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkg
 PCAwKQ0KICAgICAgICAgICAgICAgIHRoaXMtPmNsb3NlKCk7DQogICAgICAg
 ICAgICAgIF9fcmV0ID0gdGhpczsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 fQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
 ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoNCiAg
 ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGNsb3Nl
 KCkNCiAgICB7DQogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251
 bGw7DQogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICB7DQog
 ICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291
 dF9iZWcgPCBfTV9vdXRfZW5kOw0KICAgICAgICAgIGlmIChfX3Rlc3RwdXQp
 DQogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3codHJhaXRzX3R5cGU6
 OmVvZigpKTsNCg0KDQogICAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOw0K
 IyAxOTIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2ZzdHJlYW0udGNjIiAzDQogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl
 OjpvcGVubW9kZSgwKTsNCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFs
 X2J1ZmZlcigpOw0KDQogICAgICAgICAgaWYgKF9NX3BiYWNrKQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBkZWxldGUgW10gX01fcGJhY2s7DQog
 ICAgICAgICAgICAgIF9NX3BiYWNrID0gX19udWxsOw0KICAgICAgICAgICAg
 fQ0KICAgICAgICAgIF9fcmV0ID0gdGhpczsNCiAgICAgICAgfQ0KDQoNCg0K
 ICAgICAgaWYgKF9NX2ZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICBkZWxl
 dGUgX01fZmlsZTsNCiAgICAgICAgICBfTV9maWxlID0gX19udWxsOw0KICAg
 ICAgICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSAwOzsNCiAgICAg
 IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg
 ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNob3dt
 YW55YygpDQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOw0K
 ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47
 DQoNCiAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgew0KICAgICAgICAg
 IGJvb2wgX190ZXN0ZW9mID0gMDs7DQogICAgICAgICAgaWYgKF9NX2luX2N1
 ciA+PSBfTV9pbl9lbmQpDQogICAgICAgICAgICBfX3Rlc3Rlb2YgPSB0aGlz
 LT51bmRlcmZsb3coKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAg
 ICAgaWYgKCFfX3Rlc3Rlb2YpDQogICAgICAgICAgICBfX3JldCA9IF9NX2lu
 X2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9v
 dmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
 eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
 ICB1bmRlcmZsb3coKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0g
 dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9N
 X21vZGUgJiBpb3NfYmFzZTo6aW47DQogICAgICBib29sIF9fdGVzdG91dCA9
 IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KDQoNCiAgICAgIGlmIChfX3Rl
 c3RpbikNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIGlmIChfTV9wYmFj
 a19pbml0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9wYmFj
 a19kZXN0cm95KCk7DQogICAgICAgICAgICAgIGlmIChfTV9pbl9jdXIgPCBf
 TV9pbl9lbmQpDQogICAgICAgICAgICAgICAgcmV0dXJuIHRyYWl0c190eXBl
 Ojp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCiAgICAgICAgICAgIH0NCg0K
 ICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2lu
 X2JlZyA8IF9NX2luX2N1cjsNCiAgICAgICAgICBib29sIF9fdGVzdGluaXQg
 PSBfTV9pc19pbmRldGVybWluYXRlKCk7DQoNCg0KICAgICAgICAgIGlmIChf
 X3Rlc3RnZXQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
 X3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93
 KCk7DQoNCiAgICAgICAgICAgICAgZWxzZSBpZiAoKF9NX2luX2N1ciAtIF9N
 X2luX2JlZykgPT0gMSkNCiAgICAgICAgICAgICAgICBfTV9maWxlLT5zeXNf
 Z2V0YygpOw0KDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg
 ICBfTV9maWxlLT5zZWVrb2ZmKF9NX2luX2N1ciAtIF9NX2luX2JlZywNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpjdXIs
 IGlvc19iYXNlOjppbik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICBp
 ZiAoX190ZXN0aW5pdCB8fCBfX3Rlc3RnZXQpDQogICAgICAgICAgICB7DQoN
 CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3NpemUgPSBfTV9maWxlLT54
 c2dldG4oX01faW5fYmVnLCBfTV9idWZfc2l6ZSk7DQogICAgICAgICAgICAg
 IGlmICgwIDwgX19zaXplKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg
 ICAgICAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShfX3NpemUpOw0KICAgICAg
 ICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAgICAgICAgICAgICAgICAg
 ICAgX01fb3V0X2N1ciA9IF9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAg
 IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIp
 Ow0KDQogICAgICAgICAgICAgICAgICBpZiAoX19zaXplID09IDEpDQogICAg
 ICAgICAgICAgICAgICAgIF9NX2ZpbGUtPnN5c191bmdldGMoKl9NX2luX2N1
 cik7DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
 ICAgIHsNCg0KICAgICAgICAgICAgICAgICAgc3RyZWFtb2ZmIF9fcCA9IF9N
 X2ZpbGUtPnNlZWtvZmYoMCAtIF9fc2l6ZSwgaW9zX2Jhc2U6OmN1ciwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIGlvc19iYXNlOjppbik7DQogICAgICAgICAgICAgICAgICBpZiAoX19w
 ID09IC0xKQ0KICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAg
 ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg
 ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
 X01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gX19yZXQ7
 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
 cz46OmludF90eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
 dHM+OjoNCiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19pKQ0KICAgIHsNCiAg
 ICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg
 ICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47DQoN
 CiAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgew0KICAgICAgICAgIGJv
 b2wgX190ZXN0cGIgPSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICAg
 ICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo
 X19pKTsNCiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBl
 OjplcV9pbnRfdHlwZShfX2ksIF9fcmV0KTsNCg0KICAgICAgICAgIGlmIChf
 X3Rlc3RwYikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgYm9vbCBf
 X3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAgICAg
 ICAgICAgYm9vbCBfX3Rlc3RlcSA9IHRyYWl0c190eXBlOjplcShfX2MsIHRo
 aXMtPmdwdHIoKVstMV0pOw0KDQoNCg0KICAgICAgICAgICAgICBpZiAoIV9f
 dGVzdGVvZiAmJiBfX3Rlc3RlcSkNCiAgICAgICAgICAgICAgICB7DQogICAg
 ICAgICAgICAgICAgICAtLV9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAg
 IGlmIChfX3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0
 X2N1cjsNCiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOw0KICAgICAg
 ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9m
 KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIC0tX01f
 aW5fY3VyOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAg
 ICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOw0KICAgICAgICAgICAg
 ICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOw0KICAg
 ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz
 dGVvZikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAt
 LV9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQp
 DQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsNCiAgICAgICAg
 ICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOw0KICAgICAgICAgICAgICAg
 ICAgKl9NX2luX2N1ciA9IF9fYzsNCiAgICAgICAgICAgICAgICAgIF9fcmV0
 ID0gX19pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg
 ICB0aGlzLT5zZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsNCiAgICAgICAg
 ICAgICAgdGhpcy0+dW5kZXJmbG93KCk7DQogICAgICAgICAgICAgIGlmICgh
 X190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
 ICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9fYywgKl9NX2luX2N1cikpDQog
 ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBf
 TV9wYmFja19jcmVhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAqX01f
 aW5fY3VyID0gX19jOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg
 ICAgICAgICAgICBfX3JldCA9IF9faTsNCiAgICAgICAgICAgICAgICB9DQog
 ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBfX3JldCA9IHRy
 YWl0c190eXBlOjpub3RfZW9mKF9faSk7DQogICAgICAgICAgICB9DQogICAg
 ICAgIH0NCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IDA7Ow0KICAgICAg
 cmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1Zjxf
 Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX2ZpbGVidWY8
 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3ZlcmZsb3coaW50X3R5cGUgX19j
 KQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6
 OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYm
 IF9NX291dF9jdXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsNCiAgICAgIGJv
 b2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQoNCiAg
 ICAgIGlmIChfX3Rlc3RvdXQpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAo
 X190ZXN0cHV0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAqX01f
 b3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAg
 ICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOw0KICAgICAgICAgICAg
 ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7DQogICAgICAg
 ICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgX19yZXQgPSB0
 aGlzLT5fTV9yZWFsbHlfb3ZlcmZsb3coX19jKTsNCiAgICAgICAgfQ0KDQog
 ICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSAwOzsNCiAgICAgIHJldHVybiBf
 X3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf
 VHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwg
 X1RyYWl0cz46Og0KICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBf
 X2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw
 ZTo6ZW9mKCk7DQogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg
 JiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7DQogICAgICBib29sIF9fdGVz
 dHVuYnVmZmVyZWQgPSBfTV9maWxlICYmICFfTV9idWZfc2l6ZTsNCg0KICAg
 ICAgaWYgKF9fdGVzdHB1dCB8fCBfX3Rlc3R1bmJ1ZmZlcmVkKQ0KICAgICAg
 ICB7DQoNCiAgICAgICAgICBpbnQgX19wbGVuID0gX01fb3V0X2VuZCAtIF9N
 X291dF9iZWc7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDA7DQoN
 CiAgICAgICAgICBpZiAoX19wbGVuKQ0KICAgICAgICAgICAgX19sZW4gPSBf
 TV9maWxlLT54c3B1dG4oX01fb3V0X2JlZywgX19wbGVuKTsNCg0KICAgICAg
 ICAgIGlmIChfX2MgIT10cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAgICAg
 ICB7DQogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX3BlbmRpbmcgPSB0cmFp
 dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgIF9f
 bGVuICs9IF9NX2ZpbGUtPnhzcHV0bigmX19wZW5kaW5nLCAxKTsNCiAgICAg
 ICAgICAgICAgKytfX3BsZW47DQogICAgICAgICAgICB9DQoNCg0KDQogICAg
 ICAgICAgX01fZmlsZS0+c3luYygpOw0KICAgICAgICAgIGlmIChfX2xlbiA9
 PSBfX3BsZW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9NX3Nl
 dF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICAgIF9fcmV0ID0gdHJh
 aXRzX3R5cGU6Om5vdF9lb2YoX19jKTsNCiAgICAgICAgICAgIH0NCiMgNDcy
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mc3Ry
 ZWFtLnRjYyIgMw0KICAgICAgICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93
 ZWQgPSAxOzsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
 IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJlYW1idWZf
 dHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K
 ICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog
 ICAgew0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19zID09IDAg
 JiYgX19uID09IDApDQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7DQog
 ICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQ0KICAgICAgICB7DQoNCg0KDQoN
 Cg0KICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7DQoN
 Cg0KICAgICAgICAgIF9NX2J1ZiA9IF9fczsNCiAgICAgICAgICBfTV9idWZf
 c2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsNCiAgICAgICAgICBfTV9z
 ZXRfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBfTV9hbGxvY2F0
 ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9v
 dmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5
 cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg
 IHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9f
 d2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAg
 IHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsNCiAg
 ICAgIGJvb2wgX190ZXN0b3BlbiA9IHRoaXMtPmlzX29wZW4oKTsNCiAgICAg
 IGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBpb3NfYmFzZTo6aW4gJiYgX01f
 bW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAgIGJvb2wgX190ZXN0b3V0ID0g
 X19tb2RlICYgaW9zX2Jhc2U6Om91dCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6
 Om91dDsNCg0KDQogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNldDxfX2Nv
 ZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsNCiAgICAg
 IGlmIChfX3dpZHRoIDwgMCkNCiAgICAgICAgX193aWR0aCA9IDA7DQogICAg
 ICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9fd2lkdGggPD0g
 MDsNCg0KICAgICAgaWYgKF9fdGVzdG9wZW4gJiYgIV9fdGVzdGZhaWwgJiYg
 KF9fdGVzdGluIHx8IF9fdGVzdG91dCkpDQogICAgICAgIHsNCg0KICAgICAg
 ICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCg0KICAgICAgICAgIGlmIChfX3dh
 eSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2ZmICE9IDApDQogICAgICAgICAg
 ICB7DQogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29tcHV0ZWRfb2ZmID0g
 X193aWR0aCAqIF9fb2ZmOw0KDQogICAgICAgICAgICAgIGJvb2wgX190ZXN0
 Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2VuZDsNCiAg
 ICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9N
 X291dF9iZWcgPCBfTV9vdXRfZW5kOw0KDQoNCiAgICAgICAgICAgICAgaWYg
 KF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpDQogICAgICAgICAg
 ICAgICAgew0KDQogICAgICAgICAgICAgICAgICB0aGlzLT5zeW5jKCk7DQoN
 CiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0KCk7DQogICAg
 ICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgZWxzZSBpZiAoX190
 ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpDQogICAgICAgICAg
 ICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0gX01faW5fYmVn
 Ow0KDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+c2Vla29mZihf
 X2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7DQogICAgICAgICAgICAg
 IF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICB9DQoNCg0K
 ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
 X19yZXQgPSBfTV9maWxlLT5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3Vy
 LCBfX21vZGUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBtYXgoX01fb3V0
 X2N1ciwgX01faW5fY3VyKSAtIF9NX2J1ZjsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg
 ICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVm
 PF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFzaWNfZmlsZWJ1
 ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzZWVrcG9zKHBvc190eXBlIF9f
 cG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAg
 IHBvc190eXBlIF9fcmV0Ow0KICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfX3Bv
 czsNCg0KICAgICAgX19yZXQgPSB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBpb3Nf
 YmFzZTo6YmVnLCBfX21vZGUpOw0KDQogICAgICBfTV9sYXN0X292ZXJmbG93
 ZWQgPSAwOzsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
 IHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K
 ICAgIF9NX291dHB1dF91bnNoaWZ0KCkNCiAgICB7IH0NCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9p
 ZA0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAg
 aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQogICAgICBib29s
 IF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygpICYmIHBwdHIoKSA9PSBw
 YmFzZSgpOw0KDQogICAgICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2Nh
 bGUgIT0gX19sb2MpDQogICAgICAgIHsNCiAgICAgICAgICBfTV9idWZfbG9j
 YWxlID0gX19sb2M7DQogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g
 MTs7DQogICAgICAgIH0NCg0KDQoNCg0KDQogICAgICBfTV9sYXN0X292ZXJm
 bG93ZWQgPSAwOzsNCiAgICB9DQoNCn0NCiMgNDIxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMN
 CiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNr
 d2FyZC9mc3RyZWFtLmgiIDIgMw0KDQp1c2luZyBzdGQ6OmZpbGVidWY7DQp1
 c2luZyBzdGQ6Omlmc3RyZWFtOw0KdXNpbmcgc3RkOjpvZnN0cmVhbTsNCnVz
 aW5nIHN0ZDo6ZnN0cmVhbTsNCnVzaW5nIHN0ZDo6c3RyZWFtcG9zOw0KIyA1
 ICJidWZmZXIuaCIgMg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
 Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8u
 aCIgMSAzIDQNCiMgNiAiYnVmZmVyLmgiIDINCiMgMSAiL3Vzci9pbmNsdWRl
 L3N0cmluZy5oIiAxIDMgNA0KIyA3ICJidWZmZXIuaCIgMg0KIyAxICJtaXNj
 LmgiIDENCiMgOCAiYnVmZmVyLmgiIDINCiMgMSAiZXJyb3IuaCIgMQ0KDQoN
 Cg0KZXh0ZXJuIGludCBlcnJvckNvdW50Ow0KDQoNCg0KDQoNCg0KZW51bSBU
 QWJvcnRDb2RlIHsNCiAgICBhYm9ydEludmFsaWRDb21tYW5kTGluZUFyZ3Mg
 PSAtMSwNCiAgICBhYm9ydFNvdXJjZUZpbGVPcGVuRmFpbGVkID0gLTIsDQog
 ICAgYWJvcnRJRm9ybUZpbGVPcGVuRmFpbGVkID0gLTMsDQogICAgYWJvcnRB
 c3NlbWJseUZpbGVPcGVuRmFpbGVkID0gLTQsDQogICAgYWJvcnRUb29NYW55
 U3ludGF4RXJyb3JzID0gLTUsDQogICAgYWJvcnRTdGFja092ZXJmbG93ID0g
 LTYsDQogICAgYWJvcnRDb2RlU2VnbWVudE92ZXJmbG93ID0gLTcsDQogICAg
 YWJvcnROZXN0aW5nVG9vRGVlcCA9IC04LA0KICAgIGFib3J0UnVudGltZUVy
 cm9yID0gLTksDQogICAgYWJvcnRVbmltcGxlbWVudGVkRmVhdHVyZSA9IC0x
 MA0KfSA7DQoNCnZvaWQgQWJvcnRUcmFuc2xhdGlvbihUQWJvcnRDb2RlIGFj
 KTsNCiMgOSAiYnVmZmVyLmgiIDINCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGNo
 YXIgZW9mQ2hhcjsNCmV4dGVybiBpbnQgaW5wdXRQb3NpdGlvbjsNCmV4dGVy
 biBpbnQgbGlzdEZsYWc7DQpleHRlcm4gaW50IGxldmVsOw0KDQpjb25zdCBp
 bnQgbWF4SW5wdXRCdWZmZXJTaXplID0gMjU2Ow0KDQoNCg0KDQoNCmNsYXNz
 IFRUZXh0SW5CdWZmZXIgew0KDQpwcm90ZWN0ZWQ6DQogICAgZnN0cmVhbSBm
 aWxlOw0KICAgIGNoYXIgKmNvbnN0IHBGaWxlTmFtZTsNCiAgICBjaGFyIHRl
 eHRbbWF4SW5wdXRCdWZmZXJTaXplXTsNCiAgICBjaGFyICpwQ2hhcjsNCg0K
 DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCkgPSAwOw0KDQpwdWJs
 aWM6DQogICAgVFRleHRJbkJ1ZmZlcihjb25zdCBjaGFyICpwSW5wdXRGaWxl
 TmFtZSwgVEFib3J0Q29kZSBhYyk7DQoNCiAgICB2aXJ0dWFsIH5UVGV4dElu
 QnVmZmVyKHZvaWQpDQogICAgew0KICAgICAgICBmaWxlLmNsb3NlKCk7DQog
 ICAgICAgIGRlbGV0ZSBwRmlsZU5hbWU7DQogICAgfQ0KDQogICAgY2hhciBD
 aGFyICh2b2lkKSBjb25zdCB7IHJldHVybiAqcENoYXI7IH0NCiAgICBjaGFy
 IEdldENoYXIgKHZvaWQpOw0KICAgIGNoYXIgUHV0QmFja0NoYXIodm9pZCk7
 DQp9Ow0KDQoNCg0KDQoNCmNsYXNzIFRTb3VyY2VCdWZmZXIgOiBwdWJsaWMg
 VFRleHRJbkJ1ZmZlciB7DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9p
 ZCk7DQoNCnB1YmxpYzoNCiAgICBUU291cmNlQnVmZmVyKGNvbnN0IGNoYXIg
 KnBTb3VyY2VGaWxlTmFtZSk7DQp9Ow0KIyA3MyAiYnVmZmVyLmgiDQpjbGFz
 cyBUVGV4dE91dEJ1ZmZlciB7DQoNCnB1YmxpYzoNCiAgICBjaGFyIHRleHRb
 bWF4SW5wdXRCdWZmZXJTaXplICsgMTZdOw0KDQogICAgdmlydHVhbCB2b2lk
 IFB1dExpbmUodm9pZCkgPSAwOw0KDQogICAgdm9pZCBQdXRMaW5lKGNvbnN0
 IGNoYXIgKnBUZXh0KQ0KICAgIHsNCiAgICAgICAgc3RyY3B5KHRleHQsIHBU
 ZXh0KTsNCiAgICAgICAgUHV0TGluZSgpOw0KICAgIH0NCn07DQoNCg0KDQoN
 Cg0KY2xhc3MgVExpc3RCdWZmZXIgOiBwdWJsaWMgVFRleHRPdXRCdWZmZXIg
 ew0KICAgIGNoYXIgKnBTb3VyY2VGaWxlTmFtZTsNCiAgICBjaGFyIGRhdGVb
 MjZdOw0KICAgIGludCBwYWdlTnVtYmVyOw0KICAgIGludCBsaW5lQ291bnQ7
 DQoNCiAgICB2b2lkIFByaW50UGFnZUhlYWRlcih2b2lkKTsNCg0KcHVibGlj
 Og0KICAgIHZpcnR1YWwgflRMaXN0QnVmZmVyKHZvaWQpIHsgZGVsZXRlIHBT
 b3VyY2VGaWxlTmFtZTsgfQ0KDQogICAgdm9pZCBJbml0aWFsaXplKGNvbnN0
 IGNoYXIgKmZpbGVOYW1lKTsNCiAgICB2aXJ0dWFsIHZvaWQgUHV0TGluZSh2
 b2lkKTsNCg0KICAgIHZvaWQgUHV0TGluZShjb25zdCBjaGFyICpwVGV4dCkN
 CiAgICB7DQogICAgICAgIFRUZXh0T3V0QnVmZmVyOjpQdXRMaW5lKHBUZXh0
 KTsNCiAgICB9DQoNCiAgICB2b2lkIFB1dExpbmUoY29uc3QgY2hhciAqcFRl
 eHQsIGludCBsaW5lTnVtYmVyLCBpbnQgbmVzdGluZ0xldmVsKQ0KICAgIHsN
 CiAgICAgICAgc3ByaW50Zih0ZXh0LCAiJTRkICVkOiAlcyIsIGxpbmVOdW1i
 ZXIsIG5lc3RpbmdMZXZlbCwgcFRleHQpOw0KICAgICAgICBQdXRMaW5lKCk7
 DQogICAgfQ0KfTsNCg0KZXh0ZXJuIFRMaXN0QnVmZmVyIGxpc3Q7DQojIDI2
 ICJidWZmZXIuY3BwIiAyDQojIDM1ICJidWZmZXIuY3BwIg0KY2hhciBlb2ZD
 aGFyID0gMHg3RjsNCmludCBpbnB1dFBvc2l0aW9uOw0KDQppbnQgbGlzdEZs
 YWcgPSAxOzsNCiMgNDggImJ1ZmZlci5jcHAiDQpUVGV4dEluQnVmZmVyOjpU
 VGV4dEluQnVmZmVyKGNvbnN0IGNoYXIgKnBJbnB1dEZpbGVOYW1lLCBUQWJv
 cnRDb2RlIGFjKQ0KICAgIDogcEZpbGVOYW1lKG5ldyBjaGFyW3N0cmxlbihw
 SW5wdXRGaWxlTmFtZSkgKyAxXSkNCnsNCg0KICAgIHN0cmNweShwRmlsZU5h
 bWUsIHBJbnB1dEZpbGVOYW1lKTsNCg0KDQoNCiAgICBmaWxlLm9wZW4ocEZp
 bGVOYW1lLCBpb3M6OmluKTsNCiAgICBpZiAoIWZpbGUuZ29vZCgpKSBBYm9y
 dFRyYW5zbGF0aW9uKGFjKTsNCn0NCiMgNzAgImJ1ZmZlci5jcHAiDQpjaGFy
 IFRUZXh0SW5CdWZmZXI6OkdldENoYXIodm9pZCkNCnsNCiAgICBjb25zdCBp
 bnQgdGFiU2l6ZSA9IDg7DQogICAgY2hhciBjaDsNCg0KICAgIGlmICgqcENo
 YXIgPT0gZW9mQ2hhcikgcmV0dXJuIGVvZkNoYXI7DQogICAgZWxzZSBpZiAo
 KnBDaGFyID09ICdcMCcpIGNoID0gR2V0TGluZSgpOw0KICAgIGVsc2Ugew0K
 ICAgICAgICArK3BDaGFyOw0KICAgICAgICArK2lucHV0UG9zaXRpb247DQog
 ICAgICAgIGNoID0gKnBDaGFyOw0KICAgIH0NCg0KDQoNCiAgICBpZiAoY2gg
 PT0gJ1x0JykgaW5wdXRQb3NpdGlvbiArPSB0YWJTaXplIC0gaW5wdXRQb3Np
 dGlvbiV0YWJTaXplOw0KDQogICAgcmV0dXJuIGNoOw0KfQ0KIyA5OSAiYnVm
 ZmVyLmNwcCINCmNoYXIgVFRleHRJbkJ1ZmZlcjo6UHV0QmFja0NoYXIodm9p
 ZCkNCnsNCiAgICAtLXBDaGFyOw0KICAgIC0taW5wdXRQb3NpdGlvbjsNCg0K
 ICAgIHJldHVybiAqcENoYXI7DQp9DQojIDEyMSAiYnVmZmVyLmNwcCINClRT
 b3VyY2VCdWZmZXI6OlRTb3VyY2VCdWZmZXIoY29uc3QgY2hhciAqcFNvdXJj
 ZUZpbGVOYW1lKQ0KICAgIDogVFRleHRJbkJ1ZmZlcihwU291cmNlRmlsZU5h
 bWUsIGFib3J0U291cmNlRmlsZU9wZW5GYWlsZWQpDQp7DQoNCiAgICBpZiAo
 bGlzdEZsYWcpIGxpc3QuSW5pdGlhbGl6ZShwU291cmNlRmlsZU5hbWUpOw0K
 ICAgIEdldExpbmUoKTsNCn0NCiMgMTM4ICJidWZmZXIuY3BwIg0KY2hhciBU
 U291cmNlQnVmZmVyOjpHZXRMaW5lKHZvaWQpDQp7DQogICAgZXh0ZXJuIGlu
 dCBsaW5lTnVtYmVyLCBjdXJyZW50TmVzdGluZ0xldmVsOw0KDQoNCiAgICBp
 ZiAoZmlsZS5lb2YoKSkgcENoYXIgPSAmZW9mQ2hhcjsNCg0KDQogICAgZWxz
 ZSB7DQogICAgICAgIGZpbGUuZ2V0bGluZSh0ZXh0LCBtYXhJbnB1dEJ1ZmZl
 clNpemUpOw0KICAgICAgICBwQ2hhciA9IHRleHQ7DQoNCiAgICAgICAgaWYg
 KGxpc3RGbGFnKSBsaXN0LlB1dExpbmUodGV4dCwgKytjdXJyZW50TGluZU51
 bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
 cmVudE5lc3RpbmdMZXZlbCk7DQogICAgfQ0KDQogICAgaW5wdXRQb3NpdGlv
 biA9IDA7DQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCg0KDQoNCg0KDQoNCg0K
 Y29uc3QgaW50IG1heFByaW50TGluZUxlbmd0aCA9IDgwOw0KY29uc3QgaW50
 IG1heExpbmVzUGVyUGFnZSA9IDUwOw0KDQpUTGlzdEJ1ZmZlciBsaXN0Ow0K
 DQoNCg0KDQoNCg0Kdm9pZCBUTGlzdEJ1ZmZlcjo6UHJpbnRQYWdlSGVhZGVy
 KHZvaWQpDQp7DQogICAgY29uc3QgY2hhciBmb3JtRmVlZENoYXIgPSAnXGYn
 Ow0KDQogICAgY291dCA8PCBmb3JtRmVlZENoYXIgPDwgIlBhZ2UgIiA8PCAr
 K3BhZ2VOdW1iZXINCiAgICAgICAgIDw8ICIgICAiIDw8IHBTb3VyY2VGaWxl
 TmFtZSA8PCAiICAgIiA8PCBkYXRlDQogICAgICAgICA8PCBlbmRsIDw8IGVu
 ZGw7DQoNCiAgICBsaW5lQ291bnQgPSAwOw0KfQ0KIyAxOTMgImJ1ZmZlci5j
 cHAiDQp2b2lkIFRMaXN0QnVmZmVyOjpJbml0aWFsaXplKGNvbnN0IGNoYXIg
 KnBGaWxlTmFtZSkNCnsNCiAgICB0ZXh0WzBdID0gJ1wwJzsNCiAgICBwYWdl
 TnVtYmVyID0gMDsNCg0KDQogICAgcFNvdXJjZUZpbGVOYW1lID0gbmV3IGNo
 YXJbc3RybGVuKHBGaWxlTmFtZSkgKyAxXTsNCiAgICBzdHJjcHkocFNvdXJj
 ZUZpbGVOYW1lLCBwRmlsZU5hbWUpOw0KDQoNCiAgICB0aW1lX3QgdGltZXI7
 DQogICAgdGltZSgmdGltZXIpOw0KICAgIHN0cmNweShkYXRlLCBhc2N0aW1l
 KGxvY2FsdGltZSgmdGltZXIpKSk7DQogICAgZGF0ZVtzdHJsZW4oZGF0ZSkg
 LSAxXSA9ICdcMCc7DQoNCiAgICBQcmludFBhZ2VIZWFkZXIoKTsNCn0NCg0K
 DQoNCg0KDQp2b2lkIFRMaXN0QnVmZmVyOjpQdXRMaW5lKHZvaWQpDQp7DQoN
 CiAgICBpZiAobGlzdEZsYWcgJiYgKGxpbmVDb3VudCA9PSBtYXhMaW5lc1Bl
 clBhZ2UpKSBQcmludFBhZ2VIZWFkZXIoKTsNCg0KDQogICAgdGV4dFttYXhQ
 cmludExpbmVMZW5ndGhdID0gJ1wwJzsNCg0KDQogICAgY291dCA8PCB0ZXh0
 IDw8IGVuZGw7DQogICAgdGV4dFswXSA9ICdcMCc7DQoNCiAgICArK2xpbmVD
 b3VudDsNCn0NCg==
 ---559023410-758783491-1017137114=:8152
 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=out_ok
 Content-Transfer-Encoding: BASE64
 Content-ID: <Pine.SOL.3.95q.1020326110514.8152F@pooh>
 Content-Description: 
 
 IyAxNyAiYnVmZmVyLmNjIg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
 aW8uaCIgMSAzIDQNCiMgMTQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
 LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5o
 IiAzIDQNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMg
 NA0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj
 LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAzIDQNCnR5
 cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7DQojIDE1
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQNCiMgMzQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQg
 IkAoIylzdGRpby5oCTEuNjkJOTgvMDcvMTMgU01JIg0KDQojIDEgIi91c3Iv
 aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxMyAiL3Vz
 ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNA0KI3ByYWdtYSBp
 ZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3CTk3LzEyLzA0IFNNSSIN
 Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQoj
 IDkgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0DQojcHJhZ21h
 IGlkZW50ICJAKCMpaXNhX2RlZnMuaAkxLjE2CTk5LzA1LzI1IFNNSSINCiMg
 MTQ4ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNA0KZXh0ZXJu
 ICJDIiB7DQojIDMzMCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAz
 IDQNCn0NCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o
 IiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAxNzUgIi91c3IvaW5jbHVk
 ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQNCn0NCiMgMzcgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z
 LjAvaW5jbHVkZS9zdGRpby5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUv
 c3lzL3ZhX2xpc3QuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N5cy92
 YV9saXN0LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXZhX2xpc3QuaAkx
 LjExCTk3LzExLzIyIFNNSSINCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdmFf
 bGlzdC5oIiAzIDQNCmV4dGVybiAiQyIgew0KDQoNCg0KdHlwZWRlZiB2b2lk
 ICpfX3ZhX2xpc3Q7DQoNCg0KDQoNCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
 bmNsdWRlL3N0ZGlvLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRp
 b190YWcuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5o
 IiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcuaAkxLjMJOTgv
 MDQvMjAgU01JIg0KDQoNCmV4dGVybiAiQyIgew0KIyAyMSAiL3Vzci9pbmNs
 dWRlL3N0ZGlvX3RhZy5oIiAzIDQNCnR5cGVkZWYgc3RydWN0IEZJTEUgX19G
 SUxFOw0KDQoNCg0KfQ0KIyAzOSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
 Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlv
 LmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDEg
 MyA0DQojIDkgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMgNA0KI3By
 YWdtYSBpZGVudCAiQCgjKXN0ZGlvX2ltcGwuaAkxLjgJOTkvMDYvMzAgU01J
 Ig0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQN
 CiMgMTIgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDIgMyA0DQoNCg0K
 ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IHNzaXpl
 X3Q7DQojIDM4ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQNCnN0
 cnVjdCBGSUxFDQp7DQoNCg0KDQoNCiAgICAgICAgc3NpemVfdCBfY250Ow0K
 ICAgICAgICB1bnNpZ25lZCBjaGFyICpfcHRyOw0KDQogICAgICAgIHVuc2ln
 bmVkIGNoYXIgKl9iYXNlOw0KICAgICAgICB1bnNpZ25lZCBjaGFyIF9mbGFn
 Ow0KICAgICAgICB1bnNpZ25lZCBjaGFyIF9maWxlOw0KICAgICAgICB1bnNp
 Z25lZCBfX29yaWVudGF0aW9uOjI7DQogICAgICAgIHVuc2lnbmVkIF9faW9u
 b2xvY2s6MTsNCiAgICAgICAgdW5zaWduZWQgX19maWxsZXI6NTsNCn07DQoN
 Cg0KDQoNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAy
 IDMgNA0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0K
 ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCnR5cGVkZWYgX19GSUxFIEZJTEU7DQoN
 Cg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsNCiMg
 NzQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
 c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYg
 bG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsNCiMgODggIi9ob21lL21kZWlsL2Jp
 bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j
 bHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYgbG9uZyBvZmZfdDsNCg0KDQoN
 Cg0KDQoNCg0KdHlwZWRlZiBfX2xvbmdsb25nX3Qgb2ZmNjRfdDsNCg0KDQoN
 Cg0KDQoNCnR5cGVkZWYgbG9uZyBmcG9zX3Q7DQoNCg0KDQoNCg0KDQoNCnR5
 cGVkZWYgX19sb25nbG9uZ190IGZwb3M2NF90Ow0KIyAxMzIgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z
 LjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYgX192YV9saXN0IF9f
 bm90X3ZhX2xpc3RfXzsNCiMgMjAzICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
 aW8uaCIgMyA0DQpleHRlcm4gRklMRSBfX2lvYlsyMF07DQojIDIxNSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
 Mi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIHVuc2lnbmVk
 IGNoYXIgX3NpYnVmW10sIF9zb2J1ZltdOw0KIyAyNDQgIi9ob21lL21kZWls
 L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
 aW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiB1bnNpZ25lZCBjaGFyICpf
 YnVmZW5kdGFiW107DQpleHRlcm4gRklMRSAqX2xhc3RidWY7DQojIDI3NSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
 cmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIGludCBy
 ZW1vdmUoY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0
 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFICp0bXBmaWxl
 KHZvaWQpOw0KZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOw0KDQpleHRl
 cm4gY2hhciAqdG1wbmFtX3IoY2hhciAqKTsNCg0KZXh0ZXJuIGludCBmY2xv
 c2UoRklMRSAqKTsNCmV4dGVybiBpbnQgZmZsdXNoKEZJTEUgKik7DQpleHRl
 cm4gRklMRSAqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0K
 ZXh0ZXJuIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
 ICosIEZJTEUgKik7DQpleHRlcm4gdm9pZCBzZXRidWYoRklMRSAqLCBjaGFy
 ICopOw0KDQoNCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIg
 Kiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOw0K
 DQpleHRlcm4gaW50IHNldHZidWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6
 ZV90KTsNCg0KZXh0ZXJuIGludCBmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hh
 ciAqLCAuLi4pOw0KDQpleHRlcm4gaW50IGZzY2FuZihGSUxFICosIGNvbnN0
 IGNoYXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBwcmludGYoY29uc3QgY2hh
 ciAqLCAuLi4pOw0KDQpleHRlcm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwg
 Li4uKTsNCg0KDQoNCg0KZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNp
 emVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KDQoNCmV4dGVybiBpbnQgc3By
 aW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGlu
 dCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7DQpl
 eHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2du
 dWNfdmFfbGlzdCk7DQpleHRlcm4gaW50IHZwcmludGYoY29uc3QgY2hhciAq
 LCBfX2dudWNfdmFfbGlzdCk7DQoNCg0KDQpleHRlcm4gaW50IHZzbnByaW50
 ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlz
 dCk7DQoNCmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFy
 ICosIF9fZ251Y192YV9saXN0KTsNCmV4dGVybiBpbnQgZmdldGMoRklMRSAq
 KTsNCmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsN
 CmV4dGVybiBpbnQgZnB1dGMoaW50LCBGSUxFICopOw0KZXh0ZXJuIGludCBm
 cHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7DQpleHRlcm4gaW50IGdldGMo
 RklMRSAqKTsNCmV4dGVybiBpbnQgZ2V0Y2hhcih2b2lkKTsNCmV4dGVybiBj
 aGFyICpnZXRzKGNoYXIgKik7DQpleHRlcm4gaW50IHB1dGMoaW50LCBGSUxF
 ICopOw0KZXh0ZXJuIGludCBwdXRjaGFyKGludCk7DQpleHRlcm4gaW50IHB1
 dHMoY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgdW5nZXRjKGludCwgRklM
 RSAqKTsNCmV4dGVybiBzaXplX3QgZnJlYWQodm9pZCAqLCBzaXplX3QsIHNp
 emVfdCwgRklMRSAqKTsNCmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZv
 aWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7DQpleHRlcm4gaW50IGZn
 ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7DQpleHRlcm4gaW50IGZzZWVrKEZJ
 TEUgKiwgbG9uZywgaW50KTsNCmV4dGVybiBpbnQgZnNldHBvcyhGSUxFICos
 IGNvbnN0IGZwb3NfdCAqKTsNCmV4dGVybiBsb25nIGZ0ZWxsKEZJTEUgKik7
 DQpleHRlcm4gdm9pZCByZXdpbmQoRklMRSAqKTsNCmV4dGVybiB2b2lkIGNs
 ZWFyZXJyKEZJTEUgKik7DQpleHRlcm4gaW50IGZlb2YoRklMRSAqKTsNCmV4
 dGVybiBpbnQgZmVycm9yKEZJTEUgKik7DQpleHRlcm4gdm9pZCBwZXJyb3Io
 Y29uc3QgY2hhciAqKTsNCg0KDQpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUg
 Kik7DQpleHRlcm4gaW50IF9fZmxzYnVmKGludCwgRklMRSAqKTsNCiMgMzUz
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gRklM
 RSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpj
 dGVybWlkKGNoYXIgKik7DQpleHRlcm4gaW50IGZpbGVubyhGSUxFICopOw0K
 IyAzNjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
 dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVy
 biB2b2lkIGZsb2NrZmlsZShGSUxFICopOw0KZXh0ZXJuIGludCBmdHJ5bG9j
 a2ZpbGUoRklMRSAqKTsNCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUg
 Kik7DQpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsNCmV4dGVy
 biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsNCmV4dGVybiBpbnQgcHV0
 Y191bmxvY2tlZChpbnQsIEZJTEUgKik7DQpleHRlcm4gaW50IHB1dGNoYXJf
 dW5sb2NrZWQoaW50KTsNCiMgMzc5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
 aW8uaCIgMyA0DQpleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBj
 b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsN
 CmV4dGVybiBjaGFyICp0ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
 ciAqKTsNCmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwg
 Y29uc3QgY2hhciAqKTsNCg0KDQoNCmV4dGVybiBjaGFyICpvcHRhcmc7DQpl
 eHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7DQpleHRlcm4gaW50
 IGdldHcoRklMRSAqKTsNCmV4dGVybiBpbnQgcHV0dyhpbnQsIEZJTEUgKik7
 DQpleHRlcm4gaW50IHBjbG9zZShGSUxFICopOw0KDQoNCg0KDQoNCg0KDQpl
 eHRlcm4gaW50IGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOw0KZXh0ZXJu
 IG9mZl90IGZ0ZWxsbyhGSUxFICopOw0KIyA0MDggIi9ob21lL21kZWlsL2Jp
 bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j
 bHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiBGSUxFICpmb3BlbjY0KGNvbnN0
 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFICpmcmVvcGVu
 NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7DQpleHRl
 cm4gRklMRSAqdG1wZmlsZTY0KHZvaWQpOw0KZXh0ZXJuIGludCBmZ2V0cG9z
 NjQoRklMRSAqLCBmcG9zNjRfdCAqKTsNCmV4dGVybiBpbnQgZnNldHBvczY0
 KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7DQpleHRlcm4gaW50IGZzZWVr
 bzY0KEZJTEUgKiwgb2ZmNjRfdCwgaW50KTsNCmV4dGVybiBvZmY2NF90IGZ0
 ZWxsbzY0KEZJTEUgKik7DQojIDU4NiAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
 Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
 ZGlvLmgiIDMgNA0KfQ0KIyAxOCAiYnVmZmVyLmNjIiAyDQojIDEgIi91c3Iv
 aW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQNCiMgMTYgIi91c3IvaW5jbHVkZS9z
 dHJpbmcuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc3RyaW5nLmgJMS4y
 Mgk5Ny8xMi8yMiBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0
 dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3RyaW5n
 LmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDQzICIvdXNyL2luY2x1
 ZGUvc3RyaW5nLmgiIDMgNA0KZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICos
 IGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCmV4dGVybiB2b2lkICptZW1tb3Zl
 KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIg
 KnN0cmNweShjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAq
 c3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCg0KZXh0
 ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRl
 cm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
 KTsNCg0KZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2
 b2lkICosIHNpemVfdCk7DQpleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFy
 ICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHN0cmNvbGwoY29uc3Qg
 Y2hhciAqLCBjb25zdCBjaGFyICopOw0KZXh0ZXJuIGludCBzdHJuY21wKGNv
 bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIHNp
 emVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K
 DQpleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXpl
 X3QpOw0KZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7
 DQpleHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBj
 aGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBj
 b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29uc3QgY2hh
 ciAqLCBpbnQpOw0KZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAq
 LCBjb25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBj
 aGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RydG9rKGNo
 YXIgKiwgY29uc3QgY2hhciAqKTsNCg0KDQpleHRlcm4gY2hhciAqc3RydG9r
 X3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOw0KDQpleHRlcm4g
 dm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOw0KZXh0ZXJuIGNo
 YXIgKnN0cmVycm9yKGludCk7DQpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25z
 dCBjaGFyICopOw0KDQoNCg0KZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAq
 LCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJu
 IGNoYXIgKnN0cnNpZ25hbChpbnQpOw0KZXh0ZXJuIGludCBmZnMoaW50KTsN
 CmV4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo
 YXIgKik7DQpleHRlcm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwg
 Y29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQoNCg0KDQoNCmV4dGVybiBjaGFy
 ICpzdHJkdXAoY29uc3QgY2hhciAqKTsNCiMgMTQ2ICIvdXNyL2luY2x1ZGUv
 c3RyaW5nLmgiIDMgNA0KfQ0KIyAxOSAiYnVmZmVyLmNjIiAyDQojIDEgIi91
 c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1ZGUv
 dGltZS5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMS4zNgk5
 OC8wMy8yNyBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
 X3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy
 IDMgNA0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg
 MyA0DQojIDI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
 NA0KI3ByYWdtYSBpZGVudCAiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBT
 TUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMg
 NA0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj
 LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMg
 NA0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAz
 IDQNCiMgMjkgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
 Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
 IDQNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5o
 IiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIg
 MyA0DQojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMgk5Ni8w
 OC8wMSBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rl
 c3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBl
 cy5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAzMyAiL3Vzci9pbmNs
 dWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBfcGh5
 c2Fkcl90IHsgaW50IHJbMV07IH0gKnBoeXNhZHJfdDsNCg0KdHlwZWRlZiBz
 dHJ1Y3QgX2xhYmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90Ow0KDQoN
 Cg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsNCg0KDQp9DQojIDM0
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDQ1
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KIyAxICIv
 dXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNA0KIyA5ICIvdXNy
 L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQg
 IkAoIylpbnRfdHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIg0KIyA0MiAiL3Vz
 ci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQojIDEgIi91c3IvaW5j
 bHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgNDMgIi91c3IvaW5jbHVk
 ZS9zeXMvaW50X3R5cGVzLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj
 IDYyICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCnR5cGVk
 ZWYgY2hhciBpbnQ4X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBpbnQx
 Nl90Ow0KdHlwZWRlZiBpbnQgaW50MzJfdDsNCg0KDQoNCg0KdHlwZWRlZiBs
 b25nIGxvbmcgaW50NjRfdDsNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hh
 ciB1aW50OF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsN
 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90Ow0KDQoNCg0KDQp0eXBl
 ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsNCiMgOTQgIi91c3Iv
 aW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQ2NF90
 IGludG1heF90Ow0KdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7DQojIDEx
 MCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQp0eXBlZGVm
 IGludCBpbnRwdHJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJf
 dDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBjaGFyIGludF9sZWFzdDhfdDsN
 Cg0KDQoNCg0KDQp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7DQp0eXBl
 ZGVmIGludCBpbnRfbGVhc3QzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcg
 bG9uZyBpbnRfbGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBj
 aGFyIHVpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVp
 bnRfbGVhc3QxNl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFz
 dDMyX3Q7DQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVp
 bnRfbGVhc3Q2NF90Ow0KDQoNCg0KDQp9DQojIDQ2ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
 Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCmV4dGVy
 biAiQyIgew0KIyA2MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
 L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5o
 IiAzIDQNCnR5cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7DQp0eXBlZGVm
 IHVuc2lnbmVkIGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7DQojIDg1ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25n
 IHRfc2NhbGFyX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdF91c2NhbGFy
 X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7
 DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Ow0KdHlwZWRlZiB1
 bnNpZ25lZCBpbnQgdWludF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVs
 b25nX3Q7DQoNCnR5cGVkZWYgY2hhciAqY2FkZHJfdDsNCnR5cGVkZWYgbG9u
 ZyBkYWRkcl90Ow0KdHlwZWRlZiBzaG9ydCBjbnRfdDsNCg0KDQp0eXBlZGVm
 IHVsb25nX3QgcGFkZHJfdDsNCiMgMTE2ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUv
 c3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQgcHRyZGlmZl90Ow0KIyAx
 MjUgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
 c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBl
 ZGVmIHVsb25nX3QgcGZuX3Q7DQp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsN
 CnR5cGVkZWYgbG9uZyBzcGdjbnRfdDsNCg0KdHlwZWRlZiB1Y2hhcl90IHVz
 ZV90Ow0KdHlwZWRlZiBzaG9ydCBzeXNpZF90Ow0KdHlwZWRlZiBzaG9ydCBp
 bmRleF90Ow0KdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7DQp0eXBlZGVm
 IHZvaWQgKmJ1ZmNhbGxfaWRfdDsNCiMgMTYzICIvaG9tZS9tZGVpbC9iaW4v
 Li4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1
 ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1bG9uZ190IGlub190Ow0K
 dHlwZWRlZiBsb25nIGJsa2NudF90Ow0KdHlwZWRlZiB1bG9uZ190IGZzYmxr
 Y250X3Q7DQp0eXBlZGVmIHVsb25nX3QgZnNmaWxjbnRfdDsNCiMgMTgxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1
 X2xvbmdsb25nX3QgaW5vNjRfdDsNCnR5cGVkZWYgbG9uZ2xvbmdfdCBibGtj
 bnQ2NF90Ow0KdHlwZWRlZiB1X2xvbmdsb25nX3QgZnNibGtjbnQ2NF90Ow0K
 dHlwZWRlZiB1X2xvbmdsb25nX3QgZnNmaWxjbnQ2NF90Ow0KDQoNCg0KDQoN
 Cg0KdHlwZWRlZiBsb25nIGJsa3NpemVfdDsNCg0KDQoNCnR5cGVkZWYgZW51
 bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90Ow0KIyAyMDggIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGlu
 dDY0X3QgcGFkNjRfdDsNCnR5cGVkZWYgdWludDY0X3QgdXBhZDY0X3Q7DQoj
 IDIyMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5
 cGVkZWYgbG9uZ2xvbmdfdCBvZmZzZXRfdDsNCnR5cGVkZWYgdV9sb25nbG9u
 Z190IHVfb2Zmc2V0X3Q7DQp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBsZW5fdDsN
 CnR5cGVkZWYgbG9uZ2xvbmdfdCBkaXNrYWRkcl90Ow0KIyAyNDIgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIHVuaW9u
 IHsNCiAgICAgICAgb2Zmc2V0X3QgX2Y7DQogICAgICAgIHN0cnVjdCB7DQog
 ICAgICAgICAgICAgICAgaW50MzJfdCBfdTsNCiAgICAgICAgICAgICAgICBp
 bnQzMl90IF9sOw0KICAgICAgICB9IF9wOw0KfSBsbG9mZl90Ow0KIyAyNjIg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
 YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVm
 IHVuaW9uIHsNCiAgICAgICAgZGlza2FkZHJfdCBfZjsNCiAgICAgICAgc3Ry
 dWN0IHsNCiAgICAgICAgICAgICAgICBpbnQzMl90IF91Ow0KICAgICAgICAg
 ICAgICAgIGludDMyX3QgX2w7DQogICAgICAgIH0gX3A7DQp9IGxsZGFkZHJf
 dDsNCg0KDQp0eXBlZGVmIHVpbnRfdCBrX2ZsdHNldF90Ow0KIyAyODcgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGxv
 bmcgaWRfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdWludF90IHVzZWNvbmRz
 X3Q7DQoNCg0KDQp0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7DQojIDMwOCAi
 L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
 cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5cGVkZWYg
 dWxvbmdfdCBtYWpvcl90Ow0KdHlwZWRlZiB1bG9uZ190IG1pbm9yX3Q7DQoN
 Cg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBwcmlfdDsNCiMgMzI4ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1c2hvcnRf
 dCBvX21vZGVfdDsNCnR5cGVkZWYgc2hvcnQgb19kZXZfdDsNCnR5cGVkZWYg
 dXNob3J0X3Qgb191aWRfdDsNCnR5cGVkZWYgb191aWRfdCBvX2dpZF90Ow0K
 dHlwZWRlZiBzaG9ydCBvX25saW5rX3Q7DQp0eXBlZGVmIHNob3J0IG9fcGlk
 X3Q7DQp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7DQoNCg0KDQoNCg0KdHlw
 ZWRlZiBpbnQga2V5X3Q7DQoNCg0KDQp0eXBlZGVmIHVsb25nX3QgbW9kZV90
 Ow0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgdWlkX3Q7DQoNCg0KDQp0
 eXBlZGVmIHVpZF90IGdpZF90Ow0KDQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNp
 Z25lZCBpbnQgcHRocmVhZF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo
 cmVhZF9rZXlfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXgg
 ew0KICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
 X19wdGhyZWFkX211dGV4X2ZsYWdbNF07DQogICAgICAgICAgICAgICAgdWlu
 dDMyX3QgX19wdGhyZWFkX211dGV4X3R5cGU7DQogICAgICAgIH0gX19wdGhy
 ZWFkX211dGV4X2ZsYWdzOw0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAg
 ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4
 X3QgX19wdGhyZWFkX211dGV4X3BhZFs4XTsNCiAgICAgICAgICAgICAgICB9
 IF9fcHRocmVhZF9tdXRleF9sb2NrNjQ7DQogICAgICAgICAgICAgICAgdXBh
 ZDY0X3QgX19wdGhyZWFkX211dGV4X293bmVyNjQ7DQogICAgICAgIH0gX19w
 dGhyZWFkX211dGV4X2xvY2s7DQogICAgICAgIHVwYWQ2NF90IF9fcHRocmVh
 ZF9tdXRleF9kYXRhOw0KfSBwdGhyZWFkX211dGV4X3Q7DQoNCnR5cGVkZWYg
 c3RydWN0IF9wdGhyZWFkX2NvbmQgew0KICAgICAgICBzdHJ1Y3Qgew0KICAg
 ICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsN
 CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfY29uZF90eXBl
 Ow0KICAgICAgICB9IF9fcHRocmVhZF9jb25kX2ZsYWdzOw0KICAgICAgICB1
 cGFkNjRfdCBfX3B0aHJlYWRfY29uZF9kYXRhOw0KfSBwdGhyZWFkX2NvbmRf
 dDsNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrIHsN
 CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRlcnM7DQog
 ICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfdHlwZTsNCiAgICAg
 ICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja19tYWdpYzsNCiAgICAgICAg
 dXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQxWzNdOw0KICAgICAgICB1
 cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDJbMl07DQogICAgICAgIHVw
 YWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkM1syXTsNCn0gcHRocmVhZF9y
 d2xvY2tfdDsNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfYXR0
 ciB7DQogICAgICAgIHZvaWQgKl9fcHRocmVhZF9hdHRycDsNCn0gcHRocmVh
 ZF9hdHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf
 bXV0ZXhhdHRyIHsNCiAgICAgICAgdm9pZCAqX19wdGhyZWFkX211dGV4YXR0
 cnA7DQp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRl
 ZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZGF0dHIgew0KICAgICAgICB2b2lkICpf
 X3B0aHJlYWRfY29uZGF0dHJwOw0KfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQoN
 Cg0KDQoNCnR5cGVkZWYgc3RydWN0IF9vbmNlIHsNCiAgICAgICAgdXBhZDY0
 X3QgX19wdGhyZWFkX29uY2VfcGFkWzRdOw0KfSBwdGhyZWFkX29uY2VfdDsN
 Cg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2thdHRy
 IHsNCiAgICAgICAgdm9pZCAqX19wdGhyZWFkX3J3bG9ja2F0dHJwOw0KfSBw
 dGhyZWFkX3J3bG9ja2F0dHJfdDsNCg0KdHlwZWRlZiB1bG9uZ190IGRldl90
 Ow0KDQoNCg0KDQoNCnR5cGVkZWYgdWxvbmdfdCBubGlua190Ow0KdHlwZWRl
 ZiBsb25nIHBpZF90Ow0KIyA0NzYgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv
 Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMv
 dHlwZXMuaCIgMyA0DQp0eXBlZGVmIGxvbmcgdGltZV90Ow0KDQoNCg0KDQp0
 eXBlZGVmIGxvbmcgY2xvY2tfdDsNCg0KDQoNCg0KdHlwZWRlZiBpbnQgY2xv
 Y2tpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIGludCB0aW1lcl90Ow0KDQoNCg0K
 DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVuY2hhcjsNCnR5cGVkZWYg
 dW5zaWduZWQgc2hvcnQgdXNob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQg
 dWludDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsNCiMgNTUyICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1
 bnNpZ25lZCBjaGFyIHVfY2hhcjsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
 dV9zaG9ydDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Ow0KdHlwZWRl
 ZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsNCnR5cGVkZWYgc3RydWN0IF9xdWFk
 IHsgaW50IHZhbFsyXTsgfSBxdWFkX3Q7DQp0eXBlZGVmIHF1YWRfdCBxdWFk
 Ow0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
 IiAxIDMgNA0KIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0
 DQojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBT
 TUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgi
 IDEgMyA0DQojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMg
 NA0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0DQoj
 IDIyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojcHJhZ21hIGlk
 ZW50ICJAKCMpdGltZS5oCTIuNjIJOTgvMDIvMDQgU01JIg0KDQojIDEgIi91
 c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyNSAi
 L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoN
 CmV4dGVybiAiQyIgew0KIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi
 IDMgNA0Kc3RydWN0IHRpbWV2YWwgew0KICAgICAgICB0aW1lX3QgdHZfc2Vj
 Ow0KICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOw0KfTsNCiMgODIgIi91
 c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCB0aW1lem9uZSB7
 DQogICAgICAgIGludCB0el9taW51dGVzd2VzdDsNCiAgICAgICAgaW50IHR6
 X2RzdHRpbWU7DQp9Ow0KDQoNCg0KDQoNCn0NCiMgMTAwICIvdXNyL2luY2x1
 ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9s
 aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
 eXMvdHlwZXMuaCIgMSAzIDQNCiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3Rp
 bWUuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyAxNTUgIi91c3Iv
 aW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCBpdGltZXJ2YWwgew0K
 ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsNCiAgICAgICAg
 c3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7DQp9Ow0KIyAyMDMgIi91c3IvaW5j
 bHVkZS9zeXMvdGltZS5oIiAzIDQNCnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRp
 bWVfdDsNCiMgMzE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpp
 bnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAq
 KTsNCiMgMzI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQppbnQg
 Z2V0aXRpbWVyKGludCwgc3RydWN0IGl0aW1lcnZhbCAqKTsNCmludCB1dGlt
 ZXMoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsNCg0K
 aW50IHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwg
 c3RydWN0IGl0aW1lcnZhbCAqKTsNCiMgMzY0ICIvdXNyL2luY2x1ZGUvc3lz
 L3RpbWUuaCIgMyA0DQppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFs
 ICosIHZvaWQgKik7DQoNCmhydGltZV90IGdldGhydGltZSh2b2lkKTsNCmhy
 dGltZV90IGdldGhydnRpbWUodm9pZCk7DQojIDM4NCAiL3Vzci9pbmNsdWRl
 L3N5cy90aW1lLmgiIDMgNA0KaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGlt
 ZXZhbCAqLCB2b2lkICopOw0KIyA0MDUgIi91c3IvaW5jbHVkZS9zeXMvdGlt
 ZS5oIiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQNCiMg
 NDA2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQNCiMgNDE4ICIv
 dXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk
 ZS9zeXMvc2VsZWN0LmgiIDEgMyA0DQojIDQxOSAiL3Vzci9pbmNsdWRlL3N5
 cy90aW1lLmgiIDIgMyA0DQoNCg0KDQoNCg0KfQ0KIyAxOCAiL3Vzci9pbmNs
 dWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0K
 IyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVm
 IGxvbmcgZmRfbWFzazsNCg0KdHlwZWRlZiBsb25nIGZkc19tYXNrOw0KIyA3
 MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVmIHN0
 cnVjdCBmZF9zZXQgew0KDQoNCg0KICAgICAgICBsb25nIGZkc19iaXRzWygo
 KDEwMjQpKygoKHNpemVvZiAoZmRzX21hc2spICogOCkpLTEpKS8oKHNpemVv
 ZiAoZmRzX21hc2spICogOCkpKV07DQp9IGZkX3NldDsNCiMgOTcgIi91c3Iv
 aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNA0KZXh0ZXJuIGludCBzZWxlY3Qo
 aW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGlt
 ZXZhbCAqKTsNCg0KDQoNCg0KDQoNCn0NCiMgNTY1ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
 Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDU4MSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
 bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCn0NCiMgMjAgIi91c3IvaW5jbHVk
 ZS90aW1lLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDY0ICIvdXNy
 L2luY2x1ZGUvdGltZS5oIiAzIDQNCnN0cnVjdCB0bSB7DQogICAgICAgIGlu
 dCB0bV9zZWM7DQogICAgICAgIGludCB0bV9taW47DQogICAgICAgIGludCB0
 bV9ob3VyOw0KICAgICAgICBpbnQgdG1fbWRheTsNCiAgICAgICAgaW50IHRt
 X21vbjsNCiAgICAgICAgaW50IHRtX3llYXI7DQogICAgICAgIGludCB0bV93
 ZGF5Ow0KICAgICAgICBpbnQgdG1feWRheTsNCiAgICAgICAgaW50IHRtX2lz
 ZHN0Ow0KfTsNCg0KDQoNCmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOw0K
 ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCk7DQpleHRl
 cm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7DQpleHRlcm4gdGltZV90
 IHRpbWUodGltZV90ICopOw0KZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29uc3Qg
 c3RydWN0IHRtICopOw0KZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVf
 dCAqKTsNCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3Qg
 Kik7DQpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29uc3QgdGltZV90
 ICopOw0KZXh0ZXJuIHNpemVfdCBzdHJmdGltZShjaGFyICosIHNpemVfdCwg
 Y29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQpleHRl
 cm4gc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0
 IHRtICopOw0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3Qg
 dGltZV90ICosIHN0cnVjdCB0bSAqKTsNCg0KDQoNCg0KDQpleHRlcm4gY2hh
 ciAqc3RycHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVj
 dCB0bSAqKTsNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGlt
 ZV9pbXBsLmgiIDEgMyA0DQojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf
 aW1wbC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lX2ltcGwuaAkx
 LjMJOTgvMDIvMTMgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
 dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy90
 aW1lX2ltcGwuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzYgIi91
 c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNA0KdHlwZWRlZiBzdHJ1
 Y3QgdGltZXNwZWMgew0KICAgICAgICB0aW1lX3QgdHZfc2VjOw0KICAgICAg
 ICBsb25nIHR2X25zZWM7DQp9IHRpbWVzcGVjX3Q7DQojIDYwICIvdXNyL2lu
 Y2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCnR5cGVkZWYgc3RydWN0IHRp
 bWVzcGVjIHRpbWVzdHJ1Y190Ow0KIyA3OSAiL3Vzci9pbmNsdWRlL3N5cy90
 aW1lX2ltcGwuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVjIHsN
 CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICAgICAg
 ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7DQp9IGl0aW1lcnNwZWNfdDsN
 CiMgMTMwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCn0N
 CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KIyAxMTggIi91
 c3IvaW5jbHVkZS90aW1lLmgiIDMgNA0KdW5pb24gc2lndmFsIHsNCiAgICAg
 ICAgaW50IHNpdmFsX2ludDsNCiAgICAgICAgdm9pZCAqc2l2YWxfcHRyOw0K
 fTsNCg0KDQoNCg0Kc3RydWN0IHNpZ2V2ZW50IHsNCiAgICAgICAgaW50IHNp
 Z2V2X25vdGlmeTsNCiAgICAgICAgaW50IHNpZ2V2X3NpZ25vOw0KICAgICAg
 ICB1bmlvbiBzaWd2YWwgc2lnZXZfdmFsdWU7DQogICAgICAgIHZvaWQgKCpz
 aWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7DQogICAgICAg
 IHB0aHJlYWRfYXR0cl90ICpzaWdldl9ub3RpZnlfYXR0cmlidXRlczsNCiAg
 ICAgICAgaW50IF9fc2lnZXZfcGFkMjsNCn07DQoNCg0KZXh0ZXJuIGludCBj
 bG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7DQpl
 eHRlcm4gaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGlt
 ZXNwZWMgKik7DQpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90
 LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7DQpleHRlcm4gaW50IHRpbWVy
 X2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVudCAqLCB0aW1lcl90
 ICopOw0KZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCk7DQpleHRl
 cm4gaW50IHRpbWVyX2dldG92ZXJydW4odGltZXJfdCk7DQpleHRlcm4gaW50
 IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7
 DQpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25z
 dCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLA0KICAgICAgICAgICAgICAgIHN0cnVj
 dCBpdGltZXJzcGVjICopOw0KZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qg
 c3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsNCg0KDQoN
 Cg0KZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCk7DQoNCmV4dGVybiBjaGFyICp0
 em5hbWVbMl07DQoNCg0KZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsNCg0K
 DQoNCg0KDQoNCmV4dGVybiBsb25nIHRpbWV6b25lOw0KZXh0ZXJuIGludCBk
 YXlsaWdodDsNCiMgMTc2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCmV4
 dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUoY29uc3QgY2hhciAqKTsNCg0KDQoN
 Cg0KDQoNCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7DQojIDI3MiAiL3Vzci9p
 bmNsdWRlL3RpbWUuaCIgMyA0DQpzdGF0aWMgY2hhciAqDQphc2N0aW1lX3Io
 Y29uc3Qgc3RydWN0IHRtICpfX3RtLCBjaGFyICpfX2J1ZikNCnsNCiAgICAg
 ICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfYXNjdGltZV9yKGNvbnN0IHN0cnVj
 dCB0bSAqLCBjaGFyICopOw0KICAgICAgICByZXR1cm4gKF9fcG9zaXhfYXNj
 dGltZV9yKF9fdG0sIF9fYnVmKSk7DQp9DQpzdGF0aWMgY2hhciAqDQpjdGlt
 ZV9yKGNvbnN0IHRpbWVfdCAqX190aW1lLCBjaGFyICpfX2J1ZikNCnsNCiAg
 ICAgICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfY3RpbWVfcihjb25zdCB0aW1l
 X3QgKiwgY2hhciAqKTsNCiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2N0aW1l
 X3IoX190aW1lLCBfX2J1ZikpOw0KfQ0KIyAzMzQgIi91c3IvaW5jbHVkZS90
 aW1lLmgiIDMgNA0KfQ0KIyAyMCAiYnVmZmVyLmNjIiAyDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyAyMSAiYnVmZmVyLmNj
 IiAyDQojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQNCiMgMjIg
 ImJ1ZmZlci5jYyIgMg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAxIDMNCiMgMzEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9mc3RyZWFt
 LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzDQojIDMyICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVh
 bS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAz
 DQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2lzdHJlYW0uaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAzDQoNCiMg
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X2lvcy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMw0KDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAz
 DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfaW9zZndkLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytj
 b25maWcuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcu
 aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMw0K
 IyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJj
 LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDIgMw0KIyA0MCAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
 c2Z3ZC5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMN
 Cg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDQw
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdHJp
 bmdmd2QuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8
 Y2xhc3MgX0NoYXJUPg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsNCg0KICB0
 ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+Ow0KDQoNCg0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjbGFzcyBhbGxvY2F0
 b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlw
 ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNz
 IGJhc2ljX3N0cmluZzsNCg0KICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFy
 PiBzdHJpbmc7DQoNCg0KDQp9DQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgi
 IDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvZnBvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysraW8u
 aCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEg
 Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Nz
 dGRpbyIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1z
 dW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgMzggIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
 aW8uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
 Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0DQoj
 IDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfY3N0ZGRlZi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2lu
 ZyA6OnB0cmRpZmZfdDsNCiAgdXNpbmcgOjpzaXplX3Q7DQp9DQojIDM5ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
 ZGlvLmgiIDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
 aW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyA0MiAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMNCiMg
 ODYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9jc3RkaW8uaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJ
 TEU7DQogIHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5nIDo6Y2xlYXJlcnI7
 DQogIHVzaW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5n
 IDo6ZmVycm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0
 YzsNCiAgdXNpbmcgOjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1
 c2luZyA6OmZvcGVuOw0KICB1c2luZyA6OmZwcmludGY7DQogIHVzaW5nIDo6
 ZnB1dGM7DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6ZnJlYWQ7DQog
 IHVzaW5nIDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5n
 IDo6ZnNlZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVs
 bDsNCiAgdXNpbmcgOjpmd3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNp
 bmcgOjpnZXRjaGFyOw0KICB1c2luZyA6OmdldHM7DQogIHVzaW5nIDo6cGVy
 cm9yOw0KICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRjOw0KICB1
 c2luZyA6OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpy
 ZW1vdmU7DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsN
 CiAgdXNpbmcgOjpzY2FuZjsNCiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5n
 IDo6c2V0dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRmOw0KICB1c2luZyA6OnNz
 Y2FuZjsNCiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5hbTsN
 CiAgdXNpbmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVz
 aW5nIDo6dnByaW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzIg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIg
 Mw0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysraW8uaCIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMN
 CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
 Yy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMw0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvYml0cy9ndGhyLmgiIDEgMw0KIyA5OCAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv
 Z3Roci5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5o
 IiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAz
 DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
 dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0DQoj
 IDE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQNCiNwcmFn
 bWEgaWRlbnQgIkAoIylwdGhyZWFkLmgJMS4yNgk5OC8wNC8xMiBTTUkiDQoN
 Cg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0
 DQojIDIyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNA0K
 IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyMyAiL2hvbWUv
 bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
 LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNs
 dWRlL3NjaGVkLmgiIDEgMyA0DQojIDExICIvdXNyL2luY2x1ZGUvc2NoZWQu
 aCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc2NoZWQuaAkxLjkJOTgvMDEv
 MTYgU01JIg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMu
 aCIgMSAzIDQNCiMgMTQgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMgNA0K
 IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAxNSAiL3Vzci9p
 bmNsdWRlL3NjaGVkLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0K
 c3RydWN0IHNjaGVkX3BhcmFtIHsNCiAgICAgICAgaW50IHNjaGVkX3ByaW9y
 aXR5Ow0KICAgICAgICBpbnQgc2NoZWRfbmljZWxpbTsNCiAgICAgICAgaW50
 IHNjaGVkX25pY2U7DQogICAgICAgIGludCBzY2hlZF9wYWRbNl07DQoNCg0K
 DQp9Ow0KIyA0NCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMgNA0KaW50IHNj
 aGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpw
 YXJhbSk7DQppbnQgc2NoZWRfc2V0cGFyYW0ocGlkX3QgcGlkLCBjb25zdCBz
 dHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsNCmludCBzY2hlZF9nZXRzY2hl
 ZHVsZXIocGlkX3QgcGlkKTsNCmludCBzY2hlZF9zZXRzY2hlZHVsZXIocGlk
 X3QgcGlkLCBpbnQgcG9saWN5LA0KICAgICAgICAgICAgICAgIGNvbnN0IHN0
 cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOw0KaW50IHNjaGVkX3lpZWxkKHZv
 aWQpOw0KaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7
 DQppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihpbnQgcG9saWN5KTsNCmlu
 dCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1Y3QgdGlt
 ZXNwZWMgKmludGVydmFsKTsNCiMgNjUgIi91c3IvaW5jbHVkZS9zY2hlZC5o
 IiAzIDQNCn0NCiMgMjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgi
 IDIgMyA0DQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgOTUgIi9ob21lL21kZWls
 L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
 aW5jbHVkZS9wdGhyZWFkLmgiIDMgNA0KdHlwZWRlZiBzdHJ1Y3QgX2NsZWFu
 dXAgew0KICAgICAgICB1aW50cHRyX3QgcHRocmVhZF9jbGVhbnVwX3BhZFs0
 XTsNCn0gX2NsZWFudXBfdDsNCg0KDQoNCnZvaWQgX19wdGhyZWFkX2NsZWFu
 dXBfcHVzaCh2b2lkICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAqYXJncywN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRk
 cl90IGZwLCBfY2xlYW51cF90ICppbmZvKTsNCnZvaWQgX19wdGhyZWFkX2Ns
 ZWFudXBfcG9wKGludCBleCwgX2NsZWFudXBfdCAqaW5mbyk7DQpjYWRkcl90
 IF9nZXRmcCh2b2lkKTsNCiMgMTI5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRo
 cmVhZC5oIiAzIDQNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQocHRo
 cmVhZF9hdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0
 cm95KHB0aHJlYWRfYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0
 dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7DQpl
 eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHRo
 cmVhZF9hdHRyX3QgKiwgc2l6ZV90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFk
 X2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICosIHZvaWQgKik7
 DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3Qg
 cHRocmVhZF9hdHRyX3QgKiwgdm9pZCAqKik7DQpleHRlcm4gaW50IHB0aHJl
 YWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQp
 Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUoY29u
 c3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy
 ZWFkX2F0dHJfc2V0c2NvcGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsNCmV4
 dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRf
 YXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
 dGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOw0KZXh0ZXJu
 IGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkKGNvbnN0IHB0aHJl
 YWRfYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
 X3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICosIGludCk7DQpleHRl
 cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeShjb25zdCBwdGhy
 ZWFkX2F0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0
 cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90ICosDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNj
 aGVkX3BhcmFtICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2No
 ZWRwYXJhbShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJh
 bSAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICos
 IGNvbnN0IHB0aHJlYWRfYXR0cl90ICosDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIHZvaWQgKiAoKikodm9pZCAqKSwgdm9pZCAqKTsNCmV4
 dGVybiBpbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICosIHZvaWQg
 KCopKHZvaWQpKTsNCmV4dGVybiBpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRf
 dCwgdm9pZCAqKik7DQpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJl
 YWRfdCk7DQpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsNCmV4
 dGVybiBpbnQgcHRocmVhZF9jYW5jZWwocHRocmVhZF90KTsNCmV4dGVybiBp
 bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50LCBjb25z
 dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRf
 Z2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRf
 cGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUo
 aW50LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw
 ZShpbnQsIGludCAqKTsNCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNl
 bCh2b2lkKTsNCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3Qs
 IHB0aHJlYWRfdCk7DQpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShw
 dGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOw0KZXh0ZXJuIGlu
 dCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCk7DQpleHRlcm4g
 aW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCwgY29uc3Qg
 dm9pZCAqKTsNCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljKHB0
 aHJlYWRfa2V5X3QpOw0KZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYo
 dm9pZCk7DQoNCg0KDQoNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf
 aW5pdChwdGhyZWFkX211dGV4YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhy
 ZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7
 DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRo
 cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOw0KZXh0ZXJuIGludCBwdGhyZWFk
 X211dGV4YXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy
 X3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z
 ZXRwcm90b2NvbChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRl
 cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByb3RvY29sKGNvbnN0IHB0
 aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy
 ZWFkX211dGV4YXR0cl9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4YXR0
 cl90ICosIGludCk7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl
 dHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50
 ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9t
 dXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7DQpleHRl
 cm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3Qg
 Kik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211
 dGV4X3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0
 aHJlYWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90
 cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
 ZF9tdXRleF9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50
 LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2Nl
 aWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCAqKTsNCmV4dGVybiBpbnQg
 cHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJlYWRfY29uZGF0dHJfdCAqKTsN
 CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRf
 Y29uZGF0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9z
 ZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCAqLCBpbnQpOw0KZXh0ZXJu
 IGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVh
 ZF9jb25kYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9j
 b25kX2luaXQocHRocmVhZF9jb25kX3QgKiwgY29uc3QgcHRocmVhZF9jb25k
 YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShw
 dGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jy
 b2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
 ZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQg
 cHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9t
 dXRleF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0
 KHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0ZXhfdCAqLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj
 dCB0aW1lc3BlYyAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1
 YXJkc2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7DQpl
 eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUocHRocmVhZF9h
 dHRyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25j
 dXJyZW5jeSh2b2lkKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJy
 ZW5jeShpbnQgbmV3dmFsKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0
 dHJfc2V0dHlwZShwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRl
 cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3QgcHRocmVh
 ZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRf
 cndsb2NrX2luaXQocHRocmVhZF9yd2xvY2tfdCAqLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
 dCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhy
 ZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19y
 ZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
 ZF9yd2xvY2tfdHJ5cmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRl
 cm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190
 ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2socHRo
 cmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
 dW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJl
 YWRfcndsb2NrYXR0cl9pbml0KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOw0K
 ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveShwdGhyZWFk
 X3J3bG9ja2F0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th
 dHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKiwg
 aW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNo
 YXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQpOw0KIyAzMDQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNA0KfQ0KIyAzOCAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xh
 cmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMw0KDQp0eXBlZGVmIHB0
 aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Ow0KdHlwZWRlZiBwdGhyZWFk
 X29uY2VfdCBfX2d0aHJlYWRfb25jZV90Ow0KdHlwZWRlZiBwdGhyZWFkX211
 dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7DQoNCg0KDQoNCg0KDQojcHJhZ21h
 IHdlYWsgcHRocmVhZF9vbmNlDQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlf
 Y3JlYXRlDQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlDQojcHJh
 Z21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYw0KI3ByYWdtYSB3ZWFrIHB0
 aHJlYWRfc2V0c3BlY2lmaWMNCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0
 ZQ0KDQojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrDQojcHJhZ21h
 IHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrDQojcHJhZ21hIHdlYWsgcHRo
 cmVhZF9tdXRleF91bmxvY2sNCiMgNzggIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHIt
 ZGVmYXVsdC5oIiAzDQpzdGF0aWMgdm9pZCAqX19ndGhyZWFkX2FjdGl2ZV9w
 dHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7DQoNCnN0YXRpYyBpbmxp
 bmUgaW50DQpfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpDQp7DQogIHJldHVy
 biBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOw0KfQ0KIyA0MjcgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJp
 czIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzDQpzdGF0aWMgaW5saW5lIGlu
 dA0KX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZv
 aWQgKCpmdW5jKSAodm9pZCkpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZl
 X3AgKCkpDQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7
 DQogIGVsc2UNCiAgICByZXR1cm4gLTE7DQp9DQoNCnN0YXRpYyBpbmxpbmUg
 aW50DQpfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICpr
 ZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkNCnsNCiAgcmV0dXJuIHB0aHJl
 YWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsNCn0NCg0Kc3RhdGljIGlubGlu
 ZSBpbnQNCl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtl
 eSwgdm9pZCAqcHRyKQ0Kew0KDQogIGlmIChwdHIpDQogICAgcmV0dXJuIHB0
 aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7DQogIGVsc2UNCiAgICByZXR1
 cm4gMDsNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9rZXlf
 ZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQ0Kew0KICByZXR1cm4gcHRo
 cmVhZF9rZXlfZGVsZXRlIChrZXkpOw0KfQ0KDQpzdGF0aWMgaW5saW5lIHZv
 aWQgKg0KX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qg
 a2V5KQ0Kew0KICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsN
 Cn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9zZXRzcGVjaWZp
 YyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQ0Kew0K
 ICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOw0KfQ0K
 DQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X2xvY2sgKF9f
 Z3RocmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9h
 Y3RpdmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrICht
 dXRleCk7DQogIGVsc2UNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlu
 bGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRf
 bXV0ZXhfdCAqbXV0ZXgpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3Ag
 KCkpDQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgp
 Ow0KICBlbHNlDQogICAgcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbmxpbmUg
 aW50DQpfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhf
 dCAqbXV0ZXgpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpDQog
 ICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7DQogIGVs
 c2UNCiAgICByZXR1cm4gMDsNCn0NCiMgOTkgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0
 aHIuaCIgMiAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAyIDMN
 Cg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHR5cGVkZWYgbG9uZyBzdHJlYW1v
 ZmY7DQogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7DQoNCg0KDQog
 IHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7DQoNCiAgdHlwZWRlZiBf
 X2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsNCg0KDQoNCiAgdHlwZWRlZiBG
 SUxFIF9fY19maWxlX3R5cGU7DQoNCg0KICBzdHJ1Y3QgX19pb3NfZmxhZ3MN
 CiAgew0KICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsNCg0KICAgIHN0
 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsN
 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7
 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw
 MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw
 MDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFs
 ID0gMHgwMDEwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xl
 ZnQgPSAweDAwMjA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
 b2N0ID0gMHgwMDQwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
 X3JpZ2h0ID0gMHgwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
 IF9TX3NjaWVudGlmaWMgPSAweDAxMDA7DQogICAgc3RhdGljIGNvbnN0IF9f
 aW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7DQogICAgc3RhdGljIGNv
 bnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOw0KICAgIHN0
 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7DQog
 ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAw
 Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAw
 eDIwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJj
 YXNlID0gMHg0MDAwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
 X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOw0KICAg
 IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAw
 MiB8IDB4MDA0MCB8IDB4MDAwODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRf
 dHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0Ow0KDQoNCiAg
 ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOw0K
 ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7
 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4
 MDQ7DQoNCg0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9
 IDB4MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0g
 MHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAw
 eDA0Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgw
 ODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEw
 Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy
 MDsNCiAgfTsNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL2Zwb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzDQoj
 IDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfY3djaGFyLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmln
 LmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAz
 DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfY3djaGFyLmgiIDIgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAxIDMgNA0KIyAxOCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
 LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgj
 KXdjaGFyLmgJMS4zMQk5OC8wNS8wNCBTTUkiDQoNCiMgMSAiL3Vzci9pbmNs
 dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
 My4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRl
 L3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyMiAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNs
 dWRlL3djaGFyLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190
 YWcuaCIgMSAzIDQNCiMgMjMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
 LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5o
 IiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAxIDMg
 NA0KIyA5ICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAzIDQNCiNwcmFn
 bWEgaWRlbnQgIkAoIyl3Y2hhcl9pbXBsLmgJMS4yCTk4LzAyLzI3IFNNSSIN
 Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQoj
 IDEyICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAyIDMgNA0KDQoNCmV4
 dGVybiAiQyIgew0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KDQoNCg0KICAg
 ICAgICBpbnQgX19maWxsZXJbNl07DQoNCn0gX19tYnN0YXRlX3Q7DQoNCg0K
 DQp9DQojIDI0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQN
 CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQNCiMgMjUgIi9ob21l
 L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
 Ny8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KDQoNCg0KDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyAzMCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
 LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KDQojIDEgIi91c3Iv
 aW5jbHVkZS9jdHlwZS5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL2N0
 eXBlLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWN0eXBlLmgJMS4zMAk5
 OC8wMS8xNiBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
 X3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
 MiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDggIi91c3IvaW5jbHVkZS9j
 dHlwZS5oIiAzIDQNCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOw0KZXh0ZXJu
 IGludCBpc2FscGhhKGludCk7DQpleHRlcm4gaW50IGlzY250cmwoaW50KTsN
 CmV4dGVybiBpbnQgaXNkaWdpdChpbnQpOw0KZXh0ZXJuIGludCBpc2dyYXBo
 KGludCk7DQpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsNCmV4dGVybiBpbnQg
 aXNwcmludChpbnQpOw0KZXh0ZXJuIGludCBpc3B1bmN0KGludCk7DQpleHRl
 cm4gaW50IGlzc3BhY2UoaW50KTsNCmV4dGVybiBpbnQgaXN1cHBlcihpbnQp
 Ow0KZXh0ZXJuIGludCBpc3hkaWdpdChpbnQpOw0KZXh0ZXJuIGludCB0b2xv
 d2VyKGludCk7DQpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsNCg0KDQoNCg0K
 ZXh0ZXJuIGludCBpc2FzY2lpKGludCk7DQpleHRlcm4gaW50IHRvYXNjaWko
 aW50KTsNCmV4dGVybiBpbnQgX3RvbG93ZXIoaW50KTsNCmV4dGVybiBpbnQg
 X3RvdXBwZXIoaW50KTsNCg0KDQoNCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9f
 Y3R5cGVbXTsNCmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGVfbWFzazsN
 CmV4dGVybiBpbnQgKl9fdHJhbnNfdXBwZXI7DQpleHRlcm4gaW50ICpfX3Ry
 YW5zX2xvd2VyOw0KIyAxNjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQN
 Cn0NCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
 Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0DQojIDM1
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQojIDEg
 Ii91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNA0KIyAzOCAiL2hv
 bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
 Mi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJD
 IiB7DQojIDYxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
 cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQp0
 eXBlZGVmIGxvbmcgd2ludF90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IHdj
 dHlwZV90Ow0KIyAxMDMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAz
 IDQNCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90Ow0KIyAxMTMgIi9o
 b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
 czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAzIDQNCmV4dGVybiBpbnQgaXN3
 YWxwaGEod2ludF90KTsNCmV4dGVybiBpbnQgaXN3dXBwZXIod2ludF90KTsN
 CmV4dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsNCmV4dGVybiBpbnQgaXN3
 ZGlnaXQod2ludF90KTsNCmV4dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7
 DQpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7DQpleHRlcm4gaW50IGlz
 d3NwYWNlKHdpbnRfdCk7DQpleHRlcm4gaW50IGlzd3B1bmN0KHdpbnRfdCk7
 DQpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7DQpleHRlcm4gaW50IGlz
 d2dyYXBoKHdpbnRfdCk7DQpleHRlcm4gaW50IGlzd2NudHJsKHdpbnRfdCk7
 DQpleHRlcm4gaW50IGlzd2N0eXBlKHdpbnRfdCwgd2N0eXBlX3QpOw0KZXh0
 ZXJuIHdpbnRfdCB0b3dsb3dlcih3aW50X3QpOw0KZXh0ZXJuIHdpbnRfdCB0
 b3d1cHBlcih3aW50X3QpOw0KZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxF
 ICopOw0KZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyh3Y2hhcl90ICosIGludCwg
 X19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBmcHV0d2Mod2ludF90LCBfX0ZJ
 TEUgKik7DQpleHRlcm4gaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIF9f
 RklMRSAqKTsNCmV4dGVybiB3aW50X3QgdW5nZXR3Yyh3aW50X3QsIF9fRklM
 RSAqKTsNCmV4dGVybiB3aW50X3QgZ2V0d2MoX19GSUxFICopOw0KZXh0ZXJu
 IHdpbnRfdCBnZXR3Y2hhcih2b2lkKTsNCmV4dGVybiB3aW50X3QgcHV0d2Mo
 d2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IHB1dHdjaGFyKHdp
 bnRfdCk7DQpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90ICos
 IHdjaGFyX3QgKiopOw0KZXh0ZXJuIGxvbmcgd2NzdG9sKGNvbnN0IHdjaGFy
 X3QgKiwgd2NoYXJfdCAqKiwgaW50KTsNCmV4dGVybiB1bnNpZ25lZCBsb25n
 IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOw0K
 ZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFy
 X3QgKik7DQpleHRlcm4gd2NoYXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3Qg
 Kiwgd2NoYXJfdCk7DQpleHRlcm4gaW50IHdjc2NtcChjb25zdCB3Y2hhcl90
 ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4gaW50IHdjc2NvbGwoY29u
 c3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOw0KZXh0ZXJuIHdjaGFy
 X3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRl
 cm4gc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh
 cl90ICopOw0KZXh0ZXJuIHNpemVfdCB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAq
 KTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qg
 d2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGludCB3Y3NuY21wKGNvbnN0
 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJu
 IHdjaGFyX3QgKndjc25jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos
 IHNpemVfdCk7DQpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hh
 cl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4gd2NoYXJfdCAqd2Nz
 cmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOw0KZXh0ZXJuIHNpemVf
 dCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOw0K
 ZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICosIGNvbnN0
 IHdjaGFyX3QgKik7DQpleHRlcm4gaW50IHdjc3dpZHRoKGNvbnN0IHdjaGFy
 X3QgKiwgc2l6ZV90KTsNCmV4dGVybiBzaXplX3Qgd2NzeGZybSh3Y2hhcl90
 ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgd2N3
 aWR0aChjb25zdCB3Y2hhcl90KTsNCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUo
 Y29uc3QgY2hhciAqKTsNCiMgMTY5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2No
 YXIuaCIgMyA0DQpleHRlcm4gd2NoYXJfdCAqX193Y3N0b2tfeHBnNSh3Y2hh
 cl90ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7DQpleHRlcm4g
 c2l6ZV90IF9fd2NzZnRpbWVfeHBnNSh3Y2hhcl90ICosIHNpemVfdCwgY29u
 c3Qgd2NoYXJfdCAqLA0KICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKik7DQoj
 IDE4MCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0ZXJu
 IHdpbnRfdCBidG93YyhpbnQpOw0KZXh0ZXJuIGludCBmd3ByaW50ZihfX0ZJ
 TEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGludCBmd3Nj
 YW5mKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7DQpleHRlcm4g
 aW50IGZ3aWRlKF9fRklMRSAqLCBpbnQpOw0KZXh0ZXJuIGludCBtYnNpbml0
 KGNvbnN0IG1ic3RhdGVfdCAqKTsNCmV4dGVybiBzaXplX3QgbWJybGVuKGNv
 bnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gc2l6
 ZV90IG1icnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwg
 bWJzdGF0ZV90ICopOw0KZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJf
 dCAqLCBjb25zdCBjaGFyICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCmV4
 dGVybiBpbnQgc3dwcmludGYod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdj
 aGFyX3QgKiwgLi4uKTsNCmV4dGVybiBpbnQgc3dzY2FuZihjb25zdCB3Y2hh
 cl90ICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsNCmV4dGVybiBpbnQgdmZ3
 cHJpbnRmKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7
 DQpleHRlcm4gaW50IHZ3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgX192YV9s
 aXN0KTsNCmV4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90
 LCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7DQpleHRlcm4gc2l6ZV90
 IHdjcnRvbWIoY2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7DQpleHRl
 cm4gc2l6ZV90IHdjc3J0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKios
 IHNpemVfdCwgbWJzdGF0ZV90ICopOw0KZXh0ZXJuIHdjaGFyX3QgKndjc3N0
 cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4g
 aW50IHdjdG9iKHdpbnRfdCk7DQpleHRlcm4gd2NoYXJfdCAqd21lbWNocihj
 b25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7DQpleHRlcm4gaW50
 IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNp
 emVfdCk7DQpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3Y2hhcl90ICosIGNv
 bnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVt
 bW92ZSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4
 dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6
 ZV90KTsNCmV4dGVybiBpbnQgd3ByaW50Zihjb25zdCB3Y2hhcl90ICosIC4u
 Lik7DQpleHRlcm4gaW50IHdzY2FuZihjb25zdCB3Y2hhcl90ICosIC4uLik7
 DQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj
 LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0
 ZXJuIHdpbnRfdCBfX2ZnZXR3Y194cGc1KF9fRklMRSAqKTsNCmV4dGVybiB3
 aW50X3QgX19nZXR3Y194cGc1KF9fRklMRSAqKTsNCmV4dGVybiB3aW50X3Qg
 X19nZXR3Y2hhcl94cGc1KHZvaWQpOw0KZXh0ZXJuIHdpbnRfdCBfX2ZwdXR3
 Y194cGc1KHdpbnRfdCwgX19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBfX3B1
 dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IF9f
 cHV0d2NoYXJfeHBnNSh3aW50X3QpOw0KZXh0ZXJuIHdjaGFyX3QgKl9fZmdl
 dHdzX3hwZzUod2NoYXJfdCAqLCBpbnQsIF9fRklMRSAqKTsNCmV4dGVybiBp
 bnQgX19mcHV0d3NfeHBnNShjb25zdCB3Y2hhcl90ICosIF9fRklMRSAqKTsN
 CmV4dGVybiB3aW50X3QgX191bmdldHdjX3hwZzUod2ludF90LCBfX0ZJTEUg
 Kik7DQojIDM1MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0K
 fQ0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2N3Y2hhci5oIiAyIDMNCiMgNTcgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMw0KbmFtZXNw
 YWNlIHN0ZA0Kew0KICB1c2luZyA6Om1ic3RhdGVfdDsNCn0NCiMgNDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIg
 MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBmcG9zDQogICAgew0KICAgIHB1
 YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsN
 Cg0KICAgIHByaXZhdGU6DQogICAgICBzdHJlYW1vZmYgX01fb2ZmOw0KICAg
 ICAgX19zdGF0ZV90eXBlIF9NX3N0Ow0KDQogICAgcHVibGljOg0KICAgICAg
 X19zdGF0ZV90eXBlDQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9N
 X3N0OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlw
 ZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQ0KDQoNCg0KICAgICAgZnBvcygp
 OiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkg
 eyB9DQoNCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5
 cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQ0KICAgICAgOiBfTV9vZmYoX19v
 ZmYpLCBfTV9zdChfX3N0KSB7IH0NCg0KICAgICAgb3BlcmF0b3Igc3RyZWFt
 b2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIGZwb3Mm
 DQogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYg
 Kz0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zJg0KICAg
 ICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9f
 b2ZmOyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgZnBvcw0KICAgICAgb3Bl
 cmF0b3IrKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAgICAgZnBv
 cyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgKz0gX19vZmY7DQogICAgICAg
 IHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGZwb3MNCiAgICAgIG9w
 ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpDQogICAgICB7DQogICAgICAgIGZw
 b3MgX190KCp0aGlzKTsNCiAgICAgICAgX190IC09IF9fb2ZmOw0KICAgICAg
 ICByZXR1cm4gX190Ow0KICAgICAgfQ0KDQogICAgICBib29sDQogICAgICBv
 cGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQ0KDQogICAgICBib29s
 DQogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQ0KDQog
 ICAgICBzdHJlYW1vZmYNCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyBy
 ZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3Bvc2l0
 aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQ0KICAg
 IH07DQoNCg0KICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7
 DQoNCg0KDQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx
 IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAz
 NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu
 Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lk
 DQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQN
 CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9f
 dGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh
 ZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNf
 ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
 ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
 X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0K
 ICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f
 cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj
 aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9y
 KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jhbmdl
 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
 X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K
 ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
 DQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
 IF9fcyk7DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3Rk
 DQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2lj
 X2lvczsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi
 YXNpY19zdHJlYW1idWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQog
 ICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
 clQ+ID4NCiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOw0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
 aXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOw0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
 IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgICB0eXBlbmFtZSBf
 QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNf
 c3RyaW5nYnVmOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAg
 ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAg
 ICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
 PF9DaGFyVD4sDQogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j
 YXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFt
 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgIHR5cGVu
 YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi
 YXNpY19zdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
 DQogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
 Q2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
 X3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsN
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19m
 c3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNz
 IGlzdHJlYW1idWZfaXRlcmF0b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
 PiA+DQogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KDQoNCiAg
 Y2xhc3MgaW9zX2Jhc2U7DQoNCg0KICB0eXBlZGVmIGJhc2ljX2lvczxjaGFy
 PiBpb3M7DQogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVh
 bWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07
 DQogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOw0KICB0
 eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOw0KICB0eXBl
 ZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7DQogIHR5cGVk
 ZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOw0K
 ICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0
 cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3Ry
 aW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmls
 ZWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVh
 bTsNCiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsN
 CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07DQojIDEy
 OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X2lvc2Z3ZC5oIiAzDQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMNCiMg
 MzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRp
 b24iIDMNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg
 Y2xhc3MgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGV4Y2VwdGlv
 bigpIHRocm93KCkgeyB9DQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhy
 b3coKTsNCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0
 aHJvdygpOw0KICB9Ow0KDQogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJs
 aWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF9leGNlcHRp
 b24oKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24o
 KSB0aHJvdygpOw0KICB9Ow0KDQogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0
 ZV9oYW5kbGVyKSAoKTsNCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9o
 YW5kbGVyKSAoKTsNCg0KICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWlu
 YXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOw0KICB2b2lkIHRlcm1p
 bmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KICB1
 bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9o
 YW5kbGVyKSB0aHJvdygpOw0KICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJp
 YnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCiAgYm9vbCB1bmNhdWdodF9l
 eGNlcHRpb24oKSB0aHJvdygpOw0KfQ0KDQp9DQojIDQxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9j
 aGFyX3RyYWl0cy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMNCg0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
 cmluZy5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
 MSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfY3N0cmluZy5oIiAyIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCiMg
 MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNA0KIyA0MSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcu
 aCIgMiAzDQojIDY2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfY3N0cmluZy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQog
 IHVzaW5nIDo6bWVtY3B5Ow0KICB1c2luZyA6Om1lbW1vdmU7DQogIHVzaW5n
 IDo6c3RyY3B5Ow0KICB1c2luZyA6OnN0cm5jcHk7DQogIHVzaW5nIDo6c3Ry
 Y2F0Ow0KICB1c2luZyA6OnN0cm5jYXQ7DQogIHVzaW5nIDo6bWVtY21wOw0K
 ICB1c2luZyA6OnN0cmNtcDsNCiAgdXNpbmcgOjpzdHJjb2xsOw0KICB1c2lu
 ZyA6OnN0cm5jbXA7DQogIHVzaW5nIDo6c3RyeGZybTsNCiAgdXNpbmcgOjpz
 dHJjc3BuOw0KICB1c2luZyA6OnN0cnNwbjsNCiAgdXNpbmcgOjpzdHJ0b2s7
 DQogIHVzaW5nIDo6bWVtc2V0Ow0KICB1c2luZyA6OnN0cmVycm9yOw0KICB1
 c2luZyA6OnN0cmxlbjsNCg0KICB1c2luZyA6Om1lbWNocjsNCg0KICBpbmxp
 bmUgdm9pZCoNCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90
 IF9fbikNCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p
 ZCo+KF9fcCksIF9fYywgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RyY2hyOw0K
 DQogIGlubGluZSBjaGFyKg0KICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9f
 bikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNv
 bnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RycGJy
 azsNCg0KICBpbmxpbmUgY2hhcioNCiAgc3RycGJyayhjaGFyKiBfX3MxLCBj
 b25zdCBjaGFyKiBfX3MyKQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJy
 ayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0NCg0K
 ICB1c2luZyA6OnN0cnJjaHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cnJj
 aHIoY2hhciogX19zMSwgaW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGlu
 X3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7
 IH0NCg0KICB1c2luZyA6OnN0cnN0cjsNCg0KICBpbmxpbmUgY2hhcioNCiAg
 c3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0
 dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o
 X19zMSksIF9fczIpOyB9DQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5o
 IiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7
 DQoNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3Qg
 Y2hhcl90cmFpdHMNCiAgICB7DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
 X3R5cGU7DQoNCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlw
 ZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOw0KICAgICAg
 dHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIG1i
 c3RhdGVfdCBzdGF0ZV90eXBlOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAg
 ICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBf
 X2MyKQ0KICAgICAgeyBfX2MxID0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMg
 Ym9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
 aGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7
 IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGx0KGNvbnN0IGNoYXJf
 dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0KICAgICAgeyBy
 ZXR1cm4gX19jMSA8IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGludA0KICAg
 ICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf
 dHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsNCiAgICAgICAgZm9y
 IChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkNCiAgICAgICAg
 ICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkNCiAgICAgICAgICAg
 IHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7DQog
 ICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgc2l6
 ZV90DQogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpDQogICAg
 ICB7DQogICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOw0KICAg
 ICAgICB3aGlsZSAoKl9fcCkgKytfX3A7DQogICAgICAgIHJldHVybiAoX19w
 IC0gX19zKTsNCiAgICAgIH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXJf
 dHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVf
 dCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQ0KICAgICAgew0KICAgICAg
 ICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19w
 IC0gX19zKSA8IF9fbjsgKytfX3ApDQogICAgICAgICAgaWYgKCpfX3AgPT0g
 X19hKSByZXR1cm4gX19wOw0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0N
 Cg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIG1vdmUoY2hhcl90
 eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
 DQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBf
 X3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0NCg0KICAgICAgc3Rh
 dGljIGNoYXJfdHlwZSoNCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBj
 b25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJl
 dHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNp
 emVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBl
 Kg0KICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBj
 aGFyX3R5cGUgX19hKQ0KICAgICAgew0KICAgICAgICBmb3IgKGNoYXJfdHlw
 ZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQ0KICAgICAg
 ICAgIGFzc2lnbigqX19wLCBfX2EpOw0KICAgICAgICByZXR1cm4gX19zOw0K
 ICAgICAgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19j
 aGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJu
 IGNoYXJfdHlwZShfX2MpOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0K
 ICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0
 dXJuIGludF90eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAg
 ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBp
 bnRfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg
 fQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIGVvZigpIHsgcmV0
 dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0NCg0KICAgICAgc3Rh
 dGljIGludF90eXBlDQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf
 X2MpDQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/
 IGludF90eXBlKDApIDogX19jOyB9DQogICAgfTsNCg0KDQoNCiAgdGVtcGxh
 dGU8Pg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPg0KICAgIHsNCiAg
 ICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGlu
 dCBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBl
 Ow0KICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7DQogICAgICB0
 eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOw0KDQogICAgICBzdGF0aWMg
 dm9pZA0KICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
 cl90eXBlJiBfX2MyKQ0KICAgICAgeyBfX2MxID0gX19jMjsgfQ0KDQogICAg
 ICBzdGF0aWMgYm9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
 LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2Mx
 ID09IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGx0KGNv
 bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0K
 ICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0NCg0KICAgICAgc3RhdGlj
 IGludA0KICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNv
 bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0
 dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9DQoNCiAgICAgIHN0YXRp
 YyBzaXplX3QNCiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykN
 CiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9DQoNCiAgICAgIHN0YXRp
 YyBjb25zdCBjaGFyX3R5cGUqDQogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlw
 ZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkNCiAg
 ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1l
 bWNocihfX3MsIF9fYSwgX19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJf
 dHlwZSoNCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy
 X3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0
 aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikp
 OyB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBjb3B5KGNo
 YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg
 X19uKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4o
 bWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9DQoNCiAgICAgIHN0YXRpYyBj
 aGFyX3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVf
 dCBfX24sIGNoYXJfdHlwZSBfX2EpDQogICAgICB7IHJldHVybiBzdGF0aWNf
 Y2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9DQoN
 CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAgIHRvX2NoYXJfdHlwZShj
 b25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
 c3Q8Y2hhcl90eXBlPihfX2MpOyB9DQoNCg0KDQogICAgICBzdGF0aWMgaW50
 X3R5cGUNCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19j
 KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRp
 Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9DQoNCiAgICAgIHN0YXRp
 YyBib29sDQogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19j
 MSwgY29uc3QgaW50X3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2Mx
 ID09IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBl
 b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0N
 Cg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBub3RfZW9mKGNvbnN0
 IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiAoX19jID09IGVvZigp
 KSA/IDAgOiBfX2M7IH0NCiAgfTsNCiMgMjY0ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
 ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoDQogICAgew0KICAgICAgX0No
 YXJUIF9NX2M7DQogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNv
 bnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQ0KDQogICAgICBib29sDQogICAg
 ICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJh
 aXRzOjplcShfTV9jLCBfX2EpOyB9DQogICAgfTsNCn0NCiMgNDIgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg
 MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9jc3RkaW8uaCIgMSAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVm
 d2QuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9i
 aXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z
 b2xhcmlzMi43L2JpdHMvYysrbG9jYWxlLmgiIDEgMw0KIyAzNiAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz
 Mi43L2JpdHMvYysrbG9jYWxlLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAg
 dHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7DQp9DQojIDQxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAz
 DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9jbGltaXRzLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0DQojIDExICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMgNA0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0DQojIDI1ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgj
 KWxpbWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIg0KDQojIDEgIi91c3IvaW5j
 bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyOCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
 LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNA0KIyAxICIvdXNyL2lu
 Y2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQojIDI5ICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQojIDQwICIvaG9tZS9tZGVp
 bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
 L2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUv
 c3lzL2ludF9saW1pdHMuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N5
 cy9pbnRfbGltaXRzLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWludF9s
 aW1pdHMuaAkxLjUJOTgvMDEvMDYgU01JIg0KIyA0NCAiL3Vzci9pbmNsdWRl
 L3N5cy9pbnRfbGltaXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3lz
 L2lzYV9kZWZzLmgiIDEgMyA0DQojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2lu
 dF9saW1pdHMuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTYyICIv
 dXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQp9DQojIDQxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQoNCg0KDQpl
 eHRlcm4gIkMiIHsNCiMgMzA3ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
 Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzbGlt
 aXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAx
 IDMgNA0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0DQoj
 cHJhZ21hIGlkZW50ICJAKCMpdW5pc3RkLmgJMS4zNgk5OC8wNy8xNiBTTUki
 DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
 MyA0DQojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNA0K
 DQoNCmV4dGVybiAiQyIgew0KIyAyNjQgIi91c3IvaW5jbHVkZS9zeXMvdW5p
 c3RkLmgiIDMgNA0KfQ0KIyAzMDggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv
 Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNs
 aW1pdHMuaCIgMiAzIDQNCiMgMzE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
 L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lz
 bGltaXRzLmgiIDMgNA0KZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsNCiMg
 MzI4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KfQ0K
 IyAxMiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNA0KIyAz
 OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X2NsaW1pdHMuaCIgMiAzDQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcu
 aCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfc3RyaW5nLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0
 cy9jKytjb25maWcuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdm
 d2QuaCIgMSAzDQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAx
 IDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMNCiMg
 MzEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9pdGVyYXRvci5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZp
 Zy5oIiAxIDMNCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
 MSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzDQoj
 IDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
 IDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KDQpuYW1lc3Bh
 Y2Ugc3RkDQp7DQoNCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307DQpz
 dHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBmb3J3YXJk
 X2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307
 DQpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
 Zm9yd2FyZF9pdGVyYXRvcl90YWcge307DQpzdHJ1Y3QgcmFuZG9tX2FjY2Vz
 c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
 cl90YWcge307DQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
 bGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7DQogIHR5
 cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0K
 ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIF9EaXN0YW5j
 ZSBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0K
 ICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0Kc3RydWN0IG91dHB1
 dF9pdGVyYXRvciB7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
 dGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
 DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
 dm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KfTsN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1
 Y3QgZm9yd2FyZF9pdGVyYXRvciB7DQogIHR5cGVkZWYgZm9yd2FyZF9pdGVy
 YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZh
 bHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlw
 ZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiBy
 ZWZlcmVuY2U7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
 IF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0K
 ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
 X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl
 ZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1Rw
 KiBwb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0K
 dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg
 cmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7DQogIHR5cGVkZWYgcmFuZG9tX2Fj
 Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVk
 ZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZl
 cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVk
 ZWYgX1RwJiByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Nh
 dGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZf
 dCwNCiAgICAgICAgICBjbGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9S
 ZWZlcmVuY2UgPSBfVHAmPg0Kc3RydWN0IGl0ZXJhdG9yIHsNCiAgdHlwZWRl
 ZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1Rw
 IHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2Vf
 dHlwZTsNCiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOw0KICB0eXBlZGVm
 IF9SZWZlcmVuY2UgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNz
 IF9JdGVyYXRvcj4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgew0KICB0eXBl
 ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl
 cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
 Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUg
 X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOw0K
 ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVy
 Ow0KICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJl
 ZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3Qg
 aXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsNCiAgdHlwZWRlZiByYW5kb21fYWNj
 ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl
 ZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
 ZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAgdHlwZWRl
 ZiBfVHAmIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+
 DQpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsNCiAgdHlw
 ZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
 Z29yeTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBw
 dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIGNvbnN0IF9U
 cCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsN
 Cn07DQojIDE0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KdGVtcGxhdGUg
 PGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
 czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQpfX2l0ZXJhdG9yX2NhdGVn
 b3J5KGNvbnN0IF9JdGVyJikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
 YXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdv
 cnk7DQogIHJldHVybiBfQ2F0ZWdvcnkoKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
 SXRlcj46OmRpZmZlcmVuY2VfdHlwZSoNCl9fZGlzdGFuY2VfdHlwZShjb25z
 dCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBp
 dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1l
 IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQpfX3ZhbHVl
 X3R5cGUoY29uc3QgX0l0ZXImKQ0Kew0KICByZXR1cm4gc3RhdGljX2Nhc3Q8
 dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+
 KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlw
 ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv
 cnkNCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0
 dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQ0KDQoNCnRlbXBsYXRl
 IDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
 dHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqDQpkaXN0YW5jZV90eXBlKGNv
 bnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kp
 OyB9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFt
 ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKg0KdmFsdWVf
 dHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUo
 X19pKTsgfQ0KDQp9DQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
 cl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3Mu
 aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAz
 DQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3Nw
 YXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAz
 NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29u
 Y2VwdF9jaGVjay5oIiAyIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi
 IDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KdGVtcGxhdGUg
 PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
 bmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
 bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 X0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9f
 bGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N
 CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
 IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
 c3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9E
 aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
 X19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZv
 aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl
 JiBfX24pDQp7DQoNCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9f
 biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQppbmxpbmUgdHlwZW5hbWUgaXRl
 cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
 DQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
 ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
 aXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
 DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX19maXJz
 dDsgKytfX247DQogIH0NCiAgcmV0dXJuIF9fbjsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFt
 ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlm
 ZmVyZW5jZV90eXBlDQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv
 ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAg
 ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgcmV0dXJu
 IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
 dXRJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
 X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCmRpc3RhbmNlKF9J
 bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkN
 CnsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
 dXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQogICAgX0NhdGVnb3J5
 Ow0KICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRl
 Z29yeSgpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
 YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJ
 dGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykN
 CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgd2hpbGUgKF9fbi0tKSAr
 K19faTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
 cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5j
 ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24s
 DQogICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
 cl90YWcpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQogIGlmIChfX24gPiAwKQ0KICAgIHdoaWxlIChfX24tLSkgKytf
 X2k7DQogIGVsc2UNCiAgICB3aGlsZSAoX19uKyspIC0tX19pOw0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
 RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz
 c0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sDQogICAgICAgICAgICAg
 ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIF9faSAr
 PSBfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwg
 Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJ
 dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQ0Kew0KDQogIF9fYWR2YW5j
 ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7DQp9DQoNCn0N
 CiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0KIyAz
 NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
 X2l0ZXJhdG9yLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KdGVtcGxhdGUg
 PGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRv
 ciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIqIGNvbnRhaW5lcjsNCnB1
 YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0K
 ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
 cnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZv
 aWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsN
 CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0KICBleHBsaWNpdCBiYWNr
 X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
 KCZfX3gpIHt9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
 Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
 dWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGNvbnRhaW5lci0+cHVzaF9iYWNr
 KF9fdmFsdWUpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBiYWNrX2lu
 c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1
 cm4gKnRoaXM7IH0NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
 cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2lu
 c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg
 cmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRh
 aW5lcj4NCmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
 PiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4g
 YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBmcm9udF9pbnNl
 cnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0KICBfQ29udGFpbmVyKiBjb250
 YWluZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu
 ZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
 dG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCiAg
 dHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lk
 IHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7DQoNCiAgZXhw
 bGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg
 OiBjb250YWluZXIoJl9feCkge30NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
 PF9Db250YWluZXI+Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
 bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGNvbnRhaW5l
 ci0+cHVzaF9mcm9udChfX3ZhbHVlKTsNCiAgICByZXR1cm4gKnRoaXM7DQog
 IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
 YXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBmcm9udF9pbnNlcnRfaXRl
 cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
 czsgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
 ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQ0KfTsNCg0KdGVtcGxh
 dGUgPGNsYXNzIF9Db250YWluZXI+DQppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0
 ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXIm
 IF9feCkgew0KICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
 YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVy
 Pg0KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0Nv
 bnRhaW5lciogY29udGFpbmVyOw0KICB0eXBlbmFtZSBfQ29udGFpbmVyOjpp
 dGVyYXRvciBpdGVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIg
 Y29udGFpbmVyX3R5cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3Rh
 ZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5
 cGU7DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVk
 ZWYgdm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0K
 DQogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l
 IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkNCiAgICA6IGNvbnRhaW5lcigm
 X194KSwgaXRlcihfX2kpIHt9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFp
 bmVyPiYNCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
 OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsNCiAgICBpdGVyID0gY29udGFpbmVy
 LT5pbnNlcnQoaXRlciwgX192YWx1ZSk7DQogICAgKytpdGVyOw0KICAgIHJl
 dHVybiAqdGhpczsNCiAgfQ0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
 cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGluc2VydF9p
 dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
 aGlzOyB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lDQpp
 bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5l
 ciYgX194LCBfSXRlcmF0b3IgX19pKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1l
 IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsNCiAgcmV0dXJuIGluc2Vy
 dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNs
 YXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsDQogICAgICAgICAg
 Y2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90Pg0KY2xhc3MgcmV2ZXJzZV9i
 aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiByZXZlcnNlX2Jp
 ZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
 X1RwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxmOw0KcHJvdGVjdGVkOg0K
 ICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7DQpwdWJsaWM6DQog
 IHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
 Y2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVk
 ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAq
 IHBvaW50ZXI7DQogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7DQoN
 CiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30NCiAgZXhw
 bGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVj
 dGlvbmFsSXRlcmF0b3IgX194KQ0KICAgIDogY3VycmVudChfX3gpIHt9DQog
 IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
 IGN1cnJlbnQ7IH0NCiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
 DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7
 DQogICAgcmV0dXJuICotLV9fdG1wOw0KICB9DQogIHBvaW50ZXIgb3BlcmF0
 b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQogIF9T
 ZWxmJiBvcGVyYXRvcisrKCkgew0KICAgIC0tY3VycmVudDsNCiAgICByZXR1
 cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsNCiAg
 ICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgIC0tY3VycmVudDsNCiAgICBy
 ZXR1cm4gX190bXA7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7DQog
 ICAgKytjdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2Vs
 ZiBvcGVyYXRvci0tKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7
 DQogICAgKytjdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KfTsN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
 X1JlZiwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9
 PSgNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8
 X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsDQogICAgY29u
 c3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9U
 cCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQ0Kew0KICByZXR1cm4gX194LmJh
 c2UoKSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
 SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+
 DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KA0KICAgIGNvbnN0IHJldmVyc2Vf
 YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E
 aXN0YW5jZT4mIF9feCwNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9u
 YWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBf
 X3kpDQp7DQogIHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KIyAxOTMgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy
 YXRvci5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KY2xhc3Mg
 cmV2ZXJzZV9pdGVyYXRvcg0Kew0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3Ig
 Y3VycmVudDsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
 cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICAg
 ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBp
 dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0KICAgICAg
 ICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
 dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAg
 IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
 cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcg0KICAgICAgICAgIHBvaW50
 ZXI7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
 YXRvcj46OnJlZmVyZW5jZQ0KICAgICAgICAgIHJlZmVyZW5jZTsNCg0KICB0
 eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOw0KICB0eXBlZGVmIHJl
 dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsNCg0KcHVibGljOg0K
 ICByZXZlcnNlX2l0ZXJhdG9yKCkge30NCiAgZXhwbGljaXQgcmV2ZXJzZV9p
 dGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30N
 Cg0KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3Vy
 cmVudChfX3guY3VycmVudCkge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVy
 Pg0KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
 X0l0ZXI+JiBfX3gpDQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9DQoN
 CiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
 dDsgfQ0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgew0KICAgIF9J
 dGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7DQogICAgcmV0dXJuICotLV9fdG1w
 Ow0KICB9DQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
 ICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7
 DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBf
 U2VsZiBvcGVyYXRvcisrKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRo
 aXM7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0K
 ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsNCiAgICArK2N1cnJlbnQ7DQogICAg
 cmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7
 DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICArK2N1cnJlbnQ7DQog
 ICAgcmV0dXJuIF9fdG1wOw0KICB9DQoNCiAgX1NlbGYgb3BlcmF0b3IrKGRp
 ZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsNCiAgICByZXR1cm4gX1NlbGYo
 Y3VycmVudCAtIF9fbik7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlm
 ZmVyZW5jZV90eXBlIF9fbikgew0KICAgIGN1cnJlbnQgLT0gX19uOw0KICAg
 IHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVy
 ZW5jZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiBfU2VsZihjdXJy
 ZW50ICsgX19uKTsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJl
 bmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCArPSBfX247DQogICAgcmV0
 dXJuICp0aGlzOw0KICB9DQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl
 cmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24p
 OyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l
 IGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
 YXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuIF9f
 eC5iYXNlKCkgPT0gX195LmJhc2UoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9JdGVyYXRvcj4NCmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZl
 cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAg
 ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
 eSkgew0KICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQppbmxpbmUgYm9vbCBvcGVy
 YXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194
 LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
 dG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBi
 b29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
 cj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
 X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gX195IDwg
 X194Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l
 IGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
 YXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuICEo
 X195IDwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4N
 CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
 cjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAgICAgICAgICAgICAgY29u
 c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0
 dXJuICEoX194IDwgX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVy
 YXRvcj4NCmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
 YXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0Kb3BlcmF0b3ItKGNvbnN0IHJldmVy
 c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgIGNvbnN0
 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVy
 biBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JdGVyYXRvcj4NCmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
 YXRvcj4NCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
 dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29u
 c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsNCiAgcmV0
 dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0g
 X19uKTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLA0KICAgICAgICAg
 IGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3Ry
 YWl0czxfQ2hhclQ+LA0KICAgICAgICAgIGNsYXNzIF9EaXN0ID0gcHRyZGlm
 Zl90Pg0KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7DQpwdWJsaWM6DQogIHR5
 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgdHlwZWRlZiBfVHJhaXRzIHRy
 YWl0c190eXBlOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
 VHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoNCiAgdHlwZWRlZiBpbnB1dF9pdGVy
 YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZh
 bHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOw0K
 ICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25z
 dCBfVHAmIHJlZmVyZW5jZTsNCg0KICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBf
 TV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQ0KICBpc3RyZWFtX2l0ZXJh
 dG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9N
 X3JlYWQoKTsgfQ0KDQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
 IHJldHVybiBfTV92YWx1ZTsgfQ0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj
 b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQ0KDQogIGlzdHJlYW1f
 aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7DQogICAgX01fcmVhZCgpOw0KICAg
 IHJldHVybiAqdGhpczsNCiAgfQ0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJh
 dG9yKysoaW50KSB7DQogICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0
 aGlzOw0KICAgIF9NX3JlYWQoKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0N
 Cg0KICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9f
 eCkgY29uc3QNCiAgICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAm
 JiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3guX01fc3RyZWFtKTsgfQ0K
 DQpwcml2YXRlOg0KICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsNCiAgX1Rw
 IF9NX3ZhbHVlOw0KICBib29sIF9NX29rOw0KDQogIHZvaWQgX01fcmVhZCgp
 IHsNCiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0
 cnVlIDogZmFsc2U7DQogICAgaWYgKF9NX29rKSB7DQogICAgICAqX01fc3Ry
 ZWFtID4+IF9NX3ZhbHVlOw0KICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8g
 dHJ1ZSA6IGZhbHNlOw0KICAgIH0NCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNs
 YXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf
 RGlzdD4NCmlubGluZSBib29sDQpvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1f
 aXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0K
 ICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJU
 LCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgew0KICByZXR1cm4gX194Ll9NX2Vx
 dWFsKF9feSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9D
 aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+DQppbmxpbmUgYm9v
 bA0Kb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No
 YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwNCiAgICAgICAgICAgY29uc3Qg
 aXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+
 JiBfX3kpIHsNCiAgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsNCn0NCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLA0KICAgICAgICAgIGNsYXNzIF9DaGFy
 VCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
 ID4NCmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igew0KcHVibGljOg0KICB0eXBl
 ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogIHR5cGVkZWYgX1RyYWl0cyB0cmFp
 dHNfdHlwZTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz4gb3N0cmVhbV90eXBlOw0KDQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh
 dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZh
 bHVlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQog
 IHR5cGVkZWYgdm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJl
 bmNlOw0KDQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3Mp
 IDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30NCiAgb3N0cmVh
 bV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBf
 X2MpDQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9
 DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U
 cCYgX192YWx1ZSkgew0KICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsNCiAg
 ICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsNCiAg
 ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+
 JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBvc3RyZWFtX2l0
 ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0K
 ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJl
 dHVybiAqdGhpczsgfQ0KcHJpdmF0ZToNCiAgb3N0cmVhbV90eXBlKiBfTV9z
 dHJlYW07DQogIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOw0KfTsNCiMgNDE3
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
 aXRlcmF0b3IuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0
 eXBlbmFtZSBfQ29udGFpbmVyPg0KY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IN
 CiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
 cj46Oml0ZXJhdG9yX2NhdGVnb3J5LA0KICAgICAgICAgICAgICAgICAgICBp
 dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwNCiAgICAg
 ICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
 ZmZlcmVuY2VfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Jf
 dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsDQogICAgICAgICAgICAgICAg
 ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+DQp7
 DQoNCnByb3RlY3RlZDoNCiAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7DQoNCnB1
 YmxpYzoNCiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
 IF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOw0KICB0eXBlZGVm
 IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7DQog
 IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6aXRlcmF0b3JfY2F0
 ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdHlwZW5hbWUg
 X190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KICB0eXBl
 ZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk
 aWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNf
 dHlwZTo6cG9pbnRlciBwb2ludGVyOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9f
 dHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7DQoNCiAgX19ub3Jt
 YWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQ0K
 DQogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRv
 ciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0NCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9JdGVyPg0KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3Io
 Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBf
 X2kpDQogICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQ0KDQoNCiAg
 cmVmZXJlbmNlDQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9j
 dXJyZW50OyB9DQoNCiAgcG9pbnRlcg0KICBvcGVyYXRvci0+KCkgY29uc3Qg
 eyByZXR1cm4gX01fY3VycmVudDsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90
 eXBlJg0KICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAq
 dGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90eXBlDQogIG9wZXJhdG9y
 KysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
 KyspOyB9DQoNCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZSYNCiAgb3BlcmF0
 b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0NCg0KICBu
 b3JtYWxfaXRlcmF0b3JfdHlwZQ0KICBvcGVyYXRvci0tKGludCkgeyByZXR1
 cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQ0KDQoNCiAg
 cmVmZXJlbmNlDQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBl
 JiBfX24pIGNvbnN0DQogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQ0K
 DQogIG5vcm1hbF9pdGVyYXRvcl90eXBlJg0KICBvcGVyYXRvcis9KGNvbnN0
 IGRpZmZlcmVuY2VfdHlwZSYgX19uKQ0KICB7IF9NX2N1cnJlbnQgKz0gX19u
 OyByZXR1cm4gKnRoaXM7IH0NCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZQ0K
 ICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0
 DQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBf
 X24pOyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmDQogIG9wZXJhdG9y
 LT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pDQogIHsgX01fY3VycmVu
 dCAtPSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRv
 cl90eXBlDQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
 bikgY29uc3QNCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
 cmVudCAtIF9fbik7IH0NCg0KICBkaWZmZXJlbmNlX3R5cGUNCiAgb3BlcmF0
 b3ItKGNvbnN0IG5vcm1hbF9pdGVyYXRvcl90eXBlJiBfX2kpIGNvbnN0DQog
 IHsgcmV0dXJuIF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQ0KDQog
 IGNvbnN0IF9JdGVyYXRvciYNCiAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N
 X2N1cnJlbnQ7IH0NCn07DQoNCg0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
 cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
 bmVyPg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxf
 aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAg
 ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf
 Q29udGFpbmVyPiYgX19yaHMpDQp7IHJldHVybiBfX2xocy5iYXNlKCkgPT0g
 X19yaHMuYmFzZSgpOyB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
 ckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
 DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVy
 YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAg
 ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250
 YWluZXI+JiBfX3JocykNCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9
 DQoNCg0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
 ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KaW5saW5lIGJv
 b2wNCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
 b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAgY29uc3QgX19u
 b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz
 KQ0KeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9DQoN
 CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
 YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQppbmxpbmUgYm9vbA0Kb3Bl
 cmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D
 b250YWluZXI+JiBfX2xocywNCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
 dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpDQp7IHJl
 dHVybiBfX3JocyA8IF9fbGhzOyB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9J
 dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
 YWluZXI+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I8PShjb25zdCBfX25vcm1h
 bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQog
 ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
 IF9Db250YWluZXI+JiBfX3JocykNCnsgcmV0dXJuICEoX19yaHMgPCBfX2xo
 cyk7IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
 bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCmlubGluZSBi
 b29sDQpvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
 YXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgY29uc3Qg
 X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
 cmhzKQ0KeyByZXR1cm4gIShfX2xocyA8IF9fcmhzKTsgfQ0KDQp0ZW1wbGF0
 ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQpp
 bmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
 Pg0Kb3BlcmF0b3IrKF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
 bnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29u
 c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
 X19pKQ0KeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
 Q29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQ0KDQp9DQojIDM3ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRl
 cmF0b3IuaCIgMiAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi
 IDEgMw0KIyAxOSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX21lbW9yeS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMw0K
 IyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RsX2FsZ29iYXNlLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29u
 ZmlnLmgiIDEgMw0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgi
 IDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RsX3BhaXIuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQpzdHJ1Y3QgcGFpciB7DQog
 IHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7DQogIHR5cGVkZWYgX1QyIHNlY29u
 ZF90eXBlOw0KDQogIF9UMSBmaXJzdDsNCiAgX1QyIHNlY29uZDsNCg0KDQog
 IHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9DQoNCg0KDQogIHBhaXIo
 Y29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSks
 IHNlY29uZChfX2IpIHt9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh
 c3MgX1UyPg0KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDog
 Zmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9DQp9Ow0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9v
 bCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
 IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3Qg
 PT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJv
 b2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
 IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3Qg
 PCBfX3kuZmlyc3QgfHwNCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5m
 aXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9vbCBvcGVy
 YXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
 X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBi
 b29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z
 dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGlu
 ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
 Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3kg
 PCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
 DQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+
 JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJu
 ICEoX194IDwgX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
 c3MgX1QyPg0KDQoNCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIo
 X1QxIF9feCwgX1QyIF9feSkNCg0KDQoNCnsNCiAgcmV0dXJuIHBhaXI8X1Qx
 LCBfVDI+KF9feCwgX195KTsNCn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
 Mw0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzDQojIDE5ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQoN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJj
 LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAyMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90
 cmFpdHMuaCIgMiAzDQojIDU3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZSA8Ym9v
 bCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsNCnR5cGVkZWYgX0Jvb2w8dHJ1
 ZT4gX190cnVlX3R5cGU7DQp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNl
 X3R5cGU7DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBl
 X3RyYWl0cyB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlf
 bWVtYmVyX211c3RfYmVfZmlyc3Q7DQojIDgxICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQogICB0
 eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
 cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf
 Y29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhh
 c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f
 ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRl
 ZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQp0ZW1w
 bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsNCiAgIHR5cGVk
 ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
 cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
 b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
 YWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl
 X3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf
 X3R5cGVfdHJhaXRzPGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAg
 IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
 cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
 ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
 cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNp
 Z25lZCBjaGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90
 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVm
 IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
 DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
 b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsN
 Cg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
 aGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
 ZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
 c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1
 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0
 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQog
 ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt
 cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7DQogICB0
 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
 dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
 cHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1
 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
 dHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1
 Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVf
 dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
 Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
 ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
 dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
 T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
 dHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAg
 IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
 cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
 ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
 cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGlu
 dD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
 dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
 dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
 dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAg
 dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs
 YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7DQog
 ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
 c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
 X2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
 c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f
 dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVm
 IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBz
 dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1
 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0
 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
 b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
 bm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
 cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
 X1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
 YWl0czx1bnNpZ25lZCBsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
 IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm
 IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQog
 ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
 b3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
 X2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
 eXBlOw0KfTsNCiMgMTk5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZTw+IHN0cnVj
 dCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90
 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBl
 ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
 DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
 bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
 aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
 RF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
 czxkb3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
 YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsN
 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
 cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K
 DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91Ymxl
 PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
 bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90
 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBl
 ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0
 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxh
 dGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsN
 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
 b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
 YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
 aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg
 X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk
 ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQoNCnRl
 bXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7DQogIHR5
 cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRl
 PD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsNCiAgdHlwZWRlZiBfX3Ry
 dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf
 SXNfaW50ZWdlcjxjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
 dGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
 c2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
 YWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNp
 Z25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
 Ow0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
 dD4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoN
 CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7DQogIHR5
 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8
 PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsNCiAgdHlw
 ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+
 IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVf
 dHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
 aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlw
 ZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
 ZWdlcjxsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
 Ow0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWdu
 ZWQgbG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsN
 Cn07DQojIDI5NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvdHlwZV90cmFpdHMuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
 PiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7DQogICB0eXBlZGVmIF9f
 ZmFsc2VfdHlwZSBfTm9ybWFsOw0KfTsNCg0KDQpuYW1lc3BhY2Ugc3RkIHsN
 CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv
 bnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7DQp9Ow0KDQp0ZW1w
 bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
 DQpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1hbF9p
 dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gew0KICAgdHlwZWRl
 ZiBfX3RydWVfdHlwZSBfTm9ybWFsOw0KfTsNCiMgNDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
 IDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfY3N0cmluZy5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2NsaW1pdHMuaCIgMSAzDQojIDQ0ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
 c3RkbGliLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2NzdGRkZWYuaCIgMSAzDQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMNCiMgNDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
 c3RkbGliLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt
 bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5o
 IiAxIDMgNA0KIyAyNSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
 L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAz
 IDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWIuaAkxLjQ0CTk4LzAxLzIy
 IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu
 aCIgMSAzIDQNCiMgMjggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
 Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRsaWIuaCIg
 MiAzIDQNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDEg
 MyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0DQojcHJh
 Z21hIGlkZW50ICJAKCMpd2FpdC5oCTEuMjEJOTcvMDQvMDggU01JIg0KDQoj
 IDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0K
 IyAxOSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
 cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNA0KIyAyMSAi
 L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCg0KDQojIDEgIi91
 c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzIDQNCiMgMTYgIi91c3Iv
 aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJA
 KCMpcmVzb3VyY2UuaAkxLjI1CTk4LzA2LzMwIFNNSSINCg0KIyAxICIvdXNy
 L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91
 c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQNCg0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDIxICIvdXNy
 L2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0DQojIDEgIi91c3IvaW5j
 bHVkZS9zeXMvdGltZS5oIiAxIDMgNA0KIyAyMiAiL3Vzci9pbmNsdWRlL3N5
 cy9yZXNvdXJjZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA2NyAi
 L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCnR5cGVkZWYgdW5z
 aWduZWQgbG9uZyBybGltX3Q7DQojIDEwMiAiL3Vzci9pbmNsdWRlL3N5cy9y
 ZXNvdXJjZS5oIiAzIDQNCnN0cnVjdCBybGltaXQgew0KICAgICAgICBybGlt
 X3QgcmxpbV9jdXI7DQogICAgICAgIHJsaW1fdCBybGltX21heDsNCn07DQoN
 Cg0KDQoNCnR5cGVkZWYgdV9sb25nbG9uZ190IHJsaW02NF90Ow0KDQoNCg0K
 DQoNCnN0cnVjdCBybGltaXQ2NCB7DQogICAgICAgIHJsaW02NF90IHJsaW1f
 Y3VyOw0KICAgICAgICBybGltNjRfdCBybGltX21heDsNCn07DQojIDE0MyAi
 L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCnN0cnVjdCBydXNh
 Z2Ugew0KICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsNCiAgICAg
 ICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7DQogICAgICAgIGxvbmcgcnVf
 bWF4cnNzOw0KICAgICAgICBsb25nIHJ1X2l4cnNzOw0KICAgICAgICBsb25n
 IHJ1X2lkcnNzOw0KICAgICAgICBsb25nIHJ1X2lzcnNzOw0KICAgICAgICBs
 b25nIHJ1X21pbmZsdDsNCiAgICAgICAgbG9uZyBydV9tYWpmbHQ7DQogICAg
 ICAgIGxvbmcgcnVfbnN3YXA7DQogICAgICAgIGxvbmcgcnVfaW5ibG9jazsN
 CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOw0KICAgICAgICBsb25nIHJ1X21z
 Z3NuZDsNCiAgICAgICAgbG9uZyBydV9tc2dyY3Y7DQogICAgICAgIGxvbmcg
 cnVfbnNpZ25hbHM7DQogICAgICAgIGxvbmcgcnVfbnZjc3c7DQogICAgICAg
 IGxvbmcgcnVfbml2Y3N3Ow0KfTsNCiMgMTkzICIvdXNyL2luY2x1ZGUvc3lz
 L3Jlc291cmNlLmgiIDMgNA0KZXh0ZXJuIGludCBzZXRybGltaXQoaW50LCBj
 b25zdCBzdHJ1Y3QgcmxpbWl0ICopOw0KZXh0ZXJuIGludCBnZXRybGltaXQo
 aW50LCBzdHJ1Y3QgcmxpbWl0ICopOw0KDQoNCg0KDQpleHRlcm4gaW50IHNl
 dHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdDY0ICopOw0KZXh0
 ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBybGltaXQ2NCAqKTsN
 Cg0KDQpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7DQpleHRl
 cm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsNCmV4dGVybiBp
 bnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsNCiMgMjI4ICIv
 dXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0KfQ0KIyAyNSAiL3Vz
 ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVk
 ZS9zeXMvc2lnaW5mby5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5
 cy9zaWdpbmZvLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXNpZ2luZm8u
 aAkxLjU0CTk4LzAzLzI3IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lz
 L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9z
 eXMvc2lnaW5mby5oIiAyIDMgNA0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUv
 c3lzL3R5cGVzLmgiIDEgMyA0DQojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3Np
 Z2luZm8uaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTI2ICIvdXNy
 L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk
 ZS9zeXMvbWFjaHNpZy5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5
 cy9tYWNoc2lnLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKW1hY2hzaWcu
 aAkxLjE0CTk4LzAyLzA1IFNNSSINCg0KDQojIDEgIi91c3IvaW5jbHVkZS9z
 eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyMCAiL3Vzci9pbmNsdWRl
 L3N5cy9tYWNoc2lnLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDEx
 MCAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMgNA0KfQ0KIyAxMjcg
 Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNA0KIyAyMDYgIi91
 c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL3Vzci9pbmNs
 dWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQNCiMgMjA3ICIvdXNyL2luY2x1
 ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQNCiMgMjE3ICIvdXNyL2luY2x1ZGUv
 c3lzL3NpZ2luZm8uaCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9s
 aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
 eXMvdHlwZXMuaCIgMSAzIDQNCiMgMjE4ICIvdXNyL2luY2x1ZGUvc3lzL3Np
 Z2luZm8uaCIgMiAzIDQNCg0KDQoNCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8g
 ew0KDQoNCg0KICAgICAgICBpbnQgc2lfc2lnbm87DQogICAgICAgIGludCBz
 aV9jb2RlOw0KICAgICAgICBpbnQgc2lfZXJybm87DQoNCg0KDQogICAgICAg
 IHVuaW9uIHsNCg0KICAgICAgICAgICAgICAgIGludCBfX3BhZFsoKDEyOCAv
 IHNpemVvZiAoaW50KSkgLSAzKV07DQoNCiAgICAgICAgICAgICAgICBzdHJ1
 Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7DQog
 ICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7DQoNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNp
 Z3ZhbCBfX3ZhbHVlOw0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICB9IF9fa2lsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fc3RhdHVzOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX19z
 dGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2Ns
 ZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gX19wZGF0YTsNCiAgICAg
 ICAgICAgICAgICB9IF9fcHJvYzsNCg0KICAgICAgICAgICAgICAgIHN0cnVj
 dCB7DQogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FkZHI7DQog
 ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87DQogICAgICAg
 ICAgICAgICAgICAgICAgICBjYWRkcl90IF9fcGM7DQogICAgICAgICAgICAg
 ICAgfSBfX2ZhdWx0Ow0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7DQogICAgICAgICAg
 ICAgICAgICAgICAgICBsb25nIF9fYmFuZDsNCiAgICAgICAgICAgICAgICB9
 IF9fZmlsZTsNCg0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAg
 ICAgICAgICAgICAgICAgICBjYWRkcl90IF9fZmFkZHI7DQoNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7DQoNCg0K
 DQogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2NhbGw7DQog
 ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgIGxvbmcgX19zeXNhcmdbOF07DQogICAgICAgICAgICAg
 ICAgICAgICAgICBpbnQgX19tc3RhdGVbMTBdOw0KICAgICAgICAgICAgICAg
 IH0gX19wcm9mOw0KDQogICAgICAgIH0gX19kYXRhOw0KDQp9IHNpZ2luZm9f
 dDsNCiMgMzU0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQp0
 eXBlZGVmIHN0cnVjdCBrX3NpZ2luZm8gew0KICAgICAgICBpbnQgc2lfc2ln
 bm87DQogICAgICAgIGludCBzaV9jb2RlOw0KICAgICAgICBpbnQgc2lfZXJy
 bm87DQoNCg0KDQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBz
 dHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7
 DQogICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2ln
 dmFsIF9fdmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IH0gX19raWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
 dHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIGNsb2NrX3QgX191dGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3N0aW1lOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9fY2xkOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOw0KICAgICAgICAgICAg
 ICAgIH0gX19wcm9jOw0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRkcjsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgIGNhZGRyX3QgX19wYzsNCiAgICAgICAgICAgICAgICB9IF9f
 ZmF1bHQ7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICBpbnQgX19mZDsNCiAgICAgICAgICAgICAgICAg
 ICAgICAgIGxvbmcgX19iYW5kOw0KICAgICAgICAgICAgICAgIH0gX19maWxl
 Ow0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsNCg0KDQoNCiAgICAgICAgICAg
 ICAgICAgICAgICAgIHRpbWVzdHJ1Y190IF9fdHN0YW1wOw0KDQoNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX19zeXNjYWxsOw0KICAgICAg
 ICAgICAgICAgICAgICAgICAgY2hhciBfX25zeXNhcmc7DQogICAgICAgICAg
 ICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7DQoNCg0KDQogICAgICAgICAg
 ICAgICAgfSBfX3Byb2Y7DQoNCiAgICAgICAgfSBfX2RhdGE7DQoNCn0ga19z
 aWdpbmZvX3Q7DQoNCnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsNCiAgICAg
 ICAgc3RydWN0IHNpZ3F1ZXVlICpzcV9uZXh0Ow0KICAgICAgICBrX3NpZ2lu
 Zm9fdCBzcV9pbmZvOw0KICAgICAgICB2b2lkICgqc3FfZnVuYykoc3RydWN0
 IHNpZ3F1ZXVlICopOw0KICAgICAgICB2b2lkICpzcV9iYWNrcHRyOw0KDQp9
 IHNpZ3F1ZXVlX3Q7DQojIDQ1NCAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZv
 LmgiIDMgNA0KfQ0KIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIg
 MyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMgNA0K
 IyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0KI3ByYWdt
 YSBpZGVudCAiQCgjKXByb2NzZXQuaAkxLjE4CTk4LzA2LzMwIFNNSSINCg0K
 DQpleHRlcm4gIkMiIHsNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
 dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9w
 cm9jc2V0LmgiIDIgMyA0DQojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3Byb2Nz
 ZXQuaCIgMyA0DQp0eXBlZGVmIGVudW0NCg0KICAgICAgICBpZHR5cGUNCg0K
 ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgUF9QSUQsDQogICAgICAgIFBf
 UFBJRCwNCiAgICAgICAgUF9QR0lELA0KDQogICAgICAgIFBfU0lELA0KICAg
 ICAgICBQX0NJRCwNCiAgICAgICAgUF9VSUQsDQogICAgICAgIFBfR0lELA0K
 ICAgICAgICBQX0FMTCwNCiAgICAgICAgUF9MV1BJRA0KfSBpZHR5cGVfdDsN
 CiMgNjQgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQNCnR5cGVk
 ZWYgZW51bSBpZG9wIHsNCiAgICAgICAgUE9QX0RJRkYsDQoNCg0KICAgICAg
 ICBQT1BfQU5ELA0KDQoNCiAgICAgICAgUE9QX09SLA0KDQoNCiAgICAgICAg
 UE9QX1hPUg0KDQoNCn0gaWRvcF90Ow0KDQoNCg0KDQoNCg0KDQp0eXBlZGVm
 IHN0cnVjdCBwcm9jc2V0IHsNCiAgICAgICAgaWRvcF90IHBfb3A7DQoNCg0K
 DQoNCiAgICAgICAgaWR0eXBlX3QgcF9saWR0eXBlOw0KDQoNCiAgICAgICAg
 aWRfdCBwX2xpZDsNCg0KICAgICAgICBpZHR5cGVfdCBwX3JpZHR5cGU7DQoN
 Cg0KICAgICAgICBpZF90IHBfcmlkOw0KfSBwcm9jc2V0X3Q7DQojIDEyOSAi
 L3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0KfQ0KIyAyNyAiL3Vz
 ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCg0KDQpleHRlcm4gIkMi
 IHsNCiMgODYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQNCmV4dGVy
 biBwaWRfdCB3YWl0KGludCAqKTsNCmV4dGVybiBwaWRfdCB3YWl0cGlkKHBp
 ZF90LCBpbnQgKiwgaW50KTsNCg0KDQpleHRlcm4gaW50IHdhaXRpZChpZHR5
 cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7DQpleHRlcm4gcGlkX3Qg
 d2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsNCg0KDQoNCg0K
 ZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3Qg
 cnVzYWdlICopOw0KIyAxMTggIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAz
 IDQNCn0NCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
 cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRsaWIuaCIgMiAz
 IDQNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCnR5cGVkZWYgc3RydWN0IHsN
 CiAgICAgICAgaW50IHF1b3Q7DQogICAgICAgIGludCByZW07DQp9IGRpdl90
 Ow0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIGxvbmcgcXVvdDsNCiAg
 ICAgICAgbG9uZyByZW07DQp9IGxkaXZfdDsNCg0KDQp0eXBlZGVmIHN0cnVj
 dCB7DQogICAgICAgIGxvbmcgbG9uZyBxdW90Ow0KICAgICAgICBsb25nIGxv
 bmcgcmVtOw0KfSBsbGRpdl90Ow0KIyAxNDggIi9ob21lL21kZWlsL2Jpbi8u
 Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
 ZS9zdGRsaWIuaCIgMyA0DQpleHRlcm4gdW5zaWduZWQgY2hhciBfX2N0eXBl
 W107DQoNCg0KDQpleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsN
 CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOw0KZXh0ZXJuIGxvbmcg
 aW50IGF0b2woY29uc3QgY2hhciAqKTsNCmV4dGVybiBkb3VibGUgc3RydG9k
 KGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQpleHRlcm4gbG9uZyBpbnQgc3Ry
 dG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCmV4dGVybiB1bnNp
 Z25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwg
 aW50KTsNCg0KZXh0ZXJuIGludCByYW5kKHZvaWQpOw0KZXh0ZXJuIHZvaWQg
 c3JhbmQodW5zaWduZWQgaW50KTsNCg0KDQpleHRlcm4gaW50IHJhbmRfcih1
 bnNpZ25lZCBpbnQgKik7DQoNCg0KZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXpl
 X3QsIHNpemVfdCk7DQpleHRlcm4gdm9pZCBmcmVlKHZvaWQgKik7DQpleHRl
 cm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7DQpleHRlcm4gdm9pZCAqcmVhbGxv
 Yyh2b2lkICosIHNpemVfdCk7DQoNCmV4dGVybiB2b2lkIGFib3J0KHZvaWQp
 Ow0KZXh0ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOw0KZXh0ZXJu
 IHZvaWQgZXhpdChpbnQpOw0KZXh0ZXJuIHZvaWQgX2V4aXRoYW5kbGUodm9p
 ZCk7DQpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7DQpleHRl
 cm4gaW50IHN5c3RlbShjb25zdCBjaGFyICopOw0KDQpleHRlcm4gdm9pZCAq
 YnNlYXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz
 aXplX3QsDQogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2
 b2lkICopKTsNCmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBz
 aXplX3QsDQogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2
 b2lkICopKTsNCg0KZXh0ZXJuIGludCBhYnMoaW50KTsNCmV4dGVybiBkaXZf
 dCBkaXYoaW50LCBpbnQpOw0KZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7
 DQpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7DQoNCmV4dGVybiBp
 bnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K
 ZXh0ZXJuIGludCBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7DQpleHRl
 cm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOw0KDQpleHRlcm4gc2l6
 ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
 Ow0KZXh0ZXJuIHNpemVfdCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFy
 X3QgKiwgc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4
 KHZvaWQpOw0KZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0
 ICopOw0KZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsN
 CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7DQpleHRl
 cm4gbG9uZyBscmFuZDQ4KHZvaWQpOw0KZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2
 b2lkKTsNCmV4dGVybiBsb25nIG5yYW5kNDgodW5zaWduZWQgc2hvcnQgKik7
 DQpleHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9y
 dCAqKTsNCmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7DQpleHRlcm4gaW50
 IHB1dGVudihjaGFyICopOw0KZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNo
 YXIgKik7DQojIDIxOSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
 L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAz
 IDQNCmV4dGVybiBpbnQgbWtzdGVtcChjaGFyICopOw0KDQoNCmV4dGVybiBp
 bnQgbWtzdGVtcDY0KGNoYXIgKik7DQoNCg0KDQoNCg0KDQpleHRlcm4gbG9u
 ZyBhNjRsKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZWN2dChkb3Vi
 bGUsIGludCwgaW50ICosIGludCAqKTsNCmV4dGVybiBjaGFyICpmY3Z0KGRv
 dWJsZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKmdjdnQo
 ZG91YmxlLCBpbnQsIGNoYXIgKik7DQpleHRlcm4gaW50IGdldHN1Ym9wdChj
 aGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsNCmV4dGVybiBpbnQg
 Z3JhbnRwdChpbnQpOw0KZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25l
 ZCwgY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7
 DQpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7DQpleHRlcm4gY2hhciAq
 cHRzbmFtZShpbnQpOw0KZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQpOw0KZXh0
 ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsNCmV4
 dGVybiBjaGFyICpzZXRzdGF0ZShjb25zdCBjaGFyICopOw0KZXh0ZXJuIHZv
 aWQgc3JhbmRvbSh1bnNpZ25lZCk7DQpleHRlcm4gaW50IHR0eXNsb3Qodm9p
 ZCk7DQpleHRlcm4gaW50IHVubG9ja3B0KGludCk7DQpleHRlcm4gdm9pZCAq
 dmFsbG9jKHNpemVfdCk7DQoNCg0KDQoNCmV4dGVybiBpbnQgZHVwMihpbnQs
 IGludCk7DQpleHRlcm4gY2hhciAqcWVjdnQobG9uZyBkb3VibGUsIGludCwg
 aW50ICosIGludCAqKTsNCmV4dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJs
 ZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKnFnY3Z0KGxv
 bmcgZG91YmxlLCBpbnQsIGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0Y3dk
 KGNoYXIgKiwgc2l6ZV90KTsNCmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVj
 bmFtZSh2b2lkKTsNCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsNCmV4
 dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hh
 ciAqKTsNCmV4dGVybiBjaGFyICpvcHRhcmc7DQpleHRlcm4gaW50IG9wdGlu
 ZCwgb3B0ZXJyLCBvcHRvcHQ7DQpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25z
 dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3Qg
 Y2hhciAqKTsNCmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7DQpl
 eHRlcm4gaW50IGlzYXR0eShpbnQpOw0KZXh0ZXJuIHZvaWQgKm1lbWFsaWdu
 KHNpemVfdCwgc2l6ZV90KTsNCmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7
 DQoNCg0KZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOw0K
 ZXh0ZXJuIGxvbmcgbG9uZyBsbGFicyhsb25nIGxvbmcpOw0KZXh0ZXJuIGxs
 ZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOw0KZXh0ZXJuIGNo
 YXIgKmxsdG9zdHIobG9uZyBsb25nLCBjaGFyICopOw0KZXh0ZXJuIGxvbmcg
 bG9uZyBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCmV4
 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAq
 LCBjaGFyICoqLCBpbnQpOw0KZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2ln
 bmVkIGxvbmcgbG9uZywgY2hhciAqKTsNCiMgNDEyICIvaG9tZS9tZGVpbC9i
 aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
 Y2x1ZGUvc3RkbGliLmgiIDMgNA0KfQ0KIyA0MiAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzDQoj
 IDczICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfY3N0ZGxpYi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6
 ZGl2X3Q7DQogIHVzaW5nIDo6bGRpdl90Ow0KDQogIHVzaW5nIDo6YWJvcnQ7
 DQogIHVzaW5nIDo6YWJzOw0KICB1c2luZyA6OmF0ZXhpdDsNCiAgdXNpbmcg
 OjphdG9mOw0KICB1c2luZyA6OmF0b2k7DQogIHVzaW5nIDo6YXRvbDsNCiAg
 dXNpbmcgOjpic2VhcmNoOw0KICB1c2luZyA6OmNhbGxvYzsNCiAgdXNpbmcg
 OjpkaXY7DQogIHVzaW5nIDo6ZXhpdDsNCiAgdXNpbmcgOjpmcmVlOw0KICB1
 c2luZyA6OmdldGVudjsNCiAgdXNpbmcgOjpsYWJzOw0KICB1c2luZyA6Omxk
 aXY7DQogIHVzaW5nIDo6bWFsbG9jOw0KICB1c2luZyA6Om1ibGVuOw0KICB1
 c2luZyA6Om1ic3Rvd2NzOw0KICB1c2luZyA6Om1idG93YzsNCiAgdXNpbmcg
 Ojpxc29ydDsNCiAgdXNpbmcgOjpyYW5kOw0KICB1c2luZyA6OnJlYWxsb2M7
 DQogIHVzaW5nIDo6c3JhbmQ7DQogIHVzaW5nIDo6c3RydG9kOw0KICB1c2lu
 ZyA6OnN0cnRvbDsNCiAgdXNpbmcgOjpzdHJ0b3VsOw0KICB1c2luZyA6OnN5
 c3RlbTsNCiAgdXNpbmcgOjp3Y3N0b21iczsNCiAgdXNpbmcgOjp3Y3RvbWI7
 DQoNCiAgaW5saW5lIGxvbmcNCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBs
 YWJzKF9faSk7IH0NCg0KICBpbmxpbmUgbGRpdl90DQogIGRpdihsb25nIF9f
 aSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9DQp9DQoj
 IDQ1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyA0NiAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
 Z29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvbmV3IiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9uZXciIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMw0KIyAzNSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMw0K
 IyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL25ldyIg
 MiAzDQoNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg
 Y2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbg0KICB7DQogIHB1
 YmxpYzoNCiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1
 YWwgfmJhZF9hbGxvYygpIHRocm93KCk7DQogIH07DQoNCiAgc3RydWN0IG5v
 dGhyb3dfdCB7IH07DQogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJv
 dzsNCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7DQogIG5ld19o
 YW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7DQp9DQoNCg0K
 dm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpi
 YWRfYWxsb2MpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qp
 IHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0
 ZSh2b2lkICopIHRocm93KCk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZv
 aWQgKikgdGhyb3coKTsNCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf
 dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCAqb3Bl
 cmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190
 JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgY29u
 c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBk
 ZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3co
 KTsNCg0KDQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90
 LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQ0KaW5s
 aW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpw
 bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQ0KfQ0KIyA0NyAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
 YXNlLmgiIDIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzDQojIDQ5ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
 aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMw0KIyA1MCAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
 Z29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMN
 CiMgNTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0KIyA1
 MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
 X2FsZ29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMw0KIyA1MyAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
 Z29iYXNlLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy
 MiwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0Zvcndh
 cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQ0Kew0KICBf
 VHAgX190bXAgPSAqX19hOw0KICAqX19hID0gKl9fYjsNCiAgKl9fYiA9IF9f
 dG1wOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xh
 c3MgX0ZvcndhcmRJdGVyMj4NCmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9y
 d2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCg0KDQogIF9faXRlcl9zd2FwKF9fYSwgX19i
 LCBfX3ZhbHVlX3R5cGUoX19hKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 VHA+DQppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQogIF9UcCBfX3RtcCA9IF9fYTsNCiAgX19h
 ID0gX19iOw0KICBfX2IgPSBfX3RtcDsNCn0NCg0KDQoNCg0KDQoNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBjb25zdCBfVHAmIG1pbihjb25z
 dCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJu
 IF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBjb25z
 dCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgaWYgKF9fYSA8IF9fYikgcmV0
 dXJuIF9fYjsgcmV0dXJuIF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9U
 cCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29u
 c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
 IHsNCg0KICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0
 dXJuIF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Nv
 bXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es
 IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsNCg0KICBpZiAo
 X19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsNCn0N
 CiMgMTM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGxfYWxnb2Jhc2UuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
 bmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
 cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9P
 dXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopDQp7DQogIGZvciAo
 IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkN
 CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
 YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX091
 dHB1dEl0ZXINCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
 UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgX091dHB1dEl0ZXIg
 X19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFu
 Y2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2Zp
 cnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICpfX3Jlc3VsdCA9ICpfX2Zp
 cnN0Ow0KICAgICsrX19maXJzdDsNCiAgICArK19fcmVzdWx0Ow0KICB9DQog
 IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4N
 CmlubGluZSBfVHAqDQpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmly
 c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQ0Kew0KICBt
 ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xh
 c3QgLSBfX2ZpcnN0KSk7DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3Qg
 LSBfX2ZpcnN0KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
 ciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1dEl0ZXIgX19j
 b3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
 ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0Kew0KICByZXR1cm4gX19jb3B5
 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAg
 X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAg
 ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg
 X091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf
 SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQp7DQog
 IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwNCiAg
 ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLA0K
 ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgX1RwKiBfX2NvcHlf
 YXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpDQp7DQog
 IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
 dWx0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAq
 IF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
 X2xhc3QsIF9UcCogX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg
 ICBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9f
 Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KfQ0KDQoNCnRlbXBsYXRlIDxj
 bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Rw
 Pg0KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgoX0lucHV0SXRlciBf
 X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQ0Kew0K
 ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3Ry
 aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFs
 Ow0KICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jl
 c3VsdCwgX1RyaXZpYWwoKSk7DQp9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9J
 bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRw
 dXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
 dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQp7DQogIHJldHVy
 biBfT3V0cHV0SXRlcihfX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y
 ZXN1bHQuYmFzZSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsNCn0NCg0KdGVtcGxhdGU8dHlw
 ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxp
 bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3Qs
 IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkNCnsN
 CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
 dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGU8dHlw
 ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxp
 bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3Qs
 IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkNCnsN
 CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRw
 dXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9u
 aTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBf
 X05vcm1hbCgpKTsNCn0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
 ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1dEl0ZXIg
 X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
 dGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQp7DQogIHR5cGVkZWYgdHlw
 ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3Jt
 YWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9f
 bGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg
 X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
 ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQoNCiAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1h
 bF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAg
 IHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
 IF9fTm9ybWFsKCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwN
 CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX0JpZGlyZWN0
 aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVy
 MSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
 dGlvbmFsSXRlcjIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
 YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0Rpc3RhbmNlKikNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
 KQ0KICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19y
 ZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
 ciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+
 DQppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
 dGVyYXRvcl90YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBf
 X24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikNCiAgICAq
 LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0K
 fQ0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
 YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAg
 ICBjbGFzcyBfQm9vbFR5cGU+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp
 c3BhdGNoDQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
 PF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQ0KICAg
 ICAgICAgIF9DYXQ7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
 aXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUNCiAg
 ICAgICAgICBfRGlzdGFuY2U7DQoNCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFs
 SXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
 dGVyMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgew0KICAgIHJldHVy
 biBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
 X0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7DQogIH0NCn07DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo
 PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0Kew0KICBzdGF0aWMgX1RwKiBj
 b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9U
 cCogX19yZXN1bHQpIHsNCiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f
 bGFzdCAtIF9fZmlyc3Q7DQogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0s
 IF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7DQogICAgcmV0dXJuIF9f
 cmVzdWx0IC0gX051bTsNCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9U
 cD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1Rw
 KiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHko
 Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf
 X3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0
 Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQogICAgICA6OmNvcHkoX19m
 aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogIH0NCn07DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5
 X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkky
 IF9fcmVzdWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
 czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+
 DQogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2ln
 bm1lbnRfb3BlcmF0b3INCiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0dXJu
 IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlh
 bD4NCiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
 ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5h
 bWUgX0JJMj4NCmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf
 bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgew0KICByZXR1cm4g
 X0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y
 ZXN1bHQuYmFzZSgpKSk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
 LCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk
 X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSl7DQog
 IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
 X19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlw
 ZW5hbWUgX0JJMj4NCmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1
 dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsNCiAgdHlwZWRl
 ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFs
 IF9fTm9ybWFsOw0KICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u
 b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCks
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCnRlbXBsYXRlIDx0
 eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19j
 b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly
 c3QsIF9CSTEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNl
 X3R5cGUpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
 dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICByZXR1cm4gX19jb3B5
 X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19s
 YXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCmlubGluZSBfQkky
 IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJ
 MiBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K
 ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46
 Ol9Ob3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfYmFja3dhcmRf
 aW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
 bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9fTm9ybWFsKCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVy
 Pg0KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lu
 cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
 bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
 bnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgZm9yICggOyBfX2NvdW50ID4gMDsg
 LS1fX2NvdW50KSB7DQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAg
 KytfX2ZpcnN0Ow0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIHBh
 aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXpl
 LCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9SQUl0ZXIsIF9P
 dXRwdXRJdGVyPg0KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBf
 X2NvdW50LA0KICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg
 ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfUkFJdGVy
 IF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFpcjxf
 UkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9f
 bGFzdCwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu
 ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KX19jb3B5X24oX0lu
 cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf
 X3Jlc3VsdCkgew0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3Vu
 dCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
 dGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu
 ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KY29weV9uKF9JbnB1
 dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19y
 ZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQs
 IF9fcmVzdWx0KTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
 cndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIGZpbGwoX0ZvcndhcmRJdGVy
 IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192
 YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQog
 ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfT3V0cHV0
 SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
 b25zdCBfVHAmIF9fdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0
 KQ0KICAgICpfX2ZpcnN0ID0gX192YWx1ZTsNCiAgcmV0dXJuIF9fZmlyc3Q7
 DQp9DQoNCg0KDQppbmxpbmUgdm9pZCBmaWxsKHVuc2lnbmVkIGNoYXIqIF9f
 Zmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwNCiAgICAgICAgICAgICAg
 ICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQ0Kew0KICB1bnNpZ25lZCBj
 aGFyIF9fdG1wID0gX19jOw0KICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9f
 bGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQppbmxpbmUgdm9pZCBmaWxsKHNpZ25l
 ZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LA0KICAgICAg
 ICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0Kew0KICBzaWdu
 ZWQgY2hhciBfX3RtcCA9IF9fYzsNCiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRp
 Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJz
 dCk7DQp9DQoNCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hh
 ciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpDQp7DQogIGNoYXIgX190bXAg
 PSBfX2M7DQogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
 ZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUgdW5zaWduZWQgY2hhciogZmls
 bF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYg
 X19jKQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
 DQogIHJldHVybiBfX2ZpcnN0ICsgX19uOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1NpemU+DQppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBf
 X2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0Kew0KICBmaWxsKF9fZmlyc3Qs
 IF9fZmlyc3QgKyBfX24sIF9fYyk7DQogIHJldHVybiBfX2ZpcnN0ICsgX19u
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUgY2hhciog
 ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYg
 X19jKQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
 DQogIHJldHVybiBfX2ZpcnN0ICsgX19uOw0KfQ0KDQoNCg0KDQoNCnRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+DQpw
 YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0
 SXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
 cnN0MikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2Zp
 cnN0MSA9PSAqX19maXJzdDIpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsr
 X19maXJzdDI7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9J
 bnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
 cyBfQmluYXJ5UHJlZGljYXRlPg0KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
 SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIx
 IF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
 bmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
 c3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7
 DQogICAgKytfX2ZpcnN0MTsNCiAgICArK19fZmlyc3QyOw0KICB9DQogIHJl
 dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
 IF9fZmlyc3QyKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
 LCBjbGFzcyBfSW5wdXRJdGVyMj4NCmlubGluZSBib29sIGVxdWFsKF9JbnB1
 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
 ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
 c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQ0KICAgIGlmICghKCpfX2Zp
 cnN0MSA9PSAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICBy
 ZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
 LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4N
 CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
 dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
 cjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkN
 CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
 aXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpf
 X2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgIHJldHVybiBmYWxzZTsNCiAg
 cmV0dXJuIHRydWU7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9J
 bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmJvb2wgbGV4aWNvZ3Jh
 cGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
 bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
 Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
 bGFzdDINCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQog
 ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiB0
 cnVlOw0KICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICBy
 ZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
 dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0Nv
 bXBhcmU+DQpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0
 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
 cHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIGZvciAoIDsgX19maXJz
 dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAg
 IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgew0KICAgIGlmIChfX2NvbXAo
 Kl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIHRydWU7DQog
 ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQogICAgICBy
 ZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
 dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KaW5saW5lIGJvb2wN
 CmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIq
 IF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z
 aWduZWQgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg
 IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikNCnsN
 CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsN
 CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsN
 CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp
 cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogIHJldHVybiBfX3Jlc3Vs
 dCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOw0KfQ0K
 DQppbmxpbmUgYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBj
 aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmly
 c3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQ0Kew0KDQogIHJldHVybiBsZXhp
 Y29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
 cnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
 dCBzaWduZWQgY2hhciopIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWdu
 ZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoNCg0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KaW50
 IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
 X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
 bnB1dEl0ZXIyIF9fbGFzdDIpDQp7DQogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
 X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsNCiAgICBpZiAoKl9f
 Zmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgcmV0dXJuIC0xOw0KICAgIGlm
 ICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4gMTsNCiAg
 ICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0NCiAgaWYgKF9f
 Zmlyc3QyID09IF9fbGFzdDIpIHsNCiAgICByZXR1cm4gIShfX2ZpcnN0MSA9
 PSBfX2xhc3QxKTsNCiAgfQ0KICBlbHNlIHsNCiAgICByZXR1cm4gLTE7DQog
 IH0NCn0NCg0KaW5saW5lIGludA0KX19sZXhpY29ncmFwaGljYWxfY29tcGFy
 ZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
 IF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
 c3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikN
 CnsNCiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2Zp
 cnN0MTsNCiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBf
 X2ZpcnN0MjsNCiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmly
 c3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogIHJldHVy
 biBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQNCiAgICAgICAgICAgICAgICAg
 ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19s
 ZW4yID8gLTEgOiAxKSk7DQp9DQoNCmlubGluZSBpbnQNCl9fbGV4aWNvZ3Jh
 cGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29u
 c3QgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0
 MikNCnsNCg0KICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z
 d2F5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
 c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
 aGFyKikgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoN
 Cg0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
 bnB1dEl0ZXIyPg0KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXko
 X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
 X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX2xl
 eGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEs
 IF9fZmlyc3QyLCBfX2xhc3QyKTsNCn0NCg0KfQ0KIyAyMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAy
 IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RsX2FsbG9jLmgiIDEgMw0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCiMgMSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
 cHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAx
 IDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoN
 CiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7DQoNCg0K
 ICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOw0KDQoNCiAgdm9p
 ZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAgX190
 aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93
 X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
 X3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
 aWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f
 cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj
 aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
 Y29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVudGlt
 ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJv
 d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAg
 X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQog
 IHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog
 X19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
 dCBjaGFyKiBfX3MpOw0KfQ0KIyAyOSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
 Zi5oIiAxIDMNCiMgMzAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAz
 DQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGxfYWxsb2MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyAzMiAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
 bG9jLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMNCiMgMzcgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0Lmgi
 IDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNA0KIyAxMSAi
 L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAo
 Iylhc3NlcnQuaAkxLjkJOTIvMDcvMTQgU01JIg0KDQoNCmV4dGVybiAiQyIg
 ew0KDQoNCg0KZXh0ZXJuIHZvaWQgX19hc3NlcnQoY29uc3QgY2hhciAqLCBj
 b25zdCBjaGFyICosIGludCk7DQoNCg0KDQoNCg0KfQ0KIyAzOCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQu
 aCIgMiAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQoNCg0KDQoNCg0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk
 cy5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp
 dHMvZ3Roci5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDIgMw0KIyA1MSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
 ZHMuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA2NiAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0K
 c3RydWN0IF9SZWZjb3VudF9CYXNlDQp7DQoNCg0KDQoNCiAgdHlwZWRlZiBz
 aXplX3QgX1JDX3Q7DQoNCg0KDQogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZf
 Y291bnQ7DQoNCg0KDQoNCiAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2Nv
 dW50X2xvY2s7DQogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9y
 ZWZfY291bnQoX19uKQ0KICAgIHsNCg0KICAgICAgX19ndGhyZWFkX211dGV4
 X3QgX190bXAgPSB7e3swfSwgMH0sIHt7ezB9fX0sIHswfX07DQogICAgICBf
 TV9yZWZfY291bnRfbG9jayA9IF9fdG1wOw0KDQoNCg0KDQoNCiAgICB9DQoj
 IDExMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RsX3RocmVhZHMuaCIgMw0KICB2b2lkIF9NX2luY3IoKSB7DQogICAgX19n
 dGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICAr
 K19NX3JlZl9jb3VudDsNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZf
 TV9yZWZfY291bnRfbG9jayk7DQogIH0NCiAgX1JDX3QgX01fZGVjcigpIHsN
 CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2sp
 Ow0KICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7
 DQogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv
 Y2spOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KIyAxNjMgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
 IDMNCn07DQojIDI4NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KdGVtcGxhdGUgPGludCBfX2lu
 c3Q+DQpzdHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsNCiAgZW51bSB7IF9fbG93
 X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9Ow0KDQoNCiAgc3RhdGlj
 IHVuc2lnbmVkIF9fbWF4Ow0KICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Ow0K
 fTsNCg0KdGVtcGxhdGUgPGludCBfX2luc3Q+DQp1bnNpZ25lZCBfU1RMX211
 dGV4X3NwaW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19p
 bnN0Pjo6X19sb3dfbWF4Ow0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnVu
 c2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xhc3QgPSAwOw0K
 IyAzMTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0bF90aHJlYWRzLmgiIDMNCnN0cnVjdCBfU1RMX211dGV4X2xvY2sNCnsN
 Cg0KDQoNCg0KDQoNCg0KICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOw0K
 ICB2b2lkIF9NX2luaXRpYWxpemUoKSB7DQojIDM0MiAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0K
 ICB9DQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgew0KDQoNCg0KICAgIF9f
 Z3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsNCiAgfQ0KICB2b2lkIF9N
 X3JlbGVhc2VfbG9jaygpIHsNCg0KDQoNCiAgICBfX2d0aHJlYWRfbXV0ZXhf
 dW5sb2NrKCZfTV9sb2NrKTsNCiAgfQ0KIyA0NTMgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCn07
 DQojIDQ5MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RsX3RocmVhZHMuaCIgMw0Kc3RydWN0IF9TVExfYXV0b19sb2NrDQp7
 DQogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsNCg0KICBfU1RMX2F1dG9f
 bG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9j
 aykNCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0NCiAgfl9T
 VExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9
 DQoNCnByaXZhdGU6DQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0
 b19sb2NrJik7DQogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s
 b2NrJik7DQp9Ow0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQojIDY4ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
 aCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KdGVtcGxhdGUgPGludCBf
 X2luc3Q+DQpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZSB7DQoNCnBy
 aXZhdGU6DQoNCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90
 KTsNCiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXpl
 X3QpOw0KICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFu
 ZGxlcikoKTsNCg0KcHVibGljOg0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0
 ZShzaXplX3QgX19uKQ0KICB7DQogICAgdm9pZCogX19yZXN1bHQgPSBtYWxs
 b2MoX19uKTsNCiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBf
 U19vb21fbWFsbG9jKF9fbik7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9
 DQoNCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
 dCApDQogIHsNCiAgICBmcmVlKF9fcCk7DQogIH0NCg0KICBzdGF0aWMgdm9p
 ZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25l
 d19zeikNCiAgew0KICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As
 IF9fbmV3X3N6KTsNCiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQg
 PSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsNCiAgICByZXR1cm4g
 X19yZXN1bHQ7DQogIH0NCg0KICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs
 b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQ0KICB7DQogICAgdm9pZCAo
 KiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAg
 IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOw0KICAgIHJldHVy
 bihfX29sZCk7DQogIH0NCg0KfTsNCg0KDQoNCnRlbXBsYXRlIDxpbnQgX19p
 bnN0Pg0Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
 OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7DQoNCnRlbXBs
 YXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCoNCl9fbWFsbG9jX2FsbG9jX3RlbXBs
 YXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikNCnsNCiAg
 ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgdm9pZCog
 X19yZXN1bHQ7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICAgIF9fbXlfbWFs
 bG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAg
 ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9f
 dGhyb3dfYmFkX2FsbG9jKCk7IH0NCiAgICAgICAgKCpfX215X21hbGxvY19o
 YW5kbGVyKSgpOw0KICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOw0K
 ICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAg
 fQ0KfQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnZvaWQqIF9fbWFsbG9j
 X2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQq
 IF9fcCwgc2l6ZV90IF9fbikNCnsNCiAgICB2b2lkICgqIF9fbXlfbWFsbG9j
 X2hhbmRsZXIpKCk7DQogICAgdm9pZCogX19yZXN1bHQ7DQoNCiAgICBmb3Ig
 KDs7KSB7DQogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv
 Y19hbGxvY19vb21faGFuZGxlcjsNCiAgICAgICAgaWYgKDAgPT0gX19teV9t
 YWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0N
 CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgICBf
 X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOw0KICAgICAgICBpZiAoX19y
 ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAgfQ0KfQ0KDQp0eXBlZGVm
 IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsNCg0K
 dGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpjbGFzcyBzaW1w
 bGVfYWxsb2Mgew0KDQpwdWJsaWM6DQogICAgc3RhdGljIF9UcCogYWxsb2Nh
 dGUoc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6
 IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7
 IH0NCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQ0KICAgICAgeyBy
 ZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsg
 fQ0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVf
 dCBfX24pDQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9j
 YXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQ0KICAgIHN0YXRpYyB2
 b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApDQogICAgICB7IF9BbGxvYzo6ZGVh
 bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0NCn07DQoNCg0KDQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgZGVidWdfYWxsb2Mg
 ew0KDQpwcml2YXRlOg0KDQogIGVudW0ge19TX2V4dHJhID0gOH07DQoNCg0K
 DQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf
 X24pDQogIHsNCiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6
 OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICAqKHNpemVf
 dCopX19yZXN1bHQgPSBfX247DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGlu
 dCkgX1NfZXh0cmE7DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl
 KHZvaWQqIF9fcCwgc2l6ZV90IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVh
 bF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOw0KICAgICh2b2lk
 KSgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgfHwgKF9fYXNzZXJ0KCIq
 KHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMTkwKSwgMCkp
 Ow0KICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGlu
 dCkgX1NfZXh0cmEpOw0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh
 dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z
 eikNCiAgew0KICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChp
 bnQpIF9TX2V4dHJhOw0KICAgICh2b2lkKSgoKihzaXplX3QqKV9fcmVhbF9w
 ID09IF9fb2xkX3N6KSB8fCAoX19hc3NlcnQoIiooc2l6ZV90KilfX3JlYWxf
 cCA9PSBfX29sZF9zeiIsICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDE5NyksIDApKTsNCiAgICBjaGFy
 KiBfX3Jlc3VsdCA9IChjaGFyKikNCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0
 ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50
 KSBfU19leHRyYSk7DQogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdf
 c3o7DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7DQog
 IH0NCg0KfTsNCiMgMjQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGJvb2wgdGhy
 ZWFkcywgaW50IGluc3Q+DQpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
 dGUgew0KDQpwcml2YXRlOg0KDQoNCiAgZW51bSB7X0FMSUdOID0gOH07DQog
 IGVudW0ge19NQVhfQllURVMgPSAxMjh9Ow0KICBlbnVtIHtfTkZSRUVMSVNU
 UyA9IDE2fTsNCiAgc3RhdGljIHNpemVfdA0KICBfU19yb3VuZF91cChzaXpl
 X3QgX19ieXRlcykNCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXpl
 X3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9DQoN
 CiAgdW5pb24gX09iaiB7DQogICAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVf
 bGlzdF9saW5rOw0KICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOw0K
 ICB9Ow0KDQogIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3Rb
 XTsNCg0KICBzdGF0aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf
 dCBfX2J5dGVzKSB7DQogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIChz
 aXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7DQogIH0NCg0K
 DQogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7DQoNCg0K
 ICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwg
 aW50JiBfX25vYmpzKTsNCg0KDQogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9m
 cmVlOw0KICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7DQogIHN0YXRpYyBz
 aXplX3QgX1NfaGVhcF9zaXplOw0KDQoNCiAgICBzdGF0aWMgX1NUTF9tdXRl
 eF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7DQoNCg0KDQoNCg0KICAg
 IGNsYXNzIF9Mb2NrOw0KICAgIGZyaWVuZCBjbGFzcyBfTG9jazsNCiAgICBj
 bGFzcyBfTG9jayB7DQogICAgICAgIHB1YmxpYzoNCiAgICAgICAgICAgIF9M
 b2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2Nr
 Ll9NX2FjcXVpcmVfbG9jaygpOyB9OyB9DQogICAgICAgICAgICB+X0xvY2so
 KSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01f
 cmVsZWFzZV9sb2NrKCk7IH07IH0NCiAgICB9Ow0KDQpwdWJsaWM6DQoNCg0K
 ICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgew0KICAg
 IHZvaWQqIF9fcmV0ID0gMDsNCg0KICAgIGlmIChfX24gPiAoc2l6ZV90KSBf
 TUFYX0JZVEVTKSB7DQogICAgICBfX3JldCA9IG1hbGxvY19hbGxvYzo6YWxs
 b2NhdGUoX19uKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBfT2JqKiB2
 b2xhdGlsZSogX19teV9mcmVlX2xpc3QNCiAgICAgICAgICA9IF9TX2ZyZWVf
 bGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7DQoNCg0KDQoNCg0KICAg
 ICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOw0KDQogICAgICBfT2JqKiBfX3Jl
 c3VsdCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgIGlmIChfX3Jlc3VsdCA9
 PSAwKQ0KICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChf
 X24pKTsNCiAgICAgIGVsc2Ugew0KICAgICAgICAqX19teV9mcmVlX2xpc3Qg
 PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAgICAgICAgX19y
 ZXQgPSBfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4g
 X19yZXQ7DQogIH07DQoNCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
 aWQqIF9fcCwgc2l6ZV90IF9fbikNCiAgew0KICAgIGlmIChfX24gPiAoc2l6
 ZV90KSBfTUFYX0JZVEVTKQ0KICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9j
 YXRlKF9fcCwgX19uKTsNCiAgICBlbHNlIHsNCiAgICAgIF9PYmoqIHZvbGF0
 aWxlKiBfX215X2ZyZWVfbGlzdA0KICAgICAgICAgID0gX1NfZnJlZV9saXN0
 ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsNCiAgICAgIF9PYmoqIF9fcSA9
 IChfT2JqKilfX3A7DQoNCg0KDQoNCiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0
 YW5jZTsNCg0KICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9f
 bXlfZnJlZV9saXN0Ow0KICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOw0K
 DQogICAgfQ0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p
 ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQoN
 Cn0gOw0KDQp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVl
 LCAwPiBhbGxvYzsNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
 PGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOw0KDQp0ZW1wbGF0ZSA8
 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVy
 YXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
 ZHMsIF9faW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
 X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikN
 CnsNCiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxib29sIF9fdGhy
 ZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
 c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
 PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h
 bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQ0Kew0KICByZXR1
 cm4gZmFsc2U7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxib29sIF9f
 dGhyZWFkcywgaW50IF9faW5zdD4NCmNoYXIqDQpfX2RlZmF1bHRfYWxsb2Nf
 dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhz
 aXplX3QgX19zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQ0K
 ew0KICAgIGNoYXIqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX3RvdGFsX2J5
 dGVzID0gX19zaXplICogX19ub2JqczsNCiAgICBzaXplX3QgX19ieXRlc19s
 ZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOw0KDQogICAgaWYg
 KF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7DQogICAgICAgIF9f
 cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJl
 ZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQp
 Ow0KICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgew0K
 ICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7
 DQogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0K
 ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7DQogICAgICAgIF9T
 X3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsNCiAgICAgICAgcmV0dXJu
 KF9fcmVzdWx0KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBzaXplX3QgX19i
 eXRlc190b19nZXQgPQ0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsg
 X1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOw0KDQogICAgICAgIGlm
 IChfX2J5dGVzX2xlZnQgPiAwKSB7DQogICAgICAgICAgICBfT2JqKiB2b2xh
 dGlsZSogX19teV9mcmVlX2xpc3QgPQ0KICAgICAgICAgICAgICAgICAgICAg
 ICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19s
 ZWZ0KTsNCg0KICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAt
 PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAg
 ICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVl
 Ow0KICAgICAgICB9DQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciop
 bWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsNCiAgICAgICAgaWYgKDAgPT0gX1Nf
 c3RhcnRfZnJlZSkgew0KICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAg
 ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsNCiAgICAg
 ICAgICAgIF9PYmoqIF9fcDsNCg0KDQoNCiAgICAgICAgICAgIGZvciAoX19p
 ID0gX19zaXplOw0KICAgICAgICAgICAgICAgICBfX2kgPD0gKHNpemVfdCkg
 X01BWF9CWVRFUzsNCiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3Qp
 IF9BTElHTikgew0KICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0g
 X1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsNCiAgICAg
 ICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAgICAg
 ICAgICAgaWYgKDAgIT0gX19wKSB7DQogICAgICAgICAgICAgICAgICAgICpf
 X215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAg
 ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7
 DQogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRf
 ZnJlZSArIF9faTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2No
 dW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KDQoNCiAgICAgICAgICAg
 ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBfU19lbmRfZnJl
 ZSA9IDA7DQogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1h
 bGxvY19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOw0KDQoNCg0K
 ICAgICAgICB9DQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3Rv
 X2dldDsNCiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsg
 X19ieXRlc190b19nZXQ7DQogICAgICAgIHJldHVybihfU19jaHVua19hbGxv
 YyhfX3NpemUsIF9fbm9ianMpKTsNCiAgICB9DQp9DQoNCg0KDQoNCg0KdGVt
 cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kdm9pZCoNCl9f
 ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T
 X3JlZmlsbChzaXplX3QgX19uKQ0Kew0KICAgIGludCBfX25vYmpzID0gMjA7
 DQogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19u
 b2Jqcyk7DQogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0K
 ICAgIF9PYmoqIF9fcmVzdWx0Ow0KICAgIF9PYmoqIF9fY3VycmVudF9vYmo7
 DQogICAgX09iaiogX19uZXh0X29iajsNCiAgICBpbnQgX19pOw0KDQogICAg
 aWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOw0KICAgIF9fbXlf
 ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo
 X19uKTsNCg0KDQogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOw0K
 ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKiko
 X19jaHVuayArIF9fbik7DQogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKysp
 IHsNCiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7DQogICAg
 ICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsg
 X19uKTsNCiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgew0KICAg
 ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9
 IDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfSBlbHNlIHsNCiAg
 ICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsg
 PSBfX25leHRfb2JqOw0KICAgICAgICB9DQogICAgICB9DQogICAgcmV0dXJu
 KF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50
 IGluc3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh
 ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
 X3QgX19vbGRfc3osDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQ0Kew0KICAg
 IHZvaWQqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX2NvcHlfc3o7DQoNCiAg
 ICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3
 X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgew0KICAgICAgICByZXR1cm4o
 cmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7DQogICAgfQ0KICAgIGlmIChfU19y
 b3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSBy
 ZXR1cm4oX19wKTsNCiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6
 KTsNCiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29s
 ZF9zeiA6IF9fbmV3X3N6Ow0KICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBf
 X2NvcHlfc3opOw0KICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7DQog
 ICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KDQogICAgdGVtcGxhdGUgPGJv
 b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICAgIF9TVExfbXV0ZXhfbG9j
 aw0KICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
 aW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sNCiAgICAgICAgPSB7IHt7
 ezB9LCAwfSwge3t7MH19fSwgezB9fSB9Ow0KDQoNCg0KdGVtcGxhdGUgPGJv
 b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhciogX19kZWZhdWx0X2Fs
 bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl
 ZSA9IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
 dD4NCmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
 IF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wg
 X190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kc2l6ZV90IF9fZGVmYXVsdF9hbGxv
 Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9
 IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4N
 CnR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
 IF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlDQpfX2RlZmF1bHRfYWxsb2NfdGVt
 cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0Ww0KICAg
 IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
 Ol9ORlJFRUxJU1RTDQpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
 IDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07DQojIDUyNiAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRl
 bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBhbGxvY2F0b3Igew0KICB0eXBl
 ZGVmIGFsbG9jIF9BbGxvYzsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXplX3Qg
 c2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5
 cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0
 IF9UcCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j
 ZTsNCiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAg
 dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
 X1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8
 X1RwMT4gb3RoZXI7DQogIH07DQoNCiAgYWxsb2NhdG9yKCkgdGhyb3coKSB7
 fQ0KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQ0K
 ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9j
 YXRvcjxfVHAxPiYpIHRocm93KCkge30NCiAgfmFsbG9jYXRvcigpIHRocm93
 KCkge30NCg0KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u
 c3QgeyByZXR1cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3Mo
 Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0K
 DQoNCg0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZv
 aWQqID0gMCkgew0KICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0
 PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQ0K
 ICAgICAgICAgICAgICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVh
 bGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9B
 bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQ0K
 DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkNCiAgICB7
 IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0NCg0KICB2b2lk
 IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBu
 ZXcoX19wKSBfVHAoX192YWwpOyB9DQogIHZvaWQgZGVzdHJveShwb2ludGVy
 IF9fcCkgeyBfX3AtPn5fVHAoKTsgfQ0KfTsNCg0KdGVtcGxhdGU8Pg0KY2xh
 c3MgYWxsb2NhdG9yPHZvaWQ+IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXpl
 X3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
 X3R5cGU7DQogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBj
 b25zdCB2b2lkKiBjb25zdF9wb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgdmFs
 dWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
 YmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7DQog
 IH07DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4N
 CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
 LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJldHVybiB0cnVlOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUg
 Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg
 YWxsb2NhdG9yPF9UMj4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQojIDYw
 MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
 X2FsbG9jLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
 Yz4NCnN0cnVjdCBfX2FsbG9jYXRvciB7DQogIF9BbGxvYyBfX3VuZGVybHlp
 bmdfYWxsb2M7DQoNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0
 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
 X1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9p
 bnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBj
 b25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgdmFs
 dWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
 YmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+
 IG90aGVyOw0KICB9Ow0KDQogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQ0K
 ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygp
 DQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h
 bGxvYykge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIF9fYWxsb2Nh
 dG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhy
 b3coKQ0KICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlp
 bmdfYWxsb2MpIHt9DQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30NCg0K
 ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
 cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVm
 ZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0KDQoNCiAgX1Rw
 KiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsN
 CiAgICByZXR1cm4gX19uICE9IDANCiAgICAgICAgPyBzdGF0aWNfY2FzdDxf
 VHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9m
 KF9UcCkpKQ0KICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVhbGxv
 Y2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9fdW5k
 ZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U
 cCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3co
 KQ0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0K
 DQogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f
 dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95
 KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0Fs
 bG9jPiB7DQogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsNCiAgdHlwZWRl
 ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQq
 IHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRl
 cjsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQoNCiAgdGVtcGxhdGUg
 PGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgX19h
 bGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCn07DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s
 IG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf
 X2ExLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRv
 cjxfVHAsIF9BbGxvYz4mIF9fYTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5k
 ZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5l
 IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
 Yz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
 b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEu
 X191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j
 Ow0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlubGluZSBi
 b29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
 aW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxv
 Y19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpDQp7DQogIHJldHVybiB0cnVlOw0K
 fQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJh
 dG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYs
 DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j
 X3RlbXBsYXRlPF9faW5zdD4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRv
 cj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLA0KICAgICAgICAgICAg
 ICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+Jikgew0KICBy
 ZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlu
 bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9j
 PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9j
 PF9BbGxvYz4mKSB7DQogIHJldHVybiBmYWxzZTsNCn0NCiMgNzMyICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
 aCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4N
 CnN0cnVjdCBfQWxsb2NfdHJhaXRzDQp7DQogIHN0YXRpYyBjb25zdCBib29s
 IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOw0KICB0eXBlZGVmIHR5cGVuYW1l
 IF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxv
 Y2F0b3JfdHlwZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
 IF9BbGxvY2F0b3I+DQpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBf
 QWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOw0KDQoNCg0KdGVtcGxhdGUg
 PGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCnN0cnVjdCBfQWxsb2NfdHJhaXRz
 PF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJv
 b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVf
 YWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgYWxs
 b2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxh
 dGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJh
 aXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+DQp7
 DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
 DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2Nf
 dGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9f
 YWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
 PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxs
 b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
 ZWFkcywgX19pbnN0PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
 c3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9U
 cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
 PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxv
 Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
 LCBfX2luc3Q+ID4NCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCn07DQoN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0Kc3RydWN0
 IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4NCnsN
 CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsN
 CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxs
 b2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
 LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0K
 DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQg
 X19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLA0KICAgICAgICAg
 ICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2Nf
 dGVtcGxhdGU8X19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wg
 X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxs
 b2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0Fs
 bG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxv
 Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9
 Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wg
 X190aHIsIGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
 DQogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxs
 b2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+DQp7DQogIHN0YXRpYyBj
 b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYg
 c2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
 dGhyLF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICB0eXBl
 ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
 PF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0K
 fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFz
 cyBfQWxsb2M+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2Nh
 dG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+DQp7DQogIHN0YXRp
 YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVk
 ZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
 bGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdf
 YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KfQ0KIyAy
 MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMNCiMgMzQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25z
 dHJ1Y3QuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvbmV3IiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMiAzDQoNCm5hbWVz
 cGFjZSBzdGQNCnsNCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMw0KdGVtcGxhdGUgPGNs
 YXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChf
 VDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7DQpuZXcgKCh2b2lkKikg
 X19wKSBfVDEoX192YWx1ZSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDE+
 DQppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7DQogIG5ldyAo
 KHZvaWQqKSBfX3ApIF9UMSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
 Pg0KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsNCiAg
 X19wb2ludGVyLT5+X1RwKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9y
 d2FyZEl0ZXJhdG9yPg0Kdm9pZA0KX19kZXN0cm95X2F1eChfRm9yd2FyZEl0
 ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2Zh
 bHNlX3R5cGUpDQp7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
 X19maXJzdCkNCiAgICBkZXN0cm95KCYqX19maXJzdCk7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KaW5saW5lIHZvaWQgX19k
 ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9y
 LCBfX3RydWVfdHlwZSkge30NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
 SXRlcmF0b3IsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX2Rlc3Ryb3ko
 X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
 bGFzdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
 aXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3INCiAgICAgICAgICBf
 VHJpdmlhbF9kZXN0cnVjdG9yOw0KICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3Qs
 IF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBfRGVz
 dHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
 b3IgX19sYXN0KSB7DQogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9f
 dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCmlubGluZSB2b2lkIF9EZXN0
 cm95KGNoYXIqLCBjaGFyKikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGlu
 dCosIGludCopIHt9DQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9u
 ZyopIHt9DQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikg
 e30NCmlubGluZSB2b2lkIF9EZXN0cm95KGRvdWJsZSosIGRvdWJsZSopIHt9
 DQppbmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9
 DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlu
 bGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3Zh
 bHVlKSB7DQogIF9Db25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9UMT4NCmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEq
 IF9fcCkgew0KICBfQ29uc3RydWN0KF9fcCk7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfVHA+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVy
 KSB7DQogIF9EZXN0cm95KF9fcG9pbnRlcik7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KaW5saW5lIHZvaWQgZGVzdHJveShf
 Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
 YXN0KSB7DQogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7DQp9DQoNCn0N
 CiMgMjMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9tZW1vcnkuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
 IDEgMw0KIyAyNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzDQoj
 IDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfdGVtcGJ1Zi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfVHA+DQpwYWlyPF9UcCosIHB0cmRpZmZfdD4NCl9fZ2V0X3Rl
 bXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQ0Kew0KICBp
 ZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp
 KSkNCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsNCg0K
 ICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX1RwKiBfX3RtcCA9IChfVHAq
 KSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsNCiAgICBp
 ZiAoX190bXAgIT0gMCkNCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRp
 ZmZfdD4oX190bXAsIF9fbGVuKTsNCiAgICBfX2xlbiAvPSAyOw0KICB9DQoN
 CiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBwYWlyPF9UcCos
 IHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9f
 bGVuKSB7DQogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVu
 LCAoX1RwKikgMCk7DQp9DQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X1RwPg0KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9y
 YXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsNCiAgcmV0dXJu
 IF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnZvaWQgcmV0dXJuX3RlbXBvcmFy
 eV9idWZmZXIoX1RwKiBfX3ApIHsNCiAgZnJlZShfX3ApOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KY2xh
 c3MgX1RlbXBvcmFyeV9idWZmZXIgew0KcHJpdmF0ZToNCiAgcHRyZGlmZl90
 IF9NX29yaWdpbmFsX2xlbjsNCiAgcHRyZGlmZl90IF9NX2xlbjsNCiAgX1Rw
 KiBfTV9idWZmZXI7DQoNCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7
 DQogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOw0KICAgIF9NX2J1ZmZl
 ciA9IDA7DQoNCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4
 MzY0NyAvIHNpemVvZihfVHApKSkNCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2
 NDcgLyBzaXplb2YoX1RwKTsNCg0KICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7
 DQogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNp
 emVvZihfVHApKTsNCiAgICAgIGlmIChfTV9idWZmZXIpDQogICAgICAgIGJy
 ZWFrOw0KICAgICAgX01fbGVuIC89IDI7DQogICAgfQ0KICB9DQoNCiAgdm9p
 ZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlw
 ZSkge30NCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAm
 IHZhbCwgX19mYWxzZV90eXBlKSB7DQogICAgdW5pbml0aWFsaXplZF9maWxs
 X24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7DQogIH0NCg0KcHVibGljOg0K
 ICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQ0K
 ICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBf
 TV9vcmlnaW5hbF9sZW47IH0NCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9N
 X2J1ZmZlcjsgfQ0KICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciAr
 IF9NX2xlbjsgfQ0KDQogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRl
 cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsNCg0K
 ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNf
 dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yDQogICAgICAgICAgICBfVHJp
 dmlhbDsNCg0KICAgIHRyeSB7DQogICAgICBfTV9sZW4gPSAwOw0KICAgICAg
 ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOw0KICAgICAgX01f
 YWxsb2NhdGVfYnVmZmVyKCk7DQogICAgICBpZiAoX01fbGVuID4gMCkNCiAg
 ICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFs
 KCkpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZmZXIp
 OyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsgfTsNCiAgfQ0K
 DQogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsNCiAgICBkZXN0cm95KF9NX2J1
 ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsNCiAgICBmcmVlKF9NX2J1ZmZl
 cik7DQogIH0NCg0KcHJpdmF0ZToNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihj
 b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9DQogIHZvaWQgb3BlcmF0b3I9
 KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30NCn07DQoNCg0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwNCiAgICAgICAgICBjbGFz
 cyBfVHANCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRv
 cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAgICAg
 ICAgID4NCnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1w
 b3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4NCnsNCiAgdGVt
 cG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
 YXJkSXRlcmF0b3IgX19sYXN0KQ0KICAgIDogX1RlbXBvcmFyeV9idWZmZXI8
 X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9DQog
 IH50ZW1wb3JhcnlfYnVmZmVyKCkge30NCn07DQoNCn0NCiMgMjUgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnku
 aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMw0KIyAzNCAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlh
 bGl6ZWQuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMNCiMgMzUgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxp
 emVkLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4N
 CmlubGluZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1
 eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCnsNCiAg
 cmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
 ZXI+DQpfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChf
 SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpDQp7DQogIF9G
 b3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0Ow0KICB0cnkgew0KICAgIGZv
 ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikN
 CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAgIHJl
 dHVybiBfX2N1cjsNCiAgfQ0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19y
 ZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07DQp9DQoNCg0KdGVtcGxhdGUgPGNs
 YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
 Pg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHko
 X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikN
 CnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omlz
 X1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
 Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgp
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G
 b3J3YXJkSXRlcj4NCmlubGluZSBfRm9yd2FyZEl0ZXINCiAgdW5pbml0aWFs
 aXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
 c3QsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
 bHQpDQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
 LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7DQp9DQoNCmlubGluZSBj
 aGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwg
 Y29uc3QgY2hhciogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0
 LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVz
 dWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQppbmxpbmUgd2NoYXJf
 dCoNCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0
 LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 d2NoYXJfdCogX19yZXN1bHQpDQp7DQogIG1lbW1vdmUoX19yZXN1bHQsIF9f
 Zmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7
 DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCn0N
 Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6
 ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KcGFpcjxfSW5wdXRJdGVyLCBfRm9y
 d2FyZEl0ZXI+DQpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIg
 X19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQogIF9Gb3J3YXJkSXRlciBf
 X2N1ciA9IF9fcmVzdWx0Ow0KICB0cnkgew0KICAgIGZvciAoIDsgX19jb3Vu
 dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikNCiAgICAg
 IF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAgIHJldHVybiBw
 YWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIp
 Ow0KICB9DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19j
 dXIpOyB0aHJvdzsgfTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
 Y2Nlc3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0K
 aW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4N
 Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
 aXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 X0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfUmFuZG9tQWNj
 ZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsNCiAgcmV0dXJu
 IHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4oDQogICAg
 ICAgICAgICAgICAgIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgdW5pbml0
 aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBj
 bGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf
 Rm9yd2FyZEl0ZXI+DQpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0
 ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAg
 ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgew0KICByZXR1cm4gX191bmlu
 aXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
 YXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
 dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5s
 aW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPg0KdW5pbml0aWFs
 aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50
 LA0KICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
 KSB7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3Qs
 IF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0K
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4N
 CmlubGluZSB2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zvcndh
 cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl
 KQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0Kdm9pZA0K
 X191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3
 YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSB7DQogICAgZm9yICgg
 OyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpDQogICAgICBfQ29uc3RydWN0
 KCYqX19jdXIsIF9feCk7DQogIH0NCiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95
 KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCmlu
 bGluZSB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBf
 X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
 cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQ0Kew0K
 ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BP
 RF90eXBlIF9Jc19QT0Q7DQogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf
 X2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsNCg0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUg
 dm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
 IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
 dCBfVHAmIF9feCkNCnsNCiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJz
 dCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
 Cg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6
 ZSwgY2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRp
 YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl
 IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
 X194LCBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0
 LCBfX24sIF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfRm9yd2FyZEl0ZXINCl9f
 dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
 LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
 dCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQ0Kew0KICBfRm9yd2FyZEl0ZXIg
 X19jdXIgPSBfX2ZpcnN0Ow0KICB0cnkgew0KICAgIGZvciAoIDsgX19uID4g
 MDsgLS1fX24sICsrX19jdXIpDQogICAgICBfQ29uc3RydWN0KCYqX19jdXIs
 IF9feCk7DQogICAgcmV0dXJuIF9fY3VyOw0KICB9DQogIGNhdGNoKC4uLikg
 eyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Ow0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
 c3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191
 bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1Np
 emUgX19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopDQp7DQogIHR5cGVkZWYg
 dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lz
 X1BPRDsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f
 Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPg0K
 aW5saW5lIF9Gb3J3YXJkSXRlcg0KdW5pbml0aWFsaXplZF9maWxsX24oX0Zv
 cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gp
 DQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3Qs
 IF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KIyAyMzEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91
 bmluaXRpYWxpemVkLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
 MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlu
 bGluZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHko
 X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
 LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpDQp7DQogIF9Gb3J3YXJkSXRl
 ciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0
 MSwgX19yZXN1bHQpOw0KICB0cnkgew0KICAgIHJldHVybiB1bmluaXRpYWxp
 emVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsNCiAgfQ0KICBj
 YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7
 IH07DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
 IGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4NCmlubGluZSBfRm9yd2Fy
 ZEl0ZXINCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVy
 IF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
 YXN0KQ0Kew0KICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlk
 LCBfX3gpOw0KICB0cnkgew0KICAgIHJldHVybiB1bmluaXRpYWxpemVkX2Nv
 cHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7DQogIH0NCiAgY2F0Y2goLi4u
 KSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Ow0KfQ0K
 DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv
 cndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX191bmluaXRp
 YWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ
 dGVyIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
 YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBf
 Rm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
 c3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7DQogIHRyeSB7DQogICAgdW5pbml0
 aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsNCiAgfQ0KICBj
 YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7IHRocm93
 OyB9Ow0KfQ0KDQp9DQojIDI2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3Jh
 Z2VfaXRlci5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMNCm5h
 bWVzcGFjZSBzdGQNCnsNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
 cmF0b3IsIGNsYXNzIF9UcD4NCmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9y
 IHsNCnByb3RlY3RlZDoNCiAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOw0K
 cHVibGljOg0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0
 b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KICB0
 eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQg
 cG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0KICBleHBs
 aWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9f
 eCkgOiBfTV9pdGVyKF9feCkge30NCiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3Im
 IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIHJhd19zdG9yYWdl
 X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsN
 CiAgICBjb25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOw0KICAgIHJl
 dHVybiAqdGhpczsNCiAgfQ0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9y
 d2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgew0KICAgICsrX01f
 aXRlcjsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmF3X3N0b3JhZ2Vf
 aXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGlu
 dCkgew0KICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0
 b3IsIF9UcD4gX190bXAgPSAqdGhpczsNCiAgICArK19NX2l0ZXI7DQogICAg
 cmV0dXJuIF9fdG1wOw0KICB9DQp9Ow0KDQoNCn0NCiMgMjcgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIg
 MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KIHRlbXBsYXRlPGNsYXNzIF9U
 cDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgew0KICAgX1RwMSogX01fcHRyOw0K
 ICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQ0K
 fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgew0K
 cHJpdmF0ZToNCiAgX1RwKiBfTV9wdHI7DQoNCnB1YmxpYzoNCiAgdHlwZWRl
 ZiBfVHAgZWxlbWVudF90eXBlOw0KDQogIGV4cGxpY2l0IGF1dG9fcHRyKF9U
 cCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9DQogIGF1dG9f
 cHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVh
 c2UoKSkge30NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIo
 YXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQ0KICAgIDogX01fcHRyKF9f
 YS5yZWxlYXNlKCkpIHt9DQoNCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRv
 X3B0ciYgX19hKSB0aHJvdygpIHsNCiAgICByZXNldChfX2EucmVsZWFzZSgp
 KTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
 c3MgX1RwMT4NCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAx
 PiYgX19hKSB0aHJvdygpIHsNCiAgICByZXNldChfX2EucmVsZWFzZSgpKTsN
 CiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KDQoNCg0KDQogIH5hdXRvX3B0
 cigpIHsgZGVsZXRlIF9NX3B0cjsgfQ0KDQogIF9UcCYgb3BlcmF0b3IqKCkg
 Y29uc3QgdGhyb3coKSB7DQogICAgcmV0dXJuICpfTV9wdHI7DQogIH0NCiAg
 X1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7DQogICAgcmV0dXJu
 IF9NX3B0cjsNCiAgfQ0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgew0K
 ICAgIHJldHVybiBfTV9wdHI7DQogIH0NCiAgX1RwKiByZWxlYXNlKCkgdGhy
 b3coKSB7DQogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsNCiAgICBfTV9wdHIg
 PSAwOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICB2b2lkIHJlc2V0KF9U
 cCogX19wID0gMCkgdGhyb3coKSB7DQogICAgaWYgKF9fcCAhPSBfTV9wdHIp
 IHsNCiAgICAgIGRlbGV0ZSBfTV9wdHI7DQogICAgICBfTV9wdHIgPSBfX3A7
 DQogICAgfQ0KICB9DQoNCg0KDQoNCg0KcHVibGljOg0KICBhdXRvX3B0cihh
 dXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKQ0KICAgIDogX01fcHRy
 KF9fcmVmLl9NX3B0cikge30NCg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1
 dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsNCiAgICBpZiAoX19y
 ZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7DQogICAgICBkZWxldGUgX01f
 cHRyOw0KICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOw0KICAgIH0NCiAg
 ICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
 MT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQ0KICAg
 IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7
 IH0NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRy
 PF9UcDE+KCkgdGhyb3coKQ0KICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+
 KHRoaXMtPnJlbGVhc2UoKSk7IH0NCn07DQoNCn0NCiMgNDQgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIg
 MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3R5cGVfdHJhaXRzLmgiIDEgMw0KIyA0NSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMg
 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X2lvc2Z3ZC5oIiAxIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmlu
 Zy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43
 L2JpdHMvYXRvbWljaXR5LmgiIDEgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv
 YXRvbWljaXR5LmgiIDMNCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsNCg0K
 c3RhdGljIGludA0KX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQ0KX19l
 eGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVt
 LCBpbnQgX192YWwpDQp7DQogIHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9j
 azsNCiAgX0F0b21pY193b3JkIF9fcmVzdWx0LCBfX3RtcDsNCg0KICBfX2Fz
 bV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCINCiAg
 ICAgICAgICAgICAgICAgICAgICAgIgljbXAJJTAsIDBcblx0Ig0KICAgICAg
 ICAgICAgICAgICAgICAgICAiCWJuZQkxYlxuXHQiDQogICAgICAgICAgICAg
 ICAgICAgICAgICIJIG5vcCINCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
 PSZyIiAoX190bXApDQogICAgICAgICAgICAgICAgICAgICAgIDogInIiICgm
 X19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsN
 CiAgX19yZXN1bHQgPSAqX19tZW07DQogICpfX21lbSArPSBfX3ZhbDsNCiAg
 X19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIg0KICAgICAg
 ICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgICAgICAgICAgICAgIDog
 InIiICgmX19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
 cnkiKTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQpzdGF0aWMgdm9pZA0K
 X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQ0KX19hdG9taWNfYWRkICh2
 b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpDQp7DQog
 IHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9jazsNCiAgX0F0b21pY193b3Jk
 IF9fdG1wOw0KDQogIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJ
 WyUxXSwgJTBcblx0Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAkl
 MCwgMFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5c
 dCINCiAgICAgICAgICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAg
 ICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAg
 ICAgICAgICAgOiAiciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAg
 ICAgIDogIm1lbW9yeSIpOw0KICAqX19tZW0gKz0gX192YWw7DQogIF9fYXNt
 X18gX192b2xhdGlsZV9fKCJzdGIJJSVnMCwgWyUwXSINCiAgICAgICAgICAg
 ICAgICAgICAgICAgOg0KICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAo
 Jl9fbG9jaykNCiAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7
 DQp9DQoNCnN0YXRpYyBpbnQNCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9f
 KSkNCl9fY29tcGFyZV9hbmRfc3dhcCAodm9sYXRpbGUgbG9uZyAqX19wLCBs
 b25nIF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQ0Kew0KICBzdGF0aWMgdW5z
 aWduZWQgY2hhciBfX2xvY2s7DQogIGxvbmcgX19yZXQsIF9fdG1wOw0KDQog
 IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJWyUxXSwgJTBcblx0
 Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiDQog
 ICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCINCiAgICAgICAg
 ICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAgICAgICAgICAgICAg
 ICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
 ciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y
 eSIpOw0KICBpZiAoKl9fcCAhPSBfX29sZHZhbCkNCiAgICBfX3JldCA9IDA7
 DQogIGVsc2UNCiAgICB7DQogICAgICAqX19wID0gX19uZXd2YWw7DQogICAg
 ICBfX3JldCA9IDE7DQogICAgfQ0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXygi
 c3RiCSUlZzAsIFslMF0iDQogICAgICAgICAgICAgICAgICAgICAgIDoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgOiAiciIgKCZfX2xvY2spDQogICAgICAg
 ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOw0KDQogIHJldHVybiBfX3Jl
 dDsNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0K
 ew0KIyA4MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvYmFzaWNfc3RyaW5nLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg
 Y2xhc3MgYmFzaWNfc3RyaW5nDQogICAgew0KDQogICAgcHVibGljOg0KICAg
 ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOw0KICAgICAgdHlw
 ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7DQog
 ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBl
 IGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
 bG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlwZWRlZiB0eXBl
 bmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2lu
 dGVyOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Bv
 aW50ZXIgY29uc3RfcG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgX19ub3JtYWxf
 aXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsNCiAg
 ICAgIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg
 YmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsNCiAgICAgIHR5cGVkZWYg
 cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz
 ZV9pdGVyYXRvcjsNCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxp
 dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KICAgIHByaXZhdGU6DQoj
 IDExOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 YmFzaWNfc3RyaW5nLmgiIDMNCiAgICAgIHN0cnVjdCBfUmVwDQogICAgICB7
 DQoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlYmluZDxj
 aGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsNCiMgMTM2ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcu
 aCIgMw0KICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9z
 aXplOw0KICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFs
 Ow0KDQogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7DQogICAgICAgIHNp
 emVfdHlwZSBfTV9jYXBhY2l0eTsNCiAgICAgICAgX0F0b21pY193b3JkIF9N
 X3JlZmVyZW5jZXM7DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19s
 ZWFrZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz
 IDwgMDsgfQ0KDQogICAgICAgIGJvb2wNCiAgICAgICAgX01faXNfc2hhcmVk
 KCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7
 IH0NCg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX3NldF9sZWFrZWQoKQ0K
 ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQ0KDQogICAgICAgIHZv
 aWQNCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkNCiAgICAgICAgeyBfTV9y
 ZWZlcmVuY2VzID0gMDsgfQ0KDQogICAgICAgIF9DaGFyVCoNCiAgICAgICAg
 X01fcmVmZGF0YSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gcmVpbnRl
 cnByZXRfY2FzdDxfQ2hhclQqPiAodGhpcyArIDEpOyB9DQoNCiAgICAgICAg
 X0NoYXJUJg0KICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93
 KCkNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9DQoN
 CiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxv
 YyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpDQogICAgICAg
 IHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19h
 bGxvYzIpID8NCiAgICAgICAgICAgIF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25l
 KF9fYWxsb2MxKTsgfQ0KDQoNCiAgICAgICAgc3RhdGljIF9SZXAqDQogICAg
 ICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOw0KDQogICAg
 ICAgIHZvaWQNCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9f
 YSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9h
 ZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQ0KICAgICAgICAgICAgX01f
 ZGVzdHJveShfX2EpOw0KICAgICAgICB9DQoNCiAgICAgICAgdm9pZA0KICAg
 ICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7DQoNCiAg
 ICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQ0K
 ICAgICAgICB7DQogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVu
 Y2VzLCAxKTsNCiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOw0KICAg
 ICAgICB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9jbG9uZShj
 b25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsNCiMgMjA4ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z
 dHJpbmcuaCIgMw0KICAgICAgICBpbmxpbmUgc3RhdGljIGJvb2wNCiAgICAg
 ICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBzaXplX3QpOw0KDQogICAgICB9
 Ow0KDQoNCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MNCiAg
 ICAgIHsNCiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNv
 bnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9w
 KF9fZGF0KSB7IH0NCg0KICAgICAgICBfQ2hhclQqIF9NX3A7DQogICAgICB9
 Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IHNp
 emVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7DQoN
 CiAgICBwcml2YXRlOg0KDQogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBf
 TV9kYXRhcGx1czsNCg0KDQoNCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1Nf
 ZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hh
 clQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBl
 KV07DQoNCiAgICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoKSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQ0KDQogICAgICBf
 Q2hhclQqDQogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQ0KICAgICAgeyBy
 ZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9DQoNCiAgICAgIF9S
 ZXAqDQogICAgICBfTV9yZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4gJigo
 cmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0N
 Cg0KDQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pYmVnaW4oKSBjb25z
 dCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9DQoNCiAgICAgIGl0
 ZXJhdG9yDQogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
 b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQogICAgICB2b2lk
 DQogICAgICBfTV9sZWFrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9y
 ZXAoKS0+X01faXNfbGVha2VkKCkpDQogICAgICAgICAgX01fbGVha19oYXJk
 KCk7DQogICAgICB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9jaGVj
 ayhzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgICB7DQogICAgICAgIGlm
 IChfX3BvcyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93X291
 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOw0KICAgICAg
 ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0NCg0KDQog
 ICAgICBpdGVyYXRvcg0KICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3Ms
 IHNpemVfdHlwZSBfX29mZikgY29uc3QNCiAgICAgIHsNCiAgICAgICAgYm9v
 bCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0K
 ICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29m
 ZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0KICAgICAgICByZXR1cm4gKF9N
 X2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7DQogICAgICB9DQoNCg0K
 DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+DQogICAgICAgIHN0
 YXRpYyB2b2lkDQogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As
 IF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikNCiAgICAgICAgew0K
 ICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3Ap
 DQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sx
 KTsNCiAgICAgICAgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1Nf
 Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0
 b3IgX19rMikNCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFz
 ZSgpLCBfX2syLmJhc2UoKSk7IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAg
 ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9y
 IF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpDQogICAgICB7IF9TX2NvcHlf
 Y2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9DQoNCiAg
 ICAgIHN0YXRpYyB2b2lkDQogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog
 X19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikNCiAgICAgIHsgdHJh
 aXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0NCg0K
 ICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU
 KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2sy
 KQ0KICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIg
 LSBfX2sxKTsgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9tdXRhdGUoc2l6
 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19s
 ZW4yKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fbGVha19oYXJkKCk7DQoN
 CiAgICAgIHN0YXRpYyBfUmVwJg0KICAgICAgX1NfZW1wdHlfcmVwKCkNCiAg
 ICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1w
 dHlfcmVwX3N0b3JhZ2UpOyB9DQoNCiAgICBwdWJsaWM6DQoNCg0KDQoNCiAg
 ICAgIGlubGluZQ0KICAgICAgYmFzaWNfc3RyaW5nKCk7DQoNCiAgICAgIGV4
 cGxpY2l0DQogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2Ep
 Ow0KDQoNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm
 IF9fc3RyKTsNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
 bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsDQogICAgICAgICAgICAgICAg
 ICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOw0KICAgICAgYmFzaWNfc3RyaW5n
 KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywN
 CiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs
 b2MmIF9fYSk7DQoNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
 IF9fcywgc2l6ZV90eXBlIF9fbiwNCiAgICAgICAgICAgICAgICAgICBjb25z
 dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmlu
 Zyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs
 b2MoKSk7DQogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0No
 YXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7DQoNCiAg
 ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBi
 YXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRl
 cmF0b3IgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxs
 b2MmIF9fYSA9IF9BbGxvYygpKTsNCg0KICAgICAgfmJhc2ljX3N0cmluZygp
 DQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxv
 Y2F0b3IoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgb3Bl
 cmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRo
 aXMtPmFzc2lnbihfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K
 ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0
 aGlzLT5hc3NpZ24oX19zKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQog
 ICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNz
 aWduKDEsIF9fYyk7IH0NCg0KDQogICAgICBpdGVyYXRvcg0KICAgICAgYmVn
 aW4oKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJl
 dHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAgICBj
 b25zdF9pdGVyYXRvcg0KICAgICAgYmVnaW4oKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQ0KDQogICAgICBp
 dGVyYXRvcg0KICAgICAgZW5kKCkNCiAgICAgIHsNCiAgICAgICAgIF9NX2xl
 YWsoKTsNCiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0
 aGlzLT5zaXplKCkpOw0KICAgICAgfQ0KDQogICAgICBjb25zdF9pdGVyYXRv
 cg0KICAgICAgZW5kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0
 ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0NCg0KICAgICAg
 cmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkNCiAgICAgIHsgcmV0
 dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAg
 IGNvbnN0X3JldmVyc2VfaXRlcmF0b3INCiAgICAgIHJiZWdpbigpIGNvbnN0
 DQogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMt
 PmVuZCgpKTsgfQ0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBy
 ZW5kKCkNCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+
 YmVnaW4oKSk7IH0NCg0KICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0K
 ICAgICAgcmVuZCgpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9yZXZl
 cnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9DQoNCiAgICBwdWJsaWM6
 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0
 dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBl
 DQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f
 bGVuZ3RoOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgbWF4X3NpemUo
 KSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQ0KDQogICAg
 ICB2b2lkDQogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
 Yyk7DQoNCiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19u
 KSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQ0KDQogICAgICBz
 aXplX3R5cGUNCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01f
 cmVwKCktPl9NX2NhcGFjaXR5OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHJl
 c2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOw0KDQogICAgICB2b2lk
 DQogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwg
 MCk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgZW1wdHkoKSBjb25zdCB7IHJl
 dHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQ0KDQoNCiAgICAgIGNvbnN0X3Jl
 ZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQ0KDQog
 ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
 cG9zKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJl
 dHVybiBfTV9kYXRhKClbX19wb3NdOw0KICAgICAgfQ0KDQogICAgICBjb25z
 dF9yZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0DQog
 ICAgICB7DQogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAg
 ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0
 Iik7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsNCiAgICAgIH0N
 Cg0KICAgICAgcmVmZXJlbmNlDQogICAgICBhdChzaXplX3R5cGUgX19uKQ0K
 ICAgICAgew0KICAgICAgICBpZiAoX19uID49IHNpemUoKSkNCiAgICAgICAg
 ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOw0K
 ICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClb
 X19uXTsNCiAgICAgIH0NCg0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
 ICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0
 dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3Ry
 aW5nJg0KICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyBy
 ZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0NCg0KICAgICAgYmFzaWNfc3Ry
 aW5nJg0KICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0
 aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9DQoNCiAgICAgIGJh
 c2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcm
 IF9fc3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5k
 KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywg
 c2l6ZV90eXBlIF9fbik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg
 IGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7DQoN
 CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBfQ2hh
 clQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRy
 YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3Ry
 aW5nJg0KICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Mp
 Ow0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAg
 ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBhcHBlbmQoX0lucHV0SXRl
 cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAg
 ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp
 LCBfX2ZpcnN0LCBfX2xhc3QpOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHB1
 c2hfYmFjayhfQ2hhclQgX19jKQ0KICAgICAgeyB0aGlzLT5yZXBsYWNlKF9N
 X2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9DQoNCiAgICAgIGJhc2lj
 X3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f
 c3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNv
 bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6
 ZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmFz
 c2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19w
 b3MsIF9fbikpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQog
 ICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p
 DQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyBfX24p
 OyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25z
 dCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihf
 X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAg
 ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24s
 IF9DaGFyVCBfX2MpDQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
 X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQ0KDQogICAgICB0
 ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNf
 c3RyaW5nJg0KICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz
 dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAgICB7IHJldHVybiB0
 aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3Qs
 IF9fbGFzdCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgaW5zZXJ0KGl0ZXJh
 dG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsg
 dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9DQoNCiAgICAg
 IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICB2b2lk
 IGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBf
 SW5wdXRJdGVyYXRvciBfX2VuZCkNCiAgICAgICAgeyB0aGlzLT5yZXBsYWNl
 KF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9DQoNCiAgICAgIGJhc2ljX3N0
 cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi
 YXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgICAgew0KICAgICAgICBpdGVyYXRv
 ciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOw0KICAgICAgICB0aGlzLT5yZXBs
 YWNlKF9fcCwgX19wLCBfX3N0ci5fTV9pYmVnaW4oKSwgX19zdHIuX01faWVu
 ZCgpKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAg
 ICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9z
 MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgICBz
 aXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAg
 ICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOw0KICAgICAg
 ICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9jaGVjayhfX3Bv
 czIpLA0KICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19w
 b3MyLCBfX24pKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K
 DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBl
 IF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikNCiAg
 ICAgIHsNCiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3Mp
 Ow0KICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3MsIF9fcyAr
 IF9fbik7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAg
 ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bv
 cywgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVybiB0aGlzLT5p
 bnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg
 fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90
 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgICAg
 ew0KICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24s
 IF9fYyk7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAg
 ICAgaXRlcmF0b3INCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFy
 VCBfX2MgPSBfQ2hhclQoKSkNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBl
 IF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPmlu
 c2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsNCiAg
 ICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0
 dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7DQogICAgICB9DQoNCiAg
 ICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3Bv
 cyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQ0KICAgICAgew0KICAgICAg
 ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv
 bGQoX19wb3MsIF9fbiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAgIH0NCg0KICAgICAgaXRl
 cmF0b3INCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pDQogICAg
 ICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01f
 aWJlZ2luKCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwg
 X19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAg
 ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0dXJu
 IF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBpdGVyYXRv
 cg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
 YXN0KQ0KICAgICAgew0KICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJz
 dCAtIF9NX2liZWdpbigpOw0KICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmly
 c3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0KICAgICAgICBf
 TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgIHJldHVybiBfTV9p
 YmVnaW4oKSArIF9faTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5n
 Jg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
 X24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7DQogICAg
 ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f
 Zm9sZChfX3BvcywgX19uKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsNCiAgICAgIH0NCg0K
 ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUg
 X19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
 X3N0ciwNCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90
 eXBlIF9fbjIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBs
 YWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D
 aGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikNCiAg
 ICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2so
 X19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsNCiAgICAgIH0NCg0K
 ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUg
 X19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykNCiAg
 ICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2so
 X19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3Ro
 KF9fcykpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
 ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNp
 emVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAgICAgew0KICAgICAgICBy
 ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo
 X19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOw0KICAgICAgfQ0KDQogICAgICBi
 YXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
 ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAg
 ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLmJl
 Z2luKCksIF9fc3RyLmVuZCgpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcm
 DQogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
 cywgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
 Y2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9DQoNCiAgICAgIGJh
 c2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
 cmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVy
 biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChf
 X3MpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNl
 KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24s
 IF9DaGFyVCBfX2MpOw0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ
 dGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICByZXBs
 YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsDQogICAgICAgICAg
 ICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19r
 MikNCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBf
 X2sxLCBfX2syLA0KICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
 YWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9
 DQoNCiAgICBwcml2YXRlOg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
 SXRlcmF0b3I+DQogICAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgICAgX01f
 cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJ
 dGVyYXRvciBfX2sxLA0KICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
 dG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7DQoNCiAgICAgIHRlbXBs
 YXRlPGNsYXNzIF9Gd2RJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5n
 Jg0KICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
 IF9faTIsIF9Gd2RJdGVyYXRvciBfX2sxLA0KICAgICAgICAgICAgICAgICAg
 IF9Gd2RJdGVyYXRvciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoN
 Cg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBz
 dGF0aWMgX0NoYXJUKg0KICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0
 ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCiAgICAg
 ICAgew0KICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
 aXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOw0KICAgICAg
 ICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9U
 YWcoKSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
 SXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29u
 c3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25z
 dCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ry
 dWVfdHlwZSkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiBfU19jb25z
 dHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBl
 PihfX2VuZCksIF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8
 Y2xhc3MgX0luSXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAg
 ICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
 IGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgdHlw
 ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFs
 IF9JbnRlZ3JhbDsNCiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1
 eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOw0KICAgICAgICB9
 DQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4NCiAgICAgICAg
 c3RhdGljIF9DaGFyVCoNCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy
 IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg
 ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQoN
 Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+DQogICAgICAgIHN0
 YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBf
 X2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLA0KICAg
 ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQog
 ICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgX1NfY29uc3RydWN0KHNpemVf
 dHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOw0K
 DQogICAgcHVibGljOg0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGNvcHko
 X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9
 IDApIGNvbnN0Ow0KDQogICAgICB2b2lkDQogICAgICBzd2FwKGJhc2ljX3N0
 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7DQoNCg0KICAg
 ICAgY29uc3QgX0NoYXJUKg0KICAgICAgY19zdHIoKSBjb25zdA0KICAgICAg
 ew0KDQogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7DQog
 ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9S
 ZXA6Ol9TX3Rlcm1pbmFsKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsN
 CiAgICAgIH0NCg0KICAgICAgY29uc3QgX0NoYXJUKg0KICAgICAgZGF0YSgp
 IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQ0KDQogICAgICBhbGxvY2F0
 b3JfdHlwZQ0KICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
 IF9NX2RhdGFwbHVzOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmlu
 ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
 cGUgX19uKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k
 KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9
 IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRh
 dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90
 eXBlDQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
 X19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf
 X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAg
 ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5
 cGUgX19wb3MgPSAwKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAg
 ICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
 X19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+cmZp
 bmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQog
 ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
 LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQog
 ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
 LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1
 cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0
 aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKF9D
 aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQog
 ICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFz
 aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0
 YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5
 cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
 emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQoNCiAgICAg
 IHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQq
 IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5
 cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
 IGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
 MCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bv
 cyk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2Yo
 Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g
 bnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9v
 ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg
 ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy
 VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
 Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9vZihjb25z
 dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9z
 LCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVf
 dHlwZQ0KICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
 ZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5y
 ZmluZChfX2MsIF9fcG9zKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
 IGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
 IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0
 aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBf
 X3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmlu
 ZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
 X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p
 IGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rf
 bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAw
 KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rf
 b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K
 DQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9D
 aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAg
 ICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFz
 aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
 c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19z
 dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBz
 aXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJU
 KiBfX3MsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAg
 ICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQogICAgICBzaXplX3R5cGUNCiAg
 ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
 dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
 LT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps
 ZW5ndGgoX19zKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k
 X2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5w
 b3MpIGNvbnN0Ow0KDQogICAgICBiYXNpY19zdHJpbmcNCiAgICAgIHN1YnN0
 cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykg
 Y29uc3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6
 ZSgpKQ0KICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z
 dHJpbmc6OnN1YnN0ciIpOw0KICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5n
 KCp0aGlzLCBfX3BvcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgaW50DQog
 ICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0
 DQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
 aXplKCk7DQogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6
 ZSgpOw0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBf
 X29zaXplKTsNCg0KICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv
 bXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAg
 ICAgaWYgKCFfX3IpDQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6
 ZTsNCiAgICAgICAgcmV0dXJuIF9fcjsNCiAgICAgIH0NCg0KICAgICAgaW50
 DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
 biwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7DQoNCiAgICAg
 IGludA0KICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5
 cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAg
 ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
 Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf
 X3MpIGNvbnN0Ow0KDQoNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNp
 emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog
 X19zKSBjb25zdDsNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVf
 dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
 LA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7DQoNCiAg
 fTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNpY19z
 dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19z
 dHJpbmcoKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01f
 cmVmY29weSgpLCBfQWxsb2MoKSkgeyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
 Yz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
 DQogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBi
 YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN
 CiAgICB7DQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+IF9fc3RyKF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3Jo
 cyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs
 b2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAg
 ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
 QWxsb2M+JiBfX3Jocyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFz
 aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4NCiAgICBvcGVyYXRv
 cisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U
 cmFpdHMsX0FsbG9jPiYgX19yaHMpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
 ICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
 b2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
 IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0
 IF9DaGFyVCogX19yaHMpDQogICAgew0KICAgICAgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7DQogICAgICBf
 X3N0ci5hcHBlbmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAg
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhj
 b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
 X2xocywgX0NoYXJUIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFz
 aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190
 eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpz
 aXplX3R5cGUgX19zaXplX3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9f
 c3RyKF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgx
 KSwgX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
 dHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0
 b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
 b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
 ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAgIHsgcmV0
 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0NCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
 IF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29u
 c3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg
 IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
 PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
 PiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
 KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0N
 Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
 b3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
 LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg
 IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
 IT0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
 KQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
 ZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
 X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
 IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9
 IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29s
 DQogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBi
 YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN
 CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
 IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh
 dG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
 b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo
 cykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
 ZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBj
 b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
 X3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7
 IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
 ICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
 dHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBiYXNp
 Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAg
 ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
 Pihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
 JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykN
 CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
 IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh
 dG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBjb25z
 dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
 cykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0N
 Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
 b3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
 LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg
 IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
 PD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
 PiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
 KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
 ZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAg
 IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
 IF9fcmhzKQ0KICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAw
 OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0K
 ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
 YWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBi
 YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN
 CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVy
 YXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
 X3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAw
 OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAg
 ICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg
 ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
 PiYgX19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg
 PD0gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIHZv
 aWQNCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz4mIF9fbGhzLA0KICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
 X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyBfX2xocy5zd2FwKF9f
 cmhzKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAgICAg
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
 KTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
 PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsDQogICAgICAgICAgICAgICBjb25z
 dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0
 cik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsX1RyYWl0cz4mDQogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICBiYXNpY19zdHJp
 bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9f
 ZGVsaW0pOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNp
 Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2lj
 X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAg
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
 KTsNCn0NCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQoNCg0KIyAxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgi
 IDEgMw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEg
 Mw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMN
 CiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9hbGdvcml0aG0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEg
 Mw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzDQoj
 IDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMNCiMgMzQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
 LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RsX2hlYXAuaCIgMSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzDQpuYW1lc3Bh
 Y2Ugc3RkDQp7DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
 c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCnZvaWQN
 Cl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0K
 ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2Ug
 X190b3BJbmRleCwgX1RwIF9fdmFsdWUpDQp7DQogIF9EaXN0YW5jZSBfX3Bh
 cmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsNCiAgd2hpbGUgKF9faG9s
 ZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg
 PCBfX3ZhbHVlKSB7DQogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
 KihfX2ZpcnN0ICsgX19wYXJlbnQpOw0KICAgIF9faG9sZUluZGV4ID0gX19w
 YXJlbnQ7DQogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7
 DQogIH0NCiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
 Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX19w
 dXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0K
 ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
 IF9EaXN0YW5jZSosIF9UcCopDQp7DQogIF9fcHVzaF9oZWFwKF9fZmlyc3Qs
 IF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNl
 KDApLA0KICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSkpOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5s
 aW5lIHZvaWQNCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
 aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCnsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KDQoNCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3Qs
 IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
 X2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
 bmNlLCBjbGFzcyBfVHAsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2
 b2lkDQpfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
 dCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LA0KICAgICAgICAgICAgX0Rpc3Rh
 bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp
 DQp7DQogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
 IC8gMjsNCiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBf
 X2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgew0KICAg
 ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFy
 ZW50KTsNCiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Ow0KICAgIF9fcGFy
 ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICB9DQogICooX19maXJz
 dCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLA0K
 ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPg0KaW5saW5l
 IHZvaWQNCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
 X19maXJzdCwNCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
 b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsDQogICAgICAgICAgICAgICAg
 X0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAgX19wdXNoX2hlYXAoX19maXJzdCwg
 X0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2Uo
 MCksDQogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21w
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
 ciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KcHVzaF9oZWFwKF9S
 YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
 cmF0b3IgX19sYXN0LA0KICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9f
 cHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwNCiAgICAg
 ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1
 ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5k
 b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+
 DQp2b2lkDQpfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
 X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICAg
 IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpDQp7DQogIF9EaXN0YW5j
 ZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7DQogIF9EaXN0YW5jZSBfX3Nl
 Y29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsNCiAgd2hpbGUgKF9f
 c2Vjb25kQ2hpbGQgPCBfX2xlbikgew0KICAgIGlmICgqKF9fZmlyc3QgKyBf
 X3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g
 MSkpKQ0KICAgICAgX19zZWNvbmRDaGlsZC0tOw0KICAgICooX19maXJzdCAr
 IF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOw0K
 ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICBfX3NlY29u
 ZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7DQogIH0NCiAgaWYg
 KF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAqKF9fZmlyc3QgKyBf
 X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
 KTsNCiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0KICB9
 DQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu
 ZGV4LCBfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
 Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQpp
 bmxpbmUgdm9pZA0KX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
 X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAg
 ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192
 YWx1ZSwgX0Rpc3RhbmNlKikNCnsNCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
 DQogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlz
 dGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+
 DQppbmxpbmUgdm9pZA0KX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0
 ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
 DQogICAgICAgICAgICAgICBfVHAqKQ0Kew0KICBfX3BvcF9oZWFwKF9fZmly
 c3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsDQogICAgICAgICAgICAgX1Rw
 KCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0K
 aW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
 Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
 cmF0b3IgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBf
 X3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShf
 X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
 SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBf
 VHAsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZA0KX19hZGp1c3RfaGVhcChfUmFu
 ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu
 ZGV4LA0KICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3Zh
 bHVlLCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9EaXN0YW5jZSBfX3RvcElu
 ZGV4ID0gX19ob2xlSW5kZXg7DQogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk
 ID0gMiAqIF9faG9sZUluZGV4ICsgMjsNCiAgd2hpbGUgKF9fc2Vjb25kQ2hp
 bGQgPCBfX2xlbikgew0KICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19z
 ZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkp
 KSkNCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsNCiAgICAqKF9fZmlyc3QgKyBf
 X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsNCiAg
 ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7DQogICAgX19zZWNvbmRD
 aGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOw0KICB9DQogIGlmIChf
 X3NlY29uZENoaWxkID09IF9fbGVuKSB7DQogICAgKihfX2ZpcnN0ICsgX19o
 b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
 DQogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsNCiAgfQ0K
 ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRl
 eCwgX192YWx1ZSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
 YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
 ZSwNCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZA0K
 X19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
 bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgX1JhbmRv
 bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBh
 cmUgX19jb21wLA0KICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICAqX19y
 ZXN1bHQgPSAqX19maXJzdDsNCiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
 RGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwNCiAg
 ICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNs
 YXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQNCl9fcG9wX2hlYXBfYXV4KF9S
 YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUg
 X19jb21wKQ0Kew0KICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEs
 IF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLA0KICAg
 ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9D
 b21wYXJlPg0KaW5saW5lIHZvaWQNCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ
 dGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh
 dG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX19wb3BfaGVhcF9hdXgo
 X19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29t
 cCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
 b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0Kdm9pZA0KX19tYWtl
 X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAg
 ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfRGlz
 dGFuY2UqKQ0Kew0KICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy
 bjsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAg
 X0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICB3aGls
 ZSAodHJ1ZSkgew0KICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJl
 bnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7DQogICAg
 aWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAgICBfX3BhcmVudC0tOw0K
 ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
 b3I+DQppbmxpbmUgdm9pZA0KbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
 YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0K
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX21ha2VfaGVhcChfX2Zp
 cnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp
 cnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh
 cmUsDQogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQp2
 b2lkDQpfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
 dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAg
 IF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikNCnsNCiAgaWYg
 KF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47DQogIF9EaXN0YW5jZSBf
 X2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogIF9EaXN0YW5jZSBfX3BhcmVu
 dCA9IChfX2xlbiAtIDIpLzI7DQoNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBf
 X2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCoo
 X19maXJzdCArIF9fcGFyZW50KSksDQogICAgICAgICAgICAgICAgICBfX2Nv
 bXApOw0KICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47DQogICAgX19w
 YXJlbnQtLTsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
 Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkDQpt
 YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAg
 ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg
 X19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQoNCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAs
 DQogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0
 YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
 YW5kb21BY2Nlc3NJdGVyYXRvcj4NCnZvaWQgc29ydF9oZWFwKF9SYW5kb21B
 Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
 X19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo
 X19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgcG9wX2hlYXAoX19maXJzdCwg
 X19sYXN0LS0pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
 c0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQNCnNvcnRfaGVhcChf
 UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAgICBfUmFu
 ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3
 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgcG9wX2hlYXAoX19m
 aXJzdCwgX19sYXN0LS0sIF9fY29tcCk7DQp9DQoNCn0NCiMgMzUgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi
 IDIgMw0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KdGVtcGxhdGUg
 PGNsYXNzIF9UcD4NCmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0
 IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpDQp7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KICBpZiAoX19hIDwgX19iKQ0KICAg
 IGlmIChfX2IgPCBfX2MpDQogICAgICByZXR1cm4gX19iOw0KICAgIGVsc2Ug
 aWYgKF9fYSA8IF9fYykNCiAgICAgIHJldHVybiBfX2M7DQogICAgZWxzZQ0K
 ICAgICAgcmV0dXJuIF9fYTsNCiAgZWxzZSBpZiAoX19hIDwgX19jKQ0KICAg
 IHJldHVybiBfX2E7DQogIGVsc2UgaWYgKF9fYiA8IF9fYykNCiAgICByZXR1
 cm4gX19jOw0KICBlbHNlDQogICAgcmV0dXJuIF9fYjsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgY29uc3Qg
 X1RwJg0KX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i
 LCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBpZiAoX19jb21w
 KF9fYSwgX19iKSkNCiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkNCiAgICAg
 IHJldHVybiBfX2I7DQogICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkN
 CiAgICAgIHJldHVybiBfX2M7DQogICAgZWxzZQ0KICAgICAgcmV0dXJuIF9f
 YTsNCiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkNCiAgICByZXR1cm4g
 X19hOw0KICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQ0KICAgIHJldHVy
 biBfX2M7DQogIGVsc2UNCiAgICByZXR1cm4gX19iOw0KfQ0KDQoNCnRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+DQpfRnVu
 Y3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
 IF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikNCnsNCg0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
 KQ0KICAgIF9fZigqX19maXJzdCk7DQogIHJldHVybiBfX2Y7DQp9DQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPg0KaW5s
 aW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
 dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
 VHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
 YXRvcl90YWcpDQp7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAh
 KCpfX2ZpcnN0ID09IF9fdmFsKSkNCiAgICArK19fZmlyc3Q7DQogIHJldHVy
 biBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
 Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYo
 X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsN
 CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmly
 c3QpKQ0KICAgICsrX19maXJzdDsNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
 Pg0KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9tQWNjZXNzSXRlciBf
 X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAg
 ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0Kew0KICB0
 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
 aWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50DQogICAgPSAoX19sYXN0IC0g
 X19maXJzdCkgPj4gMjsNCg0KICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
 OyAtLV9fdHJpcF9jb3VudCkgew0KICAgIGlmICgqX19maXJzdCA9PSBfX3Zh
 bCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYg
 KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19f
 Zmlyc3Q7DQoNCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf
 X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCg0KICAgIGlmICgqX19maXJzdCA9
 PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9
 DQoNCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgY2FzZSAzOg0K
 ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQog
 ICAgKytfX2ZpcnN0Ow0KICBjYXNlIDI6DQogICAgaWYgKCpfX2ZpcnN0ID09
 IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogIGNh
 c2UgMToNCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
 cnN0Ow0KICAgICsrX19maXJzdDsNCiAgY2FzZSAwOg0KICBkZWZhdWx0Og0K
 ICAgIHJldHVybiBfX2xhc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KX1JhbmRv
 bUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
 LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsNCiAg
 dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
 ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudA0KICAgID0gKF9fbGFzdCAt
 IF9fZmlyc3QpID4+IDI7DQoNCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAw
 IDsgLS1fX3RyaXBfY291bnQpIHsNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
 KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYg
 KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICsrX19m
 aXJzdDsNCg0KICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
 aXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAgICBpZiAoX19wcmVkKCpfX2Zp
 cnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9DQoN
 CiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgY2FzZSAzOg0KICAg
 IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICAr
 K19fZmlyc3Q7DQogIGNhc2UgMjoNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
 KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDE6
 DQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0K
 ICAgICsrX19maXJzdDsNCiAgY2FzZSAwOg0KICBkZWZhdWx0Og0KICAgIHJl
 dHVybiBfX2xhc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lu
 cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAg
 cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRv
 cl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9JbnB1dEl0
 ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
 cHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9f
 cHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVy
 IGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
 SXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkN
 CiAgICByZXR1cm4gX19sYXN0Ow0KICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g
 X19maXJzdDsNCiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7DQogICAg
 aWYgKCpfX2ZpcnN0ID09ICpfX25leHQpDQogICAgICByZXR1cm4gX19maXJz
 dDsNCiAgICBfX2ZpcnN0ID0gX19uZXh0Ow0KICB9DQogIHJldHVybiBfX2xh
 c3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
 IF9CaW5hcnlQcmVkaWNhdGU+DQpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmlu
 ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
 X19iaW5hcnlfcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xh
 c3QpDQogICAgcmV0dXJuIF9fbGFzdDsNCiAgX0ZvcndhcmRJdGVyIF9fbmV4
 dCA9IF9fZmlyc3Q7DQogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgew0K
 ICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkNCiAg
 ICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIF9fZmlyc3QgPSBfX25leHQ7DQog
 IH0NCiAgcmV0dXJuIF9fbGFzdDsNCn0NCg0KDQoNCg0KDQoNCg0KdGVtcGxh
 dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+
 DQp2b2lkIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
 X2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgICAgX1NpemUm
 IF9fbikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgZm9yICggOyBfX2ZpcnN0
 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBf
 X3ZhbHVlKQ0KICAgICAgKytfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4NCnZv
 aWQgY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
 bGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAgICAgICAgICAgIF9TaXpl
 JiBfX24pDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
 dCkNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICsrX19uOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPg0K
 dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl
 bmNlX3R5cGUNCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
 ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
 OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsNCiAgZm9yICggOyBfX2ZpcnN0
 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBf
 X3ZhbHVlKQ0KICAgICAgKytfX247DQogIHJldHVybiBfX247DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0K
 dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl
 bmNlX3R5cGUNCmNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
 SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICB0eXBlbmFtZSBp
 dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
 X24gPSAwOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
 c3QpDQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpDQogICAgICArK19fbjsN
 CiAgcmV0dXJuIF9fbjsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9G
 b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQpfRm9yd2FyZEl0
 ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
 ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQoNCiAgaWYgKF9fZmly
 c3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikNCiAgICBy
 ZXR1cm4gX19maXJzdDE7DQoNCg0KICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f
 Zmlyc3QyKTsNCiAgKytfX3RtcDsNCiAgaWYgKF9fdG1wID09IF9fbGFzdDIp
 DQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
 Mik7DQoNCg0KDQogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogIF9f
 cDEgPSBfX2ZpcnN0MjsgKytfX3AxOw0KDQogIF9Gb3J3YXJkSXRlcjEgX19j
 dXJyZW50ID0gX19maXJzdDE7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
 bGFzdDEpIHsNCiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFz
 dDEsICpfX2ZpcnN0Mik7DQogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp
 DQogICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgIF9fcCA9IF9fcDE7DQog
 ICAgX19jdXJyZW50ID0gX19maXJzdDE7DQogICAgaWYgKCsrX19jdXJyZW50
 ID09IF9fbGFzdDEpDQogICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgIHdo
 aWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsNCiAgICAgIGlmICgrK19fcCA9
 PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gX19maXJzdDE7DQogICAgICBp
 ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIF9f
 bGFzdDE7DQogICAgfQ0KDQogICAgKytfX2ZpcnN0MTsNCiAgfQ0KICByZXR1
 cm4gX19maXJzdDE7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
 ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4N
 Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
 IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg
 IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
 MiwNCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGlj
 YXRlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K
 DQogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f
 bGFzdDIpDQogICAgcmV0dXJuIF9fZmlyc3QxOw0KDQoNCiAgX0ZvcndhcmRJ
 dGVyMiBfX3RtcChfX2ZpcnN0Mik7DQogICsrX190bXA7DQogIGlmIChfX3Rt
 cCA9PSBfX2xhc3QyKSB7DQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
 dDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAg
 ICAgICsrX19maXJzdDE7DQogICAgcmV0dXJuIF9fZmlyc3QxOw0KICB9DQoN
 Cg0KDQogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogIF9fcDEgPSBf
 X2ZpcnN0MjsgKytfX3AxOw0KDQogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50
 ID0gX19maXJzdDE7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp
 IHsNCiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgew0KICAgICAg
 aWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAg
 ICAgYnJlYWs7DQogICAgICArK19fZmlyc3QxOw0KICAgIH0NCiAgICB3aGls
 ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmly
 c3QxLCAqX19maXJzdDIpKQ0KICAgICAgKytfX2ZpcnN0MTsNCiAgICBpZiAo
 X19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0K
 DQogICAgX19wID0gX19wMTsNCiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsN
 CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz
 dDE7DQoNCiAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9f
 cCkpIHsNCiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQ0KICAgICAgICBy
 ZXR1cm4gX19maXJzdDE7DQogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19s
 YXN0MSkNCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgfQ0KDQogICAg
 KytfX2ZpcnN0MTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDE7DQp9DQoNCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdl
 ciwgY2xhc3MgX1RwPg0KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJk
 SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg
 ICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192
 YWwpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBpZiAoX19jb3Vu
 dCA8PSAwKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlIHsNCiAgICBf
 X2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsNCiAgICB3
 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIF9JbnRlZ2VyIF9f
 biA9IF9fY291bnQgLSAxOw0KICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
 Zmlyc3Q7DQogICAgICArK19faTsNCiAgICAgIHdoaWxlIChfX2kgIT0gX19s
 YXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsNCiAgICAgICAg
 KytfX2k7DQogICAgICAgIC0tX19uOw0KICAgICAgfQ0KICAgICAgaWYgKF9f
 biA9PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2UN
 CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsN
 CiAgICB9DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3Mg
 X1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4NCl9Gb3J3YXJkSXRlciBzZWFyY2hf
 bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z
 dCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
 cmVkIF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19jb3Vu
 dCA8PSAwKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlIHsNCiAgICB3
 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIGlmIChfX2JpbmFy
 eV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpDQogICAgICAgIGJyZWFrOw0KICAg
 ICAgKytfX2ZpcnN0Ow0KICAgIH0NCiAgICB3aGlsZSAoX19maXJzdCAhPSBf
 X2xhc3QpIHsNCiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOw0K
 ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7DQogICAgICArK19f
 aTsNCiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYm
 IF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7DQogICAgICAgICsrX19p
 Ow0KICAgICAgICAtLV9fbjsNCiAgICAgIH0NCiAgICAgIGlmIChfX24gPT0g
 MCkNCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIHsNCiAg
 ICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsNCiAgICAgICAgICBpZiAo
 X19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpDQogICAgICAgICAgICBicmVh
 azsNCiAgICAgICAgICArK19faTsNCiAgICAgICAgfQ0KICAgICAgICBfX2Zp
 cnN0ID0gX19pOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gX19sYXN0
 Ow0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
 MSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4NCl9Gb3J3YXJkSXRlcjIgc3dhcF9y
 YW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBf
 X2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
 ZXIyIF9fZmlyc3QyKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 Cg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs
 ICsrX19maXJzdDIpDQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0
 Mik7DQogIHJldHVybiBfX2ZpcnN0MjsNCn0NCg0KDQoNCnRlbXBsYXRlIDxj
 bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Vu
 YXJ5T3BlcmF0aW9uPg0KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0
 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlv
 biBfX3VuYXJ5X29wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 Cg0KDQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
 c3QsICsrX19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgq
 X19maXJzdCk7DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg
 X091dHB1dEl0ZXIsDQogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlv
 bj4NCl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0
 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg
 ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQs
 DQogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2Jp
 bmFyeV9vcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCg0KDQoNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0
 MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz
 dWx0KQ0KICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwg
 Kl9fZmlyc3QyKTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBy
 ZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNv
 bnN0IF9UcCYgX19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
 dDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1
 ZSkNCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNs
 YXNzIF9UcD4NCnZvaWQgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz
 dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfUHJl
 ZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBfX2Zp
 cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmIChfX3ByZWQoKl9f
 Zmlyc3QpKQ0KICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
 LCBjbGFzcyBfVHA+DQpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0
 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25z
 dCBfVHAmIF9fbmV3X3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f
 cmVzdWx0KQ0KICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3Zh
 bHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVz
 dWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
 X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4NCl9P
 dXRwdXRJdGVyIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3Qs
 IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3
 X3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGZvciAoIDsgX19maXJz
 dCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAqX19y
 ZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19m
 aXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUg
 PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4NCnZvaWQg
 Z2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
 X2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pDQp7DQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBf
 X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICpfX2ZpcnN0ID0g
 X19nZW4oKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBj
 bGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4NCl9PdXRwdXRJdGVyIGdl
 bmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2Vu
 ZXJhdG9yIF9fZ2VuKQ0Kew0KDQoNCg0KDQoNCg0KICBmb3IgKCA7IF9fbiA+
 IDA7IC0tX19uLCArK19fZmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX2dlbigp
 Ow0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFz
 cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPg0K
 X091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
 SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9P
 dXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpDQp7DQoN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
 YXN0OyArK19fZmlyc3QpDQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1
 ZSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgKytf
 X3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj
 bGFzcyBfUHJlZGljYXRlPg0KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYo
 X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
 UHJlZGljYXRlIF9fcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3Ig
 KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCFf
 X3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJz
 dDsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICByZXR1cm4gX19yZXN1
 bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
 IF9UcD4NCl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmly
 c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 IGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCg0KICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBf
 X2xhc3QsIF9fdmFsdWUpOw0KICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJz
 dDsNCiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwg
 X19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4NCl9Gb3J3YXJk
 SXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
 SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
 dGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX19maXJzdCA9IGZpbmRf
 aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOw0KICBfRm9yd2FyZEl0ZXIg
 X19pID0gX19maXJzdDsNCiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g
 X19maXJzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf
 Y29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOw0KfQ0K
 DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
 dXRJdGVyLCBjbGFzcyBfVHA+DQpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5
 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
 VHAqKQ0Kew0KDQogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICpfX3Jl
 c3VsdCA9IF9fdmFsdWU7DQogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0
 KQ0KICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7DQogICAgICBf
 X3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFs
 dWU7DQogICAgfQ0KICByZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5s
 aW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
 cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykN
 CnsNCg0KICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
 IF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPg0K
 X0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90
 YWcpDQp7DQoNCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogIHdoaWxlICgr
 K19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICghKCpfX3Jlc3VsdCA9PSAq
 X19maXJzdCkpDQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICBy
 ZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRwdXRJdGVy
 IHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
 dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f
 Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogIHJldHVybiBf
 X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAg
 ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19yZXN1
 bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
 IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLA0KICAgICAg
 ICAgIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu
 cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
 cnlfcHJlZCwgX1RwKikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCg0KICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0Ow0K
 ICAqX19yZXN1bHQgPSBfX3ZhbHVlOw0KICB3aGlsZSAoKytfX2ZpcnN0ICE9
 IF9fbGFzdCkNCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9f
 Zmlyc3QpKSB7DQogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAq
 KytfX3Jlc3VsdCA9IF9fdmFsdWU7DQogICAgfQ0KICByZXR1cm4gKytfX3Jl
 c3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
 IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5l
 IF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy
 eV9wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
 cHV0X2l0ZXJhdG9yX3RhZykNCnsNCg0KICByZXR1cm4gX191bmlxdWVfY29w
 eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLA0K
 ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkp
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv
 cndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KX0ZvcndhcmRJ
 dGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
 dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
 YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KDQoNCg0KICAqX19yZXN1bHQgPSAqX19maXJzdDsN
 CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCFfX2Jp
 bmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9
 ICpfX2ZpcnN0Ow0KICByZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
 cyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1
 ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
 X19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
 bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0
 ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICByZXR1cm4gX191bmlx
 dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9w
 cmVkLA0KICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
 b3J5KF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
 ZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2Zp
 cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
 X19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsNCiAg
 cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C
 aW5hcnlQcmVkaWNhdGU+DQpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJk
 SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg
 ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQp7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQoNCg0KDQogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9f
 Zmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7DQogIHJldHVybiB1bmlx
 dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3By
 ZWQpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
 SXRlcj4NCnZvaWQgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
 cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
 ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsNCiAgd2hpbGUgKHRy
 dWUpDQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0g
 LS1fX2xhc3QpDQogICAgICByZXR1cm47DQogICAgZWxzZQ0KICAgICAgaXRl
 cl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0Kdm9pZCBfX3JldmVyc2UoX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
 LA0KICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
 IHsNCiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpDQogICAgaXRlcl9zd2Fw
 KF9fZmlyc3QrKywgLS1fX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0JpZGlyZWN0aW9uYWxJdGVyPg0KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlk
 aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
 bGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 ICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
 b3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
 dGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBy
 ZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
 c3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAoX19m
 aXJzdCAhPSBfX2xhc3QpIHsNCiAgICAtLV9fbGFzdDsNCiAgICAqX19yZXN1
 bHQgPSAqX19sYXN0Ow0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJu
 IF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9FdWNsaWRl
 YW5SaW5nRWxlbWVudD4NCl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChf
 RXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pDQp7DQogIHdo
 aWxlIChfX24gIT0gMCkgew0KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf
 X3QgPSBfX20gJSBfX247DQogICAgX19tID0gX19uOw0KICAgIF9fbiA9IF9f
 dDsNCiAgfQ0KICByZXR1cm4gX19tOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0ZvcndhcmRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIg
 X19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAg
 ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgX0Rpc3RhbmNlKiwNCiAgICAgICAgICAgICAgICAgICAgICBm
 b3J3YXJkX2l0ZXJhdG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19t
 aWRkbGUpDQogICAgcmV0dXJuIF9fbGFzdDsNCiAgaWYgKF9fbGFzdCA9PSBf
 X21pZGRsZSkNCiAgICByZXR1cm4gX19maXJzdDsNCg0KICBfRm9yd2FyZEl0
 ZXIgX19maXJzdDIgPSBfX21pZGRsZTsNCiAgZG8gew0KICAgIHN3YXAoKl9f
 Zmlyc3QrKywgKl9fZmlyc3QyKyspOw0KICAgIGlmIChfX2ZpcnN0ID09IF9f
 bWlkZGxlKQ0KICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsNCiAgfSB3aGls
 ZSAoX19maXJzdDIgIT0gX19sYXN0KTsNCg0KICBfRm9yd2FyZEl0ZXIgX19u
 ZXdfbWlkZGxlID0gX19maXJzdDsNCg0KICBfX2ZpcnN0MiA9IF9fbWlkZGxl
 Ow0KDQogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsNCiAgICBzd2Fw
 ICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7DQogICAgaWYgKF9fZmlyc3Qg
 PT0gX19taWRkbGUpDQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICAg
 IGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkNCiAgICAgIF9fZmlyc3Qy
 ID0gX19taWRkbGU7DQogIH0NCg0KICByZXR1cm4gX19uZXdfbWlkZGxlOw0K
 fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
 YXNzIF9EaXN0YW5jZT4NCl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShf
 QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
 aXRlcmF0b3JfdGFnKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpDQogICAgcmV0
 dXJuIF9fbGFzdDsNCiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkNCiAgICBy
 ZXR1cm4gX19maXJzdDsNCg0KICBfX3JldmVyc2UoX19maXJzdCwgX19taWRk
 bGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICBfX3JldmVy
 c2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
 YWcoKSk7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19t
 aWRkbGUgIT0gX19sYXN0KQ0KICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f
 bGFzdCk7DQoNCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsNCiAgICBf
 X3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVy
 YXRvcl90YWcoKSk7DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KICBlbHNl
 IHsNCiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0
 aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0K
 ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
 Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRl
 ciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
 bGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
 SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz
 dGFuY2UgKiwgX1RwICopDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KDQogIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0
 Ow0KICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0Ow0KICBf
 RGlzdGFuY2UgX19sID0gX19uIC0gX19rOw0KICBfUmFuZG9tQWNjZXNzSXRl
 ciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOw0K
 DQogIGlmIChfX2sgPT0gMCkNCiAgICByZXR1cm4gX19sYXN0Ow0KDQogIGVs
 c2UgaWYgKF9fayA9PSBfX2wpIHsNCiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0
 LCBfX21pZGRsZSwgX19taWRkbGUpOw0KICAgIHJldHVybiBfX3Jlc3VsdDsN
 CiAgfQ0KDQogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7DQoN
 CiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykg
 ew0KICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0Ow0KICAgIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fcCA9IF9fZmlyc3Q7DQoNCiAgICBpZiAoX19rIDwgX19sKSB7
 DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19k
 OyBfX2orKykgew0KICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkg
 ew0KICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7DQogICAgICAgICAg
 X19wIC09IF9fbDsNCiAgICAgICAgfQ0KDQogICAgICAgICpfX3AgPSAqKF9f
 cCArIF9fayk7DQogICAgICAgIF9fcCArPSBfX2s7DQogICAgICB9DQogICAg
 fQ0KDQogICAgZWxzZSB7DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAw
 OyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7DQogICAgICAgIGlmIChf
 X3AgPCBfX2xhc3QgLSBfX2spIHsNCiAgICAgICAgICAqX19wID0gKihfX3Ag
 KyBfX2spOw0KICAgICAgICAgIF9fcCArPSBfX2s7DQogICAgICAgIH0NCg0K
 ICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsNCiAgICAgICAgX19wIC09
 IF9fbDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAqX19wID0gX190bXA7DQog
 ICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3
 YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
 SXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
 b3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9f
 bWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl
 X3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
 X2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9G
 b3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBy
 b3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
 IF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
 dGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
 cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUs
 IF9fbGFzdCwgX19yZXN1bHQpKTsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNs
 YXNzIF9EaXN0YW5jZT4NCmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVt
 YmVyKF9EaXN0YW5jZSBfX24pIHsNCg0KICByZXR1cm4gbHJhbmQ0OCgpICUg
 X19uOw0KDQoNCg0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
 Y2Nlc3NJdGVyPg0KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19s
 YXN0KSByZXR1cm47DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g
 X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgIGl0ZXJf
 c3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f
 Zmlyc3QpICsgMSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
 Y2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQp2b2lk
 IHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
 YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
 X1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBf
 X2xhc3QpIHJldHVybjsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
 PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgaXRl
 cl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkg
 KyAxKSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
 LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KX091dHB1
 dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
 Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQ0K
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7DQogIGRpc3Rh
 bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOw0KICBfRGlzdGFu
 Y2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOw0KDQogIHdoaWxlIChf
 X20gPiAwKSB7DQogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmlu
 ZykgPCBfX20pIHsNCiAgICAgICpfX291dCA9ICpfX2ZpcnN0Ow0KICAgICAg
 KytfX291dDsNCiAgICAgIC0tX19tOw0KICAgIH0NCg0KICAgIC0tX19yZW1h
 aW5pbmc7DQogICAgKytfX2ZpcnN0Ow0KICB9DQogIHJldHVybiBfX291dDsN
 Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091
 dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBf
 UmFuZG9tTnVtYmVyR2VuZXJhdG9yPg0KX091dHB1dEl0ZXIgcmFuZG9tX3Nh
 bXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
 IF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkN
 CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQogIF9EaXN0YW5jZSBfX3JlbWFpbmlu
 ZyA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5p
 bmcpOw0KICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcp
 Ow0KDQogIHdoaWxlIChfX20gPiAwKSB7DQogICAgaWYgKF9fcmFuZChfX3Jl
 bWFpbmluZykgPCBfX20pIHsNCiAgICAgICpfX291dCA9ICpfX2ZpcnN0Ow0K
 ICAgICAgKytfX291dDsNCiAgICAgIC0tX19tOw0KICAgIH0NCg0KICAgIC0t
 X19yZW1haW5pbmc7DQogICAgKytfX2ZpcnN0Ow0KICB9DQogIHJldHVybiBf
 X291dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpfUmFuZG9t
 QWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19u
 KQ0Kew0KICBfRGlzdGFuY2UgX19tID0gMDsNCiAgX0Rpc3RhbmNlIF9fdCA9
 IF9fbjsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBf
 X247ICsrX19tLCArK19fZmlyc3QpDQogICAgX19vdXRbX19tXSA9ICpfX2Zp
 cnN0Ow0KDQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsr
 X190Ow0KICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190
 KTsNCiAgICBpZiAoX19NIDwgX19uKQ0KICAgICAgX19vdXRbX19NXSA9ICpf
 X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCiAgfQ0KDQogIHJldHVybiBfX291
 dCArIF9fbTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyLA0KICAgICAgICAgIGNsYXNzIF9SYW5k
 b21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCl9SYW5kb21B
 Y2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs
 IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0
 b3ImIF9fcmFuZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBjb25zdCBfRGlzdGFuY2UgX19uKQ0Kew0KDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0K
 ICBfRGlzdGFuY2UgX19tID0gMDsNCiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsN
 CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsr
 X19tLCArK19fZmlyc3QpDQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0Ow0K
 DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX190Ow0K
 ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsNCiAgICBpZiAoX19N
 IDwgX19uKQ0KICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0Ow0KICAgICsr
 X19maXJzdDsNCiAgfQ0KDQogIHJldHVybiBfX291dCArIF9fbTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl
 c3NJdGVyPg0KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyDQpyYW5kb21fc2Ft
 cGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
 ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBf
 UmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQ0Kew0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xh
 c3QgLSBfX291dF9maXJzdCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9J
 bnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLA0KICAgICAgICAg
 IGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQppbmxpbmUgX1JhbmRv
 bUFjY2Vzc0l0ZXINCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgX1JhbmRvbUFj
 Y2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0
 X2xhc3QsDQogICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im
 IF9fcmFuZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX3JhbmRvbV9z
 YW1wbGUoX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsNCn0NCg0KDQoNCnRl
 bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+
 DQpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
 cHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
 dG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
 X19maXJzdDsNCg0KICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICBp
 ZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQoNCiAg
 X0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQoNCiAgd2hpbGUgKCsr
 X19uZXh0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7
 DQogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsNCiAgICAgICsrX19m
 aXJzdDsNCiAgICB9DQoNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNh
 dGU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0
 aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
 dG9yX3RhZykNCnsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICB3aGlsZSAodHJ1
 ZSkNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICAgICAgcmV0
 dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3Qp
 KQ0KICAgICAgICArK19fZmlyc3Q7DQogICAgICBlbHNlDQogICAgICAgIGJy
 ZWFrOw0KICAgIC0tX19sYXN0Ow0KICAgIHdoaWxlICh0cnVlKQ0KICAgICAg
 aWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICByZXR1cm4gX19maXJz
 dDsNCiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpDQogICAgICAg
 IC0tX19sYXN0Ow0KICAgICAgZWxzZQ0KICAgICAgICBicmVhazsNCiAgICBp
 dGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsNCiAgICArK19fZmlyc3Q7DQog
 IH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
 X1ByZWRpY2F0ZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9G
 b3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQoNCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19w
 cmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRl
 LCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0
 YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
 IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQ0Kew0K
 ICBpZiAoX19sZW4gPT0gMSkNCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0
 KSA/IF9fbGFzdCA6IF9fZmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX21pZGRs
 ZSA9IF9fZmlyc3Q7DQogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7
 DQogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o
 X19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpLA0KICAgICAg
 ICAgICAgICAgIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgIF9faW5wbGFj
 ZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 X2xlbiAtIF9fbGVuIC8gMikpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
 cndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX1ByZWRpY2F0ZSwN
 CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX19z
 dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNl
 IF9fbGVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUp
 DQp7DQogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX0Zv
 cndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7DQogICAgX1BvaW50ZXIg
 X19yZXN1bHQyID0gX19idWZmZXI7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9
 IF9fbGFzdCA7ICsrX19maXJzdCkNCiAgICAgIGlmIChfX3ByZWQoKl9fZmly
 c3QpKSB7DQogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsNCiAgICAg
 ICAgKytfX3Jlc3VsdDE7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAg
 ICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0
 MjsNCiAgICAgIH0NCiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9f
 cmVzdWx0MSk7DQogICAgcmV0dXJuIF9fcmVzdWx0MTsNCiAgfQ0KICBlbHNl
 IHsNCiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAg
 IGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7DQogICAgcmV0dXJuIHJv
 dGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIs
 IF9fYnVmZmVyX3NpemUpLA0KICAgICAgICAgICAgICAgICAgICBfX21pZGRs
 ZSwNCiAgICAgICAgICAgICAgICAgICAgX19zdGFibGVfcGFydGl0aW9uX2Fk
 YXB0aXZlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwg
 X19sYXN0LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
 bGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOw0K
 ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
 IF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5s
 aW5lIF9Gb3J3YXJkSXRlcg0KX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9y
 d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9E
 aXN0YW5jZSopDQp7DQogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRl
 ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoX19idWYu
 c2l6ZSgpID4gMCkNCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2Fk
 YXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJl
 cXVlc3RlZF9zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsNCiAg
 ZWxzZQ0KICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihf
 X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9z
 aXplKCkpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
 Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxl
 X3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
 aWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3Qg
 PT0gX19sYXN0KQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlDQogICAg
 cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0
 LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X192YWx1ZV90eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
 Pg0KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9S
 YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9U
 cCBfX3Bpdm90KQ0Kew0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHdoaWxlICgq
 X19maXJzdCA8IF9fcGl2b3QpDQogICAgICArK19fZmlyc3Q7DQogICAgLS1f
 X2xhc3Q7DQogICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQ0KICAgICAg
 LS1fX2xhc3Q7DQogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpDQogICAg
 ICByZXR1cm4gX19maXJzdDsNCiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19s
 YXN0KTsNCiAgICArK19fZmlyc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
 YXJlPg0KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u
 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
 YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIHdoaWxlICh0
 cnVlKSB7DQogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkp
 DQogICAgICArK19fZmlyc3Q7DQogICAgLS1fX2xhc3Q7DQogICAgd2hpbGUg
 KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkNCiAgICAgIC0tX19sYXN0Ow0K
 ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAgcmV0dXJuIF9f
 Zmlyc3Q7DQogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg
 KytfX2ZpcnN0Ow0KICB9DQp9DQoNCmNvbnN0IGludCBfX3N0bF90aHJlc2hv
 bGQgPSAxNjsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
 SXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
 ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQ0Kew0K
 ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogIC0tX19u
 ZXh0Ow0KICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7DQogICAgKl9fbGFz
 dCA9ICpfX25leHQ7DQogICAgX19sYXN0ID0gX19uZXh0Ow0KICAgIC0tX19u
 ZXh0Ow0KICB9DQogICpfX2xhc3QgPSBfX3ZhbDsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D
 b21wYXJlPg0Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5k
 b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0Ow0KICAtLV9fbmV4dDsN
 CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsNCiAgICAqX19s
 YXN0ID0gKl9fbmV4dDsNCiAgICBfX2xhc3QgPSBfX25leHQ7DQogICAgLS1f
 X25leHQ7DQogIH0NCiAgKl9fbGFzdCA9IF9fdmFsOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4NCmlubGlu
 ZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
 cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgX1RwIF9fdmFsID0gKl9fbGFz
 dDsNCiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsNCiAgICBjb3B5X2JhY2t3
 YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7DQogICAgKl9fZmly
 c3QgPSBfX3ZhbDsNCiAgfQ0KICBlbHNlDQogICAgX191bmd1YXJkZWRfbGlu
 ZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
 YXJlPg0KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl
 c3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2Nv
 bXApDQp7DQogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7DQogIGlmIChfX2NvbXAo
 X192YWwsICpfX2ZpcnN0KSkgew0KICAgIGNvcHlfYmFja3dhcmQoX19maXJz
 dCwgX19sYXN0LCBfX2xhc3QgKyAxKTsNCiAgICAqX19maXJzdCA9IF9fdmFs
 Ow0KICB9DQogIGVsc2UNCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0
 KF9fbGFzdCwgX192YWwsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfUmFuZG9tQWNjZXNzSXRlcj4NCnZvaWQgX19pbnNlcnRpb25fc29ydChf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
 X2xhc3QpDQp7DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOw0K
 ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf
 X2kgIT0gX19sYXN0OyArK19faSkNCiAgICBfX2xpbmVhcl9pbnNlcnQoX19m
 aXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJl
 Pg0Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
 Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
 ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlmIChfX2ZpcnN0
 ID09IF9fbGFzdCkgcmV0dXJuOw0KICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
 IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAg
 ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUo
 X19maXJzdCksIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
 ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX3VuZ3VhcmRlZF9p
 bnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
 Y2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgZm9yIChfUmFuZG9tQWNj
 ZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkN
 CiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kp
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0K
 aW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7DQogIF9fdW5n
 dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
 dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4N
 CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21B
 Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBf
 X2NvbXApDQp7DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m
 aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgX191bmd1YXJkZWRf
 bGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
 cGFyZT4NCmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0
 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 Q29tcGFyZSBfX2NvbXApDQp7DQogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9z
 b3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0
 KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCnZv
 aWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
 X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
 Y2Nlc3NJdGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg
 PiBfX3N0bF90aHJlc2hvbGQpIHsNCiAgICBfX2luc2VydGlvbl9zb3J0KF9f
 Zmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOw0KICAgIF9fdW5n
 dWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hv
 bGQsIF9fbGFzdCk7DQogIH0NCiAgZWxzZQ0KICAgIF9faW5zZXJ0aW9uX3Nv
 cnQoX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
 YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19maW5h
 bF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
 IF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sYXN0IC0g
 X19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgew0KICAgIF9faW5zZXJ0aW9u
 X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19j
 b21wKTsNCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0
 ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7DQogIH0NCiAg
 ZWxzZQ0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
 X2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUg
 X1NpemUgX19sZyhfU2l6ZSBfX24pDQp7DQogIF9TaXplIF9fazsNCiAgZm9y
 IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsNCiAgcmV0
 dXJuIF9fazsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
 dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPg0Kdm9pZCBfX2ludHJvc29y
 dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLA0K
 ICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpDQp7
 DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xk
 KSB7DQogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgew0KICAgICAgcGFy
 dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsNCiAgICAgIHJl
 dHVybjsNCiAgICB9DQogICAgLS1fX2RlcHRoX2xpbWl0Ow0KICAgIF9SYW5k
 b21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
 dGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0
 IC0gX19maXJzdCkvMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAgX19pbnRyb3Nv
 cnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1p
 dCk7DQogICAgX19sYXN0ID0gX19jdXQ7DQogIH0NCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9T
 aXplLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19pbnRyb3NvcnRfbG9vcChf
 UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwNCiAgICAgICAg
 ICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBf
 X2NvbXApDQp7DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf
 dGhyZXNob2xkKSB7DQogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgew0K
 ICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBf
 X2NvbXApOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAtLV9fZGVwdGhf
 bGltaXQ7DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAg
 X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3Qs
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo
 X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwg
 X19jb21wKSksDQogICAgICAgX19jb21wKTsNCiAgICBfX2ludHJvc29ydF9s
 b29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf
 X2NvbXApOw0KICAgIF9fbGFzdCA9IF9fY3V0Ow0KICB9DQp9DQoNCnRlbXBs
 YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGluZSB2b2lkIHNv
 cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
 ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3Qg
 IT0gX19sYXN0KSB7DQogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBf
 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m
 aXJzdCksDQogICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9f
 Zmlyc3QpICogMik7DQogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2Zp
 cnN0LCBfX2xhc3QpOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
 ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBz
 b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCAhPSBfX2xh
 c3QpIHsNCiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwN
 CiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkg
 KiAyLA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICBfX2Zp
 bmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsN
 CiAgfQ0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
 dGVyPg0Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz
 c0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
 YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9f
 Zmlyc3QgPCAxNSkgew0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
 X19sYXN0KTsNCiAgICByZXR1cm47DQogIH0NCiAgX1JhbmRvbUFjY2Vzc0l0
 ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8g
 MjsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxl
 KTsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp
 Ow0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
 LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUg
 LSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAt
 IF9fbWlkZGxlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
 c3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19pbnBsYWNlX3N0YWJs
 ZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
 b21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx
 NSkgew0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
 X2NvbXApOw0KICAgIHJldHVybjsNCiAgfQ0KICBfUmFuZG9tQWNjZXNzSXRl
 ciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAy
 Ow0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUs
 IF9fY29tcCk7DQogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg
 X19sYXN0LCBfX2NvbXApOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
 Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
 QWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAg
 ICAgICBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fbWVyZ2Vfc29ydF9sb29w
 KF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9E
 aXN0YW5jZSBfX3N0ZXBfc2l6ZSkNCnsNCiAgX0Rpc3RhbmNlIF9fdHdvX3N0
 ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgd2hpbGUgKF9fbGFzdCAtIF9f
 Zmlyc3QgPj0gX190d29fc3RlcCkgew0KICAgIF9fcmVzdWx0ID0gbWVyZ2Uo
 X19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAg
 ICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190
 d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsNCiAg
 ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7DQogIH0NCg0KICBfX3N0ZXBfc2l6
 ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9z
 aXplKTsNCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXpl
 LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwNCiAgICAgICAgX19y
 ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
 ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsDQogICAgICAgICAgY2xh
 c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19tZXJnZV9z
 b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jl
 c3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAgICAg
 ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9EaXN0YW5jZSBfX3R3
 b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOw0KDQogIHdoaWxlIChfX2xhc3Qg
 LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsNCiAgICBfX3Jlc3VsdCA9IG1l
 cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg
 ICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr
 IF9fdHdvX3N0ZXAsDQogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwN
 CiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgX19maXJzdCAr
 PSBfX3R3b19zdGVwOw0KICB9DQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0
 YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOw0KDQogIG1l
 cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg
 X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsDQogICAgICAgIF9fcmVz
 dWx0LA0KICAgICAgICBfX2NvbXApOw0KfQ0KDQpjb25zdCBpbnQgX19zdGxf
 Y2h1bmtfc2l6ZSA9IDc7DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
 ZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0Kdm9pZCBfX2NodW5rX2luc2Vy
 dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
 LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQ0Kew0KICB3aGlsZSAoX19sYXN0
 IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICBfX2luc2VydGlv
 bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOw0KICAg
 IF9fZmlyc3QgKz0gX19jaHVua19zaXplOw0KICB9DQogIF9faW5zZXJ0aW9u
 X3NvcnQoX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9D
 b21wYXJlPg0Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
 Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJl
 IF9fY29tcCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19j
 aHVua19zaXplKSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
 X2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOw0KICAgIF9fZmlyc3Qg
 Kz0gX19jaHVua19zaXplOw0KICB9DQogIF9faW5zZXJ0aW9uX3NvcnQoX19m
 aXJzdCwgX19sYXN0LCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlz
 dGFuY2U+DQp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t
 QWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5j
 ZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
 DQogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu
 Ow0KDQogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3Np
 emU7DQogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
 LCBfX3N0ZXBfc2l6ZSk7DQoNCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19s
 ZW4pIHsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs
 IF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7DQogICAgX19zdGVwX3NpemUgKj0g
 MjsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJf
 bGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOw0KICAgIF9fc3RlcF9zaXpl
 ICo9IDI7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
 c3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAg
 ICAgICAgIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21lcmdlX3NvcnRfd2l0
 aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
 dCwgX1BvaW50ZXIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfRGlzdGFuY2UqLCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9E
 aXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogIF9Qb2ludGVy
 IF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOw0KDQogIF9EaXN0
 YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7DQogIF9fY2h1
 bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6
 ZSwgX19jb21wKTsNCg0KICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikg
 ew0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19i
 dWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOw0KICAgIF9fc3RlcF9zaXpl
 ICo9IDI7DQogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVm
 ZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOw0KICAg
 IF9fc3RlcF9zaXplICo9IDI7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rp
 c3RhbmNlPg0Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21B
 Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZl
 ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i
 dWZmZXJfc2l6ZSkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAt
 IF9fZmlyc3QgKyAxKSAvIDI7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
 ZGxlID0gX19maXJzdCArIF9fbGVuOw0KICBpZiAoX19sZW4gPiBfX2J1ZmZl
 cl9zaXplKSB7DQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0
 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICAgIF9f
 c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZm
 ZXIsIF9fYnVmZmVyX3NpemUpOw0KICB9DQogIGVsc2Ugew0KICAgIF9fbWVy
 Z2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
 ZXIsIChfRGlzdGFuY2UqKTApOw0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
 ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSop
 MCk7DQogIH0NCiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
 ZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwNCiAg
 ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUp
 LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
 IF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCnZvaWQg
 X19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
 cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsIF9D
 b21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz
 dCAtIF9fZmlyc3QgKyAxKSAvIDI7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9f
 bWlkZGxlID0gX19maXJzdCArIF9fbGVuOw0KICBpZiAoX19sZW4gPiBfX2J1
 ZmZlcl9zaXplKSB7DQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
 cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIF9fc3RhYmxl
 X3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9f
 YnVmZmVyX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
 bXApOw0KICB9DQogIGVsc2Ugew0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
 ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2Uq
 KTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN
 CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFz
 dCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX19jb21wKTsNCiAgfQ0KICBfX21lcmdlX2FkYXB0
 aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21p
 ZGRsZSAtIF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
 ZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
 LA0KICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
 RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFu
 ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlz
 dGFuY2UqKQ0Kew0KICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz
 SXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsNCiAgaWYgKGJ1Zi5i
 ZWdpbigpID09IDApDQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly
 c3QsIF9fbGFzdCk7DQogIGVsc2UNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0
 aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
 cCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2
 b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
 ZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9U
 ZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1Zihf
 X2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkNCiAg
 ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
 bXApOw0KICBlbHNlDQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
 cnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyPg0KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQo
 X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwN
 CiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLA0K
 ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
 YXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
 IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0K
 ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KDQoNCg0KICBfX3N0YWJsZV9zb3J0X2F1eChfX2Zp
 cnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
 ZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
 eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K
 fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
 bGFzcyBfVHA+DQp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLA0KICAg
 ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
 cCopDQp7DQogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogIGZv
 ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f
 bGFzdDsgKytfX2kpDQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkNCiAgICAg
 IF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kp
 LA0KICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
 Ow0KICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCBw
 YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
 ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
 ciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3BhcnRpYWxfc29y
 dChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
 aXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQp2b2lkIF9fcGFydGlh
 bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
 c3NJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
 QWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkNCnsN
 CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOw0KICBm
 b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBf
 X2xhc3Q7ICsrX19pKQ0KICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3Qp
 KQ0KICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBf
 VHAoKl9faSksIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgX19kaXN0YW5j
 ZV90eXBlKF9fZmlyc3QpKTsNCiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk
 ZGxlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
 Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQgcGFydGlh
 bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
 YXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQog
 IF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
 dmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
 bGFzcyBfRGlzdGFuY2UsDQogICAgICAgICAgY2xhc3MgX1RwPg0KX1JhbmRv
 bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f
 Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
 bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikNCnsN
 CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVy
 biBfX3Jlc3VsdF9sYXN0Ow0KICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
 dF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsNCiAgd2hpbGUoX19maXJz
 dCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0
 X2xhc3QpIHsNCiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7
 DQogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgKytfX2ZpcnN0Ow0K
 ICB9DQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
 bF9sYXN0KTsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg
 aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQ0KICAgICAgX19hZGp1
 c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLA0KICAgICAg
 ICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0g
 X19yZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfVHAoKl9f
 Zmlyc3QpKTsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgc29ydF9oZWFwKF9f
 cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOw0KICByZXR1cm4g
 X19yZXN1bHRfcmVhbF9sYXN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
 cHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgX1Jh
 bmRvbUFjY2Vzc0l0ZXINCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIg
 X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
 ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwNCiAgICAgICAg
 ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpDQp7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3Qs
 IF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jl
 c3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
 dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
 SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
 bXBhcmUsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+
 DQpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1
 dEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
 IF9fcmVzdWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 Q29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopDQp7DQogIGlmIChf
 X3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
 bHRfbGFzdDsNCiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9s
 YXN0ID0gX19yZXN1bHRfZmlyc3Q7DQogIHdoaWxlKF9fZmlyc3QgIT0gX19s
 YXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7
 DQogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Ow0KICAgICsr
 X19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICsrX19maXJzdDsNCiAgfQ0KICBt
 YWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg
 X19jb21wKTsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg
 aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkNCiAgICAg
 IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwN
 CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxf
 bGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAg
 X1RwKCpfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN
 CiAgICArK19fZmlyc3Q7DQogIH0NCiAgc29ydF9oZWFwKF9fcmVzdWx0X2Zp
 cnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7DQogIHJldHVybiBf
 X3Jlc3VsdF9yZWFsX2xhc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
 dXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
 cmU+DQppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXINCnBhcnRpYWxfc29ydF9j
 b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9m
 aXJzdCwNCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
 cmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCg0KDQogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmly
 c3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0
 X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1
 ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
 UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX250aF9lbGVt
 ZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fbnRoLA0KICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmly
 c3QgPiAzKSB7DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAg
 ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmly
 c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAx
 KSkpKTsNCiAgICBpZiAoX19jdXQgPD0gX19udGgpDQogICAgICBfX2ZpcnN0
 ID0gX19jdXQ7DQogICAgZWxzZQ0KICAgICAgX19sYXN0ID0gX19jdXQ7DQog
 IH0NCiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUg
 dm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
 UmFuZG9tQWNjZXNzSXRlciBfX250aCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KDQogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwg
 X192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
 Pg0Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
 c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg
 ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUg
 X19jb21wKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsN
 CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9DQogICAgICBfX3VuZ3Vh
 cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0
 ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIGlm
 IChfX2N1dCA8PSBfX250aCkNCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsNCiAg
 ICBlbHNlDQogICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgfQ0KICBfX2luc2Vy
 dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
 ZT4NCmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
 IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t
 cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIF9fbnRoX2Vs
 ZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
 Zmlyc3QpLCBfX2NvbXApOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCl9G
 b3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rp
 c3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
 LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRl
 ciBfX21pZGRsZTsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o
 YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog
 ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoKl9fbWlk
 ZGxlIDwgX192YWwpIHsNCiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAg
 ICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg
 LSAxOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfX2xlbiA9IF9faGFsZjsN
 CiAgfQ0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRl
 ciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
 dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Y29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192
 YWwsDQogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
 X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
 IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4N
 Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2Zp
 cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21w
 LCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBk
 aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNl
 IF9faGFsZjsNCiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxl
 IChfX2xlbiA+IDApIHsNCiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAg
 IF9fbWlkZGxlID0gX19maXJzdDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
 X2hhbGYpOw0KICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsN
 CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsN
 CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAg
 ICBlbHNlDQogICAgICBfX2xlbiA9IF9faGFsZjsNCiAgfQ0KICByZXR1cm4g
 X19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
 Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBfRm9yd2FyZEl0
 ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
 SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHJldHVybiBfX2xv
 d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
 X1RwLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX191cHBlcl9i
 b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
 YWwsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7DQog
 IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlzdGFu
 Y2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAgd2hp
 bGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQog
 ICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWRkbGUs
 IF9faGFsZik7DQogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAg
 X19sZW4gPSBfX2hhbGY7DQogICAgZWxzZSB7DQogICAgICBfX2ZpcnN0ID0g
 X19taWRkbGU7DQogICAgICArK19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9f
 bGVuIC0gX19oYWxmIC0gMTsNCiAgICB9DQogIH0NCiAgcmV0dXJuIF9fZmly
 c3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
 IF9UcD4NCmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zvcndh
 cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpDQp7
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICByZXR1cm4gX191cHBlcl9i
 b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLA0KICAgICAgICAgICAgICAg
 ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w
 bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D
 b21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX191cHBl
 cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
 X192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rp
 c3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
 LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRl
 ciBfX21pZGRsZTsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o
 YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog
 ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX19jb21w
 KF9fdmFsLCAqX19taWRkbGUpKQ0KICAgICAgX19sZW4gPSBfX2hhbGY7DQog
 ICAgZWxzZSB7DQogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAgICAr
 K19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsN
 CiAgICB9DQogIH0NCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
 cmU+DQppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJk
 SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29t
 cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xh
 c3QsIF9fdmFsLCBfX2NvbXAsDQogICAgICAgICAgICAgICAgICAgICAgIF9f
 ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
 cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0K
 cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fZXF1YWxfcmFu
 Z2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
 IGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgIF9EaXN0YW5jZSop
 DQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmly
 c3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlzdGFuY2UgX19oYWxmOw0KICBf
 Rm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsNCg0KICB3
 aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19oYWxmID0gX19sZW4gPj4gMTsN
 CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21pZGRs
 ZSwgX19oYWxmKTsNCiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsNCiAg
 ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsNCiAg
 ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAgICBl
 bHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkNCiAgICAgIF9fbGVuID0gX19o
 YWxmOw0KICAgIGVsc2Ugew0KICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo
 X19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsNCiAgICAgIGFkdmFuY2UoX19m
 aXJzdCwgX19sZW4pOw0KICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsr
 X19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsNCiAgICAgIHJldHVybiBwYWly
 PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQp
 Ow0KICAgIH0NCiAgfQ0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9G
 b3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQp9DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSBwYWly
 PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KZXF1YWxfcmFuZ2UoX0Zv
 cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
 IF9UcCYgX192YWwpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBy
 ZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLA0K
 ICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
 dCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
 cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+DQpwYWly
 PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KX19lcXVhbF9yYW5nZShf
 Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
 c3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
 LCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBk
 aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNl
 IF9faGFsZjsNCiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9f
 cmlnaHQ7DQoNCiAgd2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9
 IF9fbGVuID4+IDE7DQogICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFk
 dmFuY2UoX19taWRkbGUsIF9faGFsZik7DQogICAgaWYgKF9fY29tcCgqX19t
 aWRkbGUsIF9fdmFsKSkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0K
 ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs
 ZiAtIDE7DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9f
 bWlkZGxlKSkNCiAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgIGVsc2Ugew0K
 ICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
 IF9fdmFsLCBfX2NvbXApOw0KICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xl
 bik7DQogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwg
 X19maXJzdCwgX192YWwsIF9fY29tcCk7DQogICAgICByZXR1cm4gcGFpcjxf
 Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsN
 CiAgICB9DQogIH0NCiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
 d2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
 Pg0KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQpl
 cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
 IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgIF9Db21w
 YXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFz
 dCwgX192YWwsIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgICAgICAgX19k
 aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
 IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KYm9vbCBiaW5hcnlfc2VhcmNo
 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KICBfRm9yd2FyZEl0ZXIgX19pID0gbG93
 ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7DQogIHJldHVybiBf
 X2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
 cGFyZT4NCmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJz
 dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICBj
 b25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
 IF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0
 LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOw0KICByZXR1cm4gX19pICE9IF9f
 bGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsNCn0NCg0KDQoNCnRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs
 YXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRl
 cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAg
 ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
 YXN0MiwNCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgq
 X19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
 X2ZpcnN0MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICAgIGVsc2Ug
 ew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2Zp
 cnN0MTsNCiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1cm4g
 Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0
 MSwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
 ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQog
 ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBtZXJnZShf
 SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg
 ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
 dGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
 X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 Cg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
 dDIgIT0gX19sYXN0Mikgew0KICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
 X19maXJzdDEpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQog
 ICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICpf
 X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAg
 fQ0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIGNvcHkoX19maXJz
 dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
 KSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
 dGVyLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9i
 dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
 SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
 c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikNCnsNCiAgaWYgKF9f
 bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQ0KICAgIHJldHVybjsNCiAgaWYg
 KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7DQogICAgaWYgKCpfX21pZGRsZSA8
 ICpfX2ZpcnN0KQ0KICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxl
 KTsNCiAgICByZXR1cm47DQogIH0NCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
 Zmlyc3RfY3V0ID0gX19maXJzdDsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
 c2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICBfRGlzdGFuY2UgX19sZW4xMSA9
 IDA7DQogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgaWYgKF9fbGVuMSA+
 IF9fbGVuMikgew0KICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgIGFk
 dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgIF9fc2Vjb25kX2N1
 dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
 dCk7DQogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
 ZW4yMik7DQogIH0NCiAgZWxzZSB7DQogICAgX19sZW4yMiA9IF9fbGVuMiAv
 IDI7DQogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAg
 IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
 ICpfX3NlY29uZF9jdXQpOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly
 c3RfY3V0LCBfX2xlbjExKTsNCiAgfQ0KICBfQmlkaXJlY3Rpb25hbEl0ZXIg
 X19uZXdfbWlkZGxlDQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk
 ZGxlLCBfX3NlY29uZF9jdXQpOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
 KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7DQogIF9fbWVy
 Z2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
 IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsNCn0NCg0KdGVtcGxhdGUgPGNs
 YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz
 cyBfQ29tcGFyZT4NCnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlk
 aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s
 ZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9fbGVuMSA9PSAw
 IHx8IF9fbGVuMiA9PSAwKQ0KICAgIHJldHVybjsNCiAgaWYgKF9fbGVuMSAr
 IF9fbGVuMiA9PSAyKSB7DQogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpf
 X2ZpcnN0KSkNCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7
 DQogICAgcmV0dXJuOw0KICB9DQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
 cnN0X2N1dCA9IF9fZmlyc3Q7DQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl
 Y29uZF9jdXQgPSBfX21pZGRsZTsNCiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw
 Ow0KICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7DQogIGlmIChfX2xlbjEgPiBf
 X2xlbjIpIHsNCiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICBhZHZh
 bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICBfX3NlY29uZF9jdXQg
 PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQs
 IF9fY29tcCk7DQogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
 dCwgX19sZW4yMik7DQogIH0NCiAgZWxzZSB7DQogICAgX19sZW4yMiA9IF9f
 bGVuMiAvIDI7DQogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp
 Ow0KICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19t
 aWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7DQogICAgZGlzdGFuY2Uo
 X19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICB9DQogIF9CaWRp
 cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUNCiAgICA9IHJvdGF0ZShfX2Zp
 cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogIF9fbWVyZ2Vf
 d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p
 ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICBfX2NvbXApOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3
 X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu
 MTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4y
 MiwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
 bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAgICAg
 ICAgY2xhc3MgX0Rpc3RhbmNlPg0KX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jv
 dGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
 dGlvbmFsSXRlcjEgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
 Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
 YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkNCnsNCiAgX0JpZGlyZWN0aW9u
 YWxJdGVyMiBfX2J1ZmZlcl9lbmQ7DQogIGlmIChfX2xlbjEgPiBfX2xlbjIg
 JiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAgICBfX2J1ZmZlcl9l
 bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsNCiAgICBj
 b3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KICAg
 IHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3Qp
 Ow0KICB9DQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7
 DQogICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwg
 X19idWZmZXIpOw0KICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJz
 dCk7DQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVm
 ZmVyX2VuZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlDQogICAgcmV0dXJuIHJv
 dGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVj
 dGlvbmFsSXRlcjIsDQogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
 dGVyMz4NCl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChf
 QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
 YXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
 YXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 QmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQ0Kew0KICBpZiAoX19maXJz
 dDEgPT0gX19sYXN0MSkNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp
 cnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOw0KICBpZiAoX19maXJzdDIgPT0g
 X19sYXN0MikNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg
 X19sYXN0MSwgX19yZXN1bHQpOw0KICAtLV9fbGFzdDE7DQogIC0tX19sYXN0
 MjsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBpZiAoKl9fbGFzdDIgPCAqX19s
 YXN0MSkgew0KICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsNCiAgICAg
 IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gY29w
 eV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7DQog
 ICAgICAtLV9fbGFzdDE7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKi0t
 X19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
 X2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
 MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAgICAtLV9fbGFzdDI7DQog
 ICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
 bEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAg
 IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPg0K
 X0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVj
 dGlvbmFsSXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
 dGlvbmFsSXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
 dGlvbmFsSXRlcjMgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19m
 aXJzdDEgPT0gX19sYXN0MSkNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
 X2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOw0KICBpZiAoX19maXJzdDIg
 PT0gX19sYXN0MikNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
 MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KICAtLV9fbGFzdDE7DQogIC0tX19s
 YXN0MjsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBpZiAoX19jb21wKCpfX2xh
 c3QyLCAqX19sYXN0MSkpIHsNCiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
 dDE7DQogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAg
 cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19y
 ZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgIH0NCiAgICBlbHNlIHsN
 CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7DQogICAgICBpZiAoX19m
 aXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
 cmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOw0KICAgICAgLS1f
 X2xhc3QyOw0KICAgIH0NCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
 ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2lu
 dGVyPg0Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRl
 ciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
 bmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlk
 aXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAg
 ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
 X2J1ZmZlcl9zaXplKQ0Kew0KICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBf
 X2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVm
 ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsN
 CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwg
 X19sYXN0LCBfX2ZpcnN0KTsNCiAgfQ0KICBlbHNlIGlmIChfX2xlbjIgPD0g
 X19idWZmZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9
 IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgIF9fbWVy
 Z2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
 ZmZlcl9lbmQsIF9fbGFzdCk7DQogIH0NCiAgZWxzZSB7DQogICAgX0JpZGly
 ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsNCiAgICBfQmlk
 aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAg
 X0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAgIF9EaXN0YW5jZSBfX2xlbjIy
 ID0gMDsNCiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICBfX2xl
 bjExID0gX19sZW4xIC8gMjsNCiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQs
 IF9fbGVuMTEpOw0KICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQo
 X19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsNCiAgICAgIGRpc3Rh
 bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAgIH0N
 CiAgICBlbHNlIHsNCiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOw0KICAg
 ICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAgICAgX19m
 aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9f
 c2Vjb25kX2N1dCk7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
 X2N1dCwgX19sZW4xMSk7DQogICAgfQ0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
 ciBfX25ld19taWRkbGUgPQ0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19m
 aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9f
 bGVuMTEsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1
 ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShf
 X2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0K
 ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
 ZmVyX3NpemUpOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxl
 LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAg
 ICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVy
 LCBfX2J1ZmZlcl9zaXplKTsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
 X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Q
 b2ludGVyLA0KICAgICAgICAgIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21l
 cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs
 ZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
 X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
 bjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAgICAgICAgICAgICAg
 X1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLA0K
 ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAg
 aWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3Np
 emUpIHsNCiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly
 c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7DQogICAgbWVyZ2UoX19idWZmZXIs
 IF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19j
 b21wKTsNCiAgfQ0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6
 ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk
 bGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgIF9fbWVyZ2VfYmFja3dhcmQo
 X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9f
 bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogIH0NCiAg
 ZWxzZSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0g
 X19maXJzdDsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0
 ID0gX19taWRkbGU7DQogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAg
 IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgICBpZiAoX19sZW4xID4gX19s
 ZW4yKSB7DQogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgIGFk
 dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgICAgX19zZWNvbmRf
 Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf
 Y3V0LCBfX2NvbXApOw0KICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj
 b25kX2N1dCwgX19sZW4yMik7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAg
 X19sZW4yMiA9IF9fbGVuMiAvIDI7DQogICAgICBhZHZhbmNlKF9fc2Vjb25k
 X2N1dCwgX19sZW4yMik7DQogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv
 dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXAp
 Ow0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVu
 MTEpOw0KICAgIH0NCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk
 ZGxlID0NCiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBf
 X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
 ZmVyX3NpemUpOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19m
 aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwNCiAgICAgICAgICAg
 ICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBf
 X2NvbXApOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBf
 X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAgICAg
 ICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf
 X2J1ZmZlcl9zaXplLCBfX2NvbXApOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rp
 c3RhbmNlPg0KaW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlk
 aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2Ug
 X19sZW4xID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9f
 bGVuMSk7DQogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOw0KICBkaXN0YW5jZShf
 X21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOw0KDQogIF9UZW1wb3JhcnlfYnVm
 ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBf
 X2xhc3QpOw0KICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQ0KICAgIF9fbWVy
 Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg
 X19sZW4xLCBfX2xlbjIpOw0KICBlbHNlDQogICAgX19tZXJnZV9hZGFwdGl2
 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwN
 CiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5j
 ZShfX2J1Zi5zaXplKCkpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRp
 cmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLA0KICAgICAgICAgIGNsYXNzIF9E
 aXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBfX2lucGxh
 Y2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
 ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSos
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
 Y29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7DQogIGRpc3RhbmNl
 KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOw0KICBfRGlzdGFuY2UgX19s
 ZW4yID0gMDsNCiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4y
 KTsNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIs
 IF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsNCiAgaWYgKF9fYnVmLmJl
 Z2luKCkgPT0gMCkNCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmly
 c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXAp
 Ow0KICBlbHNlDQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p
 ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwNCiAgICAgICAgICAgICAg
 ICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkp
 LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxh
 dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4NCmlubGluZSB2b2lkIGlu
 cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
 ZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
 YWxJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f
 Zmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQ0KICAg
 IHJldHVybjsNCiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21p
 ZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf
 dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0N
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg
 X0NvbXBhcmU+DQppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVj
 dGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21w
 YXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19m
 aXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpDQogICAg
 cmV0dXJuOw0KICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlk
 ZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90
 eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksDQogICAg
 ICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KDQoNCg0KDQoNCnRl
 bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
 DQpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
 dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
 cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmly
 c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBp
 ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAgcmV0dXJuIGZhbHNl
 Ow0KICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAg
 KytfX2ZpcnN0MTsNCiAgICBlbHNlDQogICAgICArK19fZmlyc3QxLCArK19f
 Zmlyc3QyOw0KDQogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOw0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
 ZXIyLCBjbGFzcyBfQ29tcGFyZT4NCmJvb2wgaW5jbHVkZXMoX0lucHV0SXRl
 cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAg
 ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
 LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19j
 b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgIHJldHVybiBmYWxz
 ZTsNCiAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0Mikp
 DQogICAgICArK19fZmlyc3QxOw0KICAgIGVsc2UNCiAgICAgICsrX19maXJz
 dDEsICsrX19maXJzdDI7DQoNCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFz
 dDI7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
 X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXIg
 c2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
 X2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
 Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAg
 ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
 dDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
 dDIpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsr
 X19maXJzdDE7DQogICAgfQ0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpf
 X2ZpcnN0MSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAg
 ICAgKytfX2ZpcnN0MjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAqX19y
 ZXN1bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAg
 KytfX2ZpcnN0MjsNCiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICBy
 ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
 X19sYXN0MSwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9J
 bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
 ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBz
 ZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
 bGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
 aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg
 ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkN
 CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlmIChf
 X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7DQogICAgICAqX19yZXN1
 bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgIH0NCiAg
 ICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7DQog
 ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICArK19fZmlyc3Qy
 Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
 cnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0K
 ICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJldHVybiBjb3B5KF9f
 Zmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
 c3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
 YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ
 dGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
 bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
 X3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdoaWxlIChfX2Zp
 cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAg
 aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgICsrX19maXJzdDE7
 DQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAg
 KytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
 X2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3Qy
 Ow0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBfX3Jlc3Vs
 dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
 SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQogICAgICAgICAgY2xh
 c3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9J
 bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29t
 cCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3Qx
 ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAo
 X19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgICsrX19maXJz
 dDE7DQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx
 KSkNCiAgICAgICsrX19maXJzdDI7DQogICAgZWxzZSB7DQogICAgICAqX19y
 ZXN1bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAg
 KytfX2ZpcnN0MjsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICByZXR1
 cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
 MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091
 dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs
 IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
 cmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmly
 c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBp
 ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7DQogICAgICAqX19yZXN1bHQg
 PSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX3Jl
 c3VsdDsNCiAgICB9DQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
 c3QxKQ0KICAgICAgKytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAgICsr
 X19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgcmV0dXJu
 IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsNCn0NCg0KdGVt
 cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
 Y2xhc3MgX091dHB1dEl0ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+
 DQpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp
 cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
 X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
 ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
 aXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
 Kl9fZmlyc3QyKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0K
 ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0K
 ICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQog
 ICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAgICAgKytfX2ZpcnN0
 MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICByZXR1cm4gY29weShf
 X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8
 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
 T3V0cHV0SXRlcj4NCl9PdXRwdXRJdGVyDQpzZXRfc3ltbWV0cmljX2RpZmZl
 cmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
 dDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
 aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg
 ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICA7DQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
 cnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
 dDIpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsr
 X19maXJzdDE7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgICBlbHNl
 IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICpfX3Jlc3Vs
 dCA9ICpfX2ZpcnN0MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgICArK19f
 cmVzdWx0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICsrX19maXJzdDE7
 DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgcmV0dXJuIGNvcHkoX19m
 aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz
 dWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
 c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLA0KICAgICAgICAg
 IGNsYXNzIF9Db21wYXJlPg0KX091dHB1dEl0ZXINCnNldF9zeW1tZXRyaWNf
 ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
 X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
 MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
 IF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgaWYgKF9fY29tcCgqX19maXJz
 dDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
 MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fcmVzdWx0Ow0KICAg
 IH0NCiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
 KSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICArK19f
 Zmlyc3QyOw0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogICAgZWxzZSB7
 DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9
 DQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly
 c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVyIG1heF9lbGVt
 ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
 Zmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQog
 IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICgqX19yZXN1
 bHQgPCAqX19maXJzdCkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAg
 cmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
 cmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCl9Gb3J3YXJkSXRlciBtYXhfZWxl
 bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
 DQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf
 X2ZpcnN0Ow0KICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0K
 ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19jb21w
 KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQog
 IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
 YXJkSXRlcj4NCl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0
 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp
 ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0KICBfRm9y
 d2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSAoKytfX2Zp
 cnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQp
 DQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogIHJldHVybiBfX3Jlc3Vs
 dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
 X0NvbXBhcmU+DQpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJ
 dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAg
 aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsNCiAgX0Zv
 cndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgd2hpbGUgKCsrX19m
 aXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9f
 cmVzdWx0KSkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgcmV0dXJu
 IF9fcmVzdWx0Ow0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
 ZWN0aW9uYWxJdGVyPg0KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVj
 dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09
 IF9fbGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9CaWRpcmVjdGlvbmFs
 SXRlciBfX2kgPSBfX2ZpcnN0Ow0KICArK19faTsNCiAgaWYgKF9faSA9PSBf
 X2xhc3QpDQogICAgcmV0dXJuIGZhbHNlOw0KICBfX2kgPSBfX2xhc3Q7DQog
 IC0tX19pOw0KDQogIGZvcig7Oykgew0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
 ciBfX2lpID0gX19pOw0KICAgIC0tX19pOw0KICAgIGlmICgqX19pIDwgKl9f
 aWkpIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7
 DQogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkNCiAgICAgICAge30N
 CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7DQogICAgICByZXZlcnNlKF9f
 aWksIF9fbGFzdCk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAg
 aWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICByZXZlcnNlKF9fZmlyc3Qs
 IF9fbGFzdCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICB9DQp9
 DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz
 IF9Db21wYXJlPg0KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
 bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFz
 dCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9CaWRpcmVjdGlvbmFsSXRlciBf
 X2kgPSBfX2ZpcnN0Ow0KICArK19faTsNCiAgaWYgKF9faSA9PSBfX2xhc3Qp
 DQogICAgcmV0dXJuIGZhbHNlOw0KICBfX2kgPSBfX2xhc3Q7DQogIC0tX19p
 Ow0KDQogIGZvcig7Oykgew0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lp
 ID0gX19pOw0KICAgIC0tX19pOw0KICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
 aWkpKSB7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0
 Ow0KICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkNCiAgICAg
 ICAge30NCiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7DQogICAgICByZXZl
 cnNlKF9faWksIF9fbGFzdCk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9
 DQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICByZXZlcnNlKF9f
 Zmlyc3QsIF9fbGFzdCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0K
 ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+
 DQpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9f
 Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpDQp7DQoNCiAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAg
 IHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
 Zmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19pID09IF9fbGFzdCkNCiAgICBy
 ZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAgLS1fX2k7DQoNCiAg
 Zm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7
 DQogICAgLS1fX2k7DQogICAgaWYgKCpfX2lpIDwgKl9faSkgew0KICAgICAg
 X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAgIHdoaWxl
 ICghKCotLV9faiA8ICpfX2kpKQ0KICAgICAgICB7fQ0KICAgICAgaXRlcl9z
 d2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsN
 CiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICBpZiAoX19pID09IF9f
 Zmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsNCiAg
 ICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogIH0NCn0NCg0KdGVtcGxhdGUg
 PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+DQpi
 b29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
 c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 IDsNCg0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIHJldHVy
 biBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7
 DQogICsrX19pOw0KICBpZiAoX19pID09IF9fbGFzdCkNCiAgICByZXR1cm4g
 ZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAgLS1fX2k7DQoNCiAgZm9yKDs7
 KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAg
 LS1fX2k7DQogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsNCiAgICAg
 IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7DQogICAgICB3aGls
 ZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQ0KICAgICAgICB7fQ0KICAgICAg
 aXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVyc2UoX19paSwgX19s
 YXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICBpZiAoX19p
 ID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0
 KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogIH0NCn0NCg0KDQoN
 CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
 ZXI+DQpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2Zp
 cnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9f
 bGFzdDIpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgZm9y
 ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQ0KICAgIGZv
 ciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0g
 X19sYXN0MjsgKytfX2l0ZXIpDQogICAgICBpZiAoKl9fZmlyc3QxID09ICpf
 X2l0ZXIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgcmV0dXJuIF9f
 bGFzdDE7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
 cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpfSW5w
 dXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lu
 cHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9G
 b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Nv
 bXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCg0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
 KytfX2ZpcnN0MSkNCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf
 X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQ0KICAgICAg
 aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQ0KICAgICAgICByZXR1
 cm4gX19maXJzdDE7DQogIHJldHVybiBfX2xhc3QxOw0KfQ0KIyAzMzkwICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
 by5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3Mg
 X0ZvcndhcmRJdGVyMj4NCl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9y
 d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
 MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9y
 X3RhZykNCnsNCiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgcmV0
 dXJuIF9fbGFzdDE7DQogIGVsc2Ugew0KICAgIF9Gb3J3YXJkSXRlcjEgX19y
 ZXN1bHQgPSBfX2xhc3QxOw0KICAgIHdoaWxlICgxKSB7DQogICAgICBfRm9y
 d2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdA0KICAgICAgICA9IHNlYXJjaChfX2Zp
 cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOw0KICAgICAgaWYg
 KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gX19y
 ZXN1bHQ7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19yZXN1bHQgPSBfX25l
 d19yZXN1bHQ7DQogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0Ow0K
 ICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
 cmRJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0K
 X0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz
 dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
 IF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
 dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQ0Kew0K
 ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAgICByZXR1cm4gX19sYXN0
 MTsNCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9f
 bGFzdDE7DQogICAgd2hpbGUgKDEpIHsNCiAgICAgIF9Gb3J3YXJkSXRlcjEg
 X19uZXdfcmVzdWx0DQogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh
 c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsNCiAgICAgIGlmIChf
 X25ld19yZXN1bHQgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIF9fcmVz
 dWx0Ow0KICAgICAgZWxzZSB7DQogICAgICAgIF9fcmVzdWx0ID0gX19uZXdf
 cmVzdWx0Ow0KICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsNCiAg
 ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgIH0NCiAgICB9DQogIH0NCn0NCg0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg
 X0JpZGlyZWN0aW9uYWxJdGVyMj4NCl9CaWRpcmVjdGlvbmFsSXRlcjENCl9f
 ZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGly
 ZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICBfQmlkaXJlY3Rp
 b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
 dDIsDQogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBi
 aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykNCnsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgOw0KDQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
 YXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7DQogIHR5cGVk
 ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2
 SXRlcjI7DQoNCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAg
 X1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsNCiAgX1Jldkl0ZXIxIF9f
 cnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihf
 X2xhc3QyKSwgX19ybGFzdDIpOw0KDQogIGlmIChfX3JyZXN1bHQgPT0gX19y
 bGFzdDEpDQogICAgcmV0dXJuIF9fbGFzdDE7DQogIGVsc2Ugew0KICAgIF9C
 aWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp
 Ow0KICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0Miwg
 X19sYXN0MikpOw0KICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgfQ0KfQ0KDQp0
 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
 ZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJl
 ZGljYXRlPg0KX0JpZGlyZWN0aW9uYWxJdGVyMQ0KX19maW5kX2VuZChfQmlk
 aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIx
 IF9fbGFzdDEsDQogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19m
 aXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwNCiAgICAgICAg
 ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxf
 aXRlcmF0b3JfdGFnLA0KICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
 Y29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
 ZXIxPiBfUmV2SXRlcjE7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf
 QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7DQoNCiAgX1Jldkl0ZXIx
 IF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
 Zmlyc3QyKTsNCiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2
 SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIsDQog
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCg0KICBp
 ZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQ0KICAgIHJldHVybiBfX2xhc3Qx
 Ow0KICBlbHNlIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0
 ID0gX19ycmVzdWx0LmJhc2UoKTsNCiAgICBhZHZhbmNlKF9fcmVzdWx0LCAt
 ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsNCiAgICByZXR1cm4gX19y
 ZXN1bHQ7DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
 ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KaW5saW5lIF9Gb3J3YXJk
 SXRlcjENCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
 YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
 aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9fZmluZF9lbmQo
 X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLA0KICAgICAg
 ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwN
 CiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
 cnN0MikpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg
 Y2xhc3MgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5
 UHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlcjENCmZpbmRfZW5kKF9G
 b3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwN
 CiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
 cjIgX19sYXN0MiwNCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w
 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBy
 ZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIs
 IF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
 ZWdvcnkoX19maXJzdDEpLA0KICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
 dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwNCiAgICAgICAgICAgICAgICAgICAg
 X19jb21wKTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
 bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmJvb2wgX19pc19oZWFw
 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pDQp7
 DQogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7DQogIGZvciAoX0Rpc3RhbmNl
 IF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsNCiAg
 ICBpZiAoX19maXJzdFtfX3BhcmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQ0K
 ICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmICgoX19jaGlsZCAmIDEpID09
 IDApDQogICAgICArK19fcGFyZW50Ow0KICB9DQogIHJldHVybiB0cnVlOw0K
 fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
 IF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4NCmJvb2wg
 X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TdHJpY3RX
 ZWFrT3JkZXJpbmcgX19jb21wLA0KICAgICAgICAgICAgICAgX0Rpc3RhbmNl
 IF9fbikNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsNCiAgZm9yIChf
 RGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGls
 ZCkgew0KICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly
 c3RbX19jaGlsZF0pKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmICgo
 X19jaGlsZCAmIDEpID09IDApDQogICAgICArK19fcGFyZW50Ow0KICB9DQog
 IHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
 Y2Vzc0l0ZXI+DQppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJ
 dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICA7DQoNCg0KICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3Qs
 IF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
 UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4N
 CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
 dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
 ICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkNCnsNCg0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICA7DQoNCg0KDQogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19j
 b21wLCBfX2xhc3QgLSBfX2ZpcnN0KTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KYm9vbCBpc19zb3J0ZWQoX0Zvcndh
 cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
 CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIHJldHVybiB0cnVlOw0K
 DQogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KICBmb3IgKCsr
 X19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCAr
 K19fbmV4dCkgew0KICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpDQogICAg
 ICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICByZXR1cm4gdHJ1ZTsNCn0NCg0K
 dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdl
 YWtPcmRlcmluZz4NCmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2Zp
 cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX1N0
 cmljdFdlYWtPcmRlcmluZyBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19m
 aXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIHRydWU7DQoNCiAgX0Zvcndh
 cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQogIGZvciAoKytfX25leHQ7IF9f
 bmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7
 DQogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpDQogICAgICBy
 ZXR1cm4gZmFsc2U7DQogIH0NCg0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KfQ0K
 IyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgNTAgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj
 X3N0cmluZy50Y2MiIDEgMw0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0KbmFtZXNw
 YWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjb25zdCBfQ2hh
 clQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
 OjoNCiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOw0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
 ZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmlu
 ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJh
 c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9S
 ZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6
 ZW9mKF9DaGFyVCkpIC0gMSkgLyA0Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
 ICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
 dHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
 clQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7DQoNCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdl
 Ww0KICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVv
 ZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOw0KDQoNCg0K
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
 aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0luSXRlcj4NCiAgICAgIF9DaGFyVCoNCiAgICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAgX1NfY29uc3RydWN0
 KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg
 X19hLA0KICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykN
 CiAgICAgIHsNCiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9
 PSBfQWxsb2MoKSkNCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCku
 X01fcmVmY29weSgpOw0KDQogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOw0K
 ICAgICAgICBzaXplX3R5cGUgX19pID0gMDsNCiAgICAgICAgd2hpbGUgKF9f
 YmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1ZikgLyBzaXplb2Yo
 X0NoYXJUKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX2J1ZltfX2kr
 K10gPSAqX19iZWc7DQogICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAg
 IH0NCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwg
 X19hKTsNCiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZk
 YXRhKCksIF9fYnVmLCBfX2kpOw0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9
 IF9faTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgew0KDQoNCg0KICAgICAg
 ICAgICAgZm9yICg7OykNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9N
 X2xlbmd0aDsNCiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9f
 ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsNCiAgICAgICAg
 ICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICAgICAgew0KICAgICAg
 ICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgICAg
 ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5f
 TV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsNCiAg
 ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEo
 KTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
 ICAgIGlmIChfX3AgPT0gX19sYXN0KQ0KICAgICAgICAgICAgICAgICAgICAg
 IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7
 DQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAg
 ICAgICB9DQoNCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf
 X3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAgICAgICAgICAgICBfUmVw
 KiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2Ep
 Ow0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhl
 ci0+X01fcmVmZGF0YSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7DQogICAgICAgICAg
 ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7DQogICAgICAgICAgICAgICAg
 X19yID0gX19hbm90aGVyOw0KICAgICAgICAgICAgICAgIF9fci0+X01fbGVu
 Z3RoID0gX19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQog
 ICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICB7DQogICAgICAgICAgICBf
 X3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+DQog
 ICAgICBfQ2hhclQqDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
 dHMsX0FsbG9jPjo6DQogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
 ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsDQogICAgICAg
 ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQogICAgICB7DQog
 ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5
 cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOw0KDQogICAgICAgIGlmIChf
 X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpDQogICAgICAgICAg
 cmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsNCg0KDQogICAg
 ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7
 DQogICAgICAgIHRyeQ0KICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3It
 Pl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQ0KICAgICAgICBjYXRj
 aCguLi4pDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yLT5fTV9kZXN0
 cm95KF9fYSk7DQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICB9DQog
 ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3Ow0KDQogICAgICAgIF9f
 ci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsN
 CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIF9DaGFyVCoNCiAgICBiYXNpY19z
 dHJpbmc8X0NoYXJULF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9TX2NvbnN0
 cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm
 IF9fYSkNCiAgICB7DQogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9B
 bGxvYygpKQ0KICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVm
 Y29weSgpOw0KDQoNCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0
 ZShfX24sIF9fYSk7DQogICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAg
 IGlmIChfX24pDQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f
 ci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7DQogICAgICAgIH0NCiAgICAg
 IGNhdGNoKC4uLikNCiAgICAgICAgew0KICAgICAgICAgIF9fci0+X01fZGVz
 dHJveShfX2EpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQogICAg
 ICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsNCiAgICAgIF9fci0+X01fcmVmZGF0
 YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsNCiAgICAgIHJldHVybiBf
 X3ItPl9NX3JlZmRhdGEoKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
 DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
 DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
 DQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihf
 QWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwNCiAgICAgICAgICAg
 ICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQ0KICAgIHsgfQ0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
 ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
 dHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm
 IF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5
 cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
 YW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
 LCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3Ry
 aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQ0K
 ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNr
 KF9fcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0
 ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQ0K
 ICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmlu
 ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmlu
 Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
 DQogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxv
 YyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3Ry
 Ll9NX2NoZWNrKF9fcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpDQog
 ICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n
 PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5n
 KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs
 b2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3Ms
 IF9fcyArIF9fbiwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywg
 Y29uc3QgX0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
 dHJ1Y3QoX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9f
 YSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBi
 YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBi
 YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3Qg
 X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
 X19uLCBfX2MsIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
 bGxvYz4NCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAg
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg
 IGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVyIF9f
 ZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T
 X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkNCiAgICB7IH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
 LCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
 IF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcm
 IF9fc3RyKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5f
 TV9yZXAoKSkNCiAgICAgICAgew0KDQogICAgICAgICAgYWxsb2NhdG9yX3R5
 cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOw0KICAgICAgICAgIF9D
 aGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9f
 c3RyLmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAgICAgX01fcmVwKCktPl9N
 X2Rpc3Bvc2UoX19hKTsNCiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsNCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
 YW1lIF9BbGxvYz4NCiAgICB2b2lkDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
 VCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX01fZGVzdHJveShj
 b25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkNCiAgICB7DQogICAgICBzaXpl
 X3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsg
 MSkgKiBzaXplb2YoX0NoYXJUKTsNCiAgICAgIF9SYXdfYnl0ZXNfYWxsb2Mo
 X19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
 LCBfX3NpemUpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2
 b2lkDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
 Pjo6X01fbGVha19oYXJkKCkNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCkt
 Pl9NX2lzX3NoYXJlZCgpKQ0KICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7
 DQogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgIH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
 IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2b2lkDQogICAgYmFzaWNfc3RyaW5n
 PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX01fbXV0YXRlKHNp
 emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9f
 bGVuMikNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRo
 aXMtPnNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXpl
 ID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsNCiAgICAgIGNvbnN0
 IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsN
 CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6
 ZSAtIF9fcG9zIC0gX19sZW4xOw0KDQogICAgICBpZiAoX01fcmVwKCktPl9N
 X2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQ0KICAg
 ICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRf
 YWxsb2NhdG9yKCk7DQogICAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf
 Y3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7DQogICAgICAgICAgdHJ5DQogICAg
 ICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcykNCiAgICAgICAg
 ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwg
 X01fZGF0YSgpLCBfX3Bvcyk7DQogICAgICAgICAgICAgIGlmIChfX2hvd19t
 dWNoKQ0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+
 X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOw0KICAg
 ICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAg
 IHsNCiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0
 b3IoKSk7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K
 ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7DQogICAgICAg
 ICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7DQogICAgICB9DQogICAg
 ICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpDQog
 ICAgICAgIHsNCg0KICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2Rh
 dGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7DQog
 ICAgICAgIH0NCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsN
 CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOw0KICAg
 ICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7
 DQoNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAg
 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2Vy
 dmUoc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsNCiAgICAgIGlmIChfX3JlcyA+
 IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
 KQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4
 X3NpemUoKSkNCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi
 YXNpY19zdHJpbmc6OnJlc2VydmUiKTsNCiAgICAgICAgICBhbGxvY2F0b3Jf
 dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJU
 KiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhp
 cy0+c2l6ZSgpKTsNCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShf
 X2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXApOw0KICAgICAgICB9DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJp
 bmcmIF9fcykNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xl
 YWtlZCgpKQ0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7
 DQogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAg
 ICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsNCiAgICAg
 IGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0
 b3IoKSkNCiAgICAgICAgew0KICAgICAgICAgIF9DaGFyVCogX190bXAgPSBf
 TV9kYXRhKCk7DQogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsN
 CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7DQogICAgICAgIH0NCg0K
 ICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgYmFzaWNfc3RyaW5n
 IF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9j
 YXRvcigpKTsNCiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5f
 TV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwNCiAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAg
 ICAgKnRoaXMgPSBfX3RtcDI7DQogICAgICAgICAgX19zID0gX190bXAxOw0K
 ICAgICAgICB9DQogICAgfQ0KIyAzNTYgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
 bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPjo6X1JlcCoNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
 VHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoNCiAgICBfU19jcmVhdGUoc2l6ZV90
 IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykNCiAgICB7DQog
 ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz4gX19zdHJpbmdfdHlwZTsNCg0KDQogICAgICBpZiAoX19jYXBhY2l0
 eSA+IF9TX21heF9zaXplKQ0KDQoNCg0KICAgICAgICBfX3Rocm93X2xlbmd0
 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsNCg0KDQoNCg0K
 ICAgICAgc2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl
 b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsNCg0KDQogICAgICB2b2lkKiBf
 X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShf
 X3NpemUpOw0KICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw
 Ow0KICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7DQogICAg
 ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOw0KICAgICAgX19wLT5fTV9sZW5n
 dGggPSAwOw0KICAgICAgcmV0dXJuIF9fcDsNCiAgICB9DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
 ZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
 clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Nsb25lKGNv
 bnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsN
 CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGgg
 KyBfX3JlcywgX19hbGxvYyk7DQogICAgICBpZiAoX01fbGVuZ3RoKQ0KICAg
 ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IHRyYWl0c190
 eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9N
 X2xlbmd0aCk7IH0NCiAgICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAg
 ICB7DQogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsN
 CiAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAg
 IH0NCiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOw0KICAgICAg
 cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
 IF9BbGxvYz4NCiAgaW5saW5lIGJvb2wNCg0KDQoNCg0KICAgIGJhc2ljX3N0
 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9T
 X2V4Y2Vzc19zbG9wKHNpemVfdCBfX3MsIHNpemVfdCBfX3IpDQoNCiAgICB7
 DQogICAgICByZXR1cm4gMiAqIChfX3MgPD0gMTYgPyAxNiA6IF9fcykgPCBf
 X3I7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAg
 ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNp
 emUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICBp
 ZiAoX19uID4gbWF4X3NpemUoKSkNCiAgICAgICAgX190aHJvd19sZW5ndGhf
 ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7DQogICAgICBzaXplX3R5
 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSA8
 IF9fbikNCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19j
 KTsNCiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkNCiAgICAgICAgdGhp
 cy0+ZXJhc2UoX19uKTsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N
 CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAgICAgYmFz
 aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAgIGJh
 c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAg
 X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5w
 dXRJdGVyIF9fazEsDQogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19r
 MiwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAgICAgICBiYXNp
 Y19zdHJpbmcgX19zKF9fazEsIF9fazIpOw0KICAgICAgICByZXR1cm4gdGhp
 cy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5f
 TV9pZW5kKCkpOw0KICAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAg
 IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICAgIGJhc2lj
 X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgICBiYXNp
 Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9N
 X3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Zvcndh
 cmRJdGVyIF9fazEsDQogICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
 X2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAgIHsNCiAgICAgICAg
 c2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOw0KICAgICAgICBzaXpl
 X3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsNCiAgICAgICAgc2l6
 ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFu
 Y2UoX19rMSwgX19rMikpOw0KDQogICAgICAgIGlmIChfX2RtYXggPD0gX19k
 bmV3KQ0KICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
 dHJpbmc6Ol9NX3JlcGxhY2UiKTsNCiAgICAgICAgc2l6ZV90eXBlIF9fb2Zm
 ID0gX19pMSAtIF9NX2liZWdpbigpOw0KICAgICAgICBfTV9tdXRhdGUoX19v
 ZmYsIF9fZG9sZCwgX19kbmV3KTsNCg0KICAgICAgICBpZiAoX19kbmV3KQ0K
 ICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9f
 azEsIF9fazIpOw0KDQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
 LCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
 IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f
 cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
 dHIsDQogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg
 X19uMikNCiAgICB7DQogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
 aGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvczIpLA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv
 czIsIF9fbjIpKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg
 YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFz
 aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVu
 ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgIHsNCg0KDQoNCiAg
 ICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBz
 aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7DQogICAg
 ICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0KICAgICAgICB0aGlz
 LT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl
 KF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsX1RyYWl0cyxfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
 clQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBhcHBlbmQoY29uc3QgYmFzaWNf
 c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
 KQ0KICAgIHsNCg0KDQoNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf
 X3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsNCiAg
 ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAgIHRo
 aXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh
 Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9z
 KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQo
 X19wb3MsIF9fbikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg
 ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAgICBi
 YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgYXBw
 ZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgIHsN
 CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsN
 CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAg
 IHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJl
 cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n
 PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D
 aGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVuZChzaXplX3R5cGUg
 X19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xl
 biA9IF9fbiArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRo
 aXMtPmNhcGFjaXR5KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4p
 Ow0KICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01f
 aWVuZCgpLCBfX24sIF9fYyk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
 Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+DQog
 ICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg
 ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m
 IF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
 aGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5
 cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6
 ZV90eXBlOw0KICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjps
 ZW5ndGgoX19saHMpOw0KICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsNCiAg
 ICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOw0KICAg
 ICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsNCiAgICAg
 IF9fc3RyLmFwcGVuZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
 Q2hhclQsX1RyYWl0cyxfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBf
 X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
 Yz4mIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
 PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAg
 IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f
 c2l6ZV90eXBlOw0KICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsNCiAgICAg
 IF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOw0KICAgICAgX19z
 dHIucmVzZXJ2ZShfX2xlbiArIDEpOw0KICAgICAgX19zdHIuYXBwZW5kKF9f
 c2l6ZV90eXBlKDEpLCBfX2xocyk7DQogICAgICBfX3N0ci5hcHBlbmQoX19y
 aHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
 IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz46Og0KICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
 X19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpDQogICAgew0KICAg
 ICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsNCiAgICAgIHNpemVf
 dHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAgICBpZiAo
 bWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQ0K
 ICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpy
 ZXBsYWNlIik7DQogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19u
 Mik7DQoNCiAgICAgIGlmIChfX24yKQ0KICAgICAgICB0cmFpdHNfdHlwZTo6
 YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsNCiAgICAg
 IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQog
 ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6
 ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
 bG9jPjo6DQogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwg
 c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIGlmIChfX3Bv
 cyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu
 Z2UoImJhc2ljX3N0cmluZzo6Y29weSIpOw0KDQogICAgICBpZiAoX19uID4g
 dGhpcy0+c2l6ZSgpIC0gX19wb3MpDQogICAgICAgIF9fbiA9IHRoaXMtPnNp
 emUoKSAtIF9fcG9zOw0KDQogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3Ms
 IF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOw0KDQogICAgICByZXR1cm4gX19u
 Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp
 bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi
 YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBm
 aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
 dHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6
 ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3Bv
 czsNCiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0K
 ICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z
 KQ0KICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsg
 X194cG9zLCBfX3MsIF9fbikgPT0gMCkNCiAgICAgICAgICByZXR1cm4gX194
 cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90
 eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3Np
 emUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3R5cGUgX19yZXQgPSBu
 cG9zOw0KICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQ0KICAgICAgICB7DQog
 ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQog
 ICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOw0KICAg
 ICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQo
 X19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsNCiAgICAgICAgICBpZiAoX19w
 KQ0KICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7DQogICAgICAg
 IH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
 IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
 QWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
 VHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZmluZChjb25zdCBfQ2hhclQqIF9f
 cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAg
 IHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQog
 ICAgICBpZiAoX19uIDw9IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAg
 IF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uICxfX3Bvcyk7DQogICAg
 ICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQogICAg
 ICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHRy
 YWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikg
 PT0gMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7DQogICAgICAg
 ICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsNCiAgICAg
 ICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz46Og0KICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVf
 dHlwZSBfX3BvcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19z
 aXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSkNCiAgICAg
 ICAgew0KICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOw0K
 ICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykNCiAgICAgICAgICAgIF9f
 eHBvcyA9IF9fcG9zOw0KDQogICAgICAgICAgZm9yICgrK19feHBvczsgX194
 cG9zLS0gPiAwOyApDQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx
 KF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQ0KICAgICAgICAgICAgICByZXR1
 cm4gX194cG9zOw0KICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAg
 ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9D
 aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNf
 c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9m
 aXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
 aXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIGZvciAoOyBfX24g
 JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpDQogICAgICAgIHsN
 CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpm
 aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsNCiAgICAgICAgICBp
 ZiAoX19wKQ0KICAgICAgICAgICAgcmV0dXJuIF9fcG9zOw0KICAgICAgICB9
 DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
 b2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
 Pjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
 cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog
 X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQog
 ICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN
 CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQ0KICAgICAgICB7DQogICAgICAg
 ICAgaWYgKC0tX19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUg
 PSBfX3BvczsNCiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAg
 ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2Rh
 dGEoKVtfX3NpemVdKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl
 Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAh
 PSAwKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
 IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmlu
 ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfZmlyc3Rf
 bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
 emVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90IF9feHBv
 cyA9IF9fcG9zOw0KICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlz
 LT5zaXplKCk7ICsrX194cG9zKQ0KICAgICAgICBpZiAoIXRyYWl0c190eXBl
 OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpDQogICAgICAg
 ICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
 LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJp
 bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0
 X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQog
 ICAgew0KICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOw0KICAgICAgZm9y
 ICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpDQogICAgICAg
 IGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2Mp
 KQ0KICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICByZXR1cm4gbnBv
 czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry
 aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAg
 YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg
 ZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
 IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNp
 emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19z
 aXplICYmIF9fbikNCiAgICAgICAgew0KICAgICAgICAgIGlmICgtLV9fc2l6
 ZSA+IF9fcG9zKQ0KICAgICAgICAgICAgX19zaXplID0gX19wb3M7DQogICAg
 ICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKCF0
 cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0p
 KQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAg
 ICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0K
 ICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
 Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
 OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
 IF9BbGxvYz46Og0KICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywg
 c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlw
 ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0K
 ICAgICAgICB7DQogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpDQog
 ICAgICAgICAgICBfX3NpemUgPSBfX3BvczsNCiAgICAgICAgICBkbw0KICAg
 ICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpl
 cShfTV9kYXRhKClbX19zaXplXSwgX19jKSkNCiAgICAgICAgICAgICAgICBy
 ZXR1cm4gX19zaXplOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxl
 IChfX3NpemUtLSk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNp
 Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21w
 YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFz
 aWNfc3RyaW5nJiBfX3N0cikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5
 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90eXBlIF9f
 b3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3Np
 emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
 bmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1p
 bihfX3NpemUgLSBfX3BvcywgX19uKTsNCiAgICAgIHNpemVfdHlwZSBfX2xl
 biA9IG1pbihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0
 cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIu
 ZGF0YSgpLCBfX2xlbik7DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19y
 ID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAg
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19z
 dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21wYXJl
 KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNp
 Y19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z
 Miwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90
 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBf
 X29zaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zMSA+IF9f
 c2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQ0KICAgICAgICBfX3Rocm93X291
 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7DQoNCiAgICAg
 IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19u
 MSk7DQogICAgICBzaXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAt
 IF9fcG9zMiwgX19uMik7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o
 X19yc2l6ZSwgX19yb3NpemUpOw0KICAgICAgaW50IF9fciA9IHRyYWl0c190
 eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3Bv
 czIsIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBf
 X3JzaXplIC0gX19yb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0N
 Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0
 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo
 Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90
 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGludCBfX3IgPSB0
 cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsN
 CiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3NpemUgLSB0cmFp
 dHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICByZXR1cm4gX19yOw0KICAg
 IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2lj
 X3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgY29tcGFy
 ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hh
 clQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXpl
 ID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zID4gX19zaXplKQ0K
 ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj
 b21wYXJlIik7DQoNCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRz
 X3R5cGU6Omxlbmd0aChfX3MpOw0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUg
 PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOw0KICAgICAgc2l6ZV90eXBl
 IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9f
 ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBf
 X3MsIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBf
 X3JzaXplIC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0cmlu
 ZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgY29tcGFyZShzaXpl
 X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f
 cywNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdA0KICAgIHsN
 CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAg
 ICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29m
 X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6
 ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
 LCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6
 ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p
 bihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFpdHNf
 dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7
 DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f
 b3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KICB0ZW1wbGF0
 ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+
 DQogICAgdm9pZA0KICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0
 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLA0KICAgICAg
 ICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6
 c2l6ZV90eXBlIF9fYnVmc2l6KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlw
 ZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOw0KICAgICAgc2l6
 ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVf
 dHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsN
 CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19i
 eXRlcyk7DQogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOw0KICAg
 IH0NCn0NCiMgNTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDQzICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9jY3R5cGUuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDMNCiMgMSAiL3Vzci9p
 bmNsdWRlL2N0eXBlLmgiIDEgMyA0DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDIgMw0KIyA1
 NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X2NjdHlwZS5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6aXNh
 bG51bTsNCiAgdXNpbmcgOjppc2FscGhhOw0KICB1c2luZyA6OmlzY250cmw7
 DQogIHVzaW5nIDo6aXNkaWdpdDsNCiAgdXNpbmcgOjppc2dyYXBoOw0KICB1
 c2luZyA6OmlzbG93ZXI7DQogIHVzaW5nIDo6aXNwcmludDsNCiAgdXNpbmcg
 Ojppc3B1bmN0Ow0KICB1c2luZyA6Omlzc3BhY2U7DQogIHVzaW5nIDo6aXN1
 cHBlcjsNCiAgdXNpbmcgOjppc3hkaWdpdDsNCiAgdXNpbmcgOjp0b2xvd2Vy
 Ow0KICB1c2luZyA6OnRvdXBwZXI7DQp9DQojIDQ0ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQoj
 IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1
 bmN0ZXhjZXB0LmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmlu
 ZXMuaCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0
 ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQp
 Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0K
 DQogIHZvaWQNCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lk
 DQogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAg
 X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
 aWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsN
 Cg0KICB2b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj
 aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3Io
 Y29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29m
 X3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
 X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog
 IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2
 b2lkDQogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z
 KTsNCg0KICB2b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0
 IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1
 cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgNDUgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCg0K
 bmFtZXNwYWNlIHN0ZA0Kew0KIyA1NiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY2xhc3MgdmVj
 dG9yOw0KICBjbGFzcyBsb2NhbGU7DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3NwYWNlKF9DaGFy
 VCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChfQ2hhclQsIGNv
 bnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
 CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBs
 b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
 aW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxl
 Jik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu
 ZSBib29sDQogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v
 bA0KICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg
 ICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNw
 dW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzeGRpZ2l0
 KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNhbG51bShfQ2hh
 clQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZ3JhcGgoX0NoYXJULCBj
 b25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
 DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBwZXIoX0NoYXJULCBjb25z
 dCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
 ICAgaW5saW5lIF9DaGFyVA0KICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBs
 b2NhbGUmKTsNCg0KDQoNCiAgY2xhc3MgY3R5cGVfYmFzZTsNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlOw0KICB0ZW1w
 bGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY3R5cGVfYnluYW1lOw0KDQoN
 CiAgY2xhc3MgY29kZWN2dF9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+
 DQogICAgY2xhc3MgY29kZWN2dDsNCiAgdGVtcGxhdGU8PiBjbGFzcyBjb2Rl
 Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47DQoNCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5h
 bWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsNCg0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
 IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgbnVt
 X2dldDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 T3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg
 Y2xhc3MgbnVtX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj
 bGFzcyBudW1wdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj
 bGFzcyBudW1wdW5jdF9ieW5hbWU7DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQ+DQogICAgY2xhc3MgY29sbGF0ZTsNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPiBjbGFzcw0KICAgIGNvbGxhdGVfYnluYW1lOw0KDQoN
 CiAgY2xhc3MgdGltZV9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
 aGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0
 ZXJhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
 ciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3Mg
 dGltZV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0K
 ICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsNCg0KDQogIGNsYXNzIG1vbmV5
 X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg
 Y2xhc3MgbW9uZXlfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
 clQ+ID4NCiAgICBjbGFzcyBtb25leV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1v
 bmV5cHVuY3Q7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
 SW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOw0K
 DQoNCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2VzOw0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOw0K
 DQoNCiAgY2xhc3MgbG9jYWxlDQogIHsNCiAgcHVibGljOg0KDQogICAgdHlw
 ZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7DQoNCg0KICAgIGNsYXNzIGZh
 Y2V0Ow0KICAgIGNsYXNzIGlkOw0KICAgIGNsYXNzIF9JbXBsOw0KDQogICAg
 ZnJpZW5kIGNsYXNzIGZhY2V0Ow0KICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsN
 Cg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVu
 ZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxl
 Jik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBm
 cmllbmQgYm9vbA0KICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRo
 cm93KCk7DQoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUg
 PSAwOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8
 IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8
 PCAxOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwg
 PDwgMjsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8
 IDM7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwg
 PDwgNDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAx
 TCA8PCA1Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29s
 bGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVz
 c2FnZXMpOw0KDQoNCiAgICBsb2NhbGUoKSB0aHJvdygpOw0KDQogICAgbG9j
 YWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsNCg0KICAgIGV4
 cGxpY2l0DQogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fc3RkX25hbWUpOw0K
 DQogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFy
 KiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsNCg0KICAgIGxvY2FsZShjb25zdCBs
 b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkg
 X19jYXQpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAg
 ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2Yp
 Ow0KDQogICAgfmxvY2FsZSgpIHRocm93KCk7DQoNCiAgICBjb25zdCBsb2Nh
 bGUmDQogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhy
 b3coKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg
 IGxvY2FsZQ0KICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIp
 Ow0KDQoNCiAgICBzdHJpbmcNCiAgICBuYW1lKCkgY29uc3Q7DQoNCiAgICBi
 b29sDQogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNv
 bnN0IHRocm93ICgpOw0KDQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRv
 ciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkNCiAg
 ICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9DQoN
 CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0
 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgICAgYm9vbA0KICAgICAgb3BlcmF0
 b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxv
 Yz4mIF9fczEsDQogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
 ZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7DQoNCg0K
 ICAgIHN0YXRpYyBsb2NhbGUNCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7
 DQoNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJg0KICAgIGNsYXNzaWMoKTsN
 Cg0KICBwcml2YXRlOg0KDQogICAgX0ltcGwqIF9NX2ltcGw7DQoNCg0KICAg
 IHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsNCg0KDQogICAgc3RhdGljIF9J
 bXBsKiBfU19nbG9iYWw7DQoNCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9T
 X251bV9jYXRlZ29yaWVzID0gNjsNCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
 IF9TX251bV9mYWNldHMgPSAxMzsNCg0KICAgIGV4cGxpY2l0DQogICAgbG9j
 YWxlKF9JbXBsKikgdGhyb3coKTsNCg0KICAgIHN0YXRpYyBpbmxpbmUgdm9p
 ZA0KICAgIF9TX2luaXRpYWxpemUoKQ0KICAgIHsgaWYgKCFfU19jbGFzc2lj
 KSBjbGFzc2ljKCk7IH0NCg0KICAgIHN0YXRpYyBjYXRlZ29yeQ0KICAgIF9T
 X25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7DQoNCiAgICB2b2lkDQog
 ICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxv
 Y2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsNCiAgfTsNCg0KDQoNCiAg
 Y2xhc3MgbG9jYWxlOjpfSW1wbA0KICB7DQogIHB1YmxpYzoNCg0KICAgIHR5
 cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZhY2V0Kj4gPiBfX3Zl
 Y19mYWNldDsNCg0KDQogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBm
 cmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsNCg0KICAgIHRlbXBsYXRlPHR5
 cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmDQog
 ICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQoNCiAgICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBmcmllbmQgYm9vbA0KICAgICAg
 aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7DQoNCiAgcHJpdmF0
 ZToNCg0KICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOw0KICAgIF9fdmVjX2Zh
 Y2V0KiBfTV9mYWNldHM7DQogICAgc3RyaW5nIF9NX25hbWVzW19TX251bV9j
 YXRlZ29yaWVzXTsNCiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOw0KICAg
 IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtd
 Ow0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9u
 dW1lcmljW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0
 IF9TX2lkX2NvbGxhdGVbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp
 ZCogY29uc3QgX1NfaWRfdGltZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2Nh
 bGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOw0KICAgIHN0YXRpYyBj
 b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOw0KICAg
 IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFj
 ZXRfY2F0ZWdvcmllc1tdOw0KDQogICAgaW5saW5lIHZvaWQNCiAgICBfTV9h
 ZGRfcmVmZXJlbmNlKCkgdGhyb3coKQ0KICAgIHsgKytfTV9yZWZlcmVuY2Vz
 OyB9DQoNCiAgICBpbmxpbmUgdm9pZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVu
 Y2UoKSB0aHJvdygpDQogICAgew0KICAgICAgaWYgKF9NX3JlZmVyZW5jZXMt
 LSA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAg
 ICB7IGRlbGV0ZSB0aGlzOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAg
 ICAgICAgICAgeyB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBfSW1wbChj
 b25zdCBfSW1wbCYsIHNpemVfdCk7DQogICAgX0ltcGwoc3RyaW5nIF9fbmFt
 ZSwgc2l6ZV90KTsNCiAgIH5fSW1wbCgpIHRocm93KCk7DQoNCiAgICBib29s
 DQogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkNCiAgICB7DQogICAgICBib29s
 IF9fcmV0ID0gdHJ1ZTsNCiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
 X1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpDQogICAgICAgIF9fcmV0ICY9
 IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kgKyAxXTsNCiAgICAgIHJldHVy
 biBfX3JldDsNCiAgICB9DQogICAgdm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0
 ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsNCg0KICAgIHZvaWQN
 CiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3Qg
 bG9jYWxlOjppZCogY29uc3QqKTsNCg0KICAgIHZvaWQNCiAgICBfTV9yZXBs
 YWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOw0K
 DQogICAgdm9pZA0KICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxl
 OjppZCosIGZhY2V0Kik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
 ZXQ+DQogICAgICBpbmxpbmUgdm9pZA0KICAgICAgX01faW5pdF9mYWNldChf
 RmFjZXQqIF9fZmFjZXQpDQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9G
 YWNldDo6aWQsIF9fZmFjZXQpOyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0ZhY2V0Pg0KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2Fs
 ZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpDQogICAgew0KICAgICAgX01faW1w
 bCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsNCiAgICAgIF9N
 X2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7DQog
 ICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdv
 cmllczsgKytfX2kpDQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0g
 PSAiKiI7DQogICAgfQ0KDQoNCiAgY2xhc3MgbG9jYWxlOjpmYWNldA0KICB7
 DQogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBmcmllbmQgY2xhc3Mg
 bG9jYWxlOjpfSW1wbDsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQN
 CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsNCg0KICAg
 IHZpcnR1YWwNCiAgICB+ZmFjZXQoKSB7IH07DQoNCiAgICBzdGF0aWMgdm9p
 ZA0KICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2Ms
 IGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgICBzdGF0aWMgdm9pZA0KICAgIF9T
 X2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsNCg0KICBw
 cml2YXRlOg0KICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOw0KDQogICAgdm9p
 ZA0KICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAgdm9p
 ZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAg
 ZmFjZXQoY29uc3QgZmFjZXQmKTsNCg0KICAgIHZvaWQNCiAgICBvcGVyYXRv
 cj0oY29uc3QgZmFjZXQmKTsNCiAgfTsNCg0KDQoNCiAgY2xhc3MgbG9jYWxl
 OjppZA0KICB7DQogIHByaXZhdGU6DQogICAgZnJpZW5kIGNsYXNzIGxvY2Fs
 ZTsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsNCiAgICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBmcmllbmQgY29uc3QgX0Zh
 Y2V0Jg0KICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOw0KICAgIHRl
 bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29sDQog
 ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7DQoNCg0K
 DQoNCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsNCg0KDQogICAgc3Rh
 dGljIHNpemVfdCBfU19oaWdod2F0ZXI7DQoNCiAgICB2b2lkDQogICAgb3Bl
 cmF0b3I9KGNvbnN0IGlkJik7DQoNCiAgICBpZChjb25zdCBpZCYpOw0KDQog
 IHB1YmxpYzoNCg0KDQoNCiAgICBpZCgpIHsgfQ0KICB9Ow0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBjb25zdCBfRmFjZXQmDQogICAg
 dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNv
 bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7DQp9DQojIDQ0ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIg
 Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9pb3NfYmFzZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMNCg0KbmFtZXNwYWNl
 IHN0ZA0Kew0KDQoNCg0KDQogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lv
 c19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9z
 X0ZtdGZsYWdzDQogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv
 c19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3Rh
 dGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg
 fQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfChfSW9z
 X0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJu
 IF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGlj
 X2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdz
 DQogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFn
 cyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8
 aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlu
 bGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFn
 cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX19hID0g
 X19hIHwgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3Bl
 cmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i
 KQ0KICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUg
 X0lvc19GbXRmbGFncw0KICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9f
 YSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe
 IF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9y
 fihfSW9zX0ZtdGZsYWdzIF9fYSkNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn
 cyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQ0KDQoNCiAgZW51bSBfSW9z
 X09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07
 DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3ImKF9Jb3Nf
 T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4g
 X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
 Y2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUN
 CiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2Rl
 IF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp
 bnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5s
 aW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUg
 X19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVu
 bW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+
 KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0
 b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0K
 ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lv
 c19PcGVubW9kZQ0KICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwg
 X0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9f
 YjsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yXj0o
 X0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyBy
 ZXR1cm4gX19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Bl
 bm1vZGUNCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQ0KICB7IHJl
 dHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9
 DQoNCg0KICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2Vu
 ZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBv
 cGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikN
 CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19h
 KSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lv
 c19Jb3N0YXRlDQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9z
 X0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGlj
 X2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0K
 DQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JeKF9Jb3NfSW9z
 dGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3Nf
 SW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxp
 bnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVy
 YXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0K
 ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lv
 c19Jb3N0YXRlDQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9J
 b3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg
 fQ0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JePShfSW9z
 X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4g
 X19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0K
 ICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkNCiAgeyByZXR1cm4gX0lv
 c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCiAgZW51
 bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAx
 NiB9Ow0KDQoNCiAgY2xhc3MgaW9zX2Jhc2UNCiAgew0KICBwdWJsaWM6DQoN
 Cg0KICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uDQogICAg
 ew0KICAgIHB1YmxpYzoNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgZmFp
 bHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOw0KDQogICAgICB2
 aXJ0dWFsDQogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7DQoNCiAgICAgIHZp
 cnR1YWwgY29uc3QgY2hhcioNCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygp
 Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGVudW0geyBfTV9idWZzaXplID0g
 MjU2IH07DQogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07DQoNCiAg
 ICB9Ow0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7
 DQoNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10
 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7DQogICAgc3RhdGlj
 IGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
 U19kZWMpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZt
 dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7DQogICAgc3RhdGljIGNv
 bnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19o
 ZXgpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZt
 dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7DQogICAgc3RhdGlj
 IGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
 X1NfbGVmdCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZt
 dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOw0KICAgIHN0YXRpYyBjb25z
 dCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19y
 aWdodCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMg
 PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7DQogICAg
 c3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19p
 b3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsNCiAgICBzdGF0aWMgY29uc3QgZm10
 ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3No
 b3dwb2ludCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3Mg
 PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7DQogICAgc3Rh
 dGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2Zs
 YWdzOjpfU19za2lwd3MpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1
 bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOw0K
 ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFn
 cyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsNCiAgICBzdGF0aWMgY29u
 c3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFn
 czo6X1NfYWRqdXN0ZmllbGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
 cyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZp
 ZWxkKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9
 IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsNCg0KDQog
 ICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsNCiAgICBzdGF0aWMg
 Y29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf
 U19iYWRiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9
 IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7DQogICAgc3RhdGlj
 IGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6
 Ol9TX2ZhaWxiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2Ri
 aXQgPSBpb3N0YXRlKDApOw0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1v
 ZGUgb3Blbm1vZGU7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9
 IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOw0KICAgIHN0YXRpYyBj
 b25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf
 YXRlKTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Bl
 bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7DQogICAgc3RhdGljIGNvbnN0
 IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsN
 CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19p
 b3NfZmxhZ3M6Ol9TX291dCk7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2Rl
 IHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsNCg0K
 DQogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsNCiAgICBzdGF0
 aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOw0KICAgIHN0YXRp
 YyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7DQogICAgc3RhdGlj
 IGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsNCiMgMjE2ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5o
 IiAzDQogICAgZW51bSBldmVudA0KICAgIHsNCiAgICAgIGVyYXNlX2V2ZW50
 LA0KICAgICAgaW1idWVfZXZlbnQsDQogICAgICBjb3B5Zm10X2V2ZW50DQog
 ICAgfTsNCg0KICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAo
 ZXZlbnQsIGlvc19iYXNlJiwgaW50KTsNCg0KICAgIHZvaWQNCiAgICByZWdp
 c3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRl
 eCk7DQoNCiAgcHJvdGVjdGVkOg0KDQogICAgc3RyZWFtc2l6ZSBfTV9wcmVj
 aXNpb247DQogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsNCiAgICBmbXRmbGFn
 cyBfTV9mbGFnczsNCg0KDQoNCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QN
 CiAgICB7DQoNCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0Ow0KICAg
 ICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOw0KICAgICAgaW50
 IF9NX2luZGV4Ow0KICAgICAgaW50IF9NX3JlZmNvdW50Ow0KDQogICAgICBf
 Q2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwg
 aW50IF9faW5kZXgsDQogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tf
 bGlzdCogX19jYikNCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19m
 biksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0NCg0K
 ICAgICAgdm9pZA0KICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9y
 ZWZjb3VudDsgfQ0KDQogICAgICBpbnQNCiAgICAgIF9NX3JlbW92ZV9yZWZl
 cmVuY2UoKSB7IHJldHVybiBfTV9yZWZjb3VudC0tOyB9DQogICAgfTsNCg0K
 ICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOw0KDQogICAgdm9p
 ZA0KICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7
 DQoNCiAgICB2b2lkDQogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7
 DQoNCg0KICAgIHN0cnVjdCBfV29yZHMNCiAgICB7DQogICAgICB2b2lkKiBf
 TV9wd29yZDsNCiAgICAgIGxvbmcgX01faXdvcmQ7DQogICAgfTsNCg0KICAg
 IHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4Ow0KICAgIF9X
 b3JkcyBfTV93b3JkX2FycmF5W19TX2xvY2FsX3dvcmRzXTsNCiAgICBfV29y
 ZHMgX01fZHVtbXk7DQogICAgX1dvcmRzKiBfTV93b3JkczsNCiAgICBpbnQg
 X01fd29yZF9saW1pdDsNCg0KICAgIF9Xb3JkcyYNCiAgICBfTV9ncm93X3dv
 cmRzKGludCBfX2luZGV4KTsNCg0KDQogICAgbG9jYWxlIF9NX2lvc19sb2Nh
 bGU7DQoNCiAgICB2b2lkDQogICAgX01faW5pdCgpOw0KDQogIHB1YmxpYzoN
 Cg0KDQoNCg0KDQogICAgY2xhc3MgSW5pdA0KICAgIHsNCiAgICAgIGZyaWVu
 ZCBjbGFzcyBpb3NfYmFzZTsNCiAgICBwdWJsaWM6DQogICAgICBJbml0KCk7
 DQogICAgICB+SW5pdCgpOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAg
 X1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7DQoNCiAgICAgIHN0YXRpYyB2
 b2lkDQogICAgICBfU19pb3NfZGVzdHJveSgpOw0KDQogICAgcHJpdmF0ZToN
 CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsNCiAgICAgIHN0
 YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOw0KICAgIH07DQoNCg0K
 ICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZsYWdzKCkgY29uc3QgeyByZXR1
 cm4gX01fZmxhZ3M7IH0NCg0KICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZs
 YWdzKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3Mg
 X19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsN
 CiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgZm10
 ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAg
 ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdz
 IHw9IF9fZm10Zmw7DQogICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQog
 ICAgaW5saW5lIGZtdGZsYWdzDQogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZs
 LCBmbXRmbGFncyBfX21hc2spDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19v
 bGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7DQog
 ICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7DQogICAgICBy
 ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQNCiAgICB1
 bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7
 IH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKCkg
 Y29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9DQoNCiAgICBpbmxpbmUg
 c3RyZWFtc2l6ZQ0KICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykN
 CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9u
 Ow0KICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOw0KICAgICAgcmV0dXJu
 IF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAg
 d2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQ0KDQogICAgaW5s
 aW5lIHN0cmVhbXNpemUNCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkN
 CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7DQog
 ICAgICBfTV93aWR0aCA9IF9fd2lkZTsNCiAgICAgIHJldHVybiBfX29sZDsN
 CiAgICB9DQoNCiAgICBzdGF0aWMgYm9vbA0KICAgIHN5bmNfd2l0aF9zdGRp
 byhib29sIF9fc3luYyA9IHRydWUpOw0KDQoNCiAgICBsb2NhbGUNCiAgICBp
 bWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgIGlubGluZSBsb2Nh
 bGUNCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxl
 OyB9DQoNCg0KICAgIHN0YXRpYyBpbnQNCiAgICB4YWxsb2MoKSB0aHJvdygp
 Ow0KDQogICAgaW5saW5lIGxvbmcmDQogICAgaXdvcmQoaW50IF9faXgpDQog
 ICAgew0KICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf
 bGltaXQpDQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19f
 aXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsNCiAgICAgIHJldHVybiBfX3dv
 cmQuX01faXdvcmQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQqJg0KICAg
 IHB3b3JkKGludCBfX2l4KQ0KICAgIHsNCiAgICAgIF9Xb3JkcyYgX193b3Jk
 ID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQ0KICAgICAgICAgICAgICAgICAg
 ICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7
 DQogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOw0KICAgIH0NCg0KDQog
 ICAgfmlvc19iYXNlKCk7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGlvc19iYXNl
 KCk7DQoNCg0KICBwcml2YXRlOg0KICAgIGlvc19iYXNlKGNvbnN0IGlvc19i
 YXNlJik7DQoNCiAgICBpb3NfYmFzZSYNCiAgICBvcGVyYXRvcj0oY29uc3Qg
 aW9zX2Jhc2UmKTsNCg0KICB9Ow0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K
 ICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz
 ZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jh
 c2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vYm9vbGFscGhh
 KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlv
 c19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0N
 Cg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3diYXNlKGlvc19iYXNlJiBf
 X2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jh
 c2UpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9z
 X2Jhc2UmDQogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K
 ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsNCiAgICBy
 ZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBz
 aG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5z
 ZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBfX2Jhc2U7
 DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vc2hvd3BvaW50KGlv
 c19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19i
 YXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0K
 ICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFz
 ZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsN
 CiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNl
 Jg0KICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9f
 YmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOw0KICAgIHJldHVybiBf
 X2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNraXB3cyhp
 b3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh
 c2U6OnNraXB3cyk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlu
 bGluZSBpb3NfYmFzZSYNCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkN
 CiAgew0KICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7DQog
 ICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYN
 CiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jh
 c2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19i
 YXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3VwcGVyY2Fz
 ZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihp
 b3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9
 DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICB1bml0YnVmKGlvc19iYXNlJiBf
 X2Jhc2UpDQogIHsNCiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRi
 dWYpOw0KICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlv
 c19iYXNlJg0KICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K
 ICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsNCiAgICAg
 cmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K
 ICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgIF9fYmFz
 ZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZp
 ZWxkKTsNCiAgICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
 b3NfYmFzZSYNCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
 X19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3Rm
 aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
 b3NfYmFzZSYNCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg
 IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVz
 dGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxp
 bmUgaW9zX2Jhc2UmDQogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog
 ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2Vm
 aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
 b3NfYmFzZSYNCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBf
 X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxk
 KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i
 YXNlJg0KICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz
 ZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOw0K
 ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQogIGlubGluZSBpb3NfYmFz
 ZSYNCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz
 ZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQp
 Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jh
 c2UmDQogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg
 IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6
 ZmxvYXRmaWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQp9DQoj
 IDQ1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEgMw0KIyAzOCAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVh
 bWJ1Zi5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgi
 IDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMN
 CiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9zdHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzDQojIDQy
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 c3RyZWFtYnVmLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzDQojIDQzICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFt
 YnVmLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMNCiMgNDQgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIg
 MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg
 ICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
 PiYgX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
 dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAg
 ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
 b3V0KTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYNCiAgICB7
 DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
 cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAg
 ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBv
 c190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
 dHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRl
 ZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVk
 ZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9f
 c3RyZWFtYnVmX3R5cGU7DQoNCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19p
 b3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xh
 c3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAg
 ICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJh
 aXRzX3R5cGU+Ow0KICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRl
 cmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQg
 Y2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190
 eXBlPjsNCg0KICAgICAgZnJpZW5kIHN0cmVhbXNpemUNCiAgICAgIF9fY29w
 eV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5
 cGU+JiBfX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJl
 YW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQp
 Ow0KDQogICAgcHJvdGVjdGVkOg0KDQoNCg0KDQoNCg0KICAgICAgY2hhcl90
 eXBlKiBfTV9idWY7DQoNCg0KICAgICAgaW50X3R5cGUgX01fYnVmX3NpemU7
 DQoNCg0KICAgICAgaW50X3R5cGUgX01fYnVmX3NpemVfb3B0Ow0KDQoNCg0K
 ICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsNCg0KDQoNCg0KDQoNCiAgICAg
 IGNoYXJfdHlwZSogX01faW5fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfTV9p
 bl9jdXI7DQogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsNCiAgICAgIGNo
 YXJfdHlwZSogX01fb3V0X2JlZzsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0
 X2N1cjsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsNCg0KDQogICAg
 ICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsNCg0KDQogICAgICBsb2Nh
 bGUgX01fYnVmX2xvY2FsZTsNCg0KDQogICAgICBib29sIF9NX2J1Zl9sb2Nh
 bGVfaW5pdDsNCg0KDQoNCg0KDQoNCiAgICAgIGludF90eXBlIF9NX3BiYWNr
 X3NpemU7DQogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOw0KICAgICAgY2hh
 cl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsNCiAgICAgIGNoYXJfdHlwZSog
 X01fcGJhY2tfZW5kX3NhdmU7DQogICAgICBib29sIF9NX3BiYWNrX2luaXQ7
 DQoNCg0KDQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgp
 DQogICAgICB7DQogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkNCiAgICAg
 ICAgICB7DQogICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9pbl9l
 bmQgLSBfTV9pbl9jdXI7DQogICAgICAgICAgICBpbnRfdHlwZSBfX2xlbiA9
 IG1pbihfTV9wYmFja19zaXplLCBfX2Rpc3QpOw0KICAgICAgICAgICAgdHJh
 aXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOw0K
 ICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7DQog
 ICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsNCiAg
 ICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9w
 YmFjayArIF9fbGVuKTsNCiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0
 cnVlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCg0KICAgICAgdm9p
 ZA0KICAgICAgX01fcGJhY2tfZGVzdHJveSgpDQogICAgICB7DQogICAgICAg
 IGlmIChfTV9wYmFja19pbml0KQ0KICAgICAgICAgIHsNCg0KICAgICAgICAg
 ICAgaW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7
 DQoNCg0KICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfZW5kID0gMDsNCiAg
 ICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0g
 X01fcGJhY2s7DQogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0g
 X01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7DQogICAgICAgICAgICBpZiAo
 X19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQ0KICAgICAgICAgICAgICBfX29m
 Zl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47DQoNCiAgICAgICAg
 ICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9f
 b2ZmX2N1ciwNCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5k
 X3NhdmUgKyBfX29mZl9lbmQpOw0KICAgICAgICAgICAgX01fcGJhY2tfY3Vy
 X3NhdmUgPSBfX251bGw7DQogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2
 ZSA9IF9fbnVsbDsNCiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxz
 ZTsNCiAgICAgICAgICB9DQogICAgICB9DQoNCg0KDQogICAgICB2b2lkDQog
 ICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pDQogICAgICB7DQog
 ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsNCiAgICAgICAg
 X01faW5fY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBf
 TV9idWZfdW5pZmllZCkNCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsN
 CiAgICAgIH0NCiMgMTkzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMNCiAgICAgIHZvaWQNCiAg
 ICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pDQogICAgICB7DQog
 ICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7DQoNCiAgICAgICAg
 X01fb3V0X2N1ciArPSBfX247DQogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBf
 TV9idWZfdW5pZmllZCkNCiAgICAgICAgICBfTV9pbl9jdXIgKz0gX19uOw0K
 ICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpDQogICAgICAg
 ICAgew0KICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7DQoN
 CiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgICAgICAgX01f
 aW5fZW5kICs9IF9fbjsNCiAgICAgICAgICB9DQogICAgICB9DQoNCg0KDQoN
 CiAgICAgIG9mZl90eXBlDQogICAgICBfTV9vdXRfYnVmX3NpemUoKQ0KICAg
 ICAgew0KICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7DQogICAgICAgIGlm
 IChfTV9vdXRfY3VyKQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgaWYg
 KF9NX291dF9iZWcgPT0gX01fYnVmKQ0KICAgICAgICAgICAgICBfX3JldCA9
 IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7DQoNCiAg
 ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRf
 ZW5kIC0gX01fb3V0X2N1cjsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVy
 biBfX3JldDsNCiAgICAgIH0NCiMgMjM2ICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMNCiAgICAg
 IHZvaWQNCiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQpDQogICAg
 ICB7DQogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQ0KICAg
 ICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7DQog
 ICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkNCiAgICAgICAg
 ICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsNCiAgICAgIH0NCg0KICAg
 ICAgdm9pZA0KICAgICAgX01fc2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9f
 b2ZmKQ0KICAgICAgew0KICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9k
 ZSAmIGlvc19iYXNlOjppbjsNCiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBf
 TV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAgICAgaWYgKF9fdGVzdGlu
 KQ0KICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1
 ZiArIF9fb2ZmKTsNCiAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAgICAgICAg
 ICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOw0KICAgICAg
 fQ0KDQogICAgICBib29sDQogICAgICBfTV9pc19pbmRldGVybWluYXRlKHZv
 aWQpDQogICAgICB7DQogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsNCg0K
 ICAgICAgICBpZiAoX01fYnVmKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAg
 IGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQ0KICAgICAgICAgICAgICBf
 X3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09
 IF9NX2luX2VuZDsNCiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jh
 c2U6Om91dCkNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09
 IF9NX291dF9jdXIgJiYgX01fb3V0X2N1ciA9PSBfTV9vdXRfZW5kOw0KICAg
 ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQog
 IHB1YmxpYzoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19zdHJlYW1i
 dWYoKQ0KICAgICAgew0KICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNl
 Ow0KICAgICAgICBfTV9idWZfc2l6ZSA9IDA7DQogICAgICAgIF9NX2J1Zl9z
 aXplX29wdCA9IDA7DQogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Bl
 bm1vZGUoMCk7DQogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNl
 Ow0KICAgICAgfQ0KDQoNCiAgICAgIGxvY2FsZQ0KICAgICAgcHViaW1idWUo
 Y29uc3QgbG9jYWxlICZfX2xvYykNCiAgICAgIHsNCiAgICAgICAgbG9jYWxl
 IF9fdG1wKHRoaXMtPmdldGxvYygpKTsNCiAgICAgICAgdGhpcy0+aW1idWUo
 X19sb2MpOw0KICAgICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQoNCiAg
 ICAgIGxvY2FsZQ0KICAgICAgZ2V0bG9jKCkgY29uc3QNCiAgICAgIHsNCiAg
 ICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkNCiAgICAgICAgICByZXR1
 cm4gX01fYnVmX2xvY2FsZTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJl
 dHVybiBsb2NhbGUoKTsNCiAgICAgIH0NCg0KDQogICAgICBfX3N0cmVhbWJ1
 Zl90eXBlKg0KICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJl
 YW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms
 IF9fbik7IH0NCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHB1YnNlZWtvZmYo
 b2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LA0KICAg
 ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z
 X2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkNCiAgICAgIHsgcmV0dXJuIHRo
 aXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9DQoNCiAgICAg
 IHBvc190eXBlDQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsDQog
 ICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
 b3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4g
 dGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9DQoNCiAgICAgIGludA0K
 ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQ0KDQoN
 Cg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAgaW5fYXZhaWwoKQ0KICAgICAg
 ew0KICAgICAgICBzdHJlYW1zaXplIF9fcmV0Ow0KICAgICAgICBpZiAoX01f
 aW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICB7
 DQogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkNCiAgICAgICAgICAg
 ICAgew0KICAgICAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBf
 TV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAg
 ICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0g
 X01fcGJhY2s7DQogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVu
 IC0gX19wYmFja19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
 IGVsc2UNCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0g
 dGhpcy0+Z3B0cigpOw0KICAgICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAg
 ICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7DQogICAgICAgIHJl
 dHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAg
 IHNuZXh0YygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0g
 dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICByZXR1cm4gKHRoaXMtPnNi
 dW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsNCiAg
 ICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNidW1wYygpOw0KDQog
 ICAgICBpbnRfdHlwZQ0KICAgICAgc2dldGMoKQ0KICAgICAgew0KICAgICAg
 ICBpbnRfdHlwZSBfX3JldDsNCiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBf
 TV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgICAgX19yZXQgPSB0cmFp
 dHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsNCiAgICAg
 ICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7
 DQogICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgc3Ry
 ZWFtc2l6ZQ0KICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNp
 emUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19u
 KTsgfQ0KDQoNCiAgICAgIGludF90eXBlDQogICAgICBzcHV0YmFja2MoY2hh
 cl90eXBlIF9fYyk7DQoNCiAgICAgIGludF90eXBlDQogICAgICBzdW5nZXRj
 KCk7DQoNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRjKGNoYXJfdHlw
 ZSBfX2MpOw0KDQogICAgICBzdHJlYW1zaXplDQogICAgICBzcHV0bihjb25z
 dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJl
 dHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9DQoNCiAgICBwcm90ZWN0
 ZWQ6DQogICAgICBiYXNpY19zdHJlYW1idWYoKQ0KICAgICAgOiBfTV9idWYo
 X19udWxsKSwgX01fYnVmX3NpemUoMCksDQogICAgICBfTV9idWZfc2l6ZV9v
 cHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDEwMjQpKSwgX01fYnVmX3VuaWZp
 ZWQoZmFsc2UpLA0KICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCks
 IF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwN
 CiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5t
 b2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksDQogICAgICBfTV9i
 dWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19zaXplKDEpLCBfTV9w
 YmFjayhfX251bGwpLA0KICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxs
 KSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChm
 YWxzZSkNCiAgICAgIHsgfQ0KDQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAg
 IGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9DQoNCiAgICAg
 IGNoYXJfdHlwZSoNCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9p
 bl9jdXI7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgZWdwdHIoKSBj
 b25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0NCg0KICAgICAgdm9pZA0KICAg
 ICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9DQoNCiAg
 ICAgIHZvaWQNCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJf
 dHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpDQogICAgICB7DQog
 ICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsNCiAgICAgICAgX01faW5fY3Vy
 ID0gX19nbmV4dDsNCiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOw0KICAg
 ICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcg
 JiYgX19nbmV4dCAmJiBfX2dlbmQpDQogICAgICAgICAgX01fbW9kZSA9IF9N
 X21vZGUgfCBpb3NfYmFzZTo6aW47DQogICAgICB9DQoNCg0KICAgICAgY2hh
 cl90eXBlKg0KICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf
 YmVnOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIHBwdHIoKSBjb25z
 dCB7IHJldHVybiBfTV9vdXRfY3VyOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoN
 CiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQ0K
 DQogICAgICB2b2lkDQogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9j
 dXIgKz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHAoY2hhcl90
 eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQ0KICAgICAgew0KICAg
 ICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsNCiAgICAg
 ICAgX01fb3V0X2VuZCA9IF9fcGVuZDsNCiAgICAgICAgaWYgKCEoX01fbW9k
 ZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpDQogICAg
 ICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0Ow0KICAg
 ICAgfQ0KDQoNCg0KICAgICAgdmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZShj
 b25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgICAgew0KICAgICAgICBfTV9idWZf
 bG9jYWxlX2luaXQgPSB0cnVlOw0KICAgICAgICBpZiAoX01fYnVmX2xvY2Fs
 ZSAhPSBfX2xvYykNCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7
 DQogICAgICB9DQoNCg0KICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8
 Y2hhcl90eXBlLF9UcmFpdHM+Kg0KICAgICAgc2V0YnVmKGNoYXJfdHlwZSos
 IHN0cmVhbXNpemUpDQogICAgICB7IHJldHVybiB0aGlzOyB9DQoNCiAgICAg
 IHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv
 c19iYXNlOjpzZWVrZGlyLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl
 bm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAg
 eyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQ0KDQogICAgICB2
 aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9zKHBvc190eXBlLA0KICAg
 ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4g
 fCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm
 X3R5cGUoLTEpKTsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3lu
 YygpIHsgcmV0dXJuIDA7IH0NCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNp
 emUNCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg
 dmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dldG4oY2hhcl90eXBlKiBf
 X3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlw
 ZQ0KICAgICAgdW5kZXJmbG93KCkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190
 eXBlOjplb2YoKTsgfQ0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAg
 ICB1ZmxvdygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fcmV0ID0g
 dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGVzdGVvZiA9
 IHRoaXMtPnVuZGVyZmxvdygpID09IF9fcmV0Ow0KICAgICAgICBib29sIF9f
 dGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f
 ZW5kOw0KICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5n
 KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
 cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAgICAgICAgICAgKytf
 TV9pbl9jdXI7DQogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYg
 X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpDQogICAgICAgICAgICAgICsrX01f
 b3V0X2N1cjsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3JldDsN
 CiAgICAgIH0NCg0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBw
 YmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAg
 ICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0NCg0KDQogICAgICB2
 aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5
 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGlu
 dF90eXBlDQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBl
 Ojplb2YoKSkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsg
 fQ0KIyA1MTYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0KICAgIHByaXZhdGU6DQogICAgICBi
 YXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpOw0KDQog
 ICAgICBfX3N0cmVhbWJ1Zl90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0
 IF9fc3RyZWFtYnVmX3R5cGUmKTsNCg0KICAgIH07DQoNCn0NCg0KDQoNCg0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dHJlYW1idWYudGNjIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMNCm5hbWVzcGFj
 ZSBzdGQgew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
 aXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
 VHJhaXRzPjo6DQogICAgc2J1bXBjKCkNCiAgICB7DQogICAgICBpbnRfdHlw
 ZSBfX3JldDsNCiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwg
 X01faW5fZW5kKQ0KICAgICAgICB7DQogICAgICAgICAgY2hhcl90eXBlIF9f
 YyA9ICpncHRyKCk7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7DQog
 ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19j
 KTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRo
 aXMtPnVmbG93KCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
 CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
 cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQog
 ICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgaW50
 X3R5cGUgX19yZXQ7DQogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1
 ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICBib29sIF9fdGVz
 dG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz
 LT5ncHRyKClbLTFdKTsNCiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVz
 dG5lKQ0KICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6
 dG9faW50X3R5cGUoX19jKSk7DQogICAgICBlbHNlDQogICAgICAgIHsNCiAg
 ICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQogICAgICAgICAgX19yZXQg
 PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7DQog
 ICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
 IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0K
 ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBz
 dW5nZXRjKCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAg
 IGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQ0KICAg
 ICAgICB7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOw0KICAgICAg
 ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9j
 dXIpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0g
 dGhpcy0+cGJhY2tmYWlsKCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAg
 fQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
 X1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
 VCwgX1RyYWl0cz46Og0KICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpDQogICAg
 ew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01fb3V0X2J1
 Zl9zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICAqX01fb3V0X2N1ciA9
 IF9fYzsNCiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7DQogICAgICAg
 ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsNCiAg
 ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRoaXMtPm92
 ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAg
 IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg
 ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgeHNn
 ZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQog
 ICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3Jl
 dCA8IF9fbikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2J1Zl9s
 ZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7DQogICAgICAgICAgaWYgKF9f
 YnVmX2xlbiA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHNp
 emVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAgICAgICAg
 ICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7
 DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5f
 Y3VyLCBfX2xlbik7DQogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOw0K
 ICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQogICAgICAgICAgICAgIF9N
 X2luX2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAg
 ICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsNCiAgICAgICAg
 ICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsNCiAgICAgICAg
 ICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAg
 ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFz
 c2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7
 DQogICAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAg
 IH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGJyZWFr
 Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19y
 ZXQ7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAg
 IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB4c3B1
 dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg
 IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KICAgICAgd2hpbGUg
 KF9fcmV0IDwgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgb2ZmX3R5cGUg
 X19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7DQogICAgICAgICAgaWYg
 KF9fYnVmX2xlbiA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg
 IG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7DQogICAgICAg
 ICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1h
 aW5pbmcpOw0KICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9v
 dXRfY3VyLCBfX3MsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19yZXQgKz0g
 X19sZW47DQogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsNCiAgICAgICAg
 ICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0N
 Cg0KICAgICAgICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsN
 CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3co
 dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsNCiAgICAgICAgICAg
 ICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICAgICAgKytfX3JldDsNCiAgICAgICAg
 ICAgICAgICAgICsrX19zOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
 ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg
 ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K
 DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAgICBfX2NvcHlfc3RyZWFt
 YnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsDQogICAg
 ICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
 YWl0cz4qIF9fc2JpbiwNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z
 dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkNCiAgew0KICAg
 ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
 ZTsNCg0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQogICAgICBzdHJl
 YW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsNCiAgICAg
 IHN0cmVhbXNpemUgX194dHJjdDsNCiAgICAgIGJvb2wgX190ZXN0cHV0ID0g
 X19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAgICB0cnkg
 ew0KICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAt
 MSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91
 dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7DQogICAgICAg
 ICAgICBfX3JldCArPSBfX3h0cmN0Ow0KICAgICAgICAgICAgX19zYmluLT5f
 TV9pbl9jdXJfbW92ZShfX3h0cmN0KTsNCiAgICAgICAgICAgIGlmIChfX3h0
 cmN0ID09IF9fYnVmc2l6ZSkNCiAgICAgICAgICAgICAgew0KICAgICAgICAg
 ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsNCiAgICAg
 ICAgICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQ0KICAgICAg
 ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRz
 dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAgICAgICAgICAg
 YnJlYWs7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
 X19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0KICAgICAgICAgICAg
 ICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGJyZWFrOw0K
 ICAgICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
 X19mYWlsKSB7DQogICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYg
 aW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApDQogICAgICAgICAgdGhyb3c7DQog
 ICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KfQ0KIyA1MzAg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
 dHJlYW1idWYuaCIgMiAzDQojIDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg
 MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9iYXNpY19pb3MuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMNCiMgMzYg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3NidWZf
 aXRlci5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIG9z
 dHJlYW1idWZfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRw
 dXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPg0KICAg
 IHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
 c3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
 X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoNCiAgICBwcml2YXRl
 Og0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7DQogICAgICBib29s
 IF9NX2ZhaWxlZDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZQ0KICAg
 ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhy
 b3cgKCkNCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxl
 ZCghX01fc2J1ZikgeyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Io
 c3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkNCiAgICAgIDogX01fc2J1
 ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQ0KDQogICAgICBvc3Ry
 ZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2Mp
 Ow0KDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0
 b3IqKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAg
 ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoaW50
 KSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBv
 c3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKygpIHRocm93
 KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGJvb2wNCiAg
 ICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIF9N
 X2ZhaWxlZDsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGlubGluZSBvc3RyZWFtYnVm
 X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3N0cmVhbWJ1Zl9p
 dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9f
 YykNCiAgICB7DQogICAgICBpZiAoIV9NX2ZhaWxlZCAmJg0KICAgICAgICAg
 IF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksX1Ry
 YWl0czo6ZW9mKCkpKQ0KICAgICAgX01fZmFpbGVkID0gdHJ1ZTsNCiAgICAg
 IHJldHVybiAqdGhpczsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBpc3Ry
 ZWFtYnVmX2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRf
 aXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90
 eXBlLA0KICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+
 DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg
 Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
 Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
 bnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
 VCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJh
 c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoN
 CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U
 cmFpdHM+IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZTsNCg0KICAgIHByaXZhdGU6
 DQoNCg0KDQoNCg0KDQoNCiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVm
 Ow0KICAgICAgaW50X3R5cGUgX01fYzsNCg0KICAgIHB1YmxpYzoNCiAgICAg
 IGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpDQogICAgICA6IF9NX3Ni
 dWYoX19udWxsKSwgX01fYygtMikgeyB9DQoNCiAgICAgIGlzdHJlYW1idWZf
 aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkNCiAgICAgIDog
 X01fc2J1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQ0KDQogICAgICBp
 c3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93
 KCkNCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7IH0NCg0KDQoN
 Cg0KICAgICAgY2hhcl90eXBlDQogICAgICBvcGVyYXRvciooKSBjb25zdA0K
 ICAgICAgew0KDQogICAgICAgIGNoYXJfdHlwZSBfX3JldDsNCiAgICAgICAg
 aWYgKF9NX3NidWYgJiYgX01fYyAhPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
 LTIpKQ0KICAgICAgICAgIF9fcmV0ID0gX01fYzsNCiAgICAgICAgZWxzZSBp
 ZiAoX01fc2J1ZikNCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0
 b19jaGFyX3R5cGUoX01fc2J1Zi0+c2dldGMoKSk7DQogICAgICAgIGVsc2UN
 CiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4odHJh
 aXRzX3R5cGU6OmVvZigpKTsNCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAg
 ICAgfQ0KDQogICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUmDQogICAgICBv
 cGVyYXRvcisrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKF9NX3NidWYpDQog
 ICAgICAgICAgX01fc2J1Zi0+c2J1bXBjKCk7DQogICAgICAgIF9NX2MgPSAt
 MjsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAgICBf
 X2lzdHJlYW1idWZpdGVyX3R5cGUNCiAgICAgIG9wZXJhdG9yKysoaW50KQ0K
 ICAgICAgew0KICAgICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUgX19vbGQg
 PSAqdGhpczsNCiAgICAgICAgaWYgKF9NX3NidWYpDQogICAgICAgICAgX19v
 bGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpOw0KICAgICAgICBfTV9jID0g
 LTI7DQogICAgICAgIHJldHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAg
 Ym9vbA0KICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBl
 JiBfX2IpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJh
 aXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhpc2VvZiA9ICFf
 TV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQogICAgICAg
 IGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmDQogICAgICAgICAgICAgICAg
 ICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQogICAg
 ICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2Vv
 ZiAmJiAhX19iZW9mKSk7DQogICAgICB9DQoNCg0KDQoNCiAgICAgIGJvb2wN
 CiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19i
 KSBjb25zdA0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRy
 YWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSAh
 X01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOw0KICAgICAg
 ICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1Zg0KICAgICAgICAgICAgICAg
 ICAgICAgIHx8IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOw0KICAg
 ICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNl
 b2YgJiYgIV9fYmVvZikpOw0KICAgICAgfQ0KDQogICAgfTsNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 aW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZf
 aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAgICAgICAg
 ICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
 JiBfX2IpDQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
 ICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1i
 dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAgICAg
 ICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
 dHM+JiBfX2IpDQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9DQp9
 DQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9iYXNpY19pb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
 bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzDQojIDQw
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
 bGVfZmFjZXRzLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMSAzDQojIDM3ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUu
 aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMNCiMg
 NDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9jdGltZS5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0
 DQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfY3RpbWUuaCIgMiAzDQojIDUzICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMw0KbmFtZXNwYWNl
 IHN0ZA0Kew0KICB1c2luZyA6OmNsb2NrX3Q7DQogIHVzaW5nIDo6dGltZV90
 Ow0KICB1c2luZyA6OnRtOw0KDQogIHVzaW5nIDo6Y2xvY2s7DQogIHVzaW5n
 IDo6ZGlmZnRpbWU7DQogIHVzaW5nIDo6bWt0aW1lOw0KICB1c2luZyA6OnRp
 bWU7DQogIHVzaW5nIDo6YXNjdGltZTsNCiAgdXNpbmcgOjpjdGltZTsNCiAg
 dXNpbmcgOjpnbXRpbWU7DQogIHVzaW5nIDo6bG9jYWx0aW1lOw0KICB1c2lu
 ZyA6OnN0cmZ0aW1lOw0KfQ0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
 cy5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0KDQoNCg0KDQpu
 YW1lc3BhY2Ugc3RkDQp7DQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jdHlw
 ZV9iYXNlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvY3R5cGVfYmFz
 ZS5oIiAzDQogIHN0cnVjdCBjdHlwZV9iYXNlDQogIHsNCg0KICAgIHR5cGVk
 ZWYgaW50KiBfX3RvX3R5cGU7DQoNCg0KDQogICAgdHlwZWRlZiB1bnNpZ25l
 ZCBpbnQgbWFzazsNCiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IDB4
 MDAwMDAwMDE7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAweDAw
 MDAwMDAyOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDAw
 NDAwMDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IDB4MDAwMDAw
 MDQ7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMHgwMDAwMDA4
 MDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IDB4MDAwMDAwMDg7
 DQogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAweDAwMDA4MDAwOw0K
 ICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMHgwMDAwMjAwMDsNCiAg
 ICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDB4MDAwMDAwMjA7DQogICAg
 c3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSAweDAwMDAwMDEwOw0KICAgIHN0
 YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gKDB4MDAwMDQwMDAgfCAweDAwMDAw
 MDA0KTsNCiAgfTsNCiMgNTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgX19jdHlwZV9hYnN0
 cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlw
 ZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf
 Q2hhclQgY2hhcl90eXBlOw0KDQogICAgICBib29sDQogICAgICBpcyhtYXNr
 IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo
 aXMtPmRvX2lzKF9fbSwgX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5
 cGUqDQogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNo
 YXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0DQogICAgICB7IHJl
 dHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3ZlYyk7IH0NCg0KICAg
 ICAgY29uc3QgY2hhcl90eXBlKg0KICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwg
 Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
 IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwg
 X19sbywgX19oaSk7IH0NCg0KICAgICAgY29uc3QgY2hhcl90eXBlKg0KICAg
 ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg
 Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4g
 dGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAg
 ICBjaGFyX3R5cGUNCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29u
 c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19jKTsgfQ0K
 DQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b3VwcGVyKGNoYXJf
 dHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAg
 ICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQ0K
 DQogICAgICBjaGFyX3R5cGUNCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9f
 YykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19j
 KTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b2xvd2Vy
 KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hp
 KTsgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIHdpZGVuKGNoYXIgX19j
 KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsg
 fQ0KDQogICAgICBjb25zdCBjaGFyKg0KICAgICAgd2lkZW4oY29uc3QgY2hh
 ciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19o
 aSwgX190byk7IH0NCg0KICAgICAgY2hhcg0KICAgICAgbmFycm93KGNoYXJf
 dHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQogICAgICB7IHJldHVy
 biB0aGlzLT5kb19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0NCg0KICAgICAg
 Y29uc3QgY2hhcl90eXBlKg0KICAgICAgbmFycm93KGNvbnN0IGNoYXJfdHlw
 ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAg
 ICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBf
 X3RvKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAg
 ICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6
 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgdmlydHVhbA0K
 ICAgICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQ0KDQogICAgICB2
 aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
 X19jKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
 eXBlKg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
 dCBjaGFyX3R5cGUqIF9faGksDQogICAgICAgICAgICBtYXNrKiBfX3ZlYykg
 Y29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoN
 CiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog
 X19sbywNCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hp
 KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
 Kg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw
 ZSogX19sbywNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
 X19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0K
 ICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsNCg0KICAg
 ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b3VwcGVy
 KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
 dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190
 b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFs
 IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl
 KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsNCg0K
 ICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIp
 IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAg
 ICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o
 aSwNCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9
 IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAgZG9fbmFycm93KGNo
 YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOw0KDQogICAgICB2
 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX25hcnJvdyhjb25z
 dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAg
 ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj
 b25zdCA9IDA7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVD4NCiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3Ry
 YWN0X2Jhc2U8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg
 IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw
 ZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsNCg0KICAgICAgZXhwbGljaXQNCiAg
 ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJh
 Y3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9DQoNCiAgICAgIHN0YXRpYyBs
 b2NhbGU6OmlkIGlkOw0KDQogICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs
 DQogICAgICB+Y3R5cGUoKSB7IH0NCg0KICAgICAgdmlydHVhbCBib29sDQog
 ICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAgICAgIHZpcnR1YWwgY29uc3Qg
 Y2hhcl90eXBlKg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xv
 LCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNvbnN0
 IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0
 IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNv
 bnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBj
 b25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25z
 dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2hp
 OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b3Vw
 cGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2M7
 IH0NCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBk
 b190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
 X2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2
 aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUg
 X19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19jOyB9DQoNCiAgICAgIHZp
 cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFy
 X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5
 cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gY2hhcl90eXBlKCk7IH0NCg0KICAgICAgdmlydHVhbCBjb25zdCBj
 aGFyKg0KICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3Qg
 Y2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0DQogICAgICB7
 IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAg
 ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9DQoNCiAgICAgIHZpcnR1YWwgY29u
 c3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw
 ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAg
 ICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIF9faGk7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46Omlk
 Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDog
 cHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPg0KICAgIHsNCiAg
 ICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7DQoN
 CiAgICBwcml2YXRlOg0KDQogICAgICBib29sIF9NX2RlbDsNCiAgICAgIF9f
 dG9fdHlwZSBjb25zdCYgX01fdG91cHBlcjsNCiAgICAgIF9fdG9fdHlwZSBj
 b25zdCYgX01fdG9sb3dlcjsNCiAgICAgIGNvbnN0IG1hc2sqIGNvbnN0JiBf
 TV9jdGFibGU7DQogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsNCg0KICAg
 IHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KICAgICAg
 c3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19j
 YXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsNCg0KICAgICAgZXhwbGljaXQNCiAg
 ICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVs
 ID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgICAgaW5saW5l
 IGJvb2wNCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7DQoN
 CiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgaXMoY29uc3QgY2hh
 ciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0
 Ow0KDQogICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIHNjYW5faXMo
 bWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkp
 IGNvbnN0Ow0KDQogICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIHNj
 YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy
 KiBfX2hpKSBjb25zdDsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1
 YWwNCiAgICAgIH5jdHlwZSgpOw0KDQogICAgICBjb25zdCBtYXNrKg0KICAg
 ICAgdGFibGUoKSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiBfTV90
 YWJsZTsgfQ0KDQogICAgICBjb25zdCBtYXNrKg0KICAgICAgY2xhc3NpY190
 YWJsZSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIF9NX2N0YWJsZTsgfQ0K
 DQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBj
 aGFyX3R5cGUgX19jKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBj
 aGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
 IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0Ow0K
 DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3Nj
 YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
 Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z
 dCBjaGFyX3R5cGUqDQogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29u
 c3QgY2hhcl90eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICAgY29uc3Qg
 Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFy
 X3R5cGUNCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsNCg0K
 ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b3Vw
 cGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
 b25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rv
 bG93ZXIoY2hhcl90eXBlKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z
 dCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
 bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmly
 dHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0Ow0K
 DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqDQogICAgICBkb193aWRlbihj
 b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUq
 IF9fZGVzdCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAg
 ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoN
 CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFy
 cm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
 X2hpLA0KICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf
 X2Rlc3QpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNv
 bnN0IGN0eXBlPGNoYXI+Jg0KICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+
 KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KIyAzOTIgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMt
 c3VuLXNvbGFyaXMyLjcvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzDQojIDM3
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu
 LXNvbGFyaXMyLjcvYml0cy9jdHlwZV9pbmxpbmUuaCIgMw0KICBib29sDQog
 IGN0eXBlPGNoYXI+OjoNCiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z
 dA0KICB7IHJldHVybiBfTV90YWJsZVtfX2NdICYgX19tOyB9DQoNCiAgY29u
 c3QgY2hhcioNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhjb25zdCBjaGFyKiBf
 X2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QN
 CiAgew0KICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkNCiAgICAgICpfX3Zl
 YysrID0gX01fdGFibGVbKl9fbG93KytdOw0KICAgIHJldHVybiBfX2hpZ2g7
 DQogIH0NCg0KICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNj
 YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFy
 KiBfX2hpZ2gpIGNvbnN0DQogIHsNCiAgICB3aGlsZSAoX19sb3cgPCBfX2hp
 Z2ggJiYgIShfTV90YWJsZVsqX19sb3ddICYgX19tKSkNCiAgICAgICsrX19s
 b3c7DQogICAgcmV0dXJuIF9fbG93Ow0KICB9DQoNCiAgY29uc3QgY2hhcioN
 CiAgY3R5cGU8Y2hhcj46Og0KICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg
 Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0K
 ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaA0KICAgICAgICAgICAmJiAoX01f
 dGFibGVbKl9fbG93XSAmIF9fbSkgIT0gMCkNCiAgICAgICsrX19sb3c7DQog
 ICAgcmV0dXJuIF9fbG93Ow0KICB9DQojIDM5MyAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMN
 Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBj
 dHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPg0KICAgIHsNCiAg
 ICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQoN
 CiAgICAgIGV4cGxpY2l0DQogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hh
 ciosIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3RlZDoNCiAg
 ICAgIHZpcnR1YWwNCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH0NCiAgICB9
 Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6
 Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7DQoNCg0K
 DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2NvZGVjdnQuaCIgMSAzDQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiMgMTczICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMN
 CiAgY2xhc3MgY29kZWN2dF9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVu
 dW0gcmVzdWx0DQogICAgew0KICAgICAgb2ssDQogICAgICBwYXJ0aWFsLA0K
 ICAgICAgZXJyb3IsDQogICAgICBub2NvbnYNCiAgICB9Ow0KICB9Ow0KDQoN
 Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
 IF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIF9fY29k
 ZWN2dF9hYnN0cmFjdF9iYXNlDQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
 dCwgcHVibGljIGNvZGVjdnRfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoN
 CiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Ow0K
 ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsNCiAgICAgIHR5
 cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9T
 dGF0ZVQgc3RhdGVfdHlwZTsNCg0KDQogICAgICByZXN1bHQNCiAgICAgIG91
 dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19m
 cm9tLA0KICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k
 LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg
 IGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsDQog
 ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0DQogICAg
 ICB7DQogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19m
 cm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsNCiAg
 ICAgIH0NCg0KICAgICAgcmVzdWx0DQogICAgICB1bnNoaWZ0KHN0YXRlX3R5
 cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSog
 X190b19lbmQsDQogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u
 ZXh0KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChf
 X3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0NCg0KICAgICAg
 cmVzdWx0DQogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
 eHRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25l
 eHQsDQogICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUq
 IF9fdG9fZW5kLA0KICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp
 IGNvbnN0DQogICAgICB7DQogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihf
 X3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9f
 bmV4dCk7DQogICAgICB9DQoNCiAgICAgIGludA0KICAgICAgZW5jb2Rpbmco
 KSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNv
 ZGluZygpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGFsd2F5c19ub2NvbnYo
 KSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdh
 eXNfbm9jb252KCk7IH0NCg0KICAgICAgaW50DQogICAgICBsZW5ndGgoY29u
 c3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
 ZnJvbSwNCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQs
 IHNpemVfdCBfX21heCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
 X2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0NCg0K
 ICAgICAgaW50DQogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQ0K
 ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9DQoNCiAg
 ICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNpdA0KICAgICAgX19jb2RlY3Z0
 X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
 YWNldChfX3JlZnMpIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+X19j
 b2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0NCg0KICAgICAgdmlydHVhbCBy
 ZXN1bHQNCiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
 dCBpbnRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgICAgIGNvbnN0IGlu
 dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9f
 ZnJvbV9uZXh0LA0KICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl
 eHRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5
 cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBy
 ZXN1bHQNCiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
 ZXh0ZXJuX3R5cGUqIF9fdG8sDQogICAgICAgICAgICAgICAgIGV4dGVybl90
 eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
 ID0gMDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2luKHN0
 YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
 DQogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
 Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAg
 IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsDQog
 ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw
 Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZW5jb2RpbmcoKSBj
 b25zdCB0aHJvdygpID0gMDsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAg
 ICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7DQoNCiAg
 ICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVf
 dHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAg
 ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgp
 IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX21h
 eF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsNCiAgICB9Ow0KDQoNCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy
 blQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2dA0KICAg
 IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBf
 RXh0ZXJuVCwgX1N0YXRlVD4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAg
 ICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsNCiAgICAg
 IHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7DQogICAgICB0eXBlZGVm
 IF9FeHRlcm5UIGV4dGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBfU3RhdGVU
 IHN0YXRlX3R5cGU7DQoNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
 DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2RlY3Z0KHNpemVfdCBfX3Jl
 ZnMgPSAwKQ0KICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50
 ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0NCg0KICAgIHBy
 b3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2RlY3Z0KCkgeyB9
 DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
 ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgbG9jYWxl
 OjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46Omlk
 Ow0KIyA1OTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL2NvZGVjdnQuaCIgMw0KICB0ZW1wbGF0ZTw+DQogICAgY2xhc3MgY29k
 ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+DQogICAgOiBwdWJsaWMgX19j
 b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90Pg0K
 ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl
 cm5fdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCg0KICAgICAg
 c3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAg
 ICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3Rl
 ZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2RlY3Z0KCk7DQoNCiAgICAg
 IHZpcnR1YWwgcmVzdWx0DQogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19z
 dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAg
 ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
 X3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICBleHRlcm5fdHlw
 ZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAgICAgICAg
 IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmly
 dHVhbCByZXN1bHQNCiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19z
 dGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sDQogICAgICAgICAgICAgICAgIGV4
 dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp
 IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9faW4o
 c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv
 bSwNCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
 LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg
 ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwN
 CiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsN
 Cg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2VuY29kaW5nKCkgY29u
 c3QgdGhyb3coKTsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBkb19h
 bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsNCg0KICAgICAgdmlydHVh
 bCBpbnQNCiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29u
 c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAgICAgICBjb25z
 dCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7DQoN
 CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19tYXhfbGVuZ3RoKCkgY29u
 c3QgdGhyb3coKTsNCiAgfTsNCiMgNzAwICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
 ZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGlj
 IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsN
 CiAgICBwdWJsaWM6DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dF9i
 eW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAg
 OiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZz
 KSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+
 Y29kZWN2dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KIyA0MTYgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
 aCIgMiAzDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfSW5JdGVyPg0KICAgIGNsYXNzIF9OdW1lcmljX2dldDsNCg0KDQoNCg0K
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIF9G
 b3JtYXRfY2FjaGUNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl
 ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGNoYXJfdHJh
 aXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj
 X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsNCg0K
 DQogICAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgICAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgICAgIGZy
 aWVuZCBjbGFzcyBfTnVtZXJpY19nZXQ7DQogICAgICBmcmllbmQgY2xhc3Mg
 bnVtX2dldDxfQ2hhclQ+Ow0KICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ8
 X0NoYXJUPjsNCiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDxfQ2hhclQ+
 Ow0KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDxfQ2hhclQ+Ow0KICAg
 ICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47DQogICAgICBmcmll
 bmQgY2xhc3MgbW9uZXlfcHV0PF9DaGFyVD47DQoNCg0KDQoNCiAgICAgIHN0
 YXRpYyBpbnQgX1NfcHdvcmRfaXg7DQoNCg0KDQogICAgICBib29sIF9NX3Zh
 bGlkOw0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfbGl0ZXJh
 bHNbXTsNCg0KDQoNCg0KICAgICAgZW51bQ0KICAgICAgew0KICAgICAgICBf
 U19taW51cywNCiAgICAgICAgX1NfcGx1cywNCiAgICAgICAgX1NfeCwNCiAg
 ICAgICAgX1NfWCwNCiAgICAgICAgX1NfZGlnaXRzLA0KICAgICAgICBfU19k
 aWdpdHNfZW5kID0gX1NfZGlnaXRzICsgMTYsDQogICAgICAgIF9TX3VkaWdp
 dHMgPSBfU19kaWdpdHNfZW5kLA0KICAgICAgICBfU191ZGlnaXRzX2VuZCA9
 IF9TX3VkaWdpdHMgKyAxNiwNCiAgICAgICAgX1NfZWUgPSBfU19kaWdpdHMg
 KyAxNCwNCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQNCiAgICAg
 IH07DQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50
 Ow0KDQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2Vw
 Ow0KDQoNCg0KICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7DQogICAg
 ICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7DQoNCg0KDQogICAgICBib29s
 IF9NX3VzZV9ncm91cGluZzsNCg0KDQoNCiAgICAgIHN0cmluZyBfTV9ncm91
 cGluZzsNCg0KICAgICAgX0Zvcm1hdF9jYWNoZSgpOw0KDQogICAgICB+X0Zv
 cm1hdF9jYWNoZSgpIHRocm93KCkgeyB9DQoNCg0KDQoNCiAgICAgIHN0YXRp
 YyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qDQogICAgICBfU19nZXQoaW9zX2Jh
 c2UmIF9faW9zKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fcG9wdWxhdGUo
 aW9zX2Jhc2UmKTsNCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2Nh
 bGxiYWNrKGlvc19iYXNlOjpldmVudCBfX2V2ZW50LCBpb3NfYmFzZSYgX19p
 b3MsIGludCBfX2l4KSB0aHJvdygpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJUPg0KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFy
 VD46Ol9TX3B3b3JkX2l4Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VD4NCiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6DQog
 ICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4OWFiY2RlZjAxMjM0
 NTY3ODlBQkNERUYiOw0KDQogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8
 Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGNs
 YXNzIF9OdW1lcmljX2dldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg
 IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0lu
 SXRlciBpdGVyX3R5cGU7DQoNCg0KICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPg0KICAgICAgZnJpZW5kIGNsYXNz
 IG51bV9nZXQ7DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlw
 ZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7
 DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0lu
 SXRlclQ+DQogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0Ow0KICAgICAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPg0K
 ICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ7DQogICAgICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmll
 bmQgY2xhc3MgdGltZV9wdXQ7DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQgY2xhc3Mg
 bW9uZXlfcHV0Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGV4cGxpY2l0DQog
 ICAgICBfTnVtZXJpY19nZXQoKSB7IH0NCg0KICAgICAgdmlydHVhbA0KICAg
 ICAgfl9OdW1lcmljX2dldCgpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAg
 ICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
 X2VuZCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgbnVtX2dldCA6
 IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0K
 ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
 ZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hhcl90cmFp
 dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOw0KDQogICAgICBzdGF0aWMgbG9j
 YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51bV9nZXQo
 c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
 fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19p
 biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAg
 ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
 cnIsIF9fdik7IH0NCg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChp
 dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
 bywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0
 JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19l
 bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0K
 ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
 c19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
 X2VyciwgaW50JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQo
 X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCg0KICAgICAg
 aXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
 ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6
 Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0DQogICAgICB7IHJl
 dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
 DQojIDYwNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAg
 IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
 ZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
 IHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBk
 b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAg
 ICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy
 X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19i
 YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0
 DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9f
 ZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0
 ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
 LA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu
 ZWQgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
 aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KIyA2MjkgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl
 dHMuaCIgMw0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl
 IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg
 ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
 LCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdl
 dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
 X19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRv
 dWJsZSYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s
 IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5
 cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
 LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
 ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJl
 dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
 DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
 LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg
 IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
 cnIsIF9fdik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwg
 fm51bV9nZXQoKSB7IH0NCg0KDQoNCg0KDQogICAgICB2b2lkDQogICAgICBf
 TV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
 b3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
 c3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsDQogICAgICAgICAgICAgICAg
 IGludCYgX19iYXNlLCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsNCg0KICAg
 ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUs
 IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJv
 b2wmKSBjb25zdDsNCg0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg
 ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv
 c19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsNCiAgICAgIHZpcnR1
 YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25z
 dDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldCAo
 aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv
 c3RhdGUmLCBsb25nJikgY29uc3Q7DQoNCg0KDQoNCg0KICAgICAgdmlydHVh
 bCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
 ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAg
 ICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7DQogICAgICB2aXJ0
 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
 eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
 YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7DQogICAgICB2aXJ0
 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
 eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
 YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYpIGNvbnN0Ow0KDQoNCg0KDQoN
 CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90
 eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm
 IF9fZXJyLA0KICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7DQoNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
 dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
 LA0KICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0Ow0KDQogICAgICB2aXJ0
 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
 eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
 dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYpIGNvbnN0Ow0KDQogICAgICB2aXJ0
 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAg
 ICAgICAgICAgICB2b2lkKiYpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGxv
 Y2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsNCg0KDQog
 IHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAgbnVtX2dldDxjaGFyLCBpc3Ry
 ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46Og0KICAgIF9NX2V4dHJhY3QoaXN0
 cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywNCiAgICAgICAgICAgICAg
 IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNlJiBf
 X2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
 LCBjaGFyKiBfX3h0cmMsDQogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwg
 Ym9vbCBfX2ZwKSBjb25zdDsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFzcyBfTnVtZXJp
 Y19wdXQNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hh
 clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5
 cGU7DQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9O
 dW1lcmljX3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+X051
 bWVyaWNfcHV0KCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIG51bV9w
 dXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6
 DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5
 cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOw0KDQogICAgICBzdGF0aWMgbG9j
 YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51bV9wdXQo
 c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
 fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
 LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg
 Y29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxs
 LCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJf
 dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv
 bmcgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19m
 LCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBw
 dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
 ZmlsbCwNCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9
 DQojIDc3MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAg
 IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUg
 X19maWxsLCBkb3VibGUgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9f
 cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90
 eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg
 Y2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3Yp
 IGNvbnN0DQogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmls
 bCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVy
 X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLA0K
 ICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9DQoNCiAgICBw
 cm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bnVtX3B1dCgpIHsg
 fTsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChp
 dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBf
 X3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAg
 ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs
 LCBsb25nIF9fdikgY29uc3Q7DQoNCg0KDQoNCg0KDQogICAgICB2aXJ0dWFs
 IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
 LCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsNCg0K
 DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19w
 dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRv
 dWJsZSBfX3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0K
 ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg
 X19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0
 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jh
 c2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0
 Ow0KICAgIH07DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFy
 VCwgX091dEl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+DQogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
 dA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJU
 IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
 VD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
 Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFs
 X3BvaW50Ow0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7DQog
 ICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7DQogICAgICBzdHJpbmdfdHlwZSBf
 TV90cnVlbmFtZTsNCiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsN
 Cg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBudW1wdW5j
 dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykN
 CiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9DQoNCiAgICAg
 IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywg
 c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQog
 ICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQ0KDQog
 ICAgICBjaGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAg
 IGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAg
 ICB7IHJldHVybiBkb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAgICAgc3Ry
 aW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7IHJldHVybiBk
 b19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICB0
 cnVlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgp
 OyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBmYWxzZW5hbWUoKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0NCg0KICAg
 IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1wdW5jdCgp
 IHsgfQ0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fZGVj
 aW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kZWNpbWFs
 X3BvaW50OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBk
 b190aG91c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Ro
 b3VzYW5kc19zZXA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmcNCiAgICAg
 IGRvX2dyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2dyb3Vw
 aW5nOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRv
 X3RydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l
 OyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2Zh
 bHNlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7
 IH0NCg0KDQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX251bXB1
 bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsNCiAgICB9Ow0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIG51
 bXB1bmN0PF9DaGFyVD46OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVD4NCiAgICB2b2lkDQogICAgbnVtcHVuY3Q8X0NoYXJUPjo6X01faW5p
 dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkNCiAgICB7DQoNCiAgICB9
 DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBudW1wdW5jdDxjaGFy
 Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7
 DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K
 ICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxf
 Q2hhclQ+DQogICAgew0KICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9u
 dW1wdW5jdDsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBj
 aGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
 IHN0cmluZ190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtcHVu
 Y3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp
 DQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0K
 ICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu
 Y3QsIF9fcyk7DQogICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01f
 Y19sb2NhbGVfbnVtcHVuY3QpOw0KICAgICAgfQ0KDQogICAgcHJvdGVjdGVk
 Og0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1bmN0X2J5bmFtZSgpDQog
 ICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu
 Y3QpOyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VD4NCiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQN
 CiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBj
 aGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
 IHN0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsN
 Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVm
 cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBp
 bnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg
 X0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
 X2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19o
 aTIpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICB0cmFuc2Zvcm0o
 Y29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0
 DQogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19o
 aSk7IH0NCg0KICAgICAgbG9uZw0KICAgICAgaGFzaChjb25zdCBfQ2hhclQq
 IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0NCg0KICBwcm90ZWN0
 ZWQ6DQogICAgICB+Y29sbGF0ZSgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGlu
 dA0KICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25z
 dCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
 clQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsNCg0KICAg
 ICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fdHJhbnNmb3JtKGNv
 bnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsN
 Cg0KICAgICAgdmlydHVhbCBsb25nDQogICAgICBkb19oYXNoKGNvbnN0IF9D
 aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsNCiAgICB9
 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6
 OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQog
 ICAgaW50DQogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFyZShjb25zdCBj
 aGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2xvMiwgY29uc3QgY2hh
 ciogX19oaTIpIGNvbnN0Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJpbmcN
 CiAgICBjb2xsYXRlPGNoYXI+Ojpkb190cmFuc2Zvcm0oY29uc3QgY2hhciog
 X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoNCiAgdGVtcGxhdGU8
 Pg0KICAgIGxvbmcNCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0
 IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0Ow0KIyAxMDE0
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
 bGVfZmFjZXRzLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K
 ICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0No
 YXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0No
 YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
 aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBj
 b2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDAp
 Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNv
 bGxhdGVfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQog
 ICAgY29sbGF0ZV9ieW5hbWU8Y2hhcj46OmNvbGxhdGVfYnluYW1lKGNvbnN0
 IGNoYXIqLCBzaXplX3QgX19yZWZzKTsNCg0KDQoNCg0KDQogIGNsYXNzIHRp
 bWVfYmFzZQ0KICB7DQogIHB1YmxpYzoNCiAgICBlbnVtIGRhdGVvcmRlciB7
 IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0gfTsNCiAgfTsNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
 ICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVi
 bGljIHRpbWVfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5
 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0luSXRl
 ciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
 DQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVm
 cyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcyksIF9NX2Rh
 eW5hbWVzKDApLCBfTV9tb250aG5hbWVzKDApIHsgfQ0KDQogICAgICBkYXRl
 b3JkZXINCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdA0KICAgICAgeyByZXR1
 cm4gZG9fZGF0ZV9vcmRlcigpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
 ICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBp
 b3NfYmFzZSYgX19mLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
 dGUmIF9fZXJyLCB0bSogX190KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9f
 Z2V0X3RpbWUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQ0KDQog
 ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX3Ms
 IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAg
 ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRlKF9fcywgX19lbmQsIF9fZiwg
 X19lcnIsIF9fdCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXRf
 d2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
 YXNlJiBfX2YsDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
 ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19n
 ZXRfd2Vla2RheShfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAg
 ICAgaXRlcl90eXBlDQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBf
 X3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAg
 ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
 KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0X21vbnRobmFtZShfX3Ms
 X19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQog
 ICAgICBnZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQs
 IGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
 dGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBk
 b19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAg
 IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH50aW1lX2dldCgp
 DQogICAgICB7DQogICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOw0K
 ICAgICAgICBkZWxldGUgW10gX01fZGF5bmFtZXM7DQogICAgICB9DQoNCiAg
 ICAgIHZpcnR1YWwgZGF0ZW9yZGVyDQogICAgICBkb19kYXRlX29yZGVyKCkg
 Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9DQoNCiAg
 ICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfdGltZShpdGVy
 X3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsDQogICAgICAgICAg
 ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdA0KICAg
 ICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
 DQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
 LCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
 dGF0ZSYgLCB0bSogKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoN
 CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfd2Vla2Rh
 eShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwN
 CiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
 ciwgdG0qIF9fdCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
 DQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf
 dHlwZSBfX2VuZCwgaW9zX2Jhc2UmLA0KICAgICAgICAgICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0Ow0K
 DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0X3llYXIo
 aXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLA0KICAgICAg
 ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0
 DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAgICAgbXV0YWJsZSBiYXNp
 Y19zdHJpbmc8X0NoYXJUPiogX01fZGF5bmFtZXM7DQogICAgICBtdXRhYmxl
 IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9tb250aG5hbWVzOw0KICAgIH07
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
 dGVyPg0KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
 Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfSW5JdGVyPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1Ymxp
 YyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+DQogICAgew0KICAgIHB1Ymxp
 YzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5
 cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQog
 ICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3Jl
 ZnMgPSAwKQ0KICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9f
 cmVmcykgeyB9DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAg
 ICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBj
 bGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg
 dGltZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYg
 X0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl
 cl90eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAg
 ICAgZXhwbGljaXQNCiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAw
 KSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9DQoNCg0KICAgICAgaXRl
 cl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmICwg
 Y2hhcl90eXBlICwNCiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hh
 clQqICwNCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QNCiAgICAg
 IHsgcmV0dXJuIF9fczsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1
 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
 aWxsLA0KICAgICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1h
 dCwgY2hhciBfX21vZGlmaWVyID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
 IGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9f
 bW9kaWZpZXIpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs
 DQogICAgICB+dGltZV9wdXQoKSB7IH0NCg0KICAgICAgdmlydHVhbCBpdGVy
 X3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYs
 IGNoYXJfdHlwZSwgY29uc3QgdG0qICwNCiAgICAgICAgICAgICBjaGFyICwg
 Y2hhciApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCiAgICB9Ow0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
 ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy
 Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfT3V0SXRlcj4NCiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJs
 aWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4NCiAgICB7DQogICAgcHVi
 bGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg
 dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0
 DQogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf
 X3JlZnMgPSAwKQ0KICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy
 PiAoX19yZWZzKSB7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1
 YWwNCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
 Pg0KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
 DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
 YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQog
 ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl
 Ow0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAgICAgZXhw
 bGljaXQNCiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBs
 b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0K
 ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v
 bCBfX2ludGwsDQogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6
 Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9f
 ZiwgX19lcnIsIF9fdW5pdHMpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
 ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBf
 X2ludGwsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgIGlvc19iYXNlOjpp
 b3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdA0K
 ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19m
 LCBfX2VyciwgX19kaWdpdHMpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg
 ICB2aXJ0dWFsDQogICAgICB+bW9uZXlfZ2V0KCkgeyB9DQoNCiAgICAgIHZp
 cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywg
 aXRlcl90eXBlICwgYm9vbCAsDQogICAgICAgICAgICAgaW9zX2Jhc2UmICwg
 aW9zX2Jhc2U6Omlvc3RhdGUmICwNCiAgICAgICAgICAgICBsb25nIGRvdWJs
 ZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIHZp
 cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywg
 aXRlcl90eXBlICwgYm9vbCAsDQogICAgICAgICAgICAgaW9zX2Jhc2UmICwg
 aW9zX2Jhc2U6Omlvc3RhdGUmICwNCiAgICAgICAgICAgICBzdHJpbmdfdHlw
 ZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQogICAgfTsNCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
 DQogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
 aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 T3V0SXRlcj4NCiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxl
 OjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9D
 aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
 aW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQog
 ICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMg
 PSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRl
 cl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGws
 IGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwg
 bG9uZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv
 X3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fdW5pdHMpOyB9DQoN
 CiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJv
 b2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLA0KICAgICAgICAgIGNoYXJfdHlw
 ZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2Zp
 bGwsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmly
 dHVhbA0KICAgICAgfm1vbmV5X3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
 IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2ws
 IGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsDQogICAgICAgICAgICAgbG9uZyBk
 b3VibGUgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAg
 IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlIF9f
 cywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwNCiAgICAgICAgICAg
 ICBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4g
 X19zOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0
 PF9DaGFyVCwgX091dEl0ZXI+OjppZDsNCg0KICBzdHJ1Y3QgbW9uZXlfYmFz
 ZQ0KICB7DQogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwg
 c2lnbiwgdmFsdWUgfTsNCiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmll
 bGRbNF07IH07DQoNCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZh
 dWx0X3BhdHRlcm47DQoNCg0KDQogICAgc3RhdGljIHBhdHRlcm4NCiAgICBf
 U19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19z
 cGFjZSwgY2hhciBfX3Bvc24pOw0KICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjbGFzcyBtb25leXB1bmN0
 IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlDQog
 ICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
 cl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
 dHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9
 IF9JbnRsOw0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICBw
 cml2YXRlOg0KICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7DQog
 ICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsNCiAgICAgIHN0cmlu
 ZyBfTV9ncm91cGluZzsNCiAgICAgIHN0cmluZ190eXBlIF9NX2N1cnJfc3lt
 Ym9sOw0KICAgICAgc3RyaW5nX3R5cGUgX01fcG9zaXRpdmVfc2lnbjsNCiAg
 ICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247DQogICAgICBpbnQg
 X01fZnJhY19kaWdpdHM7DQogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7
 DQogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7DQoNCiAgICBwdWJsaWM6
 DQogICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19y
 ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAgIHsgX01f
 aW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0NCg0KICAgICAgZXhwbGljaXQN
 CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBf
 X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAgeyBf
 TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQ0KDQogICAgICBj
 aGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAg
 IGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAg
 ICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAg
 ICAgc3RyaW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7IHJl
 dHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190
 eXBlDQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0DQogICAgICB7IHJldHVy
 biB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9DQoNCiAgICAgIHN0cmluZ190
 eXBlDQogICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQ0KDQogICAgICBzdHJp
 bmdfdHlwZQ0KICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0DQogICAgICB7
 IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0NCg0KICAgICAg
 aW50DQogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0DQogICAgICB7IHJldHVy
 biB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9DQoNCiAgICAgIHBhdHRlcm4N
 CiAgICAgIHBvc19mb3JtYXQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp
 cy0+ZG9fcG9zX2Zvcm1hdCgpOyB9DQoNCiAgICAgIHBhdHRlcm4NCiAgICAg
 IG5lZ19mb3JtYXQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
 bmVnX2Zvcm1hdCgpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0
 dWFsDQogICAgICB+bW9uZXlwdW5jdCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
 IGNoYXJfdHlwZQ0KICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0DQog
 ICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9DQoNCiAgICAgIHZp
 cnR1YWwgY2hhcl90eXBlDQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29u
 c3QNCiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0NCg0KICAg
 ICAgdmlydHVhbCBzdHJpbmcNCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9DQoNCiAgICAgIHZpcnR1
 YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2N1cnJfc3ltYm9sKCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9DQoNCiAgICAgIHZp
 cnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBj
 b25zdA0KICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQ0KDQog
 ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlDQogICAgICBkb19uZWdhdGl2ZV9z
 aWduKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZlX3NpZ247
 IH0NCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2ZyYWNfZGlnaXRz
 KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9DQoN
 CiAgICAgIHZpcnR1YWwgcGF0dGVybg0KICAgICAgZG9fcG9zX2Zvcm1hdCgp
 IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9DQoNCiAg
 ICAgIHZpcnR1YWwgcGF0dGVybg0KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNv
 bnN0DQogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9DQoNCg0KICAg
 ICAgdm9pZA0KICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19s
 b2NhbGUgX19jbG9jID0gX19udWxsKTsNCiAgICB9Ow0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBsb2NhbGU6Omlk
 IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOw0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjb25zdCBib29s
 IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIHZvaWQNCiAg
 ICBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21v
 bmV5cHVuY3QoX19jX2xvY2FsZSApDQogICAgew0KDQogICAgfQ0KDQogIHRl
 bXBsYXRlPD4NCiAgICB2b2lkDQogICAgbW9uZXlwdW5jdDxjaGFyPjo6X01f
 aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCg0K
 DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J
 bnRsPg0KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1v
 bmV5cHVuY3Q8X0NoYXJULCBfSW50bD4NCiAgICB7DQogICAgICBfX2NfbG9j
 YWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7DQogICAgcHVibGljOg0KICAg
 ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBi
 YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOw0KDQogICAgICBleHBsaWNp
 dA0KICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz
 aXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQs
 IF9JbnRsPihfX3JlZnMpDQogICAgICB7DQogICAgICAgIF9TX2NyZWF0ZV9j
 X2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOw0KICAgICAg
 ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlw
 dW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0
 dWFsDQogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQ0KICAgICAgeyBfU19k
 ZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9DQog
 ICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
 dGw+DQogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQs
 IF9JbnRsPjo6aW50bDsNCg0KDQogIHN0cnVjdCBtZXNzYWdlc19iYXNlDQog
 IHsNCiAgICB0eXBlZGVmIGludCBjYXRhbG9nOw0KICB9Ow0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1
 YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQ0KICAg
 IHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
 cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
 Z190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAg
 ICAgZXhwbGljaXQNCiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAw
 KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgY2F0YWxv
 Zw0KICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywg
 Y29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv
 X29wZW4oX19zLCBfX2xvYyk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAg
 ICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBpbnQgX19tc2dpZCwg
 Y29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QNCiAgICAgIHsgcmV0dXJu
 IGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9DQoNCiAgICAgIHZv
 aWQNCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdA0KICAgICAgeyBy
 ZXR1cm4gZG9fY2xvc2UoX19jKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAg
 ICAgdmlydHVhbA0KICAgICAgfm1lc3NhZ2VzKCkgeyB9DQoNCg0KDQogICAg
 ICB2aXJ0dWFsIGNhdGFsb2cNCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNf
 c3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QNCiAgICAgIHsg
 cmV0dXJuIDA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAg
 ICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50ICwgY29uc3Qgc3RyaW5nX3R5
 cGUmIF9fZGZhdWx0KSBjb25zdA0KICAgICAgeyByZXR1cm4gX19kZmF1bHQ7
 IH0NCg0KICAgICAgdmlydHVhbCB2b2lkDQogICAgICBkb19jbG9zZShjYXRh
 bG9nKSBjb25zdCB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46Omlk
 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBt
 ZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPg0KICAg
 IHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
 cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
 Z190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXNfYnlu
 YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7DQoNCiAgICBw
 cm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bWVzc2FnZXNfYnlu
 YW1lKCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgbWVzc2Fn
 ZXNfYnluYW1lPGNoYXI+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhcios
 IHNpemVfdCBfX3JlZnMpOw0KIyAxNTMyICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAg
 aXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg
 IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
 KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChf
 Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu
 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
 c2U6OnByaW50LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQgX19j
 LCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNl
 dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJs
 LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg
 IGlubGluZSBib29sDQogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBs
 b2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
 Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9
 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBi
 b29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN
 CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
 KS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzYWxw
 aGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJl
 dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
 ZV9iYXNlOjphbHBoYSwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZGlnaXQoX0NoYXJU
 IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2Vf
 ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpk
 aWdpdCwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
 CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29u
 c3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
 cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19j
 KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxp
 bmUgYm9vbA0KICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
 ZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
 VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
 DQogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
 KQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
 b2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNn
 cmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsg
 cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
 eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQNCiAgICB0b3VwcGVyKF9D
 aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4g
 dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2Mp
 OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu
 ZSBfQ2hhclQNCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
 ZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
 VD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9DQp9DQojIDM3ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg
 MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNf
 aW9zIDogcHVibGljIGlvc19iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0K
 ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAg
 IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7
 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9m
 Zl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0K
 DQoNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7
 DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
 VHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVkZWYgbnVt
 X3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBl
 Ow0KICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
 X1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51
 bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlw
 ZTsNCg0KDQogICAgcHJpdmF0ZToNCiAgICAgIGJhc2ljX29zdHJlYW08X0No
 YXJULCBfVHJhaXRzPiogX01fdGllOw0KICAgICAgY2hhcl90eXBlIF9NX2Zp
 bGw7DQogICAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsNCg0KICAgIHByb3Rl
 Y3RlZDoNCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
 KiBfTV9zdHJlYW1idWY7DQogICAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9z
 dGF0ZTsNCg0KDQogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lvc19m
 Y3R5cGU7DQoNCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1w
 dXQ7DQoNCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7
 DQoNCiAgICBwdWJsaWM6DQogICAgICBpbmxpbmUgY29uc3QgX19jdHlwZV90
 eXBlKg0KICAgICAgX01fZ2V0X2ZjdHlwZV9pb3Modm9pZCkNCiAgICAgIHsg
 cmV0dXJuIF9NX2lvc19mY3R5cGU7IH0NCg0KICAgICAgb3BlcmF0b3Igdm9p
 ZCooKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6
 IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0NCg0KICAgICAgaW5s
 aW5lIGJvb2wNCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0DQogICAgICB7IHJl
 dHVybiB0aGlzLT5mYWlsKCk7IH0NCg0KICAgICAgaW5saW5lIGlvc3RhdGUN
 CiAgICAgIHJkc3RhdGUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fc3Ry
 ZWFtYnVmX3N0YXRlOyB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBj
 bGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KQ0KICAgICAgew0KICAg
 ICAgICBpZiAodGhpcy0+cmRidWYoKSkNCiAgICAgICAgICBfTV9zdHJlYW1i
 dWZfc3RhdGUgPSBfX3N0YXRlOw0KICAgICAgICBlbHNlDQogICAgICAgICAg
 X01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsNCiAgICAg
 ICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkp
 KQ0KICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6
 Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOw0KICAgICAgfQ0K
 DQogICAgICBpbmxpbmUgdm9pZA0KICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBf
 X3N0YXRlKQ0KICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkg
 fCBfX3N0YXRlKTsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZ29v
 ZCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0g
 MDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZW9mKCkgY29uc3QN
 CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9
 IDA7IH0NCg0KICAgICAgaW5saW5lIGJvb2wNCiAgICAgIGZhaWwoKSBjb25z
 dA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQg
 fCBmYWlsYml0KSkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAg
 ICAgYmFkKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRl
 KCkgJiBiYWRiaXQpICE9IDA7IH0NCg0KICAgICAgaW5saW5lIGlvc3RhdGUN
 CiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f
 ZXhjZXB0aW9uOyB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBleGNl
 cHRpb25zKGlvc3RhdGUgX19leGNlcHQpDQogICAgICB7DQogICAgICAgIF9N
 X2V4Y2VwdGlvbiA9IF9fZXhjZXB0Ow0KICAgICAgICB0aGlzLT5jbGVhcihf
 TV9zdHJlYW1idWZfc3RhdGUpOw0KICAgICAgfQ0KDQoNCiAgICAgIGV4cGxp
 Y2l0DQogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
 X1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQ0KICAgICAgeyB0aGlzLT5p
 bml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19p
 b3MoKSB7IH0NCg0KDQogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+Kg0KICAgICAgdGllKCkgY29uc3QNCiAgICAgIHsgcmV0
 dXJuIF9NX3RpZTsgfQ0KDQogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Kg0KICAgICAgdGllKGJhc2ljX29zdHJlYW08X0No
 YXJULCBfVHJhaXRzPiogX190aWVzdHIpDQogICAgICB7DQogICAgICAgIGJh
 c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7
 DQogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOw0KICAgICAgICByZXR1cm4g
 X19vbGQ7DQogICAgICB9DQoNCiAgICAgIGlubGluZSBiYXNpY19zdHJlYW1i
 dWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICAgIHJkYnVmKCkgY29uc3QNCiAg
 ICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQ0KDQogICAgICBiYXNpY19z
 dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICAgIHJkYnVmKGJhc2lj
 X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0KICAgICAg
 YmFzaWNfaW9zJg0KICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9f
 cmhzKTsNCg0KICAgICAgaW5saW5lIGNoYXJfdHlwZQ0KICAgICAgZmlsbCgp
 IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9maWxsOyB9DQoNCiAgICAgIGlu
 bGluZSBjaGFyX3R5cGUNCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpDQog
 ICAgICB7DQogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7DQog
 ICAgICAgIF9NX2ZpbGwgPSBfX2NoOw0KICAgICAgICByZXR1cm4gX19vbGQ7
 DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBpbWJ1ZShjb25z
 dCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgICAgY2hhcg0KICAgICAgbmFycm93
 KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0Ow0KDQogICAg
 ICBjaGFyX3R5cGUNCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsNCg0K
 ICAgIHByb3RlY3RlZDoNCg0KICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz
 ZSgpDQogICAgICB7IH0NCg0KICAgICAgdm9pZA0KICAgICAgaW5pdChiYXNp
 Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7DQoNCiAgICAg
 IGJvb2wNCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFj
 ZXQqIF9fZikNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl
 Ow0KICAgICAgICBpZiAoX19mKQ0KICAgICAgICAgIF9fcmV0ID0gdHJ1ZTsN
 CiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsN
 CiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAgICB2b2lk
 DQogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7
 DQogICAgfTsNCn0NCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzDQojIDMzICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19p
 b3MudGNjIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJl
 YW1idWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICBiYXNpY19pb3M8X0NoYXJU
 LCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
 YWl0cz4qIF9fc2IpDQogICAgew0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D
 aGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOw0KICAgICAg
 X01fc3RyZWFtYnVmID0gX19zYjsNCiAgICAgIHRoaXMtPmNsZWFyKCk7DQog
 ICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pb3M8
 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh
 aXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQ0KICAgIHsN
 Cg0KDQoNCg0KICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dv
 cmRfbGltaXQgPD0gX1NfbG9jYWxfd29yZHMpID8NCiAgICAgICAgX01fd29y
 ZF9hcnJheSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29yZF9saW1pdF07DQoj
 IDYzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9i
 YXNpY19pb3MudGNjIiAzDQogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9
 IF9fcmhzLl9NX2NhbGxiYWNrczsNCiAgICAgIGlmIChfX2NiKQ0KICAgICAg
 ICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7DQogICAgICBfTV9jYWxsX2Nh
 bGxiYWNrcyhlcmFzZV9ldmVudCk7DQogICAgICBpZiAoX01fd29yZHMgIT0g
 X01fd29yZF9hcnJheSkNCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOw0K
 ICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsNCg0KICAgICAgX01fY2Fs
 bGJhY2tzID0gX19jYjsNCiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8
 IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQ0KICAgICAgICBfX3dvcmRz
 W19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ldOw0KICAgICAgaWYgKF9NX3dv
 cmRzICE9IF9NX3dvcmRfYXJyYXkpDQogICAgICAgIGRlbGV0ZSBbXSBfTV93
 b3JkczsNCiAgICAgIF9NX3dvcmRzID0gX193b3JkczsNCiAgICAgIF9NX3dv
 cmRfbGltaXQgPSBfX3Jocy5fTV93b3JkX2xpbWl0Ow0KDQogICAgICB0aGlz
 LT5mbGFncyhfX3Jocy5mbGFncygpKTsNCiAgICAgIHRoaXMtPndpZHRoKF9f
 cmhzLndpZHRoKCkpOw0KICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnBy
 ZWNpc2lvbigpKTsNCiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7DQog
 ICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7DQoNCiAgICAgIHRoaXMt
 PmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsNCg0KICAgICAgX01f
 Y2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7DQogICAgICByZXR1cm4g
 KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjaGFyDQogICAgYmFzaWNfaW9zPF9D
 aGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9f
 ZGZhdWx0KSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPm5h
 cnJvdyhfX2MsIF9fZGZhdWx0KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBfQ2hhclQNCiAgICBi
 YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNv
 bnN0DQogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsg
 fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzPg0KICAgIGxvY2FsZQ0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U
 cmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAg
 ICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7DQogICAgICBpb3Nf
 YmFzZTo6aW1idWUoX19sb2MpOw0KICAgICAgX01fY2FjaGVfZmFjZXRzKF9f
 bG9jKTsNCiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApDQogICAgICAg
 IHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsNCiAgICAgIHJldHVy
 biBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBiYXNpY19pb3M8
 X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJU
 LCBfVHJhaXRzPiogX19zYikNCiAgICB7DQoNCiAgICAgIGlvc19iYXNlOjpf
 TV9pbml0KCk7DQogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2Fs
 ZSk7DQogICAgICBfTV90aWUgPSAwOw0KICAgICAgX01fZmlsbCA9IHRoaXMt
 PndpZGVuKCcgJyk7DQogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0Ow0K
 ICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsNCiAgICAgIF9NX3N0cmVhbWJ1
 Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0Ow0KICAgIH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
 DQogICAgdm9pZA0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpf
 TV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQog
 ICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpKQ0KICAg
 ICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+
 KF9fbG9jKTsNCg0KICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBl
 PihfX2xvYykpDQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9f
 bnVtcHV0X3R5cGU+KF9fbG9jKTsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19u
 dW1nZXRfdHlwZT4oX19sb2MpKQ0KICAgICAgICBfTV9mbnVtZ2V0ID0gJnVz
 ZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7DQogICAgfQ0KfQ0KIyAy
 MTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh
 c2ljX2lvcy5oIiAyIDMNCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDQwICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5o
 IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMN
 CiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
 Yy1zdW4tc29sYXJpczIuNy9iaXRzL3N0ZF9saW1pdHMuaCIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv
 bGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDQ2ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy
 LjcvYml0cy9zdGRfbGltaXRzLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDEgMw0K
 IyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2NmbG9hdC5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAx
 IDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDMgNA0KI3ByYWdt
 YSBpZGVudCAiQCgjKWZsb2F0LmgJMS4xNQk5Ny8xMS8yMiBTTUkiDQoNCg0K
 ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX2ZsdF9yb3Vu
 ZHModm9pZCk7DQojIDk3ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0DQp9
 DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfY2Zsb2F0LmgiIDIgMw0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvc3Rk
 X2xpbWl0cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZCB7DQoNCiAgICBlbnVt
 IGZsb2F0X3JvdW5kX3N0eWxlIHsNCiAgICAgICAgcm91bmRfaW5kZXRlcm1p
 bmF0ZSA9IC0xLA0KICAgICAgICByb3VuZF90b3dhcmRfemVybyA9IDAsDQog
 ICAgICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLA0KICAgICAgICByb3VuZF90
 b3dhcmRfaW5maW5pdHkgPSAyLA0KICAgICAgICByb3VuZF90b3dhcmRfbmVn
 X2luZmluaXR5ID0gMw0KICAgIH07DQoNCiAgICBlbnVtIGZsb2F0X2Rlbm9y
 bV9zdHlsZSB7DQogICAgICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEs
 DQogICAgICAgIGRlbm9ybV9hYnNlbnQgPSAwLA0KICAgICAgICBkZW5vcm1f
 cHJlc2VudCA9IDENCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
 X1RwPiBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgew0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOw0KDQogICAgICAg
 IHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
 dDxfVHA+KDApOyB9DQogICAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3co
 KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQoNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IGRpZ2l0czEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGludCByYWRpeCA9IDA7DQoNCiAgICAgICAgc3RhdGljIF9UcCBlcHNp
 bG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
 DQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsg
 cmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCg0KICAgICAgICBzdGF0
 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
 ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
 bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAg
 ICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0
 YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAgc3RhdGljIF9UcCBxdWll
 dF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
 IH0NCiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
 KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICAgIHN0
 YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj
 X2Nhc3Q8X1RwPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
 IGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCBpc19ib3VuZGVkID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIHRyYXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
 b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
 X1RwPiBfVHAgX19saW1pdHNfaW5maW5pdHkoKTsNCiAgICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19xdWlldF9OYU4oKTsNCiAgICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdf
 TmFOKCk7DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1p
 dHNfZGVub3JtX21pbigpOw0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVt
 ZXJpY19saW1pdHM8Ym9vbD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGJv
 b2wgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBmYWxzZTsgfQ0K
 ICAgICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIHRydWU7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
 Z2l0cyA9IDg7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
 PSAyOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm
 YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
 IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g
 dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog
 ICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAg
 IHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJy
 b3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAg
 ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
 c2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
 TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
 cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K
 DQogICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQ0KICAg
 ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQ0KICAgICAg
 ICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRp
 YyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0
 dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRpYyBi
 b29sIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0
 YXRpY19jYXN0PGJvb2w+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
 Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
 dG93YXJkX3plcm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4gc3RydWN0
 IG51bWVyaWNfbGltaXRzPGNoYXI+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRp
 YyBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gKC0xMjgp
 OyB9DQogICAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkNCiAgICAg
 ICAgeyByZXR1cm4gMTI3OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
 dCBkaWdpdHMgPSA3Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
 czEwID0gMjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
 ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdl
 ciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
 ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
 DQogICAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRf
 ZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAg
 ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
 ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
 bmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
 ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
 Ow0KDQogICAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQ0KICAg
 ICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAg
 IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0
 YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRp
 YyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
 b3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBz
 dHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+IHsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQog
 ICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuICgtMTI4KTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVk
 IGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxMjc7IH0N
 Cg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHNp
 Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IDA7IH0NCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9y
 KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
 TiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
 X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0K
 ICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygp
 DQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigw
 KTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkg
 dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQg
 Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25h
 bGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
 YXN0PHNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVk
 IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 c3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQoNCiAgICAgICAgc3Rh
 dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
 bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxh
 dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gew0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
 dWU7DQoNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyB1
 bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
 MjU1OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBz
 dGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAg
 ICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
 IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9
 DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
 MDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
 MDsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
 PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
 X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
 c2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
 ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
 PSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZp
 bml0eSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
 dW5zaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
 IGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBz
 dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgICBzdGF0
 aWMgdW5zaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAg
 ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg
 fQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkg
 dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
 ZCBjaGFyPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
 c19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 aXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
 bnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
 ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
 emVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJp
 Y19saW1pdHM8c2hvcnQ+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBzaG9y
 dCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgtMzI3NjctMSk7
 IH0NCiAgICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAg
 ICAgeyByZXR1cm4gMzI3Njc7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg
 aW50IGRpZ2l0cyA9IDE1Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
 Z2l0czEwID0gNDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
 bmVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
 ZWdlciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
 YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
 IDI7DQogICAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyBzaG9ydCBy
 b3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0K
 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
 DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
 ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
 YU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
 Z25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZs
 b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
 ZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7
 IH0NCiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkN
 CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9DQog
 ICAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0NCiAg
 ICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KDQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
 dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KICAg
 IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNo
 b3J0PiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
 emVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
 bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAg
 IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpDQogICAgICAg
 IHsgcmV0dXJuIDY1NTM1OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
 dCBkaWdpdHMgPSAxNjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
 dHMxMCA9IDQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l
 ZCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
 Z2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
 Y3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
 MjsNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0
 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGlj
 IHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAg
 ICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
 aW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
 bl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
 YXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
 eF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAg
 ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
 PSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
 YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgdW5z
 aWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0
 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAg
 ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
 MCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGlu
 Z19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
 PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWdu
 ZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9DQoNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
 ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0
 ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+IHsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0K
 DQogICAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQ0KICAgICAgICB7
 IHJldHVybiAoLTIxNDc0ODM2NDctMSk7IH0NCiAgICAgICAgc3RhdGljIGlu
 dCBtYXgoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7
 IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRp
 YyBpbnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsg
 fQ0KICAgICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
 aW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0
 IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
 aW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
 ZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3Qg
 Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0
 aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBz
 dGF0aWNfY2FzdDxpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyBpbnQgcXVp
 ZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
 dDxpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05h
 TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
 PigwKTsgfQ0KICAgICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJv
 dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0N
 Cg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
 c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
 PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
 eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsN
 Cg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
 bmVkIGludD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
 aWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGlu
 dCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAg
 ICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpDQogICAgICAg
 IHsgcmV0dXJuICgyMTQ3NDgzNjQ3ICogMlUgKyAxKTsgfQ0KDQogICAgICAg
 IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBp
 bnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0K
 ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
 bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
 IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAg
 ICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAg
 ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9
 DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
 bnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFs
 aW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
 c3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWdu
 ZWQgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCg0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0
 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg
 ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
 bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxh
 dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4gew0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAg
 ICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJl
 dHVybiAoLTIxNDc0ODM2NDdMLTEpOyB9DQogICAgICAgIHN0YXRpYyBsb25n
 IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7
 IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRp
 YyBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7
 IH0NCiAgICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp
 DQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAg
 IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
 X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25z
 dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0
 YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy
 biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgICBzdGF0aWMgbG9u
 ZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRp
 Y19jYXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIHNpZ25h
 bGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
 YXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9t
 aW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
 bmc+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
 NTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
 bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
 ZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
 YXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
 c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
 dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
 Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xp
 bWl0czx1bnNpZ25lZCBsb25nPiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
 b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMg
 dW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
 IDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAx
 KTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAg
 ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0
 YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAg
 IHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
 cm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0N
 Cg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
 Ow0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
 IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
 TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
 aWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBm
 bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
 IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmlu
 aXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1
 bnNpZ25lZCBsb25nPigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg
 bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0
 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRp
 YyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAg
 ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
 DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0
 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
 IGxvbmc+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
 aWVjNTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
 Ym91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
 dHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
 bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZs
 b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
 cm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf
 bGltaXRzPGZsb2F0PiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgZmxvYXQg
 bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxLjE3NTQ5NDM1MUUt
 MzhGOyB9DQogICAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpDQog
 ICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDY2RSszOEY7IH0NCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0Ow0KICAgICAgICBzdGF0
 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNzsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNv
 bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGZsb2F0IGVw
 c2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDEuMTkyMDkyODk2
 RS0wN0Y7IH0NCiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkg
 dGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxLjBmOyB9DQoNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1Ow0KICAgICAg
 ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3Ow0KICAg
 ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4Ow0K
 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
 bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
 ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
 YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
 dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
 bHNlOw0KDQogICAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93
 KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9
 DQogICAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpDQog
 ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQ0KICAg
 ICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAg
 ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9DQogICAg
 ICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAg
 ICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCg0KICAgICAg
 ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7DQogICAg
 ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
 bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAg
 dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPiB7DQog
 ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
 ZTsNCg0KICAgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkNCiAg
 ICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDg7IH0NCiAg
 ICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4OyB9DQoNCiAgICAgICAg
 c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGludCBkaWdpdHMxMCA9IDE1Ow0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
 b25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgZG91YmxlIGVw
 c2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5
 MjUwMzEzMUUtMTY7IH0NCiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9l
 cnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4wOyB9DQoNCiAg
 ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsN
 CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0z
 MDc7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
 MTAyNDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
 MCA9IDMwODsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m
 aW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
 X3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
 bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
 Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
 YWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
 X2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgZG91YmxlIGluZmlu
 aXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxk
 b3VibGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFO
 KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
 bGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05h
 TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
 YmxlPigwKTsgfQ0KICAgICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9taW4o
 KSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
 ZT4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
 NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
 bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
 ZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
 YXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
 ZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxv
 YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
 bzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
 aW1pdHM8bG9uZyBkb3VibGU+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
 b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBs
 b25nIGRvdWJsZSBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDMu
 MzYyMTAzMTQzMTEyMDkzNTA2MjYyNjc3ODE3MzIxNzUyNjAzRS00OTMyTDsg
 fQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQ0K
 ICAgICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTA4NTc1OTMy
 NjYyODAwNzAxNkUrNDkzMkw7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg
 aW50IGRpZ2l0cyA9IDExMzsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
 aWdpdHMxMCA9IDM0Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
 aWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
 bnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
 X2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk
 aXggPSAyOw0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigp
 IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS45MjU5Mjk5NDQzODcyMzU4
 NTMwNTU5Nzc5NDI1ODQ5MjczMTlFLTM0TDsgfQ0KICAgICAgICBzdGF0aWMg
 bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsg
 cmV0dXJuIDEuMEw7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
 bl9leHBvbmVudCA9IC0xNjM4MTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
 dCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOw0KICAgICAgICBzdGF0aWMgY29u
 c3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0Ow0KICAgICAgICBzdGF0aWMg
 Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsNCg0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0K
 ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
 IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAg
 ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpDQog
 ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsg
 fQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhy
 b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJs
 ZT4oMCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGlu
 Z19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
 PGxvbmcgZG91YmxlPigwKTsgfQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3Vi
 bGUgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh
 dGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9DQoNCiAgICAgICAgc3RhdGlj
 IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRp
 YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBz
 dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOw0KICAgICAgICBzdGF0
 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAg
 ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
 ID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KfQ0KIyA0MSAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJl
 YW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3Mg
 YmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hh
 clQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlw
 ZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
 ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYg
 dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAgICB0
 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOw0K
 ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAgICAg
 IHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19z
 dHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFy
 VCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNf
 aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAg
 ICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
 cz4gX19pc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9nZXQ8
 X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsNCiAg
 ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7DQoNCiAg
 ICBwcm90ZWN0ZWQ6DQoNCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50Ow0K
 DQogICAgcHVibGljOg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNf
 aXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgew0KICAg
 ICAgICB0aGlzLT5pbml0KF9fc2IpOw0KICAgICAgICBfTV9nY291bnQgPSBz
 dHJlYW1zaXplKDApOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsDQogICAg
 ICB+YmFzaWNfaXN0cmVhbSgpDQogICAgICB7IF9NX2djb3VudCA9IHN0cmVh
 bXNpemUoMCk7IH0NCg0KDQogICAgICBjbGFzcyBzZW50cnk7DQogICAgICBm
 cmllbmQgY2xhc3Mgc2VudHJ5Ow0KDQoNCg0KICAgICAgX19pc3RyZWFtX3R5
 cGUmDQogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp
 KF9faXN0cmVhbV90eXBlJikpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYN
 CiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190
 eXBlJikpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJh
 dG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7DQoNCg0KICAg
 ICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9f
 bik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+
 PihzaG9ydCYgX19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAg
 ICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOw0KDQogICAgICBf
 X2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOw0K
 DQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5z
 aWduZWQgaW50JiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAg
 ICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsNCg0KICAgICAgX19pc3RyZWFt
 X3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7
 DQojIDEyNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX2lzdHJlYW0uaCIgMw0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog
 ICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOw0KDQogICAgICBfX2lzdHJl
 YW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOw0KDQog
 ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4obG9uZyBk
 b3VibGUmIF9fZik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg
 b3BlcmF0b3I+Pih2b2lkKiYgX19wKTsNCg0KICAgICAgX19pc3RyZWFtX3R5
 cGUmDQogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ip
 Ow0KDQoNCiAgICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgICBnY291bnQo
 dm9pZCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQ0KDQog
 ICAgICBpbnRfdHlwZQ0KICAgICAgZ2V0KHZvaWQpOw0KDQogICAgICBfX2lz
 dHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7DQoNCiAg
 ICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KGNoYXJfdHlwZSogX19z
 LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOw0KDQogICAg
 ICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBl
 KiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gZ2V0KF9f
 cywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0NCg0KICAgICAgX19pc3Ry
 ZWFtX3R5cGUmDQogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwg
 Y2hhcl90eXBlIF9fZGVsaW0pOw0KDQogICAgICBpbmxpbmUgX19pc3RyZWFt
 X3R5cGUmDQogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikNCiAg
 ICAgIHsgcmV0dXJuIGdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0N
 Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXRsaW5lKGNoYXJf
 dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p
 Ow0KDQogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXRs
 aW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsg
 cmV0dXJuIGdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsg
 fQ0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGlnbm9yZShzdHJl
 YW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlw
 ZTo6ZW9mKCkpOw0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgcGVlayh2b2lk
 KTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICByZWFkKGNoYXJf
 dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHN0cmVhbXNp
 emUNCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
 IF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgcHV0YmFj
 ayhjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog
 ICAgICB1bmdldCh2b2lkKTsNCg0KICAgICAgaW50DQogICAgICBzeW5jKHZv
 aWQpOw0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgdGVsbGcodm9pZCk7DQoN
 CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgc2Vla2cocG9zX3R5cGUp
 Ow0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKG9mZl90
 eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7DQoNCiAgICBwcml2YXRlOg0KDQoN
 CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0
 IF9faXN0cmVhbV90eXBlJik7DQoNCiAgICAgIGJhc2ljX2lzdHJlYW0oY29u
 c3QgX19pc3RyZWFtX3R5cGUmKTsNCg0KICAgIH07DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
 IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5DQogICAg
 ew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
 X1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz
 aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K
 ICAgICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
 Y3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
 aW50X3R5cGUgX19pbnRfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAg
 IHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs
 IGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsNCg0KICAgICAgb3BlcmF0b3Ig
 Ym9vbCgpIHsgcmV0dXJuIF9NX29rOyB9DQoNCiAgICBwcml2YXRlOg0KICAg
 ICAgYm9vbCBfTV9vazsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOw0K
 DQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
 YW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykN
 CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIm
 PihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg
 YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+
 KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBj
 aGFyJiBfX2MpDQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRf
 Y2FzdDxjaGFyJj4oX19jKSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7DQoNCiAg
 dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPGNo
 YXIsX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
 YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7
 IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Mp
 KTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNf
 aXN0cmVhbTxjaGFyLF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
 aXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19z
 KQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
 cio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0N
 CiAgICA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4s
 DQogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19p
 c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAg
 ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
 dHJlYW1fdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX2lv
 c3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
 KQ0KICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5
 cGUoX19zYikNCiAgICAgIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+
 YmFzaWNfaW9zdHJlYW0oKSB7IH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
 X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICB3cyhiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOw0KfQ0KDQoNCg0KDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl
 YW0udGNjIiAxIDMNCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAz
 DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfbG9jYWxlLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzDQojIDQwICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9j
 YWxlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMw0KIyA0MSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o
 IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMw0KIyAzNSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50
 Y2MiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2NlcnJuby5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMw0KIyAx
 ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzIDQNCiMgMTEgIi91c3IvaW5j
 bHVkZS9lcnJuby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5o
 CTEuMTUJOTgvMDMvMDIgU01JIg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNs
 dWRlL3N5cy9lcnJuby5oIiAxIDMgNA0KIyAxMSAiL3Vzci9pbmNsdWRlL3N5
 cy9lcnJuby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5oCTEu
 MTkJOTgvMDEvMTQgU01JIg0KIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJu
 by5oIiAzIDQNCmV4dGVybiAiQyIgew0KIyAxOTEgIi91c3IvaW5jbHVkZS9z
 eXMvZXJybm8uaCIgMyA0DQp9DQojIDE4ICIvdXNyL2luY2x1ZGUvZXJybm8u
 aCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzIgIi91c3IvaW5jbHVk
 ZS9lcnJuby5oIiAzIDQNCmV4dGVybiBpbnQgKl9fX2Vycm5vKCk7DQoNCg0K
 DQoNCg0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
 KystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMw0KIyAzNiAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50
 Y2MiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
 djMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMN
 CiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNA0KIyA5ICIvdXNy
 L2luY2x1ZGUvbG9jYWxlLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWxv
 Y2FsZS5oCTEuMTgJOTgvMDEvMjIgU01JIg0KIyA0NiAiL3Vzci9pbmNsdWRl
 L2xvY2FsZS5oIiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
 X3Rlc3RzLmgiIDEgMyA0DQojIDQ3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
 IDIgMyA0DQoNCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
 Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpYmlu
 dGwuaCIgMSAzIDQNCiMgMjAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
 LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9saWJpbnRs
 LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWxpYmludGwuaAkxLjEyCTk3
 LzA4LzIwIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZz
 LmgiIDEgMyA0DQojIDIzICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
 aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvbGliaW50bC5o
 IiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA0NCAiL2hvbWUvbWRlaWwv
 YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
 bmNsdWRlL2xpYmludGwuaCIgMyA0DQpleHRlcm4gY2hhciAqZGNnZXR0ZXh0
 KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBpbnQpOw0KZXh0
 ZXJuIGNoYXIgKmRnZXR0ZXh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
 KTsNCmV4dGVybiBjaGFyICpnZXR0ZXh0KGNvbnN0IGNoYXIgKik7DQpleHRl
 cm4gY2hhciAqdGV4dGRvbWFpbihjb25zdCBjaGFyICopOw0KZXh0ZXJuIGNo
 YXIgKmJpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
 KTsNCg0KDQoNCmV4dGVybiBpbnQgd2Rpbml0KHZvaWQpOw0KZXh0ZXJuIGlu
 dCB3ZGNoa2luZCh3Y2hhcl90KTsNCmV4dGVybiBpbnQgd2RiaW5kZih3Y2hh
 cl90LCB3Y2hhcl90LCBpbnQpOw0KZXh0ZXJuIHdjaGFyX3QgKndkZGVsaW0o
 d2NoYXJfdCwgd2NoYXJfdCwgaW50KTsNCmV4dGVybiB3Y2hhcl90IG1jZmls
 bGVyKHZvaWQpOw0KZXh0ZXJuIGludCBtY3dyYXAodm9pZCk7DQojIDc4ICIv
 aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
 aXMyLjcvMy4wL2luY2x1ZGUvbGliaW50bC5oIiAzIDQNCn0NCiMgNTIgIi91
 c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIg
 ew0KDQoNCnN0cnVjdCBsY29udiB7DQogICAgICAgIGNoYXIgKmRlY2ltYWxf
 cG9pbnQ7DQogICAgICAgIGNoYXIgKnRob3VzYW5kc19zZXA7DQogICAgICAg
 IGNoYXIgKmdyb3VwaW5nOw0KICAgICAgICBjaGFyICppbnRfY3Vycl9zeW1i
 b2w7DQogICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsNCiAgICAgICAg
 Y2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7DQogICAgICAgIGNoYXIgKm1vbl90
 aG91c2FuZHNfc2VwOw0KICAgICAgICBjaGFyICptb25fZ3JvdXBpbmc7DQog
 ICAgICAgIGNoYXIgKnBvc2l0aXZlX3NpZ247DQogICAgICAgIGNoYXIgKm5l
 Z2F0aXZlX3NpZ247DQogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOw0K
 ICAgICAgICBjaGFyIGZyYWNfZGlnaXRzOw0KICAgICAgICBjaGFyIHBfY3Nf
 cHJlY2VkZXM7DQogICAgICAgIGNoYXIgcF9zZXBfYnlfc3BhY2U7DQogICAg
 ICAgIGNoYXIgbl9jc19wcmVjZWRlczsNCiAgICAgICAgY2hhciBuX3NlcF9i
 eV9zcGFjZTsNCiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsNCiAgICAgICAg
 Y2hhciBuX3NpZ25fcG9zbjsNCn07DQojIDEwMiAiL3Vzci9pbmNsdWRlL2xv
 Y2FsZS5oIiAzIDQNCmV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50LCBjb25z
 dCBjaGFyICopOw0KZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udih2
 b2lkKTsNCg0KDQoNCg0KDQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDIgMw0KDQoN
 Cg0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpsY29udjsNCiAg
 dXNpbmcgOjpzZXRsb2NhbGU7DQogIHVzaW5nIDo6bG9jYWxlY29udjsNCn0N
 CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzDQoj
 IDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9s
 b2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
 Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL3N0
 ZF9saW1pdHMuaCIgMSAzDQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9t
 ZW1vcnkuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl
 ci5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o
 IiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRl
 aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMNCiMgMzMg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My90eXBlaW5mbyIg
 Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhj
 ZXB0aW9uIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My90eXBlaW5mbyIgMiAzDQoNCmV4dGVybiAiQysrIiB7DQoNCm5h
 bWVzcGFjZSBfX2N4eGFiaXYxDQp7DQogIGNsYXNzIF9fY2xhc3NfdHlwZV9p
 bmZvOw0KfQ0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIGNsYXNzIHR5
 cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAgIHZpcnR1YWwg
 fnR5cGVfaW5mbygpOw0KDQogIHByaXZhdGU6DQoNCiAgICB0eXBlX2luZm8m
 IG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsNCiAgICB0eXBlX2luZm8o
 Y29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGNvbnN0
 IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQg
 dHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQ0K
 DQogIHB1YmxpYzoNCg0KICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdA0K
 ICAgIHsgcmV0dXJuIF9fbmFtZTsgfQ0KIyA4NiAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQogICAgYm9vbCBiZWZv
 cmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJldHVy
 biBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0NCiAgICBib29sIG9wZXJhdG9y
 PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJldHVy
 biBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9DQoNCiAgICBib29sIG9wZXJh
 dG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJl
 dHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0NCg0KDQogIHB1YmxpYzoNCg0K
 ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0Ow0KDQog
 ICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0Ow0KDQoN
 Cg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3Qg
 dHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNv
 bnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3Qg
 X19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBj
 b25zdDsNCiAgfTsNCg0KICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNl
 cHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2Nhc3QoKSB0aHJvdygp
 IHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsNCiAgfTsN
 Cg0KICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbg0KICB7
 DQogIHB1YmxpYzoNCiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9DQog
 ICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOw0KICB9Ow0KfQ0K
 DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMSAz
 DQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfdmVjdG9yLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMNCiMgMzQg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0
 ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAzNSAiL2hvbWUv
 bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQu
 aCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lkDQogIF9fdGhy
 b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJv
 d19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFk
 X2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF90eXBlaWQo
 dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29u
 c3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfZG9tYWluX2Vy
 cm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2lu
 dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog
 IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAg
 dm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3Mp
 Ow0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo
 YXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
 bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X292ZXJmbG93
 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
 X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdm9p
 ZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7DQp9
 DQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzDQojIDM0
 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
 dmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDM1ICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi
 IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAzNiAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMN
 CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM3ICIvaG9tZS9tZGVpbC9i
 aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMw0K
 IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGxfdmVjdG9yLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzDQojIDEgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
 cl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl
 eGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
 ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5o
 IiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7
 DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7DQoN
 Cg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOw0KDQoNCiAg
 dm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAg
 X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Ro
 cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K
 ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQog
 IHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq
 IF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z
 dCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFu
 Z2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVu
 dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190
 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQN
 CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
 DQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh
 ciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3NfZmFpbHVyZShj
 b25zdCBjaGFyKiBfX3MpOw0KfQ0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMNCiMgMSAi
 L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
 dF9jaGVjay5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzDQoNCm5hbWVzcGFj
 ZSBzdGQNCnsNCiMgNDggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0bF92ZWN0b3IuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9U
 cCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+DQpjbGFzcyBf
 VmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVu
 YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
 X3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9y
 X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf
 YWxsb2NhdG9yOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFs
 bG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihf
 X2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3Rv
 cmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIGFsbG9jYXRvcl90eXBl
 IF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0Ow0KICBfVHAq
 IF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBf
 VHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyByZXR1cm4gX01f
 ZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2b2lkIF9NX2Rl
 YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAgeyBpZiAoX19w
 KSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQ0K
 fTsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0
 b3I+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9y
 LCB0cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
 X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAg
 ICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRf
 YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsg
 fQ0KDQogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
 ZSYpDQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
 b2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIF9UcCogX01f
 c3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9NX2VuZF9vZl9z
 dG9yYWdlOw0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
 VHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsNCiAg
 X1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsgcmV0dXJuIF9B
 bGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9DQogIHZvaWQgX01fZGVhbGxv
 Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IF9BbGxvY190eXBl
 OjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh
 c3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlDQog
 IDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1Rw
 LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVkZWYgX1Zl
 Y3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1Nf
 aW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0eXBlZGVmIHR5
 cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsN
 Cg0KICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkg
 OiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBj
 b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgew0KICAg
 IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBfTV9maW5pc2gg
 PSBfTV9zdGFydDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0
 ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxv
 Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7
 IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
 ID0gYWxsb2NhdG9yPF9UcD4gPg0KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVk
 IF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4NCnsNCg0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
 DQpwcml2YXRlOg0KICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxv
 Yz4gX0Jhc2U7DQogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0
 b3JfdHlwZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsN
 CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOw0KICB0eXBlZGVmIGNv
 bnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgX19u
 b3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0ZXJhdG9y
 Ow0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIs
 IHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsNCiAgdHlwZWRlZiB2YWx1
 ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw
 ZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
 cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCg0K
 ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxv
 Y2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
 IGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0K
 ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv
 bnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
 YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KcHJvdGVjdGVk
 Og0KICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7DQogIHVzaW5nIF9CYXNl
 OjpfTV9kZWFsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7DQog
 IHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7DQogIHVzaW5nIF9CYXNlOjpfTV9l
 bmRfb2Zfc3RvcmFnZTsNCg0KcHJvdGVjdGVkOg0KICB2b2lkIF9NX2luc2Vy
 dF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOw0K
 ICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7DQoN
 CnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRv
 ciAoX01fc3RhcnQpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
 c3QNCiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9
 DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5p
 c2gpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
 IGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9DQoNCiAgcmV2ZXJzZV9p
 dGVyYXRvciByYmVnaW4oKQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0
 b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
 KCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
 KGVuZCgpKTsgfQ0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQ0KICAgIHsg
 cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0NCiAgY29uc3Rf
 cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QNCiAgICB7IHJldHVybiBj
 b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9DQoNCiAgc2l6ZV90
 eXBlIHNpemUoKSBjb25zdA0KICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQo
 KSAtIGJlZ2luKCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
 DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9
 DQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0DQogICAgeyByZXR1cm4g
 c2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAt
 IGJlZ2luKCkpOyB9DQogIGJvb2wgZW1wdHkoKSBjb25zdA0KICAgIHsgcmV0
 dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICByZWZlcmVuY2Ugb3BlcmF0
 b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24p
 OyB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf
 X24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0NCg0KICB2
 b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsNCiAg
 ICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgIF9fdGhyb3dfb3V0
 X29mX3JhbmdlKCJ2ZWN0b3IiKTsNCiAgfQ0KDQogIHJlZmVyZW5jZSBhdChz
 aXplX3R5cGUgX19uKQ0KICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0
 dXJuICgqdGhpcylbX19uXTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6
 ZV90eXBlIF9fbikgY29uc3QNCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7
 IHJldHVybiAoKnRoaXMpW19fbl07IH0NCg0KICBleHBsaWNpdCB2ZWN0b3Io
 Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
 DQogICAgOiBfQmFzZShfX2EpIHt9DQoNCiAgdmVjdG9yKHNpemVfdHlwZSBf
 X24sIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgIGNvbnN0IGFsbG9j
 YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jh
 c2UoX19uLCBfX2EpDQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVk
 X2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQ0KDQogIGV4cGxp
 Y2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQ0KICAgIDogX0Jhc2UoX19uLCBh
 bGxvY2F0b3JfdHlwZSgpKQ0KICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
 aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9DQoNCiAgdmVj
 dG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCiAgICA6IF9C
 YXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyBf
 TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9f
 eC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
 X0lucHV0SXRlcmF0b3I+DQogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2Zp
 cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICBjb25zdCBh
 bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFz
 ZShfX2EpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
 bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9p
 bml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsN
 CiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBf
 TV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs
 dWUsIF9fdHJ1ZV90eXBlKSB7DQogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0
 ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBf
 X247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f
 c3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
 c3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgo
 X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgew0K
 ICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0
 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQogIH52ZWN0b3Io
 KSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0NCg0KICB2ZWN0
 b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwg
 X0FsbG9jPiYgX194KTsNCiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24p
 IHsNCiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgew0KICAgICAgY29uc3Qg
 c2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgICBwb2ludGVy
 IF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg
 X01fZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz
 aCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf
 c3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190bXA7
 DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7DQogICAg
 ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICAgIH0N
 CiAgfQ0KDQoNCg0KDQoNCg0KICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19u
 LCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192
 YWwpOyB9DQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwg
 Y29uc3QgX1RwJiBfX3ZhbCk7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
 dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp
 cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5
 cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs
 IF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg
 X19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
 c3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRl
 Z2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQ0KICAgIHsg
 X01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7
 IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4NCiAgdm9pZCBf
 TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
 dGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01fYXNzaWduX2F1
 eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
 dCkpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
 ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
 X0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
 aW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
 cndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJk
 SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQog
 ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoN
 CiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0NCiAg
 Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu
 KCk7IH0NCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0g
 MSk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVy
 biAqKGVuZCgpIC0gMSk7IH0NCg0KICB2b2lkIHB1c2hfYmFjayhjb25zdCBf
 VHAmIF9feCkgew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0
 b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7DQog
 ICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgX01f
 aW5zZXJ0X2F1eChlbmQoKSwgX194KTsNCiAgfQ0KICB2b2lkIHB1c2hfYmFj
 aygpIHsNCiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdl
 KSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAgICAgICsrX01f
 ZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4
 KGVuZCgpKTsNCiAgfQ0KICB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9j
 PiYgX194KSB7DQogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3Rh
 cnQpOw0KICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gp
 Ow0KICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2Vu
 ZF9vZl9zdG9yYWdlKTsNCiAgfQ0KDQogIGl0ZXJhdG9yIGluc2VydChpdGVy
 YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgew0KICAgIHNpemVf
 dHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01f
 ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0g
 ZW5kKCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7DQog
 ICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgX01f
 aW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsNCiAgICBy
 ZXR1cm4gYmVnaW4oKSArIF9fbjsNCiAgfQ0KICBpdGVyYXRvciBpbnNlcnQo
 aXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgIHNpemVfdHlwZSBfX24gPSBf
 X3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmluaXNoICE9IF9N
 X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsNCiAg
 ICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytfTV9maW5pc2g7
 DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0
 b3IoX19wb3NpdGlvbikpOw0KICAgIHJldHVybiBiZWdpbigpICsgX19uOw0K
 ICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2
 b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19m
 aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgdHlwZWRlZiB0
 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh
 bCBfSW50ZWdyYWw7DQogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBf
 X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBs
 YXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
 Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192
 YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K
 ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwg
 KF9UcCkgX192YWwpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
 ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBf
 X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICBfTV9yYW5n
 ZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
 YXRlZ29yeShfX2ZpcnN0KSk7DQogIH0NCg0KICB2b2lkIGluc2VydCAoaXRl
 cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQ0K
 ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQ0KDQog
 IHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5
 cGUgX19uLCBjb25zdCBfVHAmIF9feCk7DQoNCiAgdm9pZCBwb3BfYmFjaygp
 IHsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7
 DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
 ew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkNCiAgICAgIGNv
 cHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsNCiAgICAt
 LV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7DQogICAgcmV0
 dXJuIF9fcG9zaXRpb247DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
 b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7DQogICAgaXRlcmF0b3Ig
 X19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOw0KICAgIGRlc3Ry
 b3koX19pLCBlbmQoKSk7DQogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0g
 KF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICB9
 DQoNCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0
 IF9UcCYgX194KSB7DQogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpDQog
 ICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOw0KICAg
 IGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo
 KSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf
 c2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9DQogIHZvaWQg
 Y2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0KDQpwcm90ZWN0
 ZWQ6DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQog
 IHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwg
 X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
 IF9fbGFzdCkNCiAgew0KICAgIHBvaW50ZXIgX19yZXN1bHQgPSBfTV9hbGxv
 Y2F0ZShfX24pOw0KICAgIHRyeSB7DQogICAgICB1bmluaXRpYWxpemVkX2Nv
 cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAgICByZXR1cm4g
 X19yZXN1bHQ7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9j
 YXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsNCiAgfQ0KDQogIHRlbXBs
 YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9p
 bml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0
 X2l0ZXJhdG9yX3RhZykNCiAgew0KICAgIGZvciAoIDsgX19maXJzdCAhPSBf
 X2xhc3Q7ICsrX19maXJzdCkNCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7
 DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
 Pg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRv
 ciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
 cmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICB7
 DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJz
 dCwgX19sYXN0LCBfX24pOw0KICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUo
 X19uKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
 Ow0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
 LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFz
 cyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRl
 cmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAg
 ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0
 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9y
 YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAg
 ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
 YXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
 aXRlcmF0b3JfdGFnKTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
 YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj09KGNvbnN0IHZl
 Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
 bG9jPiYgX195KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6
 ZSgpICYmDQogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgp
 LCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
 YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcjwoY29uc3QgdmVj
 dG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
 b2M+JiBfX3kpDQp7DQogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFy
 ZShfX3guYmVnaW4oKSwgX194LmVuZCgpLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSB2
 b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1Rw
 LCBfQWxsb2M+JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7DQp9DQoNCnRl
 bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s
 DQpvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwg
 Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiAh
 KF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
 cyBfQWxsb2M+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+KGNvbnN0IHZlY3Rv
 cjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
 PiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRl
 IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVy
 YXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg
 dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiAhKF9feSA8
 IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
 Yz4NCmlubGluZSBib29sDQpvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAs
 IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
 KSB7DQogIHJldHVybiAhKF9feCA8IF9feSk7DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZlY3RvcjxfVHAsX0FsbG9jPiYN
 CnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZlY3Rvcjxf
 VHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0gdGhpcykgew0K
 ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOw0KICAg
 IGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgICBwb2ludGVyIF9f
 dG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4o
 KSwgX194LmVuZCgpKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
 bmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRf
 b2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190
 bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194
 bGVuOw0KICAgIH0NCiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7
 DQogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVu
 ZCgpLCBiZWdpbigpKSk7DQogICAgICBkZXN0cm95KF9faSwgZW5kKCkpOw0K
 ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9f
 eC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7DQogICAgICB1bmluaXRp
 YWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwg
 X01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0gX01fc3RhcnQg
 KyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0KDQp0ZW1wbGF0
 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZlY3RvcjxfVHAs
 IF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZh
 bHVlX3R5cGUmIF9fdmFsKQ0Kew0KICBpZiAoX19uID4gY2FwYWNpdHkoKSkg
 ew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwg
 Z2V0X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0aGlzKTsNCiAg
 fQ0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsNCiAgICBmaWxsKGJlZ2lu
 KCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01fZmluaXNoID0gdW5pbml0aWFs
 aXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsN
 CiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwg
 X192YWwpLCBlbmQoKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
 YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQp2b2lk
 IHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl
 ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
 IHsNCiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7DQogIGZvciAoIDsgX19m
 aXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr
 X19maXJzdCkNCiAgICAqX19jdXIgPSAqX19maXJzdDsNCiAgaWYgKF9fZmly
 c3QgPT0gX19sYXN0KQ0KICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7DQogIGVs
 c2UNCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7DQp9DQoN
 CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
 PGNsYXNzIF9Gb3J3YXJkSXRlcj4NCnZvaWQNCnZlY3RvcjxfVHAsIF9BbGxv
 Yz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
 YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogIHNpemVfdHlwZSBf
 X2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p
 Ow0KDQogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsNCiAgICBwb2ludGVy
 IF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf
 X2xhc3QpKTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOw0K
 ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl
 IC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7DQogICAgX01f
 ZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVu
 Ow0KICB9DQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgew0KICAgIGl0
 ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f
 c3RhcnQpKTsNCiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOw0K
 ICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7DQogIH0NCiAg
 ZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsNCiAg
 ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOw0KICAgIGNvcHkoX19maXJzdCwg
 X19taWQsIF9NX3N0YXJ0KTsNCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp
 emVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsNCiAgfQ0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkDQp2
 ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f
 cG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQ0Kew0KICBpZiAoX01fZmluaXNo
 ICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3RydWN0KF9NX2Zp
 bmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9maW5pc2g7DQog
 ICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFja3dhcmQoX19w
 b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9N
 X2ZpbmlzaC0gMSkpOw0KICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7DQog
 IH0NCiAgZWxzZSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUg
 PSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRf
 c2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAgIGl0ZXJhdG9y
 IF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQogICAgaXRlcmF0
 b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsNCiAgICB0cnkgew0KICAg
 ICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y
 KF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7DQogICAgICBjb25z
 dHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsNCiAgICAgICsrX19u
 ZXdfZmluaXNoOw0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl
 ZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksDQogICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmlu
 aXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3
 X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3Rh
 cnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9Ow0KDQogICAgZGVzdHJveShi
 ZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
 X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAgX01fc3RhcnQg
 PSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgX01fZmluaXNoID0gX19uZXdf
 ZmluaXNoLmJhc2UoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3
 X3N0YXJ0LmJhc2UoKSArIF9fbGVuOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQNCnZlY3RvcjxfVHAsIF9B
 bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikNCnsN
 CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAg
 IGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOw0KICAg
 ICsrX01fZmluaXNoOw0KICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
 aXRlcmF0b3IoX01fZmluaXNoIC0gMiksDQogICAgICAgICAgICAgICAgICBp
 dGVyYXRvcihfTV9maW5pc2ggLSAxKSk7DQogICAgKl9fcG9zaXRpb24gPSBf
 VHAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXplX3R5cGUgX19v
 bGRfc2l6ZSA9IHNpemUoKTsNCiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g
 PSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7DQogICAg
 cG9pbnRlciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAg
 ICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgIHRy
 eSB7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
 aXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLA0KICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsNCiAg
 ICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOw0KICAgICAgKytfX25ld19m
 aW5pc2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv
 cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwNCiAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gp
 Ow0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3Rh
 cnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxf
 X2xlbikpOyB0aHJvdzsgfTsNCg0KICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5k
 KCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9z
 dG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
 cnQ7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0KICAgIF9NX2Vu
 ZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsNCiAgfQ0KfQ0K
 DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZl
 Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9f
 cG9zaXRpb24sIHNpemVfdHlwZSBfX24sDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBp
 ZiAoX19uICE9IDApIHsNCiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9z
 dG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAgIF9UcCBfX3hf
 Y29weSA9IF9feDsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
 dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRlcmF0b3IgX19v
 bGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19lbGVtc19hZnRl
 ciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu
 aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9N
 X2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
 dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAg
 ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9j
 b3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICB1bmluaXRp
 YWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIs
 IF9feF9jb3B5KTsNCiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxl
 bXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
 aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9NX2Zp
 bmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxsKF9fcG9zaXRp
 b24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAgfQ0KICAgIH0N
 CiAgICBlbHNlIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl
 ID0gc2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19v
 bGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAgICAgaXRlcmF0
 b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsNCiAgICAgIGl0
 ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7DQogICAgICB0cnkg
 ew0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
 YmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAgICAgICBf
 X25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5p
 c2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNoDQogICAgICAg
 ICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9f
 bmV3X2ZpbmlzaCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pIHsgKGRl
 c3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0
 ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07DQoNCiAg
 ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9k
 ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
 YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOw0K
 ICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsNCiAgICAg
 IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19s
 ZW47DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
 YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
 dm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0
 ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0
 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0
 X2l0ZXJhdG9yX3RhZykNCnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
 dDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpf
 X2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
 bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
 YXJkSXRlcmF0b3I+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y
 YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f
 Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQp7DQog
 IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIHNpemVfdHlwZSBfX24g
 PSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsNCiAg
 ICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNo
 KSA+PSBfX24pIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
 dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRlcmF0b3IgX19v
 bGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19lbGVtc19hZnRl
 ciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu
 aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9N
 X2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
 dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAg
 ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7DQogICAg
 ICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
 X21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxl
 bXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQs
 IF9fbGFzdCwgX01fZmluaXNoKTsNCiAgICAgICAgX01fZmluaXNoICs9IF9f
 biAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
 eShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAg
 ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBjb3B5
 KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAgIH0NCiAgICB9
 DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
 ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
 b2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAgICAgIGl0ZXJh
 dG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQogICAgICBp
 dGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOw0KICAgICAgdHJ5
 IHsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
 KGl0ZXJhdG9yKF9NX3N0YXJ0KSwNCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsN
 CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
 Zmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsNCiAgICAgICAgX19uZXdf
 ZmluaXNoDQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
 dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmluaXNoKTsNCiAg
 ICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFy
 dCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJh
 c2UoKSxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgICAgZGVzdHJveShfTV9z
 dGFydCwgX01fZmluaXNoKTsNCiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
 cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgICAgX01f
 c3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgICBfTV9maW5pc2gg
 PSBfX25ld19maW5pc2guYmFzZSgpOw0KICAgICAgX01fZW5kX29mX3N0b3Jh
 Z2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsNCiAgICB9DQogIH0N
 Cn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
 YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAz
 DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGxfYnZlY3Rvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCnN0YXRp
 YyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25l
 ZCBpbnQpKTsNCg0Kc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsNCiAgdW5zaWdu
 ZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01fbWFzazsNCiAgX0Jp
 dF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf
 X3kpDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQ0KDQpwdWJs
 aWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDAp
 IHt9DQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhKCEoKl9N
 X3AgJiBfTV9tYXNrKSk7IH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9y
 PShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21h
 c2s7DQogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsNCiAgICByZXR1cm4g
 KnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25z
 dCBfQml0X3JlZmVyZW5jZSYgX194KQ0KICAgIHsgcmV0dXJuICp0aGlzID0g
 Ym9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3Jl
 ZmVyZW5jZSYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIGJvb2woKnRoaXMp
 ID09IGJvb2woX194KTsgfQ0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0
 X3JlZmVyZW5jZSYgX194KSBjb25zdCB7DQogICAgcmV0dXJuICFib29sKCp0
 aGlzKSAmJiBib29sKF9feCk7DQogIH0NCiAgdm9pZCBmbGlwKCkgeyAqX01f
 cCBePSBfTV9tYXNrOyB9DQp9Ow0KDQppbmxpbmUgdm9pZCBzd2FwKF9CaXRf
 cmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQ0Kew0KICBib29s
 IF9fdG1wID0gX194Ow0KICBfX3ggPSBfX3k7DQogIF9feSA9IF9fdG1wOw0K
 fQ0KDQpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIHJhbmRv
 bV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0Kew0KICB1bnNp
 Z25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7DQoN
 CiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNp
 Z25lZCBpbnQgX195KQ0KICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195
 KSB7fQ0KDQogIHZvaWQgX01fYnVtcF91cCgpIHsNCiAgICBpZiAoX01fb2Zm
 c2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9NX29mZnNldCA9
 IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9DQogIHZvaWQgX01fYnVt
 cF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7DQogICAg
 ICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAgIC0tX01fcDsN
 CiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkg
 ew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7
 DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0KICAgIF9fbiA9IF9f
 biAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsNCiAgICAgIF9N
 X29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7DQog
 ICAgICAtLV9NX3A7DQogICAgfSBlbHNlDQogICAgICBfTV9vZmZzZXQgPSAo
 dW5zaWduZWQgaW50KSBfX247DQogIH0NCg0KICBib29sIG9wZXJhdG9yPT0o
 Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAgICBy
 ZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9N
 X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0
 ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wIDwg
 X19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwg
 X19pLl9NX29mZnNldCk7DQogIH0NCiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
 IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQogICAgcmV0dXJu
 ICEoKnRoaXMgPT0gX19pKTsNCiAgfQ0KICBib29sIG9wZXJhdG9yPihjb25z
 dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVy
 biBfX2kgPCAqdGhpczsNCiAgfQ0KICBib29sIG9wZXJhdG9yPD0oY29uc3Qg
 X0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAgICByZXR1cm4g
 IShfX2kgPCAqdGhpcyk7DQogIH0NCiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0
 IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQogICAgcmV0dXJu
 ICEoKnRoaXMgPCBfX2kpOw0KICB9DQp9Ow0KDQppbmxpbmUgcHRyZGlmZl90
 DQpvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNv
 bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7DQogIHJldHVybiBfX1dP
 UkRfQklUICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194Ll9NX29mZnNl
 dCAtIF9feS5fTV9vZmZzZXQ7DQp9DQoNCg0Kc3RydWN0IF9CaXRfaXRlcmF0
 b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlDQp7DQogIHR5cGVkZWYg
 X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9CaXRfcmVm
 ZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRl
 cmF0b3I7DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9i
 YXNlKDAsIDApIHt9DQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBf
 X3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBfQml0X2l0ZXJhdG9yX2Jh
 c2UoX194LCBfX3kpIHt9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
 bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQp
 OyB9DQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAgIF9NX2J1bXBf
 dXAoKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRlcmF0b3Igb3Bl
 cmF0b3IrKyhpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0K
 ICAgIF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAg
 aXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7DQogICAgX01fYnVtcF9kb3duKCk7
 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9y
 LS0oaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBf
 TV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAgaXRl
 cmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAg
 IF9NX2luY3IoX19pKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRl
 cmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAg
 ICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0
 ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7
 DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190
 bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJl
 bmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190bXAgPSAq
 dGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9DQoNCiAgcmVm
 ZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1
 cm4gKigqdGhpcyArIF9faSk7IH0NCn07DQoNCmlubGluZSBfQml0X2l0ZXJh
 dG9yDQpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVy
 YXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0NCg0KDQpzdHJ1Y3Qg
 X0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jh
 c2UNCnsNCiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBi
 b29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25zdCBib29sKiBw
 b2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf
 aXRlcmF0b3I7DQoNCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9p
 dGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfY29uc3RfaXRlcmF0b3Io
 dW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBf
 Qml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQogIF9CaXRfY29uc3Rf
 aXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQ0KICAgIDogX0Jp
 dF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQ0K
 DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQogICAg
 cmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7
 DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7DQogICAg
 X01fYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25z
 dF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGNvbnN0X2l0ZXJh
 dG9yIF9fdG1wID0gKnRoaXM7DQogICAgX01fYnVtcF91cCgpOw0KICAgIHJl
 dHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3It
 LSgpIHsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gKnRoaXM7
 DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsNCiAg
 ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIF9NX2J1bXBf
 ZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVy
 YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7DQogICAg
 X01faW5jcihfX2kpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25z
 dF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7
 DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N
 CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBf
 X2kpIGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlz
 Ow0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAgY29uc3RfaXRl
 cmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsN
 CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVy
 biBfX3RtcCAtPSBfX2k7DQogIH0NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJh
 dG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIHJldHVybiAqKCp0
 aGlzICsgX19pKTsNCiAgfQ0KfTsNCg0KaW5saW5lIF9CaXRfY29uc3RfaXRl
 cmF0b3INCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2Nv
 bnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQ0KDQoN
 Cg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19p
 c19zdGF0aWM+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsNCnB1Ymxp
 YzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9B
 bGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRv
 cl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
 c3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0KICBfQnZlY3Rv
 cl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAg
 OiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5p
 c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJvdGVjdGVkOg0K
 ICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQ0KICAg
 IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBf
 X1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0NCiAgdm9pZCBfTV9kZWFs
 bG9jYXRlKCkgew0KICAgIGlmIChfTV9zdGFydC5fTV9wKQ0KICAgICAgX01f
 ZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3Rv
 cmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOw0KICB9DQoNCiAgdHlwZW5hbWUgX0Fs
 bG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0
 b3JfdHlwZQ0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfQml0
 X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9yIF9NX2Zpbmlz
 aDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsNCn07DQoN
 Cg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFzcyBfQnZlY3Rv
 cl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1YmxpYzoNCiAg
 dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0
 b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBl
 Ow0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
 ZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVjdG9yX2FsbG9j
 X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQ0KICAgIDogX01fc3RhcnQo
 KSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9DQoNCnBy
 b3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVu
 c2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlDQogICAgICAg
 ICAgX0FsbG9jX3R5cGU7DQoNCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxs
 b2Moc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxs
 b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQ0K
 ICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9N
 X3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5f
 TV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29m
 X3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsNCiAgfQ0KDQogIF9CaXRfaXRl
 cmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOw0K
 ICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0KfTsNCg0KdGVt
 cGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9yX2Jhc2UNCiAg
 OiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBf
 QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVkZWYgX0J2ZWN0
 b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3Rh
 bmNlbGVzcz4NCiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoNCiAgdHlwZWRl
 ZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
 cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg
 X19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9C
 YXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCn0NCg0KDQojIDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0
 b3IuaCIgMSAzDQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzDQpuYW1lc3BhY2Ugc3Rk
 DQp7DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+DQogIGNsYXNzIHZl
 Y3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0Fs
 bG9jPg0KICB7DQogIHB1YmxpYzoNCiAgICB0eXBlZGVmIGJvb2wgdmFsdWVf
 dHlwZTsNCiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogICAgdHlw
 ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAgIHR5cGVkZWYg
 X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgIHR5cGVkZWYgYm9vbCBj
 b25zdF9yZWZlcmVuY2U7DQogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSog
 cG9pbnRlcjsNCiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50
 ZXI7DQoNCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7DQog
 ICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
 Ow0KDQogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
 dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgIHR5cGVkZWYgcmV2
 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0K
 ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+Ojph
 bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgICBhbGxvY2F0b3Jf
 dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgew0KICAgICAgcmV0dXJuIF9C
 dmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOw0KICAgIH0N
 Cg0KICBwcm90ZWN0ZWQ6DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxs
 b2M+OjpfTV9iaXRfYWxsb2M7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxf
 QWxsb2M+OjpfTV9kZWFsbG9jYXRlOw0KICAgIHVzaW5nIF9CdmVjdG9yX2Jh
 c2U8X0FsbG9jPjo6X01fc3RhcnQ7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
 ZTxfQWxsb2M+OjpfTV9maW5pc2g7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
 ZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBwcm90ZWN0ZWQ6
 DQogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsNCiAg
 ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7DQog
 ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf
 QklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0
 b3IoX19xLCAwKTsNCiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlm
 ZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIHZvaWQgX01faW5zZXJ0
 X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgew0KICAgICAg
 aWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQog
 ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBf
 TV9maW5pc2ggKyAxKTsNCiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7DQog
 ICAgICAgICsrX01fZmluaXNoOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQog
 ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBzaXplKCkg
 OiBfX1dPUkRfQklUOw0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N
 X2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
 cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQog
 ICAgICAgICpfX2krKyA9IF9feDsNCiAgICAgICAgX01fZmluaXNoID0gY29w
 eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAgX01fZGVhbGxv
 Y2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
 X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICBf
 TV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICB9DQogICAgfQ0K
 DQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZv
 aWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAgICAgX01fc3Rh
 cnQgPSBpdGVyYXRvcigpOw0KICAgICAgX01fZmluaXNoID0gaXRlcmF0b3Io
 KTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsNCiAgICAgIGZvciAo
 IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgcHVz
 aF9iYWNrKCpfX2ZpcnN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xh
 c3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVf
 cmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
 dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
 d2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX24gPSAw
 Ow0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAg
 ICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgY29weShfX2ZpcnN0LCBf
 X2xhc3QsIF9NX3N0YXJ0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xh
 c3MgX0lucHV0SXRlcmF0b3I+DQogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2Uo
 aXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0lu
 cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg
 ew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
 KSB7DQogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7
 DQogICAgICAgICsrX19wb3M7DQogICAgICB9DQogICAgfQ0KDQogICAgdGVt
 cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAgdm9pZCBfTV9p
 bnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAgICAgICAg
 ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
 YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
 IGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogICAgICBpZiAoX19maXJzdCAh
 PSBfX2xhc3QpIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAg
 ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsNCiAgICAgICAg
 aWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAgICAgICAg
 Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg
 ZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICAgIGNvcHkoX19maXJz
 dCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsNCiAgICAgICAgICBfTV9maW5pc2gg
 Kz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICAgIH0NCiAgICAgICAg
 ZWxzZSB7DQogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsg
 bWF4KHNpemUoKSwgX19uKTsNCiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9f
 cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgICAgaXRlcmF0b3Ig
 X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es
 IDApKTsNCiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
 X19pKTsNCiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s
 IGVuZCgpLCBfX2kpOw0KICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsNCiAg
 ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f
 V09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICAgIF9NX3N0YXJ0
 ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAg
 IH0NCg0KICBwdWJsaWM6DQogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
 biBfTV9zdGFydDsgfQ0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
 c3QgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgICBpdGVyYXRvciBlbmQoKSB7
 IHJldHVybiBfTV9maW5pc2g7IH0NCiAgICBjb25zdF9pdGVyYXRvciBlbmQo
 KSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICAgIHJldmVyc2Vf
 aXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
 bmQoKSk7IH0NCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp
 IGNvbnN0IHsNCiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
 KGVuZCgpKTsNCiAgICB9DQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg
 eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQ0KICAgIGNv
 bnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsNCiAgICAgIHJl
 dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOw0KICAgIH0N
 Cg0KICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90
 eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgICBzaXplX3R5cGUgbWF4X3Np
 emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9DQogICAgc2l6
 ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgICAgcmV0dXJuIHNpemVf
 dHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBi
 ZWdpbigpKTsNCiAgICB9DQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0
 dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICAgIHJlZmVyZW5jZSBvcGVy
 YXRvcltdKHNpemVfdHlwZSBfX24pDQogICAgICB7IHJldHVybiAqKGJlZ2lu
 KCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0NCiAgICBjb25zdF9yZWZl
 cmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdA0KICAgICAg
 eyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9
 DQoNCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv
 bnN0IHsNCiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAgICAg
 ICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4iKTsNCiAgICB9
 DQoNCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikNCiAgICAgIHsg
 X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQ0K
 ICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdA0K
 ICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtf
 X25dOyB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9y
 X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAgICA6IF9CdmVj
 dG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9DQoNCiAgICB2ZWN0b3Ioc2l6ZV90
 eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAgICBjb25zdCBh
 bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICAg
 IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7DQogICAgICBf
 TV9pbml0aWFsaXplKF9fbik7DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As
 IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsNCiAgICB9
 DQoNCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikNCiAgICAg
 IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpDQog
 ICAgew0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgZmlsbChf
 TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7DQogICAgfQ0K
 DQogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jh
 c2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7DQogICAgICBfTV9p
 bml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgICAgY29weShfX3guYmVnaW4o
 KSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogICAgfQ0KDQoNCg0KICAgIHRl
 bXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgICB2b2lkIF9NX2luaXRpYWxp
 emVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1
 ZV90eXBlKSB7DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgICBm
 aWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+
 MCA6IDApOw0KICAgIH0NCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
 dGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lu
 cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
 IHsNCiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0
 LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICB9DQoNCiAg
 ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgdmVjdG9y
 KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
 dCwNCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
 YWxsb2NhdG9yX3R5cGUoKSkNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs
 b2M+KF9fYSkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
 bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN
 CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0
 LCBfSW50ZWdyYWwoKSk7DQogICAgfQ0KDQogICAgfnZlY3RvcigpIHsgfQ0K
 DQogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsN
 CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsNCiAgICAg
 IGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgew0KICAgICAgICBfTV9k
 ZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUo
 KSk7DQogICAgICB9DQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k
 KCksIGJlZ2luKCkpOw0KICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRp
 ZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICAgIHJldHVybiAqdGhp
 czsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBfTV9maWxsX2Fzc2ln
 bihzaXplX3QgX19uLCBib29sIF9feCkgew0KICAgICAgaWYgKF9fbiA+IHNp
 emUoKSkgew0KICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v
 Zl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgICBpbnNlcnQoZW5k
 KCksIF9fbiAtIHNpemUoKSwgX194KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ug
 ew0KICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7DQogICAg
 ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f
 eCA/IH4wIDogMCk7DQogICAgICB9DQogICAgfQ0KDQogICAgdm9pZCBhc3Np
 Z24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24oX19u
 LCBfX3gpOyB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
 b3I+DQogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
 X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgICB0eXBlZGVmIHR5cGVu
 YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
 bnRlZ3JhbDsNCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBf
 X2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8
 Y2xhc3MgX0ludGVnZXI+DQogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2go
 X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpDQog
 ICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9f
 dmFsKTsgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQog
 ICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0
 LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgICAgeyBf
 TV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
 Z29yeShfX2ZpcnN0KSk7IH0NCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
 dXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl
 cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAg
 ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgICAg
 IGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgICAgIGZvciAoIDsgX19m
 aXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr
 X19maXJzdCkNCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7DQogICAgICBp
 ZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIGVyYXNlKF9fY3VyLCBl
 bmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChlbmQoKSwgX19m
 aXJzdCwgX19sYXN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
 X0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv
 cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
 YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQogICAgICBkaXN0
 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgICAgIGlmIChfX2xl
 biA8IHNpemUoKSkNCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xh
 c3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgICBlbHNlIHsNCiAgICAgICAg
 X0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFk
 dmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICAgIGNvcHkoX19maXJzdCwg
 X19taWQsIGJlZ2luKCkpOw0KICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlk
 LCBfX2xhc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZvaWQgcmVzZXJ2
 ZShzaXplX3R5cGUgX19uKSB7DQogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9f
 bikgew0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv
 YyhfX24pOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVu
 ZCgpLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgICAgX01fZGVhbGxvY2F0
 ZSgpOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQog
 ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09S
 RF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgfQ0KICAgIH0NCg0KICAg
 IHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9DQogICAg
 Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu
 KCk7IH0NCiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkg
 LSAxKTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyBy
 ZXR1cm4gKihlbmQoKSAtIDEpOyB9DQogICAgdm9pZCBwdXNoX2JhY2soYm9v
 bCBfX3gpIHsNCiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf
 b2Zfc3RvcmFnZSkNCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194Ow0KICAg
 ICAgZWxzZQ0KICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOw0K
 ICAgIH0NCiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9f
 eCkgew0KICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQp
 Ow0KICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7
 DQogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l
 bmRfb2Zfc3RvcmFnZSk7DQogICAgfQ0KICAgIGl0ZXJhdG9yIGluc2VydChp
 dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgew0KICAg
 ICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigp
 Ow0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y
 YWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpDQogICAgICAgICpfTV9maW5p
 c2grKyA9IF9feDsNCiAgICAgIGVsc2UNCiAgICAgICAgX01faW5zZXJ0X2F1
 eChfX3Bvc2l0aW9uLCBfX3gpOw0KICAgICAgcmV0dXJuIGJlZ2luKCkgKyBf
 X247DQogICAgfQ0KDQoNCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl
 cj4NCiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
 cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsDQogICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICAgIF9NX2ZpbGxf
 aW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7DQogICAgfQ0KDQogICAgdGVtcGxh
 dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZvaWQgX01faW5zZXJ0
 X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
 dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
 bHNlX3R5cGUpIHsNCiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19m
 aXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsN
 CiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
 DQogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAg
 ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
 YXRvciBfX2xhc3QpIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
 dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOw0K
 ICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3Qs
 IF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICAgIH0NCg0KICAgIHZvaWQgX01f
 ZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9f
 biwgYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOw0K
 ICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAg
 ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz
 aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsNCiAgICAgICAgZmlsbChfX3Bv
 c2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9f
 eCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19u
 KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBzaXplX3R5cGUg
 X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0KICAgICAgICB1
 bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAg
 ICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwg
 aXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIGZpbGxfbihfX2ksIF9fbiwg
 X194KTsNCiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBl
 bmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICBf
 TV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
 X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQog
 ICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIH0N
 CiAgICB9DQoNCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
 LCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0KICAgICAgX01fZmlsbF9p
 bnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOw0KICAgIH0NCg0KICAgIHZv
 aWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogICAgaXRlcmF0b3Ig
 ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgICAgaWYgKF9fcG9z
 aXRpb24gKyAxICE9IGVuZCgpKQ0KICAgICAgICBjb3B5KF9fcG9zaXRpb24g
 KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAgIC0tX01fZmluaXNo
 Ow0KICAgICAgcmV0dXJuIF9fcG9zaXRpb247DQogICAgfQ0KICAgIGl0ZXJh
 dG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkg
 ew0KICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2Zp
 cnN0KTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCiAgICB2b2lk
 IHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29s
 KCkpIHsNCiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQ0KICAgICAg
 ICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUp
 LCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChlbmQoKSwg
 X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgICB9DQogICAgdm9pZCBm
 bGlwKCkgew0KICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0
 YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApDQog
 ICAgICAgICpfX3AgPSB+Kl9fcDsNCiAgICB9DQoNCiAgICB2b2lkIGNsZWFy
 KCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0NCiAgfTsNCg0KDQp0eXBl
 ZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsNCg0KfQ0KIyAz
 OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
 X3ZlY3Rvci5oIiAyIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCg0KDQpu
 YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4N
 CiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxl
 JiBfX290aGVyKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX2NvcHkoKnRoaXMp
 Ow0KICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2VfZmFjZXQoX19v
 dGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7DQogICAgICByZXR1cm4gX19j
 b3B5Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBib29sDQog
 ICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
 clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAgICAgICAgICAg
 ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
 bGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBzdGQ6
 OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAgICAgIGNvbnN0
 IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNldDxfX2NvbGxh
 dGVfdHlwZT4oKnRoaXMpOw0KICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21w
 YXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCks
 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks
 IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsNCiAgICB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNl
 dCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7
 DQogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9f
 dmVjX2ZhY2V0Ow0KICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01f
 aW5kZXg7DQogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9N
 X2ltcGwtPl9NX2ZhY2V0czsNCiAgICAgIGNvbnN0IGxvY2FsZTo6ZmFjZXQq
 IF9fZnAgPSAoKl9fZmFjZXQpW19faV07DQogICAgICBpZiAoX19mcCA9PSAw
 IHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpDQogICAgICAgIF9fdGhyb3df
 YmFkX2Nhc3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBf
 RmFjZXQmPigqX19mcCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs
 ZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICB0eXBlZGVmIGxvY2Fs
 ZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0Ow0KICAgICAgc2l6
 ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7DQogICAgICBfX3ZlY19m
 YWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsNCiAg
 ICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYmICgqX19mYWNl
 dClbX19pXSAhPSAwKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPg0KICAgIF9J
 bkl0ZXINCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIgX19zLCBfSW5J
 dGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsDQogICAgICAgICAgICAgICAgICAg
 ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLA0KICAg
 ICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1h
 aW4sIGJvb2wmIF9fZW9mKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf
 c3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCiAgICAgIF9fZW9mID0g
 ZmFsc2U7DQogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRh
 cmdzOyArK19fdGkpDQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7
 DQogICAgICBfX3JlbWFpbiA9IF9fbnRhcmdzOw0KICAgICAgc2l6ZV90IF9f
 cG9zID0gMDsNCiAgICAgIGRvDQogICAgICAgIHsNCiAgICAgICAgICBpbnQg
 X190aSA9IDA7DQogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3JlbWFpbiAm
 JiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkp
 DQogICAgICAgICAgICArK19fdGk7DQogICAgICAgICAgaWYgKF9fdGkgPT0g
 X19yZW1haW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
 X3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7DQogICAgICAgICAgICAgIHJldHVy
 biBfX3M7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fcyA9PSBf
 X2VuZCkNCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsNCiAgICAgICAgICBi
 b29sIF9fbWF0Y2hlZCA9IGZhbHNlOw0KICAgICAgICAgIGZvciAoaW50IF9f
 dGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQ0KICAgICAgICAgICAgew0K
 ICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9
 IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsNCiAgICAgICAgICAgICAg
 aWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgpKQ0KICAgICAgICAgICAgICAg
 IHsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBfX3RhcmdldFtf
 X3Bvc10gIT0gKl9fcykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg
 ICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBfX21hdGNoZXNb
 LS1fX3JlbWFpbl07DQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIF9f
 bWF0Y2hlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg
 ICAgICArK19fdGkyOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChf
 X21hdGNoZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICsrX19z
 Ow0KICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAgICAgICAgfQ0KICAg
 ICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjsp
 DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcyA+IF9f
 dGFyZ2V0c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpDQogICAgICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICAgICAgX19tYXRjaGVzW19fdGkzXSA9
 IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsNCiAgICAgICAgICAgICAgICAgIGNv
 bnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgKytf
 X3RpMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgd2hpbGUg
 KF9fcmVtYWluKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfRm9ybWF0X2NhY2hlPF9D
 aGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQ0KICAgIDogX01fdmFsaWQodHJ1ZSks
 IF9NX3VzZV9ncm91cGluZyhmYWxzZSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0
 ZTw+DQogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgp
 Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBfRm9ybWF0X2NhY2hlPHdjaGFyX3Q+
 OjpfRm9ybWF0X2NhY2hlKCk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJUPg0KICAgIHZvaWQNCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9N
 X3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQ0KICAgIHsNCiAgICAgIGxvY2Fs
 ZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOw0KICAgICAgbnVtcHVuY3Q8X0No
 YXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+
 ID4oX19sb2MpOw0KICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1l
 KCk7DQogICAgICBfTV9mYWxzZW5hbWUgPSBfX25wLmZhbHNlbmFtZSgpOw0K
 ICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgp
 Ow0KICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVjaW1hbF9wb2lu
 dCgpOw0KICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7DQog
 ICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXplKCkgIT0g
 MCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsNCiAgICAgIF9NX3Zh
 bGlkID0gdHJ1ZTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVD4NCiAgICB2b2lkDQogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+
 OjoNCiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldiwgaW9z
 X2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQ0KICAgIHsNCiAgICAg
 IHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsNCiAgICAgIHN3aXRj
 aCAoX19ldikNCiAgICAgICAgew0KICAgICAgICBjYXNlIGlvc19iYXNlOjpl
 cmFzZV9ldmVudDoNCiAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8X0Zv
 cm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsNCiAgICAgICAgICBfX3AgPSAw
 Ow0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIGlvc19iYXNlOjpj
 b3B5Zm10X2V2ZW50Og0KDQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7
 IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47IH0NCiAgICAgICAg
 ICBjYXRjaCguLi4pDQogICAgICAgICAgICB7IH0NCiAgICAgICAgICBicmVh
 azsNCiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZlbnQ6DQogICAg
 ICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19w
 KS0+X01fdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICBicmVhazsNCiAgICAg
 ICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
 ICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kg0KICAgIF9Gb3JtYXRfY2FjaGU8
 X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykNCiAgICB7DQogICAg
 ICBpZiAoIV9TX3B3b3JkX2l4KQ0KICAgICAgICBfU19wd29yZF9peCA9IGlv
 c19iYXNlOjp4YWxsb2MoKTsNCiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5w
 d29yZChfU19wd29yZF9peCk7DQoNCg0KICAgICAgaWYgKF9fcCA9PSAwKQ0K
 ICAgICAgICB7DQogICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxf
 Q2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KTsNCiAg
 ICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNo
 ZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywNCiAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICBfU19wd29yZF9peCk7DQogICAgICAgICAgX19wID0g
 X19hcC5yZWxlYXNlKCk7DQogICAgICAgIH0NCiAgICAgIF9Gb3JtYXRfY2Fj
 aGU8X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hl
 PF9DaGFyVD4qPihfX3ApOw0KICAgICAgaWYgKCFfX25jcC0+X01fdmFsaWQp
 DQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7DQoNCiAgICAg
 IHJldHVybiBfX25jcDsNCiAgICB9DQojIDI1MCAiL2hvbWUvbWRlaWwvYmlu
 Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
 Pg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K
 ICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYg
 LA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgY2hhciog
 LA0KICAgICAgICAgICAgICAgaW50JiAsIGJvb2wgKSBjb25zdA0KICAgIHsN
 Cg0KICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bV9n
 ZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoNCiAgICBf
 TV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcsDQog
 ICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5k
 LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
 b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwNCiAg
 ICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7DQoNCg0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf
 SW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBk
 b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
 YXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
 cnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAgIGlmICghKF9f
 aW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0KICAgICAgICB7
 DQoNCg0KDQoNCg0KDQogICAgICAgICAgY2hhciBfX3h0cmNbMzJdID0geydc
 MCd9Ow0KICAgICAgICAgIGludCBfX2Jhc2U7DQogICAgICAgICAgX01fZXh0
 cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
 ZSwgZmFsc2UpOw0KDQoNCiAgICAgICAgICBjaGFyKiBfX3Nhbml0eTsNCiAg
 ICAgICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgICAgIGxvbmcg
 X19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOw0KICAg
 ICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAg
 ICAgICAgICAgICYmIF9fbCA8PSAxDQogICAgICAgICAgICAgICYmIF9fc2Fu
 aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19l
 cnJubygpKSkgPT0gMCkNCiAgICAgICAgICAgIF9fdiA9IF9fbDsNCiAgICAg
 ICAgICBlbHNlDQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
 bGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGVsc2UNCiAgICAgICAgew0K
 ICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFyX3R5cGU+IF9f
 ZmNhY2hlX3R5cGU7DQogICAgICAgICAgX19mY2FjaGVfdHlwZSogX19mbXQg
 PSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7DQogICAgICAgICAgY29u
 c3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19z
 dHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2UgPSBf
 X2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7DQogICAgICAgICAgY29uc3Qg
 c2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Ry
 dWUpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9
 IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7DQoNCiAgICAg
 ICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9IF9fZW5kOyAr
 K19fcG9zKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjaGFyX3R5
 cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0
 ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsNCiAgICAgICAgICAgICAgYm9v
 bCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107DQogICAgICAgICAg
 ICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpDQogICAgICAgICAgICAg
 ICAgew0KICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
 aWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg
 ICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19w
 b3MgPT0gX19mYWxzZWxlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg
 ICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7
 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIGlmIChf
 X3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikNCiAgICAgICAgICAgICAg
 ICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAxOw0KICAgICAgICAgICAg
 ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
 fQ0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgICAg
 IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICAgIH0NCg0KICAg
 ICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXIN
 CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChp
 dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
 aW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hv
 cnQmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBjaGFyIF9feHRy
 Y1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9l
 eHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i
 YXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAg
 ICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgbG9uZyBfX2wgPSBzdHJ0
 b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShf
 X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2Fu
 aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19l
 cnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fbCA+PSAoLTMyNzY3LTEp
 ICYmIF9fbCA8PSAzMjc2NykNCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8
 c2hvcnQ+KF9fbCk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlv
 c19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
 SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
 X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdA0KICAgIHsNCg0KDQoN
 CiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsNCiAgICAgIGludCBf
 X2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
 X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hh
 ciogX19zYW5pdHk7DQogICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAg
 ICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFz
 ZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0K
 ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkg
 PT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYm
 IF9fbCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3
 KQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7DQogICAg
 ICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0K
 DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0
 ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl
 dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
 IF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
 bG9uZyYgX192KSBjb25zdA0KICAgIHsNCg0KDQoNCiAgICAgIGNoYXIgX194
 dHJjWzMyXT0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsNCiAgICAgIF9N
 X2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf
 X2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0eTsNCiAg
 ICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBsb25nIF9fbCA9IHN0
 cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsNCiAgICAgIGlmICgh
 KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19z
 YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f
 X2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2w7DQogICAgICBl
 bHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQog
 ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA0NTAgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNj
 IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
 SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
 X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0DQog
 ICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQog
 ICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChfX2JlZywgX19l
 bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoN
 CiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkp
 ID0gMDsNCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194
 dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAm
 IGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9
 IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygp
 KSkgPT0gMA0KICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpDQogICAgICAg
 IF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsNCiAg
 ICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
 DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0
 ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl
 dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
 IF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
 dW5zaWduZWQgaW50JiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAg
 Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0K
 ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
 X3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2Fu
 aXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHVuc2ln
 bmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9f
 YmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
 KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
 dHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAg
 ICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAyVSArIDEpKQ0KICAgICAgICBf
 X3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOw0KICAgICAg
 ZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0K
 ICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0K
 ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0
 ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
 bywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
 Z25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hh
 ciBfX3h0cmNbMzJdID0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsNCiAg
 ICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
 dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0
 eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICB1bnNpZ25l
 ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh
 c2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkN
 CiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5
 ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApDQogICAgICAgIF9f
 diA9IF9fdWw7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19i
 YXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0K
 IyA1NTggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVt
 X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBl
 IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg
 ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3Yp
 IGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7
 J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChf
 X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1
 ZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAgICAoKihfX19l
 cnJubygpKSkgPSAwOw0KDQoNCg0KICAgICAgZmxvYXQgX19mID0gc3RhdGlj
 X2Nhc3Q8ZmxvYXQ+KHN0cnRvZChfX3h0cmMsICZfX3Nhbml0eSkpOw0KDQog
 ICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAg
 ICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1ww
 JyAmJiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAgX192ID0gX19m
 Ow0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
 bGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
 X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
 ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
 YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
 ZXJyLCBkb3VibGUmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBj
 aGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQog
 ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
 eHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0
 eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBkb3VibGUg
 X19kID0gc3RydG9kKF9feHRyYywgJl9fc2FuaXR5KTsNCiAgICAgIGlmICgh
 KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19z
 YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f
 X2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2Q7DQogICAgICBl
 bHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQog
 ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA2NDEgIi9ob21lL21kZWls
 L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNj
 IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
 SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
 X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAg
 ew0KDQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGlu
 dCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p
 bywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBp
 b3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkg
 JiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgY29uc3QgY2hhciogX19j
 b252Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3Qp
 DQogICAgICAgIF9fY29udiA9ICIlTG8iOw0KICAgICAgZWxzZSBpZiAoX19i
 YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAgX19jb252ID0g
 IiVMWCI7DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQ0KICAg
 ICAgICBfX2NvbnYgPSAiJUxpIjsNCiAgICAgIGVsc2UNCiAgICAgICAgX19j
 b252ID0gIiVMZyI7DQoNCg0KICAgICAgbG9uZyBkb3VibGUgX19sZDsNCiAg
 ICAgIGludCBfX3AgPSBzc2NhbmYoX194dHJjLCBfX2NvbnYsICZfX2xkKTsN
 CiAgICAgIGlmIChfX3ANCiAgICAgICAgICAmJiBzdGF0aWNfY2FzdDx0eXBl
 bmFtZSBfX3RyYWl0c190eXBlOjppbnRfdHlwZT4oX19wKQ0KICAgICAgICAh
 PSBfX3RyYWl0c190eXBlOjplb2YoKSkNCiAgICAgICAgX192ID0gX19sZDsN
 CiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
 aXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
 X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
 ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
 YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
 ZXJyLCB2b2lkKiYgX192KSBjb25zdA0KICAgIHsNCg0KICAgICAgdHlwZWRl
 ZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAgICBmbXRmbGFn
 cyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsNCiAgICAgIGZtdGZsYWdzIF9fZm10
 bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZp
 ZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6
 OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7DQogICAgICBfX2lv
 LmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBp
 b3NfYmFzZTo6c2hvd2Jhc2UpKTsNCg0KDQoNCg0KICAgICAgY2hhciBfX3h0
 cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01f
 ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
 YmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAg
 ICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHZvaWQqIF9fdnAgPSBy
 ZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9fc2Fu
 aXR5LCBfX2Jhc2UpKTsNCiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6
 OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm
 ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0K
 ICAgICAgICBfX3YgPSBfX3ZwOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2Vy
 ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KDQogICAgICBfX2lvLmZsYWdz
 KF9fZm10KTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0
 ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4N
 CiAgICBpbmxpbmUgX091dEl0ZXINCiAgICBfX3BhZChfT3V0SXRlciBfX3Ms
 IF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpOw0KDQogIHRlbXBsYXRl
 IDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+DQogICAgX1Jh
 SXRlcg0KICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBp
 bnQgX19wYWRkaW5nLA0KICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
 b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7DQog
 ICAgICByZXR1cm4gX19zICsgX19wYWRkaW5nOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciwgdHlw
 ZW5hbWUgX1RhZz4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFkKF9PdXRJdGVy
 IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1RhZykNCiAg
 ICB7DQogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkgeyAqX19zID0g
 X19maWxsOyArK19fczsgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoN
 CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
 ZXI+DQogICAgaW5saW5lIF9PdXRJdGVyDQogICAgX19wYWQoX091dEl0ZXIg
 X19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQ0KICAgIHsNCiAg
 ICAgIHJldHVybiBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLA0KICAg
 ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0
 SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAg
 ICBfT3V0SXRlcg0KICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBp
 b3NfYmFzZTo6Zm10ZmxhZ3MgLA0KICAgICAgICAgICAgICAgICAgX0NoYXJU
 ICwgaW50ICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogLCBf
 Q2hhclQgY29uc3QqICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25z
 dCogKQ0KICB7DQoNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCiAg
 dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBvc3RyZWFtYnVmX2l0
 ZXJhdG9yPF9DaGFyVD4NCiAgICBfX3BhZF9udW1lcmljKG9zdHJlYW1idWZf
 aXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zs
 YWdzLA0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgaW50IF9f
 d2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwNCiAgICAgICAgICAgICAg
 ICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBjb25zdCogX19s
 YXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRv
 cjxfQ2hhclQ+IF9fb3V0X2l0ZXI7DQogICAgICBpbnQgX19wYWRkaW5nID0g
 X193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICAgIGlmIChfX3Bh
 ZGRpbmcgPCAwKQ0KICAgICAgICBfX3BhZGRpbmcgPSAwOw0KICAgICAgaW9z
 X2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAmIGlvc19iYXNl
 OjphZGp1c3RmaWVsZDsNCiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3Bh
 ZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdA0KICAg
 ICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09IGlvc19iYXNl
 OjppbnRlcm5hbDsNCg0KDQogICAgICBpZiAoX19maXJzdCAhPSBfX21pZGRs
 ZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpDQog
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxs
 LCBfX3BhZGRpbmcpOw0KICAgICAgICAgICAgICBfX3BhZGRpbmcgPSAwOw0K
 ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19taWRk
 bGUsIF9fcyk7DQogICAgICAgIH0NCiAgICAgIF9fb3V0X2l0ZXIgX19zMiA9
 IF9fczsNCg0KICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBp
 b3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KICAgICAgICAgIF9fcGFkKF9f
 czIsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBfX3BhZGRpbmcg
 PSAwOw0KICAgICAgICB9DQogICAgICBfX291dF9pdGVyIF9fczMgPSBjb3B5
 KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOw0KICAgICAgaWYgKF9fcGFkZGlu
 ZykNCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3BhZGRpbmcpOw0K
 ICAgICAgcmV0dXJuIF9fczM7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVy
 DQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0
 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
 aWxsLCBib29sIF9fdikgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBfRm9y
 bWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh
 clQ+OjpfU19nZXQoX19pbyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
 X19mbGFncyA9IF9faW8uZmxhZ3MoKTsNCg0KICAgICAgaWYgKChfX2ZsYWdz
 ICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAgICAgew0KICAg
 ICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAgICAgICAgICBy
 ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs
 c2UsIF9fdXYpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHsN
 CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7DQogICAgICAg
 ICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7DQogICAgICAgICAgaWYgKF9f
 dikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19maXJzdCA9IF9f
 Zm10LT5fTV90cnVlbmFtZS5kYXRhKCk7DQogICAgICAgICAgICAgIF9fbGFz
 dCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6ZSgpOw0KICAg
 ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxzZW5hbWUuZGF0
 YSgpOw0KICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQt
 Pl9NX2ZhbHNlbmFtZS5zaXplKCk7DQogICAgICAgICAgICB9DQogICAgICAg
 ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7DQogICAgICAgIH0NCiAg
 ICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGUg
 PHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQqDQogICAgX19ncm91cF9k
 aWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBjaGFyIGNvbnN0
 KiBfX2dyb3VwaW5nLA0KICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0
 KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsDQogICAgICAgICAg
 ICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQ0KICAgIHsNCiAgICAg
 IGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpDQogICAgICAg
 IHsNCiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhfX3MsIF9fZ3Jz
 ZXAsDQogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9PSBfX2dyZW5k
 ID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwNCiAgICAgICAgICAg
 ICAgX19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOw0K
 ICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91cGluZzsNCiAg
 ICAgICAgICAqX19zKysgPSBfX2dyc2VwOw0KICAgICAgICB9DQogICAgICBk
 bw0KICAgICAgICB7DQogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsN
 CiAgICAgICAgfQ0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsN
 CiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVmFs
 dWVUPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfaW50ZWdlcihfT3V0
 SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29s
 IF9fbmVnLA0KICAgICAgICAgICAgICBfVmFsdWVUIF9fdikNCiAgICB7DQoN
 CiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNfbGltaXRzPF9W
 YWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0Ow0KICAgICAgX0NoYXJUIF9fZGln
 aXRzW19NX3Jvb21dOw0KICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdp
 dHMgKyBfTV9yb29tOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh
 Z3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBjb25zdCBfRm9ybWF0X2NhY2hl
 PF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19n
 ZXQoX19pbyk7DQogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19mbXQt
 Pl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsNCg0KICAgICAgaW9z
 X2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxhZ3MgJiBfX2lv
 LmJhc2VmaWVsZCk7DQogICAgICBfQ2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zy
 b250Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgp
 DQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNl
 Ojp1cHBlcmNhc2UpDQogICAgICAgICAgICBfX3RhYmxlICs9IDE2Ow0KICAg
 ICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtf
 X3YgJiAxNV07DQogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQpICE9IDAp
 Ow0KICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Ow0KICAgICAgICAg
 IGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQ0KICAgICAgICAg
 ICAgew0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xp
 dGVyYWxzW19fZm10LT5fU194ICsNCiAgICAgICAgICAgICAgICAgICAgICAg
 KChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCldOw0K
 ICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsNCiAgICAg
 ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19iYXNlZmll
 bGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAgICAgew0KICAgICAgICAgIGRv
 DQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsN
 CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7DQogICAgICAg
 ICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UNCiAgICAgICAg
 ICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQpICE9IF9fdGFi
 bGVbMF0pDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsN
 CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCiAgICAgICAgfQ0K
 ICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBkbw0KICAgICAg
 ICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBdOw0KICAgICAg
 ICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsNCiAgICAgICAgICBfX3Np
 Z25fZW5kID0gX19mcm9udDsNCg0KICAgICAgICAgIGlmIChfX25lZyB8fCAo
 X19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkNCiAgICAgICAgICAgICot
 LV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3BsdXMg
 LSBfX25lZ107DQogICAgICAgIH0NCg0KDQogICAgICBpZiAoIV9fZm10LT5f
 TV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkNCiAgICAgICAgcmV0
 dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOw0K
 DQogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcpDQogICAgICAg
 IHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBf
 X2lvLndpZHRoKDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
 X2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOw0KDQog
 ICAgICBfQ2hhclQqIF9fcCA9IF9fZGlnaXRzOw0KICAgICAgd2hpbGUgKF9f
 ZnJvbnQgPCBfX3NpZ25fZW5kKQ0KICAgICAgICAqX19wKysgPSAqX19mcm9u
 dCsrOw0KICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9ncm91
 cGluZy5kYXRhKCk7DQogICAgICBfX2Zyb250ID0gX19ncm91cF9kaWdpdHMo
 X19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwNCiAgICAgICAg
 X19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQs
 IF9fZGlnaXRzICsgX01fcm9vbSk7DQogICAgICByZXR1cm4gX19wYWRfbnVt
 ZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwNCiAg
 ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBfX3AsIF9fZnJv
 bnQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8
 X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
 LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3Yp
 IGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192
 Ow0KICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOw0KICAgICAgaWYgKF9fdiA8
 IDApDQogICAgICAgIHsNCiAgICAgICAgICBfX25lZyA9IHRydWU7DQogICAg
 ICAgICAgX191diA9IC1fX3V2Ow0KICAgICAgICB9DQogICAgICByZXR1cm4g
 X19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgX19uZWcsIF9f
 dXYpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8
 X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
 LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAg
 ICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0DQogICAgeyByZXR1cm4gX19v
 dXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7
 IH0NCiMgOTY3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVy
 Pg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfZmxvYXQoX091dEl0ZXIg
 X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwNCiAgICAgICAg
 ICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVu
 KQ0KICAgIHsNCg0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
 ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+DQogICAg
 X19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U
 cmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAg
 ICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3Qg
 X19zbGVuKQ0KICAgIHsNCiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lv
 LndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPw0KICAgICAgICAgICAg
 ICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsNCiAgICAg
 IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjdHlwZTxf
 Q2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
 PihfX2xvYyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGpmaWVs
 ZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAg
 ICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0ciA9IF9fc3B0ciArIF9fc2xl
 bjsNCg0KICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVy
 bmFsKQ0KICAgICAgIHsNCg0KICAgICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0
 ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9PSAnLScpKQ0KICAg
 ICAgICAgICB7DQogICAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z
 cHRyKTsNCiAgICAgICAgICAgICArK19fczsNCiAgICAgICAgICAgICArK19f
 c3B0cjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgX19zID0gX19wYWQoX19z
 LCBfX2ZpbGwsIF9fcGFkZGluZyk7DQogICAgICAgICBfX3BhZGRpbmcgPSAw
 Ow0KICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0gaW9z
 X2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfX3Bh
 ZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBfX3BhZGRp
 bmcgPSAwOw0KICAgICAgICB9DQoNCiAgICAgIGNoYXIgX19kZWNpbWFsX3Bv
 aW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOw0KICAgICAg
 Y29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRf
 Y2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOw0KICAgICAgZm9yICg7IF9f
 c3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikNCiAgICAgICB7DQoN
 CiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9wb2ludCkNCiAg
 ICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7DQoNCiAg
 ICAgICAgIGVsc2UNCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z
 cHRyKTsNCiAgICAgICB9DQoNCiAgICAgIGlmIChfX3BhZGRpbmcpDQogICAg
 ICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOw0KICAgICAgX19p
 by53aWR0aCgwKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIGJv
 b2wNCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2UmIF9faW8sIGNo
 YXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLA0KICAgICAgICAgICAgICAg
 ICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCiAgdGVtcGxhdGUgPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0
 ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19w
 dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf
 X2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgew0KICAgICAgY29uc3Qg
 c3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
 Pjo6ZGlnaXRzMTAgKyAzOw0KICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBf
 X2lvLnByZWNpc2lvbigpOw0KDQogICAgICBpZiAoX19wcmVjID4gX19tYXhf
 cHJlYykNCiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsNCg0KICAgICAg
 Y2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOw0KICAgICAgc2l6ZV90IF9f
 c2xlbjsNCg0KICAgICAgY2hhciBfX2ZidWZbMTZdOw0KICAgICAgaWYgKF9f
 YnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwgX19wcmVjKSkN
 CiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19w
 cmVjLCBfX3YpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3NsZW4gPSBzcHJp
 bnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOw0KDQogICAgICByZXR1cm4gX19v
 dXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVu
 KTsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9D
 aGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
 aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAg
 IGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBz
 dHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0czxsb25nIGRv
 dWJsZT46OmRpZ2l0czEwICsgMzsNCiAgICAgIHN0cmVhbXNpemUgX19wcmVj
 ID0gX19pby5wcmVjaXNpb24oKTsNCg0KICAgICAgaWYgKF9fcHJlYyA+IF9f
 bWF4X3ByZWMpDQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3ByZWM7DQoNCiAg
 ICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAyXTsNCiAgICAgIHNpemVf
 dCBfX3NsZW47DQoNCiAgICAgIGNoYXIgX19mYnVmWzE2XTsNCg0KICAgICAg
 aWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBf
 X3ByZWMpKQ0KICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19m
 YnVmLCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAgICAgIF9fc2xl
 biA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7DQoNCiAgICAgIHJl
 dHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVm
 LCBfX3NsZW4pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51
 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5
 cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAg
 ICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAgIHsNCiAgICAg
 IHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOw0KICAgICAg
 Zm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7DQogICAgICBmbXRmbGFn
 cyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6
 OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv
 c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOw0KICAg
 ICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6
 aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7DQogICAgICB0cnkgew0KICAg
 ICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9f
 aW8sIF9fZmlsbCwgZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3Yp
 KTsNCiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQogICAgICAgIHJldHVy
 biBfX3MyOw0KICAgICAgfQ0KICAgICAgY2F0Y2ggKC4uLikgew0KICAgICAg
 ICBfX2lvLmZsYWdzKF9fZm10KTsNCiAgICAgICAgdGhyb3c7DQogICAgICB9
 DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+DQogICAgc3RydWN0IF9XZWVrZGF5
 bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0
 cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4NCiAgICB7IHN0YXRp
 YyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1sxNF07IH07DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0
 DQogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVtbXk+OjpfU19uYW1lc1sx
 NF0gPQ0KICAgIHsNCiAgICAgICJTdW4iLCAiU3VuZGF5IiwNCiAgICAgICJN
 b24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldlZCIsICJXZWRu
 ZXNkYXkiLA0KICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmkiLCAiRnJp
 ZGF5IiwgIlNhdCIsICJTYXR1cmRheSINCiAgICB9Ow0KIyAxMTM1ICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
 ZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
 YW1lIF9EdW1teSA9IGludD4NCiAgICBzdHJ1Y3QgX01vbnRobmFtZXM7DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0cnVjdCBfTW9u
 dGhuYW1lczxjaGFyLF9EdW1teT4NCiAgICB7IHN0YXRpYyBjb25zdCBjaGFy
 KiBjb25zdCBfU19uYW1lc1syNF07IH07DQoNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0DQogICAgX01vbnRo
 bmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQ0KICAgIHsNCiAg
 ICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVhcnkiLCAiTWFy
 IiwgIk1hcmNoIiwNCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1h
 eSIsICJKdW4iLCAiSnVuZSIsDQogICAgICAiSnVsIiwgIkp1bHkiLCAiQXVn
 IiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwNCiAgICAgICJPY3Qi
 LCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVjIiwgIkRlY2Vt
 YmVyIg0KICAgIH07DQojIDExNjggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
 dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf
 SW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
 ZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
 LA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFz
 ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgew0KICAg
 ICAgaWYgKCFfTV9kYXluYW1lcykNCiAgICAgICAgew0KICAgICAgICAgIF9N
 X2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzE0XTsNCiAg
 ICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsgKytfX2kpDQog
 ICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtkYXluYW1lczxf
 Q2hhclQ+OjpfU19uYW1lc1tfX2ldOw0KICAgICAgICB9DQogICAgICBib29s
 IF9fYXRfZW9mID0gZmFsc2U7DQogICAgICBpbnQgX19yZW1haW4gPSAwOw0K
 ICAgICAgaW50IF9fbWF0Y2hlc1sxNF07DQogICAgICBpdGVyX3R5cGUgX19v
 dXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0LCBfTV9kYXlu
 YW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19l
 cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2Vv
 ZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4g
 PT0gMSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hl
 c1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+
 dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOw0KICAgICAgZWxzZQ0KICAg
 ICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7DQogICAgICByZXR1cm4gX19v
 dXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0No
 YXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5
 cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsDQogICAgICAgICAgICAgICAgICAg
 ICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0
 bSogX190KSBjb25zdA0KICAgIHsNCiAgICAgIGlmICghX01fbW9udGhuYW1l
 cykNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vbnRobmFtZXMgPSBuZXcg
 YmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOw0KICAgICAgICAgIGZvciAoaW50
 IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkNCiAgICAgICAgICAgIF9NX21v
 bnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46Ol9TX25hbWVz
 W19faV07DQogICAgICAgIH0NCiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxz
 ZTsNCiAgICAgIGludCBfX3JlbWFpbiA9IDA7DQogICAgICBpbnQgX19tYXRj
 aGVzWzI0XTsNCiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9fbWF0Y2hfcGFy
 YWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVzLA0KICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVz
 LCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19lcnIgPSBpb3NfYmFz
 ZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0g
 X19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fA0KICAg
 ICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0g
 KF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+dG1fbW9uID0gKF9f
 bWF0Y2hlc1swXT4+MSk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9
 IF9faW8uZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQp9
 DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
 cy9zdGRfbG9jYWxlLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMw0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0
 cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMNCg0KIyAxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEg
 Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvc3RkX29zdHJlYW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
 DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJh
 c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoN
 Cg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0
 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0K
 ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3Nf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
 cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
 cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU
 LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBi
 YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAg
 dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
 ZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8
 X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5
 cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251
 bXB1dF90eXBlOw0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5
 cGVfdHlwZTsNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfb3N0
 cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgeyB0aGlzLT5p
 bml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19v
 c3RyZWFtKCkgeyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAg
 ZnJpZW5kIGNsYXNzIHNlbnRyeTsNCg0KDQoNCiAgICAgIF9fb3N0cmVhbV90
 eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3Bm
 KShfX29zdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
 DQogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf
 dHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVy
 YXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsNCg0KDQog
 ICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwobG9uZyBf
 X24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y
 PDwodW5zaWduZWQgbG9uZyBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlw
 ZSYNCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOw0KDQogICAgICBfX29z
 dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQ0KICAg
 ICAgew0KICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlz
 LT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsNCiAgICAgICAgaWYg
 KF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpo
 ZXgpDQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
 X2Nhc3Q8dW5zaWduZWQgbG9uZz4NCiAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikp
 KTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVy
 YXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQog
 ICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu
 ZWQgc2hvcnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8
 PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KDQogICAg
 ICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikN
 CiAgICAgIHsNCiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0g
 dGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAg
 IGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz
 ZTo6aGV4KQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19u
 KSkpOw0KICAgICAgICBlbHNlDQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w
 ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7DQogICAgICB9DQoN
 CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PCh1bnNp
 Z25lZCBpbnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8
 PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KIyAxMzUg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9v
 c3RyZWFtLmgiIDMNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl
 cmF0b3I8PChkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
 DQogICAgICBvcGVyYXRvcjw8KGZsb2F0IF9fZikNCiAgICAgIHsgcmV0dXJu
 IHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsg
 fQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwo
 bG9uZyBkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQog
 ICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7DQoNCiAgICAgIF9f
 b3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90
 eXBlKiBfX3NiKTsNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg
 IHB1dChjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
 DQogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
 ZSBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIGZsdXNo
 KCk7DQoNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRlbGxwKCk7DQoNCiAg
 ICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgc2Vla3AocG9zX3R5cGUpOw0K
 DQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtwKG9mZl90eXBl
 LCBpb3NfYmFzZTo6c2Vla2Rpcik7DQoNCiAgICBwcml2YXRlOg0KDQoNCiAg
 ICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0IF9f
 b3N0cmVhbV90eXBlJik7DQoNCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3Qg
 X19vc3RyZWFtX3R5cGUmKTsNCg0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZSA8
 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
 IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5DQogICAg
 ew0KDQogICAgICBib29sIF9NX29rOw0KICAgICAgYmFzaWNfb3N0cmVhbTxf
 Q2hhclQsX1RyYWl0cz4mIF9NX29zOw0KDQogICAgcHVibGljOg0KICAgICAg
 ZXhwbGljaXQNCiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxf
 VHJhaXRzPiYgX19vcyk7DQoNCiAgICAgIH5zZW50cnkoKQ0KICAgICAgew0K
 DQogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRi
 dWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQ0KICAgICAgICAgIHsNCg0K
 ICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYo
 KS0+cHVic3luYygpID09IC0xKQ0KICAgICAgICAgICAgICBfTV9vcy5zZXRz
 dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICB9DQogICAgICB9
 DQoNCiAgICAgIG9wZXJhdG9yIGJvb2woKQ0KICAgICAgeyByZXR1cm4gX01f
 b2s7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy
 VCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsNCg0KICB0ZW1wbGF0
 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFz
 aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwo
 YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf
 X2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykp
 OyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNp
 Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFz
 aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsN
 Cg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
 cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
 dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2Mp
 DQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9f
 YykpOyB9DQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNp
 Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFz
 aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNo
 YXIgX19jKQ0KICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj
 aGFyPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy
 VCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7DQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K
 ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmDQogICAgb3Bl
 cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0
 LCBjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry
 YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAg
 IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
 dXQsIGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBf
 VHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQog
 ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf
 X291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAo
 X19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7
 IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29z
 dHJlYW08Y2hhciwgX1RyYWl0cz4gJg0KICAgIG9wZXJhdG9yPDwoYmFzaWNf
 b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVk
 IGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
 ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
 Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZW5kbChiYXNpY19v
 c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4g
 Zmx1c2goX19vcy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9DQoNCiAgdGVt
 cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
 IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBlbmRzKGJh
 c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykNCiAgICB7IHJl
 dHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGZsdXNoKGJhc2ljX29zdHJl
 YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykNCiAgICB7IHJldHVybiBfX29z
 LmZsdXNoKCk7IH0NCg0KfQ0KDQoNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAxIDMNCiMg
 MzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL29z
 dHJlYW0udGNjIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQojIDMzICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg
 MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
 X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoNCiAgICBzZW50cnkoYmFzaWNf
 b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpDQogICAgOiBfTV9vayhf
 X29zLmdvb2QoKSksIF9NX29zKF9fb3MpDQogICAgew0KDQogICAgICBpZiAo
 X01fb2sgJiYgX19vcy50aWUoKSkNCiAgICAgICAgX19vcy50aWUoKS0+Zmx1
 c2goKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
 VHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
 Og0KICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v
 c3RyZWFtX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0
 aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
 ICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAg
 ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0K
 DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
 aXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
 IGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhy
 b3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAq
 dGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
 VHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
 Og0KICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190
 eXBlJikpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
 ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
 ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
 DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBv
 cGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpDQogICAg
 ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19j
 ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7
 IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
 X2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlz
 LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAg
 aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
 PSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K
 ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
 ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNf
 b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19u
 KQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAg
 aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
 Zm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1
 dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkN
 CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
 YWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
 dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
 ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
 ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
 ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
 ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg
 IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs
 b25nIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsN
 CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN
 CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9
 IHRoaXMtPmZpbGwoKTsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZs
 YWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
 bGQ7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
 cHV0KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBi
 b29sIF9fYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fZm10
 ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpDQog
 ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICB1
 bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
 KF9fbik7DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1
 dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAg
 ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQog
 ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhp
 cywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAg
 ICAgIGlmIChfX2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAgIH0NCiAg
 ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
 bCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl
 dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAo
 KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
 DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAg
 ICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh
 c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9u
 ZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
 ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
 dChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1
 dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
 ZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
 c2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
 ICAgfQ0KIyAyNjQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL29zdHJlYW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pDQogICAgew0KICAgICAg
 c2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
 ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg
 ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAg
 ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg
 dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAg
 ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
 ICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
 ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz
 LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAg
 ICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9
 DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19v
 c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikN
 CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlm
 IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
 dW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo
 KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog
 ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp
 b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg
 IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg
 ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
 aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg
 ICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi
 YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29u
 c3Qgdm9pZCogX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
 aXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
 IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hl
 Y2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9N
 X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u
 KS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
 KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
 IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
 dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
 aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
 dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0
 aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
 b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pDQogICAgew0K
 ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsNCiAgICAgIF9fc3RyZWFt
 YnVmX3R5cGUqIF9fc2JvdXQgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgc2Vu
 dHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19zYmluICYmIF9fY2Vy
 YikNCiAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlz
 LCBfX3NiaW4sIF9fc2JvdXQpOw0KICAgICAgaWYgKCFfX3NiaW4gfHwgIV9f
 eHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls
 Yml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh
 c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQ0KICAg
 IHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9f
 Y2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGludF90eXBlIF9fcHV0ID0g
 cmRidWYoKS0+c3B1dGMoX19jKTsNCiAgICAgICAgICBpZiAoX19wdXQgIT0g
 dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpDQogICAgICAgICAgICB0
 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0K
 ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No
 YXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVh
 bXNpemUgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
 Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHN0
 cmVhbXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9f
 bik7DQogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pDQogICAgICAgICAg
 ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAg
 fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
 b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08
 X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQ0KICAgIHsNCiAgICAgIHNlbnRy
 eSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVm
 KCktPnB1YnN5bmMoKSA9PSAtMSkNCiAgICAgICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICB9DQogICAgICByZXR1
 cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB0eXBlbmFtZSBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFzaWNfb3N0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpDQogICAgew0KICAgICAg
 cG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7DQogICAgICBib29sIF9f
 dGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7DQoNCiAgICAgIGlmIChf
 X3Rlc3RvaykNCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
 ZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOw0KICAg
 ICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykNCiAgICB7DQog
 ICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7DQoN
 CiAgICAgIGlmIChfX3Rlc3RvaykNCiAgICAgICAgew0KDQoNCiAgICAgICAg
 ICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3Mo
 X19wb3MsIGlvc19iYXNlOjpvdXQpOw0KDQoNCiAgICAgICAgICBpZiAoX19l
 cnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkNCiAgICAgICAgICAgIHRo
 aXMtPnNldHN0YXRlKGZhaWxiaXQpOw0KDQogICAgICAgIH0NCiAgICAgIHJl
 dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
 YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0No
 YXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz46Og0KICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6
 c2Vla2RpciBfX2QpDQogICAgew0KICAgICAgYm9vbCBfX3Rlc3RvayA9IHRo
 aXMtPmZhaWwoKSAhPSB0cnVlOw0KDQogICAgICBpZiAoX190ZXN0b2spDQog
 ICAgICAgIHsNCg0KDQogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlz
 LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsDQogICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlv
 c19iYXNlOjpvdXQpOw0KDQoNCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9z
 X3R5cGUob2ZmX3R5cGUoLTEpKSkNCiAgICAgICAgICAgIHRoaXMtPnNldHN0
 YXRlKGZhaWxiaXQpOw0KICAgICAgICB9DQoNCiAgICAgIHJldHVybiAqdGhp
 czsNCiAgICB9DQojIDQ1NyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
 ZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5h
 bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBf
 X3BhZF9jaGFyKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywN
 CiAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQq
 IF9fb2xkcywNCiAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19u
 ZXdsZW4sIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pDQogICAgew0KICAg
 ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf
 VHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0
 cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQoNCiAgICAgIGludF90
 eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBf
 X29sZGxlbik7DQogICAgICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19j
 YXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJf
 dHlwZSkgKiBfX3BsZW4pKTsNCiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o
 X19wYWRzLCBfX3BsZW4sIF9faW9zLmZpbGwoKSk7DQoNCiAgICAgIGNoYXJf
 dHlwZSogX19iZWc7DQogICAgICBjaGFyX3R5cGUqIF9fZW5kOw0KICAgICAg
 c2l6ZV90IF9fbW9kID0gMDsNCiAgICAgIHNpemVfdCBfX2JlZ2xlbjsNCiAg
 ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IF9faW9zLmZsYWdzKCkg
 JiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7DQoNCiAgICAgIGlmIChfX2ZtdCA9
 PSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KDQogICAgICAgICAgX19i
 ZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAg
 ICAgX19iZWdsZW4gPSBfX29sZGxlbjsNCiAgICAgICAgICBfX2VuZCA9IF9f
 cGFkczsNCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19mbXQgPT0gaW9z
 X2Jhc2U6OmludGVybmFsKQ0KICAgICAgICB7DQoNCg0KDQogICAgICAgICAg
 dHlwZWRlZiBfRm9ybWF0X2NhY2hlPF9DaGFyVD4gX19jYWNoZV90eXBlOw0K
 ICAgICAgICAgIF9fY2FjaGVfdHlwZSBjb25zdCogX19mbXQgPSBfX2NhY2hl
 X3R5cGU6Ol9TX2dldChfX2lvcyk7DQogICAgICAgICAgY29uc3QgY2hhcl90
 eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29s
 ZGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfbWludXMpOw0KICAgICAgICAg
 IGNvbnN0IGNoYXJfdHlwZSogX19wbHVzID0gdHJhaXRzX3R5cGU6OmZpbmQo
 X19vbGRzLCBfX29sZGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19wbHVzKTsN
 CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1
 czsNCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9fb2xkc1swXSA9PSAn
 MCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0g
 PT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOw0KDQogICAgICAgICAgaWYg
 KF9fdGVzdGhleCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19u
 ZXdzWzBdID0gX19vbGRzWzBdOw0KICAgICAgICAgICAgICBfX25ld3NbMV0g
 PSBfX29sZHNbMV07DQogICAgICAgICAgICAgIF9fbW9kICs9IDI7DQogICAg
 ICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29s
 ZHMgKyBfX21vZCk7DQogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRs
 ZW4gLSBfX21vZDsNCiAgICAgICAgICAgICAgX19lbmQgPSBfX3BhZHM7DQog
 ICAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikN
 CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19tb2QgKz0gX19wbGVu
 Ow0KICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fc2lnbiA9IF9f
 bWludXMgPyBfX21pbnVzICsgMTogX19wbHVzICsgMTsNCiAgICAgICAgICAg
 ICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQog
 ICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19vbGRzOw0KICAg
 ICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19z
 aWduICsgX19wbGVuKTsNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
 cHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywgX19wbGVuKTsNCiAgICAg
 ICAgICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCiAg
 ICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9f
 YmVnbGVuID0gX19wbGVuOw0KICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0
 X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBf
 X2JlZyA9IF9fcGFkczsNCiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsN
 CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19v
 bGRzKTsNCiAgICAgICAgfQ0KDQogICAgICB0cmFpdHNfdHlwZTo6Y29weShf
 X25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7DQogICAgICB0cmFpdHNfdHlwZTo6
 Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0gX19i
 ZWdsZW4gLSBfX21vZCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFt
 PF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQ0KICAg
 IHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
 dHM+IF9fb3N0cmVhbV90eXBlOw0KICAgICAgdHlwZW5hbWUgX19vc3RyZWFt
 X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOw0KICAgICAgaWYgKF9fY2Vy
 YikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K
 ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7
 DQogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8
 X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
 dykpOw0KICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7DQogICAgICAg
 ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOw0KICAgICAgICAgICAgICBp
 ZiAoX193ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAg
 ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3cs
 IF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAg
 ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19w
 YWRzLCBfX2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0K
 ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
 YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQu
 c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
 ICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
 MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQogIHRl
 bXBsYXRlIDxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hh
 ciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo
 YXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpDQogICAgew0KICAgICAg
 dHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVh
 bV90eXBlOw0KICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy
 eSBfX2NlcmIoX19vdXQpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7DQogICAgICAgICAg
 ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0
 aW5fYWxsb2NhKF9fdyArIDEpKTsNCiAgICAgICAgICAgICAgX19wYWRzWzBd
 ID0gX19jOw0KICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsN
 CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9f
 cGFkcywgJl9fYywgX193LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBf
 X2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg
 IF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOw0KICAgICAgICAgICAgICBf
 X291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj
 aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg
 ICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K
 ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19i
 YXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQog
 ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291dDsN
 CiAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICB7DQogICAg
 ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
 dHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
 ZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
 ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
 ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAg
 ICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+
 KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCiAg
 ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0
 cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAgICAgICAg
 ICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg
 ICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBf
 X3csIF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsN
 CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAg
 ICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7
 DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgICAg
 fQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAg
 ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
 X2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhj
 ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAg
 ICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg
 ICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19z
 KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
 IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYg
 Y2hhcl90cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7DQoNCiAgICAgIHR5
 cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsN
 CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXpl
 X3QgX19jbGVuID0gX19jdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOw0KICAg
 ICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
 YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkp
 KTsNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19j
 bGVuOyArK19faSkNCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0Lndp
 ZGVuKF9fc1tfX2ldKTsNCiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193
 czsNCg0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAg
 ICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
 ZT4oX19jbGVuKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBf
 X291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9
 IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
 KF9DaGFyVCkgKiBfX3cpKTsNCg0KICAgICAgICAgICAgICBpZiAoX193ID4g
 X19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg
 X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsN
 CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOw0KICAgICAgICAg
 ICAgICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAg
 ICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOw0KICAgICAg
 ICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAg
 ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsN
 Cg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpi
 YWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo
 KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAg
 dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
 biBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
 Pg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3Bl
 cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
 Y29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf
 b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAg
 IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0
 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
 X3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBjaGFyKiBfX3Bh
 ZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cp
 KTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19j
 YXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAg
 ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsN
 CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywg
 X19zLCBfX3csIF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fcyA9IF9f
 cGFkczsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAg
 ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBf
 X2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAg
 ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
 ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh
 dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19v
 dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
 ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 fQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
 X0FsbG9jPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
 CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYgX19vdXQsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikNCiAgICB7DQogICAg
 ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
 dHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
 ZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
 ICAgIHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRh
 dGEoKTsNCiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
 KCk7DQogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxf
 Q2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193
 KSk7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0
 PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7DQoNCg0KDQogICAgICAgICAg
 aWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7
 DQogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsNCiAgICAgICAgICAgICAg
 X19sZW4gPSBfX3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgc3RyZWFt
 c2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4p
 Ow0KICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgIGlmIChf
 X3JlcyAhPSBfX2xlbikNCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlv
 c19iYXNlOjpmYWlsYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
 b3V0Ow0KICAgIH0NCn0NCiMgMjc5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAyIDMNCiMgMzQgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0u
 dGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl
 bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShi
 YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u
 b3NraXB3cykNCiAgICB7DQogICAgICBpZiAoX19pbi5nb29kKCkpDQogICAg
 ICAgIHsNCiAgICAgICAgICBpZiAoX19pbi50aWUoKSkNCiAgICAgICAgICAg
 IF9faW4udGllKCktPmZsdXNoKCk7DQogICAgICAgICAgaWYgKCFfX25vc2tp
 cHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkNCiAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
 X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAgICAgY29u
 c3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBl
 X2lvcygpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
 ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9f
 YyA9IF9fc2ItPnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
 YyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg
 X19jKSkNCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsN
 Cg0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAg
 ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K
 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgaWYgKF9faW4u
 Z29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNlDQog
 ICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAg
 IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9
 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
 bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
 ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh
 bV90eXBlJikpDQogICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICBy
 ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko
 X19pb3NfdHlwZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
 ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm
 KShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
 ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAg
 ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg
 aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
 ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0K
 ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
 aXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
 ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhj
 ZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg
 ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg
 ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAg
 ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg
 fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
 ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
 YXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
 YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
 KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
 ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
 dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
 ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
 ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
 ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
 eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
 ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
 ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
 JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
 c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
 IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6
 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
 b29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
 X2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
 dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0
 aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
 dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 OjoNCiAgICBvcGVyYXRvcj4+KGludCYgX19uKQ0KICAgIHsNCiAgICAgIHNl
 bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
 DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
 ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
 IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
 ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
 X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
 ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
 YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
 ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
 MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNp
 Z25lZCBpbnQmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0
 aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog
 ICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlv
 c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
 X2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
 ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdl
 dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAg
 ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0N
 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
 ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
 YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
 dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg
 ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
 IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
 X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0KICAgIHsN
 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlm
 IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
 PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAg
 ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAg
 ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
 LCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
 X19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
 dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
 ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
 ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
 ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
 ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg
 IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0
 b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5
 IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
 ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg
 ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
 b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYg
 KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAg
 IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
 Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAg
 ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
 DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
 dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K
 ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg
 ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAzNDQgIi9ob21l
 L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj
 IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
 ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
 YXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
 YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
 KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
 ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
 dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
 ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
 ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
 ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
 eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
 ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
 ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
 ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
 clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQ0K
 ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAg
 ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg
 X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
 DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
 KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
 ICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0
 c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo
 KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg
 ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog
 ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
 c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg
 ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg
 b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQ0KICAgIHsNCiAgICAgIHNl
 bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
 DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
 ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
 ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
 IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
 ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
 X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
 ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
 YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
 ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
 MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
 dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih2b2lk
 KiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
 bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
 ICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
 Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
 TV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
 KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAg
 dGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAg
 ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0K
 DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
 ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
 ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0
 aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
 ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
 IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
 IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 Pjo6DQogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0
 KQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAg
 ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOw0K
 ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg
 KF9fc2JvdXQgJiYgX19jZXJiKQ0KICAgICAgICBfX3h0cmN0ID0gX19jb3B5
 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7DQogICAgICBp
 ZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 Pjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGludF90
 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5
 cGUgX19jID0gX19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg
 c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJi
 KQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQog
 ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOw0K
 DQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAg
 ICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAg
 ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg
 fCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
 DQogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQ0KICAgIHsNCiAgICAgIF9NX2dj
 b3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsN
 CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN
 CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
 X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIGlu
 dF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7DQoN
 CiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQ0KICAgICAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7
 DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
 cl90eXBlKF9fYnVmdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg
 ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
 b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
 ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
 ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
 dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
 cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
 ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
 aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz
 dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAg
 ICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
 IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAxKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv
 X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgICAgICBjb25zdCBpbnRf
 dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg
 ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQog
 ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0K
 ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
 bGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf
 X2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19u
 IC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAg
 ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf
 dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICAr
 K19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
 dW1wYygpOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09
 IF9fZW9mOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
 PT0gX19pZGVsaW07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
 ICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpDQog
 ICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7DQogICAgICAg
 ICAgICAgIGlmIChfX3Rlc3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+
 c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQog
 ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
 ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
 ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
 b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg
 ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAq
 X19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAg
 ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAg
 ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
 ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
 bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is
 IGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9
 IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAg
 IGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBf
 X2M7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g
 dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsN
 CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
 dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgICAg
 IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0K
 ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOw0KICAg
 ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGlt
 Ow0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv
 ZjsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSB0cnVlOw0KDQog
 ICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp
 bQ0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5z
 cHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAg
 IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
 ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
 ICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAgICAgICAg
 ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOw0KICAg
 ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGlt
 IHx8ICFfX3Rlc3RwdXQpDQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5z
 cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsNCiAg
 ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB0
 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAg
 IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAg
 ICAgICAgIHsNCg0KICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr
 Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAg
 ICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAgICAg
 ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
 cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
 VHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt
 c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9N
 X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
 dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlu
 dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAr
 K19NX2djb3VudDsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p
 ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQog
 ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
 cGU6OmVvZigpOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0g
 X19jID09IF9faWRlbGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVv
 ZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01f
 Z2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0K
 ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9
 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAg
 ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAg
 ICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2Yg
 PSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp
 bSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAgICAgICAgICB9DQoNCiAg
 ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB7
 DQogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsNCiAgICAgICAgICAg
 ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAg
 ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz
 dGRlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg
 IC0tX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19zYi0+c3B1dGJh
 Y2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7DQogICAgICAg
 ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg
 IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
 dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
 aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
 dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNo
 YXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo
 aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVy
 biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
 LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19k
 ZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2Vu
 dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiICYm
 IF9fbiA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
 ICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g
 PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAg
 ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
 ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
 dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
 X19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVs
 aW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgICAgIGJvb2wgX190
 ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAgICAgICAgICAgIF9fbiA9
 IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7
 DQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYm
 ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgICAg
 IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
 ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
 ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAg
 ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAg
 ICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9f
 biAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pDQogICAgICAg
 ICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgIGlmIChfX3Rl
 c3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
 c2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
 ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
 X1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
 OmludF90eXBlDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
 OjoNCiAgICBwZWVrKHZvaWQpDQogICAgew0KICAgICAgaW50X3R5cGUgX19j
 ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN
 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg
 KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg
 ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9DQogICAgICAg
 ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
 Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
 JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
 cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
 X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
 cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
 DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog
 ICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2Nl
 cmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAgew0KICAg
 ICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg
 ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
 b2YoKTsNCiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
 c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgaW50X3R5
 cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgICAgICBi
 b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAg
 ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv
 ZikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg
 ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN
 CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAg
 ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
 ICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAg
 ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rl
 c3Rlb2YpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
 c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg
 ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCg0KICAg
 ICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j
 aGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgICAgICArK19NX2dj
 b3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
 IH0NCiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
 ICAgICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgIHRoaXMt
 PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAg
 ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
 KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
 ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVs
 c2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
 Ow0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFt
 c2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQog
 ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0K
 ICAgIHsNCiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
 cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRy
 eSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
 ICAgICAgew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAg
 ew0KICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAg
 ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYo
 KS0+aW5fYXZhaWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAh
 PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpDQogICAgICAgICAg
 ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1p
 bihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9nY291
 bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsNCiAgICAg
 ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg
 ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
 Yml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhdGNo
 KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgICAgIHsNCg0KDQog
 ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
 Yml0KTsNCiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
 cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
 ICAgICAgdGhyb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
 fQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiBfTV9nY291
 bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
 YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
 CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2Vu
 dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0K
 ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg
 ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
 OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
 ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8
 IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQ0KICAgICAgICAgICAg
 ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
 ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
 ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
 dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
 cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
 ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 fQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
 ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
 IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz
 aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB1bmdldCh2b2lk
 KQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkg
 X19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
 ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
 ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
 KCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0
 aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19l
 b2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt
 PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K
 ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg
 ICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
 c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg
 ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
 ZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
 dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
 PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBpbnQN
 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHN5
 bmModm9pZCkNCiAgICB7DQogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlw
 ZTo6ZW9mKCk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5
 IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
 ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg
 ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp
 Ow0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+
 cHVic3luYygpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
 c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg
 ICAgICAgICAgX19yZXQgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
 IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
 dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
 aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
 dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
 cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08
 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdGVsbGcodm9pZCkNCiAgICB7DQog
 ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsNCiAgICAgIF9N
 X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBfX3JldCA9IHRoaXMt
 PnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh
 c2U6OmluKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl
 cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAg
 ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
 ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
 YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAg
 ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9
 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
 ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc2Vl
 a2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01fZ2NvdW50ID0g
 MDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg
 aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
 ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0
 aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4p
 Ow0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9m
 Zl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
 ZmFpbGJpdCk7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChl
 eGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg
 ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAg
 ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
 OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAg
 ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg
 ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
 VHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
 CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNl
 ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikN
 CiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9f
 Y2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl
 ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlu
 KTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShv
 ZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
 KGZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
 ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
 ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
 ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
 ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
 ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
 ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
 aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRl
 ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5
 cGU7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f
 Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
 ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IF9faW4uZ2V0KF9f
 Yyk7IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg
 ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUo
 aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19pbi5l
 eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
 ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
 ICAgICBlbHNlDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh
 aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi
 YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+
 PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
 VCogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
 Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf
 X3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
 aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0NoYXJU
 IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0
 eXBlX3R5cGU7DQogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsN
 Cg0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl
 cmIoX19pbiwgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
 ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAg
 ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7DQogICAgICAg
 ICAgICAgIGlmIChfX251bSA9PSAwKQ0KICAgICAgICAgICAgICAgIF9fbnVt
 ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOw0KDQogICAg
 ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm
 KCk7DQogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlw
 ZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgICAgICAgICAg
 aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
 IGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAg
 ICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9i
 YXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl
 b2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
 ZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
 dHNwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpf
 X3MrKyA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
 DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAg
 ICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAg
 ICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf
 YmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAg
 ICAgICAgICAgIGlmICghX190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIF9f
 c2ItPnNwdXRiYWNrYyhfX2MpOw0KICAgICAgICAgICAgICBlbHNlDQogICAg
 ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN
 Cg0KDQoNCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KDQog
 ICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7DQogICAgICAgICAgICB9DQog
 ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
 ICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
 OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u
 cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
 ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgaWYg
 KCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
 ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
 DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgd3Mo
 YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pDQogICAgew0K
 ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
 X19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0
 cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7
 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
 eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
 ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAg
 IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf
 X2NoYXJfdHlwZTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
 IF9faW4ucmRidWYoKTsNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19j
 dHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgIGNvbnN0
 IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgIF9f
 aW50X3R5cGUgX19jOw0KICAgICAgYm9vbCBfX3Rlc3Rlb2Y7DQogICAgICBi
 b29sIF9fdGVzdHNwOw0KDQogICAgICBkbw0KICAgICAgICB7DQogICAgICAg
 ICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgX190ZXN0ZW9m
 ID0gX19jID09IF9fZW9mOw0KICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw
 ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgIH0NCiAg
 ICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsNCg0KICAgICAg
 aWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQ0KICAgICAgICBfX3NiLT5z
 cHV0YmFja2MoX19jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19pbi5zZXRz
 dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47
 DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
 bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0
 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
 aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAg
 ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
 dHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy
 VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5
 cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOw0K
 ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl
 YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
 YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7
 DQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAg
 IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s
 IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg
 ICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX193
 ID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsN
 CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl
 X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOw0KDQogICAgICAgICAg
 X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAg
 ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dl
 dF9mY3R5cGVfaW9zKCk7DQogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
 X3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9f
 ZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rz
 cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOw0KICAg
 ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAg
 ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2Yg
 JiYgIV9fdGVzdHNwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf
 X3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg
 ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19z
 Yi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9
 PSBfX2VvZjsNCiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5p
 cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgIH0NCiAg
 ICAgICAgICBpZiAoIV9fdGVzdGVvZikNCiAgICAgICAgICAgIF9fc2ItPnNw
 dXRiYWNrYyhfX2MpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9f
 aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgX19p
 bi53aWR0aCgwKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmICghX19leHRy
 YWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWls
 Yml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
 bWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
 cmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkNCiAgICB7
 DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
 PiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
 c3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQogICAgICB0eXBl
 ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBl
 IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
 aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAg
 ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
 b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
 c3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCg0KICAgICAg
 X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KICAgICAgYm9vbCBfX3Rl
 c3RkZWxpbSA9IGZhbHNlOw0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5
 cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7DQogICAgICBpZiAoX19j
 ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg
 ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOw0K
 DQogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRv
 X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgX19pbnRfdHlw
 ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2lu
 dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgX190
 ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgYm9vbCBf
 X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICB3aGlsZSAo
 X19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRl
 bGltKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0ciArPSBf
 VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgKytf
 X2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
 KCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsN
 CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07
 DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAg
 ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQog
 ICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl
 bGltKQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
 KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTxj
 bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4NCiAg
 ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAg
 Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
 DQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
 bG9jPiYgX19zdHIpDQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0
 ciwgX19pbi53aWRlbignXG4nKSk7IH0NCn0NCiMgMjkxICIvaG9tZS9tZGVp
 bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy
 IDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
 aXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
 Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMg
 NDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
 ZF9mc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
 bHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgiIDEgMw0KIyAzOCAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmls
 ZS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
 LXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEg
 Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
 dHMvYmFzaWNfZmlsZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMNCiMgNDEgIi9o
 b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2Zp
 bGUuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cnVjdCBfX2Jhc2lj
 X2ZpbGVfYmFzZTogcHVibGljIF9fY19maWxlX3R5cGUNCiAgICB7DQogICAg
 ICB2aXJ0dWFsDQogICAgICB+X19iYXNpY19maWxlX2Jhc2UoKSB7IH07DQoN
 CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBvdmVyZmxvdyhpbnQgX19jID0g
 KC0xKSkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgdW5kZXJm
 bG93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgdWZsb3co
 KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBwYmFja2ZhaWwo
 aW50IF9fYykgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAg
 ICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p
 ID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dl
 dG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAg
 IHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBf
 X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAg
 IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBp
 b3NfYmFzZTo6b3V0KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtb2Zm
 DQogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywNCiAgICAgICAgICAg
 ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8
 IGlvc19iYXNlOjpvdXQpID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1i
 dWYqDQogICAgICBzZXRidWYoX0NoYXJUKiBfX2IsIGludCBfX2xlbikgPSAw
 Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3luYygpID0gMDsNCg0K
 ICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvYWxsb2NhdGUoKSA9IDA7DQoN
 CiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3JlYWQoX0No
 YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAgIHZpcnR1
 YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog
 X19zLCBzdHJlYW1zaXplIF9fbikgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0
 cmVhbW9mZg0KICAgICAgc3lzX3NlZWsoc3RyZWFtb2ZmIF9fb2ZmLCBpb3Nf
 YmFzZTo6c2Vla2RpciBfX3dheSkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu
 dA0KICAgICAgc3lzX2Nsb3NlKCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu
 dA0KICAgICAgc3lzX3N0YXQodm9pZCogX192KSA9IDA7DQoNCiAgICAgIHZp
 cnR1YWwgaW50DQogICAgICBzaG93bWFueWMoKSA9IDA7DQoNCiAgICAgIHZp
 cnR1YWwgdm9pZA0KICAgICAgaW1idWUodm9pZCogX192KSA9IDA7DQogICAg
 fTsNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQoNCg0K
 DQogICAgY2xhc3MgX19iYXNpY19maWxlDQoNCiAgICB7DQoNCiAgICAgIF9f
 Y19maWxlX3R5cGUqIF9NX2NmaWxlOw0KICAgICAgYm9vbCBfTV9jZmlsZV9j
 cmVhdGVkOw0KDQoNCg0KDQoNCg0KICAgIHB1YmxpYzoNCiAgICAgIF9fYmFz
 aWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7DQoNCiAgICAgIHZvaWQN
 CiAgICAgIF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl
 LCBpbnQmIF9fcF9tb2RlLCBpbnQmIF9fcndfbW9kZSwNCiAgICAgICAgICAg
 ICAgICAgICBjaGFyKiBfX2NfbW9kZSk7DQoNCg0KICAgICAgX19iYXNpY19m
 aWxlKg0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX25hbWUsIGlvc19iYXNl
 OjpvcGVubW9kZSBfX21vZGUsIGludCBfX3Byb3QgPSAwNjY0KTsNCg0KDQoN
 Cg0KDQogICAgICBfX2Jhc2ljX2ZpbGUqDQogICAgICBzeXNfb3BlbihfX2Nf
 ZmlsZV90eXBlKiBfX2ZpbGUsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUp
 Ow0KDQogICAgICBfQ2hhclQNCiAgICAgIHN5c19nZXRjKCk7DQoNCiAgICAg
 IF9DaGFyVA0KICAgICAgc3lzX3VuZ2V0YyhfQ2hhclQpOw0KDQogICAgICBf
 X2Jhc2ljX2ZpbGUqDQogICAgICBjbG9zZSgpOw0KDQogICAgICBib29sDQog
 ICAgICBpc19vcGVuKCk7DQoNCg0KDQoNCg0KICAgICAgdmlydHVhbA0KICAg
 ICAgfl9fYmFzaWNfZmlsZSgpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAg
 ICAgb3ZlcmZsb3coaW50IF9fYyA9ICgtMSkpOw0KDQogICAgICB2aXJ0dWFs
 IGludA0KICAgICAgdW5kZXJmbG93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50
 DQogICAgICB1ZmxvdygpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
 cGJhY2tmYWlsKGludCBfX2MpOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0
 cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3Ry
 ZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNp
 emUNCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p
 Ow0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbW9mZg0KICAgICAgc2Vl
 a29mZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5
 LA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
 aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7DQoNCg0KDQoNCiAgICAg
 IHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBf
 X3BvcywNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
 ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOw0KDQogICAgICB2
 aXJ0dWFsIHN0cmVhbWJ1ZioNCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwg
 aW50IF9fbGVuKTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHN5bmMo
 KTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvYWxsb2NhdGUoKTsN
 Cg0KDQoNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNf
 cmVhZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQog
 ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHN5c193cml0ZShjb25z
 dCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQogICAg
 ICB2aXJ0dWFsIHN0cmVhbW9mZg0KICAgICAgc3lzX3NlZWsoc3RyZWFtb2Zm
 IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSk7DQoNCiAgICAgIHZp
 cnR1YWwgaW50DQogICAgICBzeXNfY2xvc2UoKTsNCg0KICAgICAgdmlydHVh
 bCBpbnQNCiAgICAgIHN5c19zdGF0KHZvaWQqIF9fdik7DQoNCiAgICAgIHZp
 cnR1YWwgaW50DQogICAgICBzaG93bWFueWMoKTsNCg0KICAgICAgdmlydHVh
 bCB2b2lkDQogICAgICBpbWJ1ZSh2b2lkKiBfX3YpOw0KICAgIH07DQp9DQoN
 Cg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z
 cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2Jhc2ljX2ZpbGVfbW9kZWwuaCIg
 MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
 c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9iYXNpY19maWxlX21vZGVsLmgi
 IDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQ+DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46Ol9fYmFzaWNfZmls
 ZShfX2NfbG9jayogKQ0KICAgIDogX01fY2ZpbGUoX19udWxsKSwgX01fY2Zp
 bGVfY3JlYXRlZChmYWxzZSkgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJUPg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp+X19iYXNpY19m
 aWxlKCkNCiAgICB7DQogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQ0KICAg
 ICAgICB7DQogICAgICAgICAgZmZsdXNoKF9NX2NmaWxlKTsNCiAgICAgICAg
 ICB0aGlzLT5jbG9zZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgX19iYXNpY19m
 aWxlPF9DaGFyVD46Ol9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUg
 X19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgaW50JiAsIGludCYgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgY2hhciogX19jX21vZGUpDQogICAgew0KICAgICAgYm9v
 bCBfX3Rlc3RiID0gX19tb2RlICYgaW9zX2Jhc2U6OmJpbmFyeTsNCiAgICAg
 IGJvb2wgX190ZXN0aSA9IF9fbW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAg
 IGJvb2wgX190ZXN0byA9IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAg
 ICBib29sIF9fdGVzdHQgPSBfX21vZGUgJiBpb3NfYmFzZTo6dHJ1bmM7DQog
 ICAgICBib29sIF9fdGVzdGEgPSBfX21vZGUgJiBpb3NfYmFzZTo6YXBwOw0K
 DQogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAm
 JiAhX190ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOw0K
 ICAgICAgaWYgKCFfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYg
 X190ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAiYSIpOw0KICAg
 ICAgaWYgKCFfX3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190
 ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOw0KICAgICAg
 aWYgKF9fdGVzdGkgJiYgIV9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVz
 dGEpDQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIiKTsNCiAgICAgIGlm
 IChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVzdGEp
 DQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIrIik7DQogICAgICBpZiAo
 X190ZXN0aSAmJiBfX3Rlc3RvICYmIF9fdGVzdHQgJiYgIV9fdGVzdGEpDQog
 ICAgICAgIHN0cmNweShfX2NfbW9kZSwgIncrIik7DQogICAgICBpZiAoX190
 ZXN0YikNCiAgICAgICAgc3RyY2F0KF9fY19tb2RlLCAiYiIpOw0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX19iYXNpY19m
 aWxlPF9DaGFyVD4qDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19v
 cGVuKF9fY19maWxlX3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl
 KQ0KICAgIHsNCiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7
 DQoNCiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fZmlsZSkNCiAg
 ICAgICAgew0KICAgICAgICAgIF9NX2NmaWxlID0gX19maWxlOw0KICAgICAg
 ICAgIF9NX2NmaWxlX2NyZWF0ZWQgPSBmYWxzZTsNCiAgICAgICAgICBfX3Jl
 dCA9IHRoaXM7DQogICAgICAgIH0NCg0KICAgICAgcmV0dXJuIF9fcmV0Ow0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0No
 YXJUDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19nZXRjKCkNCiAg
 ICB7DQogICAgICByZXR1cm4gZ2V0YyAoX01fY2ZpbGUpOw0KICAgIH0NCg0K
 ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0NoYXJUDQogICAg
 X19iYXNpY19maWxlPF9DaGFyVD46OnN5c191bmdldGMoX0NoYXJUIF9fcykN
 CiAgICB7DQogICAgICByZXR1cm4gdW5nZXRjIChfX3MsIF9NX2NmaWxlKTsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIF9f
 YmFzaWNfZmlsZTxfQ2hhclQ+Kg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+
 OjpvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl
 IF9fbW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
 KQ0KICAgIHsNCiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7
 DQogICAgICBpbnQgX19wX21vZGUgPSAwOw0KICAgICAgaW50IF9fcndfbW9k
 ZSA9IDA7DQogICAgICBjaGFyIF9fY19tb2RlWzRdOw0KDQogICAgICBfTV9v
 cGVuX21vZGUoX19tb2RlLCBfX3BfbW9kZSwgX19yd19tb2RlLCBfX2NfbW9k
 ZSk7DQoNCiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICB7
 DQogICAgICAgICAgaWYgKChfTV9jZmlsZSA9IGZvcGVuKF9fbmFtZSwgX19j
 X21vZGUpKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fY2Zp
 bGVfY3JlYXRlZCA9IHRydWU7DQogICAgICAgICAgICAgIF9fcmV0ID0gdGhp
 czsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
 cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
 ICAgYm9vbA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojppc19vcGVuKCkg
 eyByZXR1cm4gX01fY2ZpbGUgIT0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
 YW1lIF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioNCiAgICBf
 X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6Y2xvc2UoKQ0KICAgIHsNCiAgICAgIF9f
 YmFzaWNfZmlsZSogX19yZXR2YWwgPSBzdGF0aWNfY2FzdDxfX2Jhc2ljX2Zp
 bGUqPihfX251bGwpOw0KICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYg
 ZmNsb3NlKF9NX2NmaWxlKSkNCiAgICAgICAgX19yZXR2YWwgPSB0aGlzOw0K
 ICAgICAgcmV0dXJuIF9fcmV0dmFsOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
 eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fYmFzaWNf
 ZmlsZTxfQ2hhclQ+Ojp4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUg
 X19uKQ0KICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmls
 ZSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3Ry
 ZWFtc2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp4c3B1dG4oY29u
 c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJu
 IGZ3cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCiAgdGVtcGxh
 dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVhbW9mZg0KICAgIF9fYmFz
 aWNfZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9z
 X2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkNCiAgICB7IGZzZWVr
 KF9NX2NmaWxlLCBfX29mZiwgX193YXkpOyByZXR1cm4gZnRlbGwoX01fY2Zp
 bGUpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0
 cmVhbW9mZg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0
 cmVhbW9mZiBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgKQ0KICAgIHsgZnNlZWsoX01fY2Zp
 bGUsIF9fcG9zLCBpb3NfYmFzZTo6YmVnKTsgcmV0dXJuIGZ0ZWxsKF9NX2Nm
 aWxlKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp
 bnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpDQogICAgeyBy
 ZXR1cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw
 ZW5hbWUgX0NoYXJUPg0KICAgIGludA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hh
 clQ+OjpvdmVyZmxvdyhpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0K
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQNCiAgICBf
 X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJmbG93KCkNCiAgICB7IHJldHVy
 biAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
 ICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkNCiAg
 ICB7IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
 Q2hhclQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnBi
 YWNrZmFpbChpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRl
 bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzdHJlYW1idWYqDQogICAg
 X19iYXNpY19maWxlPF9DaGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkN
 CiAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRo
 aXMpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
 aW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQ0K
 ICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
 IF9DaGFyVD4NCiAgICBzdHJlYW1zaXplDQogICAgX19iYXNpY19maWxlPF9D
 aGFyVD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikN
 CiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9
 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFt
 c2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfd3JpdGUoY29u
 c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJu
 IGZ3cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCg0KICB0ZW1w
 bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtb2ZmDQogICAgX19i
 YXNpY19maWxlPF9DaGFyVD46OnN5c19zZWVrKHN0cmVhbW9mZiBfX3Bvcywg
 aW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpDQogICAgew0KICAgICAgZnNlZWso
 X01fY2ZpbGUsIF9fcG9zLCBfX3dheSk7DQogICAgICByZXR1cm4gZnRlbGwo
 X01fY2ZpbGUpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
 aGFyVD4NCiAgICBpbnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lz
 X2Nsb3NlKCkNCiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9DQoN
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAg
 X19iYXNpY19maWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkNCiAgICB7
 IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
 clQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnNob3dt
 YW55YygpDQogICAgeyByZXR1cm4gKC0xKTsgfQ0KDQoNCiAgdGVtcGxhdGU8
 dHlwZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2ljX2ZpbGU8
 X0NoYXJUPjo6aW1idWUodm9pZCogKSB7IH0NCn0NCiMgMjUxICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgi
 IDIgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
 bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQoj
 IDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfZnN0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
 Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5o
 IiAxIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
 My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7
 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
 cz4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0
 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoN
 Cg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlw
 ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
 bmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0
 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw
 ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90
 eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt
 YnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7
 DQogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFp
 dHNfdHlwZT4gX19maWxlYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIF9fYmFz
 aWNfZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOw0KICAgICAgdHlwZWRl
 ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5
 cGU7DQogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBf
 X3N0YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7DQog
 ICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0K
 DQogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7DQoNCiAgICBwcml2YXRl
 Og0KDQoNCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOw0KDQoNCiAgICAg
 IF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7DQogICAgICBfX3N0YXRlX3R5
 cGUgX01fc3RhdGVfYmVnOw0KDQoNCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7
 DQoNCg0KICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOw0KDQoNCiAgICAg
 IGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOw0KDQogICAgcHVibGljOg0KDQog
 ICAgICBiYXNpY19maWxlYnVmKCk7DQoNCg0KICAgICAgYmFzaWNfZmlsZWJ1
 ZihfX2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
 ZGUsDQogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRp
 Y19jYXN0PGludF90eXBlPigxMDI0KSk7DQoNCiAgICAgIHZpcnR1YWwNCiAg
 ICAgIH5iYXNpY19maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+
 Y2xvc2UoKTsNCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7
 DQogICAgICB9DQoNCg0KICAgICAgYm9vbA0KICAgICAgaXNfb3Blbih2b2lk
 KSBjb25zdCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3Blbigp
 IDogZmFsc2U7IH0NCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICBv
 cGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
 ZSk7DQoNCiAgICAgIF9fZmlsZWJ1Zl90eXBlKg0KICAgICAgY2xvc2Uodm9p
 ZCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2b2lkDQogICAgICBfTV9h
 bGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAg
 ICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9p
 ZA0KICAgICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQoNCg0KICAg
 ICAgdm9pZA0KICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KDQoNCiAgICAg
 IHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKHZvaWQpOw0K
 DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAgICAgIHVuZGVy
 Zmxvdyh2b2lkKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAg
 cGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsNCiMg
 MTQ4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
 dGRfZnN0cmVhbS5oIiAzDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAg
 ICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQoj
 IDE1OCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2ZzdHJlYW0uaCIgMw0KICAgICAgaW50X3R5cGUNCiAgICAgIF9NX3Jl
 YWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7
 DQoNCiAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoNCiAgICAgIHNl
 dGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAg
 ICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9f
 b2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAgICAgICAg
 aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
 c19iYXNlOjpvdXQpOw0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAg
 ICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLA0KICAgICAgICAgICAgICBpb3Nf
 YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
 c2U6Om91dCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKHZv
 aWQpDQogICAgICB7DQogICAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0
 X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsNCiAgICAgICAgaWYg
 KF9fdGVzdHB1dCkNCiAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgX01f
 ZmlsZS0+c3luYygpOw0KDQoNCg0KDQoNCiAgICAgICAgICAgIHN0cmVhbW9m
 ZiBfX2N1ciA9IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7
 DQogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBf
 TV9vdXRfYmVnOw0KICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7
 DQogICAgICAgICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsgX19vZmYp
 Ow0KICAgICAgICAgIH0NCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g
 ZmFsc2U7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICB2
 aXJ0dWFsIHZvaWQNCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp
 Ow0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihj
 aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7DQogICAg
 ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KDQogICAgICAgIGlmIChfTV9w
 YmFja19pbml0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlIChf
 X3JldCA8IF9fbiAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAg
 ICAgICAgIHsNCiAgICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsN
 CiAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAgICsr
 X19zOw0KICAgICAgICAgICAgICAgICsrX01faW5fY3VyOw0KICAgICAgICAg
 ICAgICB9DQogICAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7DQogICAg
 ICAgICAgfQ0KICAgICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAg
 X19yZXQgKz0gX19zdHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0g
 X19yZXQpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAg
 ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNo
 YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsNCiAgICAg
 ICAgX01fcGJhY2tfZGVzdHJveSgpOw0KICAgICAgICByZXR1cm4gX19zdHJl
 YW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsNCiAgICAgIH0NCg0KICAg
 ICAgdm9pZA0KICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsNCiAgICB9Ow0K
 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFz
 aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1Ymxp
 YzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg
 dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0
 eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAg
 ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3Nf
 dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9m
 Zl90eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfZmls
 ZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsN
 CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0
 c190eXBlPiBfX2lzdHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAg
 ICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOw0KDQogICAgcHVibGljOg0K
 DQogICAgICBiYXNpY19pZnN0cmVhbSgpDQogICAgICA6IF9faXN0cmVhbV90
 eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQ0KICAgICAgeyB0aGlzLT5pbml0
 KCZfTV9maWxlYnVmKTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFz
 aWNfaWZzdHJlYW0oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v
 ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQ0KICAgICAgOiBfX2lzdHJlYW1f
 dHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAg
 dGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4o
 X19zLCBfX21vZGUpOw0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfaWZzdHJl
 YW0oKQ0KICAgICAgeyB9DQoNCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQog
 ICAgICByZGJ1ZigpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0
 PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJv
 b2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5p
 c19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBj
 aGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz
 ZTo6aW4pDQogICAgICB7DQogICAgICAgIGlmIChfTV9maWxlYnVmLm9wZW4o
 X19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkNCiAgICAg
 ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAg
 ICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIGNsb3NlKHZvaWQpDQogICAgICB7
 DQogICAgICAgIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQ0KICAgICAgICAg
 IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0N
 CiAgICB9Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBw
 dWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4NCiAgICB7DQog
 ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
 DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0
 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlw
 ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190
 eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf
 dHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBi
 YXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1
 Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlw
 ZSwgdHJhaXRzX3R5cGU+IF9fb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0
 ZToNCiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBw
 dWJsaWM6DQoNCiAgICAgIGJhc2ljX29mc3RyZWFtKCkNCiAgICAgIDogX19v
 c3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRo
 aXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQog
 ICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsDQogICAgICAg
 ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z
 X2Jhc2U6Om91dHxpb3NfYmFzZTo6dHJ1bmMpDQogICAgICA6IF9fb3N0cmVh
 bV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQ0KICAgICAgew0KICAgICAg
 ICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsNCiAgICAgICAgdGhpcy0+b3Bl
 bihfX3MsIF9fbW9kZSk7DQogICAgICB9DQoNCiAgICAgIH5iYXNpY19vZnN0
 cmVhbSgpDQogICAgICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoN
 CiAgICAgIHJkYnVmKHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25z
 dF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAg
 ICAgIGJvb2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmls
 ZWJ1Zi5pc19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihj
 b25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k
 ZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQ0K
 ICAgICAgew0KICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9f
 bW9kZSB8IGlvc19iYXNlOjpvdXQpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0
 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0NCg0KICAgICAgdm9p
 ZA0KICAgICAgY2xvc2Uodm9pZCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFf
 TV9maWxlYnVmLmNsb3NlKCkpDQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jh
 c2U6OmZhaWxiaXQpOw0KICAgICAgfQ0KICAgIH07DQoNCg0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBj
 bGFzcyBiYXNpY19mc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9D
 aGFyVCwgX1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0
 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFp
 dHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
 c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw
 ZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAg
 dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5
 cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlw
 ZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAgICAgdHlwZWRl
 ZiBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlw
 ZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0
 cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToN
 CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJs
 aWM6DQoNCiAgICAgIGJhc2ljX2ZzdHJlYW0oKQ0KICAgICAgOiBfX2lvc3Ry
 ZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMt
 PmluaXQoJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAg
 ICBiYXNpY19mc3RyZWFtKGNvbnN0IGNoYXIqIF9fcywNCiAgICAgICAgICAg
 ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
 OjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICA6IF9faW9zdHJlYW1fdHlw
 ZShfX251bGwpLCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhp
 cy0+aW5pdCgmX01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19z
 LCBfX21vZGUpOw0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfZnN0cmVhbSgp
 DQogICAgICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAg
 IHJkYnVmKHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0
 PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJv
 b2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5p
 c19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBj
 aGFyKiBfX3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
 ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgew0K
 ICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpDQog
 ICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
 fQ0KDQogICAgICB2b2lkDQogICAgICBjbG9zZSh2b2lkKQ0KICAgICAgew0K
 ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkNCiAgICAgICAgICBz
 ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQogICAgfTsN
 Cn0NCg0KDQoNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
 L2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAxIDMNCiMgMzcgIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAz
 DQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmls
 ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9maWxl
 KCkNCiAgICB7DQogICAgICBpZiAoIV9NX2ZpbGUpDQogICAgICAgIHsNCiAg
 ICAgICAgICBfTV9idWZfdW5pZmllZCA9IHRydWU7DQogICAgICAgICAgdHJ5
 DQogICAgICAgICAgICB7IF9NX2ZpbGUgPSBuZXcgX19maWxlX3R5cGUoJl9N
 X2xvY2spOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgICAg
 ew0KICAgICAgICAgICAgICBkZWxldGUgX01fZmlsZTsNCiAgICAgICAgICAg
 ICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpDQogICAg
 ew0KICAgICAgaWYgKCFfTV9idWYgJiYgX01fYnVmX3NpemVfb3B0KQ0KICAg
 ICAgICB7DQogICAgICAgICAgX01fYnVmX3NpemUgPSBfTV9idWZfc2l6ZV9v
 cHQ7DQoNCg0KICAgICAgICAgIHRyeSB7IF9NX2J1ZiA9IG5ldyBjaGFyX3R5
 cGVbX01fYnVmX3NpemVdOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAg
 ICAgICAgICAgew0KICAgICAgICAgICAgICBkZWxldGUgW10gX01fYnVmOw0K
 ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
 ICBfTV9idWZfYWxsb2NhdGVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0N
 Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
 YWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
 cmFpdHM+OjoNCiAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpDQog
 ICAgew0KICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0ZWQpDQogICAgICAgIHsN
 CiAgICAgICAgICBkZWxldGUgW10gX01fYnVmOw0KICAgICAgICAgIF9NX2J1
 ZiA9IF9fbnVsbDsNCiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFs
 c2U7DQogICAgICAgICAgdGhpcy0+c2V0ZyhfX251bGwsIF9fbnVsbCwgX19u
 dWxsKTsNCiAgICAgICAgICB0aGlzLT5zZXRwKF9fbnVsbCwgX19udWxsKTsN
 CiAgICAgICAgfQ0KICAgIH0NCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmls
 ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9wYmFj
 a19idWZmZXIoKQ0KICAgIHsNCiAgICAgIGlmICghX01fcGJhY2sgJiYgX01f
 cGJhY2tfc2l6ZSkNCiAgICAgICAgew0KDQogICAgICAgICAgdHJ5DQogICAg
 ICAgICAgICB7IF9NX3BiYWNrID0gbmV3IGNoYXJfdHlwZVtfTV9wYmFja19z
 aXplXTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsN
 CiAgICAgICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNrOw0KICAgICAgICAg
 ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0N
 Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
 dHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
 ICBiYXNpY19maWxlYnVmKCkNCiAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwg
 X01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkp
 LA0KICAgIF9NX3N0YXRlX2JlZyhfX3N0YXRlX3R5cGUoKSksIF9NX2J1Zl9h
 bGxvY2F0ZWQoZmFsc2UpLA0KICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZChmYWxz
 ZSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
 cmFpdHM+OjoNCiAgICBiYXNpY19maWxlYnVmKF9fY19maWxlX3R5cGUqIF9f
 ZiwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50X3R5cGUgX19zKQ0K
 ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9maWxlKF9fbnVsbCksIF9N
 X3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksDQogICAgX01fc3RhdGVfYmVn
 KF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksDQog
 ICAgX01fbGFzdF9vdmVyZmxvd2VkKGZhbHNlKQ0KICAgIHsNCiAgICAgIF9N
 X2FsbG9jYXRlX2ZpbGUoKTsNCiAgICAgIF9NX2ZpbGUtPnN5c19vcGVuKF9f
 ZiwgX19tb2RlKTsNCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQogICAg
 ICAgIHsNCiAgICAgICAgICBfTV9tb2RlID0gX19tb2RlOw0KICAgICAgICAg
 IGlmIChfX3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9NX2J1
 Zl9zaXplX29wdCA9IF9fczsNCiAgICAgICAgICAgICAgX01fYWxsb2NhdGVf
 aW50ZXJuYWxfYnVmZmVyKCk7DQogICAgICAgICAgICAgIF9NX3NldF9pbmRl
 dGVybWluYXRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgX01fYWxs
 b2NhdGVfcGJhY2tfYnVmZmVyKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAg
 dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K
 ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19maWxlYnVm
 X3R5cGUqDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoN
 CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2Rl
 IF9fbW9kZSkNCiAgICB7DQogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQg
 PSBfX251bGw7DQogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkNCiAgICAg
 ICAgew0KICAgICAgICAgIF9NX2FsbG9jYXRlX2ZpbGUoKTsNCiAgICAgICAg
 ICBfTV9maWxlLT5vcGVuKF9fcywgX19tb2RlKTsNCiAgICAgICAgICBpZiAo
 dGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
 ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCiAgICAgICAgICAg
 ICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQogICAgICAgICAgICAg
 IF9NX21vZGUgPSBfX21vZGU7DQoNCg0KICAgICAgICAgICAgICBfTV9zZXRf
 aW5kZXRlcm1pbmF0ZSgpOw0KICAgICAgICAgICAgICBpZiAoX19tb2RlICYg
 aW9zX2Jhc2U6OmF0ZQ0KICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+c2Vl
 a29mZigwLCBpb3NfYmFzZTo6ZW5kLCBfX21vZGUpIDwgMCkNCiAgICAgICAg
 ICAgICAgICB0aGlzLT5jbG9zZSgpOw0KICAgICAgICAgICAgICBfX3JldCA9
 IHRoaXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
 biBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
 LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU
 LCBfVHJhaXRzPjo6X19maWxlYnVmX3R5cGUqDQogICAgYmFzaWNfZmlsZWJ1
 ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBjbG9zZSgpDQogICAgew0KICAg
 ICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOw0KICAgICAgaWYg
 KHRoaXMtPmlzX29wZW4oKSkNCiAgICAgICAgew0KICAgICAgICAgIGJvb2wg
 X190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0
 X2VuZDsNCiAgICAgICAgICBpZiAoX190ZXN0cHV0KQ0KICAgICAgICAgICAg
 X01fcmVhbGx5X292ZXJmbG93KHRyYWl0c190eXBlOjplb2YoKSk7DQoNCg0K
 ICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCiMgMTkyICIvaG9tZS9t
 ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mc3RyZWFtLnRjYyIg
 Mw0KICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7
 DQogICAgICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0K
 ICAgICAgICAgIGlmIChfTV9wYmFjaykNCiAgICAgICAgICAgIHsNCiAgICAg
 ICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNrOw0KICAgICAgICAgICAgICBf
 TV9wYmFjayA9IF9fbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBf
 X3JldCA9IHRoaXM7DQogICAgICAgIH0NCg0KDQoNCiAgICAgIGlmIChfTV9m
 aWxlKQ0KICAgICAgICB7DQogICAgICAgICAgZGVsZXRlIF9NX2ZpbGU7DQog
 ICAgICAgICAgX01fZmlsZSA9IF9fbnVsbDsNCiAgICAgICAgfQ0KICAgICAg
 X01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1cm4gX19y
 ZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
 ZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXplDQogICAgYmFzaWNfZmls
 ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzaG93bWFueWMoKQ0KICAg
 IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAtMTsNCiAgICAgIGJvb2wg
 X190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KDQogICAgICBp
 ZiAoX190ZXN0aW4pDQogICAgICAgIHsNCiAgICAgICAgICBib29sIF9fdGVz
 dGVvZiA9IGZhbHNlOw0KICAgICAgICAgIGlmIChfTV9pbl9jdXIgPj0gX01f
 aW5fZW5kKQ0KICAgICAgICAgICAgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJm
 bG93KCkgPT0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgIGlmICgh
 X190ZXN0ZW9mKQ0KICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBf
 TV9pbl9jdXI7DQogICAgICAgIH0NCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dl
 ZCA9IGZhbHNlOw0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0
 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
 ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0K
 ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdW5k
 ZXJmbG93KCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0
 c190eXBlOjplb2YoKTsNCiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2Rl
 ICYgaW9zX2Jhc2U6OmluOw0KICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9t
 b2RlICYgaW9zX2Jhc2U6Om91dDsNCg0KDQogICAgICBpZiAoX190ZXN0aW4p
 DQogICAgICAgIHsNCg0KDQoNCiAgICAgICAgICBpZiAoX01fcGJhY2tfaW5p
 dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fcGJhY2tfZGVz
 dHJveSgpOw0KICAgICAgICAgICAgICBpZiAoX01faW5fY3VyIDwgX01faW5f
 ZW5kKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6dG9f
 aW50X3R5cGUoKl9NX2luX2N1cik7DQogICAgICAgICAgICB9DQoNCiAgICAg
 ICAgICBib29sIF9fdGVzdGdldCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcg
 PCBfTV9pbl9jdXI7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rpbml0ID0gX01f
 aXNfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBpZiAoX190ZXN0
 Z2V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX190ZXN0
 b3V0KQ0KICAgICAgICAgICAgICAgIF9NX3JlYWxseV9vdmVyZmxvdygpOw0K
 DQogICAgICAgICAgICAgIGVsc2UgaWYgKChfTV9pbl9jdXIgLSBfTV9pbl9i
 ZWcpID09IDEpDQogICAgICAgICAgICAgICAgX01fZmlsZS0+c3lzX2dldGMo
 KTsNCg0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX01f
 ZmlsZS0+c2Vla29mZihfTV9pbl9jdXIgLSBfTV9pbl9iZWcsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Y3VyLCBpb3Nf
 YmFzZTo6aW4pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgaWYgKF9f
 dGVzdGluaXQgfHwgX190ZXN0Z2V0KQ0KICAgICAgICAgICAgew0KDQogICAg
 ICAgICAgICAgIHN0cmVhbXNpemUgX19zaXplID0gX01fZmlsZS0+eHNnZXRu
 KF9NX2luX2JlZywgX01fYnVmX3NpemUpOw0KICAgICAgICAgICAgICBpZiAo
 MCA8IF9fc2l6ZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
 ICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUoX19zaXplKTsNCiAgICAgICAgICAg
 ICAgICAgIGlmIChfX3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgICAgIF9N
 X291dF9jdXIgPSBfTV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBfX3Jl
 dCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCg0K
 ICAgICAgICAgICAgICAgICAgaWYgKF9fc2l6ZSA9PSAxKQ0KICAgICAgICAg
 ICAgICAgICAgICBfTV9maWxlLT5zeXNfdW5nZXRjKCpfTV9pbl9jdXIpOw0K
 ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7
 DQoNCiAgICAgICAgICAgICAgICAgIHN0cmVhbW9mZiBfX3AgPSBfTV9maWxl
 LT5zZWVrb2ZmKDAgLSBfX3NpemUsIGlvc19iYXNlOjpjdXIsDQogICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
 b3NfYmFzZTo6aW4pOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSAt
 MSkNCiAgICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAg
 ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg
 ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIF9NX2xh
 c3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOw0KICAgICAgcmV0dXJuIF9fcmV0Ow0K
 ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
 IF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
 OjppbnRfdHlwZQ0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
 Pjo6DQogICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkNCiAgICB7DQogICAg
 ICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAg
 IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KDQog
 ICAgICBpZiAoX190ZXN0aW4pDQogICAgICAgIHsNCiAgICAgICAgICBib29s
 IF9fdGVzdHBiID0gX01faW5fYmVnIDwgX01faW5fY3VyOw0KICAgICAgICAg
 IGNoYXJfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f
 aSk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6
 ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7DQoNCiAgICAgICAgICBpZiAoX190
 ZXN0cGIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGJvb2wgX190
 ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAgICAgICAg
 ICAgIGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz
 LT5ncHRyKClbLTFdKTsNCg0KDQoNCiAgICAgICAgICAgICAgaWYgKCFfX3Rl
 c3Rlb2YgJiYgX190ZXN0ZXEpDQogICAgICAgICAgICAgICAgew0KICAgICAg
 ICAgICAgICAgICAgLS1fTV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBp
 ZiAoX190ZXN0b3V0KQ0KICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9j
 dXI7DQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsNCiAgICAgICAg
 ICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikN
 CiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAtLV9NX2lu
 X2N1cjsNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpDQogICAg
 ICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsNCiAgICAgICAgICAgICAg
 ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsNCiAgICAg
 ICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rl
 b2YpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgLS1f
 TV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQ0K
 ICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7DQogICAgICAgICAg
 ICAgICAgICBfTV9wYmFja19jcmVhdGUoKTsNCiAgICAgICAgICAgICAgICAg
 ICpfTV9pbl9jdXIgPSBfX2M7DQogICAgICAgICAgICAgICAgICBfX3JldCA9
 IF9faTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg
 ICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAg
 dGhpcy0+c2Vla29mZigtMSwgaW9zX2Jhc2U6OmN1cik7DQogICAgICAgICAg
 ICAgIHRoaXMtPnVuZGVyZmxvdygpOw0KICAgICAgICAgICAgICBpZiAoIV9f
 dGVzdGVvZikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
 ICBpZiAoIXRyYWl0c190eXBlOjplcShfX2MsICpfTV9pbl9jdXIpKQ0KICAg
 ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgX01f
 cGJhY2tfY3JlYXRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgKl9NX2lu
 X2N1ciA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg
 ICAgICAgICAgX19yZXQgPSBfX2k7DQogICAgICAgICAgICAgICAgfQ0KICAg
 ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX19yZXQgPSB0cmFp
 dHNfdHlwZTo6bm90X2VvZihfX2kpOw0KICAgICAgICAgICAgfQ0KICAgICAg
 ICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsNCiAgICAg
 IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
 X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8
 X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19maWxlYnVm
 PF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG92ZXJmbG93KGludF90eXBlIF9f
 YykNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl
 Ojplb2YoKTsNCiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAm
 JiBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7DQogICAgICBi
 b29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KDQog
 ICAgICBpZiAoX190ZXN0b3V0KQ0KICAgICAgICB7DQogICAgICAgICAgaWYg
 KF9fdGVzdHB1dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9N
 X291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQog
 ICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsNCiAgICAgICAgICAg
 ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOw0KICAgICAg
 ICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fcmV0ID0g
 dGhpcy0+X01fcmVhbGx5X292ZXJmbG93KF9fYyk7DQogICAgICAgIH0NCg0K
 ICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1
 cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
 VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
 VCwgX1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hh
 clQsIF9UcmFpdHM+OjoNCiAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5
 cGUgX19jKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRz
 X3R5cGU6OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRf
 Y3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOw0KICAgICAgYm9vbCBf
 X3Rlc3R1bmJ1ZmZlcmVkID0gX01fZmlsZSAmJiAhX01fYnVmX3NpemU7DQoN
 CiAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX190ZXN0dW5idWZmZXJlZCkNCiAg
 ICAgICAgew0KDQogICAgICAgICAgaW50IF9fcGxlbiA9IF9NX291dF9lbmQg
 LSBfTV9vdXRfYmVnOw0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAw
 Ow0KDQogICAgICAgICAgaWYgKF9fcGxlbikNCiAgICAgICAgICAgIF9fbGVu
 ID0gX01fZmlsZS0+eHNwdXRuKF9NX291dF9iZWcsIF9fcGxlbik7DQoNCiAg
 ICAgICAgICBpZiAoX19jICE9dHJhaXRzX3R5cGU6OmVvZigpKQ0KICAgICAg
 ICAgICAgew0KICAgICAgICAgICAgICBjaGFyX3R5cGUgX19wZW5kaW5nID0g
 dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOw0KICAgICAgICAgICAg
 ICBfX2xlbiArPSBfTV9maWxlLT54c3B1dG4oJl9fcGVuZGluZywgMSk7DQog
 ICAgICAgICAgICAgICsrX19wbGVuOw0KICAgICAgICAgICAgfQ0KDQoNCg0K
 ICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsNCiAgICAgICAgICBpZiAoX19s
 ZW4gPT0gX19wbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf
 TV9zZXRfaW5kZXRlcm1pbmF0ZSgpOw0KICAgICAgICAgICAgICBfX3JldCA9
 IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7DQogICAgICAgICAgICB9DQoj
 IDQ3MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 ZnN0cmVhbS50Y2MiIDMNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVy
 Zmxvd2VkID0gdHJ1ZTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoN
 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
 Pg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJl
 YW1idWZfdHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
 X24pDQogICAgew0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19z
 ID09IDAgJiYgX19uID09IDApDQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9
 IDA7DQogICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQ0KICAgICAgICB7DQoN
 Cg0KDQoNCg0KICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVy
 KCk7DQoNCg0KICAgICAgICAgIF9NX2J1ZiA9IF9fczsNCiAgICAgICAgICBf
 TV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsNCiAgICAgICAg
 ICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBfTV9h
 bGxvY2F0ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAgfQ0KICAgICAgX01f
 bGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1cm4gdGhpczsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
 Pjo6cG9zX3R5cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
 cz46Og0KICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz
 ZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAg
 IHsNCiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUo
 LTEpKTsNCiAgICAgIGJvb2wgX190ZXN0b3BlbiA9IHRoaXMtPmlzX29wZW4o
 KTsNCiAgICAgIGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBpb3NfYmFzZTo6
 aW4gJiYgX01fbW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAgIGJvb2wgX190
 ZXN0b3V0ID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dCAmJiBfTV9tb2RlICYg
 aW9zX2Jhc2U6Om91dDsNCg0KDQogICAgICBpbnQgX193aWR0aCA9IHVzZV9m
 YWNldDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2Rpbmco
 KTsNCiAgICAgIGlmIChfX3dpZHRoIDwgMCkNCiAgICAgICAgX193aWR0aCA9
 IDA7DQogICAgICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9f
 d2lkdGggPD0gMDsNCg0KICAgICAgaWYgKF9fdGVzdG9wZW4gJiYgIV9fdGVz
 dGZhaWwgJiYgKF9fdGVzdGluIHx8IF9fdGVzdG91dCkpDQogICAgICAgIHsN
 Cg0KICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCg0KICAgICAgICAg
 IGlmIChfX3dheSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2ZmICE9IDApDQog
 ICAgICAgICAgICB7DQogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29tcHV0
 ZWRfb2ZmID0gX193aWR0aCAqIF9fb2ZmOw0KDQogICAgICAgICAgICAgIGJv
 b2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2lu
 X2VuZDsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRf
 Y3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOw0KDQoNCiAgICAgICAg
 ICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpDQog
 ICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICB0aGlzLT5z
 eW5jKCk7DQoNCiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0
 KCk7DQogICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgZWxz
 ZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpDQog
 ICAgICAgICAgICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0g
 X01faW5fYmVnOw0KDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+
 c2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7DQogICAg
 ICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAg
 ICB9DQoNCg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAg
 ICAgICAgICAgX19yZXQgPSBfTV9maWxlLT5zZWVrb2ZmKF9fb2ZmLCBpb3Nf
 YmFzZTo6Y3VyLCBfX21vZGUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBt
 YXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2J1ZjsNCiAgICAgICAg
 ICAgIH0NCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g
 ZmFsc2U7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBs
 YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi
 YXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAg
 YmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzZWVrcG9z
 KHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0K
 ICAgIHsNCiAgICAgIHBvc190eXBlIF9fcmV0Ow0KICAgICAgb2ZmX3R5cGUg
 X19vZmYgPSBfX3BvczsNCg0KICAgICAgX19yZXQgPSB0aGlzLT5zZWVrb2Zm
 KF9fb2ZmLCBpb3NfYmFzZTo6YmVnLCBfX21vZGUpOw0KDQogICAgICBfTV9s
 YXN0X292ZXJmbG93ZWQgPSBmYWxzZTsNCiAgICAgIHJldHVybiBfX3JldDsN
 CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
 ZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
 VCwgX1RyYWl0cz46Og0KICAgIF9NX291dHB1dF91bnNoaWZ0KCkNCiAgICB7
 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
 cmFpdHM+DQogICAgdm9pZA0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf
 VHJhaXRzPjo6DQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAg
 ICB7DQogICAgICBib29sIF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygp
 ICYmIHBwdHIoKSA9PSBwYmFzZSgpOw0KDQogICAgICBpZiAoX190ZXN0YmVn
 ICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpDQogICAgICAgIHsNCiAgICAg
 ICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7DQogICAgICAgICAgX01fYnVm
 X2xvY2FsZV9pbml0ID0gdHJ1ZTsNCiAgICAgICAgfQ0KDQoNCg0KDQoNCiAg
 ICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOw0KICAgIH0NCg0KfQ0K
 IyA0MjEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
 L3N0ZF9mc3RyZWFtLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4u
 L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2ZzdHJlYW0uaCIgMiAzDQoNCnVz
 aW5nIHN0ZDo6ZmlsZWJ1ZjsNCnVzaW5nIHN0ZDo6aWZzdHJlYW07DQp1c2lu
 ZyBzdGQ6Om9mc3RyZWFtOw0KdXNpbmcgc3RkOjpmc3RyZWFtOw0KdXNpbmcg
 c3RkOjpzdHJlYW1wb3M7DQojIDIzICJidWZmZXIuY2MiIDINCg0KIyAxICIv
 aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEg
 Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2lv
 c3RyZWFtIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
 Ky12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21k
 ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5o
 IiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
 L3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0K
 IyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
 c3RkX2lvc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
 aW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgNDEg
 Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
 b3N0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
 ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMSAzDQojIDQyICIvaG9t
 ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl
 YW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgZXh0ZXJuIGlzdHJl
 YW0gY2luOw0KICBleHRlcm4gb3N0cmVhbSBjb3V0Ow0KICBleHRlcm4gb3N0
 cmVhbSBjZXJyOw0KICBleHRlcm4gb3N0cmVhbSBjbG9nOw0KIyA1NyAiL2hv
 bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3Ry
 ZWFtLmgiIDMNCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Ow0K
 fQ0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2lv
 c3RyZWFtIiAyIDMNCiMgMjUgImJ1ZmZlci5jYyIgMg0KDQojIDEgImNvbW1v
 bi5oIiAxDQoNCg0KDQpleHRlcm4gaW50IGN1cnJlbnRMaW5lTnVtYmVyOw0K
 ZXh0ZXJuIGludCBjdXJyZW50TmVzdGluZ0xldmVsOw0KIyAyNyAiYnVmZmVy
 LmNjIiAyDQojIDEgIm1pc2MuaCIgMQ0KIyAyOCAiYnVmZmVyLmNjIiAyDQoj
 IDEgImVycm9yLmgiIDENCg0KDQoNCmV4dGVybiBpbnQgZXJyb3JDb3VudDsN
 Cg0KDQoNCg0KDQoNCmVudW0gVEFib3J0Q29kZSB7DQogICAgYWJvcnRJbnZh
 bGlkQ29tbWFuZExpbmVBcmdzID0gLTEsDQogICAgYWJvcnRTb3VyY2VGaWxl
 T3BlbkZhaWxlZCA9IC0yLA0KICAgIGFib3J0SUZvcm1GaWxlT3BlbkZhaWxl
 ZCA9IC0zLA0KICAgIGFib3J0QXNzZW1ibHlGaWxlT3BlbkZhaWxlZCA9IC00
 LA0KICAgIGFib3J0VG9vTWFueVN5bnRheEVycm9ycyA9IC01LA0KICAgIGFi
 b3J0U3RhY2tPdmVyZmxvdyA9IC02LA0KICAgIGFib3J0Q29kZVNlZ21lbnRP
 dmVyZmxvdyA9IC03LA0KICAgIGFib3J0TmVzdGluZ1Rvb0RlZXAgPSAtOCwN
 CiAgICBhYm9ydFJ1bnRpbWVFcnJvciA9IC05LA0KICAgIGFib3J0VW5pbXBs
 ZW1lbnRlZEZlYXR1cmUgPSAtMTANCn0gOw0KDQp2b2lkIEFib3J0VHJhbnNs
 YXRpb24oVEFib3J0Q29kZSBhYyk7DQojIDI5ICJidWZmZXIuY2MiIDINCiMg
 MSAiYnVmZmVyLmgiIDENCiMgMTAgImJ1ZmZlci5oIg0KZXh0ZXJuIGNoYXIg
 ZW9mQ2hhcjsNCmV4dGVybiBpbnQgaW5wdXRQb3NpdGlvbjsNCmV4dGVybiBp
 bnQgbGlzdEZsYWc7DQpleHRlcm4gaW50IGxldmVsOw0KDQpjb25zdCBpbnQg
 bWF4SW5wdXRCdWZmZXJTaXplID0gMjU2Ow0KDQoNCg0KDQoNCmNsYXNzIFRU
 ZXh0SW5CdWZmZXIgew0KDQpwcm90ZWN0ZWQ6DQogICAgZnN0cmVhbSBmaWxl
 Ow0KICAgIGNoYXIgKmNvbnN0IHBGaWxlTmFtZTsNCiAgICBjaGFyIHRleHRb
 bWF4SW5wdXRCdWZmZXJTaXplXTsNCiAgICBjaGFyICpwQ2hhcjsNCg0KDQog
 ICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCkgPSAwOw0KDQpwdWJsaWM6
 DQogICAgVFRleHRJbkJ1ZmZlcihjb25zdCBjaGFyICpwSW5wdXRGaWxlTmFt
 ZSwgVEFib3J0Q29kZSBhYyk7DQoNCiAgICB2aXJ0dWFsIH5UVGV4dEluQnVm
 ZmVyKHZvaWQpDQogICAgew0KICAgICAgICBmaWxlLmNsb3NlKCk7DQogICAg
 ICAgIGRlbGV0ZSBwRmlsZU5hbWU7DQogICAgfQ0KDQogICAgY2hhciBDaGFy
 ICh2b2lkKSBjb25zdCB7IHJldHVybiAqcENoYXI7IH0NCiAgICBjaGFyIEdl
 dENoYXIgKHZvaWQpOw0KICAgIGNoYXIgUHV0QmFja0NoYXIodm9pZCk7DQp9
 Ow0KDQoNCg0KDQoNCmNsYXNzIFRTb3VyY2VCdWZmZXIgOiBwdWJsaWMgVFRl
 eHRJbkJ1ZmZlciB7DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCk7
 DQoNCnB1YmxpYzoNCiAgICBUU291cmNlQnVmZmVyKGNvbnN0IGNoYXIgKnBT
 b3VyY2VGaWxlTmFtZSk7DQp9Ow0KIyA2NyAiYnVmZmVyLmgiDQpjbGFzcyBU
 VGV4dE91dEJ1ZmZlciB7DQoNCnB1YmxpYzoNCiAgICBjaGFyIHRleHRbbWF4
 SW5wdXRCdWZmZXJTaXplICsgMTZdOw0KDQogICAgdmlydHVhbCB2b2lkIFB1
 dExpbmUodm9pZCkgPSAwOw0KDQogICAgdm9pZCBQdXRMaW5lKGNvbnN0IGNo
 YXIgKnBUZXh0KQ0KICAgIHsNCiAgICAgICAgc3RyY3B5KHRleHQsIHBUZXh0
 KTsNCiAgICAgICAgUHV0TGluZSgpOw0KICAgIH0NCn07DQoNCg0KDQoNCg0K
 Y2xhc3MgVExpc3RCdWZmZXIgOiBwdWJsaWMgVFRleHRPdXRCdWZmZXIgew0K
 ICAgIGNoYXIgKnBTb3VyY2VGaWxlTmFtZTsNCiAgICBjaGFyIGRhdGVbMjZd
 Ow0KICAgIGludCBwYWdlTnVtYmVyOw0KICAgIGludCBsaW5lQ291bnQ7DQoN
 CiAgICB2b2lkIFByaW50UGFnZUhlYWRlcih2b2lkKTsNCg0KcHVibGljOg0K
 ICAgIHZpcnR1YWwgflRMaXN0QnVmZmVyKHZvaWQpIHsgZGVsZXRlIHBTb3Vy
 Y2VGaWxlTmFtZTsgfQ0KDQogICAgdm9pZCBJbml0aWFsaXplKGNvbnN0IGNo
 YXIgKmZpbGVOYW1lKTsNCiAgICB2aXJ0dWFsIHZvaWQgUHV0TGluZSh2b2lk
 KTsNCg0KICAgIHZvaWQgUHV0TGluZShjb25zdCBjaGFyICpwVGV4dCkNCiAg
 ICB7DQogICAgICAgIFRUZXh0T3V0QnVmZmVyOjpQdXRMaW5lKHBUZXh0KTsN
 CiAgICB9DQoNCiAgICB2b2lkIFB1dExpbmUoY29uc3QgY2hhciAqcFRleHQs
 IGludCBsaW5lTnVtYmVyLCBpbnQgbmVzdGluZ0xldmVsKQ0KICAgIHsNCiAg
 ICAgICAgc3ByaW50Zih0ZXh0LCAiJTRkICVkOiAlcyIsIGxpbmVOdW1iZXIs
 IG5lc3RpbmdMZXZlbCwgcFRleHQpOw0KICAgICAgICBQdXRMaW5lKCk7DQog
 ICAgfQ0KfTsNCg0KZXh0ZXJuIFRMaXN0QnVmZmVyIGxpc3Q7DQojIDMwICJi
 dWZmZXIuY2MiIDINCg0KdXNpbmcgbmFtZXNwYWNlIHN0ZCA7DQoNCg0KDQoN
 Cg0KDQoNCmNoYXIgZW9mQ2hhciA9IDB4N0Y7DQppbnQgaW5wdXRQb3NpdGlv
 bjsNCg0KaW50IGxpc3RGbGFnID0gMTs7DQojIDUyICJidWZmZXIuY2MiDQpU
 VGV4dEluQnVmZmVyOjpUVGV4dEluQnVmZmVyKGNvbnN0IGNoYXIgKnBJbnB1
 dEZpbGVOYW1lLCBUQWJvcnRDb2RlIGFjKQ0KICAgIDogcEZpbGVOYW1lKG5l
 dyBjaGFyW3N0cmxlbihwSW5wdXRGaWxlTmFtZSkgKyAxXSkNCnsNCg0KICAg
 IHN0cmNweShwRmlsZU5hbWUsIHBJbnB1dEZpbGVOYW1lKTsNCg0KDQoNCiAg
 ICBmaWxlLm9wZW4ocEZpbGVOYW1lLCBpb3M6OmluKTsNCiAgICBpZiAoIWZp
 bGUuZ29vZCgpKSBBYm9ydFRyYW5zbGF0aW9uKGFjKTsNCn0NCiMgNzQgImJ1
 ZmZlci5jYyINCmNoYXIgVFRleHRJbkJ1ZmZlcjo6R2V0Q2hhcih2b2lkKQ0K
 ew0KICAgIGNvbnN0IGludCB0YWJTaXplID0gODsNCiAgICBjaGFyIGNoOw0K
 DQogICAgaWYgKCpwQ2hhciA9PSBlb2ZDaGFyKSByZXR1cm4gZW9mQ2hhcjsN
 CiAgICBlbHNlIGlmICgqcENoYXIgPT0gJ1wwJykgY2ggPSBHZXRMaW5lKCk7
 DQogICAgZWxzZSB7DQogICAgICAgICsrcENoYXI7DQogICAgICAgICsraW5w
 dXRQb3NpdGlvbjsNCiAgICAgICAgY2ggPSAqcENoYXI7DQogICAgfQ0KDQoN
 Cg0KICAgIGlmIChjaCA9PSAnXHQnKSBpbnB1dFBvc2l0aW9uICs9IHRhYlNp
 emUgLSBpbnB1dFBvc2l0aW9uJXRhYlNpemU7DQoNCiAgICByZXR1cm4gY2g7
 DQp9DQojIDEwMyAiYnVmZmVyLmNjIg0KY2hhciBUVGV4dEluQnVmZmVyOjpQ
 dXRCYWNrQ2hhcih2b2lkKQ0Kew0KICAgIC0tcENoYXI7DQogICAgLS1pbnB1
 dFBvc2l0aW9uOw0KDQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCiMgMTI1ICJi
 dWZmZXIuY2MiDQpUU291cmNlQnVmZmVyOjpUU291cmNlQnVmZmVyKGNvbnN0
 IGNoYXIgKnBTb3VyY2VGaWxlTmFtZSkNCiAgICA6IFRUZXh0SW5CdWZmZXIo
 cFNvdXJjZUZpbGVOYW1lLCBhYm9ydFNvdXJjZUZpbGVPcGVuRmFpbGVkKQ0K
 ew0KDQogICAgaWYgKGxpc3RGbGFnKSBsaXN0LkluaXRpYWxpemUocFNvdXJj
 ZUZpbGVOYW1lKTsNCiAgICBHZXRMaW5lKCk7DQp9DQojIDE0MiAiYnVmZmVy
 LmNjIg0KY2hhciBUU291cmNlQnVmZmVyOjpHZXRMaW5lKHZvaWQpDQp7DQog
 ICAgZXh0ZXJuIGludCBsaW5lTnVtYmVyLCBjdXJyZW50TmVzdGluZ0xldmVs
 Ow0KDQoNCiAgICBpZiAoZmlsZS5lb2YoKSkgcENoYXIgPSAmZW9mQ2hhcjsN
 Cg0KDQogICAgZWxzZSB7DQogICAgICAgIGZpbGUuZ2V0bGluZSh0ZXh0LCBt
 YXhJbnB1dEJ1ZmZlclNpemUpOw0KICAgICAgICBwQ2hhciA9IHRleHQ7DQoN
 CiAgICAgICAgaWYgKGxpc3RGbGFnKSBsaXN0LlB1dExpbmUodGV4dCwgKytj
 dXJyZW50TGluZU51bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgY3VycmVudE5lc3RpbmdMZXZlbCk7DQogICAgfQ0KDQogICAg
 aW5wdXRQb3NpdGlvbiA9IDA7DQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCg0K
 DQoNCg0KDQoNCg0KY29uc3QgaW50IG1heFByaW50TGluZUxlbmd0aCA9IDgw
 Ow0KY29uc3QgaW50IG1heExpbmVzUGVyUGFnZSA9IDUwOw0KDQpUTGlzdEJ1
 ZmZlciBsaXN0Ow0KDQoNCg0KDQoNCg0Kdm9pZCBUTGlzdEJ1ZmZlcjo6UHJp
 bnRQYWdlSGVhZGVyKHZvaWQpDQp7DQogICAgY29uc3QgY2hhciBmb3JtRmVl
 ZENoYXIgPSAnXGYnOw0KDQogICAgY291dCA8PCBmb3JtRmVlZENoYXIgPDwg
 IlBhZ2UgIiA8PCArK3BhZ2VOdW1iZXINCiAgICAgICAgIDw8ICIgICAiIDw8
 IHBTb3VyY2VGaWxlTmFtZSA8PCAiICAgIiA8PCBkYXRlDQogICAgICAgICA8
 PCBlbmRsIDw8IGVuZGw7DQoNCiAgICBsaW5lQ291bnQgPSAwOw0KfQ0KIyAx
 OTcgImJ1ZmZlci5jYyINCnZvaWQgVExpc3RCdWZmZXI6OkluaXRpYWxpemUo
 Y29uc3QgY2hhciAqcEZpbGVOYW1lKQ0Kew0KICAgIHRleHRbMF0gPSAnXDAn
 Ow0KICAgIHBhZ2VOdW1iZXIgPSAwOw0KDQoNCiAgICBwU291cmNlRmlsZU5h
 bWUgPSBuZXcgY2hhcltzdHJsZW4ocEZpbGVOYW1lKSArIDFdOw0KICAgIHN0
 cmNweShwU291cmNlRmlsZU5hbWUsIHBGaWxlTmFtZSk7DQoNCg0KICAgIHRp
 bWVfdCB0aW1lcjsNCiAgICB0aW1lKCZ0aW1lcik7DQogICAgc3RyY3B5KGRh
 dGUsIGFzY3RpbWUobG9jYWx0aW1lKCZ0aW1lcikpKTsNCiAgICBkYXRlW3N0
 cmxlbihkYXRlKSAtIDFdID0gJ1wwJzsNCg0KICAgIFByaW50UGFnZUhlYWRl
 cigpOw0KfQ0KDQoNCg0KDQoNCnZvaWQgVExpc3RCdWZmZXI6OlB1dExpbmUo
 dm9pZCkNCnsNCg0KICAgIGlmIChsaXN0RmxhZyAmJiAobGluZUNvdW50ID09
 IG1heExpbmVzUGVyUGFnZSkpIFByaW50UGFnZUhlYWRlcigpOw0KDQoNCiAg
 ICB0ZXh0W21heFByaW50TGluZUxlbmd0aF0gPSAnXDAnOw0KDQoNCiAgICBj
 b3V0IDw8IHRleHQgPDwgZW5kbDsNCiAgICB0ZXh0WzBdID0gJ1wwJzsNCg0K
 ICAgICsrbGluZUNvdW50Ow0KfQ0K
 ---559023410-758783491-1017137114=:8152--


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-25 10:36 Neil Booth
  0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-25 10:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Mon, 25 Mar 2002 18:26:25 +0000

 Mario Deilmann wrote:-
 
 > You never should say there are no bug in a specific software ;).
 
 I'm quite sure there are no bugs in this part of CPP.  People use it in
 millions of situations every day.
  
 > > You should investigate what the issue is.  Have you created preprocessed
 > > source and examined it?  Have you created preprocessed source with a
 > > compiler that works and examined it?  I bet there's a difference, and we
 > > need to know what is causing it.
 > 
 > I did some investigations. Before I send you the bug report I tested the
 > problem with various compilers on different platforms and what I observed
 > was that the error only occured with versions of gcc. Then I modified the
 > source only by changing the include sequence and after this all gcc
 > versions had no problem any more. I want to tell the gcc people about this
 > so I send the bug report. I have of course limited time to investigate
 > on a problem where I have a workaround for and the different include
 > sequences I generated with your help don't tell anything to me and I
 > definetly don't have the time to look in the cpp source code. Sorry !
 
 I'm not asking you to look into the cpp source code.  I'm asking you
 for *preprocessed source*.  You haven't sent it.  It's the output of -E.
  
 > You don't need to replicate my system. With the source code example I send
 > you you could replicate the error on a lot of systems.
 
 I can't, on g++ on Linux I get:
 
 $ g++ -c -Wall buffer.cpp 
 buffer.cpp: In method `char TSourceBuffer::GetLine()':
 buffer.cpp:137: warning: unused variable `int lineNumber'
 $ 
 
 in both directories error/ and no-error/ of your tarball.
 
 > I only tested 4 but
 > I'm sure there are a lot more. The problem occured only with versions of
 > gcc (and to be honest with the Intel Compiler on Linux too) but all other
 > C++ Compiler I used didn't find a problem or even a bug (I tested CC on
 > Solaris, KCC on Linux, pgiCC on Linux, Visual C on Windows, CC on Compaq
 > Alpha and KCC on Solaris) AND when I changed the sequence of the includes
 > the error in the system header disappeared with all gcc versions and with
 > the Intel Compiler. So in my opinion from this investigation it's too easy
 > to say this is a user bug !
 >  
 > > Have you created the preprocessed source?  Can you send it to me?
 > > Can you send me the preprocessed source from a compiler that works?
 > 
 > Sure. See below ....
 
 No, that is not preprocessed source.  You sent me the include trace,
 which was *completely different for the two compilers*.  How can you
 expect to get the same result when the compilers are reading different
 header files?
 
 Neil.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-22 11:36 Neil Booth
  0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-22 11:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Fri, 22 Mar 2002 19:30:02 +0000

 Mario Deilmann wrote:-
 
 > If I include nested heades and system headers and that causes parse errors
 > in the SYSTEM headers of the Compiler this is by no means a user error !
 > So why can you be sure it's not a compiler error ? 
 
 Because it would be a preprocessor bug, and I'm sure there are no bugs
 in this area in CPP.
  
 > The programm seems syntactically correct (it compiles with no errors on
 > different platforms with different compilers).
 
 You should investigate what the issue is.  Have you created preprocessed
 source and examined it?  Have you created preprocessed source with a
 compiler that works and examined it?  I bet there's a difference, and we
 need to know what is causing it.
 
 > Anyhow close this thing, have a nice day ;).
 
 Well, I don't want to close something that is a bug, but you have not
 convinced me it is a bug.  I urge you to find out what exactly is odd
 about the preprocessed source, and *why* it is odd.  Otherwise we'll
 never get anywhere - I can't replicate your system, only you can.
 
 Have you created the preprocessed source?  Can you send it to me?
 Can you send me the preprocessed source from a compiler that works?
 
 Neil.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-22  1:56 Mario Deilmann
  0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-22  1:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Fri, 22 Mar 2002 10:46:04 +0100 (MET)

 Hi Neil,
 
 just received your email:
 
 > Almost certainly not a compiler bug, but user error of some subtle kind
 > (agreed with submitter).
 
 I agreed to close the bug report because I found a workaround but in my
 opinion it's not a "user error" :o. 
 
 >I _am_ sure the compiler is not at fault, so
 
 If I include nested heades and system headers and that causes parse errors
 in the SYSTEM headers of the Compiler this is by no means a user error !
 So why can you be sure it's not a compiler error ? 
 
 The programm seems syntactically correct (it compiles with no errors on
 different platforms with different compilers).
 
 >I'll close the PR.
 
 Anyhow close this thing, have a nice day ;).
 
 Viele Gruesse / Best Regards
 
 -- Mario 
 
 Mario Deilmann
 Senior Sales Engineer
 --------------------------------------------------------------------
 //// pallas 
 Pallas GmbH / Hermuelheimer Str. 10 / 50321 Bruehl / Germany
 Mario.Deilmann@pallas.com / www.pallas.com
 Tel +49-2232-1896-31 / Fax +49-2232-1896-29
 --------------------------------------------------------------------
 
 On Thu, 21 Mar 2002, Neil Booth wrote:
 
 > Mario Deilmann wrote:-
 > 
 > > again thanks for your help. The hint was very helpful to get the right
 > > output but I cannot see why I got an error like
 > > 
 > > /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
 > > parse error before `;' token
 > > 
 > > only because I changed the sequence of some includes. The code with the
 > 
 > OK, thanks.  The error is something subtle with the effects of changing
 > the include order.  Maybe some headers don't have guards and are being
 > included twice.  However, I _am_ sure the compiler is not at fault, so
 > I'll close the PR.
 > 
 > Neil.
 > 
 
 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-21 10:36 Neil Booth
  0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-21 10:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Thu, 21 Mar 2002 18:31:05 +0000

 Mario Deilmann wrote:-
 
 > again thanks for your help. The hint was very helpful to get the right
 > output but I cannot see why I got an error like
 > 
 > /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
 > parse error before `;' token
 > 
 > only because I changed the sequence of some includes. The code with the
 
 OK, thanks.  The error is something subtle with the effects of changing
 the include order.  Maybe some headers don't have guards and are being
 included twice.  However, I _am_ sure the compiler is not at fault, so
 I'll close the PR.
 
 Neil.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-21 10:32 neil
  0 siblings, 0 replies; 11+ messages in thread
From: neil @ 2002-03-21 10:32 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, mdeil, nobody

Synopsis: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0

State-Changed-From-To: open->closed
State-Changed-By: neil
State-Changed-When: Thu Mar 21 10:32:41 2002
State-Changed-Why:
    Almost certainly not a compiler bug, but user error of some subtle kind (agreed with submitter).

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6001


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-20 10:16 Neil Booth
  0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-20 10:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Wed, 20 Mar 2002 18:13:01 +0000

 Mario Deilmann wrote:-
 
 > I tried gcc -E -H on both files and there are a LOT of differences (about
 > 1200). I have looked into the differences and most of them obviously are
 > caused by the different include sequence. 
 > 
 > I have no idea where I should look for the important differences ? Any
 > idea ?
 
 Try
 
 gcc <options> file.c -E -H > /dev/null
 
 which just lists the header trail.  Then have a look at the first header
 where they diverge, and figure out why.  It's either because your path
 is different, or a command line or builtin macro is different.  I can't
 help you any more than that I'm afraid.
 
 Neil.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-20  1:46 Mario Deilmann
  0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-20  1:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Wed, 20 Mar 2002 10:41:11 +0100 (MET)

 Dear Neil,
 
 thanks for your fast response.
 
 I tried gcc -E -H on both files and there are a LOT of differences (about
 1200). I have looked into the differences and most of them obviously are
 caused by the different include sequence. 
 
 I have no idea where I should look for the important differences ? Any
 idea ?
 
 I have included the differences files ddiff:
 
 The 1st error was:  
 
 /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:
 In constructor `std::__basic_file<_CharT>::__basic_file(std::__c_lock*)':
 /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
 parse error before `;' token
 
 poohmak1/orig> grep -i -n "basic_file_model" ddiff
 2085:>  .....
 /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h
 2088:<       __bas....
 /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h
 
 Mmh, what does this tell me ?
 
 Viele Gruesse / Best Regards
 
 -- Mario 
 
 Mario Deilmann
 Senior Sales Engineer
 --------------------------------------------------------------------
 //// pallas 
 Pallas GmbH / Hermuelheimer Str. 10 / 50321 Bruehl / Germany
 Mario.Deilmann@pallas.com / www.pallas.com
 Tel +49-2232-1896-31 / Fax +49-2232-1896-29
 --------------------------------------------------------------------
 
 On Tue, 19 Mar 2002, Neil Booth wrote:
 
 > mdeil@pallas.de wrote:-
 > 
 > > I found some strange behaviour with some of the g++ versions greater than 2.91 on different platforms with a small C++ code (included)
 > > I investigated a little more and found out that in my opinion the program was badly coded. The header files included each others and also some of the system headers. So I cleaned up all headers so that there are no more
 > > includes in the header files. Collected the used system and program header's and added the std namespace. Wow, what a suprise now all gcc versions include 3.0 accepts the code. 
 > > 
 > > Can you give me some insight's what makes this program so PRBLEMATIC are this ANSI/ISO feature problems ? All compilers that produce errors find them in their own include files which confuses me. I thought that the problems should be located in the original source code. 
 > 
 > We cannot debug this easily for you.  However, you can probably get a deeper
 > understanding of what is happening with the -H option.  Please compare
 > the output of gcc -E -H yourfile.c between the two compilers, and see
 > where they diverge.  It generates an include stack trace.
 > 
 > Let us know if we can close this PR.
 > 
 > Neil.
 > 
 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-19 11:56 Neil Booth
  0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-19 11:56 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/6001; it has been noted by GNATS.

From: Neil Booth <neil@daikokuya.demon.co.uk>
To: mdeil@pallas.de
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Tue, 19 Mar 2002 19:48:40 +0000

 mdeil@pallas.de wrote:-
 
 > I found some strange behaviour with some of the g++ versions greater than 2.91 on different platforms with a small C++ code (included)
 > I investigated a little more and found out that in my opinion the program was badly coded. The header files included each others and also some of the system headers. So I cleaned up all headers so that there are no more
 > includes in the header files. Collected the used system and program header's and added the std namespace. Wow, what a suprise now all gcc versions include 3.0 accepts the code. 
 > 
 > Can you give me some insight's what makes this program so PRBLEMATIC are this ANSI/ISO feature problems ? All compilers that produce errors find them in their own include files which confuses me. I thought that the problems should be located in the original source code. 
 
 We cannot debug this easily for you.  However, you can probably get a deeper
 understanding of what is happening with the -H option.  Please compare
 the output of gcc -E -H yourfile.c between the two compilers, and see
 where they diverge.  It generates an include stack trace.
 
 Let us know if we can close this PR.
 
 Neil.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-19  7:16 mdeil
  0 siblings, 0 replies; 11+ messages in thread
From: mdeil @ 2002-03-19  7:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6001
>Category:       c++
>Synopsis:       g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Mar 19 07:16:02 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Mario Deilmann
>Release:        gcc version 3.0 and other ...
>Organization:
>Environment:
SunOS pooh 5.7 Generic_106541-19 sun4u sparc SUNW,Ultra-4
>Description:
Hi,

I found some strange behaviour with some of the g++ versions greater than 2.91 on different platforms with a small C++ code (included)
I investigated a little more and found out that in my opinion the program was badly coded. The header files included each others and also some of the system headers. So I cleaned up all headers so that there are no more
includes in the header files. Collected the used system and program header's and added the std namespace. Wow, what a suprise now all gcc versions include 3.0 accepts the code. 

Can you give me some insight's what makes this program so PRBLEMATIC are this ANSI/ISO feature problems ? All compilers that produce errors find them in their own include files which confuses me. I thought that the problems should be located in the original source code. 
 
GCC 3.0 on Solaris for example:
 
poohtmp/mak> g++ -Wall -c buffer.cpp
In file included from
/home/mdeil/bin/../include/g++-v3/bits/basic_file.h:250,
                 from
/home/mdeil/bin/../include/g++-v3/bits/std_fstream.h:41,
                 from
/home/mdeil/bin/../include/g++-v3/backward/fstream.h:32,
                 from buffer.h:4,
                 from buffer.cpp:25:
 /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:
In constructor 
`std::__basic_file<_CharT>::__basic_file(std::__c_lock*)':
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
parse error before `;' token .............
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Here my modification to get the code compile:

buffer.cpp NOW includes:

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>

#include <iostream>

#include "common.h"
#include "misc.h"
#include "error.h"
#include "buffer.h"

using namespace std ;

What was the problem ? Why are the original include lines wrong ???

buffer.cpp ORIGINAL includes:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <time.h>

#include "common.h" 
 ---> #include misc.h (no more includes)
#include "buffer.h"
 ---> #include <fstream.h>
 ---> #include <stdio.h>
 ---> #include <string.h>
 ---> #include "misc.h" (no more includes)
 ---> #include "error.h" (no more includes)

Although I seem to have solved the problem I don't understand it ???????
>How-To-Repeat:
simply type
g++ -Wall -ansi buffer.cpp or buffer.cc
>Fix:
Don't use nested header files - but I don't know why :).
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-gzip; name="gcc-bug.tar.gz"; name="gcc-bug.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gcc-bug.tar.gz"

H4sICD1SlzwAA2djYy1idWcudGFyAO1cbVPbSBLOV/Qr5kgl2MEY29hmDy9XlWXDHlXsQgX2025q
S8hjUK0sqfRCwuVyv/26e0bSjCS/EITzITOpim2pZ6bVb/P0jJru/i8nJ3s36e3+i2drvd6wdzga
wWdv0Bsc4id8G4pP0V70DofD0XjU7x0gXf+gdzB4MXo+loqWxokdwZTzKXe9JXSh7Xl2vPg+PkV/
QA/ZO+j3GufzmVo31z+PoiB6Fiv4Cv0P++MDo/8NtLL+b9LZjEddJwybm6PX74F6ewv03x8fjseZ
/nuHh3i9P0b9b0SI37n+9/cZe/OUZtEI7OtbMcIZ22cX8PkT+52dwr937D27etQIT+fhMgocHscs
4Z8SdrZ/wWaux+MuMOc7XjrlU2ZHnM35/IZHbJb6TuIGfqyOkAQs4vaUJXecxUEaOZzGYLY/ZR8j
N+FIgTc9N07oVrfxpzg5f3t19e7qiF1fw3Oc+T+RV3cYu74ijsTvZSPkjUa4SJNsiOtzYHtR/2af
4vTs/N0RXiqC0iNHeDoPv178/DtxsfiRn5eHJ/mm9dIVZst+jJOpG3Tv/qVdilz/Vr/mBnCV23P1
WuLOuUa17QTzeeB377aVa1JJcA0ZT2MYmvn2nMehDS4A07MJ3dEfcklQ0eiWiKhEd02e64dpkuvs
CeMtEqxzZ0eMB7MT/DxmvU+HpxOgh/5xyB3X9hj3p3vBbI98H6ltJ+GR5foJYy5ydxnELgYP7Ib9
tu/dKEltb5uF8g4LZhQonDSKOPTDUaytLckaser6REEDSjdhrY9ucscS+yZm/FMIYYdP22JejDin
nn0LDCdRyic0CH5j7kyEIxmwPNfncYdxL4bgZcP/qLm9JzUS7QnESpjPSQLhSflvZstnoLgrH+Tm
gQUh99GQ4CErumFMSlIEUbifk4Sk/1O4/BtYIDtiYRJlYRdtMpNs0T3vajvaBEfMvgkikH0wpcCd
xiQs5AskAx2nT5eMpUXpoyPtZ8tBGZHu2Rv9uSAYv0XmTpA322lbguEwu9/y+Ufq+AcI2eN+S+/e
Zrus/6FtfbaEOe3tnQThQ0kuJK4uUcAgTvjQCovpS+OBf2cjXaB89JFglSNuUXxCcl0rt2NBgVJV
x4dgdHTk+v+lTz9wIDAlOM2qDpIEJmr9g+hug2DaarcFA9eR7ceejR7WAqlNrC8NWfcvPKFwkLVT
njh3tO5HPEkjIRAfDTyPB2wWBfOF1q04AyKQGbMTGgNCS2bB4m6ntnsOQ2hOxbVrBquf/05gl476
ALVxLfe+90R4tOgxVUSkTQkBYeHgDXgYuU/JzaS6WveBO828QDgbBkuIn1fufziEyh9EnIzxF0od
AqugxTGdu0lZakBbPDihQRSJlZkktdabUKwcx9ki0s5kLH+LSaWmSVzYjyIy2nXRf+fP3k5b8APM
wkOdg4Zbba0/Kr3o/7mq6doG/XM1Wlu7uzTlBL/pC5i1RVO/kfex65ciFJyRyAqRgJf64MlzXNG0
cfIADXPmveepl7ihl0keVdLNnRunRQEkIAB9qN3jXIF7+q1X8roMVlLooMbGwsAlgGXb+TsPBZdp
UlnGhXHcABkaW7BifZPrYYx00muFYiAnBanV9syC0UcXaGYUiZI7N1ZclrUufO+htjMODKkOMEbT
I5s22+nutMtujqyEEb93gzR+dodVBKs57d6eYnl7eyXjVNWcmeiXtZDoGqixlkbkWI9Cn2shzw2A
MBme1wdgSjynJBmEbnvodlqG28FVcPkaNXMjIMZAVbtY6PBOSLiK7zJsp68yT7VFLWkGeKb+1OGZ
zlcGyHQ8VyLqCIBZXETodEr4SIVmiyQr4YUmRHWlz2Nlhv3b1LdbjFdmSIKnYiFpEh/hkLnu32v4
ZKHqFxtPGOFK7SaVHRWMSQ7H3Zqbh4WmSxP6Ke3koBTVGA3pT4Jm7/F77lXAjRBzEcclFlPk3pGA
Rpu4FtygcqqwriHLFVFUN99MsWoEBflzCI8oTeT+NxJKJ5PGb0IY5yiLibawVxnX9LYENRaGSd4N
oAfxuQQ17HUGgorZ3iFyWYhoSYELzaGrYB9rS2QEPMF+LYTYHTa3P1EqI2SE8ADMfivjBmlkch8G
hA2DqqcJlGRt1fgarFvnxVy7u1Ks54WkIaunvL5G4G0NUOko55j1Jl+7vK1clGopcPPvEQvbGssa
GGmOuUENl6hDlMw5928ThJU/wDNqJHg3vuTRpX1LseSYjYDEUjcmUexSY3pcEAtbU0APeUUu/g1m
KfcGrxI7woUUU+8QGZR+oQXs2nCETVgwgSrse0fjdhsIBOjs6tYtgCmd+ZosiILHLIjmp5xPpSvs
/DnbkU7pBAANf/xRp4Df26SXbYbfIWeAH8LIrS26Cz238Ut5DVfvTSHNF+QQNjyWfZETo7edBCkI
iuy/qdVJWWGp1a24eS5+xYWaiNM6bc5kQqvosaMEqXyxru1c6L2APFWwox4uEPBp4aTKhO1nMRwF
OWjYp0A9wogw2v3R+yA8FJNUEaoKgxDqW3PzqWwux6yyuaXva020Pasy5goVtJNzoCpVzIo7338l
9CHTC/zaek0X2toU2Ak0HDtE4QWQQqm0bUmNZBnH+L0N+Wn/QyYhiliQGwf3HC74O7jAguULFsse
2yAykytUboA0FUQxWtgwguFyW11VnyUupVV4QsopB1ZX3xwPgFNIb2ep51VBL3v9Gn/kceO4vI4A
9qgRbz75dZT6jp1kkcCn2d1kJwahBMwL/NtuYfPVVSzXbzHiZR4Gkgz8djIU6rMbz/b/ZkFaUHS1
mEt98qioeps20e5u/sxoK/v7QD9zby2rOP9dcP5/1+QZM57/jxee//dGhwdDcf4/7A37wzGe/4/G
vbE5/99Ae+nO/CmfyZXtrzvrJfxCA88vKAeBM3E2WD5FXOdgcXvuxo5+YEgGl50Xam09mFp7Txz8
LYWmS0GpZclcSD3gm1hKglQ6vdNuZfGmdFUmThqKLeUb4LiD0XjSUDzXdhzkQ769AbVAyimCh7ax
6IBlx02EcxqoNPtnywqjIOGQ7E6PxNGNMCNxhlPZPhcNnkI5EMz3vx25qfpGyDJfxid6V+W4L8cR
Wv88UpfU8GFSnlpmDNrkodygr+dbmbx0cgtNPbVVx6cJ5AmwmEjL0yVWCtMbz3WEFL/2lHCiz/U/
fRyx7CJBlik7XhDTNtDWlHsc1sBC6GpmSlMrx1+Sb8HX51KGCp3yPsqpmegzKe5VdnxhGWvMR2pe
hbnStj/j9EYYNCAgTUoNuorGBEB7UnDFg5YbR9kw1t6fzKS5MBouzfBrb16kycoAvGJboMkYmL+4
JKbRY2AgeH3GIFhM/1nXEeljQQzC9GUsA5FkcWGkIPysQWYlq9JuanaAvOVeLhMYsTslboGzZ/3y
/afmHK/mDbLzIruuul0uxQa1o/Cge52qslxTZc+ZqIF+jTw8H0jkfwNSr2wwEF5kAjSxUl+56wce
pWTOk6JrtsJQF7GZrXQp4L8ym0M5kDwVjrPFSB1INZ+6baJSwCmWkkKq0hg/s2zRKAvwizLJgi2F
mX4isdjmH2fvupqLjDMzfWHua4zYqWyYu8XRgdi8zX2Mtn1m0sm2Xw2n7NX0iL2KtzvaAGrnVc4o
IWZl3xMQO+R57sxajf6r+V/2Zl+TOcaK/A8ujov8bzwU+V9/YPK/DbQs/xN6V/K//EJNDqdmN5XD
jEnN3dIJkrTPuv0I0zbbyv4vk/JG51jh//2DwUHu/yNR/zMajsz+zyZa5v+kd8X9s9+qM9M1uZvY
DBR8m79bGxPwmdkJLPCJfEETLtCUjaByiwM6UlNhAe/o5Ysz/x7Qx/QEQp7tTzGUvY1uY8JLx2yv
3yko617TkMgKKAcK5dkpnovVESLlgUL5No75/MZ7qCEGyqFCeR0Ev9r+w9WDn9if3pFolDFHKp8J
pM0X9zyaecFHPdUCyrFCibK44rf4Ol6ZHigPFUoZxIGJnzkPy2P+oFC+BxNx55w41CdHyn8qlL/7
7jz06GVAPj3ldpJGvKDs96wvWDVAMKzy7m5lW+MRsMc02crxXyzxzc6xCv/1BwNZ/wdx/0Dgv4GJ
/xtpWfxHvSvhX/7Mf1MRCG4sZBeoaoT1a8Dct34i0x7TCv/3g7+eqQT8a+q/x6NDU/+9gVaj/6za
0mlqjuXxv3/Y7w+z+D8cjA6o/nuIdtAUA8vad65/U/+tj2Dqv0399/dc/12p9V63o/JuSG05+Yrq
8SWvh9SWmJv6clNfXt1PMvXltXtfpr7c1Jeb+nJTX27qy019ud5MfbmpL1dQp6kvp2bqy019OdmB
qS9fbrmmvtzUly9YTkx9+ZPjmakvN/Xlpr7c1Jeb+vIGzcvUlz9bffm3Pss27fFt8fsfzb0EuKr+
f3RYvP/XHw7o/Y+Dnqn/2ERbo/7fVOeb6vxSM9X5pjrfVOeb6vwn6NdU55vq/IXaMdX5pjrfVOdv
otXkf43/CYCV9V+jfpb/DUYHfZn/DU3+t4G2Rv1/M8X+3/pBTattNf7f+J8AWLv+H/1f7v9QTGiO
hcXN+L+p/zf1/6b+/zttNfG/8T8BsBL/9RX8NxJ///dwZPb/N9Eaq///1g9immmmmWbao9r/Aa/V
GBAAhAAA


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2002-03-26 10:16 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-21  1:36 c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0 Mario Deilmann
  -- strict thread matches above, loose matches on Subject: below --
2002-03-26  2:16 Mario Deilmann
2002-03-25 10:36 Neil Booth
2002-03-22 11:36 Neil Booth
2002-03-22  1:56 Mario Deilmann
2002-03-21 10:36 Neil Booth
2002-03-21 10:32 neil
2002-03-20 10:16 Neil Booth
2002-03-20  1:46 Mario Deilmann
2002-03-19 11:56 Neil Booth
2002-03-19  7:16 mdeil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).