This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>Number: 343 >Category: c++ >Synopsis: gcc reports internal compiler error #98 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Jun 22 08:06:01 PDT 2000 >Closed-Date: >Last-Modified: >Originator: green@rhythm.com >Release: unknown-1.0 >Organization: >Environment: c++ -v Reading specs from /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/specs gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) >Description: The following command line: c++ -v -save-files -O2 -ftemplate-depth-1024 -c -DSYSV -DMOTIF -DXT_CODE -Ih -Iui -I../h -I/software/thalia/h -I/usr/X11R6/include -o obj/linux6-alpha-std/NRHY_Access.o nrhy/NRHY_Access.c Produces the following messages: Reading specs from /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/specs c++: unrecognized option `-save-files' gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/cpp -lang-c++ -v -Ih -Iui -I../h -I/software/thalia/h -I/usr/X11R6/include -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -Dlinux -Dunix -D_LONGLONG -D__alpha__ -D__ELF__ -D__linux__ -D__unix__ -D_LONGLONG -D__alpha__ -D__ELF__ -D__linux -D__unix -Asystem(linux) -D__EXCEPTIONS -D__OPTIMIZE__ -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C -Acpu(alpha) -Amachine(alpha) -D__alpha -D__alpha__ -D__alpha_ev4__ -Acpu(ev4) -DSYSV -DMOTIF -DXT_CODE nrhy/NRHY_Access.c /tmp/ccCLiGbx.ii GNU CPP version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (Alpha GNU/Linux for ELF) #include "..." search starts here: #include <...> search starts here: h ui ../h /software/thalia/h /usr/X11R6/include /usr/include/g++-2 /usr/local/include /usr/alpha-redhat-linux/include /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/include /usr/include End of search list. /usr/lib/gcc-lib/alpha-redhat-linux/egcs-2.91.66/cc1plus /tmp/ccCLiGbx.ii -quiet -dumpbase NRHY_Access.cc -O2 -version -ftemplate-depth-1024 -o /tmp/cc8wR72A.s GNU C++ version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (alpha-redhat-linux) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release). nrhy/NRHY_Access.c: In method `void Chordump::DoCamera()': nrhy/NRHY_Access.c:612: warning: name lookup of `i' changed for new ANSI `for' scoping nrhy/NRHY_Access.c:607: warning: using obsolete binding at `i' nrhy/NRHY_Access.c: In method `void Chordump::DoStereo(short int, short int)': nrhy/NRHY_Access.c:635: warning: name lookup of `i' changed for new ANSI `for' scoping nrhy/NRHY_Access.c:627: warning: using obsolete binding at `i' h/nrhy_templateFind.h: In method `class NRHY_classMuscle * NRHY_find<NRHY_classMuscle>::FastFind<NRHY_classMuscle>()': h/nrhy_templateFind.h:145: instantiated from `NRHY_find<NRHY_classMuscle>::findItemForRead<NRHY_classMuscle>()' h/nrhy_templateFind.h:120: instantiated from `NRHY_find<NRHY_classMuscle>::findItem<NRHY_classMuscle>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classMuscle>::FindItem<NRHY_classMuscle>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classMuscle>::FindItemAsThing<NRHY_classMuscle>(bool, bool, bool)' h/nrhy_templateMatch.c:2306: instantiated from `NRHY_match<NRHY_classLayer>::matchAllOfOneClass<NRHY_classLayer>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classLayer>::Matchem<NRHY_classLayer>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classLayer>::findItem<NRHY_classLayer>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classLayer>::FindItem<NRHY_classLayer>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classLayer>::FindItemAsThing<NRHY_classLayer>(bool, bool, bool)' h/nrhy_templateMatch.c:2304: instantiated from `NRHY_match<NRHY_classFur>::matchAllOfOneClass<NRHY_classFur>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classFur>::Matchem<NRHY_classFur>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classFur>::findItem<NRHY_classFur>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classFur>::FindItem<NRHY_classFur>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classFur>::FindItemAsThing<NRHY_classFur>(bool, bool, bool)' h/nrhy_templateMatch.c:2302: instantiated from `NRHY_match<NRHY_classKlist>::matchAllOfOneClass<NRHY_classKlist>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classKlist>::Matchem<NRHY_classKlist>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classKlist>::findItem<NRHY_classKlist>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classKlist>::FindItem<NRHY_classKlist>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classKlist>::FindItemAsThing<NRHY_classKlist>(bool, bool, bool)' h/nrhy_templateMatch.c:2300: instantiated from `NRHY_match<NRHY_classRoot>::matchAllOfOneClass<NRHY_classRoot>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classRoot>::Matchem<NRHY_classRoot>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classRoot>::findItem<NRHY_classRoot>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classRoot>::FindItem<NRHY_classRoot>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classRoot>::FindItemAsThing<NRHY_classRoot>(bool, bool, bool)' h/nrhy_templateMatch.c:2298: instantiated from `NRHY_match<NRHY_classApparition>::matchAllOfOneClass<NRHY_classApparition>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classApparition>::Matchem<NRHY_classApparition>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classApparition>::findItem<NRHY_classApparition>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classApparition>::FindItem<NRHY_classApparition>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classApparition>::FindItemAsThing<NRHY_classApparition>(bool, bool, bool)' h/nrhy_templateMatch.c:2296: instantiated from `NRHY_match<NRHY_classTrack>::matchAllOfOneClass<NRHY_classTrack>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classTrack>::Matchem<NRHY_classTrack>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classTrack>::findItem<NRHY_classTrack>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classTrack>::FindItem<NRHY_classTrack>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classTrack>::FindItemAsThing<NRHY_classTrack>(bool, bool, bool)' h/nrhy_templateMatch.c:2294: instantiated from `NRHY_match<NRHY_classScaffold>::matchAllOfOneClass<NRHY_classScaffold>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classScaffold>::Matchem<NRHY_classScaffold>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classScaffold>::findItem<NRHY_classScaffold>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classScaffold>::FindItem<NRHY_classScaffold>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classScaffold>::FindItemAsThing<NRHY_classScaffold>(bool, bool, bool)' h/nrhy_templateMatch.c:2292: instantiated from `NRHY_match<NRHY_classInky>::matchAllOfOneClass<NRHY_classInky>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classInky>::Matchem<NRHY_classInky>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classInky>::findItem<NRHY_classInky>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classInky>::FindItem<NRHY_classInky>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classInky>::FindItemAsThing<NRHY_classInky>(bool, bool, bool)' h/nrhy_templateMatch.c:2290: instantiated from `NRHY_match<NRHY_classCollision>::matchAllOfOneClass<NRHY_classCollision>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classCollision>::Matchem<NRHY_classCollision>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classCollision>::findItem<NRHY_classCollision>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classCollision>::FindItem<NRHY_classCollision>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classCollision>::FindItemAsThing<NRHY_classCollision>(bool, bool, bool)' h/nrhy_templateMatch.c:2288: instantiated from `NRHY_match<NRHY_classGenerator>::matchAllOfOneClass<NRHY_classGenerator>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classGenerator>::Matchem<NRHY_classGenerator>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classGenerator>::findItem<NRHY_classGenerator>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classGenerator>::FindItem<NRHY_classGenerator>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classGenerator>::FindItemAsThing<NRHY_classGenerator>(bool, bool, bool)' h/nrhy_templateMatch.c:2286: instantiated from `NRHY_match<NRHY_classForce>::matchAllOfOneClass<NRHY_classForce>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classForce>::Matchem<NRHY_classForce>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classForce>::findItem<NRHY_classForce>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classForce>::FindItem<NRHY_classForce>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classForce>::FindItemAsThing<NRHY_classForce>(bool, bool, bool)' h/nrhy_templateMatch.c:2284: instantiated from `NRHY_match<NRHY_classDynamics>::matchAllOfOneClass<NRHY_classDynamics>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classDynamics>::Matchem<NRHY_classDynamics>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classDynamics>::findItem<NRHY_classDynamics>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classDynamics>::FindItem<NRHY_classDynamics>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classDynamics>::FindItemAsThing<NRHY_classDynamics>(bool, bool, bool)' h/nrhy_templateMatch.c:2282: instantiated from `NRHY_match<NRHY_classSound>::matchAllOfOneClass<NRHY_classSound>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classSound>::Matchem<NRHY_classSound>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classSound>::findItem<NRHY_classSound>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classSound>::FindItem<NRHY_classSound>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classSound>::FindItemAsThing<NRHY_classSound>(bool, bool, bool)' h/nrhy_templateMatch.c:2280: instantiated from `NRHY_match<NRHY_classUseMap>::matchAllOfOneClass<NRHY_classUseMap>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classUseMap>::Matchem<NRHY_classUseMap>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classUseMap>::findItem<NRHY_classUseMap>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classUseMap>::FindItem<NRHY_classUseMap>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classUseMap>::FindItemAsThing<NRHY_classUseMap>(bool, bool, bool)' h/nrhy_templateMatch.c:2278: instantiated from `NRHY_match<NRHY_classMap>::matchAllOfOneClass<NRHY_classMap>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classMap>::Matchem<NRHY_classMap>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classMap>::findItem<NRHY_classMap>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classMap>::FindItem<NRHY_classMap>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classMap>::FindItemAsThing<NRHY_classMap>(bool, bool, bool)' h/nrhy_templateMatch.c:2276: instantiated from `NRHY_match<NRHY_classMaterial>::matchAllOfOneClass<NRHY_classMaterial>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classMaterial>::Matchem<NRHY_classMaterial>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classMaterial>::findItem<NRHY_classMaterial>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classMaterial>::FindItem<NRHY_classMaterial>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classMaterial>::FindItemAsThing<NRHY_classMaterial>(bool, bool, bool)' h/nrhy_templateMatch.c:2274: instantiated from `NRHY_match<NRHY_classTex>::matchAllOfOneClass<NRHY_classTex>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classTex>::Matchem<NRHY_classTex>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classTex>::findItem<NRHY_classTex>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classTex>::FindItem<NRHY_classTex>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classTex>::FindItemAsThing<NRHY_classTex>(bool, bool, bool)' h/nrhy_templateMatch.c:2272: instantiated from `NRHY_match<NRHY_classRoto>::matchAllOfOneClass<NRHY_classRoto>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classRoto>::Matchem<NRHY_classRoto>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classRoto>::findItem<NRHY_classRoto>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classRoto>::FindItem<NRHY_classRoto>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classRoto>::FindItemAsThing<NRHY_classRoto>(bool, bool, bool)' h/nrhy_templateMatch.c:2270: instantiated from `NRHY_match<NRHY_classHome>::matchAllOfOneClass<NRHY_classHome>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classHome>::Matchem<NRHY_classHome>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classHome>::findItem<NRHY_classHome>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classHome>::FindItem<NRHY_classHome>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classHome>::FindItemAsThing<NRHY_classHome>(bool, bool, bool)' h/nrhy_templateMatch.c:2268: instantiated from `NRHY_match<NRHY_classModel>::matchAllOfOneClass<NRHY_classModel>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classModel>::Matchem<NRHY_classModel>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classModel>::findItem<NRHY_classModel>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classModel>::FindItem<NRHY_classModel>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classModel>::FindItemAsThing<NRHY_classModel>(bool, bool, bool)' h/nrhy_templateMatch.c:2266: instantiated from `NRHY_match<NRHY_classLight>::matchAllOfOneClass<NRHY_classLight>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classLight>::Matchem<NRHY_classLight>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classLight>::findItem<NRHY_classLight>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classLight>::FindItem<NRHY_classLight>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classLight>::FindItemAsThing<NRHY_classLight>(bool, bool, bool)' h/nrhy_templateMatch.c:2264: instantiated from `NRHY_match<NRHY_classCamera>::matchAllOfOneClass<NRHY_classCamera>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classCamera>::Matchem<NRHY_classCamera>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classCamera>::findItem<NRHY_classCamera>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classCamera>::FindItem<NRHY_classCamera>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classCamera>::FindItemAsThing<NRHY_classCamera>(bool, bool, bool)' h/nrhy_templateMatch.c:2262: instantiated from `NRHY_match<NRHY_classObject>::matchAllOfOneClass<NRHY_classObject>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classObject>::Matchem<NRHY_classObject>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classObject>::findItem<NRHY_classObject>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classObject>::FindItem<NRHY_classObject>(bool, bool, bool)' h/nrhy_templateFind.h:73: instantiated from `NRHY_find<NRHY_classObject>::FindItemAsThing<NRHY_classObject>(bool, bool, bool)' h/nrhy_templateMatch.c:2260: instantiated from `NRHY_match<NRHY_classThing>::matchAllOfOneClass<NRHY_classThing>(const char *)' h/nrhy_templateMatch.c:598: instantiated from `NRHY_match<NRHY_classThing>::Matchem<NRHY_classThing>(const char *)' h/nrhy_templateFind.h:132: instantiated from `NRHY_find<NRHY_classThing>::findItem<NRHY_classThing>()' h/nrhy_templateFind.h:63: instantiated from `NRHY_find<NRHY_classThing>::FindItem<NRHY_classThing>(bool, bool, bool)' nrhy/NRHY_Access.c:238: instantiated from here h/nrhy_templateFind.h:102: Internal compiler error 98. h/nrhy_templateFind.h:102: Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'. h/nrhy_templateFind.h:102: See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details. >How-To-Repeat: c++ -O2 -ftemplate-depth-1024 -o NRHY_Access.o NRHY_Access.ii >Fix: Unknown. We may need to rewrite this code ( probably a good thing ) to avoid this error. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="NRHY_Access.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="NRHY_Access.ii" IyAxICJucmh5L05SSFlfQWNjZXNzLmMiCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9zb2Z0 d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAojIDEg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCiMgMTM3ICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIyAxOTUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCgogCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoK CgoKIAoKCgoKCgoKCiAKCgoKCiMgNzEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAK CgoKCgoKCiAKCgoKIyAxMDMgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoK CgoKIyAyNDkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgogCgoKCgoKCgoKIAoKCgoK CiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIyAyNzcgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoK CiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCgojIDUyICIvdXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCgoKCiAK CiMgODcgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKCiMgMzMgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDIgMwoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgNzQgIi91c3IvaW5jbHVkZS9iaXRzL21h dGhkZWYuaCIgMwoKCgogCgoKCiMgNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAK ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7 IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAg ICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBhc2luICAgICAgICAgIChkb3VibGUgIF9f eCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2FzaW4gICAgICAgICAgKGRvdWJsZSAg X194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbiAgICAgICAgICAoZG91 YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hdGFuICAgICAgICAgIChk b3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW4yICAgICAg ICAgIChkb3VibGUgIF9feSwgZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg ICAgX19hdGFuMiAgICAgICAgICAoZG91YmxlICBfX3ksIGRvdWJsZSAgX194KSAgICAgIDsKCiAK ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsg ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAg IDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2luICAgICAgICAgIChkb3VibGUgIF9feCkg ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NpbiAgICAgICAgICAoZG91YmxlICBfX3gp ICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB0YW4gICAgICAgICAgKGRvdWJsZSAg X194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fdGFuICAgICAgICAgIChkb3VibGUg IF9feCkgICAgICA7CgoKCgoKCgogCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjb3NoICAg ICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Nvc2gg ICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAg c2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg X19zaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIHRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAg ICAgICAgIF9fdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAg ZG91YmxlICAgICAgICAgIGFjb3NoICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX2Fjb3NoICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CiAK ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAg OyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2FzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkg ICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW5oICAgICAgICAgIChkb3VibGUg IF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW5oICAgICAgICAgIChkb3Vi bGUgIF9feCkgICAgICA7CgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXhwICAgICAg ICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2V4cCAgICAg ICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCgoKCgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg ICAgIGZyZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICA7IGV4 dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZnJleHAgICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQg Kl9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbGRleHAgICAg ICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19leHBvbmVudCkgICAgOyBleHRlcm4gICBkb3VibGUg ICAgICAgICBfX2xkZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fZXhwb25lbnQpICAg ICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nICAgICAgICAgIChkb3VibGUgIF9f eCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZyAgICAgICAgICAoZG91YmxlICBf X3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nMTAgICAgICAgICAgKGRv dWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9nMTAgICAgICAgICAg KGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIG1vZGYgICAg ICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgICpfX2lwdHIpICAgIDsgZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgX19tb2RmICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICAqX19pcHRyKSAg ICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBleHBtMSAgICAgICAgICAoZG91Ymxl ICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19leHBtMSAgICAgICAgICAoZG91 YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nMXAgICAgICAg ICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9nMXAgICAg ICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxv Z2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f bG9nYiAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKCgoKCgoKCgoKCiAKCiAKZXh0ZXJu ICAgZG91YmxlICAgICAgICAgIHBvdyAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195 KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcG93ICAgICAgICAgIChkb3VibGUgIF9f eCwgZG91YmxlICBfX3kpICAgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc3FydCAg ICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19zcXJ0 ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAg ICAgaHlwb3QgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX2h5cG90ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBf X3kpICAgICAgOwoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjYnJ0ICAgICAgICAgIChk b3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NicnQgICAgICAgICAg KGRvdWJsZSAgX194KSAgICAgIDsKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY2Vp bCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19j ZWlsICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAg ICAgICBmYWJzICAgICAgICAgIChkb3VibGUgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAo X19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mYWJzICAgICAgICAgIChk b3VibGUgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKIApl eHRlcm4gICBkb3VibGUgICAgICAgICAgZmxvb3IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7 IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZmxvb3IgICAgICAgICAgKGRvdWJsZSAgX194KSAg ICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZtb2QgICAgICAgICAgKGRvdWJsZSAg X194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Ztb2QgICAg ICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIAoKZXh0ZXJuICBpbnQg ICAgIF9faXNpbmYgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIF9fZmluaXRlICAgICAgKGRvdWJsZSAgX192YWx1 ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIAoKZXh0ZXJuICBpbnQgICAgIGlz aW5mICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgogCmV4dGVybiAgaW50ICAgICBmaW5pdGUgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKCgoKCgpleHRlcm4gICBkb3VibGUgICAgICAgICAg aW5mbmFuICAgICAgICAgIChpbnQgX19lcnJvcikgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19j b25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19pbmZuYW4gICAgICAgICAgKGlu dCBfX2Vycm9yKSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4 dGVybiAgIGRvdWJsZSAgICAgICAgICBkcmVtICAgICAgICAgIChkb3VibGUgIF9feCwgZG91Ymxl ICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19kcmVtICAgICAgICAgIChkb3Vi bGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IHNpZ25pZmljYW5kICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUg ICAgICAgICBfX3NpZ25pZmljYW5kICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKCiAK ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9feCwg ZG91YmxlICBfX3kpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVy biAgIGRvdWJsZSAgICAgICAgIF9fY29weXNpZ24gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3Vi bGUgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKCgoK CiAKZXh0ZXJuICBpbnQgICAgIF9faXNuYW4gICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCmV4dGVybiAgaW50ICAgICBpc25hbiAgICAgIChk b3VibGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4g ICBkb3VibGUgICAgICAgICAgajAgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91 YmxlICAgICAgICAgX19qMCAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJs ZSAgICAgICAgICBqMSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAg ICAgICBfX2oxICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAg ICAgIGpuICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg ICAgX19qbiAgICAgICAgICAoaW50LCBkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIHkwICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAg IF9feTAgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAg eTEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX195MSAg ICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5biAgICAg ICAgICAoaW50LCBkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9feW4gICAg ICAgICAgKGludCwgZG91YmxlICkgICAgICA7CgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg ICBlcmYgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19l cmYgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgZXJm YyAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2VyZmMg ICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgbGdhbW1h ICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGdhbW1h ICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHRnYW1t YSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3RnYW1t YSAgICAgICAgICAoZG91YmxlICkgICAgICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f Z2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwoKCgogCgoKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIGxnYW1tYV9yICAgICAgICAgICAgICAoZG91YmxlICwgaW50ICpfX3NpZ25nYW1wKSAg ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hX3IgICAgICAgICAgICAgIChkb3Vi bGUgLCBpbnQgKl9fc2lnbmdhbXApICAgICAgOwoKCgoKIAoKZXh0ZXJuICAgZG91YmxlICAgICAg ICAgIHJpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg ICAgIF9fcmludCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3Vi bGUgICAgICAgICAgbmV4dGFmdGVyICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kp ICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGRvdWJsZSAg ICAgICAgIF9fbmV4dGFmdGVyICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAg ICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCiAKZXh0ZXJuICAgZG91 YmxlICAgICAgICAgIHJlbWFpbmRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195 KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcmVtYWluZGVyICAgICAgICAgIChkb3Vi bGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IHNjYWxiICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX24pICAgIDsgZXh0ZXJuICAg ZG91YmxlICAgICAgICAgX19zY2FsYiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX19u KSAgICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzY2FsYm4gICAgICAgICAgKGRv dWJsZSAgX194LCBpbnQgX19uKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2NhbGJu ICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fbikgICAgICA7CgogCmV4dGVybiAgIGludCAg ICAgICAgaWxvZ2IgICAgICAgIChkb3VibGUgIF9feCkgICA7IGV4dGVybiAgIGludCAgICAgICAg X19pbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgICA7CgoKIyAzMzYgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAzCgojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCgoK CiAKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgYWNvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0 ZXJuICAgZmxvYXQgICAgICAgICBfX2Fjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK IApleHRlcm4gICBmbG9hdCAgICAgICAgICBhc2luZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAg ICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW5mICAgICAgICAgKGZsb2F0ICAgX194 KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuZiAgICAgICAgIChmbG9hdCAgIF9f eCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXRhbjJmICAgICAgICAgKGZsb2F0 ICAgX195LCBmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXRhbjJm ICAgICAgICAgKGZsb2F0ICAgX195LCBmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZs b2F0ICAgICAgICAgIGNvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxv YXQgICAgICAgICBfX2Nvc2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAg IGZsb2F0ICAgICAgICAgIHNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAg ZmxvYXQgICAgICAgICBfX3NpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVy biAgIGZsb2F0ICAgICAgICAgIHRhbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJu ICAgZmxvYXQgICAgICAgICBfX3RhbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCgoK CgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjb3NoZiAgICAgICAgIChmbG9hdCAgIF9f eCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29zaGYgICAgICAgICAoZmxvYXQgICBf X3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNpbmhmICAgICAgICAgKGZsb2F0 ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zaW5oZiAgICAgICAgIChmbG9h dCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGFuaGYgICAgICAgICAo ZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3RhbmhmICAgICAgICAg KGZsb2F0ICAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFjb3NoZiAg ICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYWNvc2hm ICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBh c2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf X2FzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAg ICAgICAgYXRhbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAg ICAgICAgX19hdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCiAKCiAKZXh0ZXJu ICAgZmxvYXQgICAgICAgICAgZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4g ICBmbG9hdCAgICAgICAgIF9fZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKCgoK CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmcmV4cGYgICAgICAgICAoZmxvYXQgICBfX3gs IGludCAqX19leHBvbmVudCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZnJleHBmICAg ICAgICAgKGZsb2F0ICAgX194LCBpbnQgKl9fZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBm bG9hdCAgICAgICAgICBsZGV4cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX2V4cG9uZW50 KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZGV4cGYgICAgICAgICAoZmxvYXQgICBf X3gsIGludCBfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9n ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9n ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg IGxvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg IF9fbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQg ICAgICAgICAgbW9kZmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgKl9faXB0cikgICAg OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbW9kZmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZs b2F0ICAgKl9faXB0cikgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHBtMWYg ICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2V4cG0x ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg IGxvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg IF9fbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQg ICAgICAgICAgbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQg ICAgICAgICBfX2xvZ2JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCgoKCgoKCgoKCgog CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHBvd2YgICAgICAgICAoZmxvYXQgICBfX3gsIGZs b2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19wb3dmICAgICAgICAgKGZs b2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg IHNxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg X19zcXJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAg ICAgICAgICBoeXBvdGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19oeXBvdGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0 ICAgX195KSAgICAgIDsKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjYnJ0ZiAgICAgICAg IChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY2JydGYgICAgICAg ICAoZmxvYXQgICBfX3gpICAgICAgOwoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNl aWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19j ZWlsZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAg ICAgIGZhYnNmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChf X2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZmFic2YgICAgICAgICAoZmxv YXQgICBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgZmxvb3JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19mbG9vcmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbW9kZiAgICAgICAgIChmbG9hdCAgIF9feCwg ZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Ztb2RmICAgICAgICAg KGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgoKIAoKZXh0ZXJuICBpbnQgICAgX19p c2luZmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKIApleHRlcm4gIGludCAgICBfX2Zpbml0ZWYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKCmV4dGVybiAgaW50ICAgIGlzaW5mZiAgICAg KGZsb2F0ICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVy biAgaW50ICAgIGZpbml0ZWYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKIAoKCgoKCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGluZm5hbmYgICAg ICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7 IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19pbmZuYW5mICAgICAgICAgKGludCBfX2Vycm9yKSAg ICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGZsb2F0 ICAgICAgICAgIGRyZW1mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgOyBl eHRlcm4gICBmbG9hdCAgICAgICAgIF9fZHJlbWYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0 ICAgX195KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNpZ25pZmljYW5kZiAg ICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2lnbmlm aWNhbmRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCgoKIApleHRlcm4gICBmbG9hdCAg ICAgICAgICBjb3B5c2lnbmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAg X19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAg IF9fY29weXNpZ25mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgIF9fYXR0 cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKCgoKCiAKZXh0ZXJuICBpbnQgICAg X19pc25hbmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCiAKZXh0ZXJuICBpbnQgICAgaXNuYW5mICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajBm ICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2owZiAgICAg ICAgIChmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajFmICAgICAgICAg KGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2oxZiAgICAgICAgIChmbG9h dCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgam5mICAgICAgICAgKGludCwgZmxv YXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fam5mICAgICAgICAgKGludCwgZmxv YXQgICkgICAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkwZiAgICAgICAgIChmbG9hdCAg KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX195MGYgICAgICAgICAoZmxvYXQgICkgICAg ICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkxZiAgICAgICAgIChmbG9hdCAgKSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX195MWYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVy biAgIGZsb2F0ICAgICAgICAgIHluZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgIDsgZXh0ZXJu ICAgZmxvYXQgICAgICAgICBfX3luZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgICAgOwoKCgoK IApleHRlcm4gICBmbG9hdCAgICAgICAgICBlcmZmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0 ZXJuICAgZmxvYXQgICAgICAgICBfX2VyZmYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVy biAgIGZsb2F0ICAgICAgICAgIGVyZmNmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAg ZmxvYXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBm bG9hdCAgICAgICAgICBsZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxv YXQgICAgICAgICBfX2xnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVybiAgIGZs b2F0ICAgICAgICAgIHRnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9h dCAgICAgICAgIF9fdGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICAgIDsKCgoKIApleHRlcm4g ICBmbG9hdCAgICAgICAgICBnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBm bG9hdCAgICAgICAgIF9fZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwoKCgogCgoKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgbGdhbW1hZl9yICAgICAgICAgICAgKGZsb2F0ICAsIGludCAq X19zaWduZ2FtcCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZl9yICAgICAg ICAgICAgKGZsb2F0ICAsIGludCAqX19zaWduZ2FtcCkgICAgICA7CgoKCgogCgpleHRlcm4gICBm bG9hdCAgICAgICAgICByaW50ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBm bG9hdCAgICAgICAgIF9fcmludGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKIApleHRl cm4gICBmbG9hdCAgICAgICAgICBuZXh0YWZ0ZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9h dCAgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAg ZmxvYXQgICAgICAgICBfX25leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAg X195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgogCmV4dGVy biAgIGZsb2F0ICAgICAgICAgIHJlbWFpbmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0 ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19yZW1haW5kZXJmICAgICAgICAg KGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAg ICAgICBzY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX19uKSAgICA7IGV4dGVy biAgIGZsb2F0ICAgICAgICAgX19zY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAg X19uKSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxibmYgICAgICAgICAo ZmxvYXQgICBfX3gsIGludCBfX24pICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NjYWxi bmYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX24pICAgICAgOwoKIApleHRlcm4gICBpbnQg ICAgICAgaWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICA7IGV4dGVybiAgIGludCAgICAgICBf X2lsb2diZiAgICAgICAoZmxvYXQgICBfX3gpICAgIDsKCgojIDMzNiAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGNhbGxzLmgiIDMKCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgoKIyAx MDMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoKCgoKCgoKIApleHRlcm4gaW50IHNpZ25nYW07 CgoKCiAKIyAyMzIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKCgoKIAp0eXBlZGVmIGVudW0Kewog IF9JRUVFXyA9IC0xLAkgCiAgX1NWSURfLAkgCiAgX1hPUEVOXywJIAogIF9QT1NJWF8sCiAgX0lT T0NfCSAKfSBfTElCX1ZFUlNJT05fVFlQRTsKCiAKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUg X0xJQl9WRVJTSU9OOwoKCgoKIAoKCgoKCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGlu dCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7 CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyICAoc3RydWN0IF9f ZXhjZXB0aW9uICpfX2V4YykgIHRocm93ICgpICA7CgoKCgoKCiAKCgoKCgoKCiAKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvZmxv YXQuaCIgMSAzCiAKCgogCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgogICAgCgoKICAgIAoKCiAgICAK CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAgICAK CgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCgojIDI4 OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAyOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDMKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMzM2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAz CgoKCiAKCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1OSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGlubGluZS5oIiAzCgoKCgoKCgoKCgoKX19pbmxpbmUgICAgZmxvYXQgCSBfX2NvcHlzaWduZiAg KCAgZmxvYXQgIF9feCwgICBmbG9hdCAgX195KQl7CSAgZmxvYXQgIF9fejsJX19hc20gKCJjcHlz ICUxLCAlMiwgJTAiIDogIj1mIiAoX196KSA6ICJmIiAoX195KSwgImYiIChfX3gpKTsJcmV0dXJu IF9fejsJfSAKX19pbmxpbmUgICAgZmxvYXQgCSBjb3B5c2lnbmYgICggIGZsb2F0ICBfX3gsICAg ZmxvYXQgIF9feSkJewkgIGZsb2F0ICBfX3o7CV9fYXNtICgiY3B5cyAlMSwgJTIsICUwIiA6ICI9 ZiIgKF9feikgOiAiZiIgKF9feSksICJmIiAoX194KSk7CXJldHVybiBfX3o7CX0gCl9faW5saW5l ICAgIGRvdWJsZSAJIF9fY29weXNpZ24gICggIGRvdWJsZSAgX194LCAgIGRvdWJsZSAgX195KQl7 CSAgZG91YmxlICBfX3o7CV9fYXNtICgiY3B5cyAlMSwgJTIsICUwIiA6ICI9ZiIgKF9feikgOiAi ZiIgKF9feSksICJmIiAoX194KSk7CXJldHVybiBfX3o7CX0gCl9faW5saW5lICAgIGRvdWJsZSAJ IGNvcHlzaWduICAoICBkb3VibGUgIF9feCwgICBkb3VibGUgIF9feSkJewkgIGRvdWJsZSAgX196 OwlfX2FzbSAoImNweXMgJTEsICUyLCAlMCIgOiAiPWYiIChfX3opIDogImYiIChfX3kpLCAiZiIg KF9feCkpOwlyZXR1cm4gX196Owl9IAoKCgoKCl9faW5saW5lICBmbG9hdCBfX2ZhYnNmIChmbG9h dCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX194KTsgfQpfX2lubGluZSAgZmxvYXQg ZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5s aW5lICBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAo X194KTsgfQpfX2lubGluZSAgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVp bHRpbl9mYWJzIChfX3gpOyB9CiMgOTkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg MwoKCgogCgoKCl9faW5saW5lICBmbG9hdApfX2Zsb29yZiAoZmxvYXQgX194KQp7CiAgIAogIGlm IChfX3ggIT0gMCAmJiBmYWJzZiAoX194KSA8IDE2Nzc3MjE2LjBmKSAgIAogICAgewogICAgICAg CgoKCgogICAgICBmbG9hdCBfX3RtcDEsIF9fdG1wMjsKCiAgICAgIF9fYXNtICgiY3Z0c3QvcyAl MywlMlxuXHQiCgoKCgkgICAgICJjdnR0cS9zdm0gJTIsJTFcblx0IgoKCSAgICAgImN2dHF0L20g JTEsJTBcblx0IgoJICAgICA6ICI9ZiIoX194KSwgIj0mZiIoX190bXAxKSwgIj0mZiIoX190bXAy KQoJICAgICA6ICJmIihfX3gpKTsKICAgIH0KICByZXR1cm4gX194Owp9CgpfX2lubGluZSAgZG91 YmxlCl9fZmxvb3IgKGRvdWJsZSBfX3gpCnsKICBpZiAoX194ICE9IDAgJiYgZmFicyAoX194KSA8 IDkwMDcxOTkyNTQ3NDA5OTIuMCkgICAKICAgIHsKICAgICAgZG91YmxlIF9fdG1wMTsKICAgICAg X19hc20gKAoKCgoJICAgICAiY3Z0dHEvc3ZtICUyLCUxXG5cdCIKCgkgICAgICJjdnRxdC9tICUx LCUwXG5cdCIKCSAgICAgOiAiPWYiKF9feCksICI9JmYiKF9fdG1wMSkKCSAgICAgOiAiZiIoX194 KSk7CiAgICB9CiAgcmV0dXJuIF9feDsKfQoKX19pbmxpbmUgIGZsb2F0IGZsb29yZiAoZmxvYXQg X194KSB7IHJldHVybiBfX2Zsb29yZihfX3gpOyB9Cl9faW5saW5lICBkb3VibGUgZmxvb3IgKGRv dWJsZSBfX3gpIHsgcmV0dXJuIF9fZmxvb3IoX194KTsgfQoKCl9faW5saW5lICBmbG9hdCBfX2Zk aW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkKewogIHJldHVybiBfX3ggPCBfX3kgPyAwLjBmIDog X194IC0gX195Owp9CgpfX2lubGluZSAgZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195 KQp7CiAgcmV0dXJuIF9feCA8IF9feSA/IDAuMGYgOiBfX3ggLSBfX3k7Cn0KCl9faW5saW5lICBk b3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KQp7CiAgcmV0dXJuIF9feCA8IF9f eSA/IDAuMCA6IF9feCAtIF9feTsKfQoKX19pbmxpbmUgIGRvdWJsZSBmZGltIChkb3VibGUgX194 LCBkb3VibGUgX195KQp7CiAgcmV0dXJuIF9feCA8IF9feSA/IDAuMCA6IF9feCAtIF9feTsKfQoj IDM0OCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgojIDQwNyAiL3Vzci9pbmNsdWRlL21h dGguaCIgMwoKCn0gCgoKCiMgMjQgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAyCgoj IDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIu OTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2Mt bGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51 eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQt bGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyODMgIi91 c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0 ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoK CgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwkJCSAKICAgIGludCByZW07CQkJ IAogIH0gZGl2X3Q7CgogCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CQkg CiAgICBsb25nIGludCByZW07CQkgCiAgfSBsZGl2X3Q7CgoKCiMgNjUgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwoKCgogCgoKCiAKCgoKCgogCgpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21i X2N1cl9tYXggICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBkb3VibGUgYXRvZiAgKF9f Y29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IGF0b2kgIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGxvbmcgaW50IGF0b2wgIChf X2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7CgoKIApfX2V4dGVuc2lvbl9fIGV4dGVy biBsb25nIGxvbmcgaW50IGF0b2xsICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAoKSAg OwoKCiAKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwKCQkJ ICAgY2hhciAqKiAgIF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCiAKZXh0ZXJuIGxv bmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLAoJCQkgICAgIGNoYXIgKiog ICBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHVuc2lnbmVkIGxv bmcgaW50IHN0cnRvdWwgIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwKCQkJCSAgICAgICBjaGFy ICoqICAgX19lbmRwdHIsCgkJCQkgICAgICAgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CgoKIApf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAgKF9fY29uc3QgY2hhciAq ICAgX19ucHRyLAoJCQkJICBjaGFyICoqICAgX19lbmRwdHIsIGludCBfX2Jhc2UpICB0aHJvdyAo KSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91 cSAgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLAoJCQkJCSAgICBjaGFyICoqICAgX19lbmRwdHIs CgkJCQkJICAgIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgogCgogCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLAoJ CQkJICAgY2hhciAqKiAgIF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKIApfX2V4 dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsICAoX19jb25z dCBjaGFyICogICBfX25wdHIsCgkJCQkJICAgICBjaGFyICoqICAgX19lbmRwdHIsCgkJCQkJICAg ICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgoKIyAxOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hh ciAqICAgX19ucHRyLAoJCQkJICAgICAgY2hhciAqKiAgIF9fZW5kcHRyLAoJCQkJICAgICAgaW50 IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgIChf X2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwKCQkJCSAgICAgY2hhciAqKiAgIF9fZW5kcHRyLCBpbnQg X19ncm91cCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGRvdWJsZSAgX19zdHJ0b2xkX2ludGVy bmFsICAoX19jb25zdCBjaGFyICoKCQkJCQkJICBfX25wdHIsCgkJCQkJCWNoYXIgKiogICBfX2Vu ZHB0ciwKCQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGxvbmcgaW50IF9f c3RydG9sX2ludGVybmFsICAoX19jb25zdCBjaGFyICogICBfX25wdHIsCgkJCQkJY2hhciAqKiAg IF9fZW5kcHRyLAoJCQkJCWludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAgKF9fY29uc3QgY2hh ciAqCgkJCQkJCSAgICBfX25wdHIsCgkJCQkJCSAgY2hhciAqKiAgIF9fZW5kcHRyLAoJCQkJCQkg IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsICAoX19jb25zdCBjaGFyICog ICBfX25wdHIsCgkJCQkJICAgICAgY2hhciAqKiAgIF9fZW5kcHRyLAoJCQkJCSAgICAgIGludCBf X2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4g dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsICAoX19jb25zdCBjaGFy ICoKCQkJCQkJCSAgX19ucHRyLAoJCQkJCQkJY2hhciAqKgoJCQkJCQkJICBfX2VuZHB0ciwKCQkJ CQkJCWludCBfX2Jhc2UsCgkJCQkJCQlpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCgoKCiAK CmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwg Y2hhciAqKiAgIF9fZW5kcHRyKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRv bCAoX19jb25zdCBjaGFyICogICBfX25wdHIsIGNoYXIgKiogICBfX2VuZHB0ciwKCWludCBfX2Jh c2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5k cHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludApzdHJ0 b3VsIChfX2NvbnN0IGNoYXIgKiAgIF9fbnB0ciwgY2hhciAqKiAgIF9fZW5kcHRyLAoJIGludCBf X2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBf X2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKIyAyNzEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoK CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19j b25zdCBjaGFyICogICBfX25wdHIsIGNoYXIgKiogICBfX2VuZHB0ciwKCWludCBfX2Jhc2UpIHRo cm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg X19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25n IGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLCBjaGFyICoqICAgX19l bmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqICAgX19u cHRyLCBjaGFyICoqICAgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1 cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91 bGwgKF9fY29uc3QgY2hhciAqICAgX19ucHRyLCBjaGFyICoqICAgX19lbmRwdHIsCgkgIGludCBf X2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwg X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9f Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwg KGNoYXIgKiopIF9fbnVsbCApOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBj aGFyICpfX25wdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAo Y2hhciAqKikgX19udWxsICwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChf X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIs IChjaGFyICoqKSBfX251bGwgLCAxMCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsK ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsICwgMTApOwp9CgoKCgoK IAoKCmV4dGVybiBjaGFyICpsNjRhICAobG9uZyBpbnQgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0 ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKIyAx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCmV4dGVybiAiQyIgeyAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1y ZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK IyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxp Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2dj Yy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz LTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xp Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIu OTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGli L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy IDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBpbnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgaW50IF9fdV9sb25nOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f dV9xdWFkX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19xdWFkX3Q7CnR5cGVkZWYgc2lnbmVkIGNoYXIg X19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVk IHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2 X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f dWludDMyX3Q7CnR5cGVkZWYgc2lnbmVkIGxvbmcgaW50IF9faW50NjRfdDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX3VpbnQ2NF90Owp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0 eXBlZGVmIF9fdWludDY0X3QgX19kZXZfdDsJCSAKdHlwZWRlZiBfX3VpbnQzMl90IF9fdWlkX3Q7 CQkgCnR5cGVkZWYgX191aW50MzJfdCBfX2dpZF90OwkJIAp0eXBlZGVmIF9fdWludDMyX3QgX19p bm9fdDsJCSAKdHlwZWRlZiBfX3VpbnQ2NF90IF9faW5vNjRfdDsJCSAKdHlwZWRlZiBfX3VpbnQz Ml90IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdWludDMyX3QgX19ubGlua190OyAJCSAKdHlwZWRl ZiBfX2ludDY0X3QgIF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19pbnQ2NF90ICBfX29mZjY0X3Q7CQkg CnR5cGVkZWYgX19pbnQ2NF90ICBfX2xvZmZfdDsJCSAKdHlwZWRlZiBfX2ludDMyX3QgIF9fcGlk X3Q7CQkgCnR5cGVkZWYgX19pbnQ2NF90ICBfX3NzaXplX3Q7CQkgCnR5cGVkZWYgX19pbnQ2NF90 ICBfX3JsaW1fdDsJCSAKdHlwZWRlZiBfX2ludDY0X3QgIF9fcmxpbTY0X3Q7CQkgCnR5cGVkZWYg X191aW50MzJfdCAgX19ibGtjbnRfdDsJCSAKdHlwZWRlZiBfX3VpbnQ2NF90ICBfX2Jsa2NudDY0 X3Q7CSAKdHlwZWRlZiBfX2ludDMyX3QgX19mc2Jsa2NudF90OwkJIAp0eXBlZGVmIF9faW50NjRf dCBfX2ZzYmxrY250NjRfdDsJIAp0eXBlZGVmIF9fdWludDMyX3QgX19mc2ZpbGNudF90OwkgCnR5 cGVkZWYgX191aW50NjRfdCBfX2ZzZmlsY250NjRfdDsJIAp0eXBlZGVmIF9fdWludDMyX3QgX19p ZF90OwkJIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf dDsJCQkJIAoKIAp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2Fk ZHJfdDsJCSAKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3 YmxrX3Q7CQkgCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190Owp0eXBlZGVmIGludCBfX2tleV90 OwkJCSAKCiAKdHlwZWRlZiBpbnQgX19pcGNfcGlkX3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBpbnQgX19mZF9tYXNrOwoKIAoKCgoKIAoKCiAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICAgCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9f ZmRfbWFzaykpIF07CgoKICB9IF9fZmRfc2V0OwoKIAp0eXBlZGVmIGludCBfX3Rfc2NhbGFyX3Q7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdF91c2NhbGFyX3Q7CgogCnR5cGVkZWYgbG9uZyBpbnQg X19pbnRwdHJfdDsKCgogCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK CgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5 cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19x dWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lk X3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3Qg aW5vX3Q7CgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lk X3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlu a190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29m Zl90IG9mZl90OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYg X19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9f ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9f a2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoK CgojIDYyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAp0eXBlZGVmIF9fdGltZV90 IHRpbWVfdDsKCgoKCgojIDg5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDI3OSAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDEyMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy IDMKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEu NjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGli L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgog CgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l Z2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3Iv bGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRl Zi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0 LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGli L2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn Y3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiMgMTI0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgogCgojIDE1OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAzCgoKIAoKCgoKCgoKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVf XyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9f ICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkpKSA7Cgp0eXBlZGVmIGludCByZWdpc3Rl cl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoKIAoKCgoKCgogCiMg MSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwogCgoKCgoKCiMg MzUgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCgoKIAoKCgoKCgoKCgoKCgoKIyAxOTAgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg aW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkg XTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3Np Z3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCgojIDEg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwoKCgojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAoKc3RydWN0 IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwkJIAogICAgbG9uZyBpbnQgdHZfbnNl YzsJCSAKICB9OwoKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMzggIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKc3RydWN0 IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAp0eXBlZGVmIF9fZmRfc2V0 IGZkX3NldDsKCiAKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gaW50IF9fc2VsZWN0ICAo aW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICBfX2ZkX3NldCAqX193cml0ZWZk cywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQp ICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0ICpf X3JlYWRmZHMsCgkJCV9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMs CgkJCXN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICB0aHJvdyAoKSAgOwoKIyA5MSAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCn0gCgoKIyAxOTMgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxOTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAgCnR5cGVkZWYgX19m c2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsg IAoKCgoKCgoKCgoKCgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiAK CgoKIApleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu IHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKIAoKCgpl eHRlcm4gdm9pZCAqICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogIF9f c3RhdGVidWYsCgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93ICgpICA7CgogCgpl eHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1ZikgIHRocm93ICgpICA7 CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAg IGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5 cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQz Ml90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRv bV9kYXRhICogICBfX2J1ZiwKCQkJICBpbnQzMl90ICogICBfX3Jlc3VsdCkgIHRocm93ICgpICA7 CgpleHRlcm4gaW50IHNyYW5kb21fciAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5k b21fZGF0YSAqX19idWYpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAgKHVu c2lnbmVkIGludCBfX3NlZWQsCgkJCSAgICAgdm9pZCAqICAgIF9fc3RhdGVidWYsCgkJCSAgICAg c2l6ZV90IF9fc3RhdGVsZW4sCgkJCSAgICAgc3RydWN0IHJhbmRvbV9kYXRhICogICBfX2J1Zikg IHRocm93ICgpICA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgICh2b2lkICogICAgX19zdGF0ZWJ1 ZiwKCQkJICAgIHN0cnVjdCByYW5kb21fZGF0YSAqICAgX19idWYpICB0aHJvdyAoKSAgOwoKCgoK IApleHRlcm4gaW50IHJhbmQgICh2b2lkKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBzcmFu ZCAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCByYW5k X3IgICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgIHRocm93ICgpICA7CgoKCgogCgogCmV4dGVybiBk b3VibGUgZHJhbmQ0OCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gZG91YmxlIGVyYW5kNDgg ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBs b25nIGludCBscmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBucmFu ZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRl cm4gbG9uZyBpbnQgbXJhbmQ0OCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBpbnQg anJhbmQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAK ZXh0ZXJuIHZvaWQgc3JhbmQ0OCAgKGxvbmcgaW50IF9fc2VlZHZhbCkgIHRocm93ICgpICA7CmV4 dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3Nl ZWQxNnZbM10pICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICAodW5zaWduZWQgc2hv cnQgaW50IF9fcGFyYW1bN10pICB0aHJvdyAoKSAgOwoKIApzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAg ewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBh WzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50 IG9sZF94WzNdOyAgCiAgICBpbnQgaW5pdDsJCQkgCiAgfTsKCgogCmV4dGVybiBpbnQgZHJhbmQ0 OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqICAgX19idWZmZXIsCgkJCSAgIGRvdWJsZSAqICAg X19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVyYW5kNDhfciAgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogICBfX2J1ZmZl ciwKCQkJICAgZG91YmxlICogICBfX3Jlc3VsdCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQg bHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqICAgX19idWZmZXIsCgkJCSAgIGxvbmcg aW50ICogICBfX3Jlc3VsdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiAg IF9fYnVmZmVyLAoJCQkgICBsb25nIGludCAqICAgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApl eHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiAgIF9fYnVmZmVyLAoJ CQkgICBsb25nIGludCAqICAgX19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGpyYW5k NDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICogICBfX2J1ZmZlciwKCQkJICAgbG9uZyBpbnQgKiAgIF9fcmVzdWx0KSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIGludCBzcmFuZDQ4X3IgIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgc2VlZDQ4 X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAoJCQkgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICAodW5z aWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWFsbG9jICAoc2l6 ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHZvaWQgKiAgY2FsbG9jICAoc2l6ZV90 IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gdm9pZCAq ICByZWFsbG9jICAodm9pZCAqICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CiAK ZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJu IHZvaWQgY2ZyZWUgICh2b2lkICogIF9fcHRyKSAgdGhyb3cgKCkgIDsKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xp Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51 eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYx ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVk ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoj IDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYWxwaGEt cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoK IAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42 Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVk aGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcg Ii91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjUgIi91c3IvaW5jbHVk ZS9hbGxvY2EuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKZXh0ZXJuIHZvaWQgKiAgYWxs b2NhICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCgoKfSAKCgojIDQ5MiAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgdmFsbG9jICAoc2l6ZV90 IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgYWJvcnQgICh2b2lkKSAgdGhy b3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIApleHRlcm4gaW50IGF0 ZXhpdCAgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGlu dCBfX29uX2V4aXQgICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogIF9fYXJn KSwKCQkJICAgdm9pZCAqICBfX2FyZykgIHRocm93ICgpICA7CmV4dGVybiBpbnQgb25fZXhpdCAg KHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkgdm9pZCAq ICBfX2FyZykgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiB2b2lkIGV4aXQgIChpbnQgX19zdGF0 dXMpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoKCgog CmV4dGVybiBjaGFyICpnZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7 CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUp ICB0aHJvdyAoKSAgOwoKCiAKIAoKZXh0ZXJuIGludCBwdXRlbnYgIChfX2NvbnN0IGNoYXIgKl9f c3RyaW5nKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGludCBzZXRlbnYgIChfX2NvbnN0IGNo YXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLAoJCQlpbnQgX19yZXBsYWNlKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg IHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFyZW52ICAodm9pZCkgIHRocm93ICgp ICA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpta3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAgdGhy b3cgKCkgIDsKCiAKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0 aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc3lzdGVtICAoX19jb25zdCBjaGFyICpfX2NvbW1h bmQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAg KF9fY29uc3QgY2hhciAqICAgX19uYW1lLAoJCQkgICAgY2hhciAqICAgX19yZXNvbHZlZCkgIHRo cm93ICgpICA7CgoKCiAKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpICAoX19jb25zdCB2 b2lkICogLCBfX2NvbnN0IHZvaWQgKiApICA7CgoKCgoKCiAKCmV4dGVybiB2b2lkICogIGJzZWFy Y2ggIChfX2NvbnN0IHZvaWQgKiAgX19rZXksIF9fY29uc3Qgdm9pZCAqICBfX2Jhc2UsCgkJCSAg ICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgIF9fY29tcGFyX2Zu X3QgX19jb21wYXIpICA7CgogCgpleHRlcm4gdm9pZCBxc29ydCAgKHZvaWQgKiAgX19iYXNlLCBz aXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICBfX2NvbXBhcl9mbl90IF9fY29tcGFy KSAgOwoKCiAKZXh0ZXJuIGludCBhYnMgIChpbnQgX194KSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzICAobG9uZyBpbnQgX194KSAg dGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCiAKCiAKZXh0ZXJu IGRpdl90IGRpdiAgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkgIHRocm93ICgpICAgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgIChsb25nIGludCBfX251 bWVyLCBsb25nIGludCBfX2Rlbm9tKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFyICplY3Z0ICAoZG91YmxlIF9f dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICogICBfX2RlY3B0LAoJCQlpbnQgKiAgIF9fc2lnbikg IHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGNoYXIgKmZjdnQgIChkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LCBpbnQgKiAgIF9fZGVjcHQsCgkJCWludCAqICAgX19zaWduKSAgdGhyb3cgKCkg IDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs IGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0ICAobG9uZyBk b3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqICAgX19kZWNwdCwgaW50ICog ICBfX3NpZ24pICB0aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqcWZjdnQgIChsb25nIGRvdWJsZSAg X192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCQkgaW50ICogICBfX2RlY3B0LCBpbnQgKiAgIF9fc2ln bikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpxZ2N2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJuIGlu dCBlY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiAgIF9fZGVjcHQs CgkJCWludCAqICAgX19zaWduLCBjaGFyICogICBfX2J1ZiwKCQkJc2l6ZV90IF9fbGVuKSAgdGhy b3cgKCkgIDsKZXh0ZXJuIGludCBmY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKiAgIF9fZGVjcHQsCgkJCWludCAqICAgX19zaWduLCBjaGFyICogICBfX2J1ZiwKCQkJ c2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgcWVjdnRfciAgKGxvbmcgZG91 YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKiAgIF9fZGVjcHQsIGludCAqICAg X19zaWduLAoJCQkgY2hhciAqICAgX19idWYsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CmV4 dGVybiBpbnQgcWZjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJ CSBpbnQgKiAgIF9fZGVjcHQsIGludCAqICAgX19zaWduLAoJCQkgY2hhciAqICAgX19idWYsIHNp emVfdCBfX2xlbikgIHRocm93ICgpICA7CgoKCgogCgpleHRlcm4gaW50IG1ibGVuICAoX19jb25z dCBjaGFyICpfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCgpleHRlcm4gaW50IG1idG93 YyAgKHdjaGFyX3QgKiAgIF9fcHdjLAoJCQlfX2NvbnN0IGNoYXIgKiAgIF9fcywgc2l6ZV90IF9f bikgIHRocm93ICgpICA7CiAKCmV4dGVybiBpbnQgd2N0b21iICAoY2hhciAqX19zLCB3Y2hhcl90 IF9fd2NoYXIpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAgKHdjaGFy X3QgKiAgICBfX3B3Y3MsCgkJCSAgICAgX19jb25zdCBjaGFyICogICBfX3MsIHNpemVfdCBfX24p ICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgIChjaGFyICogICBfX3MsCgkJ CSAgICAgX19jb25zdCB3Y2hhcl90ICogICBfX3B3Y3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAg OwoKCgogCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAgKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg IHRocm93ICgpICA7CgoKCiMgNzMyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIyA3NTYg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCiMgNzY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKCgoKCgp9IAoKCiMgMjUgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAyCgojIDEg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK ZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vz ci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1y ZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvYWxw aGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoK CiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGli L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMg MjgzICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5j bHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVy biB2b2lkICogIG1lbWNweSAgKHZvaWQgKiAgICBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQg KiAgICBfX3NyYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiB2b2lkICogIG1l bW1vdmUgICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNp emVfdCBfX24pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9p ZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXpl X3QgX19uKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICog IF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgbWVt Y21wICAoX19jb25zdCB2b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLAoJCQlzaXpl X3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25zdCB2 b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCgoKCgoKIApl eHRlcm4gY2hhciAqc3RyY3B5ICAoY2hhciAqICAgX19kZXN0LAoJCQkgIF9fY29uc3QgY2hhciAq ICAgX19zcmMpICB0aHJvdyAoKSAgOwogCmV4dGVybiBjaGFyICpzdHJuY3B5ICAoY2hhciAqICAg X19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIgKiAgIF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cg KCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnN0cmNhdCAgKGNoYXIgKiAgIF9fZGVzdCwKCQkJICBfX2Nv bnN0IGNoYXIgKiAgIF9fc3JjKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNhdCAg KGNoYXIgKiAgIF9fZGVzdCwKCQkJICAgX19jb25zdCBjaGFyICogICBfX3NyYywgc2l6ZV90IF9f bikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgc3RyY21wICAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgc3RybmNtcCAg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzdHJjb2xsICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv bnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qgc3RyeGZybSAgKGNo YXIgKiAgIF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hhciAqICAgX19zcmMsIHNpemVfdCBfX24p ICB0aHJvdyAoKSAgOwoKIyAxMDcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVy biBjaGFyICpfX3N0cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKZXh0ZXJu IGNoYXIgKnN0cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgogCgoKCgoK CiMgMTQzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgogCmV4dGVybiBjaGFyICpzdHJjaHIg IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIg KnN0cnJjaHIgIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgoKCgoK CgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX3JlamVjdCkgIHRocm93ICgpICA7CiAKCmV4dGVybiBzaXplX3Qgc3Ryc3BuICAoX19j b25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpICB0aHJvdyAoKSAgOwogCmV4 dGVybiBjaGFyICpzdHJwYnJrICAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19h Y2NlcHQpICB0aHJvdyAoKSAgOwogCmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIg Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpICB0aHJvdyAoKSAgOwoKCgoKCgoK CgogCmV4dGVybiBjaGFyICpzdHJ0b2sgIChjaGFyICogICBfX3MsCgkJCSAgX19jb25zdCBjaGFy ICogICBfX2RlbGltKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cnRva19yICAo Y2hhciAqICAgX19zLAoJCQkgICAgICBfX2NvbnN0IGNoYXIgKiAgIF9fZGVsaW0sCgkJCSAgICAg IGNoYXIgKiogICBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tf ciAgKGNoYXIgKiAgIF9fcywKCQkJICAgIF9fY29uc3QgY2hhciAqICAgX19kZWxpbSwKCQkJICAg IGNoYXIgKiogICBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCgojIDIwMyAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gIChfX2NvbnN0IGNoYXIgKl9f cykgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3RyZXJyb3IgIChpbnQgX19l cnJudW0pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAgKGludCBf X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRocm93ICgpICA7CmV4dGVy biBjaGFyICpzdHJlcnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICAodm9pZCAqICBf X3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQgYmNvcHkgIChfX2Nv bnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0LCBzaXplX3QgX19uKSAgdGhyb3cgKCkg IDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywgc2l6ZV90IF9fbikgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgYmNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0 IHZvaWQgKiAgX19zMiwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpp bmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu IGNoYXIgKnJpbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkgIDsK CiAKCmV4dGVybiBpbnQgX19mZnMgIChpbnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9f ICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgIChpbnQgX19pKSAgdGhyb3cgKCkgICBfX2F0dHJp YnV0ZV9fICgoY29uc3QpKTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKZXh0 ZXJuIGludCBzdHJjYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cm5jYXNlY21wICAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90IF9fbikgIHRocm93ICgp ICA7CgoKIyAyNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCgpleHRlcm4gY2hhciAq c3Ryc2VwICAoY2hhciAqKiAgIF9fc3RyaW5ncCwKCQkJICBfX2NvbnN0IGNoYXIgKiAgIF9fZGVs aW0pICB0aHJvdyAoKSAgOwoKCiMgMzE5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCiMg MzQ3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKfSAKCgojIDI2ICIvc29mdHdhcmUvdGhh bGlhL2gvc3RkdHlwZXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5ncy5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1s aW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIv dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhh LXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9h bHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog CgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42 Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1s aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK IyAyODMgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEt cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDIgMwoKCmV4dGVy biAiQyIgeyAKCiAKZXh0ZXJuIGludCBiY21wICAoX19jb25zdCB2b2lkICogIF9fczEsIF9fY29u c3Qgdm9pZCAqICBfX3MyLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQg YmNvcHkgIChfX2NvbnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0LCBzaXplX3QgX19u KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICogIF9fcywgc2l6ZV90 IF9fbikgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGZmcyAgKGludCBfX2kpICB0aHJvdyAo KSAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg IHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpyaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGlu dCBzdHJuY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAoJ CQkgICAgIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKfSAKCgojIDI3ICIvc29mdHdhcmUvdGhh bGlhL2gvc3RkdHlwZXMuaCIgMgoKCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKIyAxICIv dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhh dC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAK CgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog CgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkx LjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIv YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK IAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt Mi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvYWxw aGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoK IyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMgIi91c3Iv aW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVk aGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhh dC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS92YS1hbHBoYS5oIiAxIDMKIAoKIAoKCgoKIAoK CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBjaGFyICpfX2Jhc2U7CQkJIAogIGludCBfX29m ZnNldDsJCQkgCn0gX19nbnVjX3ZhX2xpc3Q7CgoKCgogCgoKIyAxMjggIi91c3IvbGliL2djYy1s aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDMK CiMgMzYgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p bmNsdWRlL3N0ZGFyZy5oIiAyIDMKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhh dC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgojIDIwMiAi L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv c3RkYXJnLmgiIDMKCgoKCiMgMzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoK IAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMSAzCiAKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoK CgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s aWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVm LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91 c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0 ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1s aW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2 OSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoK CgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt Mi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5 cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKIAoKCgoKCgoKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoK CgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdj cy0yLjkxLjY2L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt Mi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDEgMwogCgogCgoKCgogCgojIDI1ICIvdXNyL2xp Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS92YS1hbHBo YS5oIiAzCgoKIAoKCiMgMTI4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l Z2NzLTIuOTEuNjYvaW5jbHVkZS92YS1hbHBoYS5oIiAzCgojIDM2ICIvdXNyL2xpYi9nY2MtbGli L2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRhcmcuaCIgMiAzCgoj IDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu Y2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgoKIyAyMDIgIi91c3IvbGliL2djYy1saWIvYWxwaGEt cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgojIDQ4ICIv dXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCgoKCgoKCgojIDY3ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDk4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK c3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCgoKCgoKCgp0eXBlZGVmIHZv aWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9z OwojIDE4NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewog IGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIq IF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3Jp dGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5k OwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAg Y2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFy ICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1 Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f b2ZmX3QgICBfb2xkX29mZnNldDsgIAoKCiAgIAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAg CgogIF9JT19sb2NrX3QgKl9sb2NrOwoKCgoKCgoKCiAgX19vZmY2NF90ICAgX29mZnNldDsKICAg CiAgaW50IF91bnVzZWQyWzE2XTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVy biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9f RklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J T18yXzFfc3RkZXJyXzsKCgoKCgoKCgoKCgogCgogCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl YWRfZm4gICh2b2lkICogIF9fY29va2llLCBjaGFyICpfX2J1ZiwKCQkJCSAgICAgICBzaXplX3Qg X19uYnl0ZXMpICA7CgogCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAgKHZv aWQgKiAgX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCgkJCQkgICAgICBzaXplX3QgX19u KSAgOwoKIAoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAgKHZvaWQgKiAgX19jb29raWUs IF9fb2ZmX3QgICBfX3BvcywgaW50IF9fdykgIDsKCiAKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m biAgKHZvaWQgKiAgX19jb29raWUpICA7CgoKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJTEUgKikg IHRocm93ICgpICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICB0aHJvdyAoKSAg OwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgIChfSU9fRklMRSAqLCBpbnQpICB0aHJvdyAoKSAgOwoK CgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgdGhy b3cgKCkgIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgdGhyb3cg KCkgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAg OwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAo KSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93 ICgpICA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAo KSAgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkg IDsKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICogICwgY29u c3QgY2hhciAqICAsCgkJCSAgICAgX19nbnVjX3ZhX2xpc3QgLCBpbnQgKiAgKSAgdGhyb3cgKCkg IDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqICAsIGNvbnN0IGNoYXIgKiAg LAoJCQkgICAgICBfX2dudWNfdmFfbGlzdCApICB0aHJvdyAoKSAgOwpleHRlcm4gX19zc2l6ZV90 ICAgX0lPX3BhZG4gIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCAgKSAgdGhyb3cgKCkgIDsK ZXh0ZXJuIHNpemVfdCAgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90ICAp ICB0aHJvdyAoKSAgOwoKZXh0ZXJuIF9fb2ZmNjRfdCAgIF9JT19zZWVrb2ZmICAoX0lPX0ZJTEUg KiwgX19vZmY2NF90ICAsIGludCwgaW50KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIF9fb2ZmNjRfdCAg IF9JT19zZWVrcG9zICAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGludCkgIHRocm93ICgpICA7 CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICB0aHJvdyAo KSAgOwoKCn0KCgoKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCiAKCnR5cGVkZWYg X19vZmZfdCAgZnBvc190OwoKCgoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKCiAKCgoKCgoKCiAK CgoKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExMCAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwoKCgogCmV4dGVybiBGSUxFICpzdGRpbjsJCSAKZXh0ZXJuIEZJTEUgKnN0ZG91 dDsJCSAKZXh0ZXJuIEZJTEUgKnN0ZGVycjsJCSAKCgogCmV4dGVybiBpbnQgcmVtb3ZlICAoX19j b25zdCBjaGFyICpfX2ZpbGVuYW1lKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHJlbmFtZSAg KF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpICB0aHJvdyAoKSAgOwoK CiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICAodm9pZCkgIHRocm93ICgpICA7CgoKCgoKCgoKCgog CmV4dGVybiBjaGFyICp0bXBuYW0gIChjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVy biBjaGFyICp0bXBuYW1fciAgKGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKCgogCgoKCgoKCmV4 dGVybiBjaGFyICp0ZW1wbmFtICAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpf X3BmeCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBmY2xvc2UgIChGSUxFICpfX3N0cmVh bSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBmZmx1c2ggIChGSUxFICpfX3N0cmVhbSkgIHRo cm93ICgpICA7CgoKIApleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFt KSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKIApleHRlcm4gRklMRSAqZm9wZW4gIChfX2NvbnN0IGNo YXIgKiAgIF9fZmlsZW5hbWUsCgkJCSBfX2NvbnN0IGNoYXIgKiAgIF9fbW9kZXMpICB0aHJvdyAo KSAgOwogCmV4dGVybiBGSUxFICpmcmVvcGVuICAoX19jb25zdCBjaGFyICogICBfX2ZpbGVuYW1l LAoJCQkgICBfX2NvbnN0IGNoYXIgKiAgIF9fbW9kZXMsCgkJCSAgIEZJTEUgKiAgIF9fc3RyZWFt KSAgdGhyb3cgKCkgIDsKIyAxOTcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgog CmV4dGVybiBGSUxFICpmZG9wZW4gIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSAg dGhyb3cgKCkgIDsKCgojIDIyMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIAoKZXh0ZXJu IHZvaWQgc2V0YnVmICAoRklMRSAqICAgX19zdHJlYW0sIGNoYXIgKiAgIF9fYnVmKSAgdGhyb3cg KCkgIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAgKEZJTEUgKiAgIF9fc3RyZWFtLCBjaGFyICog ICBfX2J1ZiwKCQkJIGludCBfX21vZGVzLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgogCgpl eHRlcm4gdm9pZCBzZXRidWZmZXIgIChGSUxFICogICBfX3N0cmVhbSwgY2hhciAqICAgX19idWYs CgkJCSAgICBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGlu ZWJ1ZiAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IGZwcmlu dGYgIChGSUxFICogICBfX3N0cmVhbSwKCQkJIF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4u LikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBwcmludGYgIChfX2NvbnN0IGNoYXIgKiAgIF9f Zm9ybWF0LCAuLi4pICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgc3ByaW50ZiAgKGNoYXIgKiAg IF9fcywKCQkJIF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7Cgog CmV4dGVybiBpbnQgdmZwcmludGYgIChGSUxFICogICBfX3MsCgkJCSAgX19jb25zdCBjaGFyICog ICBfX2Zvcm1hdCwKCQkJICBfX2dudWNfdmFfbGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwogCmV4 dGVybiBpbnQgdnByaW50ZiAgKF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsCgkJCSBfX2dudWNf dmFfbGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgdnNwcmludGYgIChjaGFy ICogICBfX3MsCgkJCSAgX19jb25zdCBjaGFyICogICBfX2Zvcm1hdCwKCQkJICBfX2dudWNfdmFf bGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBzbnByaW50ZiAgKGNoYXIg KiAgIF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgIF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQs IC4uLikgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgIChjaGFyICogICBfX3MsIHNp emVfdCBfX21heGxlbiwKCQkJICAgICBfX2NvbnN0IGNoYXIgKiAgIF9fZm9ybWF0LAoJCQkgICAg IF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKZXh0ZXJuIGludCB2c25wcmludGYgIChj aGFyICogICBfX3MsIHNpemVfdCBfX21heGxlbiwKCQkJICAgX19jb25zdCBjaGFyICogICBfX2Zv cm1hdCwKCQkJICAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCiMgMzAyICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVybiBpbnQgZnNjYW5mICAoRklMRSAqICAgX19z dHJlYW0sCgkJCV9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7CiAK ZXh0ZXJuIGludCBzY2FuZiAgKF9fY29uc3QgY2hhciAqICAgX19mb3JtYXQsIC4uLikgIHRocm93 ICgpICA7CiAKZXh0ZXJuIGludCBzc2NhbmYgIChfX2NvbnN0IGNoYXIgKiAgIF9fcywKCQkJX19j b25zdCBjaGFyICogICBfX2Zvcm1hdCwgLi4uKSAgdGhyb3cgKCkgIDsKCiMgMzMwICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVybiBpbnQgZmdldGMgIChGSUxFICpfX3N0cmVhbSkg IHRocm93ICgpICA7CmV4dGVybiBpbnQgZ2V0YyAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkg IDsKCiAKZXh0ZXJuIGludCBnZXRjaGFyICAodm9pZCkgIHRocm93ICgpICA7CgogCgoKCgogCmV4 dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0 ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICAodm9pZCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJu IGludCBmZ2V0Y191bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKIApl eHRlcm4gaW50IGZwdXRjICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwpl eHRlcm4gaW50IHB1dGMgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7Cgog CmV4dGVybiBpbnQgcHV0Y2hhciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKIAoKCgoKIApleHRl cm4gaW50IGZwdXRjX3VubG9ja2VkICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICB0aHJvdyAo KSAgOwoKCgogCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAgKGludCBfX2MsIEZJTEUgKl9fc3Ry ZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkICAoaW50IF9fYykg IHRocm93ICgpICA7CgoKCgogCmV4dGVybiBpbnQgZ2V0dyAgKEZJTEUgKl9fc3RyZWFtKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdXR3ICAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pICB0 aHJvdyAoKSAgOwoKCgogCmV4dGVybiBjaGFyICpmZ2V0cyAgKGNoYXIgKiAgIF9fcywgaW50IF9f biwKCQkJIEZJTEUgKiAgIF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKCmV4dGVybiBj aGFyICpnZXRzICAoY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgojIDQyMCAiL3Vzci9pbmNsdWRl L3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZwdXRzICAoX19jb25zdCBjaGFyICogICBfX3Ms CgkJICAgICAgIEZJTEUgKiAgIF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKZXh0ZXJu IGludCBwdXRzICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGlu dCB1bmdldGMgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKIApleHRl cm4gc2l6ZV90IGZyZWFkICAodm9pZCAqICAgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgc2l6 ZV90IF9fbiwgRklMRSAqICAgX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qg ZndyaXRlICAoX19jb25zdCB2b2lkICogICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgc2l6 ZV90IF9fbiwgRklMRSAqICAgX19zKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXplX3QgZnJl YWRfdW5sb2NrZWQgICh2b2lkICogICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJCSAgIHNpemVf dCBfX24sIEZJTEUgKiAgIF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHNpemVfdCBmd3Jp dGVfdW5sb2NrZWQgIChfX2NvbnN0IHZvaWQgKiAgIF9fcHRyLAoJCQkJICAgIHNpemVfdCBfX3Np emUsIHNpemVfdCBfX24sCgkJCQkgICAgRklMRSAqICAgX19zdHJlYW0pICB0aHJvdyAoKSAgOwoK CgogCmV4dGVybiBpbnQgZnNlZWsgIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGlu dCBfX3doZW5jZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsICAoRklMRSAq X19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lkIHJld2luZCAgKEZJTEUgKl9fc3Ry ZWFtKSAgdGhyb3cgKCkgIDsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCmV4dGVy biBpbnQgZmdldHBvcyAgKEZJTEUgKiAgIF9fc3RyZWFtLAoJCQkgZnBvc190ICogICBfX3Bvcykg IHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBmc2V0cG9zICAoRklMRSAqX19zdHJlYW0sIF9fY29u c3QgZnBvc190ICpfX3BvcykgIHRocm93ICgpICA7CiMgNTE5ICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMwoKCiMgNTI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCiAKZXh0ZXJuIHZvaWQgY2xl YXJlcnIgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBmZW9mICAo RklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgZmVycm9yICAoRklMRSAq X19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg IChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAg KEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQg IChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgcGVycm9yICAo X19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7 CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4 dGVybiBpbnQgZmlsZW5vICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy biBpbnQgZmlsZW5vX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgoK CiAKZXh0ZXJuIEZJTEUgKnBvcGVuICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcGNsb3NlICAoRklMRSAq X19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gY2hhciAqY3Rlcm1pZCAgKGNoYXIg Kl9fcykgIHRocm93ICgpICA7CgoKCgoKCgoKCiMgNjAzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MwoKCgoKIAoKIApleHRlcm4gdm9pZCBmbG9ja2ZpbGUgIChGSUxFICpfX3N0cmVhbSkgIHRocm93 ICgpICA7CgogCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgIChGSUxFICpfX3N0cmVhbSkgIHRo cm93ICgpICA7CgoKCgoKCgoKCgogCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAx IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKaW5saW5lICBpbnQKdnByaW50ZiAo X19jb25zdCBjaGFyICogICBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSB0aHJvdyAoKSAK ewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgogCmlubGluZSAg aW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7 Cn0KCgoKIAppbmxpbmUgIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKSAK ewogIHJldHVybiAoKCBfX2ZwICktPl9JT19yZWFkX3B0ciA+PSAoIF9fZnAgKS0+X0lPX3JlYWRf ZW5kID8gX191ZmxvdyAoIF9fZnAgKSA6ICoodW5zaWduZWQgY2hhciAqKSAoIF9fZnAgKS0+X0lP X3JlYWRfcHRyKyspIDsKfQoKIAppbmxpbmUgIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0 aHJvdyAoKSAKewogIHJldHVybiAoKCBzdGRpbiApLT5fSU9fcmVhZF9wdHIgPj0gKCBzdGRpbiAp LT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93ICggc3RkaW4gKSA6ICoodW5zaWduZWQgY2hhciAqKSAo IHN0ZGluICktPl9JT19yZWFkX3B0cisrKSA7Cn0KCgoKIAppbmxpbmUgIGludApwdXRjaGFyIChp bnQgX19jKSB0aHJvdyAoKSAKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoK CiAKaW5saW5lICBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKSAKewogIHJldHVybiAoKCggIF9fc3RyZWFtICktPl9JT193cml0ZV9wdHIgPj0gKCAg X19zdHJlYW0gKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIF9fc3RyZWFtICwgKHVu c2lnbmVkIGNoYXIpICggX19jICkpIDogKHVuc2lnbmVkIGNoYXIpICgqKCAgX19zdHJlYW0gKS0+ X0lPX3dyaXRlX3B0cisrID0gKCBfX2MgKSkpIDsKfQoKCgoKIAppbmxpbmUgIGludApwdXRjX3Vu bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgo ICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyID49ICggIF9fc3RyZWFtICktPl9JT193cml0ZV9l bmQpID8gX19vdmVyZmxvdyAoICBfX3N0cmVhbSAsICh1bnNpZ25lZCBjaGFyKSAoIF9fYyApKSA6 ICh1bnNpZ25lZCBjaGFyKSAoKiggIF9fc3RyZWFtICktPl9JT193cml0ZV9wdHIrKyA9ICggX19j ICkpKSA7Cn0KCiAKaW5saW5lICBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cg KCkgCnsKICByZXR1cm4gKCgoICBzdGRvdXQgKS0+X0lPX3dyaXRlX3B0ciA+PSAoICBzdGRvdXQg KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIHN0ZG91dCAsICh1bnNpZ25lZCBjaGFy KSAoIF9fYyApKSA6ICh1bnNpZ25lZCBjaGFyKSAoKiggIHN0ZG91dCApLT5fSU9fd3JpdGVfcHRy KysgPSAoIF9fYyApKSkgOwp9CgoKCgoKCgoKCgoKCgoKIAppbmxpbmUgIGludApmZW9mX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgoIF9fc3RyZWFtICkt Pl9mbGFncyAmIDB4MTAgKSAhPSAwKSA7Cn0KCiAKaW5saW5lICBpbnQKZmVycm9yX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgoIF9fc3RyZWFtICktPl9m bGFncyAmIDB4MjAgKSAhPSAwKSA7Cn0KCgoKCgoKIAoKIyAxNDkgIi91c3IvaW5jbHVkZS9iaXRz L3N0ZGlvLmgiIDMKCgojIDE2NSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwoKCiAKCiMg NjMxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCn0gCgoKCgojIDM2ICIvc29mdHdhcmUv dGhhbGlhL2gvc3RkdHlwZXMuaCIgMgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgc2hv cnQgICBTSE9SVDsKdHlwZWRlZiBsb25nICAgIExPTkc7CnR5cGVkZWYgaW50ICAgICBJTlQ7Cgp0 eXBlZGVmIGZsb2F0ICAgRkxPQVQ7CiAKCgoKCgoKdHlwZWRlZiBkb3VibGUgIERPVUJMRTsKCgoK CnR5cGVkZWYgRkxPQVQgICBSRUFMOwoKCnR5cGVkZWYgZmxvYXQgICBNQVRIOyAgCgoKCgogCgoK CgoKIAoKCgoKCiAKCgoKdHlwZWRlZiBzaG9ydCAgIEJPT0xFQU47CnR5cGVkZWYgdm9pZCAqICBQ VFI7CnR5cGVkZWYgY2hhciAqICBDVExfRkxBRzsKdHlwZWRlZiBjaGFyICAgIENIQVI7CgogCgoK IAoKCgoKCgoKIAoKIAoKCgoKCgoKIAoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFVf U0hPUlQ7CiAKCiAKCgoKdHlwZWRlZiBpbnQgSU5ERVg7CnR5cGVkZWYgY2hhciBOQU1FWzQwXTsK IAoKCiAKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBVX0NIQVI7CgoKdHlwZWRlZiB2b2lkICAg ICgqRlVOQykoIHZvaWQpOwp0eXBlZGVmIGNoYXIgICAgU1RSSU5HWzI1Nl07CgoKCnR5cGVkZWYg c3RydWN0IF9WRUNUT1IKewogICBSRUFMIHgsIHksIHo7Cn0gVkVDVE9SOwoKdHlwZWRlZiBWRUNU T1IgIFBPSU5UOwp0eXBlZGVmIFZFQ1RPUiBWRVJURVg7CgojIDE2MyAiL3NvZnR3YXJlL3RoYWxp YS9oL3N0ZHR5cGVzLmgiCgoKdHlwZWRlZiBzdHJ1Y3QgX1ZFQ1Q0RAp7CiAgIFJFQUwgeCwgeSwg eiwgdzsKfSBWRUNUNEQ7Cgp0eXBlZGVmIHN0cnVjdCBfVkVSVDJECnsKICAgIFJFQUwgdSx2Owp9 IFZFUlQyRDsKCnR5cGVkZWYgc3RydWN0IF9QT0lOVDJECnsKICAgIFJFQUwgeCwgeTsKfSBQT0lO VDJEOwoKdHlwZWRlZiBSRUFMIE1BVFJJWFs0XVs0XTsKICAgIAoKIAoKCgp0eXBlZGVmIHVuaW9u IHsKICAgIFJFQUwgICAgYWxsWzE2XTsKICAgIFJFQUwgICAgZWxlbVs0XVs0XTsKfSBUUkFOU0ZP Uk07CgoKIAoKCmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIFZFQ1RPUiApIHsgcmV0dXJu ICJWRUNUT1IiOyB9Owp9OwppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBQT0lO VDJEICYgKSB7IHJldHVybiAiUE9JTlQyRCI7IH07CgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv c3lzcHJvdG9zLnAiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiAi QyIgeyAKCgoKCiAKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn Y3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli L2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0 LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4 OCAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBo YS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAi L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv c3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQt bGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKIAoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgog CgoKCgoKIAoKCgoKCgoKIyA1OSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCgojIDQyICIv dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIF9fY2xv Y2tfdCBjbG9ja190OwoKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyA4OSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCiAKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwkJ CSAKICBpbnQgdG1fbWluOwkJCSAKICBpbnQgdG1faG91cjsJCQkgCiAgaW50IHRtX21kYXk7CQkJ IAogIGludCB0bV9tb247CQkJIAogIGludCB0bV95ZWFyOwkJCSAKICBpbnQgdG1fd2RheTsJCQkg CiAgaW50IHRtX3lkYXk7CQkJIAogIGludCB0bV9pc2RzdDsJCQkgCgoKICBsb25nIGludCB0bV9n bXRvZmY7CQkgCiAgX19jb25zdCBjaGFyICp0bV96b25lOwkgCgoKCgp9OwoKCiAKCmV4dGVybiBj bG9ja190IGNsb2NrICAodm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiB0aW1lX3QgdGltZSAg KHRpbWVfdCAqX190aW1lcikgIHRocm93ICgpICA7CgogCmV4dGVybiBkb3VibGUgZGlmZnRpbWUg ICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApICB0aHJvdyAoKSAgCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gdGltZV90IG1rdGltZSAgKHN0cnVjdCB0 bSAqX190cCkgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgIChjaGFy ICogICBfX3MsIHNpemVfdCBfX21heHNpemUsCgkJCSAgICAgX19jb25zdCBjaGFyICogICBfX2Zv cm1hdCwKCQkJICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqICAgX190cCkgIHRocm93ICgpICA7CgoK CgoKCgoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3Rp bWVyKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAgKF9fY29u c3QgdGltZV90ICpfX3RpbWVyKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gc3RydWN0IHRtICpf X2dtdGltZV9yICAoX19jb25zdCB0aW1lX3QgKiAgIF9fdGltZXIsCgkJCQkgICBzdHJ1Y3QgdG0g KiAgIF9fdHApICB0aHJvdyAoKSAgOwpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAgKF9fY29u c3QgdGltZV90ICogICBfX3RpbWVyLAoJCQkJIHN0cnVjdCB0bSAqICAgX190cCkgIHRocm93ICgp ICA7CgogCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAgKF9fY29uc3QgdGltZV90ICog ICBfX3RpbWVyLAoJCQkJICAgIHN0cnVjdCB0bSAqICAgX190cCkgIHRocm93ICgpICA7CgoKIAoK ZXh0ZXJuIGNoYXIgKmFzY3RpbWUgIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgp ICA7CgogCmV4dGVybiBjaGFyICpjdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSAgdGhy b3cgKCkgIDsKCgogCgogCgpleHRlcm4gY2hhciAqYXNjdGltZV9yICAoX19jb25zdCBzdHJ1Y3Qg dG0gKiAgIF9fdHAsCgkJCSAgICAgY2hhciAqICAgX19idWYpICB0aHJvdyAoKSAgOwoKIApleHRl cm4gY2hhciAqY3RpbWVfciAgKF9fY29uc3QgdGltZV90ICogICBfX3RpbWVyLAoJCQkgICBjaGFy ICogICBfX2J1ZikgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwkg CmV4dGVybiBpbnQgX19kYXlsaWdodDsJCSAKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CSAK CgoKIApleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKIAoKZXh0ZXJuIHZvaWQgdHpzZXQgICh2b2lk KSAgdGhyb3cgKCkgIDsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRp bWV6b25lOwoKCgogCgpleHRlcm4gaW50IHN0aW1lICAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikg IHRocm93ICgpICA7CgoKCiAKCgoKCgoKIAoKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gIChzdHJ1 Y3QgdG0gKl9fdHApICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdGltZV90IHRpbWVsb2NhbCAgKHN0 cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgZHlzaXplICAoaW50IF9f eWVhcikgIHRocm93ICgpICA7CgoKCgogCmV4dGVybiBpbnQgbmFub3NsZWVwICAoX19jb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCgkJCSAgIHN0cnVjdCB0aW1lc3BlYyAq X19yZW1haW5pbmcpICB0aHJvdyAoKSAgOwoKCgojIDI2NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MwoKCiMgMjc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCn0gCgoKCgojIDI0ICIvdXNyL2lu Y2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDQzICIvdXNyL2luY2x1ZGUvYml0cy90aW1l LmgiIDMKCgoKCgoKCgogCgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsJ CSAKICAgIF9fdGltZV90IHR2X3VzZWM7CQkgCiAgfTsKCgojIDI4ICIvdXNyL2luY2x1ZGUvc3lz L3RpbWUuaCIgMiAzCgoKCmV4dGVybiAiQyIgeyAKCiAKCgoKCgoKCgoKCiAKCnN0cnVjdCB0aW1l em9uZQogIHsKICAgIGludCB0el9taW51dGVzd2VzdDsJCSAKICAgIGludCB0el9kc3R0aW1lOwkJ IAogIH07CgogCgoKCgpleHRlcm4gaW50IGdldHRpbWVvZmRheSAgKHN0cnVjdCB0aW1ldmFsICpf X3R2LAoJCQkgICAgICBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopICB0aHJvdyAoKSAgOwoKIAoKZXh0 ZXJuIGludCBzZXR0aW1lb2ZkYXkgIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFsICpfX3R2LAoJCQkg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAqX190eikgIHRocm93ICgpICA7CgogCgoKCmV4 dGVybiBpbnQgYWRqdGltZSAgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVsdGEsCgkJCSBz dHJ1Y3QgdGltZXZhbCAqX19vbGRkZWx0YSkgIHRocm93ICgpICA7CgoKIAplbnVtIF9faXRpbWVy X3doaWNoCiAgewogICAgIAogICAgSVRJTUVSX1JFQUwgPSAwLAoKICAgICAKICAgIElUSU1FUl9W SVJUVUFMID0gMSwKCiAgICAgCgogICAgSVRJTUVSX1BST0YgPSAyCgogIH07CgogCgpzdHJ1Y3Qg aXRpbWVydmFsCiAgewogICAgIAogICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAg CiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKICB9OwoKIAoKZXh0ZXJuIGludCBnZXRpdGlt ZXIgIChlbnVtIF9faXRpbWVyX3doaWNoIF9fd2hpY2gsCgkJCSAgIHN0cnVjdCBpdGltZXJ2YWwg Kl9fdmFsdWUpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgc2V0aXRpbWVyICAoZW51bSBf X2l0aW1lcl93aGljaCBfX3doaWNoLAoJCQkgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9f bmV3LAoJCQkgICBzdHJ1Y3QgaXRpbWVydmFsICpfX29sZCkgIHRocm93ICgpICA7CgogCgpleHRl cm4gaW50IHV0aW1lcyAgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3QgdGltZXZhbCBfX3R2 cFsyXSkgIHRocm93ICgpICA7CgoKIAoKCgoKCgoKCiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWUuaCIgMwoKIyAxNDIgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCgp9IAoKCiMgNzAgIi9z b2Z0d2FyZS90aGFsaWEvaC9zeXNwcm90b3MucCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCgog CgoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgoKCgogCgoKIAoKCgoKIAoK CiAKCgogCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoK IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoK IAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKCiAKCgogCgoKIAoKCgoKCiMgMTc1 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCiAKCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoj IDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvYWxwaGEt cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoK CgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45 MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz LTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2Nj LWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMK CgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgv ZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxp Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkx LjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxOTkg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKIyAyMzEgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwoKCgoKCgoKCgogCgoKCgoKCiAKZXh0ZXJuIGludCBhY2Nlc3MgIChfX2NvbnN0IGNoYXIg Kl9fbmFtZSwgaW50IF9fdHlwZSkgIHRocm93ICgpICA7CgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoK CgogCgoKCgpleHRlcm4gX19vZmZfdCBfX2xzZWVrICAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZz ZXQsIGludCBfX3doZW5jZSkgIHRocm93ICgpICA7CgpleHRlcm4gX19vZmZfdCBsc2VlayAgKGlu dCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpICB0aHJvdyAoKSAgOwojIDI4 OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKCgoKIApleHRlcm4gaW50IF9fY2xvc2UgIChp bnQgX19mZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgY2xvc2UgIChpbnQgX19mZCkgIHRocm93 ICgpICA7CgogCgpleHRlcm4gc3NpemVfdCAgX19yZWFkICAoaW50IF9fZmQsIHZvaWQgKiAgX19i dWYsIHNpemVfdCBfX25ieXRlcykgIHRocm93ICgpICA7CmV4dGVybiBzc2l6ZV90ICByZWFkICAo aW50IF9fZmQsIHZvaWQgKiAgX19idWYsIHNpemVfdCBfX25ieXRlcykgIHRocm93ICgpICA7Cgog CmV4dGVybiBzc2l6ZV90ICBfX3dyaXRlICAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqICBfX2J1 Ziwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CmV4dGVybiBzc2l6ZV90ICB3cml0ZSAgKGludCBf X2ZkLCBfX2NvbnN0IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIyAz NDMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCiAKCgoKZXh0ZXJuIGludCBwaXBlICAoaW50 IF9fcGlwZWRlc1syXSkgIHRocm93ICgpICA7CgogCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQg YWxhcm0gICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSAgdGhyb3cgKCkgIDsKCiAKCgoKCgoKZXh0 ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAgKHVuc2lnbmVkIGludCBfX3NlY29uZHMpICB0aHJvdyAo KSAgOwoKCiAKCgoKZXh0ZXJuIHVuc2lnbmVkIGludCB1YWxhcm0gICh1bnNpZ25lZCBpbnQgX192 YWx1ZSwKCQkJCSB1bnNpZ25lZCBpbnQgX19pbnRlcnZhbCkgIHRocm93ICgpICA7CgogCgpleHRl cm4gdm9pZCB1c2xlZXAgICh1bnNpZ25lZCBpbnQgX191c2Vjb25kcykgIHRocm93ICgpICA7CgoK CiAKCmV4dGVybiBpbnQgcGF1c2UgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQg Y2hvd24gIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLAoJCSAgICAgICBf X2dpZF90IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmY2hvd24gIChpbnQg X19mZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCiAK CmV4dGVybiBpbnQgbGNob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25l ciwKCQkJX19naWRfdCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IGNoZGly ICAoX19jb25zdCBjaGFyICpfX3BhdGgpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmY2hk aXIgIChpbnQgX19mZCkgIHRocm93ICgpICA7CgoKIAoKCgoKCgpleHRlcm4gY2hhciAqZ2V0Y3dk ICAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgogCgoK ZXh0ZXJuIGNoYXIgKmdldHdkICAoY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy biBpbnQgZHVwICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IGR1cDIgIChp bnQgX19mZCwgaW50IF9fZmQyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKipfX2Vudmly b247CgoKCgoKIAoKZXh0ZXJuIGludCBleGVjdmUgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hh ciAqX19jb25zdCBfX2FyZ3ZbXSwKCQkJY2hhciAqX19jb25zdCBfX2VudnBbXSkgIHRocm93ICgp ICA7CgoKCgoKCgoKCgogCmV4dGVybiBpbnQgZXhlY3YgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg Y2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGV4ZWNs ZSAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pICB0aHJv dyAoKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjbCAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2Nv bnN0IGNoYXIgKl9fYXJnLCAuLi4pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjdnAg IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgIHRocm93ICgp ICA7CgogCgoKZXh0ZXJuIGludCBleGVjbHAgIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25z dCBjaGFyICpfX2FyZywgLi4uKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gaW50IG5pY2UgIChp bnQgX19pbmMpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiB2b2lkIF9leGl0ICAoaW50IF9fc3Rh dHVzKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAplbnVt CiAgewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9J TlBVVCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBF X0JVRiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAg X1BDX1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBf UENfUFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUwoK ICB9OwoKIAplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAg ICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoK ICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09O VFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAg IF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5D SFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpF RF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVN TE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04s CgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0Nf U0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0Nf QUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVS X01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9T Q19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBf U0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVF VUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKICAgICAKCiAgICBfU0NfQkNfQkFTRV9NQVgs CgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNf U1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xB U1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBf U0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9W RVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9G T1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1ND XzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19Q SUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAg X1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0Nf UElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9T Q19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9N LAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKICAgICAKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19U SFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1ND X0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlf TkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1ND X1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhS RUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1ND X1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJ TkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BS T1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNT T1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMs CgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFT U19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lP TiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hP UEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwK CiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBH MiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NI QVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lO VF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JE X0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpF X01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NI UlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19V SU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9T Q19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAg ICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoK CiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgog ICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAg IF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BF Tl9SRUFMVElNRV9USFJFQURTCgogIH07CgoKCgogCmVudW0KICB7CiAgICBfQ1NfUEFUSAkJCSAK CgojIDM3MCAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwoKCiMgNDA2ICIvdXNyL2lu Y2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCgogIH07CgojIDQ5NyAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAyIDMKCgogCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAgKF9fY29uc3QgY2hhciAqX19w YXRoLCBpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29u ZiAgKGludCBfX2ZkLCBpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50 IHN5c2NvbmYgIChpbnQgX19uYW1lKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXplX3QgY29u ZnN0ciAgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAg OwoKCgogCmV4dGVybiBfX3BpZF90IF9fZ2V0cGlkICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVy biBfX3BpZF90IGdldHBpZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gX19waWRfdCBn ZXRwcGlkICAodm9pZCkgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAg KHZvaWQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCiAKZXh0ZXJuIF9fcGlkX3QgX19nZXRwZ2lkICAo X19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CgoKCgoKIAoKCmV4dGVybiBpbnQgX19zZXRwZ2lk ICAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50 IHNldHBnaWQgIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgIHRocm93ICgpICA7CgoK IAoKCgoKCgoKCgoKCiAKCmV4dGVybiBpbnQgc2V0cGdycCAgKHZvaWQpICB0aHJvdyAoKSAgOwoK IyA1NzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCgogCgoKZXh0ZXJuIF9fcGlkX3Qgc2V0 c2lkICAodm9pZCkgIHRocm93ICgpICA7CgoKCgoKCiAKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlkICAo dm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBfX3VpZF90IGdldGV1aWQgICh2b2lkKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICAodm9pZCkgIHRocm93ICgpICA7Cgog CmV4dGVybiBfX2dpZF90IGdldGVnaWQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4g aW50IGdldGdyb3VwcyAgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pICB0aHJvdyAoKSAg OwoKCgoKCgogCgoKCmV4dGVybiBpbnQgc2V0dWlkICAoX191aWRfdCBfX3VpZCkgIHRocm93ICgp ICA7CgoKIAoKZXh0ZXJuIGludCBzZXRyZXVpZCAgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9f ZXVpZCkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBzZXRldWlkICAoX191aWRfdCBfX3Vp ZCkgIHRocm93ICgpICA7CgoKIAoKCgpleHRlcm4gaW50IHNldGdpZCAgKF9fZ2lkX3QgX19naWQp ICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgc2V0cmVnaWQgIChfX2dpZF90IF9fcmdpZCwg X19naWRfdCBfX2VnaWQpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc2V0ZWdpZCAgKF9f Z2lkX3QgX19naWQpICB0aHJvdyAoKSAgOwoKCgogCgoKZXh0ZXJuIF9fcGlkX3QgX19mb3JrICAo dm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBfX3BpZF90IGZvcmsgICh2b2lkKSAgdGhyb3cgKCkg IDsKCgogCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICAodm9pZCkgIHRocm93ICgpICA7CgoKCiAK CmV4dGVybiBjaGFyICp0dHluYW1lICAoaW50IF9fZmQpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJu IGludCB0dHluYW1lX3IgIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg IHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGlzYXR0eSAgKGludCBfX2ZkKSAgdGhyb3cgKCkg IDsKCgogCgpleHRlcm4gaW50IHR0eXNsb3QgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKIApleHRl cm4gaW50IGxpbmsgIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSAg dGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgc3ltbGluayAgKF9fY29uc3QgY2hhciAqX19mcm9t LCBfX2NvbnN0IGNoYXIgKl9fdG8pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgcmVhZGxp bmsgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgIHRo cm93ICgpICA7CgoKIApleHRlcm4gaW50IHVubGluayAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAg dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBybWRpciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAg dGhyb3cgKCkgIDsKCgogCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAgKGludCBfX2ZkKSAgdGhy b3cgKCkgIDsKCiAKZXh0ZXJuIGludCB0Y3NldHBncnAgIChpbnQgX19mZCwgX19waWRfdCBfX3Bn cnBfaWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICAodm9pZCkgIHRo cm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4gaW50IHNldGxvZ2luICAoX19jb25zdCBjaGFyICpf X25hbWUpICB0aHJvdyAoKSAgOwoKCgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgpleHRl cm4gY2hhciAqb3B0YXJnOwoKIAoKCgoKCgoKCgoKCmV4dGVybiBpbnQgb3B0aW5kOwoKIAoKCmV4 dGVybiBpbnQgb3B0ZXJyOwoKIAoKZXh0ZXJuIGludCBvcHRvcHQ7CgojIDEwMiAiL3Vzci9pbmNs dWRlL2dldG9wdC5oIiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpleHRlcm4g aW50IGdldG9wdCAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgKl9fYXJndiwgY29uc3QgY2hhciAq X19zaG9ydG9wdHMpOwoKCgoKIyAxNTEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwoKIyAxNjAg Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwoKCgp9CgoKIAoKCgojIDcyNCAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAyIDMKCgoKCgoKIAoKCmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgIChjaGFyICpf X25hbWUsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHNldGhvc3Ru YW1lICAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7Cgog CgpleHRlcm4gaW50IHNldGhvc3RpZCAgKGxvbmcgaW50IF9faWQpICB0aHJvdyAoKSAgOwoKCiAK CgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikg IHRocm93ICgpICA7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAgKF9fY29uc3QgY2hhciAqX19u YW1lLCBzaXplX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmc3luYyAgKGlu dCBfX2ZkKSAgdGhyb3cgKCkgIDsKCgogCgoKZXh0ZXJuIGludCB2aGFuZ3VwICAodm9pZCkgIHRo cm93ICgpICA7CgogCmV4dGVybiBpbnQgcmV2b2tlICAoX19jb25zdCBjaGFyICpfX2ZpbGUpICB0 aHJvdyAoKSAgOwoKCiAKCgoKCmV4dGVybiBpbnQgcHJvZmlsICAodW5zaWduZWQgc2hvcnQgaW50 ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCgkJCXNpemVfdCBfX29mZnNldCwgdW5z aWduZWQgaW50IF9fc2NhbGUpICB0aHJvdyAoKSAgOwoKCiAKCgpleHRlcm4gaW50IGFjY3QgIChf X2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IGNocm9vdCAg KF9fY29uc3QgY2hhciAqX19wYXRoKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBjaGFyICpnZXR1 c2Vyc2hlbGwgICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICAo dm9pZCkgIHRocm93ICgpICA7ICAKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICAodm9pZCkgIHRo cm93ICgpICA7ICAKCgogCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAgKF9fY29uc3QgY2hhciAqX19w cm9tcHQpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBpbnQgZGFlbW9uICAoaW50IF9fbm9jaGRp ciwgaW50IF9fbm9jbG9zZSkgIHRocm93ICgpICA7CgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50IGdl dGhvc3RpZCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN5bmMgICh2b2lkKSAg dGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50IF9fZ2V0cGFnZXNpemUgICh2b2lkKSAgdGhyb3cg KCkgIDsKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAKCmV4 dGVybiBpbnQgdHJ1bmNhdGUgIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0 aCkgIHRocm93ICgpICA7CiMgODI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKCgogCmV4 dGVybiBpbnQgX19mdHJ1bmNhdGUgIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkgIHRocm93 ICgpICA7CgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3Ro KSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCgoKCiAKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAg KHZvaWQpICB0aHJvdyAoKSAgOwoKCgoKCgogCgpleHRlcm4gaW50IGJyayAgKHZvaWQgKiAgX19h ZGRyKSAgdGhyb3cgKCkgIDsKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91 c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0 ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYWxwaGEt cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRl ZiBsb25nIGludCBwdHJkaWZmX3Q7CgoKCgoKCgoKCiAKCgoKCiAKCiAKCiMgMTkwICIvdXNyL2xp Yi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2Nj LWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMK CgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4 NjMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKIAoKCgpleHRlcm4gdm9pZCAqICBfX3Ni cmsgIChwdHJkaWZmX3QgX19kZWx0YSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkICogIHNicmsg IChwdHJkaWZmX3QgX19kZWx0YSkgIHRocm93ICgpICA7CgoKCgogCgoKCgoKCgoKCmV4dGVybiBs b25nIGludCBzeXNjYWxsICAobG9uZyBpbnQgX19zeXNubywgLi4uKSAgdGhyb3cgKCkgIDsKCgoK CgogCgoKCiAKCgoKCgoKCgoKZXh0ZXJuIGludCBsb2NrZiAgKGludCBfX2ZkLCBpbnQgX19jbWQs IF9fb2ZmX3QgX19sZW4pICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKCgoKCiMgOTQwICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKCgoKIAoKZXh0ZXJuIGludCBmZGF0YXN5bmMgIChpbnQgX19maWxk ZXMpICB0aHJvdyAoKSAgOwoKCgogCgojIDk2OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoK CiAKCiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCgoKCiAKCiAKCgoKCgoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJCXZv aWQgKCpfX3BhcmVudCkgKHZvaWQpLAoJCQkJdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgIHRocm93 ICgpICA7CgoKfSAKCgojIDcxICIvc29mdHdhcmUvdGhhbGlhL2gvc3lzcHJvdG9zLnAiIDIKCgp2 b2lkIF9jbGVhbnVwICh2b2lkKTsKIAoKIAoKCmludCBmbG9jayhpbnQsIGludCk7CgogCmludCBC U0RnZXRwZ3JwKGludCBwaWQpOwoKCn07CgoKIyAyMDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0 eXBlcy5oIiAyCgoKCgoKCgoKCgoKCgoKCgojIDIyICJucmh5L05SSFlfQWNjZXNzLmMiIDIKCiMg MSAiaC9QbHVnaW5UZW1wbGF0ZS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAK IAoKY2xhc3MgUGx1Z2luQ2xhc3MgewpwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgICpH ZXROYW1lICAgICgpID0gMDsgIAogICAgdmlydHVhbCBjb25zdCBjaGFyICAqR2V0QWxpYXNlcyAo KSB7IHJldHVybiAiIjsgfQogICAgdmlydHVhbCB+UGx1Z2luQ2xhc3MgICAgICAgICAgICAoKSB7 fTsKfTsKCiAKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFBsdWdpbkVudHJ5OwoKIAogCiAKIAoK IAogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUGx1Z2luVGFibGUgewog ICAgZnJpZW5kIGNsYXNzIFBsdWdpbkVudHJ5PFQ+Owpwcml2YXRlOgogICAgCiAgICBzdGF0aWMg VCAqKnRhYmxlOwogICAgc3RhdGljIGludCBtYXhFbnRyaWVzOwogICAgc3RhdGljIGludCBuZXh0 RW50cnk7CiAgICBzdGF0aWMgaW50IG51bUVudHJpZXM7CiAgICBzdGF0aWMgQk9PTEVBTiBjaGVj a1RhYmxlU2l6ZSAgICAgICAoKTsKCnB1YmxpYzoKICAgIAogICAgc3RhdGljIGludCBHZXRGaXJz dEluZGV4ICAgICAgICAgICAgKCkgeyByZXR1cm4gR2V0TmV4dEluZGV4ICgwKTsgfQogICAgc3Rh dGljIGludCBHZXROZXh0SW5kZXggICAgICAgICAgICAgKGludCk7CiAgICBzdGF0aWMgaW50IEdl dE51bUFjdGl2ZUVudHJpZXMgICAgICAoKTsKICAgIHN0YXRpYyBpbnQgR2V0TmV4dEluZGV4ICAg ICAgICAgICAgIChjb25zdCBjaGFyICosIGludCk7CiAgICBzdGF0aWMgaW50IEdldEluZGV4ICAg ICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKTsKICAgIHN0YXRpYyBpbnQgR2V0RXhhY3RJbmRl eCAgICAgICAgICAgIChjb25zdCBjaGFyICpuYW1lKTsKICAgIHN0YXRpYyBUICpHZXRFbnRyeSAg ICAgICAgICAgICAgICAgIChpbnQpOwogICAgc3RhdGljIFQgKkdldEVudHJ5ICAgICAgICAgICAg ICAgICAgKGNvbnN0IGNoYXIgKik7CiAgICBzdGF0aWMgVCAqR2V0RXhhY3RFbnRyeSAgICAgICAg ICAgICAoY29uc3QgY2hhciAqKTsKICAgIHN0YXRpYyBjb25zdCBjaGFyICpDaGVja0FsaWFzICAg ICAgIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphbGlhc2VzKTsKICAgIHN0YXRpYyBp bnQgR2V0TnVtRW50cmllcyAgICAgICAgICAgICgpIHsgcmV0dXJuIChudW1FbnRyaWVzKTsgfQog ICAgc3RhdGljIGludCBHZXRUb3RhbFNpemUgICAgICAgICAgICAgKCkgeyByZXR1cm4gKG5leHRF bnRyeSk7IH0KCiAgICBzdGF0aWMgY2hhciAqR2V0QWxsTWF0Y2hlcyAgICAgICAgICAoY29uc3Qg Y2hhciAqbmFtZSk7CiAgICBzdGF0aWMgaW50IEdldEFsaWFzSW5kZXggICAgICAgICAgICAoY29u c3QgY2hhciAqKTsKCiAgICAKICAgIFQgJm9wZXJhdG9yIFtdICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBjaGFyICpuYW1lKTsKICAgIFQgJm9wZXJhdG9yIFtdICAgICAgICAgICAgICAgICAg ICAgIChpbnQgaW5kZXgpOwp9OyAgCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUGx1Z2luRW50 cnkgewpwdWJsaWM6CiAgICAKICAgIGNvbnN0IGludCBJbmRleDsKCiAgICAKICAgIAogICAgUGx1 Z2luRW50cnkgKFQgKik7CiAgICB+UGx1Z2luRW50cnkgKCk7CgogICAgCiAgICBUICZvcGVyYXRv ciAqKCkgIHsgcmV0dXJuICgqKFBsdWdpblRhYmxlPFQ+Ojp0YWJsZVtJbmRleF0pKTsgfQogICAg VCAqb3BlcmF0b3IgLT4oKSB7IHJldHVybiAoUGx1Z2luVGFibGU8VD46OnRhYmxlW0luZGV4XSk7 IH0KICAgIG9wZXJhdG9yIGludCgpICAgeyByZXR1cm4gSW5kZXg7IH0KfTsgIAoKCiMgMSAiaC9Q bHVnaW5UZW1wbGF0ZS5jIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICJoL1BsdWdpblRl bXBsYXRlLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTA5ICJoL1BsdWdpblRlbXBsYXRl LmgiCgojIDIzICJoL1BsdWdpblRlbXBsYXRlLmMiIDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9o L3V0aWwuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3Ro YWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDIwMyAiL3NvZnR3YXJl L3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyAyOSAiL3NvZnR3YXJlL3RoYWxp YS9oL3V0aWwuaCIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvbWFjaGluZS5oIiAxCgogCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoK CgoKCgoKIyAzMCAiL3NvZnR3YXJlL3RoYWxpYS9oL3V0aWwuaCIgMgoKCiMgMSAiL3NvZnR3YXJl L3RoYWxpYS9oL21lbW0uaCIgMQogCgoKCgoKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGR0 eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDMgIi9zb2Z0d2FyZS90aGFsaWEvaC9z dGR0eXBlcy5oIgoKCgoKCgoKCgoKCgoKCiMgOSAiL3NvZnR3YXJlL3RoYWxpYS9oL21lbW0uaCIg MgoKCgp0eXBlZGVmIHN0cnVjdAogICAgewogICAgSU5UICAgICBvcGNvZGU7CiAgICBJTlQgICAg IGtleTsKICAgIElOVCAgICAgdXNlcjsKICAgIElOVCAgICAgam9iOwogICAgSU5UICAgICBzaXpl OwogICAgTE9ORyAgICBjdGltZTsKICAgIFNUUklORyAgZGF0YUZpbGU7CiAgICBTVFJJTkcgIGZp bGU7CiAgICBTVFJJTkcgIHR5cGU7CiAgICB9ICBNRU1NX0lURU07CgoKCgogCgoKCgoKCgogCgoK CgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKCgoKCgoKIAoKCiMgMzIgIi9zb2Z0d2FyZS90aGFs aWEvaC91dGlsLmgiIDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL2Rpc2tjLmgiIDEKIAoKCgoK CiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoK CgojIDIwMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyA3 ICIvc29mdHdhcmUvdGhhbGlhL2gvZGlza2MuaCIgMgoKCgp0eXBlZGVmIHN0cnVjdAogICAgewog ICAgSU5UICAgICBvcGNvZGU7CiAgICBJTlQgICAgIGtleTsKICAgIElOVCAgICAgdXNlcjsKICAg IElOVCAgICAgam9iOwogICAgSU5UICAgICBzaXplOwogICAgTE9ORyAgICBjdGltZTsKICAgIExP TkcgICAgYWNjZXNzVGltZTsKICAgIFNUUklORyAgY2FjaGVkRmlsZTsKICAgIFNUUklORyAgZGF0 YUZpbGU7CiAgICBTVFJJTkcgIGZpbGU7CiAgICB9ICBESVNLQ19GSUxFOwoKCgogCgoKCgogCgoK CgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIyAzMyAiL3Nv ZnR3YXJlL3RoYWxpYS9oL3V0aWwuaCIgMgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3BhcnNl LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgT19M SVNUCiAgICB7IAogICAgY2hhciAgICAqZmxhZzsKICAgIGludCAgICAgbWluaW11bTsKICAgIGlu dCAgICAgbWF4aW11bTsKICAgIGludCAgICAgdHlwZTsKICAgIGNoYXIgICAgKmRlc3RpbmF0aW9u OwogICAgaW50ICAgICBjb3VudDsKICAgIGludCAgICAgaGl0Q291bnQ7CiAgICBjaGFyICAgICoq cHJvbXB0czsKICAgIH0gT19MSVNUOwoKCiMgMzUgIi9zb2Z0d2FyZS90aGFsaWEvaC91dGlsLmgi IDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL25ldGZpbGUuaCIgMQoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIgMQoKIAoKCgoK CgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIKCgoKCgoK CgoKCgoKCgojIDI4ICIvc29mdHdhcmUvdGhhbGlhL2gvbmV0ZmlsZS5oIiAyCgoKCgogCnR5cGVk ZWYgc3RydWN0IE5FVEZJTEVfQ09NTUFORAp7CgogICAgX19pbnQzMl90ICAgICAgIG9wY29kZTsK ICAgIGNoYXIgICAgICAgICAgICBmaWxlbmFtZVsyNTZdOwogICAgdm9pZCAgICAgICAgICAgICpm cDsgICAgCiAgICBjaGFyICAgICAgICAgICAgY1BhcmFtWzhdOwogICAgX19pbnQzMl90ICAgICAg IGlQYXJhbTE7CiAgICBfX2ludDMyX3QgICAgICAgaVBhcmFtMjsKCn0gIE5FVEZJTEVfQ09NTUFO RDsKCgogCgoKc3RydWN0IF9uZXRmaWxlX2ZpbGUKewoKICAgIEZJTEUgICAgKmZwOyAgICAgICAg ICAgICAgICAgCiAgICBpbnQgICAgIHNvY2s7ICAgICAgICAgICAgICAgIAogICAgaW50ICAgICBj aHVua1NpemU7ICAgICAgICAgICAKICAgIGludCAgICAgYnVmZmVyU2l6ZTsgICAgICAgICAgCiAg ICBpbnQgICAgIGN1cnJlbnRCdWZMb2M7ICAgICAgIAogICAgaW50ICAgICBmaWxlQmFzZUxvYzsg ICAgICAgICAKICAgIGNoYXIgICAgYWNjZXNzWzhdOyAgICAgICAgICAgCiAgICBjaGFyICAgICpi dWZmZXI7ICAgICAgICAgICAgIAoKfTsKdHlwZWRlZiBzdHJ1Y3QgX25ldGZpbGVfZmlsZSBORVRG SUxFX0ZJTEU7CgoKCgogCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL25ldGZpbGUu cCIgMQogCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgp2b2lkICAgIE5FVEZJTEVfRW5h YmxlKAogICAgICAgIHZvaWQKCSk7Cgp2b2lkICAgIE5FVEZJTEVfRGlzYWJsZSgKICAgICAgICB2 b2lkCgkpOwoKTkVURklMRV9GSUxFICAgICpORVRGSUxFX0ZvcGVuKAogICAgICAgICAgICAgICAg Y29uc3QgY2hhciAgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKmFjY2Vz cwoJKTsKCmludCAgICAgTkVURklMRV9GcmVhZCgKICAgICAgICB2b2lkICAgICAgICAgICAgKnB0 ciwKICAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZSwKICAgICAgICBzaXplX3QgICAgICAgICAg bml0ZW1zLAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKaW50ICAgICBORVRGSUxF X0Z3cml0ZSgKICAgICAgICBjb25zdCB2b2lkICAgICAgKnB0ciwKICAgICAgICBzaXplX3QgICAg ICAgICAgc2l6ZSwKICAgICAgICBzaXplX3QgICAgICAgICAgbml0ZW1zLAogICAgICAgIE5FVEZJ TEVfRklMRSAgICAqbmZwCgkpOwoKaW50ICAgICBORVRGSUxFX0ZwdXRjKAogICAgICAgIGludCAg ICAgICAgICAgICB0aGVDaGFyLAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKY2hh ciAgICAgICAgKk5FVEZJTEVfRmdldHMoCiAgICAgICAgY2hhciAgICAgICAgICAgICpzdHJpbmcs CiAgICAgICAgaW50ICAgICAgICAgICAgIG1heCwKICAgICAgICBORVRGSUxFX0ZJTEUgICAgKm5m cAoJKTsKCmludCAgICAgTkVURklMRV9GcHV0cygKICAgICAgICBjb25zdCBjaGFyICAgICAgICAg ICpzdHJpbmcsCiAgICAgICAgTkVURklMRV9GSUxFICAgICpuZnAKCSk7CgppbnQgICAgIE5FVEZJ TEVfRnNlZWsoCiAgICAgICAgTkVURklMRV9GSUxFICAgICpuZnAsCiAgICAgICAgaW50ICAgICAg ICAgICAgIG9mZnNldCwKICAgICAgICBpbnQgICAgICAgICAgICAgd2hlbmNlCgkpOwoKaW50ICAg ICBORVRGSUxFX0Z0ZWxsKAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKaW50ICAg ICBORVRGSUxFX0ZmbHVzaCgKICAgICAgICBORVRGSUxFX0ZJTEUgICAgKm5mcAoJKTsKCmludCAg ICAgTkVURklMRV9GY2xvc2UoIAogICAgICAgIE5FVEZJTEVfRklMRSAgICAqbmZwCgkpOwoKdm9p ZCAgICBORVRGSUxFX0luaXRpYXRlQ29uY3VycmVudCggCiAgICAgICAgY29uc3QgY2hhciAgKm5h bWUKCSk7Cgp2b2lkICAgIE5FVEZJTEVfVGVybWluYXRlQ29uY3VycmVudCggCiAgICAgICAgdm9p ZAoJKTsKCnNob3J0IE5FVEZJTEVfR2V0RG9OZXRGaWxlc0ZsYWcgKAogICAgdm9pZAoJKTsKCmlu dCBORVRGSUxFX0dldFNhdmVkRXJybm8gKAogICAgdm9pZAoJKTsKCgogCgpORVRGSUxFX0ZJTEUg Kk5FVEZJTEVfRm9wZW5SZWN5Y2xlICgKICAgIGNvbnN0IGNoYXIgICpmaWxlbmFtZSwKICAgIGNv bnN0IGNoYXIgICphY2Nlc3NDb2RlCgkpOwoKaW50IE5FVEZJTEVfRmNsb3NlUmVjeWNsZSAoCiAg ICBORVRGSUxFX0ZJTEUgICAgKm5mcAoJKTsKCgp9CgoKCgoKIyA3NyAiL3NvZnR3YXJlL3RoYWxp YS9oL25ldGZpbGUuaCIgMgoKCgojIDM2ICIvc29mdHdhcmUvdGhhbGlhL2gvdXRpbC5oIiAyCgoK dHlwZWRlZiBzdHJ1Y3QgU1REX0ZJTEVfSEVBREVSCiAgICB7CiAgICBpbnQgIGhlYWRTaXplOyAg ICAgICAKICAgIHNob3J0IG1hY2hpbmU7ICAgICAgIAogICAgc2hvcnQgZmlsZVR5cGU7ICAgICAg CiAgICBzaG9ydCB2ZXJzaW9uOyAgICAgICAKICAgIHNob3J0IGhlYWRWZXJzaW9uOwogICAgaW50 ICBkYXRlOyAgICAgICAgICAgCiAgICBjaGFyIHByb2dyYW1bNDhdOwogICAgfSBTVERfRklMRV9I RUFERVI7CgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgogCgoKIAoKCgogCgoK CgogCiAKdHlwZWRlZiBzdHJ1Y3QgRlJBTkdFCiAgICB7CiAgICBmbG9hdCAgICAgICBiZWdpbjsK ICAgIGZsb2F0ICAgICAgIGVuZDsKICAgIGZsb2F0ICAgICAgIGluYzsKICAgIH0gRlJBTkdFOwoK CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIEZSQU5HRSApIHsgcmV0dXJuICJGUkFOR0Ui OyB9OwoKCiAKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3V0aWwuZSIgMQoKIAoKCgoKCgog CgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42 Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCgoKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEg MwogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIu OTEuNjYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxp Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvbGltaXRzLmgiIDMKCgoK IyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoK IAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK IAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9sb2NhbF9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKIyAxICIvdXNy L2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNyAiL3Vz ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwoKCiAKCgoKCgogCgogCgoKIAoKIAoKCiAK CiAKCgogCgoKCiAKCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwoK CgoKCgoKCiAKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgoKIAoKCgoKIAoKCgogCgoKIAoKCgogCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzQgIi91c3IvaW5jbHVkZS9s aW1pdHMuaCIgMiAzCgoKCgoKCgoKIAoKCgoKCiAKCiMgMTIxICIvdXNyL2luY2x1ZGUvbGltaXRz LmgiIDMKCgoKCiAgCgoKCgoKCgoKIyAxMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0 LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9s aWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3lzbGlt aXRzLmgiIDIgMwoKCiMgMTEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn Y3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCgogCgoKCiAKCgoKIAoKCgoKIAoK CgoKCiAKCgoKIAoKCgoKCgoKCgoKCgogCgogCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCiAKCgoK CgoKCgoKCgoKCiAKCgoKIyAxMDcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4 L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgMjMgIi91 c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9h bHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkx LjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIv Z2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgi IDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3Iv bGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRl Zi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4 L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vz ci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l Z2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9n Y2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIg MwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDIgMwoKCiAKCiAKCiAKIyA0NyAi L3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVpbnQ4 X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50CXVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk IGludAkJdWludDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50CXVpbnQ2NF90OwoKCgoK CgogCgogCnR5cGVkZWYgc2lnbmVkIGNoYXIJCWludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBp bnQJCWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50CQkJaW50X2xlYXN0MzJfdDsKCnR5cGVkZWYg bG9uZyBpbnQJCWludF9sZWFzdDY0X3Q7CgoKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVp bnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50CXVpbnRfbGVhc3QxNl90Owp0 eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF9sZWFzdDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50CXVpbnRfbGVhc3Q2NF90OwoKCgoKCgogCgogCnR5cGVkZWYgc2lnbmVkIGNoYXIJCWlu dF9mYXN0OF90OwoKdHlwZWRlZiBsb25nIGludAkJaW50X2Zhc3QxNl90Owp0eXBlZGVmIGxvbmcg aW50CQlpbnRfZmFzdDMyX3Q7CnR5cGVkZWYgbG9uZyBpbnQJCWludF9mYXN0NjRfdDsKCgoKCgoK CiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1aW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50CXVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludF9m YXN0MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludAl1aW50X2Zhc3Q2NF90OwoKCgoKCgoK CiAKCgp0eXBlZGVmIGxvbmcgaW50CQlpbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg aW50CXVpbnRwdHJfdDsKCgoKCgoKCgoKIAoKdHlwZWRlZiBsb25nIGludAkJaW50bWF4X3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQJdWludG1heF90OwoKCgoKCgoKCiAKCiMgMjgwICIvdXNy L2luY2x1ZGUvc3RkaW50LmgiIDMKCgoKIAoKIyAzMTYgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIg MwoKCgojIDI0ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJl ZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK CiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEu NjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1s aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK CgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2Vn Y3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIv YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK IAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42 Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91 c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxw aGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAK CiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYv aW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKCgoKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0 LmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWduZWQgaW50IHNvY2tsZW5fdDsKCiAKZW51bSBfX3Nv Y2tldF90eXBlCnsKICBTT0NLX1NUUkVBTSA9IDEsCQkgCgoKICBTT0NLX0RHUkFNID0gMiwJCSAK CgogIFNPQ0tfUkFXID0gMywJCQkgCgogIFNPQ0tfUkRNID0gNCwJCQkgCgogIFNPQ0tfU0VRUEFD S0VUID0gNSwJCSAKCgogIFNPQ0tfUEFDS0VUID0gMTAJCSAKCgoKfTsKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgogCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDEgMwogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5 X3Q7CgogCgoKCgoKCgoKIAoKZXh0ZXJuIGludCBfX2xpYmNfc2FfbGVuICAoc2FfZmFtaWx5X3Qg X19hZikgIHRocm93ICgpICA7CgoKIyAxMzMgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAy IDMKCgogCnN0cnVjdCBzb2NrYWRkcgogIHsKICAgIHNhX2ZhbWlseV90ICBzYV9mYW1pbHkgOwkg CiAgICBjaGFyIHNhX2RhdGFbMTRdOwkJIAogIH07CgoKIAoKCgoKCgoKCgpzdHJ1Y3Qgc29ja2Fk ZHJfc3RvcmFnZQogIHsKICAgIHNhX2ZhbWlseV90ICBfX3NzX2ZhbWlseSA7CSAKICAgIF9fdWlu dDY0X3QgIF9fc3NfYWxpZ247CSAKICAgIGNoYXIgX19zc19wYWRkaW5nWygxMjggIC0gKDIgKiBz aXplb2YgKF9fdWludDY0X3QgKSkpIF07CiAgfTsKCgogCmVudW0KICB7CiAgICBNU0dfT09CCQk9 IDB4MDEsCSAKCiAgICBNU0dfUEVFSwkJPSAweDAyLAkgCgogICAgTVNHX0RPTlRST1VURQk9IDB4 MDQsCSAKCgoKCgoKICAgIE1TR19DVFJVTkMJCT0gMHgwOCwJIAoKICAgIE1TR19QUk9YWQkJPSAw eDEwLAkgCgogICAgTVNHX1RSVU5DCQk9IDB4MjAsCgogICAgTVNHX0RPTlRXQUlUCT0gMHg0MCwg IAoKICAgIE1TR19FT1IJCT0gMHg4MCwgIAoKICAgIE1TR19XQUlUQUxMCQk9IDB4MTAwLCAgCgog ICAgTVNHX0ZJTgkJPSAweDIwMCwKCiAgICBNU0dfU1lOCQk9IDB4NDAwLAoKICAgIE1TR19VUkcJ CT0gMHg4MDAsCgogICAgTVNHX1JTVAkJPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVFCT0gMHgy MDAwLCAgCgogICAgTVNHX05PU0lHTkFMCT0gMHg0MDAwICAgCgogIH07CgoKIAoKc3RydWN0IG1z Z2hkcgogIHsKICAgIHZvaWQgKiAgbXNnX25hbWU7CQkgCiAgICBzb2NrbGVuX3QgbXNnX25hbWVs ZW47CSAKCiAgICBzdHJ1Y3QgaW92ZWMgKm1zZ19pb3Y7CSAKICAgIHNpemVfdCBtc2dfaW92bGVu OwkJIAoKICAgIHZvaWQgKiAgbXNnX2NvbnRyb2w7CSAKICAgIHNpemVfdCBtc2dfY29udHJvbGxl bjsJIAoKICAgIGludCBtc2dfZmxhZ3M7CQkgCiAgfTsKCiAKc3RydWN0IGNtc2doZHIKICB7CiAg ICBzaXplX3QgY21zZ19sZW47CQkgCgogICAgaW50IGNtc2dfbGV2ZWw7CQkgCiAgICBpbnQgY21z Z190eXBlOwkJIAoKICAgIHVuc2lnbmVkIGNoYXIgX19jbXNnX2RhdGFbMF07ICAKICAgICAKCiAg fTsKCiAKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2dfbnh0aGRy ICAoc3RydWN0IG1zZ2hkciAqX19taGRyLAoJCQkJCSAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cp ICB0aHJvdyAoKSAgOwoKCgoKZXh0ZXJuIF9faW5saW5lICBzdHJ1Y3QgY21zZ2hkciAqCl9fY21z Z19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3RydWN0IGNtc2doZHIgKl9fY21zZykg dGhyb3cgKCkgCnsKICBpZiAoKHNpemVfdCkgX19jbXNnLT5jbXNnX2xlbiA8IHNpemVvZiAoc3Ry dWN0IGNtc2doZHIpKQogICAgIAogICAgcmV0dXJuIDA7CgogIF9fY21zZyA9IChzdHJ1Y3QgY21z Z2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCgkJCSAgICAgICArICgoKCBfX2Ntc2ct PmNtc2dfbGVuICkgKyBzaXplb2YgKHNpemVfdCkgLSAxKSAmIH4oc2l6ZW9mIChzaXplX3QpIC0g MSkpICk7CiAgaWYgKCh1bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVk IGNoYXIgKikgX19taGRyLT5tc2dfY29udHJvbAoJCQkJCSArIF9fbWhkci0+bXNnX2NvbnRyb2xs ZW4pCiAgICAgIHx8ICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cgKyAoKCggX19jbXNnLT5jbXNn X2xlbiApICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSAK CSAgPj0gKCh1bnNpZ25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wgKyBfX21oZHItPm1z Z19jb250cm9sbGVuKSkpCiAgICAgCiAgICByZXR1cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoK IAoKZW51bQogIHsKICAgIFNDTV9SSUdIVFMgPSAweDAxLAkJIAoKCiAgICBTQ01fQ1JFREVOVElB TFMgPSAweDAyLCAgICAgIAoKCiAgICBfX1NDTV9DT05ORUNUID0gMHgwMwkgCiAgfTsKCiAKCnN0 cnVjdCB1Y3JlZAp7CiAgcGlkX3QgIHBpZDsJCQkgCiAgdWlkX3QgIHVpZDsJCQkgCiAgZ2lkX3Qg IGdpZDsJCQkgCn07CgogCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMSAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDEgMwoKCgogCgoKCgoKCgoKCgoKIyA0ICIv dXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyIDMKCgogCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgogCgoKCgoKCgoKIAoKCgogCgoKCgoKIyAyOTUgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tl dC5oIiAyIDMKCgoKIApzdHJ1Y3QgbGluZ2VyCiAgewogICAgaW50IGxfb25vZmY7CQkgCiAgICBp bnQgbF9saW5nZXI7CQkgCiAgfTsKCgojIDI3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAy IDMKCgoKZXh0ZXJuICJDIiB7IAoKIAplbnVtCiAgewogICAgSVBQUk9UT19JUCA9IDAsCSAgICAK ICAgIElQUFJPVE9fSE9QT1BUUyA9IDAsICAgIAogICAgSVBQUk9UT19JQ01QID0gMSwJICAgIAog ICAgSVBQUk9UT19JR01QID0gMiwJICAgIAogICAgSVBQUk9UT19JUElQID0gNCwJICAgIAogICAg SVBQUk9UT19UQ1AgPSA2LAkgICAgCiAgICBJUFBST1RPX0VHUCA9IDgsCSAgICAKICAgIElQUFJP VE9fUFVQID0gMTIsCSAgICAKICAgIElQUFJPVE9fVURQID0gMTcsCSAgICAKICAgIElQUFJPVE9f SURQID0gMjIsCSAgICAKICAgIElQUFJPVE9fVFAgPSAyOSwJICAgIAogICAgSVBQUk9UT19JUFY2 ID0gNDEsICAgICAgCiAgICBJUFBST1RPX1JPVVRJTkcgPSA0MywgICAKICAgIElQUFJPVE9fRlJB R01FTlQgPSA0NCwgIAogICAgSVBQUk9UT19SU1ZQID0gNDYsCSAgICAKICAgIElQUFJPVE9fR1JF ID0gNDcsCSAgICAKICAgIElQUFJPVE9fRVNQID0gNTAsICAgICAgIAogICAgSVBQUk9UT19BSCA9 IDUxLCAgICAgICAgCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4LCAgICAKICAgIElQUFJPVE9fTk9O RSA9IDU5LCAgICAgIAogICAgSVBQUk9UT19EU1RPUFRTID0gNjAsICAgCiAgICBJUFBST1RPX01U UCA9IDkyLAkgICAgCiAgICBJUFBST1RPX0VOQ0FQID0gOTgsCSAgICAKICAgIElQUFJPVE9fUElN ID0gMTAzLAkgICAgCiAgICBJUFBST1RPX0NPTVAgPSAxMDgsCSAgICAKICAgIElQUFJPVE9fUkFX ID0gMjU1LAkgICAgCiAgICBJUFBST1RPX01BWAogIH07CgogCmVudW0KICB7CiAgICBJUFBPUlRf RUNITyA9IDcsCQkgCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCQkgCiAgICBJUFBPUlRfU1lTVEFU ID0gMTEsCQkgCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAkgCiAgICBJUFBPUlRfTkVUU1RBVCA9 IDE1LAkgCiAgICBJUFBPUlRfRlRQID0gMjEsCQkgCiAgICBJUFBPUlRfVEVMTkVUID0gMjMsCQkg CiAgICBJUFBPUlRfU01UUCA9IDI1LAkJIAogICAgSVBQT1JUX1RJTUVTRVJWRVIgPSAzNywJIAog ICAgSVBQT1JUX05BTUVTRVJWRVIgPSA0MiwJIAogICAgSVBQT1JUX1dIT0lTID0gNDMsCQkgCiAg ICBJUFBPUlRfTVRQID0gNTcsCgogICAgSVBQT1JUX1RGVFAgPSA2OSwJCSAKICAgIElQUE9SVF9S SkUgPSA3NywKICAgIElQUE9SVF9GSU5HRVIgPSA3OSwJCSAKICAgIElQUE9SVF9UVFlMSU5LID0g ODcsCiAgICBJUFBPUlRfU1VQRFVQID0gOTUsCQkgCgoKICAgIElQUE9SVF9FWEVDU0VSVkVSID0g NTEyLAkgCiAgICBJUFBPUlRfTE9HSU5TRVJWRVIgPSA1MTMsCSAKICAgIElQUE9SVF9DTURTRVJW RVIgPSA1MTQsCiAgICBJUFBPUlRfRUZTU0VSVkVSID0gNTIwLAoKICAgICAKICAgIElQUE9SVF9C SUZGVURQID0gNTEyLAogICAgSVBQT1JUX1dIT1NFUlZFUiA9IDUxMywKICAgIElQUE9SVF9ST1VU RVNFUlZFUiA9IDUyMCwKCiAgICAgCiAgICBJUFBPUlRfUkVTRVJWRUQgPSAxMDI0LAoKICAgICAK ICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsKCgogCnN0cnVjdCBpbl9hZGRyCiAg ewogICAgdWludDMyX3Qgc19hZGRyOwogIH07CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgogCgogCgoKIAoKIAoKCgoKIAoKCgoKCgogCnN0cnVjdCBpbjZfYWRkcgogIHsKICAgIHVu aW9uCiAgICAgIHsKCXVpbnQ4X3QJCXU2X2FkZHI4WzE2XTsKCXVpbnQxNl90CXU2X2FkZHIxNls4 XTsKCXVpbnQzMl90CXU2X2FkZHIzMls0XTsKCgl1aW50NjRfdAl1Nl9hZGRyNjRbMl07CgogICAg ICB9IGluNl91OwoKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRy X2FueTsgICAgICAgICAKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3Bi YWNrOyAgICAKCgoKCgoKIAoKCgogCnN0cnVjdCBzb2NrYWRkcl9pbgogIHsKICAgIHNhX2ZhbWls eV90ICBzaW5fZmFtaWx5IDsKICAgIHVpbnQxNl90IHNpbl9wb3J0OwkJCSAKICAgIHN0cnVjdCBp bl9hZGRyIHNpbl9hZGRyOwkJIAoKICAgICAKICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6 ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KCQkJICAgKHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50 KSkgIC0KCQkJICAgc2l6ZW9mICh1aW50MTZfdCkgLQoJCQkgICBzaXplb2YgKHN0cnVjdCBpbl9h ZGRyKV07CiAgfTsKCiAKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90ICBz aW42X2ZhbWlseSA7CiAgICB1aW50MTZfdCBzaW42X3BvcnQ7CQkgCiAgICB1aW50MzJfdCBzaW42 X2Zsb3dpbmZvOwkgCiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwkgCiAgfTsKCiAKc3Ry dWN0IGlwdjZfbXJlcQogIHsKICAgICAKICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlh ZGRyOwoKICAgICAKICAgIHVuc2lnbmVkIGludCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgogCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCiAKCgoKCgoKIAoKCnN0cnVjdCBpcF9v cHRzCiAgewogICAgc3RydWN0IGluX2FkZHIgaXBfZHN0OwkgCiAgICBjaGFyIGlwX29wdHNbNDBd OwkJIAogIH07CgogCnN0cnVjdCBpcF9tcmVxCiAgewogICAgc3RydWN0IGluX2FkZHIgaW1yX211 bHRpYWRkcjsJIAogICAgc3RydWN0IGluX2FkZHIgaW1yX2ludGVyZmFjZTsJIAogIH07CgogCnN0 cnVjdCBpcF9tcmVxbgogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CSAKICAg IHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwkJIAogICAgaW50CWltcl9pZmluZGV4OwkJCSAK ICB9OwoKIApzdHJ1Y3QgaW5fcGt0aW5mbwogIHsKICAgIGludCBpcGlfaWZpbmRleDsJCQkgCiAg ICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CSAKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9h ZGRyOwkJIAogIH07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKIyAyMjUg Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCiAKCgoKCgoKZXh0ZXJuIHVpbnQzMl90 IG50b2hsICAodWludDMyX3QgX19uZXRsb25nKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHVpbnQxNl90 IG50b2hzICAodWludDE2X3QgX19uZXRzaG9ydCkgIHRocm93ICgpICA7CmV4dGVybiB1aW50MzJf dCBodG9ubCAgKHVpbnQzMl90IF9faG9zdGxvbmcpICB0aHJvdyAoKSAgOwpleHRlcm4gdWludDE2 X3QgaHRvbnMgICh1aW50MTZfdCBfX2hvc3RzaG9ydCkgIHRocm93ICgpICA7CgoKCiAKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgojIDI0MiAiL3Vzci9p bmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQgIChpbnQgX19zb2NrZmQs IHN0cnVjdCBzb2NrYWRkcl9pbiAqX19zb2NrX2luKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCgoK CgoKCgoKIApzdHJ1Y3QgaW42X3BrdGluZm8KICB7CiAgICBzdHJ1Y3QgaW42X2FkZHIJaXBpNl9h ZGRyOyAgICAgCiAgICB1bnNpZ25lZCBpbnQJaXBpNl9pZmluZGV4OyAgCiAgfTsKCn0gCgoKIyAx MiAiL3NvZnR3YXJlL3RoYWxpYS9oL3V0aWwuZSIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv dXRpbC5wIiAxCiAKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCkZJTEUgKlVfU3RkQmlu T3BlblJlYWQoCiAgICAgICAgY2hhciAqZmlsZSwKICAgICAgICBjaGFyICp0eXBlLCAgICAgIAog ICAgICAgIFNURF9GSUxFX0hFQURFUiAqaGVhZAogKTsKCmludCBVX1N0ZEJpbk9wZW5SZWFkRmQo CiAgICAgICAgY2hhciAqZmlsZSwKICAgICAgICBjaGFyICp0eXBlLCAgICAgIAogICAgICAgIFNU RF9GSUxFX0hFQURFUiAqaGVhZAogKTsKCkZJTEUgKlVfU3RkQmluT3BlbldyaXRlKAogICAgICAg IGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgY29uc3QgY2hhciAqdHlwZSwgICAgICAgIAogICAg ICAgIGNoYXIgdmVyc2lvbiwKICAgICAgICBjaGFyICpwcm9ncmFtCiApOwoKaW50IFVfU3RkQmlu T3BlbldyaXRlRmQoCiAgICAgICAgY2hhciAqZmlsZSwKICAgICAgICBjaGFyICp0eXBlLCAgICAg IAogICAgICAgIGNoYXIgdmVyc2lvbiwKICAgICAgICBjaGFyICpwcm9ncmFtCiApOwoKSU5UIFVf U3RkRmluZFR5cGUoCiAgICAgICAgY29uc3QgY2hhciAqdHlwZQogKTsKCklOVCBVX1N0ZE91dHB1 dElCaW5GbG9hdHMoCiAgICAgICAgRklMRSAgKmZwdHIsCiAgICAgICAgRkxPQVQgKmZsb2F0cywK ICAgICAgICBJTlQgICBudW1iCiApOwoKSU5UIFVfU3RkSW5wdXRJQmluRmxvYXRzKAogICAgICAg IEZJTEUgICpmcHRyLAogICAgICAgIEZMT0FUICpmbG9hdHMsCiAgICAgICAgSU5UICAgbnVtYgog KTsKCnZvaWQgVV9TdGREdW1wSGVhZGVyKAogICAgICAgIGNoYXIgKmZpbGUKICk7CgpJTlQgVV9T dGRGaW5kRmlsZSgKICAgICAgICBjb25zdCBjaGFyICppbkZpbGUsCiAgICAgICAgY2hhciAqcHJl ZmVycmVkW10sCiAgICAgICAgSU5UIG51bWIsCiAgICAgICAgY2hhciAqb3V0RmlsZSwKICAgICAg ICBJTlQgKmluZGV4LAogICAgICAgIGNvbnN0IGNoYXIgKnVEaXJzCiApOwoKdm9pZCBVX1N0cmlw RmlsZVBhdGgoIAogICAgY2hhciogZmlsZVBhdGgKICk7CgpJTlQgVV9Db3B5RmlsZSgKICAgICAg ICBjb25zdCBjaGFyICAqaW4sCiAgICAgICAgY29uc3QgY2hhciAgKm91dAogKTsKCklOVCBVX0Fw cGVuZEZpbGUoCiAgICAgICAgQ0hBUiAgICAqaW4sCiAgICAgICAgQ0hBUiAgICAqb3V0CiApOwoK SU5UIFVfRXhpc3RzKAogICAgICAgIGNoYXIgKmZpbGUKICk7CgpJTlQgVV9GaW5kRXhlY3V0YWJs ZSgKICAgICAgICBDSEFSICAgICppbmZpbGUsCiAgICAgICAgQ0hBUiAgICAqb3V0ZmlsZSwKICAg ICAgICBDSEFSICAgICp1RGlycwogKTsKCnZvaWQgVV9HZXRCYWNrdXBOYW1lKAogICAgICAgIGNo YXIgKmZpbGUsCiAgICAgICAgY2hhciAqYmFjawogKTsKCklOVCBVX0ZpbGVUeXBlKAogICAgICAg IENIQVIgICAgKm5hbWUKICk7Cgp2b2lkIFVfU3RyY2F0KAogICAgICAgIGNoYXIgKmEsCiAgICAg ICAgY2hhciAqYgogKTsKCgogCgp2b2lkICBCSUxJTkVBUl9CaWxpbmVhckludGVycG9sYXRpb24o CiAgICBQT0lOVCAgICpwb2ludCwKICAgIFBPSU5UICAgKnN0YXJ0MCwKICAgIFBPSU5UICAgKnN0 YXJ0MSwKICAgIFBPSU5UICAgKmVuZDAsCiAgICBQT0lOVCAgICplbmQxLAogICAgRkxPQVQgICB0 b2xlcmFuY2UsCiAgICBGTE9BVCAgICp3ZWlnaHQwLAogICAgRkxPQVQgICAqd2VpZ2h0MSwKICAg IEZMT0FUICAgKndlaWdodFN0YXJ0LAogICAgRkxPQVQgICAqd2VpZ2h0RW5kCiApOwoKCiAKCklO VCBDSE9SRF9Eb1JlbW90ZUNvbW1hbmQoCiAgICBJTlQgICAgICAgICBjb3VudCwKICAgIGNvbnN0 IENIQVIgICoqYXIsCiAgICBDSEFSICAgICAgICAqKmVyciwKICAgIENIQVIgICAgICAgICoqb3V0 CiApOwoKCiAKCklOVCBVX0Vhc2VJbigKICAgICAgICBSRUFMICAgIHkwLAogICAgICAgIFJFQUwg ICAgdjAsCiAgICAgICAgUkVBTCAgICB5MSwKICAgICAgICBSRUFMICAgIHYxLAogICAgICAgIFJF QUwgICAgZXhwLAogICAgICAgIElOVCAgICAgbiwKICAgICAgICBSRUFMICAgICpidWYsCiAgICAg ICAgSU5UICAgICBrZXkKICk7CgpJTlQgVV9FYXNlT3V0KAogICAgICAgIFJFQUwgICAgeTAsCiAg ICAgICAgUkVBTCAgICB2MCwKICAgICAgICBSRUFMICAgIHkxLAogICAgICAgIFJFQUwgICAgdjEs CiAgICAgICAgUkVBTCAgICBleHAsCiAgICAgICAgSU5UICAgICBuLAogICAgICAgIFJFQUwgICAg KmJ1ZiwKICAgICAgICBJTlQgICAgIGtleQogKTsKCklOVCBVX0Vhc2VJbkxpbmVhcigKICAgICAg ICBSRUFMICAgIHkwLAogICAgICAgIFJFQUwgICAgdjAsCiAgICAgICAgUkVBTCAgICB5MSwKICAg ICAgICBSRUFMICAgIHYxLAogICAgICAgIElOVCAgICAgbiwKICAgICAgICBJTlQgICAgIG0sCiAg ICAgICAgUkVBTCAgICAqYnVmCiApOwoKSU5UIFVfRWFzZUluT3V0KAogICAgICAgIFJFQUwgICAg eTAsCiAgICAgICAgUkVBTCAgICB2MCwKICAgICAgICBSRUFMICAgIHkxLAogICAgICAgIFJFQUwg ICAgdjEsCiAgICAgICAgUkVBTCAgICBleHAsCiAgICAgICAgSU5UICAgICBuLAogICAgICAgIFJF QUwgICAgKmJ1ZiwKICAgICAgICBSRUFMICAgIHdlaWdodAogKTsKCklOVCBVX0Vhc2VJbk91dF9F eHBlcmltZW50YWwgKAogICAgICAgIFJFQUwgICAgeTAsCiAgICAgICAgUkVBTCAgICB2MCwKICAg ICAgICBSRUFMICAgIHkxLAogICAgICAgIFJFQUwgICAgdjEsCiAgICAgICAgUkVBTCAgICBleHAs CiAgICAgICAgSU5UICAgICBuLAogICAgICAgIFJFQUwgICAgKmJ1ZiwKICAgICAgICBSRUFMICAg IHdlaWdodAogKTsKCgogCgpJTlQgVV9QYXJzZURhdGUoCiAgICAgICAgQ0hBUiAgICAqZGF0ZVN0 cgogKTsKCklOVCBVX0RhdGVJZGVudGlmeSgKICAgICAgICBDSEFSICAgICp0b2tlbgogKTsKCklO VCBVX1NwcmludERhdGUoCiAgICAgICAgQ0hBUiAgICAqcywKICAgICAgICBJTlQgICAgIHRoZURh dGUsCiAgICAgICAgSU5UICAgICBzdHlsZQogKTsKCklOVCBVX0dldE1vbnRoSW50RnJvbUFzY2lp KAogICAgICAgIGNoYXIgICAgKm1vbnRoU3RyaW5nCiApOwoKdm9pZCBVX0dldE1vbnRoQXNjaWlG cm9tSW50KAogICAgICAgIGNoYXIgICAgKm1vbnRoU3RyaW5nLAogICAgICAgIElOVCAgICAgbW9u dGhJbnQKICk7CgpJTlQgVV9HZXREYXlzSW5Nb250aEFzY2lpKAogICAgICAgIGNoYXIgICAgKm1v bnRoU3RyaW5nCiApOwoKSU5UIFVfR2V0RGF5c0luTW9udGhJbnQoCiAgICAgICAgSU5UIG1vbnRo SW50CiApOwoKSU5UIFVfU3VidHJhY3RGcm9tRGF0ZSgKICAgICAgICBJTlQgKm1vbnRoLCAKICAg ICAgICBJTlQgKmRheSwgCiAgICAgICAgSU5UICp5ZWFyLAogICAgICAgIElOVCBtb250aEFkanVz dCwgCiAgICAgICAgSU5UIGRheUFkanVzdCwgCiAgICAgICAgSU5UIHllYXJBZGp1c3QKICk7CgpJ TlQgVV9BZGRUb0RhdGUoCiAgICAgICAgSU5UICptb250aCwgCiAgICAgICAgSU5UICpkYXksIAog ICAgICAgIElOVCAqeWVhciwKICAgICAgICBJTlQgbW9udGhBZGp1c3QsIAogICAgICAgIElOVCBk YXlBZGp1c3QsIAogICAgICAgIElOVCB5ZWFyQWRqdXN0CiApOwoKSU5UIFVfR2V0Q29ycmVjdERh eXNJbk1vbnRoKAogICAgICAgIElOVCBtb250aCwgCiAgICAgICAgSU5UIHllYXIKICk7CgpJTlQg VV9Db21wYXJlRGF0ZXMoCiAgICAgICAgSU5UIG1vbnRoMSwgCiAgICAgICAgSU5UIGRheTEsIAog ICAgICAgIElOVCB5ZWFyMSwKICAgICAgICBJTlQgbW9udGgyLCAKICAgICAgICBJTlQgZGF5Miwg CiAgICAgICAgSU5UIHllYXIyCiApOwoKCiAKCklOVCBVSV9QYXJzZVRoZURhdGUoCiAgICAgICAg Y2hhciAgICBkYXRlW10sCiAgICAgICAgSU5UICAgICAqbW9udGhOdW1iZXIsIAogICAgICAgIElO VCAgICAgKmRheU51bWJlciwgCiAgICAgICAgSU5UICAgICAqeWVhck51bWJlcgogKTsKCgogCgpG TE9BVCBNQVRIX0Rlc2NyZXRpemUoCiAgICAgICAgRkxPQVQgdmFsCiApOwoKRkxPQVQgTUFUSF9B cmJEZXNjcmV0aXplKAogICAgICAgIEZMT0FUICAgdmFsLAogICAgICAgIElOVCAgICAgbnVtYiwg ICAgCiAgICAgICAgRkxPQVQgICAqbWFwICAgICAKICk7CgoKIAoKSU5UIERJU0tDX0RlbGV0ZU9s ZCgKICAgICAgICBJTlQgICAgIGxpZmVTcGFuCiApOwoKdm9pZCAgRElTS0NfUHVyZ2UoCiAgICB2 b2lkIAogKTsKCklOVCBESVNLQ19SZWFkSW5mbygKICAgICAgICBJTlQgICAgICpsaWZlc3Bhbgog KTsKCklOVCBESVNLQ19Xcml0ZUluZm8oCiAgICAgICAgSU5UICAgICBsaWZlc3BhbgogKTsKCnZv aWQgIERJU0tDX1JlYWRGaWxlcygKICAgIHZvaWQgCiApOwoKSU5UIERJU0tDX1JlYWRGaWxlbmFt ZXMoCiAgICBDSEFSICAgICpwcmVmaXgKICk7CgpJTlQgRElTS0NfRGVsZXRlQWxsKAogICAgICAg ICAgICB2b2lkIAogKTsKCklOVCBESVNLQ19EZWxldGVBbGxVc2VyRGF0YSgKICAgICAgICBJTlQg ICAgIHVpZAogKTsKCklOVCBESVNLQ19EZWxldGVLZXkoCiAgICAgICAgSU5UICAgICBrZXkKICk7 CgpJTlQgRElTS0NfVGFsaygKICAgICAgICBESVNLQ19GSUxFICAgKmNtZGJ1ZgogKTsKCklOVCAg ICAgRElTS0NfVXNlRmlsZSgKICAgIENIQVIgICAgKmZpbGVuYW1lLAogICAgQ0hBUiAgICAqZXh0 ZW5zaW9uc1tdLAogICAgSU5UICAgICBudW1FeHRlbnNpb25zLAogICAgQ0hBUiAgICAqdXNlRmls ZSwKICAgIElOVCAgICAgdmVyYm9zZQogKTsKCgogCgpJTlQgRkZUX1JlYWwxZCgKICAgICAgICBG TE9BVCAgICpkYXRhLAogICAgICAgIElOVCAgICAgbiwKICAgICAgICBJTlQgICAgIGlzaWduCiAp OwoKSU5UIEZGVF9SZWFsMmQoCiAgICAgICAgRkxPQVQgICAqZGF0YSwKICAgICAgICBJTlQgICAg IHhkaW0sCiAgICAgICAgSU5UICAgICB5ZGltLAogICAgICAgIElOVCAgICAgaHNpemUsCiAgICAg ICAgSU5UICAgICBpc2lnbgogKTsKCgogCgpJTlQgVV9GaW5kRmlsZU1hY2hpbmUoCiAgICAgICAg Y29uc3QgY2hhciAgKmZpbGVuYW1lLAogICAgICAgIENIQVIgICAgICAgICptYWNoaW5lCiApOwoK CiAKCnZvaWQgICAgRlBFX0Rpc2FibGVVbmRlcmZsb3coCiAgICAgICAgdm9pZAogKTsKCgogCgpj b25zdCBjaGFyICpVX1BhcnNlQUZyYW5nZSgKICAgICAgICBjb25zdCBjaGFyICAqcHRyLAogICAg ICAgIEZSQU5HRSAgICAgICp0aGVGcmFuZ2UsCiAgICAgICAgZmxvYXQgICAgICAgZGVmYXVsdElu YwogKTsKCmNvbnN0IGNoYXIgKlVfUGFyc2VBRmxvYXQoCiAgICAgICAgY29uc3QgY2hhciAgKnB0 cgogKTsKCmludCBVX1BhcnNlRnJhbmdlKAogICAgICAgIGNvbnN0IGNoYXIgICpmVG9rZW4sCiAg ICAgICAgRlJBTkdFICAqKmZyYW5nZXMKICk7CgppbnQgVV9Jc0FGcmFtZSgKICAgICAgICBjaGFy ICAgICp0b2tlbgogKTsKCnZvaWQgICAgIFVfU3ByaW50RnJhbmdlKAogICAgICAgIGNoYXIgICAg KnN0ciwKICAgICAgICBpbnQgICAgIG51bSwKICAgICAgICBjb25zdCBGUkFOR0UgICAgKmZyYW5n ZXMKICk7Cgp2b2lkICAgICBVX1NwcmludE5GcmFuZ2UoCiAgICAgICAgY2hhciAgICAqc3RyLAog ICAgICAgIGludCAgICAgbnVtLAogICAgICAgIGNvbnN0IEZSQU5HRSAgICAqZnJhbmdlcywKICAg ICAgICBpbnQgICAgIG1heGxlbgogKTsKCnZvaWQgICAgIFVfU3ByaW50TldGRnJhbmdlKAogICAg ICAgIGNoYXIgICAgICAgICAgICAqc3RyLAogICAgICAgIGludCAgICAgICAgICAgICBudW0sCiAg ICAgICAgY29uc3QgRlJBTkdFICAgICpmcmFuZ2VzLAogICAgICAgIGludCAgICAgICAgICAgICBt YXhsZW4sCiAgICAgICAgQk9PTEVBTiAgICAgICAgIHVzZVdmTnVtcwogKTsKCmludCBVX0ZyYW1l SW5GcmFuZ2UoCiAgICAgICAgaW50ICAgICBmcmFtZSwKICAgICAgICBpbnQgICAgIG51bSwKICAg ICAgICBGUkFOR0UgICpmcmFuZ2VzCiApOwoKaW50IFVfSXNBRnJhbmdlKAogICAgICAgIGNvbnN0 IGNoYXIgICp0b2tlbgogKTsKCmludCBVX0lzQUZyYW5nZTIoCiAgICAgICAgY29uc3QgY2hhciAg KnRva2VuCiApOwoKCiAKCnZvaWQgTUVNX0NoZWNrQXZhaWwoCiAgICBpbnQgKmZyZWVtZW0sCiAg ICBpbnQgKmZyZWVzd3AKICk7CgoKIAoKdm9pZCAgICAgVV9HZXRFeHRlbigKICAgICAgICAgICAg Q0hBUiAqZmlsZSwgICAgICAKICAgICAgICAgICAgQ0hBUiAqb3V0ZmlsZSwgICAgICAgCiAgICAg ICAgICAgIGNvbnN0IENIQVIgKmV4dGVuICAgIAogKTsKCklOVCAgICAgVV9FeHRyYWN0RXh0ZW4o CiAgICAgICAgICAgIGNvbnN0IENIQVIgKmZpbGUsICAgICAgICAKICAgICAgICAgICAgQ0hBUiAq ZXh0ZW4gIAogKTsKCnZvaWQgICAgIFVfU3RyaXBFeHRlbigKICAgICAgICAgICAgY29uc3QgQ0hB UiAqZmlsZSwgICAgICAgIAogICAgICAgICAgICBDSEFSICpvdXRmaWxlLCAgICAgICAKICAgICAg ICAgICAgQ0hBUiAqZXh0ZW4gIAogKTsKCnZvaWQgICAgIFVfQnVpbGRGaWxlTmFtZSgKICAgICAg ICAgICAgQ0hBUiAgICAqb3JpZywKICAgICAgICAgICAgQ0hBUiAgICAqb3V0LAogICAgICAgICAg ICBJTlQgICAgIGZyYW1lCiApOwoKdm9pZCAgICAgVV9TcGxpdEZpbGVOYW1lKAogICAgICAgICAg ICBDSEFSICAgICppbiwKICAgICAgICAgICAgQ0hBUiAgICAqYmFzZSwKICAgICAgICAgICAgSU5U ICAgICAqZnJhbWUsCiAgICAgICAgICAgIENIQVIgICAgKmV4dG4KICk7Cgp2b2lkICAgICBVX1Nw bGl0RG90RmlsZU5hbWUoCiAgICAgICAgICAgIENIQVIgICAgKmluLAogICAgICAgICAgICBDSEFS ICAgICpiYXNlLAogICAgICAgICAgICBJTlQgICAgICpmcmFtZSwKICAgICAgICAgICAgQ0hBUiAg ICAqZXh0bgogKTsKCnZvaWQgICAgIFVfU3BsaXRGaWxlTmFtZTIoCiAgICAgICAgICAgIENIQVIg ICAgKmluLAogICAgICAgICAgICBDSEFSICAgICpiYXNlLAogICAgICAgICAgICBJTlQgICAgICpm cmFtZSwKICAgICAgICAgICAgQ0hBUiAgICAqZXh0bgogKTsKCgogCgpjaGFyICpVX0dldExpbmUo CiAgICAgICAgRklMRSAgICAqZnB0ciAgICAKICk7CgpSRUFMICpVX1JlYWRWYWx1ZXMoCiAgICAg ICAgRklMRSAqZnB0ciwKICAgICAgICBJTlQgICpudW1iCiApOwoKCiAKCnZvaWQgTElOS19EZWJ1 ZygKICAgICAgICBpbnQgZmxhZwogKTsKCnZvaWQgKkxJTktfQWxsb2MoCiAgICAgICAgSU5UIHNp emUsICAgIAogICAgICAgIElOVCBleHRyYSAgICAKICk7Cgp2b2lkIExJTktfRnJlZSgKICAgICAg ICB2b2lkICpidWYsICAgICAgIAogICAgICAgIHZvaWQgKnB0ciAgICAgICAgCiApOwoKdm9pZCBM SU5LX0ZyZWVBbGwoCiAgICAgICAgdm9pZCAqYnVmICAgICAgICAKICk7Cgp2b2lkICpMSU5LX0dl dE5leHRGcmVlKAogICAgICAgIHZvaWQgKmJ1ZgogKTsKCnZvaWQgKkxJTktfSW5kZXgoCiAgICAg ICAgdm9pZCAqYnVmLAogICAgICAgIGludCBpbmRleAogKTsKCgogCgpJTlQgVV9TZXRMb2NrKAog ICAgICAgIENIQVIgICAgKmRldmljZSwKICAgICAgICBDSEFSICAgICptZXNzYWdlCiApOwoKSU5U IFVfQ2xlYXJMb2NrKAogICAgICAgIENIQVIgICAgKmRldmljZQogKTsKCklOVCBVX05ldFNldExv Y2soCiAgICAgICAgY29uc3QgQ0hBUiAgKmRldmljZSwKICAgICAgICBjb25zdCBDSEFSICAqbWVz c2FnZQogKTsKCklOVCBVX05ldENsZWFyTG9jaygKICAgICAgICBjb25zdCBDSEFSICAqZGV2aWNl CiApOwoKCiAKCklOVCBVX0xvZygKICAgICAgICBJTlQgICAgIGpvYiwKICAgICAgICBDSEFSICAg IG9wZXIsCiAgICAgICAgSU5UICAgICBmcmFtZSwKICAgICAgICBJTlQgICAgIGNwdVNlYywKICAg ICAgICBjb25zdCBDSEFSICAqZGVzYywKICAgICAgICBjb25zdCBDSEFSICAqbG9nZmlsZQogKTsK CgogCgp2b2lkIE1BVEhfSW5pdFJhbmQoCiAgICAgICAgaW50IHNlZWQKICk7CgpTSE9SVCBNQVRI X1Nob3J0UmFuZCgKICAgICAgICB2b2lkCiApOwoKSU5UIE1BVEhfUmFuZG9taXplKAogICAgICAg IHZvaWQKICk7Cgp2b2lkIE1BVEhfU2VlZCgKICAgICAgICBJTlQgc2VlZAogKTsKCnZvaWQgTUFU SF9HZXRQbGFuZUVxKAogICAgICAgIFZFUlRFWCAgKnZlcnRzLAogICAgICAgIElOVCAgICAgbnVt YlZlcnRzLAogICAgICAgIFZFQ1Q0RCAgKnBsZXEKICk7Cgp2b2lkIE1BVEhfR2V0UGxhbmVFcURv dWJsZSgKICAgICAgICBWRVJURVggICp2ZXJ0cywKICAgICAgICBJTlQgICAgIG51bWJWZXJ0cywK ICAgICAgICBWRUNUNEQgICpwbGVxCiApOwoKRE9VQkxFIE1BVEhfVHJhc2hSZWdpZVplcm8gKAog ICAgICAgIHZvaWQKICk7Cgp2b2lkIE1BVEhfR2V0Tm9ybWFsKAogICAgICAgIFZFUlRFWCAgKnZl cnRzLAogICAgICAgIElOVCAgICAgbnVtYlZlcnRzLAogICAgICAgIFZFUlRFWCAgKm5vcm1hbAog KTsKCklOVCBNQVRIX0ludGVyc2VjdExpbmUyZCgKICAgICAgICBGTE9BVCB4MWEsCiAgICAgICAg RkxPQVQgeTFhLAogICAgICAgIEZMT0FUIHgxYiwKICAgICAgICBGTE9BVCB5MWIsCiAgICAgICAg RkxPQVQgeDJhLAogICAgICAgIEZMT0FUIHkyYSwKICAgICAgICBGTE9BVCB4MmIsCiAgICAgICAg RkxPQVQgeTJiLAogICAgICAgIEZMT0FUICp4LAogICAgICAgIEZMT0FUICp5CiApOwoKZmxvYXQg TUFUSF9BdG9mICgKICAgIGNoYXIgICAgKmFzY2lpCiApOwoKdm9pZCBNQVRIX0ZQcmludEZsb2F0 KAogICAgICAgIEZJTEUgKmZwdHIsCiAgICAgICAgZmxvYXQgdmFsdWUKICk7CgpJTlQgTUFUSF9J bnRlcnNlY3RQbGFuZUxpbmUoCiAgICAgICAgVkVDVDREICAqcGxhbmUsCiAgICAgICAgVkVSVEVY ICAqcG50MSwKICAgICAgICBWRVJURVggICpwbnQyLAogICAgICAgIFZFUlRFWCAgKm91dAogKTsK CklOVCBNQVRIX0VsZW1JbnNpZGUyZCgKICAgICAgICBWRVJURVggICpjb29yZHMsCiAgICAgICAg SU5UICAgICBudW1iLAogICAgICAgIFJFQUwgICAgKnZlcnQsCiAgICAgICAgVkVDVDREICAqcGxh bmVBcmcKICk7CgpJTlQgSW5zaWRlUG9seTJEKAogICAgICAgIFZFUlRFWCAgKmNvb3JkcywKICAg ICAgICBJTlQgICAgIG51bWIsCiAgICAgICAgUkVBTCAgICAqdmVydCwKICAgICAgICBJTlQgICAg IHcgICAgCiApOwoKSU5UIE1BVEhfSW50ZXJzZWN0U2VnMmQoCiAgICAgICAgRkxPQVQgeDFhLAog ICAgICAgIEZMT0FUIHkxYSwKICAgICAgICBGTE9BVCB4MWIsCiAgICAgICAgRkxPQVQgeTFiLAog ICAgICAgIEZMT0FUIHgyYSwKICAgICAgICBGTE9BVCB5MmEsCiAgICAgICAgRkxPQVQgeDJiLAog ICAgICAgIEZMT0FUIHkyYiwKICAgICAgICBGTE9BVCAqeCwKICAgICAgICBGTE9BVCAqeQogKTsK CklOVCBNQVRIX0ludGVyc2VjdExpbmVTZWcyZCgKICAgICAgICBGTE9BVCB4MWEsCiAgICAgICAg RkxPQVQgeTFhLAogICAgICAgIEZMT0FUIHgxYiwKICAgICAgICBGTE9BVCB5MWIsCiAgICAgICAg RkxPQVQgeDJhLAogICAgICAgIEZMT0FUIHkyYSwKICAgICAgICBGTE9BVCB4MmIsCiAgICAgICAg RkxPQVQgeTJiLAogICAgICAgIEZMT0FUICp4LAogICAgICAgIEZMT0FUICp5CiApOwoKSU5UIE1B VEhfQ2xpcFNlZ1RvUG9seSgKICAgICAgICBWRVJURVggICp2MEFyZywKICAgICAgICBWRVJURVgg ICp2MUFyZywKICAgICAgICBWRVJURVggICp2ZXJ0cywKICAgICAgICBJTlQgICAgIG51bVZlcnRz CiApOwoKSU5UIE1BVEhfQ2xpcExpbmVUb1BvbHkoCiAgICAgICAgVkVSVEVYICAqdjBBcmcsCiAg ICAgICAgVkVSVEVYICAqdjFBcmcsCiAgICAgICAgVkVSVEVYICAqdmVydHMsCiAgICAgICAgSU5U ICAgICBudW1WZXJ0cwogKTsKCnZvaWQgTUFUSF9HZXRQbGFuZUNvZGUoCiAgICAgICAgVkVDVDRE ICAqcGxlcUFyZywKICAgICAgICBJTlQgICAgICp1LCAKICAgICAgICBJTlQgICAgICp2LCAKICAg ICAgICBJTlQgICAgICp3CiApOwoKdm9pZCBNQVRIX01ha2VUaGlyZENvb3JkKAogICAgICAgIFZF UlRFWCAgKnZlcnRzQXJnLAogICAgICAgIElOVCAgICAgbnVtVmVydHMsCiAgICAgICAgVkVDVDRE ICAqcGxlcUFyZwogKTsKCklOVCBNQVRIX01ha2VXQ29vcmQoCiAgICAgICAgVkVSVEVYICAqdmVy dHNBcmcsCiAgICAgICAgSU5UICAgICBudW1WZXJ0cywKICAgICAgICBWRUNUNEQgICpwbGVxQXJn LAogICAgICAgIElOVCAgICAgdwogKTsKCnZvaWQgTUFUSF9NYWtlSW50ZXJzZWN0VygKICAgICAg ICBWRVJURVggKnBudDFBcmcsCiAgICAgICAgVkVSVEVYICpwbnQyQXJnLAogICAgICAgIFZFUlRF WCAqaW50ZXJBcmcsCiAgICAgICAgSU5UICAgIHcKICk7CgpJTlQgTUFUSF9JbnRlcnNlY3RQbGFu ZXMoCiAgICAgICAgVkVDVDREICAqcGxlcTEsIAogICAgICAgIFZFQ1Q0RCAgKnBsZXEyLAogICAg ICAgIFZFUlRFWCAgKnYxLCAKICAgICAgICBWRVJURVggICp2MgogKTsKCklOVCBNQVRIX0ludGVy c2VjdFBvbHlzKAogICAgICAgIFZFUlRFWCAgKnAxVmVydHMsCiAgICAgICAgSU5UICAgICBudW0x VmVydHMsCiAgICAgICAgVkVSVEVYICAqcDJWZXJ0cywKICAgICAgICBJTlQgICAgIG51bTJWZXJ0 cywKICAgICAgICBWRVJURVggICp2MSwgCiAgICAgICAgVkVSVEVYICAqdjIKICk7CgpJTlQgTUFU SF9JbnNpZGVQb2x5M0QoCiAgICAgICAgVkVSVEVYICAqdmVydHMsICAgICAgCiAgICAgICAgaW50 ICAgICBOdW1PZlZlcnRzLAogICAgICAgIFZFQ1Q0RCAgKnBsYW5lLCAgICAgIAogICAgICAgIFZF UlRFWCAgKmludGVyc2VjdCAgIAogKTsKCklOVCBNQVRIX0luc2lkZVBvbHkyRCgKICAgICAgICBW RVJURVggICp2ZXJ0cywgICAgICAKICAgICAgICBpbnQgICAgIE51bU9mVmVydHMsCiAgICAgICAg VkVSVEVYICAqaW50ZXJzZWN0LCAgCiAgICAgICAgSU5UICAgICB3ICAgICAgICAgICAgCiApOwoK dm9pZCBNQVRIX0ZpbmRTcGhlcmVDb29yZCgKICAgICAgICBWRVJURVggICpvcmlnaW4sCiAgICAg ICAgVkVSVEVYICAqcG50MiwKICAgICAgICBGTE9BVCAgICp6QW5nbGUsCiAgICAgICAgRkxPQVQg ICAqeVJvdCwKICAgICAgICBGTE9BVCAgICpyYWRpdXMKICk7Cgp2b2lkIE1BVEhfVmVydGV4QXZl KAogICAgICAgIFZFUlRFWCAgKnZlcnRzLAogICAgICAgIElOVCAgICAgbnVtYiwKICAgICAgICBS RUFMICAgICp4LAogICAgICAgIFJFQUwgICAgKnksCiAgICAgICAgUkVBTCAgICAqegogKTsKCklO VCBNQVRIX1BvaW50T25TZWczRCgKICAgICAgICBWRVJURVggICp2ZXJ0MSwKICAgICAgICBWRVJU RVggICp2ZXJ0MiwKICAgICAgICBWRVJURVggICpwb2ludCwKICAgICAgICBSRUFMICAgIHRvbAog KTsKCnZvaWQgTUFUSF9WZXJ0ZXhSZXZlcnNlKAogICAgICAgIFZFUlRFWCAqY29vcmRzLAogICAg ICAgIElOVCBsZW5nCiApOwoKdm9pZCBNQVRIX0ZhY3RvckFsb25nU2VnbWVudCgKICAgICAgICBW RVJURVggKnN0YXJ0LCAgIAogICAgICAgIFZFUlRFWCAqZW5kLCAgICAgCiAgICAgICAgVkVSVEVY ICpwb2ludCwgICAKICAgICAgICBSRUFMICAgKmZhY3RvcgogKTsKClJFQUwgTUFUSF9GYXN0UG93 KAogICAgICAgIFJFQUwgICAgYmFzZSwKICAgICAgICBSRUFMICAgIGV4cG8KICk7CgpSRUFMIE1B VEhfSVBvdygKICAgICAgICBSRUFMIG51bSwKICAgICAgICBJTlQgZXhwbwogKTsKCklOVCBNQVRI X1F1YWRyYXRpY0VxdWF0aW9uKAogICAgRkxPQVQgICBBLAogICAgRkxPQVQgICBCLAogICAgRkxP QVQgICBDLAogICAgRkxPQVQgICAqc29sMSwKICAgIEZMT0FUICAgKnNvbDIsCiAgICBGTE9BVCAg ICpjaGVjazEsCiAgICBGTE9BVCAgICpjaGVjazIKICk7CgpCT09MRUFOIE1BVEhfUG9seWdvbjJE Q2xvY2t3aXNlKAogICAgVkVSVDJEICAgICAgKmNvb3JkLAogICAgSU5UICAgICAgICAgbnVtYmVy Q29vcmRzCiApOwoKQk9PTEVBTiBNQVRIX1BvaW50SW5Qb2x5Z29uMkQoCiAgICBWRVJUMkQgICAg ICAqcG9pbnQsCiAgICBWRVJUMkQgICAgICAqY29vcmQsCiAgICBJTlQgICAgICAgICBudW1iZXJD b29yZHMKICk7CgpjaGFyICpNQVRIX0Z0b2EgKAogICAgUkVBTCAgICB2YWx1ZQogKTsKCkJPT0xF QU4gTUFUSF9TZXRNYXRoRnRvYVZlcmJvc2UgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09M RUFOIE1BVEhfR2V0TWF0aEZ0b2FWZXJib3NlICgKICAgIHZvaWQgCiApOwoKCiAKCnZvaWQgIE1B VEhFUlJPUl9Jbml0ICgKICAgIHZvaWQgCiApOwoKSU5UIE1BVEhFUlJPUl9SZXBvcnQgKAogICAg dm9pZCAKICk7CgoKIAoKdm9pZCBNQVRfSGFyZHdhcmVNdWx0KAogICAgICAgIElOVCBvbl9vZmYK ICk7Cgp2b2lkIE1BVF9JZGVudGl0eSgKICAgICAgICBNQVRSSVggIG1hdHJpeEFyZwogKTsKCnZv aWQgTUFUX0NvcHkgKAogICAgICAgIE1BVFJJWCAgZGVzdGluQXJnLCAKICAgICAgICBNQVRSSVgg IHNvdXJjZUFyZwogKTsKCnZvaWQgTUFUX1dpbmRvdygKICAgICAgICBSRUFMICAgIHdsLCAKICAg ICAgICBSRUFMICAgIHdyLCAKICAgICAgICBSRUFMICAgIHdiLCAKICAgICAgICBSRUFMICAgIHd0 LAogICAgICAgIFJFQUwgICAgd2gsIAogICAgICAgIFJFQUwgICAgd3ksIAogICAgICAgIFJFQUwg ICAgd2UsCiAgICAgICAgUkVBTCAgICB3aW5kWzRdWzRdCiApOwoKSU5UIE1BVF9JbnZlcnNlKAog ICAgICAgIGludCBkLCAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgTUFUUklYICBvcmdN YXQsCiAgICAgICAgTUFUUklYICBpbnZNYXQKICk7Cgp2b2lkIE1BVF9UcmFuc2xhdGUoCiAgICAg ICAgUkVBTCAgICB4LCAgICAgICAgICAgIAogICAgICAgIFJFQUwgICAgeSwgCiAgICAgICAgUkVB TCAgICB6LAogICAgICAgIE1BVFJJWCAgbWF0cml4QXJnICAgIAogKTsKCnZvaWQgTUFUX1JvdGF0 ZSgKICAgICAgICBSRUFMICAgIGFuZ2xlLCAgICAgICAKICAgICAgICBpbnQgICAgIGF4aXMsICAg ICAgICAKICAgICAgICBNQVRSSVggIG1hdHJpeEFyZyAgICAKICk7Cgp2b2lkIE1BVF9TY2FsZSgK ICAgICAgICBSRUFMICAgIHgsIAogICAgICAgIFJFQUwgICAgeSwgCiAgICAgICAgUkVBTCAgICB6 LCAgICAgICAgICAgCiAgICAgICAgTUFUUklYICBtYXRyaXhBcmcgICAgCiApOwoKdm9pZCBNQVRf U2tldygKICAgICAgICBSRUFMICAgIGZhY3RvcjEsIAogICAgICAgIFJFQUwgICAgZmFjdG9yMiwg ICAgICAgICAKICAgICAgICBJTlQgICAgIGF4aXMsICAgICAgICAgICAgCiAgICAgICAgTUFUUklY ICBtYXRyaXhBcmcgICAgICAgIAogKTsKCnZvaWQgTUFUX0RvdCgKICAgICAgICBWRUNUT1IgICpp biwgICAgICAgICAgICAgCiAgICAgICAgUkVBTCAgICAqb3V0LCAgICAgICAgICAgIAogICAgICAg IElOVCAgICAgbiwgICAgICAgICAgICAgICAKICAgICAgICBWRUNUT1IgICptICAgICAgICAgICAg ICAgCiApOwoKdm9pZCBNQVRfUG9pbnRUcmFuc2Zvcm0oCiAgICAgICAgVkVDVE9SICAqaW4sICAg ICAgICAgICAgIAogICAgICAgIFZFQ1RPUiAgKm91dCwgICAgICAgICAgICAKICAgICAgICBJTlQg ICAgIG4sICAgICAgICAgICAgICAgCiAgICAgICAgTUFUUklYICBtICAgICAgICAgICAgICAgIAog KTsKCnZvaWQgIE1BVF9Qb2ludFRyYW5zZm9ybSAoCiAgICBWRUNUT1IgICppbiwgICAgIAogICAg VkVDVE9SICAqb3V0LCAgICAKICAgIElOVCAgICAgbiwgICAgICAgCiAgICBNQVRSSVggIG0gICAg ICAgIAogKTsKCnZvaWQgIE1BVF9PbmVQb2ludFRyYW5zZm9ybSAoCiAgICAgICAgVkVDVE9SICAq aW4sICAgICAKICAgICAgICBWRUNUT1IgICpvdXQsICAgIAogICAgICAgIE1BVFJJWCAgbSAgICAg ICAgCiApOwoKdm9pZCBNQVRfVmVjdG9yVHJhbnNmb3JtKAogICAgICAgIFZFQ1Q0RCAqaW4sICAg ICAgICAgICAgIAogICAgICAgIFZFQ1Q0RCAqb3V0LCAgICAgICAgICAgIAogICAgICAgIE1BVFJJ WCBtICAgICAgICAgICAgICAgIAogKTsKCnZvaWQgIE1BVF9WZWN0b3JUcmFuc2Zvcm1Qb3N0TXVs dCgKICAgICAgICBWRUNUNEQgKmluLCAgICAgICAgICAgICAKICAgICAgICBWRUNUNEQgKm91dCwg ICAgICAgICAgICAKICAgICAgICBNQVRSSVggbSAgICAgICAgICAgICAgICAKICk7Cgp2b2lkIE1B VF9BcmJSb3QoCiAgICAgICAgVkVDVE9SICAqcDEsICAgICAgICAgIAogICAgICAgIFZFQ1RPUiAg KnAyLCAgICAgICAgICAKICAgICAgICBSRUFMICAgIGRlZ3JlZSwgICAgICAgCiAgICAgICAgTUFU UklYICBtYXRyICAgICAgICAgIAogKTsKCnZvaWQgTUFUX0F4aXNSb3QoCiAgICAgICAgVkVDVE9S ICpheGlzLCAgICAgICAKICAgICAgICBSRUFMICAgZGVncmVlLCAgICAgIAogICAgICAgIE1BVFJJ WCBtYXQgICAgICAgICAgCiApOwoKdm9pZCBNQVRfUHJpbnQoCiAgICAgICAgTUFUUklYICBtYXQK ICk7Cgp2b2lkIE1BVF9GcHJpbnQoCiAgICAgICAgRklMRSAgICAqZnB0ciwKICAgICAgICBNQVRS SVggIG1hdAogKTsKCnZvaWQgTUFUX0ZwcmludFdpdGhJbmRlbnQoCiAgICAgICAgRklMRSAgICAq ZnB0ciwKICAgICAgICBJTlQgICAgIGluZGVudCwKICAgICAgICBNQVRSSVggIG1hdAogKTsKCnZv aWQgTUFUX0VwcmludFdpdGhJbmRlbnQoCiAgICAgICAgRklMRSAgICAqZnB0ciwKICAgICAgICBJ TlQgICAgIGluZGVudCwKICAgICAgICBNQVRSSVggIG1hdAogKTsKCnZvaWQgTUFUX1Byb2plY3Qo CiAgICAgICAgUE9JTlQgICAqcG9pbnQsCiAgICAgICAgVkVDVDREICAqcGxhbmUsCiAgICAgICAg TUFUUklYICBtYXQKICk7Cgp2b2lkIE1BVF9PcnRob1Byb2plY3QoCiAgICAgICAgUE9JTlQgICAq cG9pbnQsCiAgICAgICAgVkVDVDREICAqcGxhbmUsCiAgICAgICAgTUFUUklYICBtYXQKICk7Cgp2 b2lkIE1BVF9SZWZsZWN0KAogICAgICAgIFZFQ1Q0RCAgKnBsYW5lLAogICAgICAgIE1BVFJJWCAg bWF0CiApOwoKdm9pZCBNQVRfTWFrZVhmb3JtKAogICAgICAgIElOVCAgICAgZ2ltYmxlWzNdLAog ICAgICAgIEZMT0FUICAgdHgsCiAgICAgICAgRkxPQVQgICB0eSwKICAgICAgICBGTE9BVCAgIHR6 LAogICAgICAgIEZMT0FUICAgcngsCiAgICAgICAgRkxPQVQgICByeSwKICAgICAgICBGTE9BVCAg IHJ6LAogICAgICAgIEZMT0FUICAgc3gsCiAgICAgICAgRkxPQVQgICBzeSwKICAgICAgICBGTE9B VCAgIHN6LAogICAgICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCBNQVRfTWFrZUxvY2FsKAogICAg ICAgIFZFUlRFWCAqY2VudGVyLAogICAgICAgIFZFUlRFWCAqYXhpcywKICAgICAgICBNQVRSSVgg bWF0CiApOwoKSU5UIE1BVF9QZXJzcGVjdGl2ZSgKICAgICAgICBGTE9BVCAgIHdpZHRoLCAgICAg CiAgICAgICAgRkxPQVQgICBhc3BlY3QsICAgIAoKICAgICAgICBGTE9BVCAgIGhpdGhlciwgICAg CgogICAgICAgIEZMT0FUICAgeW9uLCAgICAgICAKICAgICAgICBNQVRSSVggIG1hdCAgICAgICAg CiApOwoKdm9pZCBNQVRfVmlld3BvcnQoCiAgICAgICAgRkxPQVQgICAgICBsZWZ0LAogICAgICAg IEZMT0FUICAgICAgcmlnaHQsCiAgICAgICAgRkxPQVQgICAgICBib3R0b20sCiAgICAgICAgRkxP QVQgICAgICB0b3AsCiAgICAgICAgTUFUUklYICAgICBtYXQKICk7Cgp2b2lkIE1BVF9DYW1lcmEo CiAgICAgICAgRkxPQVQgZm9jYWxMZW4sCiAgICAgICAgRkxPQVQgYXBlcnR1cmUsCiAgICAgICAg RkxPQVQgYXNwZWN0LAogICAgICAgIEZMT0FUIGhpdGhlciwKICAgICAgICBGTE9BVCB5b24sCiAg ICAgICAgTUFUUklYIG1hdAogKTsKCklOVCBNQVRfVmVjdFJvdGF0ZSgKICAgICAgICBWRVJURVgg ICp0YXJnVmVjdCwKICAgICAgICBWRVJURVggICpjdXJWZWN0LAogICAgICAgIE1BVFJJWCAgbWF0 CiApOwoKSU5UIE1BVF9WZWN0Um90YXRlQWRqdXN0YWJsZSgKICAgICAgICBWRVJURVggICp0YXJn VmVjdCwKICAgICAgICBWRVJURVggICpjdXJWZWN0LAogICAgICAgIFJFQUwgICAgYW1vdW50LCAg ICAgIAogICAgICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCBNQVRfQ29uY2F0KAogICAgICAgIE1B VFJJWCBtYXQxLAogICAgICAgIE1BVFJJWCBtYXQyLAogICAgICAgIE1BVFJJWCBtYXQzCiApOwoK dm9pZCBNQVRfQ29uY2F0KAogICAgICAgIE1BVFJJWCAgbWF0MUFyZywKICAgICAgICBNQVRSSVgg IG1hdDJBcmcsCiAgICAgICAgTUFUUklYICBtYXQzQXJnCiApOwoKdm9pZCAgTUFUX0F0b01hdCgK ICAgIGNvbnN0IENIQVIgICoqYXJndiwKICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCAgTUFUX1Nw cmludE1hdCgKICAgIENIQVIgICAgKnN0ciwKICAgIE1BVFJJWCAgbWF0CiApOwoKSU5UIE1BVF9D b21wYXJlKAogICAgICAgIE1BVFJJWCAgbWF0MSwgCiAgICAgICAgTUFUUklYICBtYXQyCiApOwoK SU5UIE1BVF9Db21wYXJlSXNDbG9zZSAoCiAgICBNQVRSSVggIG1hdDEsIAogICAgTUFUUklYICBt YXQyCiApOwoKdm9pZCBNQVRfVHJhbnNwb3NlKAogICAgICAgIE1BVFJJWCAgbWF0MSwKICAgICAg ICBNQVRSSVggIG1hdDIKICk7Cgp2b2lkIE1BVF9QaXZvdFRocmVlUm90cygKICAgICAgICBSRUFM ICAgIHhvZmYsIAogICAgICAgIFJFQUwgICAgeW9mZiwgCiAgICAgICAgUkVBTCAgICB6b2ZmLAog ICAgICAgIFJFQUwgICAgYW5nbGUxLAogICAgICAgIElOVCAgICAgYXhpczEsCiAgICAgICAgUkVB TCAgICBhbmdsZTIsCiAgICAgICAgSU5UICAgICBheGlzMiwKICAgICAgICBSRUFMICAgIGFuZ2xl MywKICAgICAgICBJTlQgICAgIGF4aXMzLAogICAgICAgIE1BVFJJWCAgbWF0CiApOwoKdm9pZCBN QVRfUGl2b3RPbmVSb3QoCiAgICAgICAgUkVBTCAgICB4b2ZmLCAKICAgICAgICBSRUFMICAgIHlv ZmYsIAogICAgICAgIFJFQUwgICAgem9mZiwKICAgICAgICBSRUFMICAgIGFuZ2xlLAogICAgICAg IElOVCAgICAgYXhpcywKICAgICAgICBNQVRSSVggIG1hdAogKTsKCklOVCBNQVRfRmluZFJvdHMo CiAgICAgICAgTUFUUklYICBtLAogICAgICAgIFJFQUwgICAgKnhSb3QsCiAgICAgICAgUkVBTCAg ICAqeVJvdCwKICAgICAgICBSRUFMICAgICp6Um90CiApOwoKSU5UIE1BVF9GaW5kR2ltYmFsUm90 cygKICAgICAgICBNQVRSSVggIG0sCiAgICAgICAgUkVBTCAgICAqcm90cywKICAgICAgICBJTlQg ICAgICpnaW1iYWwKICk7CgpSRUFMIE1BVF9EZXRlcm1pbmFudDMzb2Y0NCgKICAgICAgICAgICAg ICAgIE1BVFJJWCBtCiApOwoKCiAKCnZvaWQgIFRSU01BVF9Db25jYXRYVHJhblRvTWF0ICgKICAg IE1BVFJJWCAgaW5NYXQsCiAgICBSRUFMICAgIHZhbHVlLAogICAgTUFUUklYICBvdXRNYXQKICk7 Cgp2b2lkICBUUlNNQVRfQ29uY2F0WVRyYW5Ub01hdCAoCiAgICBNQVRSSVggIGluTWF0LAogICAg UkVBTCAgICB2YWx1ZSwKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoKdm9pZCAgVFJTTUFUX0NvbmNh dFpUcmFuVG9NYXQgKAogICAgTUFUUklYICBpbk1hdCwKICAgIFJFQUwgICAgdmFsdWUsCiAgICBN QVRSSVggIG91dE1hdAogKTsKCnZvaWQgIFRSU01BVF9Db25jYXRYU2NhbGVUb01hdCAoCiAgICBN QVRSSVggIGluTWF0LAogICAgUkVBTCAgICB2YWx1ZSwKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoK dm9pZCAgVFJTTUFUX0NvbmNhdFlTY2FsZVRvTWF0ICgKICAgIE1BVFJJWCAgaW5NYXQsCiAgICBS RUFMICAgIHZhbHVlLAogICAgTUFUUklYICBvdXRNYXQKICk7Cgp2b2lkICBUUlNNQVRfQ29uY2F0 WlNjYWxlVG9NYXQgKAogICAgTUFUUklYICBpbk1hdCwKICAgIFJFQUwgICAgdmFsdWUsCiAgICBN QVRSSVggIG91dE1hdAogKTsKCnZvaWQgIFRSU01BVF9Db25jYXRBU2NhbGVUb01hdCAoCiAgICBN QVRSSVggIGluTWF0LAogICAgUkVBTCAgICB2YWx1ZSwKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoK dm9pZCAgVFJTTUFUX0NvbmNhdFhSb3RUb01hdCAoCiAgICBNQVRSSVggIGluTWF0LAogICAgUkVB TCAgICByYWRpYW5zLAogICAgTUFUUklYICBvdXRNYXQKICk7Cgp2b2lkICBUUlNNQVRfQ29uY2F0 WVJvdFRvTWF0ICgKICAgIE1BVFJJWCAgaW5NYXQsCiAgICBSRUFMICAgIHJhZGlhbnMsCiAgICBN QVRSSVggIG91dE1hdAogKTsKCnZvaWQgIFRSU01BVF9Db25jYXRaUm90VG9NYXQgKAogICAgTUFU UklYICBpbk1hdCwKICAgIFJFQUwgICAgcmFkaWFucywKICAgIE1BVFJJWCAgb3V0TWF0CiApOwoK dm9pZCAgVFJTTUFUX1RyYW5zZm9ybU9uZVZlcnQgKAogICAgVkVSVEVYICAqaW4sCiAgICBWRVJU RVggICpvdXQsCiAgICBNQVRSSVggIG1hdAogKTsKCnZvaWQgIFRSU01BVF9Qb2ludFRyYW5zZm9y bSAoCiAgICBWRVJURVggICppbiwKICAgIFZFUlRFWCAgKm91dCwKICAgIElOVCAgICAgbnVtYmVy LAogICAgTUFUUklYICBtYXQKICk7Cgp2b2lkICBUUlNNQVRfSWRlbnRpdHkgKAogICAgTUFUUklY ICBtYXRyaXgKICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRYUm90UmFkaWFuICgKICAgIFJF QUwgICAgcmFkaWFucywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01BVF9DaGVh cFZlcnRZUm90UmFkaWFuICgKICAgIFJFQUwgICAgcmFkaWFucywKICAgIFZFUlRFWCAgKnZlcnQK ICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRaUm90UmFkaWFuICgKICAgIFJFQUwgICAgcmFk aWFucywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRYUm90 RGVncmVlICgKICAgIFJFQUwgICAgZGVncmVlcywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09M RUFOIFRSU01BVF9DaGVhcFZlcnRZUm90RGVncmVlICgKICAgIFJFQUwgICAgZGVncmVlcywKICAg IFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01BVF9DaGVhcFZlcnRaUm90RGVncmVlICgK ICAgIFJFQUwgICAgZGVncmVlcywKICAgIFZFUlRFWCAgKnZlcnQKICk7CgpCT09MRUFOIFRSU01B VF9DaGVhcFZlcnRYUm90RGVncmVlMiAoCiAgICBSRUFMICAgIGRlZ3JlZXMsCiAgICBWRVJURVgg ICp2ZXJ0SW4sCiAgICBWRVJURVggICp2ZXJ0T3V0CiApOwoKQk9PTEVBTiBUUlNNQVRfQ2hlYXBW ZXJ0WVJvdERlZ3JlZTIgKAogICAgUkVBTCAgICBkZWdyZWVzLAogICAgVkVSVEVYICAqdmVydElu LAogICAgVkVSVEVYICAqdmVydE91dAogKTsKCkJPT0xFQU4gVFJTTUFUX0NoZWFwVmVydFpSb3RE ZWdyZWUyICgKICAgIFJFQUwgICAgZGVncmVlcywKICAgIFZFUlRFWCAgKnZlcnRJbiwKICAgIFZF UlRFWCAgKnZlcnRPdXQKICk7Cgp2b2lkICBUUlNNQVRfQ29uY2F0ICgKICAgIE1BVFJJWCAgbWF0 MUFyZywKICAgIE1BVFJJWCAgbWF0MkFyZywKICAgIE1BVFJJWCAgbWF0M0FyZwogKTsKCnZvaWQg IFJPVE1BVF9UcmFuc2Zvcm1PbmVWZXJ0ICgKICAgIFZFUlRFWCAgKmluLAogICAgVkVSVEVYICAq b3V0LAogICAgTUFUUklYICBtYXQKICk7CgoKIAoKZmxvYXQgVV9DYWxjdWxhdGVTbGljZVRpbWUg KAogICAgaW50IHdoaWNoU2VnbWVudCwKICAgIGludCB0b3RhbFNsaWNlcywKICAgIGZsb2F0IHNo dXR0ZXJTdGFydCwKICAgIGZsb2F0IHNodXR0ZXJFbmQKICk7CgoKIAoKdm9pZCBNRU1fSW5pdCgK ICAgICAgICBJTlQgICAgIGNvbnN0YW50Q2hlY2tpbmcgICAgCiApOwoKdm9pZCBNRU1fS2VlcFN0 YXRzKAogICAgICAgIHZvaWQKICk7Cgp2b2lkIE1FTV9DbG9zZVN0YXRzICgKICAgIHZvaWQKICk7 Cgp2b2lkIE1FTV9NYXJrU3RhdHMoCiAgICAgICAgY2hhciAqbWVzc2FnZQogKTsKCkZJTEUgKk1F TV9HZXRNZW1GaWxlRnAgKAogICAgICAgIHZvaWQKICk7Cgp2b2lkICpNRU1fQWxsb2MoCiAgICAg ICAgSU5UIG51bWIsICAgIAogICAgICAgIElOVCBzaXplLCAgICAKICAgICAgICBJTlQgZXh0cmEg ICAgCiApOwoKSU5UIE1FTV9WZXJpZnkoIAogICAgICAgIHZvaWQgICAgICAgICAgICAqYnVmLAog ICAgICAgIHJlZ2lzdGVyIGNoYXIgICAqbWVzc2FnZSAgICAgCiApOwoKdm9pZCAqTUVNX0NhbGxv YygKICAgICAgICBJTlQgbnVtYiwgICAgCiAgICAgICAgSU5UIHNpemUsICAgIAogICAgICAgIElO VCBleHRyYSAgICAKICk7Cgp2b2lkICpNRU1fQXBwZW5kKCAKICAgICAgICB2b2lkICpidWYsICAg ICAgICAgICAKICAgICAgICBjb25zdCB2b2lkICphcnJheSwgICAKICAgICAgICBJTlQgbnVtYiAg ICAgICAgICAgICAKICk7Cgp2b2lkICpNRU1fQ29weSgKICAgICAgICB2b2lkICpvdXQsICAgICAg IAogICAgICAgIHZvaWQgKmluICAgICAgICAgCiApOwoKdm9pZCAqTUVNX1Jlc2l6ZSgKICAgICAg ICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCAgbnVtYiAgICAgICAgCiApOwoKdm9pZCAq TUVNX1RvdGFsU2l6ZSggCiAgICAgICAgdm9pZCAqYnVmLCAgICAgICAKICAgICAgICBJTlQgbnVt YiAgICAgICAgIAogKTsKCnZvaWQgTUVNX1VzZVVwKCAKICAgICAgICB2b2lkICpidWYsICAgICAg IAogICAgICAgIElOVCBudW1iICAgICAgICAgCiApOwoKdm9pZCBNRU1fRnJlZSggCiAgICAgICAg dm9pZCAgICAqYnVmICAgICAgICAgCiApOwoKSU5UIE1FTV9GcmVlX1goIAogICAgICAgIHZvaWQg ICAgKmJ1ZiwgICAKICAgICAgICBjaGFyICAgICptZXNzYWdlCiApOwoKdm9pZCBNRU1fR2V0TnVt YiggCiAgICAgICAgdm9pZCAqYnVmLCAgICAgICAKICAgICAgICBJTlQgKm51bWIgICAgICAgIAog KTsKCnZvaWQgTUVNX0dldFNpemUoIAogICAgICAgIHZvaWQgKmJ1ZiwgIAogICAgICAgIElOVCAq c2l6ZQogKTsKCnZvaWQgTUVNX0dldE51bWJUaW1lc1NpemUoIAogICAgICAgIHZvaWQgKmJ1ZiwK ICAgICAgICBJTlQgKnRvdGFsCiApOwoKdm9pZCBNRU1fR2V0VG90YWxCdWZmZXJNZW1vcnlVc2Fn ZSgKICAgICAgICB2b2lkICAgICpidWYsICAgIAogICAgICAgIElOVCAgICAgKnRvdGFsICAgCiAp OwoKdm9pZCBNRU1fR2V0TnVtYkV4dHJhKCAKICAgICAgICB2b2lkICpidWYsICAgICAgIAogICAg ICAgIElOVCAqZXh0cmEgICAgICAgCiApOwoKdm9pZCBNRU1fU2V0TnVtYkV4dHJhKCAKICAgICAg ICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCBleHRyYSAgICAgICAgCiApOwoKdm9pZCBN RU1fR2V0SGVhZGVyKCAKICAgICAgICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCAqbnVt YiwgICAgICAgCiAgICAgICAgSU5UICpzaXplLCAgICAgICAKICAgICAgICBJTlQgKmV4dHJhLCAg ICAgIAogICAgICAgIElOVCAqYXZhaWwgICAgICAgCiApOwoKdm9pZCAqTUVNX1RtcCgKICAgICAg ICBJTlQgbnVtYiwgICAgICAgIAogICAgICAgIElOVCBzaXplICAgICAgICAgCiApOwoKdm9pZCAq TUVNX1RtcENhbGxvYyggCiAgICAgICAgSU5UIG51bWIsICAgCiAgICAgICAgSU5UIHNpemUgCiAp OwoKdm9pZCBNRU1fRGVsZXRlKCAKICAgICAgICB2b2lkICpidWYKICk7CgpJTlQgTUVNX0RlbGV0 ZVNlZygKICAgICAgICB2b2lkICpidWYsICAgICAgIAogICAgICAgIElOVCBzdGFydCwgICAgICAg CiAgICAgICAgSU5UIG51bWIgICAgICAgICAKICk7Cgp2b2lkICpNRU1fSW5zZXJ0KCAKICAgICAg ICB2b2lkICpidWYsICAgICAgCiAgICAgICAgdm9pZCAqYXJyYXksICAgICAKICAgICAgICBJTlQg c3RhcnQsICAgICAgIAogICAgICAgIElOVCBudW1iICAgICAgICAgCiApOwoKdm9pZCAqTUVNX1Nl dE51bWIoCiAgICAgICAgdm9pZCAqYnVmLCAgICAgICAKICAgICAgICBJTlQgbnVtYiAgICAgICAg IAogKTsKCnZvaWQgTUVNX0JyZWFrUG9pbnQoCiAgICAgICAgdm9pZAogKTsKCnZvaWQgTUVNX0No ZWNrQWxsKAogICAgICAgIHZvaWQKICk7Cgp2b2lkIE1FTV9EZWJ1Z051bWIoCiAgICAgICAgY2hh ciAqbWVzc2FnZQogKTsKCklOVCBNRU1fR2V0VG90YWwgKAogICAgICAgIHZvaWQKICk7Cgp2b2lk IE1FTV9QcmludEFsbCgKICAgICAgICBGSUxFICAgICpmcHRyCiApOwoKSU5UIE1FTV9EZWJ1Z1By aW50b3V0ICgKICAgICAgICB2b2lkICAgICAgICAgICAgKmJ1ZiwKICAgICAgICByZWdpc3RlciBj aGFyICAgKm1lc3NhZ2UgICAgIAogKTsKCkJPT0xFQU4gTUVNX1NldFZlcmlmeU1lc3NhZ2VTdGF0 dXMgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE1FTV9HZXRWZXJpZnlNZXNzYWdl U3RhdHVzICgKICAgIHZvaWQgCiApOwoKQk9PTEVBTiBNRU1fU2V0VmVyaWZ5TWVzc2FnZSAoCiAg ICBjaGFyICAgICptZXNzYWdlUHRyCiApOwoKdm9pZCAgTUVNX0luaXRWZXJpZnlNZXNzYWdlICgK ICAgIHZvaWQgCiApOwoKdm9pZCAgTUVNX0NvbmN1cnJlbnQgKAogICAgICAgIElOVCAgICAgZmxh ZwogKTsKCgogCgpJTlQgICAgIE1OR1JfUmVnaXN0ZXJUYXNrKAogICAgICAgIENIQVIgICAgICAg ICpwcm9nLAogICAgICAgIElOVCAgICAgICAgIGJlZ2luLAogICAgICAgIElOVCAgICAgICAgIGVu ZCwKICAgICAgICBJTlQgICAgICAgICBpbmMsCiAgICAgICAgSU5UICAgICAgICAgZnJhbWUsCiAg ICAgICAgSU5UICAgICAgICAgbXBQcm9jcwogKTsKCgogCgp2b2lkIFVUSUxQQVJTRV9EZWJsYW5r KAogICAgICAgIGNoYXIgICAgKm9wZXJhbmQKICk7Cgp2b2lkIFVUSUxQQVJTRV9TdHJpcF9YX1do aXRlc3BhY2UoCiAgICAgICAgY2hhciAgICAqbGluZQogKTsKCnZvaWQgVVRJTFBBUlNFX0RldGFi KAogICAgICAgIGNoYXIgICAgKmxpbmUKICk7Cgp2b2lkIFVUSUxQQVJTRV9EZWJsYW5rKAogICAg ICAgIGNoYXIgICAgKm9wZXJhbmQKICk7CgoKIAoKdm9pZCAgUFRSX0Fzc2lnbkFyYml0cmFyeSgg CiAgICAgICAgdm9pZCAgKmZyb20sIAogICAgICAgIHZvaWQgICp0bwogKTsKCgogCgp2b2lkICBV X0ZpbmRSb3QoCiAgICBWRVJURVggICpwbnQxLAogICAgVkVSVEVYICAqcG50MiwKICAgIEZMT0FU ICAgKnpyb3QsCiAgICBGTE9BVCAgICp5cm90CiApOwoKdm9pZCAgVV9VblJvdGF0ZSAoCiAgICBN QVRSSVggIG1hdHJvdCwKICAgIGZsb2F0ICAgcHJlZlJvbGwsCiAgICBmbG9hdCAgICp5YXcsCiAg ICBmbG9hdCAgICpwaXRjaCwKICAgIGZsb2F0ICAgKnJvbGwKICk7CgoKIAoKdm9pZCAgTUFUSF9S b3RhdGVUb1hZUGxhbmUoCiAgICAgICAgVkVSVEVYICpub3JtLAogICAgICAgIFJFQUwgKnhSb3Qs CiAgICAgICAgUkVBTCAqeVJvdCAKICk7Cgp2b2lkICBNQVRIX1JvdGF0ZVRvWVpQbGFuZSgKICAg ICAgICBWRVJURVggKm5vcm0sCiAgICAgICAgUkVBTCAqeVJvdCwKICAgICAgICBSRUFMICp6Um90 IAogKTsKCnZvaWQgIE1BVEhfUm90YXRlVG9YWlBsYW5lKAogICAgICAgIFZFUlRFWCAqbm9ybSwK ICAgICAgICBSRUFMICp4Um90LAogICAgICAgIFJFQUwgKnpSb3QgCiApOwoKCiAKCnZvaWQgTUFU SF9SdW5nZUt1dHRhNCgKICAgICAgICBSRUFMICAgICpjdXJyZW50U3RhdGUsIAogICAgICAgIFJF QUwgICAgKm5ld1N0YXRlLCAKICAgICAgICBSRUFMICAgICpkZXJpdnMsCiAgICAgICAgSU5UICAg ICBudW1iSXRlbXMsIAogICAgICAgIElOVCAgICAgaXRlbVNpemUsCiAgICAgICAgUkVBTCAgICB0 aW1lU2xpY2UsCiAgICAgICAgdm9pZCAgICAgKCpHZXREZXJpdnMpKAogICAgICAgICAgICAgICAg ICAgIFJFQUwgICAgKmN1cnJlbnRTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBSRUFMICAgICp0 bXBEZXJpdnMsCiAgICAgICAgICAgICAgICAgICAgSU5UICAgICBudW1iSXRlbXMsCiAgICAgICAg ICAgICAgICAgICAgUFRSICAgICBleHRyYVB0cgogICAgICAgICAgICAgICAgKSwKICAgICAgICBQ VFIgICAgIGV4dHJhUHRyCiApOwoKdm9pZCBNQVRIX1J1bmdlS3V0dGE0Q2xlYXJEZXJpdnMoCiAg ICAgICAgUkVBTCAqZGVyaXZzLAogICAgICAgIElOVCAgbnVtYkl0ZW1zLCAKICAgICAgICBJTlQg IGl0ZW1TaXplCiApOwoKdm9pZCBNQVRIX1J1bmdlS3V0dGE0QXBwbHlEZXJpdnMoCiAgICAgICAg UkVBTCAqY3VycmVudFN0YXRlLCAKICAgICAgICBSRUFMICpuZXdTdGF0ZSwgCiAgICAgICAgUkVB TCAqZGVyaXZzLAogICAgICAgIElOVCAgbnVtYkl0ZW1zLCAKICAgICAgICBJTlQgIGl0ZW1TaXpl LAogICAgICAgIFJFQUwgdGltZVNsaWNlCiApOwoKdm9pZCBNQVRIX1J1bmdlS3V0dGE0Q29tYmlu ZURlcml2cygKICAgICAgICBSRUFMICpkZXJpdnMsIAogICAgICAgIFJFQUwgKnRtcERlcml2cywK ICAgICAgICBJTlQgIG51bWJJdGVtcywgCiAgICAgICAgSU5UICBpdGVtU2l6ZSwKICAgICAgICBS RUFMICBmcmFjdAogKTsKCnZvaWQgTUFUSF9SdW5nZUt1dHRhNENvcHlEZXJpdnMoCiAgICAgICAg UkVBTCAqZGVyaXZzLCAKICAgICAgICBSRUFMICp0bXBEZXJpdnMsCiAgICAgICAgSU5UICBudW1i SXRlbXMsIAogICAgICAgIElOVCAgaXRlbVNpemUKICk7CgoKIAoKCiAKCnZvaWQgICAgICpNRU1N X0dldFNoYXJlZEl0ZW0oCiAgICAgICAgQ0hBUiAgICAqZmlsZW5hbWUsCiAgICAgICAgQ0hBUiAg ICAqdHlwZSwKICAgICAgICBJTlQgICAgICplcnJvciwKICAgICAgICBJTlQgICAgICptZW1Vc2Fn ZSwKICAgICAgICBCT09MRUFOIGxvYWRJdGVtLAogICAgICAgIENIQVIgICAgKmxvYWRJdGVtSWQK ICk7CgpJTlQgTUVNTV9NYWtlU2hhcmVkSXRlbSgKICAgICAgICBDSEFSICAgICpmaWxlbmFtZSwK ICAgICAgICBDSEFSICAgICp0eXBlLAogICAgICAgIHZvaWQgICAgICpieXRlcywKICAgICAgICBJ TlQgICAgIHNpemUsCiAgICAgICAgdm9pZCAgICAgKipyZXR1cm5Mb2MsCiAgICAgICAgQk9PTEVB TiByZXR1cm5Mb2NhdGlvbiwKICAgICAgICBDSEFSICAgICpsb2FkSXRlbUlkLAogICAgICAgIElO VCAgICAgdmVyYm9zZQogKTsKCklOVCBNRU1NX01ha2VTaGFyZWRJdGVtTm9Db3B5KAogICAgICAg IENIQVIgICAgKmZpbGVuYW1lLAogICAgICAgIENIQVIgICAgKnR5cGUsCiAgICAgICAgSU5UICAg ICBzaXplLAogICAgICAgIHZvaWQgICAgICoqcmV0dXJuTG9jLAogICAgICAgIENIQVIgICAgKmxv YWRJdGVtSWQsCiAgICAgICAgSU5UICAgICB2ZXJib3NlCiApOwoKdm9pZCAgTUVNTV9SZWFkSXRl bXMoCiAgICAgICAgICAgIHZvaWQgCiApOwoKSU5UIE1FTU1fRGVsZXRlT2xkKAogICAgICAgIElO VCAgICAgbGlmZVNwYW4KICk7Cgp2b2lkICBNRU1NX1B1cmdlKAogICAgICAgICAgICB2b2lkIAog KTsKCklOVCBNRU1NX1JlYWRJbmZvKAogICAgICAgIElOVCAgICAgKm1lbSwKICAgICAgICBJTlQg ICAgICpsaWZlc3BhbgogKTsKCklOVCBNRU1NX1dyaXRlSW5mbygKICAgICAgICBJTlQgICAgIG1l bSwKICAgICAgICBJTlQgICAgIGxpZmVzcGFuCiApOwoKSU5UIE1FTU1fRGVsZXRlS2V5KAogICAg ICAgIElOVCAgICAga2V5CiApOwoKSU5UIE1FTU1fRGVsZXRlQWxsVXNlckRhdGEoCiAgICAgICAg SU5UICAgICB1aWQKICk7CgpJTlQgTUVNTV9EZWxldGVBbGwoCiAgICAgICAgICAgIHZvaWQgCiAp OwoKSU5UIE1FTU1fTWVtVXNlZCgKICAgICAgICAgICAgdm9pZCAKICk7Cgp2b2lkICAqTUVNTV9H ZXRTaGFyZWRJdGVtKAogICAgICAgIENIQVIgICAgKmZpbGVuYW1lLAogICAgICAgIENIQVIgICAg KnR5cGUsCiAgICAgICAgSU5UICAgICAqZXJyb3IsCiAgICAgICAgSU5UICAgICAqbWVtVXNhZ2Us CiAgICAgICAgQk9PTEVBTiBsb2FkSXRlbSwKICAgICAgICBDSEFSICAgICpsb2FkSXRlbUlkCiAp OwoKSU5UIE1FTU1fTWFrZVNoYXJlZEl0ZW0oCiAgICAgICAgQ0hBUiAgICAqZmlsZW5hbWUsCiAg ICAgICAgQ0hBUiAgICAqdHlwZSwKICAgICAgICB2b2lkICAgICAqYnl0ZXMsCiAgICAgICAgSU5U ICAgICBzaXplLAogICAgICAgIHZvaWQgICAgICoqbG9jLAogICAgICAgIEJPT0xFQU4gcmV0dXJu TG9jYXRpb24sCiAgICAgICAgQ0hBUiAgICAqbG9hZEl0ZW1JZCwKICAgICAgICBJTlQgICAgIHZl cmJvc2UKICk7CgpJTlQgTUVNTV9UYWxrKAogICAgICAgIE1FTU1fSVRFTSAgICpjbWRidWYKICk7 CgoKIAoKdm9pZCAgTUFUSF9HZXRTbmFrZU1hdHJpeCgKICAgICAgICBWRVJURVggKnBhdGgsCiAg ICAgICAgSU5UIGN1ckluZGV4LAogICAgICAgIElOVCBjbG9zZWQsCiAgICAgICAgSU5UIHNlZywK ICAgICAgICBJTlQgc3RhcnQsCiAgICAgICAgSU5UIGVuZCwKICAgICAgICBJTlQgdW5yb2xsLAog ICAgICAgIE1BVFJJWCBtYXQgCiApOwoKdm9pZCAgTUFUSF9HZXRSYWlsTWF0cml4KAogICAgICAg IFZFUlRFWCAgKnJhaWwxLAogICAgICAgIFZFUlRFWCAgKnJhaWwyLAogICAgICAgIElOVCAgICAg cmFpbExlbmd0aCwgCiAgICAgICAgSU5UICAgICBpbmRleCwKICAgICAgICBWRVJURVggICp1cFZl Y3QsCiAgICAgICAgVkVSVEVYICAqdmVydDEsCiAgICAgICAgVkVSVEVYICAqdmVydDIsCiAgICAg ICAgSU5UICAgICBoZWlnaHRSZWxhdGl2ZSwKICAgICAgICBNQVRSSVggIG1hdCAsCiAgICAgICAg Qk9PTEVBTiBub1NjYWxlCiApOwoKCiAKCnZvaWQgIFNPQ0tfUmVhcGVyKAogICAgICAgIHZvaWQg CiApOwoKSU5UIFNPQ0tfUmVhZEJ1ZigKICAgICAgICBJTlQgICAgIGZkLAogICAgICAgIHZvaWQg ICAgICpidWYsCiAgICAgICAgSU5UICAgICBsZW4gCiApOwoKSU5UIFNPQ0tfV3JpdGVCdWYoCiAg ICAgICAgSU5UICAgICBmZCwKICAgICAgICBjb25zdCB2b2lkICAgKmJ1ZiwKICAgICAgICBJTlQg ICAgIGxlbiAKICk7CgpJTlQgU09DS19PcGVuKAogICAgICAgIENIQVIgICAgKnNlcnZpY2UgCiAp OwoKSU5UIFNPQ0tfQ29ubmVjdCgKICAgICAgICBjb25zdCBDSEFSICAqaG9zdCwKICAgICAgICBj b25zdCBDSEFSICAqc2VydmljZSwKICAgICAgICBJTlQgICAgICplcnJvciAKICk7Cgp2b2lkICBT T0NLX1NldFRpbWVvdXQoCiAgICAgICAgSU5UICAgICBsZW5ndGggCiApOwoKSU5UICAgICBTT0NL X1VEUE9wZW4oCiAgICAgICAgQ0hBUiAgKnNlcnZpY2UKICk7CgpJTlQgICAgIFNPQ0tfU2VuZEJ1 ZigKICAgICAgICBJTlQgICAgICAgICAgICAgc29jaywKICAgICAgICBDSEFSICAgICAgICAgICAg KmJ1ZiwKICAgICAgICBJTlQgICAgICAgICAgICAgbGVuLAogICAgICAgIHN0cnVjdCBpbl9hZGRy ICAqYWRkciwKICAgICAgICBDSEFSICAgICAgICAgICAgKnNlcnZpY2UKICk7CgpJTlQgICAgIFNP Q0tfU2VuZFBvcnRCdWYoCiAgICAgICAgSU5UICAgICAgICAgICAgIHNvY2ssCiAgICAgICAgQ0hB UiAgICAgICAgICAgICpidWYsCiAgICAgICAgSU5UICAgICAgICAgICAgIGxlbiwKICAgICAgICBz dHJ1Y3QgaW5fYWRkciAgKmFkZHIsCiAgICAgICAgSU5UICAgICAgICAgICAgIHBvcnQKICk7CgpJ TlQgICAgIFNPQ0tfUmVjdkJ1ZigKICAgICAgICBJTlQgICAgICAgICAgICAgc29jaywKICAgICAg ICBDSEFSICAgICAgICAgICAgKmJ1ZiwKICAgICAgICBJTlQgICAgICAgICAgICAgbGVuLAogICAg ICAgIHN0cnVjdCBpbl9hZGRyICAqYWRkciwKICAgICAgICBJTlQgICAgICAgICAgICAgKnBvcnQK ICk7CgoKIAoKdm9pZCBNQVRfU3RhY2tJbml0KAogICAgICAgIHZvaWQKICk7CgpJTlQgTUFUX1N0 YWNrQ2xlYXIoCiAgICAgICAgdm9pZAogKTsKCklOVCBNQVRfUHVzaCgKICAgICAgICBNQVRSSVgg ICAgIG1hdAogKTsKCklOVCBNQVRfUHVzaFN0YWNrICgKICAgICAgICB2b2lkCiApOwoKSU5UIE1B VF9Qb3AgKAogICAgICAgIHZvaWQKICk7CgpJTlQgTUFUX0NvbmNhdE9uU3RhY2soCiAgICAgICAg TUFUUklYICAgICAgICAgbWF0CiApOwoKSU5UIE1BVF9Db25jYXRBbGwoCiAgICAgICAgTUFUUklY ICAgICBtYXQKICk7CgpJTlQgTUFUX0dldExhc3RNYXQoCiAgICAgICAgTUFUUklYICBtYXQKICk7 CgpJTlQgTUFUX0xvYWQoCiAgICAgICAgTUFUUklYICAgICBtYXQKICk7CgoKIAoKY2hhciAqU1RS X0ZuZCgKICAgICAgICBjaGFyICpzLAogICAgICAgIGNoYXIgKnQKICk7CgoKIAoKY2hhciAqVV9H ZXRUb2tlbigKICAgICAgICBjaGFyICAgICpidWYsICAgICAgICAKICAgICAgICBjaGFyICAgICp0 b2tlbiwgICAgICAKICAgICAgICBpbnQgICAgICpsZW5ndGggICAgICAKICk7Cgp2b2lkIFVfR2V0 MkludHMoCiAgICAgICAgY2hhciAgICAqdG9rZW4sICAgICAgCiAgICAgICAgaW50ICAgICAqZmly c3QsICAgICAgCiAgICAgICAgaW50ICAgICAqc2Vjb25kLCAgICAgCiAgICAgICAgaW50ICAgICAq bnVtYmVyICAgICAgCiApOwoKY2hhciAqVV9GYXN0R2V0VG9rZW4oCiAgICAgICAgY29uc3QgY2hh ciAgKmJ1ZiwgICAgICAgIAogICAgICAgIGNoYXIgICAgKnRva2VuLCAgICAgIAogICAgICAgIGlu dCAgICAgKmxlbmd0aCAgICAgIAogKTsKCmNoYXIgKlVfR2V0V29yZCgKICAgICAgICBjb25zdCBj aGFyICAqYnVmLCAgICAgICAgCiAgICAgICAgY2hhciAgICAqdG9rZW4sICAgICAgCiAgICAgICAg aW50ICAgICAqbGVuZ3RoICAgICAgCiApOwoKSU5UIFVfTG9va3VwVG9rZW4oCiAgICAgICAgQ0hB UiAgICAqdG9rZW4sCiAgICAgICAgQ0hBUiAgICAqKnRhYmxlLAogICAgICAgIElOVCAgICAgbnVt LAogICAgICAgIEJPT0xFQU4gKmV4YWN0CiApOwoKSU5UIFVfTG9va3VwRXhhY3RUb2tlbigKICAg ICAgICBDSEFSICAgICp0b2tlbiwKICAgICAgICBDSEFSICAgICoqdGFibGUsCiAgICAgICAgSU5U ICAgICBudW0KICk7CgpDSEFSICAgICpVX0dldEFyYlRva2VuKAogICAgICAgIGNvbnN0IENIQVIg ICpidWYsCiAgICAgICAgQ0hBUiAgICAqdG9rZW4sCiAgICAgICAgSU5UICAgICAqbGVuZ3RoLAog ICAgICAgIENIQVIgICAgKmRlbGltaXRlcnMsCiAgICAgICAgQ0hBUiAgICAqZGVsY2hhcgogKTsK CkNIQVIgICAgKlVfR2V0QXJiVG9rZW5BbGwoCiAgICAgICAgQ0hBUiAgICAqYnVmLAogICAgICAg IENIQVIgICAgKnRva2VuLAogICAgICAgIElOVCAgICAgKmxlbmd0aCwKICAgICAgICBDSEFSICAg ICpkZWxpbWl0ZXJzLAogICAgICAgIENIQVIgICAgKmRlbGNoYXIKICk7CgpDSEFSICAgICpVX0dl dEFyYlRva2VuUGFyZW4oCiAgICAgICAgQ0hBUiAgICAqYnVmLAogICAgICAgIENIQVIgICAgKnRv a2VuLAogICAgICAgIElOVCAgICAgKmxlbmd0aCwKICAgICAgICBDSEFSICAgICpkZWxpbWl0ZXJz LAogICAgICAgIENIQVIgICAgKmRlbGNoYXIKICk7CgpDSEFSICAgICpVX0dldEFyYlRva2VuUGFy ZW5BbGwoCiAgICAgICAgQ0hBUiAgICAqYnVmLAogICAgICAgIENIQVIgICAgKnRva2VuLAogICAg ICAgIElOVCAgICAgKmxlbmd0aCwKICAgICAgICBDSEFSICAgICpkZWxpbWl0ZXJzLAogICAgICAg IENIQVIgICAgKmRlbGNoYXIKICk7CgpJTlQgVV9XaWxkbWF0KAogICAgICAgIGNoYXIgICAgICAg KnMsCiAgICAgICAgY2hhciAgICAgICAqcAogKTsKCgogCgp2b2lkIEFsbG9jTG9ja0FyZW5hKCAK ICAgICAgICBjb25zdCBjaGFyICAqcHJvZ3JhbU5hbWUKICk7Cgp2b2lkICpJbml0TG9jayggCiAg ICAgICAgdm9pZAogKTsKCnZvaWQgU2V0TG9jayggCiAgICAgICAgdm9pZCAqaGFuZGxlCiApOwoK dm9pZCBVbnNldExvY2soIAogICAgICAgIHZvaWQqIGhhbmRsZQogKTsKCnZvaWQgRnJlZUxvY2so CiAgICAgICAgdm9pZCogbG9jawogKTsKCnZvaWQgRnJlZUxvY2tBcmVuYSggCiAgICAgICAgdm9p ZAogKTsKCgogCgp2b2lkIFVfVW5peFBhcnNlSU8oCiAgICAgICAgdm9pZCAoICpHZXRzICkoIGNo YXIgKmdldHNCdWYgKSwKICAgICAgICB2b2lkICggKmVycm9yICkoCiAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmJ1ZiwKICAgICAgICAgICAgaW50IHNpemUKICAgICAgICAgICAgKSwKICAgICAgICBG SUxFICogKCAqcGFnZXJPcGVuICkoIHZvaWQgKSwKICAgICAgICB2b2lkICggKnBhZ2VyQ2xvc2Ug KSggdm9pZCApCiApOwoKQ0hBUiAqVV9Vbml4UGFyc2UoCiAgICAgICAgSU5UICAgICBhcmdjLAog ICAgICAgIGNvbnN0IENIQVIgICAgKiphcmd2LAogICAgICAgIE9fTElTVCAgKmZsYWdMaXN0LAog ICAgICAgIElOVCAgICAgbnVtRmxhZ3MsCiAgICAgICAgSU5UICAgICAqKm9yZGVyLAogICAgICAg IElOVCAgICAgKm9yZGVyQ291bnQKICk7CgpJTlQgVV9TcGxpdExpbmUoCiAgICAgICAgQ0hBUiAg ICAqcywKICAgICAgICBDSEFSICAgICoqdgogKTsKCnZvaWQgVV9QcmludFVzYWdlKAogICAgICAg IGNvbnN0IGNoYXIgICAgKmNvbW1hbmQsCiAgICAgICAgT19MSVNUICAqcGFybSwKICAgICAgICBJ TlQgICAgIGxlbmcKICk7CgpJTlQgVV9DaGVja0hlbHAoCiAgICAgICAgSU5UICAgICAgICAgICBh cmdjLAogICAgICAgIGNvbnN0IENIQVIgICAgKiphcmd2LAogICAgICAgIGNvbnN0IENIQVIgICAg KmNvbW1hbmQsCiAgICAgICAgT19MSVNUICAgICAgICAqZmxhZ0xpc3QsCiAgICAgICAgSU5UICAg ICAgICAgICBudW1GbGFncywKICAgICAgICBjb25zdCBDSEFSICAgICoqaGVscExpc3QKICk7CgpJ TlQgVV9HZXRDb3VudCgKICAgICAgICBDSEFSICAgICpmbGFnLAogICAgICAgIE9fTElTVCAgKmZs YWdMaXN0CiApOwoKSU5UIFVfR2V0SGl0Q291bnQoCiAgICAgICAgQ0hBUiAgICAqZmxhZywKICAg ICAgICBPX0xJU1QgICpmbGFnTGlzdAogKTsKCnZvaWQgVV9QYXJzZVByb21wdCgKICAgICAgICBp bnQgb25PZmYKICk7Cgp2b2lkIFVfUmVzZXRVbml4UGFyc2VMZXZlbCAoCiAgICAgICAgdm9pZAog KTsKCnZvaWQgVV9DbGVhckhpdEFuZENvdW50KAogICAgICAgIE9fTElTVCAgKmZsYWdMaXN0LAog ICAgICAgIElOVCAgICAgbnVtRmxhZ3MKICk7Cgp2b2lkIFVfRm9yY2VIaXRDb3VudCAoCiAgICBj b25zdCBDSEFSICAqZmxhZywKICAgIE9fTElTVCAgICAgICpmbGFnTGlzdCwKICAgIElOVCAgICAg ICAgIG5ld0NvdW50CiApOwoKdm9pZCBVX0luaXRUeXBlQXJyYXlMaXN0ICgKICAgICAgICB2b2lk CiApOwoKSU5UIFVfTG9hZFR5cGVBcnJheUxpc3QoCiAgICAgICAgY2hhciAgICAqb3B0aW9uLAog ICAgICAgIElOVCAgICAgbnVtYmVyLAogICAgICAgIElOVCAgICAgKmxpc3RJbnQKICk7CgpJTlQg VV9Mb2FkVHlwZUFycmF5QXNjaWlMaXN0KAogICAgICAgIGNoYXIgICAgKm9wdGlvbiwKICAgICAg ICBJTlQgICAgIG51bWJlciwKICAgICAgICBjaGFyICAgICpsaXN0QXNjaWkKICk7CgpJTlQgVV9G aW5kVW5peFBhcnNlVHlwZSgKICAgICAgICBPX0xJU1QgICp3aGljaCwKICAgICAgICBJTlQgICAg IGNvdW50CiApOwoKSU5UIFVfTG9hZFVuaXhQYXJzZURlc3RBZHIoCiAgICAgICAgY29uc3QgY2hh ciAgICAqdG9CZUxvYWRlZCwKICAgICAgICBPX0xJU1QgICp3aGljaCwKICAgICAgICBJTlQgICAg IHR5cGUKICk7CgpjaGFyICpVX1VuTG9hZFVuaXhQYXJzZURlc3RDb250ZW50cygKICAgICAgICBP X0xJU1QgICp3aGljaCwKICAgICAgICBJTlQgICAgIHR5cGUsIAogICAgICAgIElOVCAgICAgaXRl bQogKTsKCkJPT0xFQU4gVV9HZXRBbHBoYWJldGl6YXRpb25GbGFnICgKICAgIHZvaWQgCiApOwoK Qk9PTEVBTiBVX1NldEFscGhhYmV0aXphdGlvbkZsYWcgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7 CgoKIAoKQ0hBUiAgICAqVV9HZXRQcm9nbmFtZSgKICAgICAgICBDSEFSICAgICoqYXJndgogKTsK CnZvaWQgVV9CYWlsKAogICAgICAgIENIQVIgKm1lc3NhZ2UKICk7CgpJTlQgVV9QZXJyb3IoCiAg ICAgICAgQ0hBUiAqbWVzc2FnZQogKTsKCklOVCBVX1N5c3RlbSgKICAgICAgICBjb25zdCBDSEFS ICAqY29tbWFuZAogKTsKCkNIQVIgKlVfR2V0VmFyaWFibGUoCiAgICAgICAgY29uc3QgQ0hBUiAg KnZhcmlhYmxlCiApOwoKU1RSSU5HICAqVV9GaW5kVmFyaWFibGUoCiAgICAgICAgY29uc3QgQ0hB UiAgKm5hbWUKICk7CgpjaGFyICpVX0ZpbmRWYXJpYWJsZVB0cigKICAgIENIQVIgICAgKm5hbWUK ICk7CgpJTlQgVV9TZXRWYXJpYWJsZSgKICAgICAgICBjb25zdCBDSEFSICAqdmFyaWFibGUsCiAg ICAgICAgY29uc3QgQ0hBUiAgKmRlZmluaXRpb24KICk7CgpJTlQgVV9HZXROdW1iZXJWYXJpYWJs ZXMgKAogICAgICAgIHZvaWQKICk7CgpjaGFyICpVX0dldFZhcmlhYmxlTmFtZSgKICAgICAgICBJ TlQgd2hpY2gKICk7CgpjaGFyICpVX0dldFZhcmlhYmxlRGVmaW5pdGlvbigKICAgICAgICBJTlQg d2hpY2gKICk7CgpDSEFSICpVX0dldEpvYk5hbWUoCiAgICAgICAgSU5UICAgICBqb2JudW0KICk7 Cgp2b2lkIFVfUHJpbnRDb3B5cmlnaHQoCiAgICAgICAgdm9pZAogKTsKCklOVCBVX0NhdGNoU2ln bmFscygKICAgICAgICB2b2lkICAgICgqc2lnRnVuYykoKQogKTsKCkNIQVIgKlVfTWtUZW1wKAog ICAgICAgIENIQVIgICAgKmFzCiApOwoKQ0hBUiAqVV9Na1RlbXBBbnl3aGVyZSgKICAgICAgICBD SEFSICAgICphcywKICAgICAgICBDSEFSICAgICpsYXN0WAogKTsKCklOVCBVX01rU3RlbXAoCiAg ICAgICAgQ0hBUiAgICAqYXMKICk7CgoKIAoKSU5UIFdJTERfTWF0Y2goCiAgICAgICAgY29uc3Qg Q0hBUiAgKndpbGRDYXJkLAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lLAogICAgICAgIElOVCAg ICAgICAgIGNhc2VJbnNlbnNpdGl2ZQogKTsKCkJPT0xFQU4gV0lMRF9DYXNlSW5kZXBlbmRlbnRN YXRjaCgKICAgICAgICBjb25zdCBjaGFyICAqcGF0dGVybiwKICAgICAgICBjb25zdCBjaGFyICAq bmFtZQogKTsKCkJPT0xFQU4gV0lMRF9DYXNlRGVwZW5kZW50TWF0Y2goCiAgICAgICAgY29uc3Qg Y2hhciAgKnBhdHRlcm4sCiAgICAgICAgY29uc3QgY2hhciAgKnRva2VuCiApOwoKCn0KCgoKCgoj IDEzICIvc29mdHdhcmUvdGhhbGlhL2gvdXRpbC5lIiAyCgoKZXh0ZXJuIGNoYXIgICAgICpGaWxl VHlwZXNbXTsgICAgICAgICAgICAgICAgCmV4dGVybiBJTlQgICAgICBVX0JpdHNbXTsgICAgICAg ICAgICAgICAgICAgIAoKIyAxMTEgIi9zb2Z0d2FyZS90aGFsaWEvaC91dGlsLmgiIDIKCgojIDI0 ICJoL1BsdWdpblRlbXBsYXRlLmMiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKIAoKCgoKCgoKCgoK CgoKCmVudW0KewogIF9JU3VwcGVyID0gKCggMCApIDwgOCA/ICgoMSA8PCAoIDAgKSkgPDwgOCkg OiAoKDEgPDwgKCAwICkpID4+IDgpKSAsCSAKICBfSVNsb3dlciA9ICgoIDEgKSA8IDggPyAoKDEg PDwgKCAxICkpIDw8IDgpIDogKCgxIDw8ICggMSApKSA+PiA4KSkgLAkgCiAgX0lTYWxwaGEgPSAo KCAyICkgPCA4ID8gKCgxIDw8ICggMiApKSA8PCA4KSA6ICgoMSA8PCAoIDIgKSkgPj4gOCkpICwJ IAogIF9JU2RpZ2l0ID0gKCggMyApIDwgOCA/ICgoMSA8PCAoIDMgKSkgPDwgOCkgOiAoKDEgPDwg KCAzICkpID4+IDgpKSAsCSAKICBfSVN4ZGlnaXQgPSAoKCA0ICkgPCA4ID8gKCgxIDw8ICggNCAp KSA8PCA4KSA6ICgoMSA8PCAoIDQgKSkgPj4gOCkpICwJIAogIF9JU3NwYWNlID0gKCggNSApIDwg OCA/ICgoMSA8PCAoIDUgKSkgPDwgOCkgOiAoKDEgPDwgKCA1ICkpID4+IDgpKSAsCSAKICBfSVNw cmludCA9ICgoIDYgKSA8IDggPyAoKDEgPDwgKCA2ICkpIDw8IDgpIDogKCgxIDw8ICggNiApKSA+ PiA4KSkgLAkgCiAgX0lTZ3JhcGggPSAoKCA3ICkgPCA4ID8gKCgxIDw8ICggNyApKSA8PCA4KSA6 ICgoMSA8PCAoIDcgKSkgPj4gOCkpICwJIAogIF9JU2JsYW5rID0gKCggOCApIDwgOCA/ICgoMSA8 PCAoIDggKSkgPDwgOCkgOiAoKDEgPDwgKCA4ICkpID4+IDgpKSAsCSAKICBfSVNjbnRybCA9ICgo IDkgKSA8IDggPyAoKDEgPDwgKCA5ICkpIDw8IDgpIDogKCgxIDw8ICggOSApKSA+PiA4KSkgLAkg CiAgX0lTcHVuY3QgPSAoKCAxMCApIDwgOCA/ICgoMSA8PCAoIDEwICkpIDw8IDgpIDogKCgxIDw8 ICggMTAgKSkgPj4gOCkpICwJIAogIF9JU2FsbnVtID0gKCggMTEgKSA8IDggPyAoKDEgPDwgKCAx MSApKSA8PCA4KSA6ICgoMSA8PCAoIDExICkpID4+IDgpKSAJIAp9OwoKCiAKCgoKCgoKCgoKCmV4 dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwkgCmV4dGVybiBfX2Nv bnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOyAgCmV4dGVybiBfX2NvbnN0IF9faW50MzJf dCAqX19jdHlwZV90b3VwcGVyOyAgCgoKCgoKCgoKCiAKCgoKZXh0ZXJuIGludCAgaXNhbG51bSAg IChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNhbHBoYSAgIChpbnQpICB0aHJvdyAo KSAgIDsKZXh0ZXJuIGludCAgaXNjbnRybCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGlu dCAgaXNkaWdpdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNsb3dlciAgIChp bnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNncmFwaCAgIChpbnQpICB0aHJvdyAoKSAg IDsKZXh0ZXJuIGludCAgaXNwcmludCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAg aXNwdW5jdCAgIChpbnQpICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXNzcGFjZSAgIChpbnQp ICB0aHJvdyAoKSAgIDsKZXh0ZXJuIGludCAgaXN1cHBlciAgIChpbnQpICB0aHJvdyAoKSAgIDsK ZXh0ZXJuIGludCAgaXN4ZGlnaXQgICAoaW50KSAgdGhyb3cgKCkgICA7CgoKCgoKCiAKZXh0ZXJu IGludCB0b2xvd2VyICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgdG91cHBl ciAgKGludCBfX2MpICB0aHJvdyAoKSAgOwoKCgoKIAoKZXh0ZXJuIGludCBpc2FzY2lpICAoaW50 IF9fYykgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHRvYXNjaWkgIChpbnQgX19jKSAgdGhy b3cgKCkgIDsKCgoKCiAKCmV4dGVybiBpbnQgIF90b3VwcGVyICAgKGludCkgIHRocm93ICgpICAg OwpleHRlcm4gaW50ICBfdG9sb3dlciAgIChpbnQpICB0aHJvdyAoKSAgIDsKCgoKCgoKCgoKCgoK CgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKSAK ewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvbG93ZXJbX19j XSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAo KSAKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJb X19jXSA6IF9fYzsKfQoKCiMgMTg2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwoKCgoKCgoKCgoK CgoKIyAyNzMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoKfSAKCgojIDI1ICJoL1BsdWdpblRl bXBsYXRlLmMiIDIKCgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+IFBsdWdpbkVudHJ5PFQ+OjpQ bHVnaW5FbnRyeSAoVCAqeGYpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IElu ZGV4IChQbHVnaW5UYWJsZTxUPjo6bmV4dEVudHJ5KQp7CiAgICAKICAgIAogICAgaWYgKHhmICE9 IF9fbnVsbCApIHsKICAgICAgICBmb3IgKGludCBpPTA7IGk8UGx1Z2luVGFibGU8VD46Om5leHRF bnRyeTsgaSsrKSB7CgogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKFBsdWdpblRhYmxlPFQ+ Ojp0YWJsZVtpXSAhPSBfX251bGwgICYmIAogICAgICAgICAgICAgICAgICAgc3RyY2FzZWNtcCAo UGx1Z2luVGFibGU8VD46OnRhYmxlW2ldLT5HZXROYW1lKCksIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGYtPkdldE5hbWUoKSkgPT0g MCkgewogICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUiAt IFBsdWdpbkVudHJ5PHR5cGU+IgogICAgICAgICAgICAgICAgICAgICAgICAgIjo6UGx1Z2luRW50 cnkoKSIKICAgICAgICAgICAgICAgICAgICAgICAgICJlbnRyeSAlcyBpcyBhbWJpZ3VvdXMgd2l0 aCAlcyIsIHhmLT5HZXROYW1lICgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIFBsdWdpblRh YmxlPFQ+Ojp0YWJsZVtpXS0+R2V0TmFtZSAoKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIAogICAgaWYgKFBsdWdpblRhYmxlPFQ+ OjpjaGVja1RhYmxlU2l6ZSgpKSB7CiAgICAgICAgUGx1Z2luVGFibGU8VD46OnRhYmxlW0luZGV4 XSA9IHhmOwogICAgICAgIFBsdWdpblRhYmxlPFQ+OjpuZXh0RW50cnkgICsrOwogICAgICAgIFBs dWdpblRhYmxlPFQ+OjpudW1FbnRyaWVzICsrOwogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ IFBsdWdpbkVudHJ5PFQ+Ojp+UGx1Z2luRW50cnkgKCkKewogICAgCiAgICBpZiAodGhpcy0+SW5k ZXggPj0gMCAmJiBQbHVnaW5UYWJsZTxUPjo6dGFibGUgIT0gX19udWxsICAmJiAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbHVnaW5UYWJsZTxUPjo6dGFibGVb dGhpcy0+SW5kZXhdICE9IF9fbnVsbCApIHsKICAgICAgICBkZWxldGUgUGx1Z2luVGFibGU8VD46 OnRhYmxlW3RoaXMtPkluZGV4XTsKICAgICAgICBQbHVnaW5UYWJsZTxUPjo6dGFibGVbdGhpcy0+ SW5kZXhdID0gX19udWxsIDsKICAgICAgICBQbHVnaW5UYWJsZTxUPjo6bnVtRW50cmllcyAtLTsK ICAgIH0KCiAgICAKICAgIGlmIChQbHVnaW5UYWJsZTxUPjo6bnVtRW50cmllcyA9PSAwKSB7CiAg ICAgICAgZnJlZSAoUGx1Z2luVGFibGU8VD46OnRhYmxlKTsKICAgICAgICBQbHVnaW5UYWJsZTxU Pjo6dGFibGUgPSBfX251bGwgOwogICAgfQp9CgogCiAKIAogCiAKCiAKIAogCnRlbXBsYXRlIDxj bGFzcyBUPiBUICoqUGx1Z2luVGFibGU8VD46OnRhYmxlICAgICAgPSBfX251bGwgOwp0ZW1wbGF0 ZSA8Y2xhc3MgVD4gaW50IFBsdWdpblRhYmxlPFQ+OjptYXhFbnRyaWVzID0gMDsKdGVtcGxhdGUg PGNsYXNzIFQ+IGludCBQbHVnaW5UYWJsZTxUPjo6bmV4dEVudHJ5ICA9IDA7CnRlbXBsYXRlIDxj bGFzcyBUPiBpbnQgUGx1Z2luVGFibGU8VD46Om51bUVudHJpZXMgPSAwOwoKIAoKCgogCiAKIAoK dGVtcGxhdGUgPGNsYXNzIFQ+IGludCBQbHVnaW5UYWJsZTxUPjo6R2V0TmV4dEluZGV4ICgKICAg IGludCBzdGFydGluZ0luZGV4CiAgICApCnsKICAgIAogICAgZm9yIChpbnQgaT1zdGFydGluZ0lu ZGV4OyBpPG5leHRFbnRyeTsgaSsrKSB7CiAgICAgICAgaWYgKHRhYmxlW2ldICE9IF9fbnVsbCAp CiAgICAgICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIAogICAgcmV0dXJuIC0xIDsKfQoKIAog CiAKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbnQgUGx1Z2luVGFibGU8VD46OkdldE51bUFjdGl2ZUVu dHJpZXMgKCkKewogICAgaW50IGNvdW50ID0gMDsKICAgIAogICAgZm9yIChpbnQgaT0wOyBpPG5l eHRFbnRyeTsgaSsrKSB7CiAgICAgICAgaWYgKHRhYmxlW2ldICE9IF9fbnVsbCApCiAgICAgICAg ICAgIGNvdW50ICsrOwogICAgfQogICAgcmV0dXJuIGNvdW50Owp9CgogCiAKIAogCiAKIAogCiAK IAoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0IGNoYXIgKlBsdWdpblRhYmxlPFQ+OjpDaGVja0Fs aWFzICgKICAgIGNvbnN0IGNoYXIgKm5hbWUsIAogICAgY29uc3QgY2hhciAqYWxpYXNlcwogICAg KQp7CiAgICAKICAgIGNvbnN0IGNoYXIgKmFsaWFzID0gYWxpYXNlczsKICAgIHdoaWxlICgqbmFt ZSAmJiAqYWxpYXMgJiYgdG9sb3dlcigqbmFtZSkgPT0gdG9sb3dlcigqYWxpYXMpKSB7CiAgICAg ICAgKm5hbWUgKys7CiAgICAgICAgKmFsaWFzICsrOwogICAgfQoKICAgIAogICAgaWYgKCpuYW1l ID09ICdcMCcgJiYgKCphbGlhcyA9PSAnICcgfHwgKmFsaWFzID09ICdcMCcpKQogICAgICAgIHJl dHVybiBfX251bGwgOwogICAgZWxzZSB7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKCphbGlhcyAh PSAnXDAnICYmICphbGlhcyAhPSAnICcpCiAgICAgICAgICAgIGFsaWFzICsrOwogICAgICAgIHdo aWxlICgqYWxpYXMgIT0gJ1wwJyAmJiAqYWxpYXMgPT0gJyAnKQogICAgICAgICAgICBhbGlhcyAr KzsKICAgICAgICByZXR1cm4gYWxpYXM7CiAgICB9Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFz cyBUPiBpbnQgUGx1Z2luVGFibGU8VD46OkdldE5leHRJbmRleCAoCiAgICBjb25zdCBDSEFSICpu YW1lLCAKICAgIGludCBzdGFydGluZ0luZGV4CiAgICApCnsKICAgIGludCBpLCBmb3VuZFdpbGRD YXJkID0gMDsKICAgIGNvbnN0IGNoYXIgKndjU2VhcmNoID0gbmFtZTsKICAgIAogICAgCiAgICBm b3IoIDsgKndjU2VhcmNoIDsgKyt3Y1NlYXJjaCApCiAgICAgICAgaWYgKCAqd2NTZWFyY2ggPT0g JyonIHx8ICp3Y1NlYXJjaCA9PSAnPycgKSB7CiAgICAgICAgICAgIGZvdW5kV2lsZENhcmQgPSAx OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgCiAgICAKICAgIGZvciAoaT1z dGFydGluZ0luZGV4OyBpPG5leHRFbnRyeTsgaSsrKSB7CiAgICAgICAgCiAgICAgICAgaWYgKHRh YmxlW2ldID09IF9fbnVsbCApCiAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBpZiAoIGZv dW5kV2lsZENhcmQgKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIG5hbWVbMF0gPT0g JyonICYmIG5hbWVbMV0gPT0gMCApIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAg ICAgICB9CiAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChXSUxEX0Nhc2VJbmRlcGVu ZGVudE1hdGNoIChuYW1lLCB0YWJsZVtpXS0+R2V0TmFtZSgpKSkgewogICAgICAgICAgICAgICAg cmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAg ICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRhYmxlTmFtZSA9IHRh YmxlW2ldLT5HZXROYW1lKCk7CiAgICAgICAgICAgIGlmICggdG9sb3dlciggKm5hbWUgKSA9PSB0 b2xvd2VyKCAqdGFibGVOYW1lICkgJiYKICAgICAgICAgICAgICAgICAhc3RyY2FzZWNtcCggbmFt ZSwgdGFibGVOYW1lICkgKQogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQoKICAg IH0KCiAgICAKICAgIHJldHVybiAtMSA7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50 IFBsdWdpblRhYmxlPFQ+OjpHZXRJbmRleCAoY29uc3QgQ0hBUiAqbmFtZSkKewogICAgCiAgICBp bnQgcmV0dXJuVmFsdWUgPSBHZXRFeGFjdEluZGV4IChuYW1lKTsKICAgIGlmIChyZXR1cm5WYWx1 ZSA+PSAwKQogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKCiAgICAKICAgIHJldHVyblZhbHVl ID0gR2V0TmV4dEluZGV4IChuYW1lLCAwKTsKCiAgICAKICAgIGlmIChyZXR1cm5WYWx1ZSA9PSAt MSApCiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwoKICAgIAogICAgaWYgKEdldE5leHRJbmRl eCAobmFtZSwgcmV0dXJuVmFsdWUgKyAxKSAhPSAtMSApCiAgICAgICAgcmV0dXJuIC0yIDsKCiAg ICAKICAgIHJldHVybiByZXR1cm5WYWx1ZTsKfQoKCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g aW50IFBsdWdpblRhYmxlPFQ+OjpHZXRBbGlhc0luZGV4IChjb25zdCBDSEFSICpuYW1lKQp7CiAg ICAKICAgIGZvciAoaW50IGk9MDsgaTxuZXh0RW50cnk7IGkrKykgewogICAgICAgIGNvbnN0IGNo YXIgKmFsaWFzZXMgPSB0YWJsZVtpXS0+R2V0QWxpYXNlcygpOwogICAgICAgIHdoaWxlIChhbGlh c2VzICYmICphbGlhc2VzICE9ICdcMCcpIHsKICAgICAgICAgICAgYWxpYXNlcyA9IENoZWNrQWxp YXMgKG5hbWUsIGFsaWFzZXMpOwogICAgICAgICAgICBpZiAoYWxpYXNlcyA9PSBfX251bGwgKQog ICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgfQoKICAgIAogICAgcmV0dXJu IC0xIDsKfQoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIFQ+IGludCBQbHVnaW5UYWJsZTxUPjo6R2V0 RXhhY3RJbmRleCAoY29uc3QgQ0hBUiAqbmFtZSkKewogICAgCiAgICBmb3IgKGludCBpPTA7IGk8 bmV4dEVudHJ5OyBpKyspIHsKICAgICAgICBpZiAodGFibGVbaV0gIT0gX19udWxsICAmJiBXSUxE X0Nhc2VJbmRlcGVuZGVudE1hdGNoIChuYW1lLCB0YWJsZVtpXS0+R2V0TmFtZSgpKSkgewogICAg ICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CiAgICB9CgogICAgCiAgICByZXR1cm4gLTEgOwp9 CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+IENIQVIgKlBsdWdpblRhYmxlPFQ+OjpHZXRBbGxN YXRjaGVzIChjb25zdCBDSEFSICpuYW1lKQp7CiAgICBzdGF0aWMgQ0hBUiBhbGxOYW1lc1sxMDI0 XTsKICAgIENIQVIgKnB0ciA9IGFsbE5hbWVzOwoKICAgIAogICAgKnB0ciA9ICdcMCc7CgogICAg aW50IGkgPSAtMTsKICAgIHdoaWxlICgxICkKICAgICAgICB7CiAgICAgICAgaSA9IEdldE5leHRJ bmRleCAobmFtZSwgaSsxKTsKICAgICAgICBpZiAoaSA8IDApCiAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAKICAgICAgICBzdHJjcHkgKHB0ciwgR2V0RW50cnkoaSktPkdldE5hbWUoKSk7CiAg ICAgICAgc3RyY2F0IChwdHIsICIsICIpOwogICAgICAgIHB0ciA9IHN0cmNociAocHRyLCAnXDAn KTsKICAgICAgICB9CgogICAgCiAgICAqKHB0ci0yKSA9ICdcMCc7IAoKICAgIHJldHVybiBhbGxO YW1lczsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPiBUICpQbHVnaW5UYWJsZTxUPjo6R2V0 RW50cnkgKGludCBpKQp7CiAgICAKICAgIGlmIChpIDwgMCB8fCBpID49IG5leHRFbnRyeSkKICAg ICAgICByZXR1cm4gX19udWxsIDsKCiAgICAKICAgIHJldHVybiAodGFibGVbaV0pOwp9CgogCiAK IAoKdGVtcGxhdGUgPGNsYXNzIFQ+IFQgKlBsdWdpblRhYmxlPFQ+OjpHZXRFbnRyeSAoY29uc3Qg Q0hBUiAqbmFtZSkKewogICAgaW50IGkgPSBHZXRJbmRleCAobmFtZSk7CgogICAgaWYgKGkgPCAw KSAKICAgICAgICByZXR1cm4gX19udWxsIDsKICAgIGVsc2UKICAgICAgICByZXR1cm4gKHRhYmxl W2ldKTsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPiBUICpQbHVnaW5UYWJsZTxUPjo6R2V0 RXhhY3RFbnRyeSAoY29uc3QgQ0hBUiAqbmFtZSkKewogICAgaW50IGkgPSBHZXRFeGFjdEluZGV4 IChuYW1lKTsKCiAgICBpZiAoaSA8IDApIAogICAgICAgIHJldHVybiBfX251bGwgOwogICAgZWxz ZQogICAgICAgIHJldHVybiAodGFibGVbaV0pOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+ IFQgJlBsdWdpblRhYmxlPFQ+OjpvcGVyYXRvciBbXSAoCiAgICBpbnQgaQogICAgKQp7CiAgICBy ZXR1cm4gKCpHZXRFbnRyeSAoaSkpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+IFQgJlBs dWdpblRhYmxlPFQ+OjpvcGVyYXRvciBbXSAoCiAgICBjb25zdCBDSEFSICpuYW1lCiAgICApCnsK ICAgIGludCBpID0gR2V0RXhhY3RJbmRleCAobmFtZSk7CgogICAgaWYgKGkgPCAwKSAKICAgICAg ICBmcHJpbnRmIChzdGRlcnIsICJQUk9HUkFNTUVSIEVSUk9SIC0gUGx1Z2luVGFibGU8dHlwZT5b XCIlc1wiXSIKICAgICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBleGlzdFxuIiwgbmFt ZSk7CiAgICByZXR1cm4gKCoodGFibGVbaV0pKTsKfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNz IFQ+IEJPT0xFQU4gUGx1Z2luVGFibGU8VD46OmNoZWNrVGFibGVTaXplICgpCnsKICAgIAogICAg aWYgKG5leHRFbnRyeSA+PSBtYXhFbnRyaWVzKSB7CgogICAgICAgIAogICAgICAgIAogICAgICAg IAogICAgICAgIGlmICh0YWJsZSA9PSBfX251bGwgKSAKICAgICAgICB7CiAgICAgICAgICAgIHRh YmxlID0gKFQgKiopIG1hbGxvYyAoMTAwICAqIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoUGx1Z2luQ2xhc3MgKikpOwogICAgICAg ICAgICBtYXhFbnRyaWVzID0gMTAwIDsKICAgICAgICB9CiAgICAgICAgZWxzZSAKICAgICAgICB7 CiAgICAgICAgICAgIHRhYmxlID0gKFQgKiopIHJlYWxsb2MgKCh2b2lkICopdGFibGUsIChtYXhF bnRyaWVzICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MCApICogc2l6ZW9m IChQbHVnaW5DbGFzcyAqKSk7CiAgICAgICAgICAgIG1heEVudHJpZXMgKz0gNTAgOwogICAgICAg IH0KICAgIH0KCiAgICAKICAgIGlmICh0YWJsZSA9PSBfX251bGwgKSB7CiAgICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiUFJPR1JBTU1FUiBFUlJPUiAtIFBsdWdpblRhYmxlPHR5cGU+OjoiCiAgICAg ICAgICAgICAgICAgICAgICAgICAidGFibGUgZGlkIG5vdCBnZXQgYWxsb2NhdGVkLiIpOwogICAg ICAgIHJldHVybiAwIDsKICAgIH0KCiAgICByZXR1cm4gMSA7Cn0KIyAxMDYgImgvUGx1Z2luVGVt cGxhdGUuaCIgMgoKCgoKIyAyMyAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEgIi9zb2Z0d2Fy ZS90aGFsaWEvaC90eHQuaCIgMQogCgoKCgoKCgoKCgoKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDEgMwog CgogCgoKCgogCgojIDI1ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz LTIuOTEuNjYvaW5jbHVkZS92YS1hbHBoYS5oIiAzCgoKIAoKCgoKCgoKCnR5cGVkZWYgX19nbnVj X3ZhX2xpc3QgdmFfbGlzdDsKCiMgNDkgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3ZhLWFscGhhLmgiIDMKCgogCgogCgoKCgoKCgoKCgoK CgoKCgogCgplbnVtIHsKICBfX25vX3R5cGVfY2xhc3MgPSAtMSwKICBfX3ZvaWRfdHlwZV9jbGFz cywKICBfX2ludGVnZXJfdHlwZV9jbGFzcywKICBfX2NoYXJfdHlwZV9jbGFzcywKICBfX2VudW1l cmFsX3R5cGVfY2xhc3MsCiAgX19ib29sZWFuX3R5cGVfY2xhc3MsCiAgX19wb2ludGVyX3R5cGVf Y2xhc3MsCiAgX19yZWZlcmVuY2VfdHlwZV9jbGFzcywKICBfX29mZnNldF90eXBlX2NsYXNzLAog IF9fcmVhbF90eXBlX2NsYXNzLAogIF9fY29tcGxleF90eXBlX2NsYXNzLAogIF9fZnVuY3Rpb25f dHlwZV9jbGFzcywKICBfX21ldGhvZF90eXBlX2NsYXNzLAogIF9fcmVjb3JkX3R5cGVfY2xhc3Ms CiAgX191bmlvbl90eXBlX2NsYXNzLAogIF9fYXJyYXlfdHlwZV9jbGFzcywKICBfX3N0cmluZ190 eXBlX2NsYXNzLAogIF9fc2V0X3R5cGVfY2xhc3MsCiAgX19maWxlX3R5cGVfY2xhc3MsCiAgX19s YW5nX3R5cGVfY2xhc3MKfTsKCiAKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK IyAzNiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2lu Y2x1ZGUvc3RkYXJnLmgiIDIgMwoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0 LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgoKCgoKCgogCiAKCgoK CgoKCgoKCgoKCiMgMTY4ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz LTIuOTEuNjYvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCiAKCgoKIyAxOTggIi91c3IvbGliL2djYy1s aWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoK CgoKCgoKIyAxNiAiL3NvZnR3YXJlL3RoYWxpYS9oL3R4dC5oIiAyCgoKIyAxICIvc29mdHdhcmUv dGhhbGlhL2gvc3RkdHlwZXMuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdh cmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIKCgoKCgoKCgoKCgoKCgojIDE4ICIvc29mdHdhcmUvdGhh bGlhL2gvdHh0LmgiIDIKCgogCgoKIAogCiAKIAogCgplbnVtIFNldmVyaXR5IHsKICAgIFNFVl9C QVNFICAgICAgICA9ICAwLAogICAgU0VWX05PVEUgICAgICAgID0gIDEsCiAgICBTRVZfQ0FVVElP TiAgICAgPSAgMiwKICAgIFNFVl9XQVJOSU5HICAgICA9ICAzLAogICAgU0VWX0VSUk9SICAgICAg ID0gIDUsCiAgICBTRVZfUFJPR19FUlJPUiAgPSAgNiwKICAgIFNFVl9TRVJJT1VTICAgICA9ICA3 LAogICAgU0VWX0ZBVEFMICAgICAgID0gIDksCiAgICBTRVZFUklUWV8wICAgICAgPSAgMCwKICAg IFNFVkVSSVRZXzEgICAgICA9ICAxLAogICAgU0VWRVJJVFlfMiAgICAgID0gIDIsCiAgICBTRVZF UklUWV8zICAgICAgPSAgMywKICAgIFNFVkVSSVRZXzQgICAgICA9ICA0LAogICAgU0VWRVJJVFlf NSAgICAgID0gIDUsCiAgICBTRVZFUklUWV82ICAgICAgPSAgNiwKICAgIFNFVkVSSVRZXzcgICAg ICA9ICA3LAogICAgU0VWRVJJVFlfOCAgICAgID0gIDgsCiAgICBTRVZFUklUWV85ICAgICAgPSAg OSwKICAgIFNFVl9JTkZPUk1BVElPTiA9IDEwLAogICAgU0VWX0hFTFAgICAgICAgID0gMTEsCiAg ICBTRVZfUVVFU1RJT04gICAgPSAxMiwKICAgIFNFVl9VU0FHRSAgICAgICA9IDEzLAogICAgU0VW X0hJTlQgICAgICAgID0gMTQsCiAgICBTRVZfRElBR05PU1RJQyAgPSAxNSwKICAgIFNFVl9EQVRB ICAgICAgICA9IDE2LAogICAgU0VWX1NUQVRVUyAgICAgID0gMTcsCiAgICBTRVZfVU5LTk9XTiAg ICAgPSAxOCwKICAgIFNFVl9NT0RBTCAgICAgICA9IDI1NiAgCn07CgogCiAKCnR5cGVkZWYgdm9p ZCAoKlRYVF9PdXRwdXRDYWxsYmFjaykgICAgIChjb25zdCBjaGFyICosIHZvaWQgKik7CnR5cGVk ZWYgdm9pZCAoKlRYVF9GaWxlT3V0cHV0Q2FsbGJhY2spIChGSUxFICosIGNvbnN0IGNoYXIgKiwg dm9pZCAqKTsKdHlwZWRlZiBjaGFyICooKlRYVF9IZWFkZXJDYWxsYmFjaykgICAgKGNvbnN0IGNo YXIgKik7CgogCmV4dGVybiBjb25zdCBjaGFyICpUWFRfU3JjRnVuYzsKZXh0ZXJuIGNvbnN0IGNo YXIgKlRYVF9TcmNGaWxlOwpleHRlcm4gaW50ICAgVFhUX1NyY0xpbmU7CmV4dGVybiBpbnQgICBU WFRfQXNzZXJ0Qm9vbDsKZXh0ZXJuIGNoYXIgKlRYVF9Bc3NlcnRTdHI7CmlubGluZSB2b2lkIFRY VF9TZXRGdW5jIChjaGFyICpmKSB7IFRYVF9TcmNGdW5jID0gKGYpOyB9CgogCiMgMSAiL3NvZnR3 YXJlL3RoYWxpYS9oL3R4dC5wIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKY2hhciAqVFhUX0dl dE1lc3NhZ2UgKAogICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCAKICAgICAgICAuLi4KCSk7CgpC T09MRUFOIFRYVF9Bc3NlcnRDb25kICgKICAgICAgICBCT09MRUFOIGNvbmQsIAogICAgICAgIEJP T0xFQU4gc2hvdWxkQmUsIAogICAgICAgIGNvbnN0IGNoYXIgKmNvbmRTdHJpbmcsCiAgICAgICAg Y29uc3QgY2hhciAqZmlsZSwKICAgICAgICBpbnQgbGluZQoJKTsKCkJPT0xFQU4gVFhUX0Fzc2Vy dENvbmQgKAogICAgICAgIEJPT0xFQU4gY29uZCwgCiAgICAgICAgQk9PTEVBTiBzaG91bGRCZSwg CiAgICAgICAgY29uc3QgY2hhciAqY29uZFN0cmluZwoJKTsKCkJPT0xFQU4gVFhUX0Fzc2VydE91 dHB1dGYgKAogICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgCiAgICAgICAgLi4uCgkpOwoKQk9P TEVBTiBUWFRfQ2hlY2tOZXN0aW5nICgKICAgICAgICBpbnQgZXhwZWN0ZWRMZXZlbAoJKTsKCnZv aWQgVFhUX091dHB1dCAoCiAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsIAogICAgICAgIC4uLgoJ KTsKCnZvaWQgVFhUX091dHB1dCAoCiAgICAgICAgRklMRSAqZnAsIAogICAgICAgIGNvbnN0IGNo YXIgKmxhYmVsLCAKICAgICAgICAuLi4KCSk7Cgp2b2lkIFRYVF9PdXRwdXRmICgKICAgICAgICBj b25zdCBjaGFyICpmb3JtYXQsIAogICAgICAgIC4uLgoJKTsKCnZvaWQgVFhUX091dHB1dGYgKAog ICAgICAgIEZJTEUgKmZwLCAKICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIAogICAgICAgIC4u LgoJKTsKCnZvaWQgVFhUX091dHB1dGYgKAogICAgICAgIFNldmVyaXR5IHNldiwgCiAgICAgICAg Y29uc3QgY2hhciAqZm9ybWF0LCAKICAgICAgICAuLi4KCSk7Cgp2b2lkIFRYVF9PdXRwdXRmICgK ICAgICAgICBGSUxFICpmcCwgCiAgICAgICAgU2V2ZXJpdHkgc2V2LCAKICAgICAgICBjb25zdCBj aGFyICpmb3JtYXQsIAogICAgICAgIC4uLgoJKTsKCnZvaWQgVFhUX091dHB1dERpYWdmICgKICAg ICAgICBjb25zdCBjaGFyICpmb3JtYXQsIAogICAgICAgIC4uLgoJKTsKCnZvaWQgVFhUX091dHB1 dERpYWdmICgKICAgICAgICBGSUxFICpmcCwgCiAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAK ICAgICAgICAuLi4KCSk7Cgp2b2lkIFRYVF9TZXREZWJ1ZyAoCiAgICAgICAgQk9PTEVBTiBmCgkp OwoKQk9PTEVBTiBUWFRfR2V0RGVidWcgKCk7Cgp2b2lkIFRYVF9CZWdpbiAoKSAgICAgICAgICAg ICAgICAgICAgIDsKCnZvaWQgVFhUX0VuZCAoKSAgICAgICAgICAgICAgICAgICA7Cgp2b2lkIFRY VF9TZXRNaW5TZXZlcml0eSAoCiAgICAgICAgU2V2ZXJpdHkgc2V2CgkpOwoKU2V2ZXJpdHkgVFhU X0dldE1pblNldmVyaXR5ICgpOwoKdm9pZCBUWFRfU2V0VmVyYm9zZSAoCiAgICAgICAgQk9PTEVB TiBiCgkpOwoKQk9PTEVBTiBUWFRfR2V0VmVyYm9zZSAoKTsKCnZvaWQgVFhUX1NldERpYWcgKAog ICAgICAgIEJPT0xFQU4gYgoJKTsKCmludCBUWFRfR2V0RGlhZyAoKTsKCnZvaWQgVFhUX1VzZVN0 eWxlICgKICAgICAgICBCT09MRUFOIGIKCSk7CgppbnQgVFhUX0dldFN0eWxlICgpOwoKdm9pZCBU WFRfVXNlTGFiZWxzICgKICAgICAgICBCT09MRUFOIGIKCSk7CgpCT09MRUFOIFRYVF9HZXRMYWJl bHMgKCk7Cgp2b2lkIFRYVF9XcmFwICgKICAgICAgICBCT09MRUFOIGIKCSk7CgpCT09MRUFOIFRY VF9HZXRXcmFwICgpOwoKdm9pZCBUWFRfSW5kZW50ICgKICAgICAgICBpbnQgaQoJKTsKCmludCBU WFRfR2V0SW5kZW50ICgpOwoKdm9pZCBUWFRfQXV0b2luZGVudCAoCiAgICAgICAgQk9PTEVBTiBi CgkpOwoKQk9PTEVBTiBUWFRfR2V0QXV0b2luZGVudCAoKTsKCnZvaWQgVFhUX1NldFdpZHRoICgK ICAgICAgICBpbnQgdwoJKTsKCmludCBUWFRfR2V0V2lkdGggKCk7Cgp2b2lkIFRYVF9TZXRUcmFj ZSAoCiAgICAgICAgQk9PTEVBTiBiCgkpOwoKQk9PTEVBTiBUWFRfR2V0VHJhY2UgKCk7Cgp2b2lk IFRYVF9TZXRQcmVmaXggKAogICAgICAgIGNvbnN0IGNoYXIgKnN0cgoJKTsKCmNvbnN0IGNoYXIg KlRYVF9HZXRQcmVmaXggKCk7Cgp2b2lkIFRYVF9BZGRSZWZEaXIgKAogICAgICAgIGNvbnN0IGNo YXIgKmRpcgoJKTsKCnZvaWQgVFhUX1JlZkZpbGUgKAogICAgICAgIGNvbnN0IGNoYXIgKmZpbGUK CSk7Cgp2b2lkIFRYVF9SZWdpc3RlckluZm9DYWxsYmFjayAoCiAgICAgICAgVFhUX091dHB1dENh bGxiYWNrIGYsCiAgICAgICAgdm9pZCAqZGF0YQoJKTsKCnZvaWQgVFhUX1JlZ2lzdGVyRXJyb3JD YWxsYmFjayAoCiAgICAgICAgVFhUX091dHB1dENhbGxiYWNrIGYsCiAgICAgICAgdm9pZCAqZGF0 YQoJKTsKCnZvaWQgVFhUX1JlZ2lzdGVyT3V0cHV0Q2FsbGJhY2sgKAogICAgICAgIFNldmVyaXR5 IHNldiwKICAgICAgICBUWFRfT3V0cHV0Q2FsbGJhY2sgZiwKICAgICAgICB2b2lkICpkYXRhCgkp OwoKdm9pZCBUWFRfUmVnaXN0ZXJEaWFnQ2FsbGJhY2sgKAogICAgICAgIFRYVF9PdXRwdXRDYWxs YmFjayBmLAogICAgICAgIHZvaWQgKmRhdGEKCSk7Cgp2b2lkIFRYVF9SZWdpc3RlckZpbGVDYWxs YmFjayAoCiAgICAgICAgVFhUX0ZpbGVPdXRwdXRDYWxsYmFjayBmLAogICAgICAgIHZvaWQgKmRh dGEKCSk7Cgp2b2lkIFRYVF9SZWdpc3RlckhlYWRlckNhbGxiYWNrICgKICAgICAgICBjaGFyICoo KmYpKGNvbnN0IGNoYXIgKikKCSk7CgpjaGFyICpUWFRfRGVmYXVsdE91dHB1dEZvcm1hdCAoCiAg ICAgICAgY29uc3QgY2hhciAqc3RyCgkpOwoKVFhUX091dHB1dENhbGxiYWNrIFRYVF9HZXRPdXRw dXRDYWxsYmFjayAoCiAgICAgICAgU2V2ZXJpdHkgc2V2CgkpOwoKdm9pZCAqVFhUX0dldE91dHB1 dERhdGEgKAogICAgICAgIFNldmVyaXR5IHNldgoJKTsKClRYVF9GaWxlT3V0cHV0Q2FsbGJhY2sg VFhUX0dldEZpbGVPdXRwdXRDYWxsYmFjayAoKTsKCnZvaWQgKlRYVF9HZXRGaWxlT3V0cHV0RGF0 YSAoKTsKClRYVF9IZWFkZXJDYWxsYmFjayBUWFRfR2V0SGVhZGVyQ2FsbGJhY2sgKCk7Cgp2b2lk IFRYVF9WZlByaW50ICgKICAgICAgICBGSUxFICpmcCwgCiAgICAgICAgY29uc3QgY2hhciAqbGFi ZWwsIAogICAgICAgIHZhX2xpc3QgYXJncwoJKTsKCnZvaWQgVFhUX1ZmUHJpbnRmICgKICAgICAg ICBGSUxFICpmcCwgCiAgICAgICAgU2V2ZXJpdHkgc2V2LCAKICAgICAgICBjb25zdCBjaGFyICpm b3JtYXQsIAogICAgICAgIHZhX2xpc3QgYXJncwoJKTsKCgogCgoKIAoKCiAKCnZvaWQgVFhUX0Zh dGFsRXJyb3JEaWFsb2cgKAogICAgICAgIGNvbnN0IGNoYXIgKm1zZywgCiAgICAgICAgdm9pZCAq CgkpOwoKdm9pZCBUWFRfRXJyb3JEaWFsb2cgKAogICAgICAgIGNvbnN0IGNoYXIgKm1zZywgCiAg ICAgICAgdm9pZCAqCgkpOwoKdm9pZCBUWFRfV2FybmluZ0RpYWxvZyAoCiAgICAgICAgY29uc3Qg Y2hhciAqbXNnLCAKICAgICAgICB2b2lkICoKCSk7Cgp2b2lkIFRYVF9JbmZvRGlhbG9nICgKICAg ICAgICBjb25zdCBjaGFyICptc2csIAogICAgICAgIHZvaWQgKgoJKTsKCnZvaWQgVFhUX1F1ZXN0 aW9uRGlhbG9nICgKICAgICAgICBjb25zdCBjaGFyICptc2csIAogICAgICAgIHZvaWQgKgoJKTsK CmNoYXIgKlRYVF9EaWFsb2dIZWFkZXJDYWxsYmFjayAoCiAgICAgICAgY29uc3QgY2hhciAqc3Ry CgkpOwoKdm9pZCBUWFRfU2V0VmtEZWZhdWx0cyAoKTsKCgogCgoKCgoKIyA3NiAiL3NvZnR3YXJl L3RoYWxpYS9oL3R4dC5oIiAyCgoKIAoKY2xhc3MgVFhUX1JlZkRpciB7CnB1YmxpYzoKICAgIFRY VF9SZWZEaXIoY29uc3QgY2hhciAqZGlyKSB7IFRYVF9BZGRSZWZEaXIgKGRpcik7IH0KfTsKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNCAibnJoeS9OUkhZX0FjY2Vz cy5jIiAyCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9odS5oIiAxCgoKCiAKCgoKIyAxICIvc29m dHdhcmUvdGhhbGlhL2gvVFdJTkUuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgp0ZW1wbGF0ZSA8Y2xh c3MgVHlwZT4gY2xhc3MgTGlzdDsKCmNsYXNzIFR3aW5lIHsKICAgIGNoYXIgICAgICAqc3RyOwog ICAgaW50ICAgICAgIHNpemU7CgpwdWJsaWM6CiAKCgoKICAgIFR3aW5lKGNvbnN0IFR3aW5lICZz KTsKICAgIFR3aW5lKGNvbnN0IGNoYXIgKnMpOwogICAgVHdpbmUoY2hhciBjKTsKICAgIFR3aW5l KCB2b2lkICk7CgogCgoKCiAgICBpbmxpbmUgflR3aW5lKCkgeyBmcmVlKCB0aGlzLT5zdHIgKTsg fTsKCiAKCgoKICAgIFR3aW5lICAgJm9wZXJhdG9yPShjb25zdCBUd2luZSAmcyk7CiAgICBUd2lu ZSAgICZvcGVyYXRvcj0oY29uc3QgY2hhciAqcyk7CiAgICBUd2luZSAgICZvcGVyYXRvcj0oY2hh ciBjKTsKCiAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0OwoKICAgIGNoYXIgJm9wZXJh dG9yW10oaW50IGkpOwogICAgY2hhciBvcGVyYXRvcltdKGludCBpKSBjb25zdDsKCiAKCgoKICAg IFR3aW5lIG9wZXJhdG9yKyhjb25zdCBUd2luZSAmcykgY29uc3Q7CiAgICBUd2luZSBvcGVyYXRv cisoY29uc3QgY2hhciAqcykgY29uc3Q7CiAgICBUd2luZSBvcGVyYXRvcisoY2hhciBjKSBjb25z dDsKCiAgICBmcmllbmQgVHdpbmUgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzLCBjb25zdCBUd2lu ZSAmIHQpOwogICAgZnJpZW5kIFR3aW5lIG9wZXJhdG9yKyggY2hhciBjLCBjb25zdCBUd2luZSAm IHQpOwoKICAgIFR3aW5lICZvcGVyYXRvcis9KGNvbnN0IFR3aW5lICZzKTsKICAgIFR3aW5lICZv cGVyYXRvcis9KGNvbnN0IGNoYXIgKnMpOwogICAgVHdpbmUgJm9wZXJhdG9yKz0oY2hhciBjKTsK CgogCgoKCgogICAgaW50IG9wZXJhdG9yPT0oY29uc3QgVHdpbmUgJnMpIGNvbnN0OwogICAgaW50 IG9wZXJhdG9yPT0oY29uc3QgY2hhciAqIHMpIGNvbnN0OwogICAgaW50IG9wZXJhdG9yPT0oY2hh ciAgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3IhPShjb25zdCBUd2luZSAmcykgY29uc3Q7CiAg ICBpbnQgb3BlcmF0b3IhPShjb25zdCBjaGFyICpzKSBjb25zdDsKICAgIGludCBvcGVyYXRvciE9 KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I8PShjb25zdCBUd2luZSAmcykgY29uc3Q7 CiAgICBpbnQgb3BlcmF0b3I8PShjb25zdCBjaGFyICpzKSBjb25zdDsKICAgIGludCBvcGVyYXRv cjw9KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I+PShjb25zdCBUd2luZSAmcykgY29u c3Q7CiAgICBpbnQgb3BlcmF0b3I+PShjb25zdCBjaGFyICpzKSBjb25zdDsKICAgIGludCBvcGVy YXRvcj49KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I8KGNvbnN0IFR3aW5lICZzKSBj b25zdDsKICAgIGludCBvcGVyYXRvcjwoY29uc3QgY2hhciAqcykgY29uc3Q7CiAgICBpbnQgb3Bl cmF0b3I8KGNoYXIgYykgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I+KGNvbnN0IFR3aW5lICZzKSBj b25zdDsKICAgIGludCBvcGVyYXRvcj4oY29uc3QgY2hhciAqcykgY29uc3Q7CiAgICBpbnQgb3Bl cmF0b3I+KGNoYXIgYykgY29uc3Q7CgoKIAoKCgogICAgaW50IGxlbmd0aCggdm9pZCkgY29uc3Q7 CiAgICBpbnQgd2lsZG1hdGNoKCBjb25zdCBUd2luZSAmKSBjb25zdDsKICAgIGludCB3aWxkbWF0 Y2goIGNvbnN0IGNoYXIgKikgY29uc3Q7CgoKIAoKCgogICAgaW50IFdyaXRlQmluYXJ5KCBORVRG SUxFX0ZJTEUgKmZwKSBjb25zdDsKICAgIGludCBSZWFkQmluYXJ5KCBORVRGSUxFX0ZJTEUgKmZw KTsKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9UV0lORS5wIiAxCiAKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCmZyaWVuZCBj aGFyICppbmRleCggVHdpbmUgJiwgaW50ICk7CmZyaWVuZCBjaGFyICpyaW5kZXgoIFR3aW5lICYs IGludCApOwpmcmllbmQgY2hhciAqc3RyY2hyKCBUd2luZSAmLCBpbnQgKTsKZnJpZW5kIGNoYXIg KnN0cnJjaHIoIFR3aW5lICYsIGludCApOwpmcmllbmQgY29uc3QgY2hhciAqaW5kZXgoIGNvbnN0 IFR3aW5lICYsIGludCApOwpmcmllbmQgY29uc3QgY2hhciAqcmluZGV4KCBjb25zdCBUd2luZSAm LCBpbnQgKTsKZnJpZW5kIGNvbnN0IGNoYXIgKnN0cmNociggY29uc3QgVHdpbmUgJiwgaW50ICk7 CmZyaWVuZCBjb25zdCBjaGFyICpzdHJyY2hyKCBjb25zdCBUd2luZSAmLCBpbnQgKTsKCmZyaWVu ZCBjb25zdCBjaGFyICpmZ2V0cyggVHdpbmUgJiwgRklMRSAqICk7CmZyaWVuZCBjb25zdCBjaGFy ICpmZ2V0cyggVHdpbmUgJiwgTkVURklMRV9GSUxFICogKTsKZnJpZW5kIGNvbnN0IGNoYXIgKmdl dHMoIFR3aW5lICYgKTsKZnJpZW5kIExpc3Q8VHdpbmU+OwoKZnJpZW5kIHN0cnVjdCBGUkFOR0Ug YXRvRlJBTkdFKCBjb25zdCBjaGFyICogKTsKZnJpZW5kIFR3aW5lIEZSQU5HRXRvYSggY29uc3Qg RlJBTkdFICYsIGZsb2F0ID0gMS4wICk7CmZyaWVuZCBUd2luZSBmdG9hKCBmbG9hdCApOwojIDE2 NyAiL3NvZnR3YXJlL3RoYWxpYS9oL1RXSU5FLmgiIDIKCn07CmlubGluZSBjb25zdCBjaGFyICpj bGFzc05hbWUoIGNvbnN0IFR3aW5lICYgKSAKICAgIHsKICAgICAgICByZXR1cm4oICJUd2luZSIp OwogICAgfTsKCmlubGluZSBpbnQgbGVuZ3RoKCBjb25zdCBUd2luZSAmZm9vICkgewogICAgcmV0 dXJuIGZvby5sZW5ndGgoKTsKICAgIH07CgppbnQgZnJlYWQoIFR3aW5lICYsIE5FVEZJTEVfRklM RSAqZnApOwppbnQgbXJlYWQoIFR3aW5lICYsIGNvbnN0IHZvaWQgKmlvQnVmZmVyKTsKaW50IGZ3 cml0ZSggY29uc3QgVHdpbmUgJiwgTkVURklMRV9GSUxFICpmcCk7CgpjaGFyKiBVX1VuaXhQYXJz ZSggY29uc3QgTGlzdDxUd2luZT4gYXJndiwgT19MSVNUICpmbGFnTGlzdCwgaW50IG51bUZsYWdz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqKm9yZGVy LCBpbnQgKm9yZGVyQ291bnQpOwoKCgojIDggIi9zb2Z0d2FyZS90aGFsaWEvaC9odS5oIiAyCgoj IDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9MaXN0VGVtcGxhdGUuaCIgMQoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xhc3MgTGlzdCB7CnByb3RlY3RlZDoK ICAgIFR5cGUgKmRhdGE7CiAgICBpbnQgc3o7CiAgICBpbnQgbWF4c2l6ZTsKCiAgICB2b2lkIGlu Y3JlYXNlTWF4c2l6ZSgpOwoKcHVibGljOgogICAgTGlzdCgpOwogICAgfkxpc3QoKTsKICAgIExp c3QoIGNvbnN0IExpc3QgJiApOwogICAgTGlzdCggY29uc3QgVHlwZSAmICk7CgogICAgTGlzdCAm ICAgICAgICAgIG9wZXJhdG9yPSggY29uc3QgTGlzdCAmICk7CiAgICBUeXBlICYgICAgICAgICAg bGFzdCgpOwogICAgY29uc3QgVHlwZSAmICAgIGxhc3QoKSBjb25zdDsKCiAgICBMaXN0ICYgYXBw ZW5kKCBjb25zdCBUeXBlICYgKTsKICAgIExpc3QgJiBhcHBlbmQoIGNvbnN0IExpc3QgJiApOwog ICAgTGlzdCAmIHJlbW92ZSggaW50ICk7CiAgICBMaXN0ICYgcmVtb3ZlTGFzdCgpOwogICAgTGlz dCAmIHJlbW92ZUFsbCgpOyAgICAgICAgICAgICAgICAgIAogICAgTGlzdCAmIGluc2VydCggY29u c3QgVHlwZSAmLCBpbnQgKTsKICAgIExpc3QgJiBzZXRTaXplKCBpbnQgKTsKCiAgICBpbmxpbmUg aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBzejsgfTsKICAgIGlubGluZSBUeXBlICYgb3BlcmF0 b3JbXSggaW50IHdoaWNoICkgewogICAgICAgIGlmICggd2hpY2ggPCAwIHx8IHdoaWNoID49IHN6 ICkgewogICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJjb25zdCBMaXN0W106IGFycmF5IHJl ZmVyZW5jZSBvdXQgb2YgcmFuZ2UuXG4iICk7CiAgICAgICAgICAgIHJldHVybiBkYXRhWzBdOwog ICAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGFbd2hpY2hdOwogICAgICAgIH0KCiAgICBp bmxpbmUgY29uc3QgVHlwZSAmIG9wZXJhdG9yW10oIGludCB3aGljaCApIGNvbnN0IHsKICAgICAg ICBpZiAoIHdoaWNoIDwgMCB8fCB3aGljaCA+PSBzeiApIHsKICAgICAgICAgICAgZnByaW50Zigg c3RkZXJyLCAiY29uc3QgTGlzdFtdOiBhcnJheSByZWZlcmVuY2Ugb3V0IG9mIHJhbmdlLlxuIiAp OwogICAgICAgICAgICByZXR1cm4gZGF0YVswXTsKICAgICAgICAgICAgfQogICAgICAgIHJldHVy biBkYXRhW3doaWNoXTsKICAgICAgICB9CgogICAgaW5saW5lIFR5cGUgJiBvcGVyYXRvcigpKCBp bnQgd2hpY2ggKSB7CiAgICAgICAgcmV0dXJuIGRhdGFbd2hpY2hdOwogICAgICAgIH0KCiAgICBp bmxpbmUgY29uc3QgVHlwZSAmIG9wZXJhdG9yKCkoIGludCB3aGljaCApIGNvbnN0IHsKICAgICAg ICByZXR1cm4gZGF0YVt3aGljaF07CiAgICAgICAgfQoKICAgIH07CgppbmxpbmUgY29uc3QgY2hh ciAqY2xhc3NOYW1lKCBpbnQgKSB7IHJldHVybiAiaW50IjsgfTsKaW5saW5lIGNvbnN0IGNoYXIg KmNsYXNzTmFtZSggdW5zaWduZWQgaW50ICkgeyByZXR1cm4gInVuc2lnbmVkIGludCI7IH07Cmlu bGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIGNoYXIgKSB7IHJldHVybiAiY2hhciI7IH07Cmlu bGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIHVuc2lnbmVkIGNoYXIgKSB7IHJldHVybiAidW5z aWduZWQgY2hhciI7IH07CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIGxvbmcgKSB7IHJl dHVybiAibG9uZyI7IH07CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIHVuc2lnbmVkIGxv bmcgKSB7IHJldHVybiAidW5zaWduZWQgbG9uZyI7IH07CmlubGluZSBjb25zdCBjaGFyICpjbGFz c05hbWUoIHNob3J0ICkgeyByZXR1cm4gInNob3J0IjsgfTsKaW5saW5lIGNvbnN0IGNoYXIgKmNs YXNzTmFtZSggdW5zaWduZWQgc2hvcnQgKSB7IHJldHVybiAidW5zaWduZWQgc2hvcnQiOyB9Owpp bmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBmbG9hdCApIHsgcmV0dXJuICJmbG9hdCI7IH07 CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIGRvdWJsZSApIHsgcmV0dXJuICJkb3VibGUi OyB9OwppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCB2b2lkICogKSB7IHJldHVybiAidm9p ZCAqIjsgfTsKaW5saW5lIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSggY29uc3QgY2hhciAqICkgeyBy ZXR1cm4gImNvbnN0IGNoYXIgKiI7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KaW50IGxpc3RD b21wYXJlKCBjb25zdCBUeXBlICplMSwgY29uc3QgVHlwZSAqZTIpOwoKdGVtcGxhdGUgPGNsYXNz IFR5cGU+CnZvaWQgcXNvcnQoIExpc3Q8VHlwZT4mIGxpc3QpOwoKdGVtcGxhdGUgPGNsYXNzIFR5 cGU+ClR5cGUgKmJzZWFyY2goIGNvbnN0IFR5cGUgKmtleSwgTGlzdDxUeXBlPiYgbGlzdCk7Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY29uc3QgY2hhciAqY2xhc3NOYW1lKCBjb25zdCBMaXN0PFR5 cGU+ICYgKTsKCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9MaXN0VGVtcGxhdGUuYyIgMQoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL0xpc3RUZW1wbGF0 ZS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExMCAiL3NvZnR3YXJlL3RoYWxpYS9oL0xp c3RUZW1wbGF0ZS5oIgoKIyAyNiAiL3NvZnR3YXJlL3RoYWxpYS9oL0xpc3RUZW1wbGF0ZS5jIiAy CgoKCgoMCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTGlzdDxU eXBlPjo6TGlzdCgpIAp7CiAgICBkYXRhID0gMDsKICAgIG1heHNpemUgPSBzeiA9IDA7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0PFR5cGU+Ojp+TGlzdCgpIAp7CiAgICBpZiAoIGRhdGEg KSAKICAgICAgICBkZWxldGUgW10gZGF0YTsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ckxpc3Q8 VHlwZT46Okxpc3QoIGNvbnN0IExpc3Q8VHlwZT4mIG9sZCkgCnsKICAgIGludCBpOwoKICAgIGlm ICggb2xkLm1heHNpemUgKSB7CiAgICAgICAgaWYgKCAoIGRhdGEgPSBuZXcgVHlwZVsgb2xkLm1h eHNpemUgXSApID09IDAgKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlzdDw+OiBv dXQgb2YgbWVtb3J5IGluIGNvbnN0IGNvbnN0cnVjdG9yLlxuIiApOwogICAgICAgICAgICBzeiA9 IDA7CiAgICAgICAgICAgIG1heHNpemUgPSAwOyAgICAKICAgICAgICAgICAgcmV0dXJuOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgZWxzZSAKICAgICAgICBkYXRhID0gMDsKCiAgICBtYXhz aXplID0gb2xkLm1heHNpemU7CiAgICBzeiA9IG9sZC5zejsKCiAgICBmb3IoIGkgPSAwIDsgaSA8 IHN6IDsgaSsrKQogICAgICAgIGRhdGFbaV0gPSBvbGQuZGF0YVtpXTsKfQoKdGVtcGxhdGUgPGNs YXNzIFR5cGU+Ckxpc3Q8VHlwZT4mIExpc3Q8VHlwZT46Om9wZXJhdG9yPSggY29uc3QgTGlzdDxU eXBlPiAmIG9sZCApIAp7CiAgICBpbnQgaTsKCiAgICBpZiAoZGF0YSkgZGVsZXRlIFtdIGRhdGE7 CgogICAgaWYgKG9sZC5tYXhzaXplKSB7CiAgICAgICAgaWYgKCAoIGRhdGEgPSBuZXcgVHlwZVtv bGQubWF4c2l6ZV0gKSA9PSAwICkgewogICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTGlzdDw+ Ojo9IDogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiApOwogICAgICAgICAgICBzeiA9IDA7CiAg ICAgICAgICAgIG1heHNpemUgPSAwOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICBlbHNlIAogICAgICAgIGRhdGEgPSAwOwoKICAgIG1heHNpemUg PSBvbGQubWF4c2l6ZTsKICAgIHN6ID0gb2xkLnN6OwoKICAgIGZvciggaSA9IDAgOyBpIDwgc3og OyBpKyspCiAgICAgICAgZGF0YVtpXSA9IG9sZC5kYXRhW2ldOwogICAgCiAgICByZXR1cm4gKnRo aXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpjb25zdCBUeXBlICYgTGlzdDxUeXBlPjo6bGFz dCgpIGNvbnN0IAp7CiAgICByZXR1cm4gZGF0YVsgc3ogLSAxIF07Cn0KCnRlbXBsYXRlIDxjbGFz cyBUeXBlPgpUeXBlICYgTGlzdDxUeXBlPjo6bGFzdCgpIAp7CiAgICByZXR1cm4gZGF0YVsgc3og LSAxIF07Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0PFR5cGU+ICYgTGlzdDxUeXBlPjo6 c2V0U2l6ZSggaW50IG5ld1NpemUgKQp7CiAgICBpZiAoIG1heHNpemUgPCBuZXdTaXplICkgewog ICAgICAgIGludCBvbGRfbWF4c2l6ZSA9IG1heHNpemU7CiAgICAgICAgd2hpbGUoIG1heHNpemUg PCBuZXdTaXplICkKICAgICAgICAgICAgaW5jcmVhc2VNYXhzaXplKCk7CgogICAgICAgIFR5cGUg Km5ld0RhdGEgPSBuZXcgVHlwZVsgbWF4c2l6ZSBdOwoKICAgICAgICBpZiAoIG5ld0RhdGEgPT0g MCApIHsKICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiTGlzdDw+OjpzZXRTaXplKCVkKTog Y2FuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiwKICAgICAgICAgICAgICAgIG5ld1NpemUgKTsKICAg ICAgICAgICAgbWF4c2l6ZSA9IG9sZF9tYXhzaXplOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgICAgICAgIH0KCiAgICAgICAgZm9yKCBpbnQgaSA9IDAgOyBpIDwgc3ogOyBpKysgKSAK ICAgICAgICAgICAgbmV3RGF0YVtpXSA9IGRhdGFbaV07CgogICAgICAgIGlmICggZGF0YSApIGRl bGV0ZSBbXSBkYXRhOwogICAgICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgIH0KCiAgICBzeiA9 IG5ld1NpemU7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0 PFR5cGU+JiBMaXN0PFR5cGU+OjphcHBlbmQoIGNvbnN0IFR5cGUgJiBhICkgCnsKICAgIGludCBp OwogICAgaW50IG9sZF9tYXhzaXplID0gbWF4c2l6ZTsKICAgIFR5cGUgKm9sZERhdGEgPSAwOwoK ICAgIGlmIChzeiA9PSBtYXhzaXplKSB7CiAgICAgICAgaW5jcmVhc2VNYXhzaXplKCk7CgogICAg ICAgIFR5cGUgKm5ld0RhdGEgPSBuZXcgVHlwZVsgbWF4c2l6ZSBdOwoKICAgICAgICBpZiAobmV3 RGF0YSA9PSAwKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJMaXN0PD46OmFwcGVuZCgp OiBjYW4ndCBhbGxvY2F0ZSBtZW1vcnkuXG4iICk7CiAgICAgICAgICAgIG1heHNpemUgPSBvbGRf bWF4c2l6ZTsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgICB9CgogICAgICAg IGZvciggaSA9IDAgOyBpIDwgc3ogOyBpKyspCiAgICAgICAgICAgIG5ld0RhdGFbaV0gPSBkYXRh W2ldOwoKICAgICAgICBpZiAoZGF0YSkgCiAgICAgICAgICAgIG9sZERhdGEgPSBkYXRhOwogICAg ICAgIGRhdGEgPSBuZXdEYXRhOwogICAgICAgIH0gCgogICAgZGF0YVsgc3orKyBdID0gYTsgCgog ICAgaWYgKCBvbGREYXRhICkgCiAgICAgICAgZGVsZXRlIFtdIG9sZERhdGE7CgogICAgcmV0dXJu ICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTGlzdDxUeXBlPjo6TGlzdCggY29uc3Qg VHlwZSAmIGEgKSAKewogICAgbWF4c2l6ZSA9IDE7CiAgICBkYXRhID0gbmV3IFR5cGVbIG1heHNp emUgXTsKCiAgICBpZiAoIGRhdGEgPT0gMCApIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTGlz dDw+KCk6IGNhbid0IGFsbG9jYXRlIG1lbW9yeS5cbiIgKTsKICAgICAgICBzeiA9IDA7CiAgICAg ICAgcmV0dXJuOwogICAgICAgIH0KCiAgICBkYXRhWzBdID0gYTsKICAgIHN6ID0gMTsKfQoKdGVt cGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgTGlzdDxUeXBlPjo6aW5jcmVhc2VNYXhzaXplKCkgCnsK ICAgIGlmIChtYXhzaXplID09IDApICAgICAgICAgICBtYXhzaXplID0gMTsKICAgIGVsc2UgaWYg KG1heHNpemUgPT0gMSkgICAgICBtYXhzaXplID0gMjsKICAgIGVsc2UgaWYgKG1heHNpemUgPCA4 KSAgICAgICBtYXhzaXplID0gODsKICAgIGVsc2UgaWYgKG1heHNpemUgPCA2NTUzNikgICBtYXhz aXplICo9IDI7CiAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgbWF4c2l6ZSArPSA2NTUz NjsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ckxpc3Q8VHlwZT4mIExpc3Q8VHlwZT46OmFwcGVu ZCggY29uc3QgTGlzdDxUeXBlPiAmIGEgKSAKewogICAgaW50IGk7CiAgICBpbnQgb2xkX21heHNp emUgPSBtYXhzaXplOwoKICAgIGlmICggbWF4c2l6ZSA8PSBzeiArIGEuc3ogKSB7CiAgICAgICAg d2hpbGUoIG1heHNpemUgPCBzeiArIGEuc3ogKSAKICAgICAgICAgICAgaW5jcmVhc2VNYXhzaXpl KCk7CgogICAgICAgIFR5cGUgKm5ld0RhdGEgPSBuZXcgVHlwZVsgbWF4c2l6ZSBdOwoKICAgICAg ICBpZiAoIG5ld0RhdGEgPT0gMCApIHsKICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiTGlz dDw+OjphcHBlbmQoKTogY2FuJ3QgYWxsb2NhdGUgbWVtb3J5LlxuIiApOwogICAgICAgICAgICBt YXhzaXplID0gb2xkX21heHNpemU7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg ICAgfQoKICAgICAgICBmb3IoIGkgPSAwIDsgaSA8IHN6IDsgaSsrKQogICAgICAgICAgICBuZXdE YXRhW2ldID0gZGF0YVtpXTsKICAgICAgICBpZiAoZGF0YSkgZGVsZXRlIFtdIGRhdGE7CiAgICAg ICAgZGF0YSA9IG5ld0RhdGE7CiAgICAgICAgfQoKICAgIGZvciggaSA9IDAgOyBpIDwgYS5zeiA7 IGkrKykKICAgICAgICBkYXRhW3N6ICsgaV0gPSBhLmRhdGFbaV07CiAgICBzeiArPSBhLnN6OwoK ICAgIHJldHVybiAqdGhpczsKfQoKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh c3MgVHlwZT4KTGlzdDxUeXBlPiYgTGlzdDxUeXBlPjo6cmVtb3ZlKCBpbnQgd2hpY2ggKSAKewog ICAgaW50IGk7CgogICAgaWYgKHdoaWNoIDwgMCB8fCB3aGljaCA+PSBzeikgewogICAgICAgIGZw cmludGYoc3RkZXJyLCJMaXN0PD46OnJlbW92ZSgpOiBjYW4ndCBkZWxldGUgb2ZmIHRoZSBlbmQu XG4iICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICBmb3IoIGkgPSB3aGlj aCA7IGkgPCBzei0xIDsgaSsrKQogICAgICAgIGRhdGFbaV0gPSBkYXRhW2krMV07CgogICAgc3ot LTsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+Ckxpc3Q8VHlwZT4m IExpc3Q8VHlwZT46OnJlbW92ZUxhc3QoKSAKewogICAgaWYgKCBzeiApIHsKICAgICAgICBzei0t OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgZnByaW50Ziggc3RkZXJyLCAi TGlzdDw+OjpyZW1vdmVMYXN0KCk6IGxpc3QgaXMgZW1wdHkuXG4iICk7CgogICAgcmV0dXJuICp0 aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KTGlzdDxUeXBlPiYgTGlzdDxUeXBlPjo6cmVt b3ZlQWxsKCkgCnsKICAgIHN6ID0gMDsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs YXNzIFR5cGU+Ckxpc3Q8VHlwZT4mIExpc3Q8VHlwZT46Omluc2VydCggY29uc3QgVHlwZSAmdmFs LCBpbnQgd2hpY2ggKSAKewogICAgaW50IGk7CgogICAgaWYgKCB3aGljaCA8IDAgfHwgd2hpY2gg PiBzeikgewogICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlzdDw+OjppbnNlcnQoKSBjYW4ndCBp bnNlcnQgb2ZmIHRoZSBlbmQuXG4iICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K CiAgICBzZXRTaXplKCBzeiArIDEgKTsKCiAgICBmb3IoIGkgPSBzeiAtIDIgOyBpID49IHdoaWNo IDsgaS0tICkKICAgICAgICBkYXRhWyBpICsgMSBdID0gZGF0YVsgaSBdOwoKICAgIGRhdGFbIHdo aWNoIF0gPSB2YWw7CiAgICByZXR1cm4gKnRoaXM7Cn0KCgwKIAoKCgoKCgoKCgoKCgoKCgoKCgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCBxc29ydCggTGlzdDxUeXBlPiAmIGxpc3QgKSAK ewogICAgIAogICAgaW50ICgqbXlDb21wYXJlKSggY29uc3QgVHlwZSAqLCBjb25zdCBUeXBlICop ID0gbGlzdENvbXBhcmU7CgogICAgaWYgKCBsaXN0LnNpemUoKSA+IDEgKQogICAgICAgIHFzb3J0 KCAmKGxpc3RbMF0pLCBsaXN0LnNpemUoKSwgc2l6ZW9mKCBUeXBlICksIAogICAgICAgICAgICAo aW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpIG15Q29tcGFyZSApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVHlwZT4KVHlwZSAqYnNlYXJjaCggY29uc3QgVHlwZSAqa2V5LCBMaXN0PFR5 cGU+ICYgbGlzdCApIAp7CiAgICAgCiAgICBpbnQgKCpteUNvbXBhcmUpKCBjb25zdCBUeXBlICos IGNvbnN0IFR5cGUgKikgPSBsaXN0Q29tcGFyZTsKCiAgICBpZiAoIGxpc3Quc2l6ZSgpID09IDAg KQogICAgICAgIHJldHVybiAwOwoKICAgIHJldHVybiAoVHlwZSAqKSA6OmJzZWFyY2goIGtleSwg JihsaXN0WzBdKSwgbGlzdC5zaXplKCksIHNpemVvZiggVHlwZSApLCAKICAgICAgICAgICAgKGlu dCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBteUNvbXBhcmUgKTsKfQoKdGVtcGxh dGUgPGNsYXNzIFR5cGU+CmludCBsaXN0Q29tcGFyZSggY29uc3QgVHlwZSAqdGUxLCBjb25zdCBU eXBlICp0ZTIgKSAKewogICAgaWYgKCAqdGUxIDwgKnRlMiApCiAgICAgICAgcmV0dXJuIC0xOwog ICAgZWxzZSBpZiAoICp0ZTEgPiAqdGUyICkKICAgICAgICByZXR1cm4gMTsKICAgIGVsc2UKICAg ICAgICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CmNvbnN0IGNoYXIgKmNsYXNz TmFtZSggY29uc3QgTGlzdDxUeXBlPiAmICkgCnsKICAgIGNoYXIgKmJ1ZiA9IG5ldyBjaGFyWzEw MDBdOyAgICAgIAogICAgVHlwZSAqZm9vID0gbmV3IFR5cGU7CiAgICBzcHJpbnRmKCBidWYsICJM aXN0PCVzPiIsIGNsYXNzTmFtZSggKmZvbyApICk7IGRlbGV0ZSBmb287CiAgICByZXR1cm4gYnVm Owp9CgojIDEwNyAiL3NvZnR3YXJlL3RoYWxpYS9oL0xpc3RUZW1wbGF0ZS5oIiAyCgoKCgojIDkg Ii9zb2Z0d2FyZS90aGFsaWEvaC9odS5oIiAyCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEt cmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCiMg MTE0ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5j bHVkZS9saW1pdHMuaCIgMwoKCgoKCgoKIyAxMCAiL3NvZnR3YXJlL3RoYWxpYS9oL2h1LmgiIDIK CgoKdHlwZWRlZiBzdHJ1Y3QgT19jbGFzcyBPX0NMQVNTOwp0eXBlZGVmIHN0cnVjdCBPX0xJU1Qg T19MSVNUOwoKY2xhc3MgRk9fTUVTU0FHRV9JRDsKY2xhc3MgVmVydGV4OwpjbGFzcyBDb2xvcjsK Y2xhc3MgTWF0cml4NDsKY2xhc3MgRk9fT0JKRUNUOwpjbGFzcyBNX01hdHJpeDsKY2xhc3MgTV9W ZWN0b3I7CnR5cGVkZWYgc2hvcnQgQk9PTEVBTjsKdHlwZWRlZiBjaGFyIFNUUklOR1syNTZdOwoK IAoKCmNsYXNzIENhc3RlciB7CnB1YmxpYzoKICAgIHVuaW9uIHsKICAgICAgICBpbnQgICAgICAg ICAgICAgKmFzSW50OwogICAgICAgIGZsb2F0ICAgICAgICAgICAqYXNGbG9hdDsKICAgICAgICBk b3VibGUgICAgICAgICAgKmFzRG91YmxlOwogICAgICAgIGNoYXIgICAgICAgICAgICAqYXNDaGFy OwogICAgICAgIHVuc2lnbmVkIGNoYXIgICAqYXNVQ2hhcjsKICAgICAgICBjb25zdCBjaGFyICog ICAgKmFzQ1BjaGFyOwogICAgICAgIEZPX09CSkVDVCAqICAgICAqYXNQRk9fT0JKRUNUOwogICAg ICAgIGZsb2F0ICogICAgICAgICAqYXNQZmxvYXQ7CiAgICAgICAgaW50ICogICAgICAgICAgICph c1BpbnQ7CiAgICAgICAgVmVydGV4ICAgICAgICAgICphc1ZlcnRleDsKICAgICAgICBDb2xvciAg ICAgICAgICAgKmFzQ29sb3I7CiAgICAgICAgQk9PTEVBTiAgICAgICAgICphc0JPT0xFQU47CiAg ICAgICAgQk9PTEVBTiAqICAgICAgICphc1BCT09MRUFOOwogICAgICAgIFR3aW5lICAgICAgICAg ICAqYXNUd2luZTsKICAgICAgICBUd2luZSAqICAgICAgICAgKmFzUFR3aW5lOwogICAgICAgIFNU UklORyAgICAgICAgICAqYXNTVFJJTkc7CiAgICAgICAgaW50ICoqKiAgICAgICAgICphc1BQUGlu dDsKICAgICAgICBNYXRyaXg0ICAgICAgICAgKmFzTWF0cml4NDsKICAgICAgICB9IHU7CiAgICBl bnVtIHsgX3NjcmV3ZWRfdXAsCiAgICAgICAgX2ludCwgX2Zsb2F0LCBfZG91YmxlLCBfY2hhciwK ICAgICAgICBfQ1BjaGFyLCBfRk9fT0JKRUNULCBfUGZsb2F0LCBfUGludCwKICAgICAgICBfVmVy dGV4LCBfQ29sb3IsIF9CT09MRUFOLCBfUEJPT0xFQU4sCiAgICAgICAgX1R3aW5lLCBfUFR3aW5l LCBfU1RSSU5HLCBfUFBQaW50LCBfdWNoYXIsIF9NYXRyaXg0IH0gdHlwZTsKCiAgICBDYXN0ZXIo KTsKICAgIENhc3RlciggaW50ICphICk7CiAgICBDYXN0ZXIoIGZsb2F0ICphICk7CiAgICBDYXN0 ZXIoIGRvdWJsZSAqYSApOwogICAgQ2FzdGVyKCBjaGFyICphICk7CiAgICBDYXN0ZXIoIHVuc2ln bmVkIGNoYXIgKmEgKTsKICAgIENhc3RlciggY29uc3QgY2hhciAqKmEgKTsKICAgIENhc3Rlcigg Rk9fT0JKRUNUICoqYSApOwogICAgQ2FzdGVyKCBmbG9hdCAqKmEgKTsKICAgIENhc3RlciggaW50 ICoqYSApOwogICAgQ2FzdGVyKCBWZXJ0ZXggKmEgKTsKICAgIENhc3RlciggQ29sb3IgKmEgKTsK ICAgIENhc3RlciggQk9PTEVBTiAqYSApOwogICAgQ2FzdGVyKCBCT09MRUFOICoqYSk7CiAgICBD YXN0ZXIoIFR3aW5lICphICk7CiAgICBDYXN0ZXIoIFR3aW5lICoqYSApOwogICAgQ2FzdGVyKCBT VFJJTkcgKmEgKTsKICAgIENhc3RlciggaW50ICoqKiphICk7CiAgICBDYXN0ZXIoIE1hdHJpeDQg KmEgKTsKICAgIH07CgppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBDYXN0ZXIgKSB7IHJl dHVybiAiQ2FzdGVyIjsgfTsKCnN0cnVjdCBIVV9QYXJzZXJTdGF0ZUV4dHJhIHsKICAgIHZvaWQg ICAgICAgICprZXk7CiAgICB2b2lkICAgICAgICAqdmFsdWU7CiAgICB9OwppbmxpbmUgY29uc3Qg Y2hhciAqY2xhc3NOYW1lKCBIVV9QYXJzZXJTdGF0ZUV4dHJhICkgeyAKICAgICAgICAgICAgcmV0 dXJuICJIVV9QYXJzZXJTdGF0ZUV4dHJhIjsgfTsKCnN0cnVjdCBIVV9QYXJzZXJTdGF0ZSB7CiAg ICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudERlcHRoOwogICAgZW51bSB7IE5v cm1hbCwgRm91bmRCcmFjZSwgRXhwZWN0aW5nQnJhY2UgfSBicmFjZVN0YXRlOwogICAgaW50ICAg ICAgICAgICAgICAgICAgICAgICAgIGFsbG93VW5kZWZpbmVkRnVuY3M7CiAgICBUd2luZSAgICAg ICAgICAgICAgICAgICAgICAgZmlyc3RXb3JkOwogICAgVHdpbmUgICAgICAgICAgICAgICAgICAg ICAgIHNlY29uZFdvcmQ7CiAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgZnJhbWU7CiAg ICBMaXN0PEZSQU5HRT4gICAgICAgICAgICAgICAgZnJhbmdlczsKICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICBmcmFuZ2VJc0ZpbHRlcjsKICAgIExpc3Q8SFVfUGFyc2VyU3RhdGVFeHRy YT4gICBleHRyYTsgICAgICAgICAgIAoKICAgIEhVX1BhcnNlclN0YXRlKCk7CiAgICB9OwoKZXh0 ZXJuIEhVX1BhcnNlclN0YXRlIEhVX0RlZmF1bHRTdGF0ZTsKCnN0cnVjdCBIVV9WYWx1ZUd1dHM7 CgpzdHJ1Y3QgSFVfQ2hhblNwZWMgewogICAgVHdpbmUgICAgICAgICAgIG5hbWU7CiAgICBMaXN0 PHZvaWQgKj4gICAgbG9va3VwOwogICAgSFVfUGFyc2VyU3RhdGUgIHN0YXRlOwogICAgfTsKCnN0 cnVjdCBIVV9WYWx1ZSB7CiAgICBIVV9WYWx1ZUd1dHMgICAgICAgICpkYXRhOwoKICAgIEhVX1Zh bHVlKCk7CiAgICBIVV9WYWx1ZSggY29uc3QgSFVfVmFsdWUgJiBvbGQgKTsKICAgIH5IVV9WYWx1 ZSgpOwogICAgSFVfVmFsdWUgJiBvcGVyYXRvcj0oIGNvbnN0IEhVX1ZhbHVlICYgb2xkICk7Cgog ICAgb3BlcmF0b3IgZmxvYXQgKCk7CiAgICBvcGVyYXRvciBpbnQgKCk7CiAgICBvcGVyYXRvciBU d2luZSAoKTsKICAgIG9wZXJhdG9yIE1fVmVjdG9yICgpOwogICAgb3BlcmF0b3IgTV9NYXRyaXgg KCk7CiAgICBvcGVyYXRvciBIVV9DaGFuU3BlYyAoKTsKICAgIG9wZXJhdG9yIFR3aW5lICgpIGNv bnN0OwoKICAgIEhVX1ZhbHVlKCBmbG9hdCApOwogICAgSFVfVmFsdWUoIGNvbnN0IFR3aW5lICYg KTsKICAgIEhVX1ZhbHVlKCBjb25zdCBjaGFyICogKTsgICAgICAgICAgICAKICAgIEhVX1ZhbHVl KCBjb25zdCBNX1ZlY3RvciAmICk7CiAgICBIVV9WYWx1ZSggY29uc3QgTV9NYXRyaXggJiApOwog ICAgSFVfVmFsdWUoIGNvbnN0IEhVX0NoYW5TcGVjICYgKTsKCiAgICBpbnQgaXNGbG9hdCgpIGNv bnN0OwogICAgaW50IGlzVHdpbmUoKSBjb25zdDsKICAgIGludCBpc01fVmVjdG9yKCkgY29uc3Q7 CiAgICBpbnQgaXNNX01hdHJpeCgpIGNvbnN0OwogICAgaW50IGlzSFVfQ2hhblNwZWMoKSBjb25z dDsKCiAgICB2b2lkIFNldFBhcnNlclN0YXRlKCBIVV9QYXJzZXJTdGF0ZSAmICk7CiAgICB9OwoK IAppbmxpbmUgVHdpbmUgJiBvcGVyYXRvcis9KCBUd2luZSAmdCwgY29uc3QgSFVfVmFsdWUgJnYg KSAKICAgIHsgcmV0dXJuIHQgKz0gKFR3aW5lKSh2KTsgfQoKc3RydWN0IEhVX09iamVjdENoYW5u ZWxOYW1lIHsKICAgIFR3aW5lICAgb2JqZWN0OwogICAgVHdpbmUgICBjaGFubmVsOwoKICAgIGlu dCBvcGVyYXRvcj09KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAgICBp bnQgb3BlcmF0b3IhPSggY29uc3QgSFVfT2JqZWN0Q2hhbm5lbE5hbWUgJiApIGNvbnN0OwogICAg aW50IG9wZXJhdG9yPD0oIGNvbnN0IEhVX09iamVjdENoYW5uZWxOYW1lICYgKSBjb25zdDsKICAg IGludCBvcGVyYXRvcj49KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAg ICBpbnQgb3BlcmF0b3I8KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAg ICBpbnQgb3BlcmF0b3I+KCBjb25zdCBIVV9PYmplY3RDaGFubmVsTmFtZSAmICkgY29uc3Q7CiAg ICB9OwppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBIVV9PYmplY3RDaGFubmVsTmFtZSAp IAogICAgeyByZXR1cm4gIkhVX09iamVjdENoYW5uZWxOYW1lIjsgfTsKCnN0cnVjdCBIVV9FeHBy ZXNzaW9uR3V0czsKCnN0cnVjdCBIVV9FeHByZXNzaW9uIHsKICAgICAKICAgIEhVX0V4cHJlc3Np b25HdXRzICAgICAgICpkYXRhOwoKcHVibGljOgogICAgSFVfRXhwcmVzc2lvbigpOwogICAgfkhV X0V4cHJlc3Npb24oKTsKICAgIEhVX0V4cHJlc3Npb24oIGNvbnN0IEhVX0V4cHJlc3Npb24gJiAp OwogICAgSFVfRXhwcmVzc2lvbiAmIG9wZXJhdG9yPSggY29uc3QgSFVfRXhwcmVzc2lvbiAmICk7 CiAgICBIVV9FeHByZXNzaW9uKCBIVV9FeHByZXNzaW9uR3V0cyAqICk7CgogICAgSFVfVmFsdWUg RXZhbHVhdGUoIEhVX1BhcnNlclN0YXRlICYgPSBIVV9EZWZhdWx0U3RhdGUgKTsKCiAgICBUd2lu ZSBHZXRPcmlnaW5hbFRleHQoKTsKICAgIFR3aW5lIEdldE9yaWdpbmFsVGV4dCgpIGNvbnN0OwoK ICAgIGNvbnN0IFR3aW5lICYgVHlwZSgpOwogICAgY29uc3QgVHdpbmUgJiBUeXBlKCkgY29uc3Q7 CgogICAgaW50IENvbnRhaW5zT2JqZWN0KCBjb25zdCBjaGFyICogb2JqZWN0ICk7CiAgICBpbnQg Q29udGFpbnNPYmplY3QoIGNvbnN0IGNoYXIgKiBvYmplY3QgKSBjb25zdDsKCiAgICBpbnQgQ29u dGFpbnNPYmplY3RDaGFubmVsKCBjb25zdCBjaGFyICogb2JqZWN0LCBjb25zdCBjaGFyICogY2hh bm5lbCApOwogICAgaW50IENvbnRhaW5zT2JqZWN0Q2hhbm5lbCggY29uc3QgY2hhciAqIG9iamVj dCwgY29uc3QgY2hhciAqIGNoYW5uZWwgKWNvbnN0OwoKICAgIHZvaWQgUmVuYW1lT2JqZWN0KCBj b25zdCBjaGFyICogb2xkT2JqLCBjb25zdCBjaGFyICogbmV3T2JqLAogICAgICAgIEhVX1BhcnNl clN0YXRlICYgZ2VuZXJpYyA9IEhVX0RlZmF1bHRTdGF0ZSApOwogICAgdm9pZCBSZW5hbWVPYmpl Y3RDaGFubmVsKCBjb25zdCBjaGFyICogb2xkT2JqLCBjb25zdCBjaGFyICogb2xkQ2hhbiwKICAg ICAgICBjb25zdCBjaGFyICogbmV3T2JqLCBjb25zdCBjaGFyICogbmV3Q2hhbiwKICAgICAgICBI VV9QYXJzZXJTdGF0ZSAmIGdlbmVyaWMgPSBIVV9EZWZhdWx0U3RhdGUgKTsKCiAgICBMaXN0PFR3 aW5lPiAgICAgICAgICAgICAgICAgR2V0T2JqZWN0TGlzdCgpOwogICAgTGlzdDxUd2luZT4gICAg ICAgICAgICAgICAgIEdldE9iamVjdExpc3QoKSBjb25zdDsKCiAgICBMaXN0PEhVX09iamVjdENo YW5uZWxOYW1lPiAgR2V0T2JqZWN0Q2hhbm5lbExpc3QoKTsKICAgIExpc3Q8SFVfT2JqZWN0Q2hh bm5lbE5hbWU+ICBHZXRPYmplY3RDaGFubmVsTGlzdCgpIGNvbnN0OwogICAgfTsKCmlubGluZSBj b25zdCBjaGFyICpjbGFzc05hbWUoIEhVX0V4cHJlc3Npb24gKSB7IHJldHVybiAiSFVfRXhwcmVz c2lvbiI7IH07CgpjbGFzcyBIVV9BdWRpdFN0cmVhbSB7CiAgICBpbnQgICAgICAgICAgICAgdG9w T25seTsKICAgIGludCAgICAgICAgICAgICBpZ25vcmVFcnJvcnM7CiAgICBMaXN0PFR3aW5lPiAg ICAgcXVldWU7CiAgICBpbnQgICAgICAgICAgICAgaXNBdWQyOwogICAgRklMRSAgICAgICAgICAg ICpmaWxlOwogICAgaW50ICAgICAgICAgICAgIHByZXZpb3VzbHlPcGVuOwogICAgaW50ICAgICAg ICAgICAgIGlnbm9yZVByb21wdDsKICAgIGNoYXIgICAgICAgICAgICAqZmlsZW5hbWU7CgpwdWJs aWM6CiAgICBIVV9BdWRpdFN0cmVhbSggaW50IGF1ZFR5cGUgKTsKICAgIH5IVV9BdWRpdFN0cmVh bSgpOwoKICAgIGludCBHZXRUb3BPbmx5KCk7CiAgICB2b2lkIFNldFRvcE9ubHkoIGludCApOwoK ICAgIGludCBHZXRJZ25vcmVFcnJvcnMoKTsKICAgIHZvaWQgU2V0SWdub3JlRXJyb3JzKCBpbnQg KTsKCiAgICBpbnQgR2V0SWdub3JlUHJvbXB0KCk7CiAgICB2b2lkIFNldElnbm9yZVByb21wdCgg aW50ICk7CgogICAgdm9pZCBQcmludFF1ZXVlKCk7CiAgICB2b2lkIEVtcHR5UXVldWUoKTsKCiAg ICBUd2luZSBHZXRUZXh0U3RhdHVzKCk7CgogICAgdm9pZCBvcGVyYXRvcigpKCBjb25zdCBMaXN0 PFR3aW5lPiAmIGFyZ3YgKTsKICAgIHZvaWQgb3BlcmF0b3IoKSggY29uc3QgVHdpbmUgJiB0aGVM aW5lICk7CiAgICB2b2lkIG9wZXJhdG9yKCkoIGNvbnN0IGNoYXIgKiB0aGVMaW5lICk7CgogICAg RklMRSAqT3BlbigpOwogICAgaW50IENsb3NlKCk7CgogICAgaW50IElzT3BlbigpOwoKICAgIHZv aWQgU2V0RmlsZW5hbWUoIGNvbnN0IGNoYXIgKm5ld05hbWUgKTsKICAgIFR3aW5lIEdldEZpbGVu YW1lKCk7CiAgICB9OwoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvaHUucCIgMQogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgogCgoKIAoKdm9pZCBIVV9WYUF1ZGl0ICgKCQljb25zdCBjaGFyICpzdHIK CQkuLi4KICk7CgoKIAoKdm9pZCBIVV9BZGRCaW5hcnlPcGVyYXRvciAoCiAgICAgICAgY29uc3Qg Y2hhciAqICAgIG5hbWUsCiAgICAgICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5LAogICAgICAg IEhVX1ZhbHVlICAgICAgICAoICpldmFsRm4gKSggSFVfRXhwcmVzc2lvbiwgSFVfRXhwcmVzc2lv biwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICosIEhVX1BhcnNlclN0YXRlICYgKQogKTsKCgogCgoKIAoKdm9pZCBIVV9Jbml0U2ln bmFscyAoCiAgICB2b2lkCiApOwoKdm9pZCBIVV9Gcm9tQ2JyZWFrICgKICAgIHZvaWQKICk7Cgpp bnQgSFVfVG9DYnJlYWsgKAogICAgdm9pZAogKTsKCgogCgoKIAoKCiAKCnZvaWQgSFVfQWRkQ2xh c3MgKCAKICAgICAgICAgICAgICAgICAgICBPX0NMQVNTICpuZXdDbGFzcyAKICk7CgoKIAoKCiAK CgogCgoKIAoKdm9pZCBIVV9Eb1Jlc2l6ZSAoKTsKCgogCgoKIAoKCiAKCnZvaWQgSFVfRXJyb3Ig KCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cgCiApOwoKdm9pZCBIVV9TeXNF cnJvciAoIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZyAKICk7Cgp2b2lkIEhV X1dhcm4gKCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cgCiApOwoKCiAKCnZv aWQgSFVfQWRkTWFpbiAoIAoJCWNvbnN0IGNoYXIqIGNtZCwgCgkJaW50ICgqZnVuYykoIGNoYXIq LCBjaGFyKiosIGludCApLAoJCWNvbnN0IGNoYXIqIGhlbHAgCiApOwoKdm9pZCBIVV9BZGRNYWlu ICggCgkJY29uc3QgY2hhciogY21kLCAKCQlpbnQgKCpmdW5jKSggY29uc3QgY2hhciosIExpc3Q8 IGNvbnN0IGNoYXIqID4gKSwKCQljb25zdCBjaGFyKiBoZWxwIAogKTsKCnZvaWQgSFVfQWRkTWFp biAoIAoJCWNvbnN0IGNoYXIqIGNtZCwgCgkJaW50ICgqZnVuYykoIGNvbnN0IGNoYXIqLCBMaXN0 PCBjb25zdCBjaGFyICogPiwgdm9pZCAqICksCgkJY29uc3QgY2hhciogaGVscCwKCQl2b2lkKiBj bGllbnREYXRhCiApOwoKdm9pZCBIVV9BZGRNYWluICggCgkJY29uc3QgY2hhciogY21kLCAKCQlp bnQgKCpmdW5jKSggdm9pZCogKSwKCQljb25zdCBjaGFyKiBoZWxwLAoJCXZvaWQqIGNsaWVudERh dGEKICk7Cgp2b2lkIEhVX0FkZE1haW4gKCAKCQljb25zdCBjaGFyKiBjbWQsIAoJCWludCAoKmZ1 bmMpKCBjb25zdCBMaXN0PFR3aW5lPiAmLCB2b2lkICogKSwKCQljb25zdCBjaGFyKiBoZWxwICwK CQl2b2lkKiBjbGllbnREYXRhCiApOwoKdm9pZCBIVV9BZGRNYWluICggCgkJY29uc3QgY2hhciog Y21kLCAKCQlpbnQgKCpmdW5jKSgpLAoJCWNvbnN0IGNoYXIqIGhlbHAgCiApOwoKdm9pZCBIVV9B ZGRNYWluICggCgkJY29uc3QgY2hhciogY21kLCAKCQlpbnQgKCpmdW5jKSggY29uc3QgTGlzdDwg VHdpbmUgPiYgKSwKCQljb25zdCBjaGFyKiBoZWxwIAogKTsKCnZvaWQgSFVfQWRkTWFpbiAoIAoJ CWNvbnN0IGNoYXIqIGNtZCwgCgkJaW50ICgqZnVuYykoIExpc3Q8IEhVX0V4cHJlc3Npb24gPiAp LAoJCWNvbnN0IGNoYXIqIGhlbHAgCiApOwoKdm9pZCBIVV9BZGRNYWluICggCgkJY29uc3QgY2hh ciogY21kLCAKCQlpbnQgKCpmdW5jKSggTGlzdDwgSFVfRXhwcmVzc2lvbiA+LCB2b2lkKiApLAoJ CWNvbnN0IGNoYXIqIGhlbHAsCgkJdm9pZCogY2xpZW50RGF0YQogKTsKCkJPT0xFQU4gSFVfRmlu ZE1haW4gKAoJCSAgICBjb25zdCBjaGFyKiBhcmcKICk7Cgp2b2lkIEhVX1JlbW92ZU1haW4gKAoJ CSAgIGNvbnN0IGNoYXIqIGNtZAogKTsKCnZvaWQgSFVfQWRkRGVmYXVsdCAoIAoJCSAgIGludCAo KmZ1bmMpKCBjb25zdCBMaXN0PCBUd2luZSA+JiApIAogKTsKCnZvaWQgSFVfQWRkRGVmYXVsdCAo CgkJICAgaW50ICgqZnVuYykoIExpc3Q8IEhVX0V4cHJlc3Npb24gPiApCiApOwoKTGlzdDxUd2lu ZT4gSFVfRXZhbHVhdGUgKAoJCQlMaXN0PCBIVV9FeHByZXNzaW9uID4gZXhwcnMsCgkJCUhVX1Bh cnNlclN0YXRlJiBnZW5lcmljU3RhdGUKICk7Cgp2b2lkIEhVX0V4ZWN1dGUgKAoJCUxpc3Q8SFVf RXhwcmVzc2lvbj4gZXhwcnMsCgkJSFVfUGFyc2VyU3RhdGUmIGdlbmVyaWNTdGF0ZQogKTsKCgog CgoKIAoKTGlzdDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmQgKCAKICAgICAgICBjb25zdCBUd2lu ZSAmIHRoZUxpbmUsCiAgICAgICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoK TGlzdDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmRNYXRoICgKICAgICAgICBjb25zdCBUd2luZSAm IHRoZUxpbmUsCiAgICAgICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKTGlz dDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmRWYWx1ZSAoCiAgICAgICAgY29uc3QgVHdpbmUgJiB0 aGVMaW5lLAogICAgICAgIEhVX1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCgogCgp2 b2lkIEhVX0FkZE9iamVjdENoYW5uZWxGdW5jdGlvbnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAo Kmxvb2t1cEZuKSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEhVX1BhcnNlclN0YXRlICYp LAogICAgICAgIEhVX1ZhbHVlICAoKmV2YWxGbikoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCBjb25zdCBMaXN0PHZvaWQgKj4gJiAsIEhVX1BhcnNlclN0YXRlICYgKSwKICAgICAgICBpbnQg ICAgICgqcGFyc2VGbikoIFR3aW5lICYsIFR3aW5lICYgKQogKTsKCnZvaWQgSFVfQWRkT2JqZWN0 Q2hhbm5lbEZ1bmN0aW9ucyAoCiAgICAgICAgTGlzdDx2b2lkICo+ICgqbG9va3VwRm4pKCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgSFVfUGFyc2VyU3RhdGUgJiksCiAgICAgICAgSFVfVmFs dWUgICgqZXZhbEZuKSggY29uc3QgTGlzdDx2b2lkICo+ICYgLCBIVV9QYXJzZXJTdGF0ZSAmICks CiAgICAgICAgaW50ICAgICAoKnBhcnNlRm4pKCBUd2luZSAmLCBUd2luZSAmICkKICk7Cgp2b2lk IEhVX0ZsdXNoT2JqZWN0Q2hhbm5lbENhY2hlICgKICAgICAgICB2b2lkCiApOwoKdm9pZCBIVV9H bG9iYWxSZW5hbWVPYmplY3RDaGFubmVsICgKICAgICAgICBjb25zdCBjaGFyICpvbGROYW1lLAog ICAgICAgIGNvbnN0IGNoYXIgKm9sZENoYW4sCiAgICAgICAgY29uc3QgY2hhciAqbmV3TmFtZSwK ICAgICAgICBjb25zdCBjaGFyICpuZXdDaGFuCiApOwoKdm9pZCBIVV9BZGRPYmplY3RGdW5jdGlv bnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3QgY2hhciAqLCBIVV9Q YXJzZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAgKCpldmFsRm4pKCBjb25zdCBjaGFyICos IGNvbnN0IExpc3Q8dm9pZCAqPiAmICwgSFVfUGFyc2VyU3RhdGUgJiApLAogICAgICAgIGludCAg ICAgKCpwYXJzZUZuKSggVHdpbmUgJiApCiApOwoKdm9pZCBIVV9BZGRPYmplY3RGdW5jdGlvbnMg KAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3QgY2hhciAqLCBIVV9QYXJz ZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAgKCpldmFsRm4pKCBjb25zdCBMaXN0PHZvaWQg Kj4gJiAsIEhVX1BhcnNlclN0YXRlICYgKSwKICAgICAgICBpbnQgICAgICgqcGFyc2VGbikoIFR3 aW5lICYgKQogKTsKCnZvaWQgSFVfR2xvYmFsUmVuYW1lT2JqZWN0ICgKICAgICAgICBjb25zdCBj aGFyICpvbGROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKm5ld05hbWUKICk7Cgp2b2lkIEhVX0Zs dXNoT2JqZWN0Q2FjaGUgKAogICAgICAgIHZvaWQKICk7Cgp2b2lkIEhVX0FkZFBvc3RGaXhPcGVy YXRvciAoCiAgICAgICAgY29uc3QgY2hhciAqICAgIG5hbWUsCiAgICAgICAgaW50ICAgICAgICAg ICAgIG5BcmdzLAogICAgICAgIEhVX1ZhbHVlICAgICAgICAoICpldmFsRm4gKSggSFVfRXhwcmVz c2lvbiwgTGlzdDxIVV9FeHByZXNzaW9uPiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICosIEhVX1BhcnNlclN0YXRlICYgKQogKTsKCnZvaWQgSFVfQWRkQ2hh blNwZWNGdW5jdGlvbnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3Qg Y2hhciAqLCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAoKmV2YWxGbikoY29u c3QgY2hhciAqLGNvbnN0IExpc3Q8dm9pZCAqPiAmLCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAg ICBpbnQgICAgICgqcGFyc2VGbikoIFR3aW5lICYgKQogKTsKCnZvaWQgSFVfQWRkQ2hhblNwZWNG dW5jdGlvbnMgKAogICAgICAgIExpc3Q8dm9pZCAqPiAoKmxvb2t1cEZuKSggY29uc3QgY2hhciAq LCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAgICBIVV9WYWx1ZSAoKmV2YWxGbikoY29uc3QgY2hh ciAqLGNvbnN0IExpc3Q8dm9pZCAqPiAmLCBIVV9QYXJzZXJTdGF0ZSAmKSwKICAgICAgICBpbnQg ICAgICgqcGFyc2VGbikoIFR3aW5lICYgKSwKICAgICAgICBpbnQgICAgICgqcGFyc2VBc0FyZ0Zu KSggVHdpbmUgJiwgY29uc3QgY2hhciAqLCBpbnQgKQogKTsKCnZvaWQgSFVfRmx1c2hDaGFuU3Bl Y0NhY2hlICgKICAgICAgICB2b2lkCiApOwoKCiAKCgogCgp2b2lkIEhVX0FkZE1ldGhvZCAoIAog ICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAg ICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQgCiApOwoKdm9pZCBIVV9B ZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNsYXNzLCAKICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAgIGNvbnN0IGNo YXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVzc2FnZUlELCAK ICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3RlciBhcmcxIAog KTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0 aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAg ICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lE IG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBD YXN0ZXIgYXJnMSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzIgCiApOwoKdm9pZCBI VV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNsYXNzLCAK ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAgIGNvbnN0 IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVzc2FnZUlE LCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3RlciBhcmcx LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAgICAgICAgICAgICAgICAg Q2FzdGVyIGFyZzMgCiApOwoKdm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAg ICBGT19PQkpFQ1QgKnRoZUNsYXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt ZXRob2ROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAg IEZPX01FU1NBR0VfSUQgbWVzc2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdC YXNlLAogICAgICAgIENhc3RlciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn MiwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAg IENhc3RlciBhcmc0IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAg ICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq bWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAg ICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJn QmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFy ZzIsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICAgICAgICAgICAg ICBDYXN0ZXIgYXJnNCwKICAgICAgICBDYXN0ZXIgYXJnNSAKICk7Cgp2b2lkIEhVX0FkZE1ldGhv ZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVs cCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAg ICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAg ICAgICAgICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn MywgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzQsCiAgICAgICAgQ2FzdGVyIGFyZzUs IAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc2IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9k ICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxw LCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAg ICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAg ICAgICAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmcz LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNCwKICAgICAgICBDYXN0ZXIgYXJnNSwg CiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzYsIAogICAgICAgICAgICAgICAgICAgIENh c3RlciBhcmc3IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAg Rk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0 aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBG T19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFz ZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzIs IAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICAgICAgICAgICAgICBD YXN0ZXIgYXJnNCwKICAgICAgICBDYXN0ZXIgYXJnNSwgCiAgICAgICAgICAgICAgICAgICAgQ2Fz dGVyIGFyZzYsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc3LCAKICAgICAgICAgICAg ICAgICAgICBDYXN0ZXIgYXJnOCAKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAg ICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAg ICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZv aWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgICAgICAgICAgICAgIENh c3RlciBhcmcyLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgICAg ICAgICAgICAgQ2FzdGVyIGFyZzQsCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgICAgICAg ICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNywgCiAg ICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzgsCiAgICAgICAgQ2FzdGVyIGFyZzkgCiApOwoK dm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNs YXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAg IGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVz c2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3Rl ciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAgICAgICAgICAg ICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc0LAogICAg ICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAg ICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBh cmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn MTAgCiApOwoKdm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpF Q1QgKnRoZUNsYXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1l LAogICAgICAgIGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NB R0VfSUQgbWVzc2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAg ICAgIENhc3RlciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAg ICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBh cmc0LAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn NiwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAgICAgICAg IENhc3RlciBhcmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAgICAgICBD YXN0ZXIgYXJnMTAsCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzExIAogKTsKCnZvaWQg SFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywg CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25z dCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJ RCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJn MSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgICAgICAgICAgICAg IENhc3RlciBhcmczLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNCwKICAgICAgICBD YXN0ZXIgYXJnNSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzYsIAogICAgICAgICAg ICAgICAgICAgIENhc3RlciBhcmc3LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnOCwK ICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzEwLAog ICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmcxMSwKICAgICAgICAgICAgICAgICAgICBDYXN0 ZXIgYXJnMTIgCiApOwoKdm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBG T19PQkpFQ1QgKnRoZUNsYXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRo b2ROYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZP X01FU1NBR0VfSUQgbWVzc2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNl LAogICAgICAgIENhc3RlciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwg CiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENh c3RlciBhcmc0LAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0 ZXIgYXJnNiwgCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAg ICAgICAgIENhc3RlciBhcmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAg ICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzExLAogICAg ICAgICAgICAgICAgICAgIENhc3RlciBhcmcxMiwKICAgICAgICBDYXN0ZXIgYXJnMTMgCiApOwoK dm9pZCBIVV9BZGRNZXRob2QgKCAKICAgICAgICAgICAgICAgICAgICBGT19PQkpFQ1QgKnRoZUNs YXNzLCAKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2ROYW1lLAogICAgICAg IGNvbnN0IGNoYXIgKmhlbHAsIAogICAgICAgICAgICAgICAgICAgIEZPX01FU1NBR0VfSUQgbWVz c2FnZUlELCAKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdCYXNlLAogICAgICAgIENhc3Rl ciBhcmcxLCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnMiwgCiAgICAgICAgICAgICAg ICAgICAgQ2FzdGVyIGFyZzMsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBhcmc0LAogICAg ICAgIENhc3RlciBhcmc1LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAg ICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgICAgICAgICAgICAgIENhc3RlciBh cmc4LAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICAgICAgICAgICAgICBDYXN0ZXIgYXJn MTAsCiAgICAgICAgICAgICAgICAgICAgQ2FzdGVyIGFyZzExLAogICAgICAgICAgICAgICAgICAg IENhc3RlciBhcmcxMiwKICAgICAgICBDYXN0ZXIgYXJnMTMsCiAgICAgICAgICAgICAgICAgICAg Q2FzdGVyIGFyZzE0IAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAg ICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq bWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAg ICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJn QmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAg IENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUs IAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2Fz dGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAg ICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3Rl ciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUKICk7 Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhl Q2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAg ICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBt ZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2Fz dGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAg ICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIg YXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAg ICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcx MSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAg IENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcx NgogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNU ICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwK ICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdF X0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAg ICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmcz LCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENh c3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAog ICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVy IGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAg ICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVy IGFyZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAog ICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAg ICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAg ICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3Rl ciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAg ICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFy ZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAg Q2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEy LCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAg Q2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3 LCAKICAgICAgICBDYXN0ZXIgYXJnMTgKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAg ICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAg ICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAg IHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcy LCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENh c3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAog ICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVy IGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAg ICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVy IGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAg ICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOQogKTsKCnZvaWQgSFVfQWRk TWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFy ICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAg ICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAg ICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIg YXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAg ICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5 LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBD YXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0 LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBD YXN0ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5 LCAKICAgICAgICBDYXN0ZXIgYXJnMjAKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAg ICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAg ICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAg IHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcy LCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENh c3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAog ICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVy IGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAg ICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVy IGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAg ICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVy IGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMQogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAg ICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAg ICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAg ICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVy IGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAg ICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJn NywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBD YXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIs IAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBD YXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcs IAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5LCAKICAgICAgICBD YXN0ZXIgYXJnMjAsCiAgICAgICAgQ2FzdGVyIGFyZzIxLCAKICAgICAgICBDYXN0ZXIgYXJnMjIK ICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAq dGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAg ICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9J RCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAg Q2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywg CiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0 ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAg ICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBh cmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAg ICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBh cmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAg ICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFyZzIwLAogICAgICAgIENhc3RlciBh cmcyMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAgICBDYXN0ZXIgYXJnMjMKICk7Cgp2 b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xh c3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAg Y29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNz YWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVy IGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAg ICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJn NiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBD YXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwg CiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENh c3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwg CiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENh c3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwg CiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAgICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENh c3RlciBhcmcyNAogKTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAg Rk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0 aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBG T19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFz ZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENh c3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAog ICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVy IGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAg ICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBh cmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAg ICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBh cmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5LCAKICAgICAgICBDYXN0ZXIgYXJnMjAsCiAgICAg ICAgQ2FzdGVyIGFyZzIxLCAKICAgICAgICBDYXN0ZXIgYXJnMjIsIAogICAgICAgIENhc3RlciBh cmcyMywgCiAgICAgICAgQ2FzdGVyIGFyZzI0LCAKICAgICAgICBDYXN0ZXIgYXJnMjUKICk7Cgp2 b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xh c3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAg Y29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNz YWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVy IGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAg ICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJn NiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBD YXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwg CiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENh c3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwg CiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENh c3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwg CiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAgICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENh c3RlciBhcmcyNCwgCiAgICAgICAgQ2FzdGVyIGFyZzI1LAogICAgICAgIENhc3RlciBhcmcyNgog KTsKCnZvaWQgSFVfQWRkTWV0aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0 aGVDbGFzcywgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAg ICAgICBjb25zdCBjaGFyICpoZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lE IG1lc3NhZ2VJRCwgCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBD YXN0ZXIgYXJnMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAK ICAgICAgICBDYXN0ZXIgYXJnNCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3Rl ciBhcmc2LCAKICAgICAgICBDYXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAg ICAgIENhc3RlciBhcmc5LCAKICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFy ZzExLCAKICAgICAgICBDYXN0ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAg ICAgQ2FzdGVyIGFyZzE0LCAKICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFy ZzE2LCAKICAgICAgICBDYXN0ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAg ICAgQ2FzdGVyIGFyZzE5LCAKICAgICAgICBDYXN0ZXIgYXJnMjAsCiAgICAgICAgQ2FzdGVyIGFy ZzIxLCAKICAgICAgICBDYXN0ZXIgYXJnMjIsIAogICAgICAgIENhc3RlciBhcmcyMywgCiAgICAg ICAgQ2FzdGVyIGFyZzI0LCAKICAgICAgICBDYXN0ZXIgYXJnMjUsCiAgICAgICAgQ2FzdGVyIGFy ZzI2LCAKICAgICAgICBDYXN0ZXIgYXJnMjcKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAg ICAgICAgICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAg ICAgICAgICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAg ICAgIHZvaWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBh cmcyLCAKICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAg IENhc3RlciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcs IAogICAgICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2Fz dGVyIGFyZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAK ICAgICAgICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2Fz dGVyIGFyZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAK ICAgICAgICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2Fz dGVyIGFyZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIyLCAK ICAgICAgICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENhc3RlciBhcmcyNCwgCiAgICAgICAgQ2Fz dGVyIGFyZzI1LAogICAgICAgIENhc3RlciBhcmcyNiwgCiAgICAgICAgQ2FzdGVyIGFyZzI3LCAK ICAgICAgICBDYXN0ZXIgYXJnMjgKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAg ICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgY29uc3QgY2hhciAqaGVscCwgCiAgICAgICAgICAg ICAgICAgICAgRk9fTUVTU0FHRV9JRCBtZXNzYWdlSUQsIAogICAgICAgICAgICAgICAgICAgIHZv aWQgKmFyZ0Jhc2UsCiAgICAgICAgQ2FzdGVyIGFyZzEsIAogICAgICAgIENhc3RlciBhcmcyLCAK ICAgICAgICBDYXN0ZXIgYXJnMywgCiAgICAgICAgQ2FzdGVyIGFyZzQsIAogICAgICAgIENhc3Rl ciBhcmc1LCAKICAgICAgICBDYXN0ZXIgYXJnNiwgCiAgICAgICAgQ2FzdGVyIGFyZzcsIAogICAg ICAgIENhc3RlciBhcmc4LCAKICAgICAgICBDYXN0ZXIgYXJnOSwgCiAgICAgICAgQ2FzdGVyIGFy ZzEwLAogICAgICAgIENhc3RlciBhcmcxMSwgCiAgICAgICAgQ2FzdGVyIGFyZzEyLCAKICAgICAg ICBDYXN0ZXIgYXJnMTMsIAogICAgICAgIENhc3RlciBhcmcxNCwgCiAgICAgICAgQ2FzdGVyIGFy ZzE1LAogICAgICAgIENhc3RlciBhcmcxNiwgCiAgICAgICAgQ2FzdGVyIGFyZzE3LCAKICAgICAg ICBDYXN0ZXIgYXJnMTgsIAogICAgICAgIENhc3RlciBhcmcxOSwgCiAgICAgICAgQ2FzdGVyIGFy ZzIwLAogICAgICAgIENhc3RlciBhcmcyMSwgCiAgICAgICAgQ2FzdGVyIGFyZzIyLCAKICAgICAg ICBDYXN0ZXIgYXJnMjMsIAogICAgICAgIENhc3RlciBhcmcyNCwgCiAgICAgICAgQ2FzdGVyIGFy ZzI1LAogICAgICAgIENhc3RlciBhcmcyNiwgCiAgICAgICAgQ2FzdGVyIGFyZzI3LCAKICAgICAg ICBDYXN0ZXIgYXJnMjgsIAogICAgICAgIENhc3RlciBhcmcyOQogKTsKCnZvaWQgSFVfQWRkTWV0 aG9kICggCiAgICAgICAgICAgICAgICAgICAgRk9fT0JKRUNUICp0aGVDbGFzcywgCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kTmFtZSwKICAgICAgICBjb25zdCBjaGFyICpo ZWxwLCAKICAgICAgICAgICAgICAgICAgICBGT19NRVNTQUdFX0lEIG1lc3NhZ2VJRCwgCiAgICAg ICAgICAgICAgICAgICAgdm9pZCAqYXJnQmFzZSwKICAgICAgICBDYXN0ZXIgYXJnMSwgCiAgICAg ICAgQ2FzdGVyIGFyZzIsIAogICAgICAgIENhc3RlciBhcmczLCAKICAgICAgICBDYXN0ZXIgYXJn NCwgCiAgICAgICAgQ2FzdGVyIGFyZzUsIAogICAgICAgIENhc3RlciBhcmc2LCAKICAgICAgICBD YXN0ZXIgYXJnNywgCiAgICAgICAgQ2FzdGVyIGFyZzgsIAogICAgICAgIENhc3RlciBhcmc5LCAK ICAgICAgICBDYXN0ZXIgYXJnMTAsCiAgICAgICAgQ2FzdGVyIGFyZzExLCAKICAgICAgICBDYXN0 ZXIgYXJnMTIsIAogICAgICAgIENhc3RlciBhcmcxMywgCiAgICAgICAgQ2FzdGVyIGFyZzE0LCAK ICAgICAgICBDYXN0ZXIgYXJnMTUsCiAgICAgICAgQ2FzdGVyIGFyZzE2LCAKICAgICAgICBDYXN0 ZXIgYXJnMTcsIAogICAgICAgIENhc3RlciBhcmcxOCwgCiAgICAgICAgQ2FzdGVyIGFyZzE5LCAK ICAgICAgICBDYXN0ZXIgYXJnMjAsCiAgICAgICAgQ2FzdGVyIGFyZzIxLCAKICAgICAgICBDYXN0 ZXIgYXJnMjIsIAogICAgICAgIENhc3RlciBhcmcyMywgCiAgICAgICAgQ2FzdGVyIGFyZzI0LCAK ICAgICAgICBDYXN0ZXIgYXJnMjUsCiAgICAgICAgQ2FzdGVyIGFyZzI2LCAKICAgICAgICBDYXN0 ZXIgYXJnMjcsIAogICAgICAgIENhc3RlciBhcmcyOCwgCiAgICAgICAgQ2FzdGVyIGFyZzI5LCAK ICAgICAgICBDYXN0ZXIgYXJnMzAKICk7Cgp2b2lkIEhVX0FkZE1ldGhvZCAoIAogICAgICAgICAg ICAgICAgICAgIEZPX09CSkVDVCAqdGhlQ2xhc3MsIAogICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKm1ldGhvZE5hbWUsCiAgICAgICAgaW50ICgqZnVuYykoIEZPX09CSkVDVCAqLCBPX0xJ U1QgKiApLCAKICAgICAgICAgICAgICAgICAgICBPX0xJU1QgKm9MaXN0LCAKICAgICAgICAgICAg ICAgICAgICBpbnQgb0xpc3RTaXplLAogICAgICAgIGNvbnN0IGNoYXIgKipoZWxwIAogKTsKCgog CgpMaXN0PEZSQU5HRT4gSFVfUGFyc2VGcmFuZ2VzICggCiAgICAgICAgY29uc3QgVHdpbmUgJmZv byAKICk7CgoKIAoKCiAKCnZvaWQgSFVfQWRkRnVuY3Rpb24gKCAKICAgICAgICBjb25zdCBUd2lu ZSAmIGZ1bmNOYW1lLCAKICAgICAgICBUd2luZSAoKmZ1bmMpKCBMaXN0PFR3aW5lPiAmLCBIVV9Q YXJzZXJTdGF0ZSAmICksCiAgICAgICAgY29uc3QgVHdpbmUgJiBoZWxwU3RyaW5nIAogKTsKCnZv aWQgSFVfQWRkRnVuY3Rpb24gKCAKICAgICAgICBjb25zdCBUd2luZSAmIGZ1bmNOYW1lLCAKICAg ICAgICBIVV9WYWx1ZSAoKmZ1bmMpKCBMaXN0PEhVX1ZhbHVlPiwgSFVfUGFyc2VyU3RhdGUgJiAp LAogICAgICAgIGNvbnN0IFR3aW5lICYgaGVscFN0cmluZyAKICk7Cgp2b2lkIEhVX0FkZEZ1bmN0 aW9uT2ZDaGFuU3BlYyAoIAogICAgICAgIGNvbnN0IFR3aW5lICYgZnVuY05hbWUsIAogICAgICAg IFR3aW5lICgqZnVuYykoIExpc3Q8VHdpbmU+ICYsIEhVX1BhcnNlclN0YXRlICYgKSwKICAgICAg ICBjb25zdCBUd2luZSAmIGhlbHBTdHJpbmcgCiApOwoKdm9pZCBIVV9BZGRGdW5jdGlvbiAoIAog ICAgICAgIGNvbnN0IFR3aW5lICYgZnVuY05hbWUsIAogICAgICAgIEhVX1ZhbHVlICgqZnVuYyko IEhVX1ZhbHVlLCBIVV9QYXJzZXJTdGF0ZSAmICksCiAgICAgICAgY29uc3QgVHdpbmUgJiBoZWxw U3RyaW5nIAogKTsKCkJPT0xFQU4gSFVfRmluZEZ1bmN0aW9uICgKICAgICAgICAgIGNvbnN0IGNo YXIqIGFyZwogKTsKCgogCgoKIAoKCiAKCnZvaWQgSFVfQWRkSGVscCAoIAogICAgICAgICAgICAg ICAgICAgIGludCAoKmZ1bmMpKCBjb25zdCBjaGFyICosIEZJTEUgKiApIAogKTsKCgogCgoKIAoK Y2hhciAqSFVfQ2hlY2tGb3JTY3JpcHQgKCAKCQkJY29uc3QgY2hhciAqbmFtZSwgCgkJCWludCAm IGFyZ2MsIAoJCQljaGFyICoqYXJndiAKICk7Cgp2b2lkIEhVX0luaXQgKCAKCSAgICAgaW50IGFy Z2MsIAoJICAgICBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YgCiApOwoKdm9pZCBIVV9Jbml0ICgg CgkgICAgIGNvbnN0IGNoYXIgKiBwcm9ncmFtIAogKTsKCgogCgpUd2luZSBIVV9DdXJyZW50SW5w dXROYW1lICgpOwoKCiAKCnZvaWQgSFVfVW5SZWFkQ2hhciAoIAogICAgICAgICAgICAgICAgICAg IGNoYXIgYyAKICk7Cgp2b2lkIEhVX1Byb2Nlc3NLZXlFdmVudCAoCiAgICAgICAgICAgIHNob3J0 IGV2ZW50LAogICAgICAgICAgICBzaG9ydCB2YWx1ZQogKTsKClR3aW5lIEhVX0dldEludGVyYWN0 aXZlTGluZSAoCiAgICAgICAgSFVfUGFyc2VyU3RhdGUgJiBnZW5lcmljU3RhdGUKICk7CgoKIAoK CiAKCmludCBIVV9Qb2xsICgKICAgICAgICB2b2lkCiApOwoKVHdpbmUgSFVfR2V0QUxpbmUgKAog ICAgICAgIEhVX1BhcnNlclN0YXRlICYgdGhlU3RhdGUKICk7CgpUd2luZSBIVV9NYWluTG9vcCAo CiAgICAgICAgdm9pZAogKTsKClR3aW5lIEhVX1NvdXJjZUZpbGUgKCAKICAgICAgICBjb25zdCBj aGFyICAgICAgKmZpbGVOYW1lLAogICAgICAgIEhVX1BhcnNlclN0YXRlICAmIHRoZVN0YXRlCiAp OwoKCiAKCgogCgoKIAoKCiAKCnZvaWQgSFVfUHJvY2Vzc1hLZXlFdmVudCAoCiAgICAgICAgdm9p ZCAgICAgICAgKnhldmVudAogKTsKCgogCgoKIAoKdm9pZCBIVV9DbG9zZVBhZ2VyICgpIDsKCkZJ TEUgKkhVX09wZW5QYWdlciAoKSA7CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgp2b2lkIEhVX0J1 aWxkU0RDb25uZWN0aW9uICgKICAgICAgICBUd2luZSAgICAgICAgICAgKCpnZXRfbmFtZV9vZl9j bGFzcykoIHZvaWQgKmNsYXNzUHRyICksCiAgICAgICAgVHdpbmUgICAgICAgICAgICgqZ2V0X25h bWVfb2Zfb2JqZWN0KSggdm9pZCAqb2JqUHRyICksCiAgICAgICAgaW50ICAgICAgICAgICAgICgq Y3JlYXRlX29iamVjdCkoIHZvaWQgKmNsYXNzUHRyLCBjb25zdCBjaGFyICpuYW1lICksCiAgICAg ICAgTGlzdDx2b2lkICo+ICAgICgqZ2V0X29iamVjdHMpKCB2b2lkICpjbGFzc1B0ciwgY29uc3Qg Y2hhciAqbmFtZSApLAogICAgICAgIGludCAgICAgICAgICAgICAoKmRlc3Ryb3lfb2JqZWN0KSgg dm9pZCAqb2JqUHRyICksCiAgICAgICAgTGlzdDx2b2lkICo+ICAgICgqZ2V0X2NsYXNzX3BhcmVu dHMpKCB2b2lkICpjbGFzc1B0ciApLAogICAgICAgIHZvaWQgKiAgICAgICAgICAoKmdldF9jYWxs YWJsZV9vYmplY3QpKCB2b2lkICpvYmpQdHIsIHZvaWQgKmNsYXNzUHRyICkKICk7Cgp2b2lkIEhV X0FkZFNETWVzc2FnZSAoCiAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICp0aGVD bGFzcywKICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgKm5hbWUsCiAgICAgICAg Y29uc3QgY2hhciAgICAgICAgICAgICAgICAgICpoZWxwLAogICAgICAgIHZvaWQgICAgICAgICAg ICAgICAgICAgICAgICAqKCpmdW5jKSggdm9pZCAqLCAuLi4gKSwKICAgICAgICBjb25zdCBMaXN0 PHN0cnVjdCBTdHJ1Y3R1cmVEZXNjcmlwdGlvbkVudHJ5PiAgICAmc2QKICk7Cgp2b2lkIEhVX0Fk ZFNETWVzc2FnZSAoCiAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICp0aGVDbGFz cywKICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgKm5hbWUsCiAgICAgICAgY29u c3QgY2hhciAgICAgICAgICAgICAgICAgICpoZWxwLAogICAgICAgIHZvaWQgICAgICAgICAgICAg ICAgICAgICAgICAqKCpmdW5jKSggdm9pZCAqLCAuLi4gKSwKICAgICAgICBjb25zdCBMaXN0PHN0 cnVjdCBOYW1lZENvbnZlcnRlcj4gICAmc2QKICk7Cgp2b2lkIEhVX0FkZFNETWVzc2FnZSAoCiAg ICAgICAgdm9pZCAgICAgICAgICAgICp0aGVDbGFzcywKICAgICAgICBjb25zdCBjaGFyICAgICAg Km5hbWUsCiAgICAgICAgaW50ICAgICAgICAgICAgICgqcGFyc2UpKCB2b2lkICpvYmpQdHIsIE9f TElTVCAqbGlzdCApLAogICAgICAgIE9fTElTVCAgICAgICAgICAqbGlzdCwKICAgICAgICBpbnQg ICAgICAgICAgICAgbGlzdFNpemUsCiAgICAgICAgY29uc3QgY2hhciAgICAgICoqaGVscAogKTsK CgogCgoKIAoKdm9pZCBIVV9BdHRhY2hUb1RleHRXaWRnZXQgKAogICAgICAgIHZvaWQgKnZfYXBw X2NvbnRleHQsCiAgICAgICAgdm9pZCAqdl93aWRnZXQKICk7CgoKIAoKCiAKCgogCgoKIAoKdm9p ZCBIVV9QdXNoU2NvcGUgKAoJCSAgdm9pZAogKTsKCnZvaWQgSFVfUG9wU2NvcGUgKAoJCSB2b2lk CiApOwoKdm9pZCBIVV9BZGRWYXJpYWJsZSAoIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFR3 aW5lICYgbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgZG91YmxlICYgaVZhbCAKICk7Cgp2b2lk IEhVX0FkZFZhcmlhYmxlICggCiAgICAgICAgICAgICAgICAgICAgY29uc3QgVHdpbmUgJiBuYW1l LCAKICAgICAgICAgICAgICAgICAgICBmbG9hdCAmIGlWYWwgCiApOwoKdm9pZCBIVV9BZGRWYXJp YWJsZSAoIAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFR3aW5lICYgbmFtZSwgCiAgICAgICAg ICAgICAgICAgICAgaW50ICYgaVZhbCAKICk7Cgp2b2lkIEhVX0FkZFZhcmlhYmxlICggCiAgICAg ICAgICAgICAgICAgICAgY29uc3QgVHdpbmUgJiBuYW1lLCAKICAgICAgICAgICAgICAgICAgICBj aGFyICogY29uc3QgY1ZhbCAKICk7Cgp2b2lkIEhVX0FkZFZhcmlhYmxlICggCiAgICAgICAgICAg ICAgICAgICAgY29uc3QgVHdpbmUgJiBuYW1lLCAKICAgICAgICAgICAgICAgICAgICBUd2luZSAm IGNWYWwgCiApOwoKdm9pZCBIVV9TZXRWYXJpYWJsZSAoIAoJCSAgICBjb25zdCBUd2luZSAmIG5h bWUsIAoJCSAgICBjb25zdCBUd2luZSAmIHZhbHVlIAogKTsKCnZvaWQgSFVfU2V0VmFyaWFibGUg KAoJCSAgICBjb25zdCBjaGFyICAgICAgKm5hbWUsCgkJICAgIGNvbnN0IGNoYXIgICAgICAqdmFs dWUsCgkJICAgIGNvbnN0IExpc3Q8aW50PiAmYXJncwogKTsKCnZvaWQgSFVfVW5zZXRHbG9iYWxW YXJpYWJsZSAoCgkJCSAgICBUd2luZSBuYW1lCiApOwoKdm9pZCBIVV9VbnNldFZhcmlhYmxlICgg CgkJICAgICAgVHdpbmUgbmFtZSAKICk7Cgpjb25zdCBjaGFyICpIVV9GaW5kVmFyaWFibGUgKCAK CQkJICAgIGNvbnN0IFR3aW5lICYgbmFtZSAKICk7CgoKCgoKIyAyNDQgIi9zb2Z0d2FyZS90aGFs aWEvaC9odS5oIiAyCgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9odS5lIiAxCiAKCgoKZXh0ZXJu IGludCAgICAgICAgICBIVV9Eb250RXhwYW5kU2VxdWVuY2VzOwoKIAoKCgoKCmNvbnN0IGludCBI VV9Ob01lc3NhZ2VQYXNzZWQgPSAtMTIzNDU2NzsKCmV4dGVybiBpbnQgSFVfRXJyb3JDb3VudCwg SFVfV2FybmluZ0NvdW50OwoKZXh0ZXJuIGNoYXIgSFVfUHJlY2lzaW9uU3RyaW5nWzI1Nl07Cgpl eHRlcm4gdm9pZCAoICpIVV9PdXRwdXRGdW5jdGlvbiApKCBjb25zdCBjaGFyICpkYXRhLCBpbnQg c2l6ZSApOwpleHRlcm4gdm9pZCAoICpIVV9FcnJvckZ1bmN0aW9uICkoIGNvbnN0IGNoYXIgKmRh dGEsIGludCBzaXplICk7CmV4dGVybiBjaGFyICggKkhVX0lucHV0RnVuY3Rpb24gKSggdm9pZCAp OwoKZXh0ZXJuIEhVX1BhcnNlclN0YXRlIEhVX0RlZmF1bHRTdGF0ZTsKCmV4dGVybiBpbnQgKCAq SFVfSXNFdmVudEZhc3QgKSggdm9pZCAqZGlzcGxheSwgdm9pZCAqZXZlbnQsIHZvaWQgKndpbmRv dyApOwoKZXh0ZXJuIEhVX0F1ZGl0U3RyZWFtIEhVX0F1ZGl0LCBIVV9BdWRpdDI7CgpleHRlcm4g dm9pZCAoKkhVX1N0aWxsRXhlY3V0aW5nKSgpOwoKZXh0ZXJuIHZvaWQgKkhVX2RlZmF1bHRNaW5W YWx1ZVRhZywgKkhVX2RlZmF1bHRNYXhWYWx1ZVRhZzsKIyAyNDUgIi9zb2Z0d2FyZS90aGFsaWEv aC9odS5oIiAyCgoKIApleHRlcm4gVHdpbmUgSFVfU291cmNlRmlsZSggY29uc3QgY2hhciAqLCBI VV9QYXJzZXJTdGF0ZSAmID0gSFVfRGVmYXVsdFN0YXRlICk7CmV4dGVybiBMaXN0PEhVX0V4cHJl c3Npb24+IEhVX0V4cGFuZCggY29uc3QgVHdpbmUgJiwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSFVfUGFyc2VyU3RhdGUgJiA9IEhVX0RlZmF1bHRTdGF0ZSApOwpleHRlcm4gTGlz dDxIVV9FeHByZXNzaW9uPiBIVV9FeHBhbmRNYXRoKCBjb25zdCBUd2luZSAmLCAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIVV9QYXJzZXJTdGF0ZSAmID0gSFVfRGVmYXVsdFN0YXRl ICk7CmV4dGVybiBMaXN0PEhVX0V4cHJlc3Npb24+IEhVX0V4cGFuZFZhbHVlKCBjb25zdCBUd2lu ZSAmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVV9QYXJzZXJTdGF0ZSAmID0g SFVfRGVmYXVsdFN0YXRlICk7CmV4dGVybiBMaXN0PFR3aW5lPiBIVV9FdmFsdWF0ZSggTGlzdDxI VV9FeHByZXNzaW9uPiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFVfUGFyc2Vy U3RhdGUgJiA9IEhVX0RlZmF1bHRTdGF0ZSApOwpleHRlcm4gdm9pZCBIVV9FeGVjdXRlKCBMaXN0 PEhVX0V4cHJlc3Npb24+LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVV9QYXJz ZXJTdGF0ZSAmID0gSFVfRGVmYXVsdFN0YXRlICk7CmV4dGVybiB2b2lkIEhVX1JlQXR0YWNoVG9E cmF3aW5nQXJlYVdpZGdldCggdm9pZCogdl9hcHBfY29udGV4dCwKCQkJCQkgICAgdm9pZCogdl93 aWRnZXQsCgkJCQkJICAgIGJvb2wgaW5zdGFsbEZvY3VzSGFuZGxpbmcgPSBmYWxzZQoJCQkJCSAg ICApOwoKZXh0ZXJuIHZvaWQgSFVfQXR0YWNoVG9EcmF3aW5nQXJlYVdpZGdldCggdm9pZCogdl9h cHBfY29udGV4dCwKCQkJCQkgIHZvaWQqIHZfd2lkZ2V0LAoJCQkJCSAgYm9vbCBpbnN0YWxsRm9j dXNIYW5kbGluZyA9IGZhbHNlCgkJCQkJICApOwoKIyAyNSAibnJoeS9OUkhZX0FjY2Vzcy5jIiAy CgoKIyAxICJoL05SSFkuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIyAxICJo L25yaHlwcml2YXRlLmgiIDEKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvdmVjdG9yIiAxIDMK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs X2FsZ29iYXNlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCiMgMTAzICIvdXNy L2luY2x1ZGUvZysrLTIvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKICAgICAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgojIDE2MCAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9jb25maWcuaCIg MwoKCiMgMTc0ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAogCiMgMjEzICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2NvbmZp Zy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAzNiAiL3Vz ci9pbmNsdWRlL2crKy0yL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv ZysrLTIvc3RsX3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiB4 LCBjb25zdCBUJiB5KSB7CiAgcmV0dXJuICEoeCA9PSB5KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBUJiB4LCBjb25zdCBUJiB5KSB7CiAgcmV0dXJu IHkgPCB4Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25z dCBUJiB4LCBjb25zdCBUJiB5KSB7CiAgcmV0dXJuICEoeSA8IHgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgVD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB4LCBjb25zdCBUJiB5KSB7CiAg cmV0dXJuICEoeCA8IHkpOwp9CgogCgoKCiAKIAogCiMgMzkgIi91c3IvaW5jbHVkZS9nKystMi9z dGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9wYWlyLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz cyBUMSwgY2xhc3MgVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIFQxIGZpcnN0X3R5cGU7CiAg dHlwZWRlZiBUMiBzZWNvbmRfdHlwZTsKCiAgVDEgZmlyc3Q7CiAgVDIgc2Vjb25kOwogIHBhaXIo KSA6IGZpcnN0KFQxKCkpLCBzZWNvbmQoVDIoKSkge30KICBwYWlyKGNvbnN0IFQxJiBhLCBjb25z dCBUMiYgYikgOiBmaXJzdChhKSwgc2Vjb25kKGIpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVTEs IGNsYXNzIFUyPgogIHBhaXIoY29uc3QgcGFpcjxVMSwgVTI+JiBwKSA6IGZpcnN0KHAuZmlyc3Qp LCBzZWNvbmQocC5zZWNvbmQpIHt9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPFQxLCBUMj4mIHgsIGNvbnN0IHBhaXI8 VDEsIFQyPiYgeSkgeyAKICByZXR1cm4geC5maXJzdCA9PSB5LmZpcnN0ICYmIHguc2Vjb25kID09 IHkuc2Vjb25kOyAKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5lIGJvb2wg b3BlcmF0b3I8KGNvbnN0IHBhaXI8VDEsIFQyPiYgeCwgY29uc3QgcGFpcjxUMSwgVDI+JiB5KSB7 IAogIHJldHVybiB4LmZpcnN0IDwgeS5maXJzdCB8fCAoISh5LmZpcnN0IDwgeC5maXJzdCkgJiYg eC5zZWNvbmQgPCB5LnNlY29uZCk7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgpp bmxpbmUgcGFpcjxUMSwgVDI+IG1ha2VfcGFpcihjb25zdCBUMSYgeCwgY29uc3QgVDImIHkpIHsK ICByZXR1cm4gcGFpcjxUMSwgVDI+KHgsIHkpOwp9CgogCgoKCiAKIAogCiMgNDIgIi91c3IvaW5j bHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0y L3R5cGVfdHJhaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBfX2ZhbHNl X3R5cGUgewp9OwoKdGVtcGxhdGUgPGNsYXNzIHR5cGU+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsg CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmly c3Q7CiAgICAgICAgICAgICAgICAgICAgCgoKCgoKICAgIAoKCgoKCgoKCiAKCiAgIHR5cGVkZWYg X19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgogCiAKIAoKdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg X190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190 eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBl X3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf dHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3Qg X190eXBlX3RyYWl0czxUKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07 CgojIDIyNiAiL3Vzci9pbmNsdWRlL2crKy0yL3R5cGVfdHJhaXRzLmgiIDMKCgoKCgogCiAKIAoj IDQ1ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxICIvdXNy L2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9saW1p dHMuaCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGlu dXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgNDkgIi91c3IvaW5j bHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2Fs cGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoK CiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIv YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2Nj LWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMK CgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4 L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIv dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIv YWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog CgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsZ29i YXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2Nz LTIuOTEuNjYvaW5jbHVkZS9uZXcuaCIgMSAzCiAKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9h bHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvbmV3IiAxIDMKIAogCgoKCgoj cHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0 LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGli L2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5o IiAzCgojIDggIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42 Ni9pbmNsdWRlL25ldyIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxp bnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL2V4Y2VwdGlvbiIgMSAzCiAKIAoKCgoKI3ByYWdtYSBp bnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAiQysrIiB7CgoKCgoKY2xhc3MgZXhjZXB0aW9u IHsKcHVibGljOgogIGV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9 CiAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0ICgpIGNvbnN0Owp9OwoKY2xhc3MgYmFkX2V4Y2Vw dGlvbiA6IHB1YmxpYyBleGNlcHRpb24gewpwdWJsaWM6CiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0K ICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uICgpIHsgfQp9OwoKdHlwZWRlZiB2b2lkICgqdGVybWlu YXRlX2hhbmRsZXIpICgpOwp0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoK dGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSAodGVybWluYXRlX2hhbmRsZXIpOwp2b2lk IHRlcm1pbmF0ZSAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CnVuZXhwZWN0ZWRf aGFuZGxlciBzZXRfdW5leHBlY3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsKdm9pZCB1bmV4cGVj dGVkICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKYm9vbCB1bmNhdWdodF9leGNl cHRpb24gKCk7CgoKCgoKfSAgCgoKIyA5ICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1s aW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9uZXciIDIgMwoKCmV4dGVybiAiQysrIiB7CgoKCgoK ICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0 dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2Mi OyB9CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190 IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIg c2V0X25ld19oYW5kbGVyIChuZXdfaGFuZGxlcik7CgoKCgoKIAp2b2lkICpvcGVyYXRvciBuZXcg KHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNp emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQg KikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqKSB0aHJvdygpOwp2b2lk ICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2 b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93 KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190Jikg dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhy b3dfdCYpIHRocm93KCk7CgogCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lk ICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3Ig bmV3W10oc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9ICAK CgojIDYgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9p bmNsdWRlL25ldy5oIiAyIDMKCgoKCgoKCgojIDUyICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2Fs Z29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvaW9zdHJlYW0uaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2crKy0yL3N0cmVhbWJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiNwcmFnbWEgaW50ZXJmYWNlCgoKICAgCgoKCmV4dGVybiAiQyIgewoKfQogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3Ry ZWFtOyBjbGFzcyBzdHJlYW1idWY7CgogCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbW9m ZjsKdHlwZWRlZiBfX29mZjY0X3QgICBzdHJlYW1wb3M7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCAg IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAgIHN0cmVh bWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19m bXRmbGFncyBfZmxhZ3M7CiAgICB3Y2hhcl90ICAgX2ZpbGw7CiAgICBfX2lvc3RhdGUgX3N0YXRl OwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247CgogICAgdm9p ZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9pbmNsdWRlL2crKy0y L3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBpb3Mm IG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgogICAg dHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAg IHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBpbnQgc3RyZWFtc2l6ZTsKICAgIGVu dW0gaW9fc3RhdGUgewoJZ29vZGJpdCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAs CgliYWRiaXQgPSA0ICB9OwogICAgZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIg LAoJYXRlID0gNCAsCglhcHAgPSA4ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglu b3JlcGxhY2UgPSA2NCAsCgliaW4gPSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVt IHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vl a2RpcjsKICAgICAKICAgIGVudW0geyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9 IDA0ICwgaW50ZXJuYWw9IDAxMCAsCgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAw ICwKCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0g MDEwMDAgLCBzaG93cG9zPSAwMjAwMCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAw MTAwMDAgLAoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAg ICBlbnVtIHsgIAoJYmFzZWZpZWxkPWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlm aWMrZml4ZWQsCglhZGp1c3RmaWVsZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3 NyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0cmVhbWJ1Zi5oIiAzCgoKICAgIG9zdHJlYW0qIHRpZSgp IGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsg b3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KCiAgICAgCiAgICB3 Y2hhcl90ICAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9CiAgICB3Y2hhcl90ICAgZmls bCh3Y2hhcl90ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7 IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdz OyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFsKSB7CglmbXRmbGFncyBvbGRf dmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3ZhbDsgfQogICAgaW50 IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAgIGludCBwcmVjaXNp b24oaW50IG5ld3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lzaW9uOyBfcHJlY2lz aW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xkcDsgfQogICAgZm10ZmxhZ3Mg c2V0ZihmbXRmbGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3Mg fD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWws IGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3MgPSAo X2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10 ZmxhZ3MgdW5zZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7 CglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25z dCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0g X3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3df ZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsK CV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKCWlmIChfc3RhdGUgJiBf ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXQoaW9zdGF0ZSBmbGFn KSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFp bHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxh ZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBp bnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9CiAgICBpbnQgZW9mKCkgY29u c3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAgIGludCBmYWlsKCkgY29uc3Qg eyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7IH0KICAgIGludCBi YWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJpdDsgfQogICAgaW9zdGF0ZSBy ZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBvcGVyYXRvciB2b2lkKigpIGNv bnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7IH0KICAgIGludCBv cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAgIGlvc3RhdGUgZXhjZXB0aW9u cygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2b2lkIGV4Y2VwdGlvbnMoaW9z dGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJaWYgKF9zdGF0ZSAmIF9leGNl cHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0 IHsgcmV0dXJuIF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRidWYoc3RyZWFtYnVmICpfcykg ewogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0gX3M7IGNsZWFyICgp OyByZXR1cm4gX29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193aXRoX3N0ZGlvKGludCBvbik7 CiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0aF9zdGRpbygxKTsg fQogICAgc3RhdGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBzdGF0aWMgaW50IHhhbGxvYygp OwogICAgdm9pZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29yZChpbnQpIGNvbnN0OwogICAg bG9uZyYgaXdvcmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsKCgoKCgoKCgoKICAg ICAKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQogICAgfTsK CiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0cmVhbSog dGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUgdm9pZCBp bml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRlZiBpb3M6 OnNlZWtfZGlyIF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApjbGFzcyBzdHJlYW1tYXJrZXIg OiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZv aWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAg ICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBp bnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsK ICAgIGludCBkZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6IHB1YmxpYyBfSU9fRklMRSB7 ICAKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVhbTsKICAgIGZy aWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtlcjsKICAgIGNv bnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChfSU9fRklMRSop dGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xpc3RfYWxs OyAgCiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9jaGFpbjsgfQogICAgdm9pZCBf dW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hhciogZ3B0cigpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRf cHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX3B0cjsgfQog ICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8g X0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsg cmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g X0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAgeyByZXR1cm4g X2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlO30KICAgIGNo YXIqIGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7IH0KICAgIGNoYXIqIGVidWYo KSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50IGJsZW4oKSBjb25zdCB7IHJl dHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAgdm9pZCB4cHV0X2NoYXIoY2hh ciBjKSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQgeGZsYWdzKCkgeyByZXR1cm4g X2ZsYWdzIDsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFncyA7IF9mbGFn cyAgPSBmOyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYpIHsgX2ZsYWdzICB8 PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAgIHsgX2ZsYWdz ICA9IChfZmxhZ3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQogICAgdm9pZCBnYnVtcChpbnQg bikKICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZlX2Jhc2UrPW4pOihfSU9fcmVh ZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRlX3B0ciArPSBuOyB9 CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBhPTApOwogICAgdm9pZCBzZXRw KGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9iYXNlPV9JT193cml0ZV9wdHI9 cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNoYXIqIGViLCBjaGFyKiBnLCBj aGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkgX0lPX2ZyZWVfYmFja3VwX2Fy ZWEodGhpcyk7IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFkX3B0ciA9IGc7IF9J T19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1ZigpIHsgcmV0dXJuIF9zaG9ydGJ1 ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA7IH0KICAg ICAKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9iYXNl IDogX0lPX3JlYWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9i YWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgIAogICAgY2hhciAq QmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2UgOiBfSU9fc2F2ZV9i YXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2JhY2t1cF9iYXNlOyB9CiAgICAg CiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfZW5kIDog X0lPX3NhdmVfZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2U7 IH0KICAgIGNoYXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9CiAgICBpbnQgaGF2 ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9fbnVsbCA7IH0KICAgIGludCBo YXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251bGwgOyB9CiAgICB2b2lkIGZy ZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsgIAogICAgaW50IHB1 dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAgICBpbnQgc3dpdGNoX3RvX2dl dF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7CiAgcHVibGljOgogICAg c3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVm ZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAgICB2aXJ0dWFsIGludCBvdmVy ZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7ICAKICAg IHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7 CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6 ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBu KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGlu dCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla3Bvcyhz dHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoKICAgIHN0cmVhbXBv cyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1vZGU9aW9zOjppbnxp b3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9 CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6 aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlzLCBwb3MsIG1vZGUp OyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2Rl PWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBwb3Ms IGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0 YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogICAgdmlydHVh bCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmss IGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdl dGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsg fQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAw OyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVs c2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChp KSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxs b2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2Ug cmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJh c2UoKSA9PSBfX251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwog ICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9 CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRl X2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBu KSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwg c3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJl YW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRo aXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwog ICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBzaXpl X3QgICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50 IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1 cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICAp LT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93 ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlz ICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRf cHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0 dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZv aWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9w dHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251Y192YV9saXN0ICBh cCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAg Li4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAp OwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoKCgoKICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFs IHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1 YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwg aW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCgogICAg dmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW1idWUodm9pZCAqKTsK Cn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6 CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90 OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBm ZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0 YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25z dCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlv czo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVy ZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQg aXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29u c3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBj bG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1w b3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91 dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAg c3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVh bXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5j KCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2so KSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygp ID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVy biBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciog YnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3Ry ZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25z dCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAK ICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5p dChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6 Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUg PSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6 OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Mo c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlu bGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICBpZiAoX2FycmF5cykgZGVsZXRlIFtdIF9hcnJheXM7 Cn0KfSAgCgojIDMxICIvdXNyL2luY2x1ZGUvZysrLTIvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJu ICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19t YW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBl ZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhp c3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVy biBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3Ry ZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAog ICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVh bShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkg ewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgp OyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYg KGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJl YW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMp OyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywg c3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMs IHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30K ICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAg ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0 ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25z dCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVh bSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAg ICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZv cm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVh bSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBj aGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0 b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9z dHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFy KilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyBy ZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8 PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0 cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAg X19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0 ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAg b3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9 CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0 b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikg eyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChk b3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJh dG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg bik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgq ZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygq ZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJl YW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAg IApwcm90ZWN0ZWQ6CiAgICBzaXplX3QgICBfZ2NvdW50OwoKICAgIGludCBfc2tpcF93cygpOwog IHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVh bWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciog cHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWdu ZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgo Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAg aXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0K ICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu Jyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh ciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0p OyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpICB7IHJldHVybiBnZXQoKGNoYXIm KWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk ZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAg IGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9 ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBp c3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQo dW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNo YXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFt c2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFt JiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFy KilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9 ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwog ICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7CglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWls Yml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAw IHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFu ZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxz ZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsg c2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUp IF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tp cF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngxKCkgeyAgCglp ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg OwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7 CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0 KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEpIDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1 Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsK CQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90 ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBu PTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vl a2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK ICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7Cglp ZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6 YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29k KCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsK ICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFy Z3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBv cGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXAp OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJh dG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAg aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4o KGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1 cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsK ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVh bSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3Bl cmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNo b3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu c2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0 cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUm KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9w ZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0 aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlv c3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBp b3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBf X251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVh bSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYp OwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNz aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAo cmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVh bSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYp OwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNz aWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAo cmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4g X0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dp dGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpl eHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2Nr KG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoK c3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsg aS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9 CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6 OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5z ZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0g IAoKCiMgNTMgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAi L3Vzci9pbmNsdWRlL2crKy0yL3N0bF9pdGVyYXRvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg b3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVi bGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307Cgp0 ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7 CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl ZiBUICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIERpc3RhbmNlICAgICAg ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBUKiAgICAgICAgICAgICAgICAgcG9pbnRl cjsKICB0eXBlZGVmIFQmICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0 cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0 ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg ICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJl bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIERpc3RhbmNlPiBzdHJ1Y3QgZm9yd2Fy ZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIFQgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBEaXN0YW5jZSAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBUKiAgICAg ICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgVCYgICAgICAgICAgICAgICAgICAgcmVm ZXJlbmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZT4gc3RydWN0IGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgZGlmZmVy ZW5jZV90eXBlOwogIHR5cGVkZWYgVCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsK ICB0eXBlZGVmIFQmICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7CiAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgVCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIFQmICAgICAg ICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCiMgOTMgIi91c3IvaW5jbHVkZS9nKyst Mi9zdGxfaXRlcmF0b3IuaCIgMwoKCgoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgpzdHJ1Y3Qg aXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yOjppdGVyYXRvcl9j YXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yOjp2 YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3I6 OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIEl0 ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgSXRl cmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBU PgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPFQqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIFQgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAg ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBUKiAgICAgICAgICAgICAgICAgICAgICAgICBw b2ludGVyOwogIHR5cGVkZWYgVCYgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgVCo+IHsK ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgVCAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVm IHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNv bnN0IFQqICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBUJiAgICAg ICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+Cmlu bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y eQppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBJdGVyYXRvciYpIHsKICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IGNhdGVnb3J5Owog IHJldHVybiBjYXRlZ29yeSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3Rh bmNlX3R5cGUoY29uc3QgSXRlcmF0b3ImKSB7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRl cmF0b3I+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IEl0ZXJhdG9yJikgewogIHJldHVy biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90 eXBlKj4oMCk7Cn0KCiMgMjI2ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMK Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2 b2lkIF9fZGlzdGFuY2UoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBE aXN0YW5jZSYgbiwgCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7 CiAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpIHsgKytmaXJzdDsgKytuOyB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBSYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIF9f ZGlzdGFuY2UoUmFuZG9tQWNjZXNzSXRlcmF0b3IgZmlyc3QsIFJhbmRvbUFjY2Vzc0l0ZXJhdG9y IGxhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIERpc3RhbmNlJiBuLCByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZykgewogIG4gKz0gbGFzdCAtIGZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg SW5wdXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKElucHV0 SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwgRGlzdGFuY2UmIG4pIHsKICBfX2Rp c3RhbmNlKGZpcnN0LCBsYXN0LCBuLCBpdGVyYXRvcl9jYXRlZ29yeShmaXJzdCkpOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgppbmxpbmUgaXRlcmF0b3JfdHJhaXRzPElucHV0 SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShJbnB1dEl0ZXJhdG9yIGZpcnN0 LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yX3Ry YWl0czxJbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIG4gPSAwOwogIHdoaWxlIChmaXJz dCAhPSBsYXN0KSB7CiAgICArK2ZpcnN0OyArK247CiAgfQogIHJldHVybiBuOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSBpdGVyYXRvcl90cmFpdHM8UmFu ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShSYW5kb21BY2Nl c3NJdGVyYXRvciBmaXJzdCwgUmFuZG9tQWNjZXNzSXRlcmF0b3IgbGFzdCwKICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBsYXN0IC0gZmlyc3Q7Cn0KCnRl bXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgppbmxpbmUgaXRlcmF0b3JfdHJhaXRzPElucHV0 SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoSW5wdXRJdGVyYXRvciBmaXJzdCwg SW5wdXRJdGVyYXRvciBsYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 SW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IGNhdGVnb3J5OwogIHJldHVybiBfX2Rp c3RhbmNlKGZpcnN0LCBsYXN0LCBjYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5w dXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShJbnB1dEl0 ZXJhdG9yJiBpLCBEaXN0YW5jZSBuLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAobi0t KSArK2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFz cyBEaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKEJpZGlyZWN0aW9uYWxJdGVyYXRvciYg aSwgRGlzdGFuY2UgbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykgewogIGlmIChuID49IDApCiAgICB3aGlsZSAobi0tKSArK2k7CiAgZWxzZQogICAg d2hpbGUgKG4rKykgLS1pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKFJhbmRvbUFjY2Vzc0l0 ZXJhdG9yJiBpLCBEaXN0YW5jZSBuLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnKSB7CiAgaSArPSBuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVy YXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoSW5wdXRJdGVyYXRvciYg aSwgRGlzdGFuY2UgbikgewogIF9fYWR2YW5jZShpLCBuLCBpdGVyYXRvcl9jYXRlZ29yeShpKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y IHsKcHJvdGVjdGVkOgogIENvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBv dXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAg ICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlw ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNl cnRfaXRlcmF0b3IoQ29udGFpbmVyJiB4KSA6IGNvbnRhaW5lcigmeCkge30KICBiYWNrX2luc2Vy dF9pdGVyYXRvcjxDb250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBDb250YWlu ZXI6OnZhbHVlX3R5cGUmIHZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2sodmFsdWUp OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+ JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPENv bnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0 ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoK IyAzMzcgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxj bGFzcyBDb250YWluZXI+CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+IGJh Y2tfaW5zZXJ0ZXIoQ29udGFpbmVyJiB4KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y PENvbnRhaW5lcj4oeCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CmNsYXNzIGZyb250 X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBDb250YWluZXIqIGNvbnRhaW5lcjsKcHVi bGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg ICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4 cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihDb250YWluZXImIHgpIDogY29udGFpbmVyKCZ4 KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+JgogIG9wZXJhdG9yPShjb25z dCB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUmIHZhbHVlKSB7IAogICAgY29udGFpbmVy LT5wdXNoX2Zyb250KHZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJv bnRfaW5zZXJ0X2l0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp czsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+JiBvcGVyYXRvcisrKGludCkg eyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgMzc1ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJh dG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yPENvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoQ29udGFpbmVyJiB4KSB7CiAgcmV0 dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxDb250YWluZXI+KHgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgQ29udGFp bmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJs aWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5 cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAg ICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg IHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaW5z ZXJ0X2l0ZXJhdG9yKENvbnRhaW5lciYgeCwgdHlwZW5hbWUgQ29udGFpbmVyOjppdGVyYXRvciBp KSAKICAgIDogY29udGFpbmVyKCZ4KSwgaXRlcihpKSB7fQogIGluc2VydF9pdGVyYXRvcjxDb250 YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUm IHZhbHVlKSB7IAogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIHZhbHVlKTsKICAg ICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPENvbnRhaW5l cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPENvbnRh aW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxD b250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDE2ICIv dXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29u dGFpbmVyLCBjbGFzcyBJdGVyYXRvcj4KaW5saW5lIGluc2VydF9pdGVyYXRvcjxDb250YWluZXI+ IGluc2VydGVyKENvbnRhaW5lciYgeCwgSXRlcmF0b3IgaSkgewogIHR5cGVkZWYgdHlwZW5hbWUg Q29udGFpbmVyOjppdGVyYXRvciBpdGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8Q29udGFp bmVyPih4LCBpdGVyKGkpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0 b3IsIGNsYXNzIFQsIGNsYXNzIFJlZmVyZW5jZSA9IFQmLCAKICAgICAgICAgIGNsYXNzIERpc3Rh bmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv ciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8QmlkaXJlY3Rpb25h bEl0ZXJhdG9yLCBULCBSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGlzdGFuY2U+IHNlbGY7CnByb3RlY3RlZDoKICBCaWRpcmVjdGlvbmFsSXRlcmF0 b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWx1ZV90eXBlOwogIHR5cGVkZWYgRGlzdGFuY2UgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgVCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0 eXBlZGVmIFJlZmVyZW5jZSAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9i aWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9u YWxfaXRlcmF0b3IoQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIHgpCiAgICA6IGN1cnJlbnQoeCkge30K ICBCaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0K ICBSZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgQmlkaXJlY3Rpb25hbEl0ZXJhdG9y IHRtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRv ci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgc2VsZiYgb3BlcmF0b3Ir KygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgc2VsZiBvcGVyYXRv cisrKGludCkgewogICAgc2VsZiB0bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVy biB0bXA7CiAgfQogIHNlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1 cm4gKnRoaXM7CiAgfQogIHNlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIHNlbGYgdG1wID0gKnRo aXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gdG1wOwogIH0KfTsKCiMgNTAxICIvdXNyL2lu Y2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgQmlkaXJlY3Rp b25hbEl0ZXJhdG9yLCBjbGFzcyBULCBjbGFzcyBSZWZlcmVuY2UsCiAgICAgICAgICBjbGFzcyBE aXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcjxCaWRpcmVjdGlvbmFsSXRlcmF0b3IsIFQsIFJlZmVyZW5jZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0YW5jZT4mIHgsIAogICAg Y29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPEJpZGlyZWN0aW9uYWxJdGVyYXRv ciwgVCwgUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERpc3RhbmNlPiYgeSkgewogIHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsKfQoKCgogCiAK IAogCiAKCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciAK ewpwcm90ZWN0ZWQ6CiAgSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAg IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0 ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPEl0ZXJh dG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxJdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0 eXBlZGVmIEl0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PEl0ZXJhdG9yPiBzZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxp Y2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSB4KSA6IGN1cnJlbnQoeCkge30KCiAg cmV2ZXJzZV9pdGVyYXRvcihjb25zdCBzZWxmJiB4KSA6IGN1cnJlbnQoeC5jdXJyZW50KSB7fQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2Vf aXRlcmF0b3I8SXRlcj4mIHgpIDogY3VycmVudCh4LmN1cnJlbnQpIHt9CgogICAgCiAgaXRlcmF0 b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVy YXRvciooKSBjb25zdCB7CiAgICBJdGVyYXRvciB0bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICot LXRtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0 b3IqKCkpOyB9CgoKICBzZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBzZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBzZWxmIHRtcCA9ICp0 aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIHRtcDsKICB9CiAgc2VsZiYgb3BlcmF0b3It LSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgc2VsZiBvcGVyYXRv ci0tKGludCkgewogICAgc2VsZiB0bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVy biB0bXA7CiAgfQoKICBzZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgbikgY29uc3Qgewog ICAgcmV0dXJuIHNlbGYoY3VycmVudCAtIG4pOwogIH0KICBzZWxmJiBvcGVyYXRvcis9KGRpZmZl cmVuY2VfdHlwZSBuKSB7CiAgICBjdXJyZW50IC09IG47CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IHNlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdCB7CiAgICByZXR1cm4gc2Vs ZihjdXJyZW50ICsgbik7CiAgfQogIHNlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIG4p IHsKICAgIGN1cnJlbnQgKz0gbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9w ZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBuKTsg fSAgCn07IAogCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPEl0ZXJhdG9yPiYgeCwgCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxJdGVyYXRvcj4mIHkpIHsKICByZXR1cm4geC5i YXNlKCkgPT0geS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lIGJv b2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB4LCAKICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB5KSB7CiAg cmV0dXJuIHkuYmFzZSgpIDwgeC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4K aW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB4LCAKICAgICAg ICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8SXRlcmF0b3I+JiB5KSB7CiAgcmV0dXJuIHkuYmFz ZSgpIC0geC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KaW5saW5lIHJldmVy c2VfaXRlcmF0b3I8SXRlcmF0b3I+IApvcGVyYXRvcisocmV2ZXJzZV9pdGVyYXRvcjxJdGVyYXRv cj46OmRpZmZlcmVuY2VfdHlwZSBuLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxJ dGVyYXRvcj4mIHgpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxJdGVyYXRvcj4oeC5iYXNl KCkgLSBuKTsKfQoKIyA3MzggIi91c3IvaW5jbHVkZS9nKystMi9zdGxfaXRlcmF0b3IuaCIgMwoK CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZSA9IHB0cmRpZmZfdD4gCmNsYXNzIGlz dHJlYW1faXRlcmF0b3IgewogIGZyaWVuZCBib29sCiAgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IGlz dHJlYW1faXRlcmF0b3I8VCwgRGlzdGFuY2U+JiB4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8VCwgRGlzdGFuY2U+JiB5KTsKcHJvdGVj dGVkOgogIGlzdHJlYW0qIHN0cmVhbTsKICBUIHZhbHVlOwogIGJvb2wgZW5kX21hcmtlcjsKICB2 b2lkIHJlYWQoKSB7CiAgICBlbmRfbWFya2VyID0gKCpzdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwog ICAgaWYgKGVuZF9tYXJrZXIpICpzdHJlYW0gPj4gdmFsdWU7CiAgICBlbmRfbWFya2VyID0gKCpz dHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGljOgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgVCAgICAgICAgICAgICAgICAgIHZh bHVlX3R5cGU7CiAgdHlwZWRlZiBEaXN0YW5jZSAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgY29uc3QgVCogICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBUJiAg ICAgICAgICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBzdHJlYW0oJmNpbiks IGVuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBzKSA6IHN0 cmVhbSgmcykgeyByZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1 cm4gdmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy YXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxULCBEaXN0YW5jZT4mIG9wZXJhdG9yKyso KSB7IAogICAgcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRv cjxULCBEaXN0YW5jZT4gb3BlcmF0b3IrKyhpbnQpICB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yPFQs IERpc3RhbmNlPiB0bXAgPSAqdGhpczsKICAgIHJlYWQoKTsKICAgIHJldHVybiB0bXA7CiAgfQp9 OwoKIyA3OTQgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRl IDxjbGFzcyBULCBjbGFzcyBEaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp c3RyZWFtX2l0ZXJhdG9yPFQsIERpc3RhbmNlPiYgeCwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBpc3RyZWFtX2l0ZXJhdG9yPFQsIERpc3RhbmNlPiYgeSkgewogIHJldHVybiB4LnN0cmVh bSA9PSB5LnN0cmVhbSAmJiB4LmVuZF9tYXJrZXIgPT0geS5lbmRfbWFya2VyIHx8CiAgICAgICAg IHguZW5kX21hcmtlciA9PSBmYWxzZSAmJiB5LmVuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBs YXRlIDxjbGFzcyBUPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIG9zdHJl YW0qIHN0cmVhbTsKICBjb25zdCBjaGFyKiBzdHJpbmc7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1 dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJl YW0mIHMpIDogc3RyZWFtKCZzKSwgc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3Ry ZWFtJiBzLCBjb25zdCBjaGFyKiBjKSA6IHN0cmVhbSgmcyksIHN0cmluZyhjKSAge30KICBvc3Ry ZWFtX2l0ZXJhdG9yPFQ+JiBvcGVyYXRvcj0oY29uc3QgVCYgdmFsdWUpIHsgCiAgICAqc3RyZWFt IDw8IHZhbHVlOwogICAgaWYgKHN0cmluZykgKnN0cmVhbSA8PCBzdHJpbmc7CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0 aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz OyB9IAogIG9zdHJlYW1faXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp czsgfSAKfTsKCiMgODM1ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2l0ZXJhdG9yLmgiIDMKCgog CgoKCiAKIAogCiMgNTYgIi91c3IvaW5jbHVkZS9nKystMi9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoK CiAKCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IxLCBjbGFzcyBGb3J3YXJkSXRlcmF0 b3IyLCBjbGFzcyBUPgppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChGb3J3YXJkSXRlcmF0b3IxIGEs IEZvcndhcmRJdGVyYXRvcjIgYiwgVCopIHsKICBUIHRtcCA9ICphOwogICphID0gKmI7CiAgKmIg PSB0bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IxLCBjbGFzcyBGb3J3YXJk SXRlcmF0b3IyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoRm9yd2FyZEl0ZXJhdG9yMSBhLCBGb3J3 YXJkSXRlcmF0b3IyIGIpIHsKICBfX2l0ZXJfc3dhcChhLCBiLCB2YWx1ZV90eXBlKGEpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkIHN3YXAoVCYgYSwgVCYgYikgewogIFQgdG1w ID0gYTsKICBhID0gYjsKICBiID0gdG1wOwp9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxp bmUgY29uc3QgVCYgbWluKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsKICByZXR1cm4gYiA8IGEg PyBiIDogYTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBjb25zdCBUJiBtYXgoY29uc3Qg VCYgYSwgY29uc3QgVCYgYikgewogIHJldHVybiAgYSA8IGIgPyBiIDogYTsKfQoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgQ29tcGFyZT4KaW5saW5lIGNvbnN0IFQmIG1pbihjb25zdCBUJiBh LCBjb25zdCBUJiBiLCBDb21wYXJlIGNvbXApIHsKICByZXR1cm4gY29tcChiLCBhKSA/IGIgOiBh Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQ29tcGFyZT4KaW5saW5lIGNvbnN0IFQmIG1h eChjb25zdCBUJiBhLCBjb25zdCBUJiBiLCBDb21wYXJlIGNvbXApIHsKICByZXR1cm4gY29tcChh LCBiKSA/IGIgOiBhOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0 cHV0SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJdGVyYXRvciBfX2NvcHkoSW5wdXRJdGVyYXRvciBm aXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dEl0ZXJhdG9yIHJlc3VsdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBmaXJz dCAhPSBsYXN0OyArK3Jlc3VsdCwgKytmaXJzdCkKICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgcmV0 dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIFJhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz cyBPdXRwdXRJdGVyYXRvciwgY2xhc3MgRGlzdGFuY2U+CmlubGluZSBPdXRwdXRJdGVyYXRvcgpf X2NvcHlfZChSYW5kb21BY2Nlc3NJdGVyYXRvciBmaXJzdCwgUmFuZG9tQWNjZXNzSXRlcmF0b3Ig bGFzdCwKICAgICAgICAgT3V0cHV0SXRlcmF0b3IgcmVzdWx0LCBEaXN0YW5jZSopCnsKICBmb3Ig KERpc3RhbmNlIG4gPSBsYXN0IC0gZmlyc3Q7IG4gPiAwOyAtLW4sICsrcmVzdWx0LCArK2ZpcnN0 KSAKICAgICpyZXN1bHQgPSAqZmlyc3Q7CiAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNs YXNzIFJhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5saW5lIE91 dHB1dEl0ZXJhdG9yIApfX2NvcHkoUmFuZG9tQWNjZXNzSXRlcmF0b3IgZmlyc3QsIFJhbmRvbUFj Y2Vzc0l0ZXJhdG9yIGxhc3QsCiAgICAgICBPdXRwdXRJdGVyYXRvciByZXN1bHQsIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgcmV0dXJuIF9fY29weV9kKGZpcnN0LCBsYXN0LCByZXN1 bHQsIGRpc3RhbmNlX3R5cGUoZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0 b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoCnsKICBPdXRw dXRJdGVyYXRvciBvcGVyYXRvcigpKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIHJlc3VsdCkg ewogICAgcmV0dXJuIF9fY29weShmaXJzdCwgbGFzdCwgcmVzdWx0LCBpdGVyYXRvcl9jYXRlZ29y eShmaXJzdCkpOwogIH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBUKiBfX2NvcHlf dChjb25zdCBUKiBmaXJzdCwgY29uc3QgVCogbGFzdCwgVCogcmVzdWx0LCBfX3RydWVfdHlwZSkg ewogIG1lbW1vdmUocmVzdWx0LCBmaXJzdCwgc2l6ZW9mKFQpICogKGxhc3QgLSBmaXJzdCkpOwog IHJldHVybiByZXN1bHQgKyAobGFzdCAtIGZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu bGluZSBUKiBfX2NvcHlfdChjb25zdCBUKiBmaXJzdCwgY29uc3QgVCogbGFzdCwgVCogcmVzdWx0 LCBfX2ZhbHNlX3R5cGUpIHsKICByZXR1cm4gX19jb3B5X2QoZmlyc3QsIGxhc3QsIHJlc3VsdCwg KHB0cmRpZmZfdCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IF9fY29weV9kaXNw YXRjaDxUKiwgVCo+CnsKICBUKiBvcGVyYXRvcigpKFQqIGZpcnN0LCBUKiBsYXN0LCBUKiByZXN1 bHQpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUPjo6aGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvciB0OyAKICAgIHJldHVybiBfX2NvcHlfdChmaXJzdCwgbGFzdCwg cmVzdWx0LCB0KCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgX19jb3B5X2Rp c3BhdGNoPGNvbnN0IFQqLCBUKj4KewogIFQqIG9wZXJhdG9yKCkoY29uc3QgVCogZmlyc3QsIGNv bnN0IFQqIGxhc3QsIFQqIHJlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPFQ+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIHQ7IAogICAgcmV0dXJuIF9f Y29weV90KGZpcnN0LCBsYXN0LCByZXN1bHQsIHQoKSk7CiAgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xh c3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJdGVy YXRvciBjb3B5KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0SXRlcmF0b3IgcmVzdWx0KQp7CiAgcmV0dXJuIF9f Y29weV9kaXNwYXRjaDxJbnB1dEl0ZXJhdG9yLE91dHB1dEl0ZXJhdG9yPigpKGZpcnN0LCBsYXN0 LCByZXN1bHQpOwp9CgppbmxpbmUgY2hhciogY29weShjb25zdCBjaGFyKiBmaXJzdCwgY29uc3Qg Y2hhciogbGFzdCwgY2hhciogcmVzdWx0KSB7CiAgbWVtbW92ZShyZXN1bHQsIGZpcnN0LCBsYXN0 IC0gZmlyc3QpOwogIHJldHVybiByZXN1bHQgKyAobGFzdCAtIGZpcnN0KTsKfQoKaW5saW5lIHdj aGFyX3QqIGNvcHkoY29uc3Qgd2NoYXJfdCogZmlyc3QsIGNvbnN0IHdjaGFyX3QqIGxhc3QsCiAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIHJlc3VsdCkgewogIG1lbW1vdmUocmVzdWx0LCBm aXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKGxhc3QgLSBmaXJzdCkpOwogIHJldHVybiByZXN1bHQg KyAobGFzdCAtIGZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEJpZGlyZWN0aW9uYWxJdGVyYXRv cjEsIGNsYXNzIEJpZGlyZWN0aW9uYWxJdGVyYXRvcjI+CmlubGluZSBCaWRpcmVjdGlvbmFsSXRl cmF0b3IyIF9fY29weV9iYWNrd2FyZChCaWRpcmVjdGlvbmFsSXRlcmF0b3IxIGZpcnN0LCAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlyZWN0aW9uYWxJ dGVyYXRvcjEgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCaWRpcmVjdGlvbmFsSXRlcmF0b3IyIHJlc3VsdCkgewogIHdoaWxlIChmaXJzdCAhPSBs YXN0KSAqLS1yZXN1bHQgPSAqLS1sYXN0OwogIHJldHVybiByZXN1bHQ7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSwgY2xhc3MgQmlkaXJlY3Rpb25hbEl0ZXJhdG9y Mj4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgQmlkaXJlY3Rpb25hbEl0ZXJh dG9yMiBvcGVyYXRvcigpKEJpZGlyZWN0aW9uYWxJdGVyYXRvcjEgZmlyc3QsIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpcmVjdGlvbmFsSXRlcmF0b3IxIGxhc3QsIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpcmVjdGlvbmFsSXRlcmF0b3Iy IHJlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChmaXJzdCwgbGFzdCwgcmVzdWx0 KTsKICB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgVCogX19jb3B5X2JhY2t3YXJk X3QoY29uc3QgVCogZmlyc3QsIGNvbnN0IFQqIGxhc3QsIFQqIHJlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgY29uc3QgcHRyZGlmZl90IE4gPSBsYXN0 IC0gZmlyc3Q7CiAgbWVtbW92ZShyZXN1bHQgLSBOLCBmaXJzdCwgc2l6ZW9mKFQpICogTik7CiAg cmV0dXJuIHJlc3VsdCAtIE47Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgVCogX19jb3B5 X2JhY2t3YXJkX3QoY29uc3QgVCogZmlyc3QsIGNvbnN0IFQqIGxhc3QsIFQqIHJlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogIHJldHVybiBfX2NvcHlf YmFja3dhcmQoZmlyc3QsIGxhc3QsIHJlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1 Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPFQqLCBUKj4KewogIFQqIG9wZXJhdG9yKCkoVCog Zmlyc3QsIFQqIGxhc3QsIFQqIHJlc3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf dHJhaXRzPFQ+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIHQ7IAogICAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF90KGZpcnN0LCBsYXN0LCByZXN1bHQsIHQoKSk7CiAgfQp9OwoKdGVt cGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgVCos IFQqPgp7CiAgVCogb3BlcmF0b3IoKShjb25zdCBUKiBmaXJzdCwgY29uc3QgVCogbGFzdCwgVCog cmVzdWx0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8VD46Omhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgdDsgCiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX3Qo Zmlyc3QsIGxhc3QsIHJlc3VsdCwgdCgpKTsKICB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBCaWRp cmVjdGlvbmFsSXRlcmF0b3IxLCBjbGFzcyBCaWRpcmVjdGlvbmFsSXRlcmF0b3IyPgppbmxpbmUg QmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBjb3B5X2JhY2t3YXJkKEJpZGlyZWN0aW9uYWxJdGVyYXRv cjEgZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp ZGlyZWN0aW9uYWxJdGVyYXRvcjEgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiByZXN1bHQpIHsKICByZXR1cm4g X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPEJpZGlyZWN0aW9uYWxJdGVyYXRvcjEsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMj4oKShmaXJz dCwgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBj bGFzcyBTaXplLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KcGFpcjxJbnB1dEl0ZXJhdG9yLCBPdXRw dXRJdGVyYXRvcj4gX19jb3B5X24oSW5wdXRJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0SXRlcmF0b3Ig cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IGNvdW50ID4gMDsgLS1jb3VudCwgKytmaXJzdCwg KytyZXN1bHQpCiAgICAqcmVzdWx0ID0gKmZpcnN0OwogIHJldHVybiBwYWlyPElucHV0SXRlcmF0 b3IsIE91dHB1dEl0ZXJhdG9yPihmaXJzdCwgcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIFJh bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBTaXplLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5s aW5lIHBhaXI8UmFuZG9tQWNjZXNzSXRlcmF0b3IsIE91dHB1dEl0ZXJhdG9yPgpfX2NvcHlfbihS YW5kb21BY2Nlc3NJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAgICAgICAgT3V0cHV0SXRl cmF0b3IgcmVzdWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIFJh bmRvbUFjY2Vzc0l0ZXJhdG9yIGxhc3QgPSBmaXJzdCArIGNvdW50OwogIHJldHVybiBwYWlyPFJh bmRvbUFjY2Vzc0l0ZXJhdG9yLCBPdXRwdXRJdGVyYXRvcj4obGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoZmlyc3QsIGxhc3QsIHJl c3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgU2l6ZSwgY2xh c3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZSBwYWlyPElucHV0SXRlcmF0b3IsIE91dHB1dEl0ZXJh dG9yPgpjb3B5X24oSW5wdXRJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAgICAgIE91dHB1 dEl0ZXJhdG9yIHJlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihmaXJzdCwgY291bnQsIHJlc3Vs dCwgaXRlcmF0b3JfY2F0ZWdvcnkoZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJ dGVyYXRvciwgY2xhc3MgVD4Kdm9pZCBmaWxsKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2Fy ZEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbHVlKSB7CiAgZm9yICggOyBmaXJzdCAhPSBsYXN0 OyArK2ZpcnN0KQogICAgKmZpcnN0ID0gdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBPdXRwdXRJ dGVyYXRvciwgY2xhc3MgU2l6ZSwgY2xhc3MgVD4KT3V0cHV0SXRlcmF0b3IgZmlsbF9uKE91dHB1 dEl0ZXJhdG9yIGZpcnN0LCBTaXplIG4sIGNvbnN0IFQmIHZhbHVlKSB7CiAgZm9yICggOyBuID4g MDsgLS1uLCArK2ZpcnN0KQogICAgKmZpcnN0ID0gdmFsdWU7CiAgcmV0dXJuIGZpcnN0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNzIElucHV0SXRlcmF0b3IyPgpwYWly PElucHV0SXRlcmF0b3IxLCBJbnB1dEl0ZXJhdG9yMj4gbWlzbWF0Y2goSW5wdXRJdGVyYXRvcjEg Zmlyc3QxLAoJCQkJCSAgICAgIElucHV0SXRlcmF0b3IxIGxhc3QxLAoJCQkJCSAgICAgIElucHV0 SXRlcmF0b3IyIGZpcnN0MikgewogIHdoaWxlIChmaXJzdDEgIT0gbGFzdDEgJiYgKmZpcnN0MSA9 PSAqZmlyc3QyKSB7CiAgICArK2ZpcnN0MTsKICAgICsrZmlyc3QyOwogIH0KICByZXR1cm4gcGFp cjxJbnB1dEl0ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjI+KGZpcnN0MSwgZmlyc3QyKTsKfQoKdGVt cGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFzcyBJbnB1dEl0ZXJhdG9yMiwgY2xhc3Mg QmluYXJ5UHJlZGljYXRlPgpwYWlyPElucHV0SXRlcmF0b3IxLCBJbnB1dEl0ZXJhdG9yMj4gbWlz bWF0Y2goSW5wdXRJdGVyYXRvcjEgZmlyc3QxLAoJCQkJCSAgICAgIElucHV0SXRlcmF0b3IxIGxh c3QxLAoJCQkJCSAgICAgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwKCQkJCQkgICAgICBCaW5hcnlQ cmVkaWNhdGUgYmluYXJ5X3ByZWQpIHsKICB3aGlsZSAoZmlyc3QxICE9IGxhc3QxICYmIGJpbmFy eV9wcmVkKCpmaXJzdDEsICpmaXJzdDIpKSB7CiAgICArK2ZpcnN0MTsKICAgICsrZmlyc3QyOwog IH0KICByZXR1cm4gcGFpcjxJbnB1dEl0ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjI+KGZpcnN0MSwg Zmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFzcyBJbnB1dEl0 ZXJhdG9yMj4KaW5saW5lIGJvb2wgZXF1YWwoSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0 ZXJhdG9yMSBsYXN0MSwKCQkgIElucHV0SXRlcmF0b3IyIGZpcnN0MikgewogIGZvciAoIDsgZmly c3QxICE9IGxhc3QxOyArK2ZpcnN0MSwgKytmaXJzdDIpCiAgICBpZiAoKmZpcnN0MSAhPSAqZmly c3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFz cyBJbnB1dEl0ZXJhdG9yMSwgY2xhc3MgSW5wdXRJdGVyYXRvcjIsIGNsYXNzIEJpbmFyeVByZWRp Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJh dG9yMSBsYXN0MSwKCQkgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwgQmluYXJ5UHJlZGljYXRlIGJp bmFyeV9wcmVkKSB7CiAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDE7ICsrZmlyc3QxLCArK2ZpcnN0 MikKICAgIGlmICghYmluYXJ5X3ByZWQoKmZpcnN0MSwgKmZpcnN0MikpCiAgICAgIHJldHVybiBm YWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBj bGFzcyBJbnB1dEl0ZXJhdG9yMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShJbnB1dEl0 ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLAoJCQkgICAgIElucHV0SXRlcmF0 b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIpIHsKICBmb3IgKCA7IGZpcnN0MSAhPSBs YXN0MSAmJiBmaXJzdDIgIT0gbGFzdDI7ICsrZmlyc3QxLCArK2ZpcnN0MikgewogICAgaWYgKCpm aXJzdDEgPCAqZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqZmlyc3QyIDwgKmZp cnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gZmlyc3QxID09IGxhc3QxICYm IGZpcnN0MiAhPSBsYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFz cyBJbnB1dEl0ZXJhdG9yMiwgY2xhc3MgQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29t cGFyZShJbnB1dEl0ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLAoJCQkgICAg IElucHV0SXRlcmF0b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIsCgkJCSAgICAgQ29t cGFyZSBjb21wKSB7CiAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDEgJiYgZmlyc3QyICE9IGxhc3Qy OyArK2ZpcnN0MSwgKytmaXJzdDIpIHsKICAgIGlmIChjb21wKCpmaXJzdDEsICpmaXJzdDIpKQog ICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChjb21wKCpmaXJzdDIsICpmaXJzdDEpKQogICAgICBy ZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBmaXJzdDEgPT0gbGFzdDEgJiYgZmlyc3QyICE9IGxh c3QyOwp9CgppbmxpbmUgYm9vbCAKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWdu ZWQgY2hhciogZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyKiBsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsYXN0 MikKewogIGNvbnN0IHNpemVfdCBsZW4xID0gbGFzdDEgLSBmaXJzdDE7CiAgY29uc3Qgc2l6ZV90 IGxlbjIgPSBsYXN0MiAtIGZpcnN0MjsKICBjb25zdCBpbnQgcmVzdWx0ID0gbWVtY21wKGZpcnN0 MSwgZmlyc3QyLCBtaW4obGVuMSwgbGVuMikpOwogIHJldHVybiByZXN1bHQgIT0gMCA/IHJlc3Vs dCA8IDAgOiBsZW4xIDwgbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBh cmUoY29uc3QgY2hhciogZmlyc3QxLCBjb25zdCBjaGFyKiBsYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlyc3QyLCBjb25zdCBjaGFyKiBsYXN0 MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFy KikgZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk IGNoYXIqKSBsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp Z25lZCBjaGFyKikgZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u c3Qgc2lnbmVkIGNoYXIqKSBsYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0 ZXJhdG9yMSwgY2xhc3MgSW5wdXRJdGVyYXRvcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFy ZV8zd2F5KElucHV0SXRlcmF0b3IxIGZpcnN0MSwgSW5wdXRJdGVyYXRvcjEgbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwgSW5wdXRJ dGVyYXRvcjIgbGFzdDIpCnsKICB3aGlsZSAoZmlyc3QxICE9IGxhc3QxICYmIGZpcnN0MiAhPSBs YXN0MikgewogICAgaWYgKCpmaXJzdDEgPCAqZmlyc3QyKSByZXR1cm4gLTE7CiAgICBpZiAoKmZp cnN0MiA8ICpmaXJzdDEpIHJldHVybiAxOwogICAgKytmaXJzdDE7ICsrZmlyc3QyOwogIH0KICBp ZiAoZmlyc3QyID09IGxhc3QyKSB7CiAgICByZXR1cm4gIShmaXJzdDEgPT0gbGFzdDEpOwogIH0g ZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50CmxleGljb2dyYXBoaWNhbF9j b21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogZmlyc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGxhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGZpcnN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsYXN0MikKewogIGNvbnN0IHB0cmRp ZmZfdCBsZW4xID0gbGFzdDEgLSBmaXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IGxlbjIgPSBsYXN0 MiAtIGZpcnN0MjsKICBjb25zdCBpbnQgcmVzdWx0ID0gbWVtY21wKGZpcnN0MSwgZmlyc3QyLCBt aW4obGVuMSwgbGVuMikpOwogIHJldHVybiByZXN1bHQgIT0gMCA/IHJlc3VsdCA6IChsZW4xID09 IGxlbjIgPyAwIDogKGxlbjEgPCBsZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQgbGV4aWNv Z3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBmaXJzdDEsIGNvbnN0IGNoYXIqIGxh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog Zmlyc3QyLCBjb25zdCBjaGFyKiBsYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv bXBhcmVfM3dheSgKCQkJCShjb25zdCBzaWduZWQgY2hhciopIGZpcnN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBsYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBmaXJzdDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgbGFzdDIpOwoK CgoKCgp9CgogCgoKCiAKIAogCiMgMzAgIi91c3IvaW5jbHVkZS9nKystMi92ZWN0b3IiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv bGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3MtMi45MS42Ni9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvYWxwaGEtcmVkaGF0LWxpbnV4L2VnY3Mt Mi45MS42Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDU2ICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs X2FsbG9jLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCiAKCgoK CiMgNTYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJu IHZvaWQgX19hc3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sCgkJCQlfX2Nv bnN0IGNoYXIgKl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQlfX2NvbnN0IGNo YXIgKl9fZnVuY3Rpb24pICB0aHJvdyAoKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAgKGludCBfX2Vycm51 bSwKCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJCSAgICAgICB1bnNpZ25lZCBp bnQgX19saW5lLAoJCQkJICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgIHRocm93ICgp ICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Cgp9IAoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU5ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsbG9j LmgiIDIgMwoKCgoKCgoKCgoKCiAgICAgCiAgICAgCiAgICAgCiMgMSAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMSAzCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvc2NoZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgogCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBz Y2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7IAoKIAoKZXh0ZXJuIGludCBjbG9uZSAg KGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCgkJICAgICAg IGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgIHRocm93ICgpICA7CgoKfSAKCgoKCgoKIApzdHJ1 Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMzIg Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiBpbnQg X19zY2hlZF9zZXRwYXJhbSAgKF9fcGlkX3QgX19waWQsCgkJCQkgIF9fY29uc3Qgc3RydWN0IHNj aGVkX3BhcmFtICpfX3BhcmFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJh bSAgKF9fcGlkX3QgX19waWQsCgkJCQlfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJh bSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJhbSAgKF9fcGlkX3Qg X19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CmV4dGVybiBp bnQgc2NoZWRfZ2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f cGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVyICAo X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAoJCQkJICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVk dWxlciAgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJCSAgICBfX2NvbnN0IHN0cnVj dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hl ZF9nZXRzY2hlZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBz Y2hlZF9nZXRzY2hlZHVsZXIgIChfX3BpZF90IF9fcGlkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu IGludCBfX3NjaGVkX3lpZWxkICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRf eWllbGQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlv cml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVk X2dldF9wcmlvcml0eV9tYXggIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwoKIApleHRl cm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRobSkgIHRocm93 ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgKGludCBfX2FsZ29yaXRo bSkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgIChf X3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgIHRocm93ICgpICA7CmV4dGVybiBp bnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVj ICpfX3QpICB0aHJvdyAoKSAgOwoKfSAKCgojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy IDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl dC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz ZXQuaCIgMwoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgoj IDMzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYg X19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKIyAzNTIgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoK Cn0gCgoKIyAyNCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK CgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCgoKIyA3MyAiL3Vzci9pbmNs dWRlL2JpdHMvc2NoZWQuaCIgMwoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1 czsgICAgICAgICAgICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgICAgICAgICAgIAp9OwoKCiAK dHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoK CiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9s aWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0 c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNr YWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0 aHJlYWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0 bG9jayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9 IHB0aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0 aHJlYWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsK CgogCiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAg ICAKICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBf X21fb3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBz dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoK IAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRy X3Q7CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNiAiL3Vzci9pbmNsdWRl L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0 aHJlYWRfdDsKCgojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKZXh0ZXJuICJD IiB7IAoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFC TEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhF UklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVB RF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBU SFJFQURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhS RUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAKCgoKCgoKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NF U1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgoKCgoKCgoKCgoKIAoK c3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAgKHZv aWQgKikgIDsJICAgCiAgdm9pZCAqX19hcmc7CQkJCSAgIAogIGludCBfX2NhbmNlbHR5cGU7CQkJ ICAgCiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7ICAKfTsKCiAKCmVu dW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoK fTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FT WU5DSFJPTk9VUwoKfTsKCgoKIAoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgIChwdGhy ZWFkX3QgKl9fdGhyZWFkLAoJCQkJX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ dm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAoJCQkJdm9pZCAqX19hcmcpICB0aHJv dyAoKSAgOwoKIApleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAgKHZvaWQpICB0aHJvdyAo KSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgIChwdGhyZWFkX3QgX190aHJlYWQxLCBw dGhyZWFkX3QgX190aHJlYWQyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgcHRocmVhZF9l eGl0ICAodm9pZCAqX19yZXR2YWwpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0 dXJuX18pKTsKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAgKHB0aHJlYWRfdCBfX3RoLCB2 b2lkICoqX190aHJlYWRfcmV0dXJuKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX2RldGFjaCAgKHB0aHJlYWRfdCBfX3RoKSAgdGhyb3cgKCkgIDsKCgogCgogCgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfaW5pdCAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpICB0aHJvdyAo KSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95ICAocHRocmVhZF9hdHRyX3Qg Kl9fYXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFj aHN0YXRlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX2RldGFjaHN0 YXRlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3Rh dGUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAgICBpbnQgKl9fZGV0 YWNoc3RhdGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hl ZHBhcmFtICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgICAgX19jb25zdCBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9nZXRzY2hlZHBhcmFtICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJ CQkJCSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCgkJCQkJICAgICBpbnQgX19wb2xpY3kpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwKCQkJCQkgICAgIGludCAqX19wb2xpY3kpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ CSAgICAgIGludCBfX2luaGVyaXQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9nZXRpbmhlcml0c2NoZWQgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJ CQkJICAgICAgaW50ICpfX2luaGVyaXQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9zZXRzY29wZSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKSAg dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkgICAgICAgaW50ICpfX3Njb3BlKSAgdGhyb3cg KCkgIDsKCiMgMjIzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKIAoKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ CSAgIHZvaWQgKl9fc3RhY2thZGRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfZ2V0c3RhY2thZGRyICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJ CSAgIHZvaWQgKipfX3N0YWNrYWRkcikgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0c3RhY2tzaXplICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICBz aXplX3QgX19zdGFja3NpemUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzdGFja3NpemUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAg c2l6ZV90ICpfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7CgogCgogCgpleHRlcm4gaW50IHB0aHJl YWRfc2V0c2NoZWRwYXJhbSAgKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGlj eSwKCQkJCSAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93 ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtICAocHRocmVhZF90IF9f dGFyZ2V0X3RocmVhZCwKCQkJCSAgICAgICBpbnQgKl9fcG9saWN5LAoJCQkJICAgICAgIHN0cnVj dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgoKCgoKCgoKCiAKCiAKCmV4dGVy biBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCgkJ CQkgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cikgIHRocm93ICgp ICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90ICpfX211 dGV4LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpICB0 aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95ICAocHRocmVh ZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 X2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRl cm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4 KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgIChwdGhyZWFk X211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9t dXRleF9sb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJu IGludCBwdGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJv dyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgIChwdGhyZWFkX211 dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5s b2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKCgogCgogCgpleHRl cm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f YXR0cikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19w dGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAg dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVh ZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiMgMzE1ICIvdXNyL2luY2x1ZGUv cHRocmVhZC5oIiAzCgoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgIChwdGhy ZWFkX2NvbmRfdCAqX19jb25kLAoJCQkJICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9f Y29uZF9hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJv eSAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0 aHJlYWRfY29uZF9zaWduYWwgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgdGhyb3cgKCkgIDsK CiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0ICAocHRocmVhZF9jb25kX3QgKl9f Y29uZCkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0ICAocHRo cmVhZF9jb25kX3QgKl9fY29uZCwKCQkJCSAgIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgIHRo cm93ICgpICA7CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAgKHB0aHJl YWRfY29uZF90ICpfX2NvbmQsCgkJCQkJcHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJCQkJCV9f Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpICB0aHJvdyAoKSAgOwoKIAoKIApleHRl cm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRy KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgIChw dGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgoKIyA0MDggIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9j cmVhdGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1 bmN0aW9uKSAodm9pZCAqKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl YXRlICAocHRocmVhZF9rZXlfdCAqX19rZXksCgkJCQkgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rp b24pICh2b2lkICopKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxl dGUgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3B0 aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICAgIF9fY29u c3Qgdm9pZCAqX19wb2ludGVyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNw ZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSwKCQkJCSAgICAgX19jb25zdCB2b2lkICpfX3Bv aW50ZXIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNpZmlj ICAocHRocmVhZF9rZXlfdCBfX2tleSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkICpwdGhyZWFk X2dldHNwZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSkgIHRocm93ICgpICA7CgoKIAoKIAoK CgpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlICAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250 cm9sLAoJCQkJdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAgOwpleHRl cm4gaW50IHB0aHJlYWRfb25jZSAgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKCQkJ ICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKCiAKCiAK CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAgKGludCBfX3N0YXRlLCBpbnQgKl9f b2xkc3RhdGUpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5 cGUgIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgIHRocm93ICgpICA7CgogCmV4dGVybiBp bnQgcHRocmVhZF9jYW5jZWwgIChwdGhyZWFkX3QgX190aHJlYWQpICB0aHJvdyAoKSAgOwoKIAoK CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCiAK CgoKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAgKHN0cnVjdCBfcHRo cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCgkJCQkJdm9pZCAoKl9fcm91dGluZSkgKHZv aWQgKiksCgkJCQkJdm9pZCAqX19hcmcpICB0aHJvdyAoKSAgOwoKIAoKCgoKCmV4dGVybiB2b2lk IF9wdGhyZWFkX2NsZWFudXBfcG9wICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpf X2J1ZmZlciwKCQkJCSAgICAgICBpbnQgX19leGVjdXRlKSAgdGhyb3cgKCkgIDsKCiAKCgojIDUx NCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z aWd0aHJlYWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCmV4dGVybiBp bnQgcHRocmVhZF9zaWdtYXNrICAoaW50IF9faG93LCBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fbmV3 bWFzaywKCQkJCSBfX3NpZ3NldF90ICpfX29sZG1hc2spICB0aHJvdyAoKSAgOwoKIApleHRlcm4g aW50IHB0aHJlYWRfa2lsbCAgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pICB0aHJv dyAoKSAgOwoKCiMgNTE3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKIAoKIAoKCgoK CgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICAodm9pZCAoKl9fcHJlcGFyZSkgKHZv aWQpLAoJCQkJICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJCSAgdm9pZCAoKl9fY2hpbGQp ICh2b2lkKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgICh2b2lkICgq X19wcmVwYXJlKSAodm9pZCksCgkJCQl2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJCXZvaWQg KCpfX2NoaWxkKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiB2b2lkIHB0aHJlYWRf a2lsbF9vdGhlcl90aHJlYWRzX25wICAodm9pZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gdm9p ZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwoKfSAKCgojIDczICIv dXNyL2luY2x1ZGUvZysrLTIvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgOTAgIi91c3IvaW5j bHVkZS9nKystMi9zdGxfYWxsb2MuaCIgMwoKIyAxMDggIi91c3IvaW5jbHVkZS9nKystMi9zdGxf YWxsb2MuaCIgMwoKCgoKCgoKCgogCgoKCgoKIAogCgoKCgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5z dD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCnN0YXRpYyB2b2lk ICpvb21fbWFsbG9jKHNpemVfdCk7CgpzdGF0aWMgdm9pZCAqb29tX3JlYWxsb2Modm9pZCAqLCBz aXplX3QpOwoKCiAgICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciko KTsKCgpwdWJsaWM6CgpzdGF0aWMgdm9pZCAqIGFsbG9jYXRlKHNpemVfdCBuKQp7CiAgICB2b2lk ICpyZXN1bHQgPSBtYWxsb2Mobik7CiAgICBpZiAoMCA9PSByZXN1bHQpIHJlc3VsdCA9IG9vbV9t YWxsb2Mobik7CiAgICByZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv aWQgKnAsIHNpemVfdCAgKQp7CiAgICBmcmVlKHApOwp9CgpzdGF0aWMgdm9pZCAqIHJlYWxsb2Nh dGUodm9pZCAqcCwgc2l6ZV90ICAsIHNpemVfdCBuZXdfc3opCnsKICAgIHZvaWQgKiByZXN1bHQg PSByZWFsbG9jKHAsIG5ld19zeik7CiAgICBpZiAoMCA9PSByZXN1bHQpIHJlc3VsdCA9IG9vbV9y ZWFsbG9jKHAsIG5ld19zeik7CiAgICByZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgdm9pZCAoKiBz ZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKmYpKCkpKSgpCnsKICAgIHZvaWQgKCogb2xkKSgpID0g X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxl ciA9IGY7CiAgICByZXR1cm4ob2xkKTsKfQoKfTsKCiAKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CnZv aWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o YW5kbGVyKSgpID0gMDsKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CnZvaWQgKiBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxpbnN0Pjo6b29tX21hbGxvYyhzaXplX3QgbikKewogICAgdm9pZCAoKiBteV9t YWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQgKnJlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAg ICAgbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAg ICBpZiAoMCA9PSBteV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8 PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAg ICAgcmVzdWx0ID0gbWFsbG9jKG4pOwogICAgICAgIGlmIChyZXN1bHQpIHJldHVybihyZXN1bHQp OwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IGluc3Q+CnZvaWQgKiBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxpbnN0Pjo6b29tX3JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCnsKICAgIHZvaWQgKCog bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkICpyZXN1bHQ7CgogICAgZm9yICg7Oykgewog ICAgICAgIG15X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAg ICAgICAgaWYgKDAgPT0gbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAib3V0IG9mIG1lbW9y eSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKm15X21hbGxvY19oYW5kbGVyKSgpOwog ICAgICAgIHJlc3VsdCA9IHJlYWxsb2MocCwgbik7CiAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJu KHJlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFs bG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgQWxsb2M+CmNsYXNzIHNpbXBsZV9h bGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgVCAqYWxsb2NhdGUoc2l6ZV90IG4pCiAgICAgICAg ICAgICAgICB7IHJldHVybiAwID09IG4/IDAgOiAoVCopIEFsbG9jOjphbGxvY2F0ZShuICogc2l6 ZW9mIChUKSk7IH0KICAgIHN0YXRpYyBUICphbGxvY2F0ZSh2b2lkKQogICAgICAgICAgICAgICAg eyByZXR1cm4gKFQqKSBBbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChUKSk7IH0KICAgIHN0YXRpYyB2 b2lkIGRlYWxsb2NhdGUoVCAqcCwgc2l6ZV90IG4pCiAgICAgICAgICAgICAgICB7IGlmICgwICE9 IG4pIEFsbG9jOjpkZWFsbG9jYXRlKHAsIG4gKiBzaXplb2YgKFQpKTsgfQogICAgc3RhdGljIHZv aWQgZGVhbGxvY2F0ZShUICpwKQogICAgICAgICAgICAgICAgeyBBbGxvYzo6ZGVhbGxvY2F0ZShw LCBzaXplb2YgKFQpKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBBbGxvYz4KY2xh c3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCmVudW0ge2V4dHJhID0gOH07ICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6 CgpzdGF0aWMgdm9pZCAqIGFsbG9jYXRlKHNpemVfdCBuKQp7CiAgICBjaGFyICpyZXN1bHQgPSAo Y2hhciAqKUFsbG9jOjphbGxvY2F0ZShuICsgZXh0cmEpOwogICAgKihzaXplX3QgKilyZXN1bHQg PSBuOwogICAgcmV0dXJuIHJlc3VsdCArIGV4dHJhOwp9CgpzdGF0aWMgdm9pZCBkZWFsbG9jYXRl KHZvaWQgKnAsIHNpemVfdCBuKQp7CiAgICBjaGFyICogcmVhbF9wID0gKGNoYXIgKilwIC0gZXh0 cmE7CiAgICAoKHZvaWQpICgoICooc2l6ZV90ICopcmVhbF9wID09IG4gKSA/IDAgOgkoX19hc3Nl cnRfZmFpbCAoIiooc2l6ZV90ICopcmVhbF9wID09IG4iICwJIi91c3IvaW5jbHVkZS9nKystMi9z dGxfYWxsb2MuaCIsIDI1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIEFsbG9j OjpkZWFsbG9jYXRlKHJlYWxfcCwgbiArIGV4dHJhKTsKfQoKc3RhdGljIHZvaWQgKiByZWFsbG9j YXRlKHZvaWQgKnAsIHNpemVfdCBvbGRfc3osIHNpemVfdCBuZXdfc3opCnsKICAgIGNoYXIgKiBy ZWFsX3AgPSAoY2hhciAqKXAgLSBleHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QgKilyZWFs X3AgPT0gb2xkX3N6ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCAqKXJlYWxfcCA9 PSBvbGRfc3oiICwJIi91c3IvaW5jbHVkZS9nKystMi9zdGxfYWxsb2MuaCIsIDI2MywgX19QUkVU VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIGNoYXIgKiByZXN1bHQgPSAoY2hhciAqKQogICAg ICAgICAgICAgICAgICBBbGxvYzo6cmVhbGxvY2F0ZShyZWFsX3AsIG9sZF9zeiArIGV4dHJhLCBu ZXdfc3ogKyBleHRyYSk7CiAgICAqKHNpemVfdCAqKXJlc3VsdCA9IG5ld19zejsKICAgIHJldHVy biByZXN1bHQgKyBleHRyYTsKfQoKCn07CgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp bnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CiAgIAog ICAKCiAgICBlbnVtIHtfX0FMSUdOID0gOH07CiAgICBlbnVtIHtfX01BWF9CWVRFUyA9IDEyOH07 CiAgICBlbnVtIHtfX05GUkVFTElTVFMgPSBfX01BWF9CWVRFUy9fX0FMSUdOfTsKCiAgc3RhdGlj IHNpemVfdCBST1VORF9VUChzaXplX3QgYnl0ZXMpIHsKICAgICAgICByZXR1cm4gKCgoYnl0ZXMp ICsgX19BTElHTi0xKSAmIH4oX19BTElHTiAtIDEpKTsKICB9CnByaXZhdGUgOgogIHVuaW9uIG9i aiB7CiAgICAgICAgdW5pb24gb2JqICogZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBjbGll bnRfZGF0YVsxXTsgICAgIAogIH07CnByaXZhdGU6CgoKCgogICAgc3RhdGljIG9iaiAqIHZvbGF0 aWxlICBmcmVlX2xpc3RbX19ORlJFRUxJU1RTXTsgCgogIHN0YXRpYyAgc2l6ZV90IEZSRUVMSVNU X0lOREVYKHNpemVfdCBieXRlcykgewogICAgICAgIHJldHVybiAoKChieXRlcykgKyBfX0FMSUdO LTEpL19fQUxJR04gLSAxKTsKICB9CgogICAKICBzdGF0aWMgdm9pZCAqcmVmaWxsKHNpemVfdCBu KTsKICAgCiAgIAogIHN0YXRpYyBjaGFyICpjaHVua19hbGxvYyhzaXplX3Qgc2l6ZSwgaW50ICZu b2Jqcyk7CgogICAKICBzdGF0aWMgY2hhciAqc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciAqZW5k X2ZyZWU7CiAgc3RhdGljIHNpemVfdCBoZWFwX3NpemU7CgoKCgoKCgoKICAgIHN0YXRpYyBwdGhy ZWFkX211dGV4X3QgX19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCiMgMzc4ICIvdXNyL2luY2x1ZGUv ZysrLTIvc3RsX2FsbG9jLmgiIDMKCgogICAgY2xhc3MgbG9jayB7CiAgICAgICAgcHVibGljOgog ICAgICAgICAgICBsb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfX25v ZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgICAgICAgICB+bG9jaygpIHsgaWYgKHRocmVhZHMp IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgfTsK ICAgIGZyaWVuZCBjbGFzcyBsb2NrOwoKcHVibGljOgoKICAgCiAgc3RhdGljIHZvaWQgKiBhbGxv Y2F0ZShzaXplX3QgbikKICB7CiAgICBvYmogKiB2b2xhdGlsZSAgKiBteV9mcmVlX2xpc3Q7CiAg ICBvYmogKiAgIHJlc3VsdDsKCiAgICBpZiAobiA+IChzaXplX3QpIF9fTUFYX0JZVEVTKSB7CiAg ICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUobikpOwogICAgfQogICAgbXlfZnJl ZV9saXN0ID0gZnJlZV9saXN0ICsgRlJFRUxJU1RfSU5ERVgobik7CiAgICAgCiAgICAgCiAgICAg CgogICAgICAgICAKICAgICAgICBsb2NrIGxvY2tfaW5zdGFuY2U7CgogICAgcmVzdWx0ID0gKm15 X2ZyZWVfbGlzdDsKICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAgIHZvaWQgKnIgPSByZWZp bGwoUk9VTkRfVVAobikpOwogICAgICAgIHJldHVybiByOwogICAgfQogICAgKm15X2ZyZWVfbGlz dCA9IHJlc3VsdCAtPiBmcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAocmVzdWx0KTsKICB9OwoK ICAgCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkICpwLCBzaXplX3QgbikKICB7CiAgICBv YmogKnEgPSAob2JqICopcDsKICAgIG9iaiAqIHZvbGF0aWxlICAqIG15X2ZyZWVfbGlzdDsKCiAg ICBpZiAobiA+IChzaXplX3QpIF9fTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2FsbG9jOjpk ZWFsbG9jYXRlKHAsIG4pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG15X2ZyZWVfbGlzdCA9 IGZyZWVfbGlzdCArIEZSRUVMSVNUX0lOREVYKG4pOwogICAgIAoKICAgICAgICAgCiAgICAgICAg bG9jayBsb2NrX2luc3RhbmNlOwoKICAgIHEgLT4gZnJlZV9saXN0X2xpbmsgPSAqbXlfZnJlZV9s aXN0OwogICAgKm15X2ZyZWVfbGlzdCA9IHE7CiAgICAgCiAgfQoKICBzdGF0aWMgdm9pZCAqIHJl YWxsb2NhdGUodm9pZCAqcCwgc2l6ZV90IG9sZF9zeiwgc2l6ZV90IG5ld19zeik7Cgp9IDsKCnR5 cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPCB0cnVlICwgMD4gYWxsb2M7CnR5cGVkZWYg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoK CgogCiAKIAogCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjaGFyKgpfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OmNodW5rX2FsbG9jKHNpemVfdCBzaXpl LCBpbnQmIG5vYmpzKQp7CiAgICBjaGFyICogcmVzdWx0OwogICAgc2l6ZV90IHRvdGFsX2J5dGVz ID0gc2l6ZSAqIG5vYmpzOwogICAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBlbmRfZnJlZSAtIHN0YXJ0 X2ZyZWU7CgogICAgaWYgKGJ5dGVzX2xlZnQgPj0gdG90YWxfYnl0ZXMpIHsKICAgICAgICByZXN1 bHQgPSBzdGFydF9mcmVlOwogICAgICAgIHN0YXJ0X2ZyZWUgKz0gdG90YWxfYnl0ZXM7CiAgICAg ICAgcmV0dXJuKHJlc3VsdCk7CiAgICB9IGVsc2UgaWYgKGJ5dGVzX2xlZnQgPj0gc2l6ZSkgewog ICAgICAgIG5vYmpzID0gYnl0ZXNfbGVmdC9zaXplOwogICAgICAgIHRvdGFsX2J5dGVzID0gc2l6 ZSAqIG5vYmpzOwogICAgICAgIHJlc3VsdCA9IHN0YXJ0X2ZyZWU7CiAgICAgICAgc3RhcnRfZnJl ZSArPSB0b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4ocmVzdWx0KTsKICAgIH0gZWxzZSB7CiAg ICAgICAgc2l6ZV90IGJ5dGVzX3RvX2dldCA9IDIgKiB0b3RhbF9ieXRlcyArIFJPVU5EX1VQKGhl YXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKGJ5dGVzX2xlZnQgPiAwKSB7CiAg ICAgICAgICAgIG9iaiAqIHZvbGF0aWxlICAqIG15X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAg ICAgICAgICAgIGZyZWVfbGlzdCArIEZSRUVMSVNUX0lOREVYKGJ5dGVzX2xlZnQpOwoKICAgICAg ICAgICAgKChvYmogKilzdGFydF9mcmVlKSAtPiBmcmVlX2xpc3RfbGluayA9ICpteV9mcmVlX2xp c3Q7CiAgICAgICAgICAgICpteV9mcmVlX2xpc3QgPSAob2JqICopc3RhcnRfZnJlZTsKICAgICAg ICB9CiAgICAgICAgc3RhcnRfZnJlZSA9IChjaGFyICopbWFsbG9jKGJ5dGVzX3RvX2dldCk7CiAg ICAgICAgaWYgKDAgPT0gc3RhcnRfZnJlZSkgewogICAgICAgICAgICBpbnQgaTsKICAgICAgICAg ICAgb2JqICogdm9sYXRpbGUgICogbXlfZnJlZV9saXN0LCAqcDsKICAgICAgICAgICAgIAogICAg ICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChpID0gc2l6ZTsgaSA8PSBf X01BWF9CWVRFUzsgaSArPSBfX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBteV9mcmVlX2xpc3Qg PSBmcmVlX2xpc3QgKyBGUkVFTElTVF9JTkRFWChpKTsKICAgICAgICAgICAgICAgIHAgPSAqbXlf ZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gcCkgewogICAgICAgICAgICAgICAg ICAgICpteV9mcmVlX2xpc3QgPSBwIC0+IGZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAg ICAgIHN0YXJ0X2ZyZWUgPSAoY2hhciAqKXA7CiAgICAgICAgICAgICAgICAgICAgZW5kX2ZyZWUg PSBzdGFydF9mcmVlICsgaTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oY2h1bmtfYWxsb2Mo c2l6ZSwgbm9ianMpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgZW5kX2ZyZWUgPSAwOwkgCiAg ICAgICAgICAgIHN0YXJ0X2ZyZWUgPSAoY2hhciAqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUoYnl0 ZXNfdG9fZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAg ICAgICB9CiAgICAgICAgaGVhcF9zaXplICs9IGJ5dGVzX3RvX2dldDsKICAgICAgICBlbmRfZnJl ZSA9IHN0YXJ0X2ZyZWUgKyBieXRlc190b19nZXQ7CiAgICAgICAgcmV0dXJuKGNodW5rX2FsbG9j KHNpemUsIG5vYmpzKSk7CiAgICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp bnQgaW5zdD4Kdm9pZCogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+Ojpy ZWZpbGwoc2l6ZV90IG4pCnsKICAgIGludCBub2JqcyA9IDIwOwogICAgY2hhciAqIGNodW5rID0g Y2h1bmtfYWxsb2Mobiwgbm9ianMpOwogICAgb2JqICogdm9sYXRpbGUgICogbXlfZnJlZV9saXN0 OwogICAgb2JqICogcmVzdWx0OwogICAgb2JqICogY3VycmVudF9vYmosICogbmV4dF9vYmo7CiAg ICBpbnQgaTsKCiAgICBpZiAoMSA9PSBub2JqcykgcmV0dXJuKGNodW5rKTsKICAgIG15X2ZyZWVf bGlzdCA9IGZyZWVfbGlzdCArIEZSRUVMSVNUX0lOREVYKG4pOwoKICAgICAKICAgICAgcmVzdWx0 ID0gKG9iaiAqKWNodW5rOwogICAgICAqbXlfZnJlZV9saXN0ID0gbmV4dF9vYmogPSAob2JqICop KGNodW5rICsgbik7CiAgICAgIGZvciAoaSA9IDE7IDsgaSsrKSB7CiAgICAgICAgY3VycmVudF9v YmogPSBuZXh0X29iajsKICAgICAgICBuZXh0X29iaiA9IChvYmogKikoKGNoYXIgKiluZXh0X29i aiArIG4pOwogICAgICAgIGlmIChub2JqcyAtIDEgPT0gaSkgewogICAgICAgICAgICBjdXJyZW50 X29iaiAtPiBmcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgIGN1cnJlbnRfb2JqIC0+IGZyZWVfbGlzdF9saW5rID0gbmV4dF9v Ymo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4ocmVzdWx0KTsKfQoKdGVtcGxhdGUgPGJv b2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJl YWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkICpwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZF9zeiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdfc3opCnsKICAg IHZvaWQgKiByZXN1bHQ7CiAgICBzaXplX3QgY29weV9zejsKCiAgICBpZiAob2xkX3N6ID4gKHNp emVfdCkgX19NQVhfQllURVMgJiYgbmV3X3N6ID4gKHNpemVfdCkgX19NQVhfQllURVMpIHsKICAg ICAgICByZXR1cm4ocmVhbGxvYyhwLCBuZXdfc3opKTsKICAgIH0KICAgIGlmIChST1VORF9VUChv bGRfc3opID09IFJPVU5EX1VQKG5ld19zeikpIHJldHVybihwKTsKICAgIHJlc3VsdCA9IGFsbG9j YXRlKG5ld19zeik7CiAgICBjb3B5X3N6ID0gbmV3X3N6ID4gb2xkX3N6PyBvbGRfc3ogOiBuZXdf c3o7CiAgICBtZW1jcHkocmVzdWx0LCBwLCBjb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUocCwgb2xk X3N6KTsKICAgIHJldHVybihyZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIHRocmVhZHMs IGludCBpbnN0PgogICAgcHRocmVhZF9tdXRleF90CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8dGhyZWFkcywgaW5zdD46Ol9fbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0gezAsIDAs IDAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCwgezAsIDB9fSA7CgoKCgoKCgoKCgoKIyA2NTMgIi91 c3IvaW5jbHVkZS9nKystMi9zdGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIHRocmVhZHMs IGludCBpbnN0PgpjaGFyICpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46 OnN0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNoYXIg Kl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6ZW5kX2ZyZWUgPSAwOwoK dGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OmhlYXBfc2l6ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCB0 aHJlYWRzLCBpbnQgaW5zdD4KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+ OjpvYmogKiB2b2xhdGlsZSAKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+ IDo6ZnJlZV9saXN0WwoKCgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGlu c3Q+OjpfX05GUkVFTElTVFMKCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgfTsKIAogCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAogCiAKIyAzMSAi L3Vzci9pbmNsdWRlL2crKy0yL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9z dGxfY29uc3RydWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK IAoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSB2b2lkIGRlc3Ryb3koVCogcG9pbnRlcikgewog ICAgcG9pbnRlci0+flQoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5l IHZvaWQgY29uc3RydWN0KFQxKiBwLCBjb25zdCBUMiYgdmFsdWUpIHsKICBuZXcgKHApIFQxKHZh bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19k ZXN0cm95X2F1eChGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0LCBf X2ZhbHNlX3R5cGUpIHsKICBmb3IgKCA7IGZpcnN0IDwgbGFzdDsgKytmaXJzdCkKICAgIGRlc3Ry b3koJipmaXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+IAppbmxpbmUg dm9pZCBfX2Rlc3Ryb3lfYXV4KEZvcndhcmRJdGVyYXRvciwgRm9yd2FyZEl0ZXJhdG9yLCBfX3Ry dWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFQ+Cmlu bGluZSB2b2lkIF9fZGVzdHJveShGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRv ciBsYXN0LCBUKikgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUPjo6aGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvciB0cml2aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChmaXJz dCwgbGFzdCwgdHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2Fy ZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9y d2FyZEl0ZXJhdG9yIGxhc3QpIHsKICBfX2Rlc3Ryb3koZmlyc3QsIGxhc3QsIHZhbHVlX3R5cGUo Zmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2 b2lkIGRlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoKIAoKCgogCiAKIAojIDMyICIvdXNy L2luY2x1ZGUvZysrLTIvdmVjdG9yIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF91 bmluaXRpYWxpemVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9y PgppbmxpbmUgRm9yd2FyZEl0ZXJhdG9yIApfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoSW5wdXRJ dGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgRm9yd2FyZEl0ZXJhdG9yIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1 ZV90eXBlKSB7CiAgcmV0dXJuIGNvcHkoZmlyc3QsIGxhc3QsIHJlc3VsdCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CkZvcndhcmRJdGVy YXRvciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0 SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRJdGVyYXRvciBy ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICBGb3J3YXJk SXRlcmF0b3IgY3VyID0gcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBmaXJzdCAhPSBsYXN0 OyArK2ZpcnN0LCArK2N1cikKICAgICAgY29uc3RydWN0KCYqY3VyLCAqZmlyc3QpOwogICAgcmV0 dXJuIGN1cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KHJlc3VsdCwgY3VyKSA7IHRocm93 OyB9IDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBGb3J3YXJkSXRl cmF0b3IsIGNsYXNzIFQ+CmlubGluZSBGb3J3YXJkSXRlcmF0b3IKX191bmluaXRpYWxpemVkX2Nv cHkoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAg ICAgICAgICBGb3J3YXJkSXRlcmF0b3IgcmVzdWx0LCBUKikgewogIHR5cGVkZWYgdHlwZW5hbWUg X190eXBlX3RyYWl0czxUPjo6aXNfUE9EX3R5cGUgaXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlh bGl6ZWRfY29weV9hdXgoZmlyc3QsIGxhc3QsIHJlc3VsdCwgaXNfUE9EKCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgRm9y d2FyZEl0ZXJhdG9yCiAgdW5pbml0aWFsaXplZF9jb3B5KElucHV0SXRlcmF0b3IgZmlyc3QsIElu cHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yIHJl c3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShmaXJzdCwgbGFzdCwgcmVzdWx0 LCB2YWx1ZV90eXBlKHJlc3VsdCkpOwp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5 KGNvbnN0IGNoYXIqIGZpcnN0LCBjb25zdCBjaGFyKiBsYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIqIHJlc3VsdCkgewogIG1lbW1vdmUocmVzdWx0LCBmaXJzdCwgbGFz dCAtIGZpcnN0KTsKICByZXR1cm4gcmVzdWx0ICsgKGxhc3QgLSBmaXJzdCk7Cn0KCmlubGluZSB3 Y2hhcl90KiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogZmlyc3QsIGNvbnN0IHdj aGFyX3QqIGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCog cmVzdWx0KSB7CiAgbWVtbW92ZShyZXN1bHQsIGZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAobGFz dCAtIGZpcnN0KSk7CiAgcmV0dXJuIHJlc3VsdCArIChsYXN0IC0gZmlyc3QpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgU2l6ZSwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9y PgpwYWlyPElucHV0SXRlcmF0b3IsIEZvcndhcmRJdGVyYXRvcj4KX191bmluaXRpYWxpemVkX2Nv cHlfbihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBTaXplIGNvdW50LAogICAgICAgICAgICAgICAgICAg ICAgIEZvcndhcmRJdGVyYXRvciByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf aXRlcmF0b3JfdGFnKSB7CiAgRm9yd2FyZEl0ZXJhdG9yIGN1ciA9IHJlc3VsdDsKICB0cnkgIHsK ICAgIGZvciAoIDsgY291bnQgPiAwIDsgLS1jb3VudCwgKytmaXJzdCwgKytjdXIpIAogICAgICBj b25zdHJ1Y3QoJipjdXIsICpmaXJzdCk7CiAgICByZXR1cm4gcGFpcjxJbnB1dEl0ZXJhdG9yLCBG b3J3YXJkSXRlcmF0b3I+KGZpcnN0LCBjdXIpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3ko cmVzdWx0LCBjdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUmFuZG9tQWNjZXNz SXRlcmF0b3IsIGNsYXNzIFNpemUsIGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHBhaXI8 UmFuZG9tQWNjZXNzSXRlcmF0b3IsIEZvcndhcmRJdGVyYXRvcj4KX191bmluaXRpYWxpemVkX2Nv cHlfbihSYW5kb21BY2Nlc3NJdGVyYXRvciBmaXJzdCwgU2l6ZSBjb3VudCwKICAgICAgICAgICAg ICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgUmFuZG9tQWNjZXNzSXRlcmF0b3IgbGFz dCA9IGZpcnN0ICsgY291bnQ7CiAgcmV0dXJuIG1ha2VfcGFpcihsYXN0LCB1bmluaXRpYWxpemVk X2NvcHkoZmlyc3QsIGxhc3QsIHJlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVy YXRvciwgY2xhc3MgU2l6ZSwgY2xhc3MgRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgcGFpcjxJbnB1 dEl0ZXJhdG9yLCBGb3J3YXJkSXRlcmF0b3I+CnVuaW5pdGlhbGl6ZWRfY29weV9uKElucHV0SXRl cmF0b3IgZmlyc3QsIFNpemUgY291bnQsCiAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRJdGVy YXRvciByZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihmaXJzdCwgY291 bnQsIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRl Z29yeShmaXJzdCkpOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xh c3MgVD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KEZvcndhcmRJdGVyYXRv ciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgVCYgeCwgX190cnVlX3R5cGUpCnsKICBmaWxsKGZpcnN0LCBsYXN0LCB4KTsKfQoKdGVt cGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xhc3MgVD4Kdm9pZApfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9hdXgoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwg CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiB4LCBfX2ZhbHNlX3R5cGUpCnsKICBG b3J3YXJkSXRlcmF0b3IgY3VyID0gZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IGN1ciAhPSBs YXN0OyArK2N1cikKICAgICAgY29uc3RydWN0KCYqY3VyLCB4KTsKICB9CiAgY2F0Y2goLi4uKSB7 ICBkZXN0cm95KGZpcnN0LCBjdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRm9y d2FyZEl0ZXJhdG9yLCBjbGFzcyBULCBjbGFzcyBUMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxp emVkX2ZpbGwoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHgsIFQxKikgewogIHR5cGVk ZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUMT46OmlzX1BPRF90eXBlIGlzX1BPRDsKICBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9hdXgoZmlyc3QsIGxhc3QsIHgsIGlzX1BPRCgpKTsKICAgICAgICAg ICAgICAgICAgIAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBUPgpp bmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3 YXJkSXRlcmF0b3IgbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU JiB4KSB7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoZmlyc3QsIGxhc3QsIHgsIHZhbHVlX3R5cGUo Zmlyc3QpKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFNp emUsIGNsYXNzIFQ+CmlubGluZSBGb3J3YXJkSXRlcmF0b3IKX191bmluaXRpYWxpemVkX2ZpbGxf bl9hdXgoRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBTaXplIG4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFQmIHgsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIGZpbGxfbihmaXJzdCwg biwgeCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFNpemUsIGNs YXNzIFQ+CkZvcndhcmRJdGVyYXRvcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChGb3J3YXJk SXRlcmF0b3IgZmlyc3QsIFNpemUgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg VCYgeCwgX19mYWxzZV90eXBlKSB7CiAgRm9yd2FyZEl0ZXJhdG9yIGN1ciA9IGZpcnN0OwogIHRy eSAgewogICAgZm9yICggOyBuID4gMDsgLS1uLCArK2N1cikKICAgICAgY29uc3RydWN0KCYqY3Vy LCB4KTsKICAgIHJldHVybiBjdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShmaXJzdCwg Y3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwgY2xh c3MgU2l6ZSwgY2xhc3MgVCwgY2xhc3MgVDE+CmlubGluZSBGb3J3YXJkSXRlcmF0b3IgX191bmlu aXRpYWxpemVkX2ZpbGxfbihGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIFNpemUgbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHgsIFQxKikgewog IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxUMT46OmlzX1BPRF90eXBlIGlzX1BPRDsK ICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoZmlyc3QsIG4sIHgsIGlzX1BPRCgp KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCn0KCnRlbXBsYXRlIDxjbGFz cyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFNpemUsIGNsYXNzIFQ+CmlubGluZSBGb3J3YXJkSXRl cmF0b3IgdW5pbml0aWFsaXplZF9maWxsX24oRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBTaXplIG4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgeCkg ewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKGZpcnN0LCBuLCB4LCB2YWx1ZV90eXBl KGZpcnN0KSk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNsYXNz IElucHV0SXRlcmF0b3IyLCBjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CmlubGluZSBGb3J3YXJkSXRl cmF0b3IKX191bmluaXRpYWxpemVkX2NvcHlfY29weShJbnB1dEl0ZXJhdG9yMSBmaXJzdDEsIElu cHV0SXRlcmF0b3IxIGxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0 b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgRm9yd2FyZEl0ZXJhdG9yIHJlc3VsdCkgewogIEZvcndhcmRJdGVyYXRvciBtaWQgPSB1bmlu aXRpYWxpemVkX2NvcHkoZmlyc3QxLCBsYXN0MSwgcmVzdWx0KTsKICB0cnkgIHsKICAgIHJldHVy biB1bmluaXRpYWxpemVkX2NvcHkoZmlyc3QyLCBsYXN0MiwgbWlkKTsKICB9CiAgY2F0Y2goLi4u KSB7ICBkZXN0cm95KHJlc3VsdCwgbWlkKSA7IHRocm93OyB9IDsKfQoKIAogCnRlbXBsYXRlIDxj bGFzcyBGb3J3YXJkSXRlcmF0b3IsIGNsYXNzIFQsIGNsYXNzIElucHV0SXRlcmF0b3I+CmlubGlu ZSBGb3J3YXJkSXRlcmF0b3IgCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoRm9yd2FyZEl0ZXJh dG9yIHJlc3VsdCwgRm9yd2FyZEl0ZXJhdG9yIG1pZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBUJiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IgZmly c3QsIElucHV0SXRlcmF0b3IgbGFzdCkgewogIHVuaW5pdGlhbGl6ZWRfZmlsbChyZXN1bHQsIG1p ZCwgeCk7CiAgdHJ5ICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0LCBsYXN0 LCBtaWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3kocmVzdWx0LCBtaWQpIDsgdGhyb3c7 IH0gOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIEZvcndhcmRJ dGVyYXRvciwgY2xhc3MgVD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChJ bnB1dEl0ZXJhdG9yIGZpcnN0MSwgSW5wdXRJdGVyYXRvciBsYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgZmlyc3QyLCBGb3J3YXJkSXRlcmF0b3IgbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgeCkgewogIEZvcndhcmRJdGVyYXRv ciBtaWQyID0gdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0MSwgbGFzdDEsIGZpcnN0Mik7CiAgdHJ5 ICB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwobWlkMiwgbGFzdDIsIHgpOwogIH0KICBjYXRjaCgu Li4pIHsgIGRlc3Ryb3koZmlyc3QyLCBtaWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAoj IDMzICIvdXNyL2luY2x1ZGUvZysrLTIvdmVjdG9yIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky0yL3N0bF92ZWN0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK ICAKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQWxsb2MgPSBhbGxvYz4KY2xhc3MgdmVj dG9yIHsKcHVibGljOgogIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlw ZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKICB0eXBlZGVm IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7 CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK CgoKCgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8dmFsdWVfdHlwZSwgQWxsb2M+ IGRhdGFfYWxsb2NhdG9yOwogIGl0ZXJhdG9yIHN0YXJ0OwogIGl0ZXJhdG9yIGZpbmlzaDsKICBp dGVyYXRvciBlbmRfb2Zfc3RvcmFnZTsKICB2b2lkIGluc2VydF9hdXgoaXRlcmF0b3IgcG9zaXRp b24sIGNvbnN0IFQmIHgpOwogIHZvaWQgZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChzdGFydCkgZGF0 YV9hbGxvY2F0b3I6OmRlYWxsb2NhdGUoc3RhcnQsIGVuZF9vZl9zdG9yYWdlIC0gc3RhcnQpOwog IH0KCiAgdm9pZCBmaWxsX2luaXRpYWxpemUoc2l6ZV90eXBlIG4sIGNvbnN0IFQmIHZhbHVlKSB7 CiAgICBzdGFydCA9IGFsbG9jYXRlX2FuZF9maWxsKG4sIHZhbHVlKTsKICAgIGZpbmlzaCA9IHN0 YXJ0ICsgbjsKICAgIGVuZF9vZl9zdG9yYWdlID0gZmluaXNoOwogIH0KcHVibGljOgogIGl0ZXJh dG9yIGJlZ2luKCkgeyByZXR1cm4gc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv bnN0IHsgcmV0dXJuIHN0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gZmluaXNoOyB9 CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZmluaXNoOyB9CiAgcmV2ZXJz ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgp IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yIHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io YmVnaW4oKSk7IAogIH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlw ZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1 cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihUKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNv bnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmRfb2Zfc3RvcmFnZSAtIGJlZ2luKCkpOyB9CiAgYm9v bCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KICByZWZlcmVuY2Ug b3BlcmF0b3JbXShzaXplX3R5cGUgbikgeyByZXR1cm4gKihiZWdpbigpICsgbik7IH0KICBjb25z dF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgbikgY29uc3QgeyByZXR1cm4gKihiZWdp bigpICsgbik7IH0KCiAgdmVjdG9yKCkgOiBzdGFydCgwKSwgZmluaXNoKDApLCBlbmRfb2Zfc3Rv cmFnZSgwKSB7fQogIHZlY3RvcihzaXplX3R5cGUgbiwgY29uc3QgVCYgdmFsdWUpIHsgZmlsbF9p bml0aWFsaXplKG4sIHZhbHVlKTsgfQogIHZlY3RvcihpbnQgbiwgY29uc3QgVCYgdmFsdWUpIHsg ZmlsbF9pbml0aWFsaXplKG4sIHZhbHVlKTsgfQogIHZlY3Rvcihsb25nIG4sIGNvbnN0IFQmIHZh bHVlKSB7IGZpbGxfaW5pdGlhbGl6ZShuLCB2YWx1ZSk7IH0KICBleHBsaWNpdCB2ZWN0b3Ioc2l6 ZV90eXBlIG4pIHsgZmlsbF9pbml0aWFsaXplKG4sIFQoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZl Y3RvcjxULCBBbGxvYz4mIHgpIHsKICAgIHN0YXJ0ID0gYWxsb2NhdGVfYW5kX2NvcHkoeC5lbmQo KSAtIHguYmVnaW4oKSwgeC5iZWdpbigpLCB4LmVuZCgpKTsKICAgIGZpbmlzaCA9IHN0YXJ0ICsg KHguZW5kKCkgLSB4LmJlZ2luKCkpOwogICAgZW5kX29mX3N0b3JhZ2UgPSBmaW5pc2g7CiAgfQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoSW5wdXRJdGVyYXRvciBm aXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KSA6CiAgICBzdGFydCgwKSwgZmluaXNoKDApLCBlbmRf b2Zfc3RvcmFnZSgwKQogIHsKICAgIHJhbmdlX2luaXRpYWxpemUoZmlyc3QsIGxhc3QsIGl0ZXJh dG9yX2NhdGVnb3J5KGZpcnN0KSk7CiAgfQojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF92 ZWN0b3IuaCIgMwoKICB+dmVjdG9yKCkgeyAKICAgIGRlc3Ryb3koc3RhcnQsIGZpbmlzaCk7CiAg ICBkZWFsbG9jYXRlKCk7CiAgfQogIHZlY3RvcjxULCBBbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2 ZWN0b3I8VCwgQWxsb2M+JiB4KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIG4pIHsKICAgIGlm IChjYXBhY2l0eSgpIDwgbikgewogICAgICBjb25zdCBzaXplX3R5cGUgb2xkX3NpemUgPSBzaXpl KCk7CiAgICAgIGl0ZXJhdG9yIHRtcCA9IGFsbG9jYXRlX2FuZF9jb3B5KG4sIHN0YXJ0LCBmaW5p c2gpOwogICAgICBkZXN0cm95KHN0YXJ0LCBmaW5pc2gpOwogICAgICBkZWFsbG9jYXRlKCk7CiAg ICAgIHN0YXJ0ID0gdG1wOwogICAgICBmaW5pc2ggPSB0bXAgKyBvbGRfc2l6ZTsKICAgICAgZW5k X29mX3N0b3JhZ2UgPSBzdGFydCArIG47CiAgICB9CiAgfQogIHJlZmVyZW5jZSBmcm9udCgpIHsg cmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1 cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsg fQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9 CiAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgeCkgewogICAgaWYgKGZpbmlzaCAhPSBlbmRfb2Zf c3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoZmluaXNoLCB4KTsKICAgICAgKytmaW5pc2g7CiAg ICB9CiAgICBlbHNlCiAgICAgIGluc2VydF9hdXgoZW5kKCksIHgpOwogIH0KICB2b2lkIHN3YXAo dmVjdG9yPFQsIEFsbG9jPiYgeCkgewogICAgIDo6c3dhcChzdGFydCwgeC5zdGFydCk7CiAgICAg Ojpzd2FwKGZpbmlzaCwgeC5maW5pc2gpOwogICAgIDo6c3dhcChlbmRfb2Zfc3RvcmFnZSwgeC5l bmRfb2Zfc3RvcmFnZSk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwg Y29uc3QgVCYgeCkgewogICAgc2l6ZV90eXBlIG4gPSBwb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBp ZiAoZmluaXNoICE9IGVuZF9vZl9zdG9yYWdlICYmIHBvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg IGNvbnN0cnVjdChmaW5pc2gsIHgpOwogICAgICArK2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAg ICAgaW5zZXJ0X2F1eChwb3NpdGlvbiwgeCk7CiAgICByZXR1cm4gYmVnaW4oKSArIG47CiAgfQog IGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbikgeyByZXR1cm4gaW5zZXJ0KHBvc2l0 aW9uLCBUKCkpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5z ZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9y IGxhc3QpIHsKICAgIHJhbmdlX2luc2VydChwb3NpdGlvbiwgZmlyc3QsIGxhc3QsIGl0ZXJhdG9y X2NhdGVnb3J5KGZpcnN0KSk7CiAgfQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIHBvcywg c2l6ZV90eXBlIG4sIGNvbnN0IFQmIHgpOwogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBwb3MsIGlu dCBuLCBjb25zdCBUJiB4KSB7CiAgICBpbnNlcnQocG9zLCAoc2l6ZV90eXBlKSBuLCB4KTsKICB9 CiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIHBvcywgbG9uZyBuLCBjb25zdCBUJiB4KSB7CiAgICBp bnNlcnQocG9zLCAoc2l6ZV90eXBlKSBuLCB4KTsKICB9CgogIHZvaWQgcG9wX2JhY2soKSB7CiAg ICAtLWZpbmlzaDsKICAgIGRlc3Ryb3koZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRl cmF0b3IgcG9zaXRpb24pIHsKICAgIGlmIChwb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNv cHkocG9zaXRpb24gKyAxLCBmaW5pc2gsIHBvc2l0aW9uKTsKICAgIC0tZmluaXNoOwogICAgZGVz dHJveShmaW5pc2gpOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShp dGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCkgewogICAgaXRlcmF0b3IgaSA9IGNvcHkobGFz dCwgZmluaXNoLCBmaXJzdCk7CiAgICBkZXN0cm95KGksIGZpbmlzaCk7CiAgICBmaW5pc2ggPSBm aW5pc2ggLSAobGFzdCAtIGZpcnN0KTsKICAgIHJldHVybiBmaXJzdDsKICB9CiAgdm9pZCByZXNp emUoc2l6ZV90eXBlIG5ld19zaXplLCBjb25zdCBUJiB4KSB7CiAgICBpZiAobmV3X3NpemUgPCBz aXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgbmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UK ICAgICAgaW5zZXJ0KGVuZCgpLCBuZXdfc2l6ZSAtIHNpemUoKSwgeCk7CiAgfQogIHZvaWQgcmVz aXplKHNpemVfdHlwZSBuZXdfc2l6ZSkgeyByZXNpemUobmV3X3NpemUsIFQoKSk7IH0KICB2b2lk IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKICBpdGVyYXRv ciBhbGxvY2F0ZV9hbmRfZmlsbChzaXplX3R5cGUgbiwgY29uc3QgVCYgeCkgewogICAgaXRlcmF0 b3IgcmVzdWx0ID0gZGF0YV9hbGxvY2F0b3I6OmFsbG9jYXRlKG4pOwogICAgdHJ5ICB7CiAgICAg IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKHJlc3VsdCwgbiwgeCk7CiAgICAgIHJldHVybiByZXN1bHQ7 CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKHJlc3Vs dCwgbikgOyB0aHJvdzsgfSA7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRv cj4KICBpdGVyYXRvciBhbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBs YXN0KSB7CiAgICBpdGVyYXRvciByZXN1bHQgPSBkYXRhX2FsbG9jYXRvcjo6YWxsb2NhdGUobik7 CiAgICB0cnkgIHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0LCBsYXN0LCByZXN1bHQp OwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBkYXRhX2FsbG9j YXRvcjo6ZGVhbGxvY2F0ZShyZXN1bHQsIG4pIDsgdGhyb3c7IH0gOwogIH0KIyAyNDMgIi91c3Iv aW5jbHVkZS9nKystMi9zdGxfdmVjdG9yLmgiIDMKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIElucHV0 SXRlcmF0b3I+CiAgdm9pZCByYW5nZV9pbml0aWFsaXplKElucHV0SXRlcmF0b3IgZmlyc3QsIElu cHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKSB7CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpCiAgICAgIHB1c2hfYmFj aygqZmlyc3QpOwogIH0KCiAgIAogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9y PgogIHZvaWQgcmFuZ2VfaW5pdGlhbGl6ZShGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJ dGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykgewogICAgc2l6ZV90eXBlIG4gPSAwOwogICAgZGlzdGFuY2UoZmlyc3QsIGxhc3QsIG4pOwog ICAgc3RhcnQgPSBhbGxvY2F0ZV9hbmRfY29weShuLCBmaXJzdCwgbGFzdCk7CiAgICBmaW5pc2gg PSBzdGFydCArIG47CiAgICBlbmRfb2Zfc3RvcmFnZSA9IGZpbmlzaDsKICB9CgogIHRlbXBsYXRl IDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogIHZvaWQgcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIHBvcywK ICAgICAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxh c3QsCiAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg PGNsYXNzIEZvcndhcmRJdGVyYXRvcj4KICB2b2lkIHJhbmdlX2luc2VydChpdGVyYXRvciBwb3Ms CiAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0 b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKfTsK CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCB2ZWN0b3I8VCwgQWxsb2M+JiB4LCBjb25zdCB2ZWN0b3I8VCwgQWxsb2M+JiB5KSB7CiAg cmV0dXJuIHguc2l6ZSgpID09IHkuc2l6ZSgpICYmIGVxdWFsKHguYmVnaW4oKSwgeC5lbmQoKSwg eS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcjwoY29uc3QgdmVjdG9yPFQsIEFsbG9jPiYgeCwgY29uc3QgdmVjdG9yPFQsIEFs bG9jPiYgeSkgewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSh4LmJlZ2luKCksIHgu ZW5kKCksIHkuYmVnaW4oKSwgeS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz IEFsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxULCBBbGxvYz4mIHgsIHZlY3RvcjxULCBB bGxvYz4mIHkpIHsKICB4LnN3YXAoeSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFs bG9jPgp2ZWN0b3I8VCwgQWxsb2M+JiB2ZWN0b3I8VCwgQWxsb2M+OjpvcGVyYXRvcj0oY29uc3Qg dmVjdG9yPFQsIEFsbG9jPiYgeCkgewogIGlmICgmeCAhPSB0aGlzKSB7CiAgICBpZiAoeC5zaXpl KCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIGl0ZXJhdG9yIHRtcCA9IGFsbG9jYXRlX2FuZF9jb3B5 KHguZW5kKCkgLSB4LmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHguYmVnaW4oKSwgeC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koc3RhcnQsIGZpbmlzaCk7CiAg ICAgIGRlYWxsb2NhdGUoKTsKICAgICAgc3RhcnQgPSB0bXA7CiAgICAgIGVuZF9vZl9zdG9yYWdl ID0gc3RhcnQgKyAoeC5lbmQoKSAtIHguYmVnaW4oKSk7CiAgICB9CiAgICBlbHNlIGlmIChzaXpl KCkgPj0geC5zaXplKCkpIHsKICAgICAgaXRlcmF0b3IgaSA9IGNvcHkoeC5iZWdpbigpLCB4LmVu ZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShpLCBmaW5pc2gpOwogICAgfQogICAgZWxzZSB7 CiAgICAgIGNvcHkoeC5iZWdpbigpLCB4LmJlZ2luKCkgKyBzaXplKCksIHN0YXJ0KTsKICAgICAg dW5pbml0aWFsaXplZF9jb3B5KHguYmVnaW4oKSArIHNpemUoKSwgeC5lbmQoKSwgZmluaXNoKTsK ICAgIH0KICAgIGZpbmlzaCA9IHN0YXJ0ICsgeC5zaXplKCk7CiAgfQogIHJldHVybiAqdGhpczsK fQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFsbG9jPgp2b2lkIHZlY3RvcjxULCBBbGxvYz46 Omluc2VydF9hdXgoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IFQmIHgpIHsKICBpZiAoZmluaXNo ICE9IGVuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoZmluaXNoLCAqKGZpbmlzaCAtIDEp KTsKICAgICsrZmluaXNoOwogICAgVCB4X2NvcHkgPSB4OwogICAgY29weV9iYWNrd2FyZChwb3Np dGlvbiwgZmluaXNoIC0gMiwgZmluaXNoIC0gMSk7CiAgICAqcG9zaXRpb24gPSB4X2NvcHk7CiAg fQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIG9sZF9zaXplID0gc2l6ZSgpOwogICAgY29u c3Qgc2l6ZV90eXBlIGxlbiA9IG9sZF9zaXplICE9IDAgPyAyICogb2xkX3NpemUgOiAxOwogICAg aXRlcmF0b3IgbmV3X3N0YXJ0ID0gZGF0YV9hbGxvY2F0b3I6OmFsbG9jYXRlKGxlbik7CiAgICBp dGVyYXRvciBuZXdfZmluaXNoID0gbmV3X3N0YXJ0OwogICAgdHJ5ICB7CiAgICAgIG5ld19maW5p c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoc3RhcnQsIHBvc2l0aW9uLCBuZXdfc3RhcnQpOwogICAg ICBjb25zdHJ1Y3QobmV3X2ZpbmlzaCwgeCk7CiAgICAgICsrbmV3X2ZpbmlzaDsKICAgICAgbmV3 X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShwb3NpdGlvbiwgZmluaXNoLCBuZXdfZmluaXNo KTsKICAgIH0KCgogICAgY2F0Y2goLi4uKSB7CiAgICAgIGRlc3Ryb3kobmV3X3N0YXJ0LCBuZXdf ZmluaXNoKTsgCiAgICAgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKG5ld19zdGFydCwgbGVu KTsKICAgICAgdGhyb3c7CiAgICB9CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBk ZWFsbG9jYXRlKCk7CiAgICBzdGFydCA9IG5ld19zdGFydDsKICAgIGZpbmlzaCA9IG5ld19maW5p c2g7CiAgICBlbmRfb2Zfc3RvcmFnZSA9IG5ld19zdGFydCArIGxlbjsKICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBULCBjbGFzcyBBbGxvYz4Kdm9pZCB2ZWN0b3I8VCwgQWxsb2M+OjppbnNlcnQoaXRl cmF0b3IgcG9zaXRpb24sIHNpemVfdHlwZSBuLCBjb25zdCBUJiB4KSB7CiAgaWYgKG4gIT0gMCkg ewogICAgaWYgKHNpemVfdHlwZShlbmRfb2Zfc3RvcmFnZSAtIGZpbmlzaCkgPj0gbikgewogICAg ICBUIHhfY29weSA9IHg7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBlbGVtc19hZnRlciA9IGZpbmlz aCAtIHBvc2l0aW9uOwogICAgICBpdGVyYXRvciBvbGRfZmluaXNoID0gZmluaXNoOwogICAgICBp ZiAoZWxlbXNfYWZ0ZXIgPiBuKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KGZpbmlzaCAt IG4sIGZpbmlzaCwgZmluaXNoKTsKICAgICAgICBmaW5pc2ggKz0gbjsKICAgICAgICBjb3B5X2Jh Y2t3YXJkKHBvc2l0aW9uLCBvbGRfZmluaXNoIC0gbiwgb2xkX2ZpbmlzaCk7CiAgICAgICAgZmls bChwb3NpdGlvbiwgcG9zaXRpb24gKyBuLCB4X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2Ugewog ICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKGZpbmlzaCwgbiAtIGVsZW1zX2FmdGVyLCB4X2Nv cHkpOwogICAgICAgIGZpbmlzaCArPSBuIC0gZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFs aXplZF9jb3B5KHBvc2l0aW9uLCBvbGRfZmluaXNoLCBmaW5pc2gpOwogICAgICAgIGZpbmlzaCAr PSBlbGVtc19hZnRlcjsKICAgICAgICBmaWxsKHBvc2l0aW9uLCBvbGRfZmluaXNoLCB4X2NvcHkp OwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIG9sZF9zaXpl ID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBvbGRfc2l6ZSAr IG1heChvbGRfc2l6ZSwgbik7CiAgICAgIGl0ZXJhdG9yIG5ld19zdGFydCA9IGRhdGFfYWxsb2Nh dG9yOjphbGxvY2F0ZShsZW4pOwogICAgICBpdGVyYXRvciBuZXdfZmluaXNoID0gbmV3X3N0YXJ0 OwogICAgICB0cnkgIHsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHN0 YXJ0LCBwb3NpdGlvbiwgbmV3X3N0YXJ0KTsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFs aXplZF9maWxsX24obmV3X2ZpbmlzaCwgbiwgeCk7CiAgICAgICAgbmV3X2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfY29weShwb3NpdGlvbiwgZmluaXNoLCBuZXdfZmluaXNoKTsKICAgICAgfQoKICAg ICAgY2F0Y2goLi4uKSB7CiAgICAgICAgZGVzdHJveShuZXdfc3RhcnQsIG5ld19maW5pc2gpOwog ICAgICAgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKG5ld19zdGFydCwgbGVuKTsKICAgICAg ICB0aHJvdzsKICAgICAgfQoKICAgICAgZGVzdHJveShzdGFydCwgZmluaXNoKTsKICAgICAgZGVh bGxvY2F0ZSgpOwogICAgICBzdGFydCA9IG5ld19zdGFydDsKICAgICAgZmluaXNoID0gbmV3X2Zp bmlzaDsKICAgICAgZW5kX29mX3N0b3JhZ2UgPSBuZXdfc3RhcnQgKyBsZW47CiAgICB9CiAgfQp9 CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBbGxvYz4gdGVtcGxhdGUgPGNsYXNzIElucHV0 SXRlcmF0b3I+CnZvaWQgdmVjdG9yPFQsIEFsbG9jPjo6cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIHBv cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciBmaXJz dCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3Qp IHsKICAgIHBvcyA9IGluc2VydChwb3MsICpmaXJzdCk7CiAgICArK3BvczsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBULCBjbGFzcyBBbGxvYz4gdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRv cj4Kdm9pZCB2ZWN0b3I8VCwgQWxsb2M+OjpyYW5nZV9pbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmRJdGVyYXRvciBmaXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0ZXJhdG9yIGxh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnKSB7CiAgaWYgKGZpcnN0ICE9IGxhc3QpIHsKICAgIHNpemVfdHlwZSBuID0gMDsKICAgIGRp c3RhbmNlKGZpcnN0LCBsYXN0LCBuKTsKICAgIGlmIChzaXplX3R5cGUoZW5kX29mX3N0b3JhZ2Ug LSBmaW5pc2gpID49IG4pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIGVsZW1zX2FmdGVyID0gZmlu aXNoIC0gcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIG9sZF9maW5pc2ggPSBmaW5pc2g7CiAgICAg IGlmIChlbGVtc19hZnRlciA+IG4pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoZmluaXNo IC0gbiwgZmluaXNoLCBmaW5pc2gpOwogICAgICAgIGZpbmlzaCArPSBuOwogICAgICAgIGNvcHlf YmFja3dhcmQocG9zaXRpb24sIG9sZF9maW5pc2ggLSBuLCBvbGRfZmluaXNoKTsKICAgICAgICBj b3B5KGZpcnN0LCBsYXN0LCBwb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg Rm9yd2FyZEl0ZXJhdG9yIG1pZCA9IGZpcnN0OwogICAgICAgIGFkdmFuY2UobWlkLCBlbGVtc19h ZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KG1pZCwgbGFzdCwgZmluaXNoKTsKICAg ICAgICBmaW5pc2ggKz0gbiAtIGVsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w eShwb3NpdGlvbiwgb2xkX2ZpbmlzaCwgZmluaXNoKTsKICAgICAgICBmaW5pc2ggKz0gZWxlbXNf YWZ0ZXI7CiAgICAgICAgY29weShmaXJzdCwgbWlkLCBwb3NpdGlvbik7CiAgICAgIH0KICAgIH0K ICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgb2xkX3NpemUgPSBzaXplKCk7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBsZW4gPSBvbGRfc2l6ZSArIG1heChvbGRfc2l6ZSwgbik7CiAgICAg IGl0ZXJhdG9yIG5ld19zdGFydCA9IGRhdGFfYWxsb2NhdG9yOjphbGxvY2F0ZShsZW4pOwogICAg ICBpdGVyYXRvciBuZXdfZmluaXNoID0gbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBu ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHN0YXJ0LCBwb3NpdGlvbiwgbmV3X3N0YXJ0 KTsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGZpcnN0LCBsYXN0LCBu ZXdfZmluaXNoKTsKICAgICAgICBuZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHBvc2l0 aW9uLCBmaW5pc2gsIG5ld19maW5pc2gpOwogICAgICB9CgogICAgICBjYXRjaCguLi4pIHsKICAg ICAgICBkZXN0cm95KG5ld19zdGFydCwgbmV3X2ZpbmlzaCk7CiAgICAgICAgZGF0YV9hbGxvY2F0 b3I6OmRlYWxsb2NhdGUobmV3X3N0YXJ0LCBsZW4pOwogICAgICAgIHRocm93OwogICAgICB9Cgog ICAgICBkZXN0cm95KHN0YXJ0LCBmaW5pc2gpOwogICAgICBkZWFsbG9jYXRlKCk7CiAgICAgIHN0 YXJ0ID0gbmV3X3N0YXJ0OwogICAgICBmaW5pc2ggPSBuZXdfZmluaXNoOwogICAgICBlbmRfb2Zf c3RvcmFnZSA9IG5ld19zdGFydCArIGxlbjsKICAgIH0KICB9Cn0KCiMgNTIyICIvdXNyL2luY2x1 ZGUvZysrLTIvc3RsX3ZlY3Rvci5oIiAzCgoKCgoKCiAgCgoKCiAKIAogCiMgMzQgIi91c3IvaW5j bHVkZS9nKystMi92ZWN0b3IiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RsX2J2ZWN0 b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKICAKCnN0YXRpYyBj b25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4ICpzaXplb2YodW5zaWduZWQgaW50KSk7CgoKCgoK c3RydWN0IF9fYml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQgaW50KiBwOwogIHVuc2lnbmVkIGlu dCBtYXNrOwogIF9fYml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIHgsIHVuc2lnbmVkIGludCB5 KSA6IHAoeCksIG1hc2soeSkge30KCnB1YmxpYzoKICBfX2JpdF9yZWZlcmVuY2UoKSA6IHAoMCks IG1hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpwICYgbWFz aykpOyB9CiAgX19iaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCB4KSB7CiAgICBpZiAoeCkg ICAgICAKICAgICAgKnAgfD0gbWFzazsKICAgIGVsc2UgCiAgICAgICpwICY9IH5tYXNrOwogICAg cmV0dXJuICp0aGlzOwogIH0KICBfX2JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfX2Jp dF9yZWZlcmVuY2UmIHgpIHsgcmV0dXJuICp0aGlzID0gYm9vbCh4KTsgfQogIGJvb2wgb3BlcmF0 b3I9PShjb25zdCBfX2JpdF9yZWZlcmVuY2UmIHgpIGNvbnN0IHsKICAgIHJldHVybiBib29sKCp0 aGlzKSA9PSBib29sKHgpOwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfX2JpdF9yZWZlcmVu Y2UmIHgpIGNvbnN0IHsKICAgIHJldHVybiBib29sKCp0aGlzKSA8IGJvb2woeCk7CiAgfQogIHZv aWQgZmxpcCgpIHsgKnAgXj0gbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfX2JpdF9yZWZl cmVuY2UgeCwgX19iaXRfcmVmZXJlbmNlIHkpIHsKICBib29sIHRtcCA9IHg7CiAgeCA9IHk7CiAg eSA9IHRtcDsKfQoKc3RydWN0IF9fYml0X2l0ZXJhdG9yIDogcHVibGljIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlwZWRlZiBfX2JpdF9yZWZlcmVuY2UgIHJl ZmVyZW5jZTsKICB0eXBlZGVmIF9fYml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9f Yml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIHA7CiAgdW5zaWduZWQgaW50 IG9mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAob2Zmc2V0KysgPT0gX19XT1JEX0JJ VCAtIDEpIHsKICAgICAgb2Zmc2V0ID0gMDsKICAgICAgKytwOwogICAgfQogIH0KICB2b2lkIGJ1 bXBfZG93bigpIHsKICAgIGlmIChvZmZzZXQtLSA9PSAwKSB7CiAgICAgIG9mZnNldCA9IF9fV09S RF9CSVQgLSAxOwogICAgICAtLXA7CiAgICB9CiAgfQoKICBfX2JpdF9pdGVyYXRvcigpIDogcCgw KSwgb2Zmc2V0KDApIHt9CiAgX19iaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiB4LCB1bnNpZ25l ZCBpbnQgeSkgOiBwKHgpLCBvZmZzZXQoeSkge30KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u c3QgeyByZXR1cm4gcmVmZXJlbmNlKHAsIDFVIDw8IG9mZnNldCk7IH0KICBpdGVyYXRvciYgb3Bl cmF0b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0 b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIHRtcCA9ICp0aGlzOwogICAgYnVtcF91 cCgpOwogICAgcmV0dXJuIHRtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBi dW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShp bnQpIHsKICAgIGl0ZXJhdG9yIHRtcCA9ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1 cm4gdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgaSkgewog ICAgZGlmZmVyZW5jZV90eXBlIG4gPSBpICsgb2Zmc2V0OwogICAgcCArPSBuIC8gX19XT1JEX0JJ VDsKICAgIG4gPSBuICUgX19XT1JEX0JJVDsKICAgIGlmIChuIDwgMCkgewogICAgICBvZmZzZXQg PSAodW5zaWduZWQgaW50KSBuICsgX19XT1JEX0JJVDsKICAgICAgLS1wOwogICAgfSBlbHNlCiAg ICAgIG9mZnNldCA9ICh1bnNpZ25lZCBpbnQpIG47CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0 ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBpKSB7CiAgICAqdGhpcyArPSAtaTsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw ZSBpKSBjb25zdCB7CiAgICBpdGVyYXRvciB0bXAgPSAqdGhpczsKICAgIHJldHVybiB0bXAgKz0g aTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBpKSBjb25zdCB7CiAg ICBpdGVyYXRvciB0bXAgPSAqdGhpczsKICAgIHJldHVybiB0bXAgLT0gaTsKICB9CiAgZGlmZmVy ZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciB4KSBjb25zdCB7CiAgICByZXR1cm4gX19XT1JE X0JJVCAqIChwIC0geC5wKSArIG9mZnNldCAtIHgub2Zmc2V0OwogIH0KICByZWZlcmVuY2Ugb3Bl cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgaSkgeyByZXR1cm4gKigqdGhpcyArIGkpOyB9CiAgYm9v bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiB4KSBjb25zdCB7CiAgICByZXR1cm4gcCA9PSB4 LnAgJiYgb2Zmc2V0ID09IHgub2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl cmF0b3ImIHgpIGNvbnN0IHsKICAgIHJldHVybiBwICE9IHgucCB8fCBvZmZzZXQgIT0geC5vZmZz ZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIHgpIGNvbnN0IHsKICAgIHJldHVybiBw IDwgeC5wIHx8IChwID09IHgucCAmJiBvZmZzZXQgPCB4Lm9mZnNldCk7CiAgfQp9OwoKc3RydWN0 IF9fYml0X2NvbnN0X2l0ZXJhdG9yCiAgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxi b29sLCBwdHJkaWZmX3Q+CnsKICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIHJlZmVyZW5j ZTsKICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl ZGVmIGNvbnN0IGJvb2wqICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfX2JpdF9jb25zdF9p dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgdW5zaWduZWQgaW50KiBwOwogIHVuc2lnbmVkIGlu dCBvZmZzZXQ7CiAgdm9pZCBidW1wX3VwKCkgewogICAgaWYgKG9mZnNldCsrID09IF9fV09SRF9C SVQgLSAxKSB7CiAgICAgIG9mZnNldCA9IDA7CiAgICAgICsrcDsKICAgIH0KICB9CiAgdm9pZCBi dW1wX2Rvd24oKSB7CiAgICBpZiAob2Zmc2V0LS0gPT0gMCkgewogICAgICBvZmZzZXQgPSBfX1dP UkRfQklUIC0gMTsKICAgICAgLS1wOwogICAgfQogIH0KCiAgX19iaXRfY29uc3RfaXRlcmF0b3Io KSA6IHAoMCksIG9mZnNldCgwKSB7fQogIF9fYml0X2NvbnN0X2l0ZXJhdG9yKHVuc2lnbmVkIGlu dCogeCwgdW5zaWduZWQgaW50IHkpIDogcCh4KSwgb2Zmc2V0KHkpIHt9CiAgX19iaXRfY29uc3Rf aXRlcmF0b3IoY29uc3QgX19iaXRfaXRlcmF0b3ImIHgpIDogcCh4LnApLCBvZmZzZXQoeC5vZmZz ZXQpIHt9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBf X2JpdF9yZWZlcmVuY2UocCwgMVUgPDwgb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w ZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0 X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciB0bXAgPSAqdGhp czsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiB0bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv cGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNv bnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciB0bXAgPSAq dGhpczsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIHRtcDsKICB9CiAgY29uc3RfaXRlcmF0 b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBu ID0gaSArIG9mZnNldDsKICAgIHAgKz0gbiAvIF9fV09SRF9CSVQ7CiAgICBuID0gbiAlIF9fV09S RF9CSVQ7CiAgICBpZiAobiA8IDApIHsKICAgICAgb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgbiAr IF9fV09SRF9CSVQ7CiAgICAgIC0tcDsKICAgIH0gZWxzZQogICAgICBvZmZzZXQgPSAodW5zaWdu ZWQgaW50KSBuOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0 b3ItPShkaWZmZXJlbmNlX3R5cGUgaSkgewogICAgKnRoaXMgKz0gLWk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgaSkgY29u c3QgewogICAgY29uc3RfaXRlcmF0b3IgdG1wID0gKnRoaXM7CiAgICByZXR1cm4gdG1wICs9IGk7 CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgaSkgY29uc3Qg ewogICAgY29uc3RfaXRlcmF0b3IgdG1wID0gKnRoaXM7CiAgICByZXR1cm4gdG1wIC09IGk7CiAg fQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3IgeCkgY29uc3Qgewog ICAgcmV0dXJuIF9fV09SRF9CSVQgKiAocCAtIHgucCkgKyBvZmZzZXQgLSB4Lm9mZnNldDsKICB9 CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIGkpIHsgCiAgICBy ZXR1cm4gKigqdGhpcyArIGkpOyAKICB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0 ZXJhdG9yJiB4KSBjb25zdCB7CiAgICByZXR1cm4gcCA9PSB4LnAgJiYgb2Zmc2V0ID09IHgub2Zm c2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIHgpIGNvbnN0 IHsKICAgIHJldHVybiBwICE9IHgucCB8fCBvZmZzZXQgIT0geC5vZmZzZXQ7CiAgfQogIGJvb2wg b3BlcmF0b3I8KGNvbnN0X2l0ZXJhdG9yIHgpIGNvbnN0IHsKICAgIHJldHVybiBwIDwgeC5wIHx8 IChwID09IHgucCAmJiBvZmZzZXQgPCB4Lm9mZnNldCk7CiAgfQp9OwoKIAogCiAKIAogCgoKCgoK CgoKCgogICAgICAgIAoKICAgICAgICAKdGVtcGxhdGU8Y2xhc3MgQWxsb2M+IGNsYXNzIHZlY3Rv cjxib29sLCBBbGxvYz4KCgoKewoKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzx1bnNpZ25lZCBpbnQs IEFsbG9jPiBkYXRhX2FsbG9jYXRvcjsKCgoKcHVibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm ZXJlbmNlX3R5cGU7IAogIHR5cGVkZWYgX19iaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl ZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX19iaXRfcmVmZXJlbmNlKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgdHlwZWRlZiBfX2Jp dF9pdGVyYXRvciAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9fYml0X2NvbnN0 X2l0ZXJhdG9yICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKCiAgdHlwZWRlZiByZXZlcnNlX2l0 ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYg cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCnByb3Rl Y3RlZDoKICBpdGVyYXRvciBzdGFydDsKICBpdGVyYXRvciBmaW5pc2g7CiAgdW5zaWduZWQgaW50 KiBlbmRfb2Zfc3RvcmFnZTsKICB1bnNpZ25lZCBpbnQqIGJpdF9hbGxvYyhzaXplX3R5cGUgbikg ewogICAgcmV0dXJuIGRhdGFfYWxsb2NhdG9yOjphbGxvY2F0ZSgobiArIF9fV09SRF9CSVQgLSAx KS9fX1dPUkRfQklUKTsKICB9CiAgdm9pZCBkZWFsbG9jYXRlKCkgewogICAgaWYgKHN0YXJ0LnAp CiAgICAgIGRhdGFfYWxsb2NhdG9yOjpkZWFsbG9jYXRlKHN0YXJ0LnAsIGVuZF9vZl9zdG9yYWdl IC0gc3RhcnQucCk7CiAgfQogIHZvaWQgaW5pdGlhbGl6ZShzaXplX3R5cGUgbikgewogICAgdW5z aWduZWQgaW50KiBxID0gYml0X2FsbG9jKG4pOwogICAgZW5kX29mX3N0b3JhZ2UgPSBxICsgKG4g KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIHN0YXJ0ID0gaXRlcmF0b3IocSwgMCk7 CiAgICBmaW5pc2ggPSBzdGFydCArIGRpZmZlcmVuY2VfdHlwZShuKTsKICB9CiAgdm9pZCBpbnNl cnRfYXV4KGl0ZXJhdG9yIHBvc2l0aW9uLCBib29sIHgpIHsKICAgIGlmIChmaW5pc2gucCAhPSBl bmRfb2Zfc3RvcmFnZSkgewogICAgICBjb3B5X2JhY2t3YXJkKHBvc2l0aW9uLCBmaW5pc2gsIGZp bmlzaCArIDEpOwogICAgICAqcG9zaXRpb24gPSB4OwogICAgICArK2ZpbmlzaDsKICAgIH0KICAg IGVsc2UgewogICAgICBzaXplX3R5cGUgbGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09S RF9CSVQ7CiAgICAgIHVuc2lnbmVkIGludCogcSA9IGJpdF9hbGxvYyhsZW4pOwogICAgICBpdGVy YXRvciBpID0gY29weShiZWdpbigpLCBwb3NpdGlvbiwgaXRlcmF0b3IocSwgMCkpOwogICAgICAq aSsrID0geDsKICAgICAgZmluaXNoID0gY29weShwb3NpdGlvbiwgZW5kKCksIGkpOwogICAgICBk ZWFsbG9jYXRlKCk7CiAgICAgIGVuZF9vZl9zdG9yYWdlID0gcSArIChsZW4gKyBfX1dPUkRfQklU IC0gMSkvX19XT1JEX0JJVDsKICAgICAgc3RhcnQgPSBpdGVyYXRvcihxLCAwKTsKICAgIH0KICB9 CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluaXRpYWxpemVfcmFu Z2UoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIHN0YXJ0ID0gaXRlcmF0b3IoKTsK ICAgIGZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBlbmRfb2Zfc3RvcmFnZSA9IDA7CiAgICBmb3Ig KCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpIAogICAgICBwdXNoX2JhY2soKmZpcnN0KTsKICB9 CgogIHRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbml0aWFsaXplX3Jh bmdlKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBzaXplX3R5cGUgbiA9 IDA7CiAgICBkaXN0YW5jZShmaXJzdCwgbGFzdCwgbik7CiAgICBpbml0aWFsaXplKG4pOwogICAg Y29weShmaXJzdCwgbGFzdCwgc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRl cmF0b3I+CiAgdm9pZCBpbnNlcnRfcmFuZ2UoaXRlcmF0b3IgcG9zLAogICAgICAgICAgICAgICAg ICAgIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsg KytmaXJzdCkgewogICAgICBwb3MgPSBpbnNlcnQocG9zLCAqZmlyc3QpOwogICAgICArK3BvczsK ICAgIH0KICB9CgogIHRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbnNl cnRfcmFuZ2UoaXRlcmF0b3IgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgRm9yd2FyZEl0 ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgaWYgKGZpcnN0ICE9IGxhc3QpIHsKICAgICAgc2l6 ZV90eXBlIG4gPSAwOwogICAgICBkaXN0YW5jZShmaXJzdCwgbGFzdCwgbik7CiAgICAgIGlmIChj YXBhY2l0eSgpIC0gc2l6ZSgpID49IG4pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKHBvc2l0aW9u LCBlbmQoKSwgZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKG4pKTsKICAgICAgICBjb3B5KGZpcnN0 LCBsYXN0LCBwb3NpdGlvbik7CiAgICAgICAgZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShuKTsK ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgbGVuID0gc2l6ZSgpICsgbWF4 KHNpemUoKSwgbik7CiAgICAgICAgdW5zaWduZWQgaW50KiBxID0gYml0X2FsbG9jKGxlbik7CiAg ICAgICAgaXRlcmF0b3IgaSA9IGNvcHkoYmVnaW4oKSwgcG9zaXRpb24sIGl0ZXJhdG9yKHEsIDAp KTsKICAgICAgICBpID0gY29weShmaXJzdCwgbGFzdCwgaSk7CiAgICAgICAgZmluaXNoID0gY29w eShwb3NpdGlvbiwgZW5kKCksIGkpOwogICAgICAgIGRlYWxsb2NhdGUoKTsKICAgICAgICBlbmRf b2Zfc3RvcmFnZSA9IHEgKyAobGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAg ICAgc3RhcnQgPSBpdGVyYXRvcihxLCAwKTsKICAgICAgfQogICAgfQogIH0gICAgICAKCgoKcHVi bGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRv ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1 cm4gZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZmluaXNo OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv cihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAg ICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0 ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyAKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyBy ZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkg Y29uc3QgewogICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihlbmRfb2Zfc3RvcmFn ZSwgMCkgLSBiZWdpbigpKTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2lu KCkgPT0gZW5kKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgbikgewogICAg cmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShuKSk7CiAgfQogIGNvbnN0X3JlZmVy ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBuKSBjb25zdCB7CiAgICByZXR1cm4gKihiZWdpbigp ICsgZGlmZmVyZW5jZV90eXBlKG4pKTsKICB9CiAgdmVjdG9yICgpIDogc3RhcnQoaXRlcmF0b3Io KSksIGZpbmlzaChpdGVyYXRvcigpKSwgZW5kX29mX3N0b3JhZ2UoMCkge30KICB2ZWN0b3IgKHNp emVfdHlwZSBuLCBib29sIHZhbHVlKSB7CiAgICBpbml0aWFsaXplKG4pOwogICAgZmlsbChzdGFy dC5wLCBlbmRfb2Zfc3RvcmFnZSwgdmFsdWUgPyB+MCA6IDApOwogIH0KICB2ZWN0b3IgKGludCBu LCBib29sIHZhbHVlKSB7CiAgICBpbml0aWFsaXplKG4pOwogICAgZmlsbChzdGFydC5wLCBlbmRf b2Zfc3RvcmFnZSwgdmFsdWUgPyB+MCA6IDApOwogIH0KICB2ZWN0b3IgKGxvbmcgbiwgYm9vbCB2 YWx1ZSkgewogICAgaW5pdGlhbGl6ZShuKTsKICAgIGZpbGwoc3RhcnQucCwgZW5kX29mX3N0b3Jh Z2UsIHZhbHVlID8gfjAgOiAwKTsKICB9CiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5cGUgbikg ewogICAgaW5pdGlhbGl6ZShuKTsKICAgIGZpbGwoc3RhcnQucCwgZW5kX29mX3N0b3JhZ2UsIDAp OwogIH0KICB2ZWN0b3IgKGNvbnN0IHZlY3RvciAmIHgpIHsKICAgIGluaXRpYWxpemUoeC5zaXpl KCkpOwogICAgY29weSh4LmJlZ2luKCksIHguZW5kKCksIHN0YXJ0KTsKICB9CgoKICB0ZW1wbGF0 ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IgKElucHV0SXRlcmF0b3IgZmlyc3QsIElu cHV0SXRlcmF0b3IgbGFzdCkgewogICAgaW5pdGlhbGl6ZV9yYW5nZShmaXJzdCwgbGFzdCwgaXRl cmF0b3JfY2F0ZWdvcnkoZmlyc3QpKTsKICB9CiMgNDQ4ICIvdXNyL2luY2x1ZGUvZysrLTIvc3Rs X2J2ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IGRlYWxsb2NhdGUoKTsgfQogIHZlY3RvciAm IG9wZXJhdG9yPShjb25zdCB2ZWN0b3IgJiB4KSB7CiAgICBpZiAoJnggPT0gdGhpcykgcmV0dXJu ICp0aGlzOwogICAgaWYgKHguc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICBkZWFsbG9jYXRl KCk7CiAgICAgIGluaXRpYWxpemUoeC5zaXplKCkpOwogICAgfQogICAgY29weSh4LmJlZ2luKCks IHguZW5kKCksIGJlZ2luKCkpOwogICAgZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlw ZSh4LnNpemUoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHZvaWQgcmVzZXJ2ZShzaXplX3R5 cGUgbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBuKSB7CiAgICAgIHVuc2lnbmVkIGludCogcSA9 IGJpdF9hbGxvYyhuKTsKICAgICAgZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0 b3IocSwgMCkpOwogICAgICBkZWFsbG9jYXRlKCk7CiAgICAgIHN0YXJ0ID0gaXRlcmF0b3IocSwg MCk7CiAgICAgIGVuZF9vZl9zdG9yYWdlID0gcSArIChuICsgX19XT1JEX0JJVCAtIDEpL19fV09S RF9CSVQ7CiAgICB9CiAgfQogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9 CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBy ZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5j ZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2so Ym9vbCB4KSB7CiAgICBpZiAoZmluaXNoLnAgIT0gZW5kX29mX3N0b3JhZ2UpCiAgICAgICpmaW5p c2grKyA9IHg7CiAgICBlbHNlCiAgICAgIGluc2VydF9hdXgoZW5kKCksIHgpOwogIH0KICB2b2lk IHN3YXAodmVjdG9yICYgeCkgewogICAgIDo6c3dhcChzdGFydCwgeC5zdGFydCk7CiAgICAgOjpz d2FwKGZpbmlzaCwgeC5maW5pc2gpOwogICAgIDo6c3dhcChlbmRfb2Zfc3RvcmFnZSwgeC5lbmRf b2Zfc3RvcmFnZSk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgYm9v bCB4ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgbiA9IHBvc2l0aW9uIC0gYmVnaW4o KTsKICAgIGlmIChmaW5pc2gucCAhPSBlbmRfb2Zfc3RvcmFnZSAmJiBwb3NpdGlvbiA9PSBlbmQo KSkKICAgICAgKmZpbmlzaCsrID0geDsKICAgIGVsc2UKICAgICAgaW5zZXJ0X2F1eChwb3NpdGlv biwgeCk7CiAgICByZXR1cm4gYmVnaW4oKSArIG47CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIElu cHV0SXRlcmF0b3I+IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGxh c3QpIHsKICAgIGluc2VydF9yYW5nZShwb3NpdGlvbiwgZmlyc3QsIGxhc3QsIGl0ZXJhdG9yX2Nh dGVnb3J5KGZpcnN0KSk7CiAgfQojIDU0MyAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9idmVjdG9y LmgiIDMKCiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIHNpemVfdHlwZSBuLCBi b29sIHgpIHsKICAgIGlmIChuID09IDApIHJldHVybjsKICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6 ZSgpID49IG4pIHsKICAgICAgY29weV9iYWNrd2FyZChwb3NpdGlvbiwgZW5kKCksIGZpbmlzaCAr IGRpZmZlcmVuY2VfdHlwZShuKSk7CiAgICAgIGZpbGwocG9zaXRpb24sIHBvc2l0aW9uICsgZGlm ZmVyZW5jZV90eXBlKG4pLCB4KTsKICAgICAgZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShuKTsK ICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgbGVuID0gc2l6ZSgpICsgbWF4KHNpemUo KSwgbik7CiAgICAgIHVuc2lnbmVkIGludCogcSA9IGJpdF9hbGxvYyhsZW4pOwogICAgICBpdGVy YXRvciBpID0gY29weShiZWdpbigpLCBwb3NpdGlvbiwgaXRlcmF0b3IocSwgMCkpOwogICAgICBm aWxsX24oaSwgbiwgeCk7CiAgICAgIGZpbmlzaCA9IGNvcHkocG9zaXRpb24sIGVuZCgpLCBpICsg ZGlmZmVyZW5jZV90eXBlKG4pKTsKICAgICAgZGVhbGxvY2F0ZSgpOwogICAgICBlbmRfb2Zfc3Rv cmFnZSA9IHEgKyAobGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIHN0YXJ0 ID0gaXRlcmF0b3IocSwgMCk7CiAgICB9CiAgfQoKICB2b2lkIGluc2VydChpdGVyYXRvciBwb3Ms IGludCBuLCBib29sIHgpICB7IGluc2VydChwb3MsIChzaXplX3R5cGUpbiwgeCk7IH0KICB2b2lk IGluc2VydChpdGVyYXRvciBwb3MsIGxvbmcgbiwgYm9vbCB4KSB7IGluc2VydChwb3MsIChzaXpl X3R5cGUpbiwgeCk7IH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1maW5pc2g7IH0KICBpdGVyYXRv ciBlcmFzZShpdGVyYXRvciBwb3NpdGlvbikgewogICAgaWYgKHBvc2l0aW9uICsgMSAhPSBlbmQo KSkKICAgICAgY29weShwb3NpdGlvbiArIDEsIGVuZCgpLCBwb3NpdGlvbik7CiAgICAtLWZpbmlz aDsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgZmly c3QsIGl0ZXJhdG9yIGxhc3QpIHsKICAgIGZpbmlzaCA9IGNvcHkobGFzdCwgZW5kKCksIGZpcnN0 KTsKICAgIHJldHVybiBmaXJzdDsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIG5ld19zaXpl LCBib29sIHggPSBib29sKCkpIHsKICAgIGlmIChuZXdfc2l6ZSA8IHNpemUoKSkgCiAgICAgIGVy YXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUobmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNl CiAgICAgIGluc2VydChlbmQoKSwgbmV3X3NpemUgLSBzaXplKCksIHgpOwogIH0KICB2b2lkIGNs ZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KfTsKCgoKdHlwZWRlZiB2ZWN0b3I8Ym9v bCwgYWxsb2M+IGJpdF92ZWN0b3I7CgojIDYwMSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0bF9idmVj dG9yLmgiIDMKCgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy0yL3Zl Y3RvciIgMiAzCgoKCgogCiAKIAojIDQgImgvbnJoeXByaXZhdGUuaCIgMgoKdXNpbmcgbmFtZXNw YWNlIHN0ZDsKCmNsYXNzIE5SSFlfY2xhc3NBcHBhcml0aW9uOwpjbGFzcyBOUkhZX2NsYXNzQ2Ft ZXJhOwpjbGFzcyBOUkhZX2NsYXNzQ29sbGlzaW9uOwpjbGFzcyBOUkhZX2NsYXNzRHluYW1pY3M7 CmNsYXNzIE5SSFlfY2xhc3NGb3JjZTsKY2xhc3MgTlJIWV9jbGFzc0Z1cjsKY2xhc3MgTlJIWV9j bGFzc011c2NsZTsKY2xhc3MgTlJIWV9jbGFzc0dlbmVyYXRvcjsKY2xhc3MgTlJIWV9jbGFzc0hv bWU7CmNsYXNzIE5SSFlfY2xhc3NJazsKY2xhc3MgTlJIWV9jbGFzc0lrQ2hhaW47CmNsYXNzIE5S SFlfY2xhc3NJbmt5OwpjbGFzcyBOUkhZX2NsYXNzS2xpc3Q7CmNsYXNzIE5SSFlfY2xhc3NMYXll cjsKY2xhc3MgTlJIWV9jbGFzc0xpZ2h0OwpjbGFzcyBOUkhZX2NsYXNzTWFwOwpjbGFzcyBOUkhZ X2NsYXNzTWF0ZXJpYWw7CmNsYXNzIE5SSFlfY2xhc3NNb2RlbDsKY2xhc3MgTlJIWV9jbGFzc09i amVjdDsKY2xhc3MgTlJIWV9jbGFzc1Jvb3Q7CmNsYXNzIE5SSFlfY2xhc3NSb3RvOwpjbGFzcyBO UkhZX2NsYXNzU2NhZmZvbGQ7CmNsYXNzIE5SSFlfY2xhc3NTb3VuZDsKY2xhc3MgTlJIWV9jbGFz c1RleDsKY2xhc3MgTlJIWV9jbGFzc1RoaW5nOwpjbGFzcyBOUkhZX2NsYXNzVGltZTsKY2xhc3Mg TlJIWV9jbGFzc1RyYWNrOwpjbGFzcyBOUkhZX2NsYXNzVXNlTWFwOwoKY2xhc3MgSFVfRXhwcmVz c2lvbjsKY2xhc3MgTlJIWV9JTlRfRlJBTkdFOwpjbGFzcyBOUkhZX0ZSQU5HRTsKY2xhc3MgTlJI WV9SRUFMX0ZSQU5HRTsKCmNsYXNzIEZyYW5nZUNhY2hlTG9yZDsKY2xhc3MgTlJIWV9jbGFzc0No YW5uZWw7CmNsYXNzIE5SSFlfY2xhc3NDb21tYW5kOwpjbGFzcyBOUkhZX1dvcmxkOwpjbGFzcyBY Rk9STV9CYXNlOwoKIyAxICJoL05SSFlfU3RkLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgwKIAoKCgogCgoKCgoKCgoKIAoKIAoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMu aCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlw ZXMuaCIKCgoKCgoKCgoKCgoKCgojIDQzICJoL05SSFlfU3RkLmgiIDIKCiMgMSAiL3NvZnR3YXJl L3RoYWxpYS9oL3N0ZGRlZnMuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9zb2Z0 d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDMgIi9z b2Z0d2FyZS90aGFsaWEvaC9zdGR0eXBlcy5oIgoKCgoKCgoKCgoKCgoKCiMgMjMgIi9zb2Z0d2Fy ZS90aGFsaWEvaC9zdGRkZWZzLmgiIDIKCgogCiAKCgoKICAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK IAoKCgoKCgoKCiMgNDQgImgvTlJIWV9TdGQuaCIgMgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gv c3RkbWFjcm9zLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAK CgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCiAKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxNDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9z dGRtYWNyb3MuaCIKICAgICAgICAgICAgICAgICAgICAgICAgIAoKCgoKIyA0NSAiaC9OUkhZX1N0 ZC5oIiAyCgoKIAoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3R4dC5oIiAxCiAKCgoKCgoKCgoK CiMgMTIxICIvc29mdHdhcmUvdGhhbGlhL2gvdHh0LmgiCgojIDUwICJoL05SSFlfU3RkLmgiIDIK CiAKCiAKCgoKIAoKCgoKIAoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkbWF0aC5oIiAxCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCnR5cGVk ZWYgZmxvYXQgTV9GTE9BVDsKCiAKc3RydWN0IE1fVmVjdG9yOwpzdHJ1Y3QgTV9WZWN0b3I0Owpz dHJ1Y3QgTV9WZWN0b3IyOwpzdHJ1Y3QgTV9WZWN0b3JOOwoKc3RydWN0IE1fTWF0cml4OwpzdHJ1 Y3QgTV9NYXRyaXgyMjsKc3RydWN0IE1fTWF0cml4TU47CgppbmxpbmUgY29uc3QgY2hhciAqIGNs YXNzTmFtZSggY29uc3QgTV9WZWN0b3IgJiApICAgeyByZXR1cm4gIk1fVmVjdG9yIjsgfQppbmxp bmUgY29uc3QgY2hhciAqIGNsYXNzTmFtZSggY29uc3QgTV9WZWN0b3I0ICYgKSAgeyByZXR1cm4g Ik1fVmVjdG9yNCI7IH07CmlubGluZSBjb25zdCBjaGFyICogY2xhc3NOYW1lKCBjb25zdCBNX1Zl Y3RvcjIgJiApICB7IHJldHVybiAiTV9WZWN0b3IyIjsgfTsKaW5saW5lIGNvbnN0IGNoYXIgKiBj bGFzc05hbWUoIGNvbnN0IE1fVmVjdG9yTiAmICkgIHsgcmV0dXJuICJNX1ZlY3Rvck4iOyB9OwoK aW5saW5lIGNvbnN0IGNoYXIgKiBjbGFzc05hbWUoIGNvbnN0IE1fTWF0cml4ICYgKSAgIHsgcmV0 dXJuICJNX01hdHJpeCI7IH07CmlubGluZSBjb25zdCBjaGFyICogY2xhc3NOYW1lKCBjb25zdCBN X01hdHJpeDIyICYgKSB7IHJldHVybiAiTV9NYXRyaXgyMiI7IH07CmlubGluZSBjb25zdCBjaGFy ICogY2xhc3NOYW1lKCBjb25zdCBNX01hdHJpeE1OICYgKSB7IHJldHVybiAiTV9NYXRyaXhNTiI7 IH07CgogCnN0cnVjdCBWZXJ0ZXg7CnN0cnVjdCBNYXRyaXg0OwpzdHJ1Y3QgX1ZFQ1RPUjsKc3Ry dWN0IF9WRUNUNEQ7CnN0cnVjdCBfVkVSVDJEOwpzdHJ1Y3QgX1BPSU5UMkQ7CnR5cGVkZWYgZmxv YXQgTUFUUklYWzRdWzRdOwoKIAp0eXBlZGVmIHN0cnVjdCBfbmV0ZmlsZV9maWxlIE5FVEZJTEVf RklMRTsKCgogCgoKCnN0cnVjdCBNX1ZlY3RvciB7CiAgICBNX0ZMT0FUICAgICB4LCB5LCB6OwoK ICAgIE1fVmVjdG9yKCk7CiAgICBNX1ZlY3RvciggTV9GTE9BVCwgTV9GTE9BVCwgTV9GTE9BVCAp OwogICAgTV9WZWN0b3IoIGNvbnN0IE1fVmVjdG9yICYgKTsKCiAgICBNX0ZMT0FUICAgICBvcGVy YXRvcltdKCBpbnQgKSBjb25zdDsKICAgIE1fRkxPQVQgJiAgIG9wZXJhdG9yW10oIGludCApOwoK ICAgICAKICAgIE1fVmVjdG9yKCBjb25zdCBWZXJ0ZXggJiApOwogICAgTV9WZWN0b3IoIGNvbnN0 IF9WRUNUT1IgJiApOyAgICAgICAgIAoKICAgIG9wZXJhdG9yIGNvbnN0IFZlcnRleCAmICgpIGNv bnN0OwogICAgb3BlcmF0b3IgVmVydGV4ICYgKCk7CiAgICBvcGVyYXRvciBjb25zdCBfVkVDVE9S ICYgKCkgY29uc3Q7CiAgICBvcGVyYXRvciBfVkVDVE9SICYgKCk7CiAgICB9OwoKc3RydWN0IE1f VmVjdG9yNCB7CiAgICBNX0ZMT0FUICAgICB4LCB5LCB6LCB3OwoKICAgIE1fVmVjdG9yNCgpOwog ICAgTV9WZWN0b3I0KCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FUICk7CiAgICBN X1ZlY3RvcjQoIGNvbnN0IE1fVmVjdG9yICYsIE1fRkxPQVQgKTsKICAgIE1fVmVjdG9yNCggY29u c3QgTV9WZWN0b3I0ICYgKTsKCiAgICBNX0ZMT0FUICAgICBvcGVyYXRvcltdKCBpbnQgKSBjb25z dDsKICAgIE1fRkxPQVQgJiAgIG9wZXJhdG9yW10oIGludCApOwoKICAgICAKICAgIE1fVmVjdG9y NCggY29uc3QgX1ZFQ1Q0RCAmICk7CgogICAgb3BlcmF0b3IgY29uc3QgX1ZFQ1Q0RCAmICgpIGNv bnN0OwogICAgb3BlcmF0b3IgX1ZFQ1Q0RCAmICgpOwogICAgfTsKCnN0cnVjdCBNX1ZlY3RvcjIg ewogICAgdW5pb24gewogICAgICAgIE1fRkxPQVQgICAgIHU7CiAgICAgICAgTV9GTE9BVCAgICAg eDsKICAgICAgICB9OwogICAgdW5pb24gewogICAgICAgIE1fRkxPQVQgICAgIHY7CiAgICAgICAg TV9GTE9BVCAgICAgeTsKICAgICAgICB9OwoKICAgIE1fVmVjdG9yMigpOwogICAgTV9WZWN0b3Iy KCBNX0ZMT0FULCBNX0ZMT0FUICk7CiAgICBNX1ZlY3RvcjIoIGNvbnN0IE1fVmVjdG9yMiAmICk7 CgogICAgTV9GTE9BVCAgICAgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CiAgICBNX0ZMT0FUICYg ICBvcGVyYXRvcltdKCBpbnQgKTsKCiAgICAgCiAgICBNX1ZlY3RvcjIoIGNvbnN0IF9WRVJUMkQg JiApOwogICAgTV9WZWN0b3IyKCBjb25zdCBfUE9JTlQyRCAmICk7CgogICAgb3BlcmF0b3IgY29u c3QgX1ZFUlQyRCAmICgpIGNvbnN0OwogICAgb3BlcmF0b3IgX1ZFUlQyRCAmICgpOwogICAgb3Bl cmF0b3IgY29uc3QgX1BPSU5UMkQgJiAoKSBjb25zdDsKICAgIG9wZXJhdG9yIF9QT0lOVDJEICYg KCk7CiAgICB9OwoKY2xhc3MgTV9WZWN0b3JOIHsKICAgIGludCAgICAgICAgIHN6OwogICAgTV9G TE9BVCAgICAgKmRhdGE7CgpwdWJsaWM6CiAgICBNX1ZlY3Rvck4oKTsKICAgIH5NX1ZlY3Rvck4o KTsKICAgIE1fVmVjdG9yTiggaW50ICk7CiAgICBNX1ZlY3Rvck4oIGNvbnN0IE1fVmVjdG9yTiAm ICk7CgogICAgTV9WZWN0b3JOICYgICAgIG9wZXJhdG9yPSggY29uc3QgTV9WZWN0b3JOICYgKTsK ICAgIE1fRkxPQVQgICAgICAgICBvcGVyYXRvcltdKCBpbnQgKSBjb25zdDsKICAgIE1fRkxPQVQg JiAgICAgICBvcGVyYXRvcltdKCBpbnQgKTsKICAgIGludCBuKCkgY29uc3QgeyByZXR1cm4gc3o7 IH0KCiAgICAgCiAgICBNX1ZlY3Rvck4oIGNvbnN0IE1fVmVjdG9yICYgKTsKICAgIE1fVmVjdG9y TiggY29uc3QgTV9WZWN0b3I0ICYgKTsKICAgIE1fVmVjdG9yTiggY29uc3QgTV9WZWN0b3IyICYg KTsKCiAgICBvcGVyYXRvciBNX1ZlY3RvcigpIGNvbnN0OwogICAgb3BlcmF0b3IgTV9WZWN0b3I0 KCkgY29uc3Q7CiAgICBvcGVyYXRvciBNX1ZlY3RvcjIoKSBjb25zdDsKCiAgICBmcmllbmQgTV9W ZWN0b3JOIG9wZXJhdG9yKyggY29uc3QgTV9WZWN0b3JOICYsIGNvbnN0IE1fVmVjdG9yTiAmICk7 CiAgICBmcmllbmQgTV9WZWN0b3JOICYgb3BlcmF0b3IrPSggTV9WZWN0b3JOICYsIGNvbnN0IE1f VmVjdG9yTiAmICk7CiAgICBmcmllbmQgTV9WZWN0b3JOIG9wZXJhdG9yLSggY29uc3QgTV9WZWN0 b3JOICYgKTsKICAgIGZyaWVuZCBNX1ZlY3Rvck4gb3BlcmF0b3ItKCBjb25zdCBNX1ZlY3Rvck4g JiwgY29uc3QgTV9WZWN0b3JOICYgKTsKICAgIGZyaWVuZCBNX1ZlY3Rvck4gJiBvcGVyYXRvci09 KCBNX1ZlY3Rvck4gJiwgY29uc3QgTV9WZWN0b3JOICYgKTsKICAgIGZyaWVuZCBNX0ZMT0FUIG9w ZXJhdG9yKiggY29uc3QgTV9WZWN0b3JOICYsIGNvbnN0IE1fVmVjdG9yTiAmICk7CiAgICBmcmll bmQgTV9NYXRyaXhNTiBvcGVyYXRvciooIGNvbnN0IE1fTWF0cml4TU4gJiwgY29uc3QgTV9NYXRy aXhNTiAmICk7CiAgICB9OwoKc3RydWN0IE1fTWF0cml4IHsKICAgIE1fRkxPQVQgICAgIHJvd1s0 XVs0XTsKCiAgICBNX01hdHJpeCgpOwogICAgTV9NYXRyaXgoIE1fRkxPQVQsIE1fRkxPQVQsIE1f RkxPQVQsIE1fRkxPQVQsCiAgICAgICAgICAgICAgTV9GTE9BVCwgTV9GTE9BVCwgTV9GTE9BVCwg TV9GTE9BVCwKICAgICAgICAgICAgICBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FU LAogICAgICAgICAgICAgIE1fRkxPQVQsIE1fRkxPQVQsIE1fRkxPQVQsIE1fRkxPQVQgKTsKICAg IE1fTWF0cml4KCBjb25zdCBNX01hdHJpeCAmICk7CgogICAgY29uc3QgTV9WZWN0b3I0ICYgICBv cGVyYXRvcltdKCBpbnQgKSBjb25zdDsKICAgIE1fVmVjdG9yNCAmICAgICAgICAgb3BlcmF0b3Jb XSggaW50ICk7CgogICAgIAogICAgTV9NYXRyaXgoIGNvbnN0IE1BVFJJWCApOwogICAgTV9NYXRy aXgoIGNvbnN0IE1hdHJpeDQgJiApOwoKICAgIG9wZXJhdG9yIE1BVFJJWCAmICgpOwogICAgb3Bl cmF0b3IgY29uc3QgTWF0cml4NCAmICgpIGNvbnN0OwogICAgb3BlcmF0b3IgTWF0cml4NCAmICgp OwogICAgfTsKCnN0cnVjdCBNX01hdHJpeDIyIHsKICAgIE1fVmVjdG9yMiAgIHJvd1syXTsKCiAg ICBNX01hdHJpeDIyKCk7CiAgICBNX01hdHJpeDIyKCBNX0ZMT0FULCBNX0ZMT0FULCBNX0ZMT0FU LCBNX0ZMT0FUICk7CiAgICBNX01hdHJpeDIyKCBjb25zdCBNX01hdHJpeDIyICYgKTsKCiAgICBj b25zdCBNX1ZlY3RvcjIgJiAgIG9wZXJhdG9yW10oIGludCApIGNvbnN0OwogICAgTV9WZWN0b3Iy ICYgICAgICAgICBvcGVyYXRvcltdKCBpbnQgKTsKICAgIH07CgpjbGFzcyBNX01hdHJpeE1OIHsK ICAgIGludCAgICAgICAgIHN6OwogICAgTV9WZWN0b3JOICAgKmRhdGE7CgpwdWJsaWM6CiAgICBN X01hdHJpeE1OKCk7CiAgICB+TV9NYXRyaXhNTigpOwogICAgTV9NYXRyaXhNTiggaW50LCBpbnQg KTsKICAgIE1fTWF0cml4TU4oIGNvbnN0IE1fTWF0cml4TU4gJiApOwoKICAgIE1fTWF0cml4TU4g JiAgICAgICAgb3BlcmF0b3I9KCBjb25zdCBNX01hdHJpeE1OICYgKTsKICAgIGNvbnN0IE1fVmVj dG9yTiAmICAgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CiAgICBNX1ZlY3Rvck4gJiAgICAgICAg IG9wZXJhdG9yW10oIGludCApOwogICAgaW50IG0oKSBjb25zdCB7IHJldHVybiBzejsgfQoKICAg ICAKICAgIE1fTWF0cml4TU4oIGNvbnN0IE1fTWF0cml4ICYgKTsKICAgIE1fTWF0cml4TU4oIGNv bnN0IE1fTWF0cml4MjIgJiApOwoKICAgIG9wZXJhdG9yIE1fTWF0cml4KCkgY29uc3Q7CiAgICBv cGVyYXRvciBNX01hdHJpeDIyKCkgY29uc3Q7CgogICAgZnJpZW5kIE1fTWF0cml4TU4gb3BlcmF0 b3IrKCBjb25zdCBNX01hdHJpeE1OICYsIGNvbnN0IE1fTWF0cml4TU4gJiApOwogICAgZnJpZW5k IE1fTWF0cml4TU4gJiBvcGVyYXRvcis9KCBNX01hdHJpeE1OICYsIGNvbnN0IE1fTWF0cml4TU4g JiApOwogICAgZnJpZW5kIE1fTWF0cml4TU4gb3BlcmF0b3ItKCBjb25zdCBNX01hdHJpeE1OICYg KTsKICAgIGZyaWVuZCBNX01hdHJpeE1OIG9wZXJhdG9yLSggY29uc3QgTV9NYXRyaXhNTiAmLCBj b25zdCBNX01hdHJpeE1OICYgKTsKICAgIGZyaWVuZCBNX01hdHJpeE1OICYgb3BlcmF0b3ItPSgg TV9NYXRyaXhNTiAmLCBjb25zdCBNX01hdHJpeE1OICYgKTsKICAgIGZyaWVuZCBNX01hdHJpeE1O IG9wZXJhdG9yKiggY29uc3QgTV9NYXRyaXhNTiAmLCBjb25zdCBNX01hdHJpeE1OICYgKTsKICAg IH07CgojIDEgIi9zb2Z0d2FyZS90aGFsaWEvaC9zdGRtYXRoLnAiIDEKIAoKCgoKCgoKCgoKCgoK CgoKCgogCgoKIAoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYKCSk7 CgpNX1ZlY3RvciAgICAgICAgb3BlcmF0b3IqICgKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYs CiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1Zl Y3RvcjIgJiB2CgkpOwoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjQgJiB2 CgkpOwoKTV9GTE9BVCBmYWJzICgKICAgICAgICBjb25zdCBNX1ZlY3Rvck4gJiB2CgkpOwoKTV9W ZWN0b3IyICAgICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgdiwKICAg ICAgICBNX0ZMT0FUIGYKCSk7CgpNX01hdHJpeCAgICAgICAgb3BlcmF0b3IqICgKICAgICAgICBj b25zdCBNX01hdHJpeCAmbSwKICAgICAgICBNX0ZMT0FUIGYKCSk7CgpNX1ZlY3RvcjQgICAgICAg b3BlcmF0b3IqICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjQgJiByLAogICAgICAgIE1fRkxPQVQg ZgoJKTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIE1fRkxPQVQgZiwKICAg ICAgICBjb25zdCBNX1ZlY3RvciAmIHYKCSk7CgpNX1ZlY3RvcjIgICAgICAgb3BlcmF0b3IqICgK ICAgICAgICBNX0ZMT0FUIGYsCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgdgoJKTsKCk1fTWF0 cml4ICAgICAgICBvcGVyYXRvciogKAogICAgICAgIE1fRkxPQVQgZiwKICAgICAgICBjb25zdCBN X01hdHJpeCAmIG0KCSk7CgpNX1ZlY3RvcjQgICAgICAgb3BlcmF0b3IqICgKICAgICAgICBNX0ZM T0FUIGYsCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcgoJKTsKCk1fVmVjdG9yICYgICAgICBv cGVyYXRvcio9ICgKICAgICAgICBNX1ZlY3RvciAmIHYsCiAgICAgICAgTV9GTE9BVCBmCgkpOwoK TV9WZWN0b3IyICYgICAgIG9wZXJhdG9yKj0gKAogICAgICAgIE1fVmVjdG9yMiAmIHYsCiAgICAg ICAgTV9GTE9BVCBmCgkpOwoKTV9NYXRyaXggJiAgICAgIG9wZXJhdG9yKj0gKCAKICAgICAgICBN X01hdHJpeCAmIG0sCiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9WZWN0b3I0ICYgICAgIG9wZXJh dG9yKj0gKAogICAgICAgIE1fVmVjdG9yNCAmIHIsCiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9W ZWN0b3IgICAgICAgIG9wZXJhdG9yLyAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2LAogICAg ICAgIGludCBmCgkpOwoKTV9WZWN0b3IgICAgICAgIG9wZXJhdG9yLyAoCiAgICAgICAgY29uc3Qg TV9WZWN0b3IgJiB2LAogICAgICAgIE1fRkxPQVQgZgoJKTsKCk1fVmVjdG9yMiAgICAgICBvcGVy YXRvci8gKAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIHYsCiAgICAgICAgTV9GTE9BVCBmCgkp OwoKTV9NYXRyaXggICAgICAgIG9wZXJhdG9yLyAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBt LAogICAgICAgIE1fRkxPQVQgZgoJKTsKCk1fVmVjdG9yNCAgICAgICBvcGVyYXRvci8gKAogICAg ICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIsCiAgICAgICAgTV9GTE9BVCBmCgkpOwoKTV9WZWN0b3Ig JiAgICAgIG9wZXJhdG9yLz0gKAogICAgICAgIE1fVmVjdG9yICYgdiwKICAgICAgICBNX0ZMT0FU IGYKCSk7CgpNX1ZlY3RvcjIgJiAgICAgb3BlcmF0b3IvPSAoCiAgICAgICAgTV9WZWN0b3IyICYg diwKICAgICAgICBNX0ZMT0FUIGYKCSk7CgpNX01hdHJpeCAmICAgICAgb3BlcmF0b3IvPSAoCiAg ICAgICAgTV9NYXRyaXggJiBtLAogICAgICAgIE1fRkxPQVQgZgoJKTsKCk1fVmVjdG9yNCAmICAg ICBvcGVyYXRvci89ICgKICAgICAgICBNX1ZlY3RvcjQgJiByLAogICAgICAgIE1fRkxPQVQgZgoJ KTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYg diwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvciogKAogICAg ICAgIGNvbnN0IE1fTWF0cml4ICZtLAogICAgICAgIGRvdWJsZSBmCgkpOwoKTV9WZWN0b3I0ICAg ICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgciwKICAgICAgICBkb3Vi bGUgZgoJKTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGRvdWJsZSBmLAog ICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdgoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvciog KAogICAgICAgIGRvdWJsZSBmLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbQoJKTsKCk1fVmVj dG9yNCAgICAgICBvcGVyYXRvciogKAogICAgICAgIGRvdWJsZSBmLAogICAgICAgIGNvbnN0IE1f VmVjdG9yNCAmIHIKCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9W ZWN0b3IgJiB2LAogICAgICAgIGRvdWJsZSBmCgkpOwoKTV9NYXRyaXggJiAgICAgIG9wZXJhdG9y Kj0gKCAKICAgICAgICBNX01hdHJpeCAmIG0sCiAgICAgICAgZG91YmxlIGYKCSk7CgpNX1ZlY3Rv cjQgJiAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9WZWN0b3I0ICYgciwKICAgICAgICBkb3Vi bGUgZgoJKTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvci8gKAogICAgICAgIGNvbnN0IE1fVmVj dG9yICYgdiwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvci8g KAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbSwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fVmVj dG9yNCAgICAgICBvcGVyYXRvci8gKAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIsCiAgICAg ICAgZG91YmxlIGYKCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3IvPSAoCiAgICAgICAgTV9W ZWN0b3IgJiB2LAogICAgICAgIGRvdWJsZSBmCgkpOwoKTV9NYXRyaXggJiAgICAgIG9wZXJhdG9y Lz0gKAogICAgICAgIE1fTWF0cml4ICYgbSwKICAgICAgICBkb3VibGUgZgoJKTsKCk1fVmVjdG9y NCAmICAgICBvcGVyYXRvci89ICgKICAgICAgICBNX1ZlY3RvcjQgJiByLAogICAgICAgIGRvdWJs ZSBmCgkpOwoKCiAKCk1fVmVjdG9yIE1fQ2xvc2VzdFBvaW50T25MaW5lVG9Qb2ludCAoCiAgICAg ICAgY29uc3QgTV9WZWN0b3IgJiBsaW5lMCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIGxpbmUx LAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgcG9pbnQKCSk7CgpNX1ZlY3RvcjIgTV9DbG9zZXN0 UG9pbnRPbkxpbmVUb1BvaW50ICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiBsaW5lMCwKICAg ICAgICBjb25zdCBNX1ZlY3RvcjIgJiBsaW5lMSwKICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiBw b2ludAoJKTsKCk1fVmVjdG9yIE1fQ3Jvc3NQcm9kdWN0ICgKICAgICAgICBjb25zdCBNX1ZlY3Rv ciAmIGEsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBiCgkpOwoKTV9WZWN0b3I0IE1fUGxhbmVG cm9tVGhyZWVQb2ludHMgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgcDAsCiAgICAgICAgY29u c3QgTV9WZWN0b3IgJiBwMSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHAyCgkpOwoKdm9pZCBN X1Jlbm9ybWFsaXplVFBvaW50cyAoCiAgICAgICAgTGlzdDxNX1ZlY3RvcjI+ICYgdXZzCgkpOwoK dm9pZCBNX1Jlbm9ybWFsaXplVFBvaW50cyAoCiAgICAgICAgTV9WZWN0b3IyICAgKnV2cywKICAg ICAgICBpbnQgICAgICAgICBjb3VudAoJKTsKCnZvaWQgTV9SZW5vcm1hbGl6ZVRQb2ludHMgKAog ICAgICAgIE1fVmVjdG9yMiAgICYgYSwKICAgICAgICBNX1ZlY3RvcjIgICAmIGIKCSk7CgpNX1Zl Y3RvciBNX0dldE5vcm1hbCAoCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gJiB2ZXJ0cwoJ KTsKCk1fVmVjdG9yNCBNX0dldFBsYW5lRXEgKAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+ ICYgdmVydHMKCSk7CgpNX1ZlY3RvciBNX1ZlcnRleEF2ZSAoCiAgICAgICAgY29uc3QgTGlzdDxN X1ZlY3Rvcj4gJiB2ZXJ0cwoJKTsKCk1fTWF0cml4IE1fVmVjdFJvdGF0ZSAoCiAgICAgICAgY29u c3QgTV9WZWN0b3IgJiB0YXJnVmVjdCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIGN1clZlY3Qs CiAgICAgICAgTV9GTE9BVCAgICAgICAgICBhbmdsZQoJKTsKCk1fTWF0cml4IE1fVmVjdFJvdGF0 ZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB0YXJnVmVjdCwKICAgICAgICBjb25zdCBNX1Zl Y3RvciAmIGN1clZlY3QKCSk7CgpNX01hdHJpeCBNX0F4aXNSb3QgKAogICAgICAgIGNvbnN0IE1f VmVjdG9yICYgYXhpcywKICAgICAgICBNX0ZMT0FUICAgICAgICAgIGRlZ3JlZQoJKTsKCmludCBN X1BvaW50T25TZWczRCAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICYgdmVydDEsCiAgICAgICAg Y29uc3QgTV9WZWN0b3IgICYgdmVydDIsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICYgcG9pbnQs CiAgICAgICAgTV9GTE9BVCAgICAgICAgIHRvbAoJKTsKCmludCBNX1BvaW50T25TZWcyRCAoCiAg ICAgICAgY29uc3QgTV9WZWN0b3IyICYgdmVydDEsCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYg dmVydDIsCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgcG9pbnQsCiAgICAgICAgTV9GTE9BVCAg ICAgICAgIHRvbAoJKTsKCnZvaWQgTV9Sb3RhdGVUb1hZUGxhbmUgKAogICAgICAgIGNvbnN0IE1f VmVjdG9yICAmIG5vcm0sCiAgICAgICAgTV9GTE9BVCAgICAgICAgICp4Um90LAogICAgICAgIE1f RkxPQVQgICAgICAgICAqeVJvdAoJKTsKCnZvaWQgTV9Sb3RhdGVUb1lYUGxhbmUgKAogICAgICAg IGNvbnN0IE1fVmVjdG9yICAmIG5vcm0sCiAgICAgICAgTV9GTE9BVCAgICAgICAgICp4Um90LAog ICAgICAgIE1fRkxPQVQgICAgICAgICAqeVJvdAoJKTsKCnZvaWQgTV9Sb3RhdGVUb1haUGxhbmUg KAogICAgICAgIGNvbnN0IE1fVmVjdG9yICAmIG5vcm0sCiAgICAgICAgTV9GTE9BVCAgICAgICAg ICp4Um90LAogICAgICAgIE1fRkxPQVQgICAgICAgICAqelJvdAoJKTsKCmludCBNX0luc2lkZVBv bHkyRCAoCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gICAgJiB2ZXJ0cywKICAgICAgICBj b25zdCBNX1ZlY3RvciAgICAgICAgICAmIGludGVyc2VjdCwKICAgICAgICBpbnQgICAgICAgICAg ICAgICAgICAgICB3aGljaAoJKTsKCmludCBNX0luc2lkZVBvbHkyRCAoCiAgICAgICAgTGlzdDxN X1ZlY3RvcjI+IHZlcnRzLAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIGludGVyc2VjdCwKICAg ICAgICBmbG9hdCAgICAgICAgICAgZXBzCgkpOwoKaW50IE1fSW50ZXJzZWN0TGluZTJkICgKICAg ICAgICBNX1ZlY3RvcjIgICBhMSwKICAgICAgICBNX1ZlY3RvcjIgICBhMiwKICAgICAgICBNX1Zl Y3RvcjIgICBiMSwKICAgICAgICBNX1ZlY3RvcjIgICBiMiwKICAgICAgICBNX1ZlY3RvcjIgICAq YW5zd2VyCgkpOwoKaW50IE1fSW50ZXJzZWN0U2VnMmQgKAogICAgICAgIE1fVmVjdG9yMiAgIGEx LAogICAgICAgIE1fVmVjdG9yMiAgIGEyLAogICAgICAgIE1fVmVjdG9yMiAgIGIxLAogICAgICAg IE1fVmVjdG9yMiAgIGIyLAogICAgICAgIE1fVmVjdG9yMiAgICphbnN3ZXIKCSk7CgppbnQgTV9J bnRlcnNlY3RTZWcyZFBhcmFtICgKICAgICAgICBNX1ZlY3RvcjIgICBhMSwKICAgICAgICBNX1Zl Y3RvcjIgICBhMiwKICAgICAgICBNX1ZlY3RvcjIgICBiMSwKICAgICAgICBNX1ZlY3RvcjIgICBi MiwKICAgICAgICBNX1ZlY3RvcjIgICAqYW5zd2VyLAogICAgICAgIGZsb2F0ICAgICAgICpzLAog ICAgICAgIGZsb2F0ICAgICAgICp0CgkpOwoKaW50IE1fRGVnZW5lcmF0ZVRyaWFuZ2xlICgKICAg ICAgICBjb25zdCBNX1ZlY3RvciAgJiB2MCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2MSwK ICAgICAgICBjb25zdCBNX1ZlY3RvciAgJiB2MgoJKTsKCkxpc3Q8TV9WZWN0b3I+IE1fSW50ZXJz ZWN0UG9seXMgKAogICAgICAgIGNvbnN0IExpc3Q8TV9WZWN0b3I+ICAgICYgcDFWZXJ0cywKICAg ICAgICBjb25zdCBMaXN0PE1fVmVjdG9yPiAgICAmIHAyVmVydHMKCSk7CgpMaXN0PE1fVmVjdG9y PiBNX0ludGVyc2VjdFBsYW5lcyAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcGxlcTEsCiAg ICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcGxlcTIKCSk7CgppbnQgTV9DbGlwTGluZVRvUG9seSAo CiAgICAgICAgTV9WZWN0b3IgICAgICAgICAgICAqIHYwLAogICAgICAgIE1fVmVjdG9yICAgICAg ICAgICAgKiB2MSwKICAgICAgICBjb25zdCBMaXN0PE1fVmVjdG9yPiAmdmVydHMKCSk7CgppbnQg TV9DbGlwU2VnVG9Qb2x5ICgKICAgICAgICBNX1ZlY3RvciAgKnYwLAogICAgICAgIE1fVmVjdG9y ICAqdjEsCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rvcj4gICZ2ZXJ0cwoJKTsKCnZvaWQgTV9H ZXRQbGFuZUNvZGUgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmcGxlcSwKICAgICAgICBpbnQg ICAgICp1LAogICAgICAgIGludCAgICAgKnYsCiAgICAgICAgaW50ICAgICAqdwoJKTsKCmludCBN X0ludGVyc2VjdExpbmVTZWcyZCAoCiAgICAgICAgTV9WZWN0b3IyICAgYTEsCiAgICAgICAgTV9W ZWN0b3IyICAgYjEsCiAgICAgICAgTV9WZWN0b3IyICAgYTIsCiAgICAgICAgTV9WZWN0b3IyICAg YjIsCiAgICAgICAgTV9WZWN0b3IyICAgKnh5CgkpOwoKdm9pZCBNX01ha2VUaGlyZENvb3JkICgK ICAgICAgICBMaXN0PE1fVmVjdG9yPiAgJnZlcnRzLAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAm cGxlcQoJKTsKCmludCBNX0VsZW1JbnNpZGUyZCAoCiAgICAgICAgY29uc3QgTGlzdDxNX1ZlY3Rv cj4gICZjb29yZHMsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICAgICAmdmVydCwKICAgICAgICBj b25zdCBNX1ZlY3RvcjQgICZwbGFuZQoJKTsKCmludCBNX0ludGVyc2VjdFBsYW5lTGluZSAoCiAg ICAgICAgY29uc3QgTV9WZWN0b3I0ICAmcGxhbmUsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICAm cG50MSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAgICZwbnQyLAogICAgICAgIE1fVmVjdG9yICAq b3V0CgkpOwoKaW50IE1fSW5zaWRlUG9seTNEICgKICAgICAgICBjb25zdCBMaXN0PE1fVmVjdG9y PiAgICAmdmVydHMsCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICAmcGxhbmUsCiAgICAgICAgY29u c3QgTV9WZWN0b3IgICZpbnRlcnNlY3QgCgkpOwoKTV9NYXRyaXggTV9BcmJSb3QgKAogICAgICAg IGNvbnN0IE1fVmVjdG9yICAmcDEsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgICZwMiwKICAgICAg ICBmbG9hdCAgICBkZWdyZWUKCSk7CgoKIAoKdm9pZCBsb2FkbWF0cml4ICggCiAgICAgICAgY29u c3QgTV9NYXRyaXggJiB0aGVNYXQKCSk7Cgp2b2lkIG11bHRtYXRyaXggKCAKICAgICAgICBjb25z dCBNX01hdHJpeCAmIHRoZU1hdAoJKTsKCnZvaWQgZ2V0bWF0cml4ICggCiAgICAgICAgTV9NYXRy aXggJiB0aGVNYXQKCSk7Cgp2b2lkIHYzZiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2ZWMK CSk7CgoKIAoKTV9WZWN0b3IgICAgICAgIG9wZXJhdG9yLSAoCiAgICAgICAgY29uc3QgTV9WZWN0 b3IgJiB2CgkpOwoKTV9WZWN0b3IyICAgICAgIG9wZXJhdG9yLSAoCiAgICAgICAgY29uc3QgTV9W ZWN0b3IyICYgdgoJKTsKCk1fVmVjdG9yNCBvcGVyYXRvci0gKAogICAgICAgIGNvbnN0IE1fVmVj dG9yNCAmIHYKCSk7CgpNX1ZlY3RvciAgICAgICAgb3BlcmF0b3ItICgKICAgICAgICBjb25zdCBN X1ZlY3RvciAmIHYwLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdjEKCSk7CgpNX1ZlY3RvcjIg ICAgICAgb3BlcmF0b3ItICgKICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiB2MCwKICAgICAgICBj b25zdCBNX1ZlY3RvcjIgJiB2MQoJKTsKCk1fTWF0cml4ICAgICAgICBvcGVyYXRvci0gKAogICAg ICAgIGNvbnN0IE1fTWF0cml4ICYgbTAsCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtMQoJKTsK Ck1fTWF0cml4IG9wZXJhdG9yIC0gKAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbQoJKTsKCk1f VmVjdG9yNCAgICAgICBvcGVyYXRvci0gKAogICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIwLAog ICAgICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIxCgkpOwoKTV9WZWN0b3IgJiAgICAgIG9wZXJhdG9y LT0gKAogICAgICAgIE1fVmVjdG9yICYgdjAsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiB2MQoJ KTsKCk1fVmVjdG9yMiAmICAgICBvcGVyYXRvci09ICgKICAgICAgICBNX1ZlY3RvcjIgJiB2MCwK ICAgICAgICBjb25zdCBNX1ZlY3RvcjIgJiB2MQoJKTsKCk1fTWF0cml4ICYgICAgICBvcGVyYXRv ci09ICgKICAgICAgICBNX01hdHJpeCAmIG0wLAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbTEK CSk7CgpNX1ZlY3RvcjQgJiAgICAgb3BlcmF0b3ItPSAoCiAgICAgICAgTV9WZWN0b3I0ICYgcjAs CiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcjEKCSk7CgpNX1ZlY3Rvck4gb3BlcmF0b3IgLSAo CiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYQoJKTsKCk1fVmVjdG9yTiBvcGVyYXRvciAtICgK ICAgICAgICBjb25zdCBNX1ZlY3Rvck4gJiBhLAogICAgICAgIGNvbnN0IE1fVmVjdG9yTiAmIGIK CSk7CgpNX1ZlY3Rvck4gJiBvcGVyYXRvci09ICgKICAgICAgICBNX1ZlY3Rvck4gJiBhbnN3ZXIs CiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYgoJKTsKCk1fTWF0cml4MjIgb3BlcmF0b3IgLSAo CiAgICAgICAgY29uc3QgTV9NYXRyaXgyMiAmIGEKCSk7CgpNX01hdHJpeDIyIG9wZXJhdG9yIC0g KAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBhLAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIg JiBiCgkpOwoKTV9NYXRyaXgyMiAmIG9wZXJhdG9yIC09ICgKICAgICAgICBNX01hdHJpeDIyICYg YW5zd2VyLAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBiCgkpOwoKTV9NYXRyaXhNTiBvcGVy YXRvciAtICgKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYQoJKTsKCk1fTWF0cml4TU4gb3Bl cmF0b3IgLSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXhNTiAmIGEsCiAgICAgICAgY29uc3QgTV9N YXRyaXhNTiAmIGIKCSk7CgpNX01hdHJpeE1OICYgb3BlcmF0b3ItPSAoCiAgICAgICAgTV9NYXRy aXhNTiAmIGFuc3dlciwKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYgoJKTsKCgogCgoKIAoK dm9pZCBnbExvYWRNYXRyaXhmICggCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiB0aGVNYXQKCSk7 Cgp2b2lkIGdsTXVsdE1hdHJpeGYgKCAKICAgICAgICBjb25zdCBNX01hdHJpeCAmIHRoZU1hdAoJ KTsKCnZvaWQgZ2xWZXJ0ZXgzZnYgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdmVjCgkpOwoK CiAKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvcisgKCAgCiAgICAgICAgY29uc3QgTV9WZWN0b3Ig JiB2MCwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYxIAoJKTsKCk1fVmVjdG9yMiAgICAgICBv cGVyYXRvcisgKCAgCiAgICAgICAgY29uc3QgTV9WZWN0b3IyICYgdjAsCiAgICAgICAgY29uc3Qg TV9WZWN0b3IyICYgdjEgCgkpOwoKTV9NYXRyaXggICAgICAgIG9wZXJhdG9yKyAoCiAgICAgICAg Y29uc3QgTV9NYXRyaXggJiBtMCwKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0xCgkpOwoKTV9W ZWN0b3I0ICAgICAgIG9wZXJhdG9yKyAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcjAsCiAg ICAgICAgY29uc3QgTV9WZWN0b3I0ICYgcjEKCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3Ir PSAoCiAgICAgICAgTV9WZWN0b3IgJiB2LAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdjEKCSk7 CgpNX1ZlY3RvcjIgJiAgICAgb3BlcmF0b3IrPSAoCiAgICAgICAgTV9WZWN0b3IyICYgdiwKICAg ICAgICBjb25zdCBNX1ZlY3RvcjIgJiB2MQoJKTsKCk1fTWF0cml4ICYgICAgICBvcGVyYXRvcis9 ICgKICAgICAgICBNX01hdHJpeCAmIG0sCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtMQoJKTsK Ck1fVmVjdG9yNCAmICAgICBvcGVyYXRvcis9ICgKICAgICAgICBNX1ZlY3RvcjQgJiByLAogICAg ICAgIGNvbnN0IE1fVmVjdG9yNCAmIHIxCgkpOwoKTV9WZWN0b3JOIG9wZXJhdG9yICsgKAogICAg ICAgIGNvbnN0IE1fVmVjdG9yTiAmIGEsCiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYgoJKTsK Ck1fVmVjdG9yTiAmIG9wZXJhdG9yKz0gKAogICAgICAgIE1fVmVjdG9yTiAmIGFuc3dlciwKICAg ICAgICBjb25zdCBNX1ZlY3Rvck4gJiBiCgkpOwoKTV9NYXRyaXgyMiBvcGVyYXRvciArICgKICAg ICAgICBjb25zdCBNX01hdHJpeDIyICYgYSwKICAgICAgICBjb25zdCBNX01hdHJpeDIyICYgYgoJ KTsKCk1fTWF0cml4MjIgJiBvcGVyYXRvciArPSAoCiAgICAgICAgTV9NYXRyaXgyMiAmIGFuc3dl ciwKICAgICAgICBjb25zdCBNX01hdHJpeDIyICYgYgoJKTsKCk1fTWF0cml4TU4gb3BlcmF0b3Ig KyAoCiAgICAgICAgY29uc3QgTV9NYXRyaXhNTiAmIGEsCiAgICAgICAgY29uc3QgTV9NYXRyaXhN TiAmIGIKCSk7CgpNX01hdHJpeE1OICYgb3BlcmF0b3IrPSAoCiAgICAgICAgTV9NYXRyaXhNTiAm IGFuc3dlciwKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYgoJKTsKCgogCgpNX0ZMT0FUICAg ICAgICAgb3BlcmF0b3IqICgKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHYwLAogICAgICAgIGNv bnN0IE1fVmVjdG9yICYgdjEKCSk7CgpNX0ZMT0FUICAgICAgICAgb3BlcmF0b3IqICgKICAgICAg ICBjb25zdCBNX1ZlY3RvcjQgJiB2MCwKICAgICAgICBjb25zdCBNX1ZlY3RvcjQgJiB2MQoJKTsK Ck1fRkxPQVQgICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIHYw LAogICAgICAgIGNvbnN0IE1fVmVjdG9yMiAmIHYxCgkpOwoKTV9GTE9BVCBvcGVyYXRvciogKAog ICAgICAgIGNvbnN0IE1fVmVjdG9yTiAmIGEsCiAgICAgICAgY29uc3QgTV9WZWN0b3JOICYgYgoJ KTsKCk1fVmVjdG9yICAgICAgICBvcGVyYXRvciogKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYg diwKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0KCSk7CgpNX1ZlY3RvciAgICAgICAgb3BlcmF0 b3IqICgKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0sCiAgICAgICAgY29uc3QgTV9WZWN0b3Ig JiB2CgkpOwoKTV9NYXRyaXggICAgICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9NYXRy aXggJiBtMCwKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG0xCgkpOwoKTV9WZWN0b3I0ICAgICAg IG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9WZWN0b3I0ICYgciwKICAgICAgICBjb25zdCBN X01hdHJpeCAmIG0KCSk7CgpNX1ZlY3RvciAmICAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9W ZWN0b3IgJiB2LAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbSAKCSk7CgpNX01hdHJpeCAmICAg ICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9NYXRyaXggJiBtLAogICAgICAgIGNvbnN0IE1fTWF0 cml4ICYgbTEKCSk7CgpNX01hdHJpeDIyICYgICAgICAgIG9wZXJhdG9yKj0gKAogICAgICAgIE1f TWF0cml4MjIgJiBtLAogICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBtMQoJKTsKCk1fTWF0cml4 TU4gJiAgICAgICAgb3BlcmF0b3IqPSAoCiAgICAgICAgTV9NYXRyaXhNTiAmIG0sCiAgICAgICAg Y29uc3QgTV9NYXRyaXhNTiAmIG0xCgkpOwoKTV9WZWN0b3I0ICYgICAgIG9wZXJhdG9yKj0gKAog ICAgICAgIE1fVmVjdG9yNCAmIHIsCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtCgkpOwoKTV9N YXRyaXgyMiAgICAgIG9wZXJhdG9yKiAoCiAgICAgICAgY29uc3QgTV9NYXRyaXgyMiAmIG0wLAog ICAgICAgIGNvbnN0IE1fTWF0cml4MjIgJiBtMQoJKTsKCk1fTWF0cml4TU4gb3BlcmF0b3IqICgK ICAgICAgICBjb25zdCBNX01hdHJpeE1OICYgYSwKICAgICAgICBjb25zdCBNX01hdHJpeE1OICYg YgoJKTsKCgogCgpNX01hdHJpeCBNX1RyYW5zcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXgg JiBvcmdNYXQKCSk7CgpNX01hdHJpeCBNX0ludmVyc2UgKAogICAgICAgIGNvbnN0IE1fTWF0cml4 ICYgb3JnTWF0CgkpOwoKTV9WZWN0b3JOIE1fR2F1c3NFbGltICgKICAgIGNvbnN0IE1fTWF0cml4 TU4gJmluX21hdCwKICAgIGNvbnN0IE1fVmVjdG9yTiAmaW5feQoJKTsKCk1fTWF0cml4IE1fUm90 YXRlWCAoCiAgICAgICAgTV9GTE9BVCBkZWcKCSk7CgpNX01hdHJpeCBNX1JvdGF0ZVkgKAogICAg ICAgIE1fRkxPQVQgZGVnCgkpOwoKTV9NYXRyaXggTV9Sb3RhdGVaICgKICAgICAgICBNX0ZMT0FU IGRlZwoJKTsKCk1fTWF0cml4IE1fUm90YXRlICgKICAgICAgICBNX0ZMT0FUIHhyb3QsCiAgICAg ICAgTV9GTE9BVCB5cm90LAogICAgICAgIE1fRkxPQVQgenJvdAoJKTsKCk1fTWF0cml4IE1fUm90 YXRlICgKICAgICAgICBNX0ZMT0FUICogcm90cwoJKTsKCk1fTWF0cml4IE1fUm90YXRlICgKICAg ICAgICBjb25zdCBNX1ZlY3RvciAmIHJvdHMKCSk7CgpNX01hdHJpeCBNX1RyYW5zbGF0ZSAoCiAg ICAgICAgTV9GTE9BVCB4LAogICAgICAgIE1fRkxPQVQgeSwKICAgICAgICBNX0ZMT0FUIHoKCSk7 CgpNX01hdHJpeCBNX1RyYW5zbGF0ZSAoCiAgICAgICAgTV9GTE9BVCAqIHRyYW5zCgkpOwoKTV9N YXRyaXggTV9UcmFuc2xhdGUgKAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdHJhbnMKCSk7CgpN X01hdHJpeCBNX1NjYWxlICgKICAgICAgICBNX0ZMT0FUIHgsCiAgICAgICAgTV9GTE9BVCB5LAog ICAgICAgIE1fRkxPQVQgegoJKTsKCk1fTWF0cml4IE1fU2NhbGUgKAogICAgICAgIE1fRkxPQVQg KnNjYWxlCgkpOwoKTV9NYXRyaXggTV9TY2FsZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBz Y2FsZQoJKTsKCk1fTWF0cml4IE1fU2NhbGVBbGwgKAogICAgICAgIE1fRkxPQVQgdmFsdWUKCSk7 CgpNX01hdHJpeCBNX1NoZWFyWFkgKAogICAgICAgIE1fRkxPQVQgeHkKCSk7CgpNX01hdHJpeCBN X1NoZWFyWFogKAogICAgICAgIE1fRkxPQVQgeHoKCSk7CgpNX01hdHJpeCBNX1NoZWFyWVogKAog ICAgICAgIE1fRkxPQVQgeXoKCSk7CgpNX01hdHJpeCBNX1NoZWFyICgKICAgICAgICBNX0ZMT0FU IHh5LAogICAgICAgIE1fRkxPQVQgeHosCiAgICAgICAgTV9GTE9BVCB5egoJKTsKCk1fTWF0cml4 IE1fU2hlYXIgKAogICAgICAgIE1fRkxPQVQgKiBzaGVhcgoJKTsKCk1fTWF0cml4IE1fU2hlYXIg KAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgc2hlYXIKCSk7CgpNX01hdHJpeCBNX01ha2VYZm9y bSAoCiAgICAgICAgaW50ICAgICAqIGdpbWJhbCwKICAgICAgICBNX0ZMT0FUIHR4LAogICAgICAg IE1fRkxPQVQgdHksCiAgICAgICAgTV9GTE9BVCB0eiwKICAgICAgICBNX0ZMT0FUIHJ4LAogICAg ICAgIE1fRkxPQVQgcnksCiAgICAgICAgTV9GTE9BVCByeiwKICAgICAgICBNX0ZMT0FUIHN4LAog ICAgICAgIE1fRkxPQVQgc3ksCiAgICAgICAgTV9GTE9BVCBzegoJKTsKCk1fTWF0cml4IE1fTWFr ZVhmb3JtICgKICAgICAgICBpbnQgICAgICogZ2ltYmFsLAogICAgICAgIE1fRkxPQVQgKiB0LAog ICAgICAgIE1fRkxPQVQgKiByLAogICAgICAgIE1fRkxPQVQgKiBzCgkpOwoKTV9NYXRyaXggTV9N YWtlWGZvcm0gKAogICAgICAgIGludCAgICAgKiBnaW1iYWwsCiAgICAgICAgY29uc3QgTV9WZWN0 b3IgJiB0LAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgciwKICAgICAgICBjb25zdCBNX1ZlY3Rv ciAmIHMKCSk7Cgp2b2lkIE1fTm9ybWFsaXplICgKICAgICAgICBNX1ZlY3RvciAmICB2ZWMKCSk7 CgpNX01hdHJpeCBNX0NvbXBvc2UgKAogICAgICAgIE1fRkxPQVQgc2NhbGVYLAogICAgICAgIE1f RkxPQVQgc2NhbGVZLAogICAgICAgIE1fRkxPQVQgc2NhbGVaLAogICAgICAgIE1fRkxPQVQgc2hl YXJYWSwKICAgICAgICBNX0ZMT0FUIHNoZWFyWFosCiAgICAgICAgTV9GTE9BVCBzaGVhcllaLAog ICAgICAgIE1fRkxPQVQgcm90c1gsCiAgICAgICAgTV9GTE9BVCByb3RzWSwKICAgICAgICBNX0ZM T0FUIHJvdHNaLAogICAgICAgIE1fRkxPQVQgdHJhbnNYLAogICAgICAgIE1fRkxPQVQgdHJhbnNZ LAogICAgICAgIE1fRkxPQVQgdHJhbnNaCgkpOwoKTV9NYXRyaXggTV9Db21wb3NlICgKICAgICAg ICBNX0ZMT0FUICogc2NhbGUsCiAgICAgICAgTV9GTE9BVCAqIHNoZWFyLAogICAgICAgIE1fRkxP QVQgKiByb3RzLAogICAgICAgIE1fRkxPQVQgKiB0cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9z ZSAoCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBzY2FsZSwKICAgICAgICBjb25zdCBNX1ZlY3Rv ciAmIHNoZWFyLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgcm90cywKICAgICAgICBjb25zdCBN X1ZlY3RvciAmIHRyYW5zCgkpOwoKTV9NYXRyaXggTV9Db21wb3NlICgKICAgICAgICBNX0ZMT0FU IHNjYWxlWCwKICAgICAgICBNX0ZMT0FUIHNjYWxlWSwKICAgICAgICBNX0ZMT0FUIHNjYWxlWiwK ICAgICAgICBNX0ZMT0FUIHJvdHNYLAogICAgICAgIE1fRkxPQVQgcm90c1ksCiAgICAgICAgTV9G TE9BVCByb3RzWiwKICAgICAgICBNX0ZMT0FUIHRyYW5zWCwKICAgICAgICBNX0ZMT0FUIHRyYW5z WSwKICAgICAgICBNX0ZMT0FUIHRyYW5zWgoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAg ICAgTV9GTE9BVCAqIHNjYWxlLAogICAgICAgIE1fRkxPQVQgKiByb3RzLAogICAgICAgIE1fRkxP QVQgKiB0cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9WZWN0 b3IgJiBzY2FsZSwKICAgICAgICBjb25zdCBNX1ZlY3RvciAmIHJvdHMsCiAgICAgICAgY29uc3Qg TV9WZWN0b3IgJiB0cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAgICAgaW50ICAg ICAqIG9yZGVyLAogICAgICAgIE1fRkxPQVQgc2NhbGVYLAogICAgICAgIE1fRkxPQVQgc2NhbGVZ LAogICAgICAgIE1fRkxPQVQgc2NhbGVaLAogICAgICAgIE1fRkxPQVQgcm90c1gsCiAgICAgICAg TV9GTE9BVCByb3RzWSwKICAgICAgICBNX0ZMT0FUIHJvdHNaLAogICAgICAgIE1fRkxPQVQgdHJh bnNYLAogICAgICAgIE1fRkxPQVQgdHJhbnNZLAogICAgICAgIE1fRkxPQVQgdHJhbnNaCgkpOwoK TV9NYXRyaXggTV9Db21wb3NlICgKICAgICAgICBpbnQgICAgICogb3JkZXIsCiAgICAgICAgTV9G TE9BVCAqIHNjYWxlLAogICAgICAgIE1fRkxPQVQgKiByb3RzLAogICAgICAgIE1fRkxPQVQgKiB0 cmFucwoJKTsKCk1fTWF0cml4IE1fQ29tcG9zZSAoCiAgICAgICAgaW50ICAgICAqIG9yZGVyLAog ICAgICAgIGNvbnN0IE1fVmVjdG9yICYgc2NhbGUsCiAgICAgICAgY29uc3QgTV9WZWN0b3IgJiBy b3RzLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgdHJhbnMKCSk7CgppbnQgTV9EZWNvbXBvc2Ug KAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbWF0LAogICAgICAgIE1fRkxPQVQgKiBzY2FsZSwK ICAgICAgICBNX0ZMT0FUICogc2hlYXIsCiAgICAgICAgTV9GTE9BVCAqIHJvdHMsCiAgICAgICAg TV9GTE9BVCAqIHRyYW5zLAogICAgICAgIE1fRkxPQVQgKiBwZXJzcAoJKTsKCmludCBNX0RlY29t cG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQsCiAgICAgICAgTV9WZWN0b3IgICYg c2NhbGUsCiAgICAgICAgTV9WZWN0b3IgICYgc2hlYXIsCiAgICAgICAgTV9WZWN0b3IgICYgcm90 cywKICAgICAgICBNX1ZlY3RvciAgJiB0cmFucywKICAgICAgICBNX1ZlY3RvcjQgJiBwZXJzcAoJ KTsKCmludCBNX0RlY29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQsCiAgICAg ICAgaW50ICAgICAqIG9yZGVyLAogICAgICAgIE1fRkxPQVQgKiBzY2FsZSwKICAgICAgICBNX0ZM T0FUICogcm90cywKICAgICAgICBNX0ZMT0FUICogdHJhbnMsCiAgICAgICAgTV9GTE9BVCAqIHBl cnNwCgkpOwoKaW50IE1fRGVjb21wb3NlICgKICAgICAgICBjb25zdCBNX01hdHJpeCAmIG1hdCwK ICAgICAgICBpbnQgICAgICogb3JkZXIsCiAgICAgICAgTV9WZWN0b3IgICYgc2NhbGUsCiAgICAg ICAgTV9WZWN0b3IgICYgcm90cywKICAgICAgICBNX1ZlY3RvciAgJiB0cmFucywKICAgICAgICBN X1ZlY3RvcjQgJiBwZXJzcAoJKTsKCmludCBNX0RlY29tcG9zZU1hdCAoCiAgICAgICAgY29uc3Qg TV9NYXRyaXggJiBtYXQsCiAgICAgICAgTV9GTE9BVCAqIHRyYW5zLAogICAgICAgIE1fRkxPQVQg KiByb3RzLAogICAgICAgIE1fRkxPQVQgKiBzaGVhciwKICAgICAgICBNX0ZMT0FUICogc2NhbGUs CiAgICAgICAgTV9GTE9BVCAqIHBlcnNwCgkpOwoKTV9GTE9BVCBNX0RldDR4NCAoCiAgICAgICAg Y29uc3QgTV9NYXRyaXggJiBtCgkpOwoKTV9NYXRyaXggTV9NYWtlTG9jYWwgKAogICAgICAgIGNv bnN0IE1fVmVjdG9yICYgY2VudGVyLAogICAgICAgIGNvbnN0IE1fVmVjdG9yICYgYXhpcwoJKTsK Ck1fVmVjdG9yIE1fRmluZEdpbWJhbFJvdHMgKAogICAgICAgIGNvbnN0IE1fTWF0cml4ICYgbSwK ICAgICAgICBpbnQgKmdpbWJhbAoJKTsKCnZvaWQgTV9GaW5kR2ltYmFsUm90cyAoCiAgICAgICAg Y29uc3QgTV9NYXRyaXggJiBtLAogICAgICAgIE1fRkxPQVQgKnJvdHMsCiAgICAgICAgaW50ICpn aW1iYWwKCSk7CgpNX01hdHJpeCBNX09ydGhvbm9ybWFsaXplICgKICAgIGNvbnN0IE1fTWF0cml4 ICZtCgkpOwoKCgoKCiMgMjUxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkbWF0aC5oIiAyCgoKZXh0 ZXJuIGNvbnN0IE1fVmVjdG9yIE1fT3JpZ2luOwpleHRlcm4gY29uc3QgTV9NYXRyaXggTV9JZGVu dGl0eTsKCgojIDY0ICJoL05SSFlfU3RkLmgiIDIKCgogCgp0eXBlZGVmIGludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBPTElTSDsKdHlwZWRlZiBzaG9ydCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBaT09MRUFOOwoKIAp0eXBlZGVmIHN0cnVjdCBscmJ0IHsKICAgIGZs b2F0ICAgIGxlZnQ7CiAgICBmbG9hdCAgICByaWdodDsKICAgIGZsb2F0ICAgIGJvdHRvbTsKICAg IGZsb2F0ICAgIHRvcDsKfSBMUkJUOwoKdHlwZWRlZiBzdHJ1Y3QgcmdiIHsKICAgIGZsb2F0ICAg IHI7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIGc7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIGI7 ICAgICAgICAgICAKfSBOUkhZX1JHQjsKCnR5cGVkZWYgc3RydWN0IHJnYmkgewogICAgZmxvYXQg ICAgcjsgICAgICAgICAgIAogICAgZmxvYXQgICAgZzsgICAgICAgICAgIAogICAgZmxvYXQgICAg YjsgICAgICAgICAgIAogICAgZmxvYXQgICAgaTsgICAgICAgICAgIAp9IE5SSFlfUkdCSTsKCnR5 cGVkZWYgc3RydWN0IHJnYmlvIHsKICAgIGZsb2F0ICAgIHI7ICAgICAgICAgICAKICAgIGZsb2F0 ICAgIGc7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIGI7ICAgICAgICAgICAKICAgIGZsb2F0ICAg IGk7ICAgICAgICAgICAKICAgIGZsb2F0ICAgIG87ICAgICAgICAgICAKfSBOUkhZX1JHQklPOwoK IAoKCiAKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIExpc3Q7CnRlbXBsYXRlIDxjbGFzcyBU PiBjbGFzcyBQbHVnaW5FbnRyeTsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFBsdWdpblRhYmxl Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CnRlbXBsYXRlIDxjbGFz cyBUPiBjbGFzcyBOUkhZX2J1bmNoOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTlJIWV9jdXJy ZW50Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTlJIWV9maW5kOwp0ZW1wbGF0ZSA8Y2xhc3Mg VD4gY2xhc3MgTlJIWV9tYXRjaDsKCiAKCiMgNDcgImgvbnJoeXByaXZhdGUuaCIgMgoKIyAxICJo L25yaHlwcml2YXRlLnAiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgpGcmFuZ2VDYWNoZUxvcmQg Kk5SSFlfZ2V0RnJhbmdlQ2FjaGVMb3JkICgpOwoKRnJhbmdlQ2FjaGVMb3JkICpOUkhZX2dldElt YWdlQ2FjaGVMb3JkICgpOwoKCiAKCnZvaWQgTlJIWV9hZGRUb1RoaW5nQWxwaGEgKAogICAgTlJI WV9jbGFzc1RoaW5nICp0eXBlUHRyLAogICAgaW50IHR5cGUKCSk7Cgp2b2lkIE5SSFlfYWRkVG9B cHBhcml0aW9uQWxwaGEgKAogICAgTlJIWV9jbGFzc1RoaW5nICp0eXBlUHRyLAogICAgaW50IHR5 cGUKCSk7Cgp2b2lkIE5SSFlfYWRkVG9PYmplY3RBbHBoYSAoCiAgICBOUkhZX2NsYXNzVGhpbmcg KnR5cGVQdHIsCiAgICBpbnQgdHlwZQoJKTsKCnZvaWQgTlJIWV9yZW1vdmVGcm9tVGhpbmdBbHBo YSAoCiAgICBOUkhZX2NsYXNzVGhpbmcgKnR5cGVQdHIKCSk7Cgp2b2lkIE5SSFlfcmVtb3ZlRnJv bUFwcGFyaXRpb25BbHBoYSAoCiAgICBOUkhZX2NsYXNzVGhpbmcgKnR5cGVQdHIKCSk7Cgp2b2lk IE5SSFlfcmVtb3ZlRnJvbU9iamVjdEFscGhhICgKICAgIE5SSFlfY2xhc3NUaGluZyAqdHlwZVB0 cgoJKTsKCgogCgp2b2lkICBOUkhZX2J1bmNoRnVuY0luaXRDaGFuQnVmZmVyICgKICAgIHZvaWQg CgkpOwoKTlJIWV9jbGFzc0NoYW5uZWwgKipOUkhZX2J1bmNoRnVuY0dldENoYW5CdWZmZXIgKAog ICAgdm9pZCAKCSk7CgpJTlQgTlJIWV9idW5jaEZ1bmNHZXRTaXplQ2hhbkJ1ZmZlciAoCiAgICB2 b2lkIAoJKTsKCnZvaWQgIE5SSFlfYnVuY2hGdW5jUmVzaXplQ2hhbkJ1ZmZlciAoCiAgICBJTlQg bmV3U2l6ZQoJKTsKCnZvaWQgIE5SSFlfY2xlYW51cEJ1bmNoU3R1ZmYgKAogICAgdm9pZCAKCSk7 CgoKIAoKCgoKCgoKCiAKCgogCgoKIAoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCgpaT09MRUFOIE5SSFlfZ2V0RG9WYWx1ZUNoYW5naW5nVGVzdCAoCiAg ICB2b2lkIAoJKTsKClpPT0xFQU4gTlJIWV9zZXREb1ZhbHVlQ2hhbmdpbmdUZXN0ICgKICAgIFpP T0xFQU4gbmV3U3RhdHVzCgkpOwoKCiAKCmNoYXIgKk5SSFlfdG9VVUUgKCAKICAgICAgICBjaGFy ICpvUHRyLCAKICAgICAgICB2b2lkICpwdHIsIAogICAgICAgIGludCBwaGFzZSAKCSk7CgoKIAoK CgoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKTlJIWV9jbGFzc0NoYW5uZWwgKiBOUkhZ X2dldElrQ2hhbm5lbCAoCiAgICBOUkhZX2NsYXNzVGhpbmcgKiB0aGluZwoJKTsKCgoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgoKCgogCgoKCgoKCiAKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoK IAoKCiAKCgogCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA3ODAgImgvbnJoeXByaXZh dGUucCIKCgoKCgoKCiAKClpPT0xFQU4gTlJIWV9yZXNvbHZlQ2xvbmVMaW5rYWdlcyAoCiAgICBO UkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF9vcmlnaW5hbFRoaW5nUHRycywK ICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NUaGluZz4gICAgKmJ1bmNoX2Nsb25lZFRoaW5nUHRy cwoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfY0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK CSk7CgpJTlQgTlJIWV9jQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9jaGFubmVs Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2NoYW5uZWxDb21t YW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFS ICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfY2FsY0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg Km9wZXIKCSk7CgpJTlQgTlJIWV9jYWxjQ29tbWFuZCAoCiAgICAgICAgTGlzdDxIVV9FeHByZXNz aW9uPiBleHBycwoJKTsKCgoKCgoKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfY2FtZXJhQ29tbWFu ZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2NhbWVyYUNvbW1hbmQgKAog ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu ZQoJKTsKCgoKCgoKCgoKCgoKCgoKCiAKCmludCBOUkhZX2NjdXJ2ZUNvbW1hbmQgKAoJCSAgICAg ICBjb25zdCBjaGFyKiBvcGVyCgkpOwoKaW50IE5SSFlfY2N1cnZlQ29tbWFuZCAoCgkJICAgICAg IGNvbnN0IGNoYXIqIG9wZXIsCgkJICAgICAgIExpc3Q8IGNvbnN0IGNoYXIqID4gbGluZQoJKTsK CgogCgpJTlQgTlJIWV9jbG9uZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJ TlQgTlJIWV9jbG9uZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAg IExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKCgogCgpJTlQgTlJIWV9jb2xsaXNp b25Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfY29sbGlzaW9u Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg Q0hBUiAqPiBsaW5lCgkpOwoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfY29sbGlzaW9uQ2hhbkNvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9jb2xsaXNpb25DaGFuQ29t bWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hB UiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2NvcHlDb21tYW5kICgKICAgIGNvbnN0IENIQVIg ICpvcGVyCgkpOwoKSU5UIE5SSFlfY29weUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAg ICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9j cmVhdGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfY3JlYXRl Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg Q0hBUiAqPiBsaW5lCgkpOwoKCgojIDk3NSAiaC9ucmh5cHJpdmF0ZS5wIgoKCgoKCgoKIAoKCgoK CklOVCBOUkhZX2RlYnVnQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBO UkhZX2RlYnVnQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlz dCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKdm9pZCBOUkhZX3NldERlYnVnQ2FjaGVTdGF0ZSAo CiAgICBCT09MRUFOIHN0YXRlCgkpOwoKQk9PTEVBTiBOUkhZX2dldERlYnVnQ2FjaGVTdGF0ZSAo CiAgICB2b2lkCgkpOwoKdm9pZCBOUkhZX3NldERlYnVnTm9ybWFsaXplU3RhdGUgKAogICAgQk9P TEVBTiBzdGF0ZQoJKTsKCkJPT0xFQU4gTlJIWV9nZXREZWJ1Z05vcm1hbGl6ZVN0YXRlICgKICAg IHZvaWQKCSk7CgoKIAoKSU5UIE5SSFlfZGVwZW5kQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAq b3BlcgoJKTsKCklOVCBOUkhZX2RlcGVuZENvbW1hbmQgKAogICAgICAgIExpc3Q8SFVfRXhwcmVz c2lvbj4gZXhwcnMKCSk7CgoKIAoKSU5UIE5SSFlfZGVmaW5lQnV0dG9uQ29tbWFuZCAoCiAgICBj b25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2RlZmluZUJ1dHRvbkNvbW1hbmQgKAogICAg Y29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJ KTsKCgogCgpJTlQgTlJIWV9kZWxldGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkp OwoKSU5UIE5SSFlfZGVsZXRlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVy LAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2R1bXBvYmpD b21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZHVtcG9iakNvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg Kj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfZHVtcHN0cmVhbUNvbW1hbmQgKAogICAgY29u c3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9kdW1wc3RyZWFtQ29tbWFuZCAoCiAgICBjb25z dCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoK CgoKCgogCgpJTlQgTlJIWV9keW5hbWljc0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK CSk7CgpJTlQgTlJIWV9keW5hbWljc0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAq b3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9keW5D aGFuQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2R5bkNoYW5D b21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBD SEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZX2VDb21tYW5kICgKICAgIGNvbnN0IENI QVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAg ICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKCgoKCgoKCgoK CgoKIAoKSU5UIE5SSFlfZWFzZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJ TlQgTlJIWV9lYXNlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAg TGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2ZvcmNlQ2hhbkNvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9mb3JjZUNoYW5Db21tYW5k ICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+ IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfZm9yY2VDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpv cGVyCgkpOwoKSU5UIE5SSFlfZm9yY2VDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAg Km9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCmludCBOUkhZ X2Z1ckNvbW1hbmQgKAogICAgY29uc3QgY2hhciAqb3BlcgoJKTsKCmludCBOUkhZX2Z1ckNvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg Kj4gbGluZQoJKTsKCgogCgppbnQgTlJIWV9tdXNjbGVDb21tYW5kICgKICAgIGNvbnN0IGNoYXIg Km9wZXIKCSk7CgppbnQgTlJIWV9tdXNjbGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAg ICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlf ZnJhbWVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZnJhbWVD b21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBD SEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZX2dlbmVyYXRvckNvbW1hbmQgKAogICAg Y29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9nZW5lcmF0b3JDb21tYW5kICgKICAgIGNv bnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7 CgoKCgoKCiAKClR3aW5lIGZUb1R3aW5lICggCiAgICAgICAgZmxvYXQgICAgICAgdmFsCgkpOwoK SU5UIE5SSFlfZ2VvbVRvSGllckNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJ TlQgTlJIWV9nZW9tVG9IaWVyQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVy LAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9nZW5l cmF0b3JDaGFuQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2dl bmVyYXRvckNoYW5Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBM aXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfZ2hvc3RDb21tYW5kICgK ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfZ2hvc3RDb21tYW5kICgKICAgIGNv bnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7 CgoKIAoKSU5UIE5SSFlfZ2x1ZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7Cgpp bnQgTlJIWV9nbHVlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAg TGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2hlbHBDb21tYW5kICgK ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfaGVscENvbW1hbmQgKAogICAgY29u c3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsK CgogCgoKCgoKSU5UIE5SSFlfaG9tZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7 CgpJTlQgTlJIWV9ob21lQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCklO VCBOUkhZX2luY2x1ZGVDb21tYW5kICgKICAgICAgICBjb25zdCBjaGFyICpvcGVyCgkpOwoKSU5U IE5SSFlfaW5jbHVkZUNvbW1hbmQgKAogICAgICAgIGNvbnN0IGNoYXIgKm9wZXIsCiAgICAgICAg TGlzdCA8Y29uc3QgY2hhciAqPiBsaW5lCgkpOwoKCiAKCgoKCgpJTlQgTlJIWV9pbmZvQ29tbWFu ZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX2luZm9Db21tYW5kICgKICAg IGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUK CSk7CgoKCgoKCiAKCklOVCBOUkhZX2luaXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVy CgkpOwoKSU5UIE5SSFlfaW5pdENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3Bl ciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9pa0NvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9pa0NvbW1hbmQgKAogICAg Y29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJ KTsKCgoKCgoKCgogCgpJTlQgTlJIWV9pbmt5Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3Bl cgoJKTsKCklOVCBOUkhZX2lua3lDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9w ZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZX3Nj YWZmb2xkQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NjYWZm b2xkQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29u c3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9zY2FmZm9sZGNoYW5Db21tYW5k ICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKaW50IE5SSFlfc2NhZmZvbGRjaGFuQ29tbWFu ZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAq PiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2lua3lOb2RlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFS ICAqb3BlcgoJKTsKCklOVCBOUkhZX2lua3lOb2RlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAg ICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJ TlQgTlJIWV9rZXlDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlf a2V5Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29u c3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV9rbGlzdENvbW1hbmQgKAogICAg Y29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9rbGlzdENvbW1hbmQgKAogICAgY29uc3Qg Q0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoK CgoKCgoKCgoKIAoKSU5UIE5SSFlfa21hZ25ldENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9w ZXIKCSk7CgpJTlQgTlJIWV9rbWFnbmV0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAg ICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2xh c3RDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbGFzdENvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg Kj4gbGluZQoJKTsKCgogCgppbnQgTlJIWV9sYXllckNvbW1hbmQgKAogICAgY29uc3QgY2hhciAq b3BlcgoJKTsKCmludCBOUkhZX2xheWVyQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAg ICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX2xh eW91dENvbW1hbmQgKAoJCSAgICAgICBjb25zdCBjaGFyKgoJKTsKCklOVCBOUkhZX2xheW91dENv bW1hbmQgKAoJCSAgICAgICBjb25zdCBDSEFSKiBvcGVyLAoJCSAgICAgICBMaXN0PCBjb25zdCBD SEFSKiA+CgkpOwoKCiAKCklOVCBOUkhZX2xheW91dEFkbWluQ29tbWFuZCAoCgkJCSAgICBjb25z dCBjaGFyKgoJKTsKCklOVCBOUkhZX2xheW91dEFkbWluQ29tbWFuZCAoCgkJCSAgICBjb25zdCBD SEFSKiwKCQkJICAgIExpc3Q8IGNvbnN0IENIQVIqID4KCSk7CgoKIAoKSU5UIE5SSFlfbGlnaHRD b21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbGlnaHRDb21tYW5k ICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+ IGxpbmUKCSk7CgoKCgoKCgoKCgoKCiAKCgoKCgpJTlQgTlJIWV9sc0NvbW1hbmQgKAogICAgY29u c3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9sc0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg ICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQg TlJIWV9tYXBDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbWFw Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg Q0hBUiAqPiBsaW5lCgkpOwoKCgoKCgoKCiAKCklOVCBOUkhZX21hZ25ldENvbW1hbmQgKAogICAg Y29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9tYWduZXRDb21tYW5kICgKICAgIGNvbnN0 IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoK IAoKCgoKCklOVCBOUkhZX21hbmlwdWxhdGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVy CgkpOwoKSU5UIE5SSFlfbWFuaXB1bGF0ZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAg ICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5S SFlfbWF0ZXJpYWxDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlf bWF0ZXJpYWxDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0 IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlf bWV0YW1vcnBoQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX21l dGFtb3JwaENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3Qg PGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfbW9ycGhDb21tYW5kICgK ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKaW50IE5SSFlfbW9ycGhDb21tYW5kICgKICAgIGNv bnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7 CgoKIAoKSU5UIE5SSFlfbW9ycGhGaWxlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJ KTsKCmludCBOUkhZX21vcnBoRmlsZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAq b3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9tZW51 Q29tbWFuZCAoCgkJICAgICAgIGNvbnN0IGNoYXIqIG9wZXIKCSk7CgpJTlQgTlJIWV9tZW51Q29t bWFuZCAoCgkJICAgICAgIGNvbnN0IENIQVIqIG9wZXIsCgkJICAgICAgIExpc3Q8IGNvbnN0IENI QVIqID4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9tZW51QWN0aW9uQ29tbWFuZCAoCgkJICAgICAg IGNvbnN0IGNoYXIqIG9wZXIKCSk7CgpJTlQgTlJIWV9tZW51QWN0aW9uQ29tbWFuZCAoCgkJICAg ICAgIGNvbnN0IENIQVIqIG9wZXIsCgkJICAgICAgIExpc3Q8IGNvbnN0IENIQVIqID4gbGluZQoJ KTsKCgogCgpJTlQgTlJIWV9tYXJibGVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkp OwoKSU5UIE5SSFlfbWFyYmxlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVy LAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX25leHRDb21t YW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfbmV4dENvbW1hbmQgKAog ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu ZQoJKTsKCgogCgpJTlQgTlJIWV9ub2lzZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK CSk7CgpJTlQgTlJIWV9ub2lzZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3Bl ciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKCgoKCklOVCBOUkhZ X29iamVjdENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9vYmpl Y3RDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25z dCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfcGFyc2VDb21tYW5kICgKICAgIGNvbnN0 IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfcGFyc2VDb21tYW5kICgKICAgIGNvbnN0IENIQVIg ICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5U IE5SSFlfcGFydml6Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCmludCBOUkhZ X3BhcnZpekNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3Qg PGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfcGlja0NvbW1hbmQgKAog ICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9waWNrQ29tbWFuZCAoCiAgICBjb25z dCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoK CiAKCklOVCBOUkhZX3BvaW50YXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoK SU5UIE5SSFlfcG9pbnRhdENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwK ICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9yQ29tbWFuZCAo CiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3JDb21tYW5kICgKICAgIGNvbnN0 IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoK CgoKCgoKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3JhZGlhdGVDb21tYW5kICgKICAgIGNvbnN0IENI QVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfcmFkaWF0ZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg ICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQg TlJIWV9yZWFkQ29tbWFuZCAoCiAgICBjb25zdCBjaGFyICAqb3BlcgoJKTsKCklOVCBOUkhZX3Jl YWRDb21tYW5kICgKICAgIGNvbnN0IGNoYXIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25z dCBjaGFyICo+IGxpbmUKCSk7CgoKCgoKCgoKCgogCgpJTlQgTlJIWV9yZWRyYXdDb21tYW5kICgK ICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfcmVkcmF3Q29tbWFuZCAoCiAgICBj b25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkp OwoKCiAKCklOVCBOUkhZX3JlbGF4Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsK CmludCBOUkhZX3JlbGF4Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX3JlcG9zQ29tbWFu ZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3JlcG9zQ29tbWFuZCAoCiAg ICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5l CgkpOwoKCiAKCklOVCBOUkhZX3JlbmFtZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK CSk7CgpJTlQgTlJIWV9yZW5hbWVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9w ZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCgoKCgoKCgoKIAoKSU5U IE5SSFlfcmVzZXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlf cmVzZXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxj b25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfcm90YXRlQ29tbWFuZCAoCiAgICBj b25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3JvdGF0ZUNvbW1hbmQgKAogICAgY29uc3Qg Q0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgog CgpJTlQgTlJIWV9yb3RvQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBO UkhZX3JvdG9Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0 IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3NhdmVDb21t YW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfc2F2ZUNvbW1hbmQgKAog ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu ZQoJKTsKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3NldENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAg Km9wZXIKCSk7CgpJTlQgTlJIWV9zZXRDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAg Km9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKCgoKCiAKCklOVCBOUkhZ X3NoZWxmQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NoZWxm Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg Q0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX3NoZWxmQnV0dG9uQ29tbWFuZCAoCiAgICBj b25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NoZWxmQnV0dG9uQ29tbWFuZCAoCiAgICBj b25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkp OwoKCiAKCklOVCBOUkhZX3NoaWZ0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsK CklOVCBOUkhZX3NoaWZ0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAog ICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCgoKCgpJTlQgTlJIWV9zaG9vdENv bW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9zaG9vdENvbW1hbmQg KAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4g bGluZQoJKTsKCgogCgpJTlQgTlJIWV9zaW53YXZlQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAq b3BlcgoJKTsKCklOVCBOUkhZX3NpbndhdmVDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAg ICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKVHdpbmUgZFRv VHdpbmUgKCAKICAgICAgICBpbnQgICAgICAgICB2YWwKCSk7CgppbnQgcmVjdXJzaXZlU2tlbGV0 b24gKAogICAgICAgIE5SSFlfY2xhc3NUaGluZyAgICAgKm5vZGUsCiAgICAgICAgTlJIWV9jbGFz c1RoaW5nICAgICAqYmVuZHksCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICBjaGFuTnVtCgkp OwoKSU5UIE5SSFlfc2tlbGV0b25Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoK SU5UIE5SSFlfc2tlbGV0b25Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIs CiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKaW50IE5SSFlfc2tpbkNvbW1h bmQgKAoJCSAgICAgIGNvbnN0IGNoYXIqIG9wZXIKCSk7CgppbnQgTlJIWV9za2luQ29tbWFuZCAo CgkJICAgICAgY29uc3QgY2hhciogb3BlciwKCQkgICAgICBMaXN0PCBjb25zdCBjaGFyKiA+IGxp bmUKCSk7CgoKIAoKSU5UIE5SSFlfc2xpZ2h0Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3Bl cgoJKTsKCklOVCBOUkhZX3NsaWdodENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAq b3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV9zb3Vu ZENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV9zb3VuZENvbW1h bmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIg Kj4gbGluZQoJKTsKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfc3RlcHBhcmVudENvbW1hbmQgKAog ICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgppbnQgTlJIWV9zdGVwcGFyZW50Q29tbWFuZCAoCiAg ICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5l CgkpOwoKCiAKCklOVCBOUkhZX3N0ZXJlb0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK CSk7CgpJTlQgTlJIWV9zdGVyZW9Db21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9w ZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfdGV4Q29t bWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3RleENvbW1hbmQgKAog ICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGlu ZQoJKTsKCgoKCgoKCgoKCgoKIAoKSU5UIE5SSFlfdGV4Y2hhbkNvbW1hbmQgKAogICAgY29uc3Qg Q0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV90ZXhjaGFuQ29tbWFuZCAoCiAgICBjb25zdCBDSEFS ICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCiAKCklO VCBOUkhZX3RpbWVjaGFuQ29tbWFuZCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICpvcGVyCgkp OwoKSU5UIE5SSFlfdGltZWNoYW5Db21tYW5kICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAg ICAgICAgICAgICAgICpvcGVyLAogICAgICAgIExpc3QgPGNvbnN0IENIQVIgKj4gICAgIGxpbmUK CSk7CgoKIAoKSU5UIE5SSFlfdG90ZXhDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkp OwoKaW50IE5SSFlfdG90ZXhDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIs CiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoKIAoKSU5UIE5SSFlfc2hhZG93Q29t bWFuZCAoCiAgICBjb25zdCBDSEFSICAqb3BlcgoJKTsKCklOVCBOUkhZX3NoYWRvd0NvbW1hbmQg KAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4g bGluZQoJKTsKCgoKCgoKIAoKSU5UIE5SSFlfc3RyZWFtQ29tbWFuZCAoCiAgICBjb25zdCBDSEFS ICAqb3BlcgoJKTsKCmludCBOUkhZX3N0cmVhbUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAg ICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJI WV9zdHJlYW1TaGFwZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgppbnQgTlJI WV9zdHJlYW1TaGFwZUNvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAg IExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsKCgogCgpJTlQgTlJIWV90cmFja0NvbW1hbmQg KAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV90cmFja0NvbW1hbmQgKAogICAg Y29uc3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJ KTsKCgoKCgoKCgoKCgoKCgoKCiAKCklOVCBOUkhZX3RyYWNrU2hhcGVDb21tYW5kICgKICAgIGNv bnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfdHJhY2tTaGFwZUNvbW1hbmQgKAogICAgY29u c3QgQ0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIgKj4gbGluZQoJKTsK CgoKCgoKIAoKSU5UIE5SSFlfdHJhY2szZENvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIK CSk7CgpJTlQgTlJIWV90cmFjazNkQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpv cGVyLAogICAgTGlzdCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKCgoKCgogCgpJTlQgTlJIWV90 cmF2ZWxDb21tYW5kICgKICAgIGNvbnN0IENIQVIgICpvcGVyCgkpOwoKSU5UIE5SSFlfdHJhdmVs Q29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29uc3Qg Q0hBUiAqPiBsaW5lCgkpOwoKCiAKCklOVCBOUkhZX3R3ZWx2ZWZsZENvbW1hbmQgKAogICAgY29u c3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV90d2VsdmVmbGRDb21tYW5kICgKICAgIGNvbnN0 IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUKCSk7CgoK IAoKSU5UIE5SSFlfdW5kb0NvbW1hbmQgKAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQg TlJIWV91bmRvQ29tbWFuZCAoCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlz dCA8Y29uc3QgQ0hBUiAqPiBsaW5lCgkpOwoKdm9pZCAgTlJIWV9saXN0VW5kb1N0YWNrICgKICAg IGNvbnN0IExpc3Q8VHdpbmU+ICZsaXN0CgkpOwoKCiAKCklOVCBOUkhZX3VzZW1hcENvbW1hbmQg KAogICAgY29uc3QgQ0hBUiAgKm9wZXIKCSk7CgpJTlQgTlJIWV91c2VtYXBDb21tYW5kICgKICAg IGNvbnN0IENIQVIgICAgICAgICAgKm9wZXIsCiAgICBMaXN0IDxjb25zdCBDSEFSICo+IGxpbmUK CSk7CgoKCgoKCgoKIAoKSU5UIE5SSFlfd3JpdGVDb21tYW5kICgKICAgIGNvbnN0IGNoYXIgICpv cGVyCgkpOwoKSU5UIE5SSFlfd3JpdGVDb21tYW5kICgKICAgIGNvbnN0IGNoYXIgICAgICAgICAg Km9wZXIsCiAgICBMaXN0IDxjb25zdCBjaGFyICo+IGxpbmUKCSk7CgoKCgoKCiAKClBPTElTSCBO UkhZX2NyZWF0ZUZyb21PcGVyICgKICAgIGNvbnN0IENIQVIgICpvcGVyLAogICAgY29uc3QgSU5U ICAgdHlwZQoJKTsKClBPTElTSCBOUkhZX2NyZWF0ZUZyb21PcGVyICgKICAgIGNvbnN0IENIQVIg ICpvcGVyLAogICAgaW50IHR5cGUsCiAgICBpbnQgY3JlYXRlQ2hhbkFzU3RhdGljLAogICAgaW50 IGNyZWF0ZUNoYW5Bc0R5bmFtaWMKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgogCgpjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbExpc3QgJk5SSFlfR2V0Q3VycmVudENoYW5uZWxM aXN0ICgpOwoKCgoKCgogCgoKIAoKWk9PTEVBTiBOUkhZX2RlbGV0ZUZyb21PcGVyICgKICAgIGNv bnN0IENIQVIgICAgICAqb3BlciwKICAgIGNvbnN0IElOVCAgICAgICB0eXBlLAogICAgY29uc3Qg Wk9PTEVBTiAgIHJlY3Vyc2l2ZUZsYWcKCSk7CgoKCgoKCiAKCgoKCgoKCgogCgppbnQgTlJIWV9k dW1wb2JqICgKICAgIFR3aW5lIG91dGZpbGVOYW1lLAogICAgZmxvYXQgcmVmRnJhbWUsCiAgICBp bnQgbW90aW9uYmx1ciwKICAgIGZsb2F0IHN0YXJ0LAogICAgZmxvYXQgZW5kLAogICAgTlJIWV9j bGFzc1RoaW5nICpsb2NhbE9iamVjdCwKICAgIE5SSFlfY2xhc3NDYW1lcmEgKmNhbWVyYU9iamVj dCwKICAgIExpc3Q8TlJIWV9jbGFzc01vZGVsICo+IG1vZGVscywKICAgIGJvb2wgZHVtcF91diwK ICAgIHZvaWQgKmNhY2hlCgkpOwoKaW50IE5SSFlfZHVtcGZ1ciAoCiAgICBUd2luZSBvdXRmaWxl TmFtZSwKICAgIGZsb2F0IGZyYW1lLAogICAgTlJIWV9jbGFzc1RoaW5nICpsb2NhbE9iamVjdCwK ICAgIE5SSFlfY2xhc3NDYW1lcmEgKmNhbWVyYU9iamVjdCwKICAgIGZsb2F0IGRlbnNpdHksCiAg ICBOUkhZX2NsYXNzRnVyICpmdXJNb2RlbAoJKTsKCgogCgpOUkhZX2J1bmNoPE5SSFlfY2xhc3ND YW1lcmE+ICpOUkhZX2ZpbmRDYW1lcmEgKAogICAgY29uc3QgY2hhciAqbmFtZQoJKTsKCk5SSFlf Y2xhc3NUaGluZyAqTlJIWV9maW5kVGhpbmcgKAogICAgY29uc3QgY2hhciAqbmFtZSwKICAgIGNv bnN0IGludCB0eXBlLAogICAgY29uc3QgYm9vbCBjcmVhdGUKCSk7Cgp2b2lkICAqTlJIWV9hZGRU aGluZyAoCiAgICBjb25zdCBDSEFSICAqbmFtZSwKICAgIGNvbnN0IElOVCAgIHR5cGUsCiAgICBj b25zdCBJTlQgICByZXR1cm5BcwoJKTsKCgoKCgoKCmJvb2wgTlJIWV9zZXRVbmV4cGFuZGVkRmlu ZCAoCiAgICBib29sIHN0YXRlCgkpOwoKYm9vbCBOUkhZX2dldFVuZXhwYW5kZWRGaW5kICgKCSk7 CgoKIAoKSU5UIE5SSFlfZ2V0TWF4aW11bVBhcm1zICgKICAgIHZvaWQgCgkpOwoKSU5UIE5SSFlf c2V0TWF4aW11bVBhcm1zICgKICAgIGNvbnN0IElOVCAgIG51bWJlcgoJKTsKCnZvaWQgIE5SSFlf ZnJlZUluaXRPcHRpb25QYXJtc01lbW9yeSAoCiAgICB2b2lkIAoJKTsKClpPT0xFQU4gTlJIWV9p bml0T3B0aW9uUGFybXMgKAogICAgY29uc3QgQ0hBUiAgICAgKmNtZCwKICAgIGNsYXNzIE5SSFlf b3B0aW9ucyAqcGFybSwKICAgIGNvbnN0IElOVCAgICAgIG51bWJlcgoJKTsKCgoKCgoKCgogCgpa T09MRUFOIE5SSFlfbGlzdENoYW5uZWxzICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKmZwLAogICAgTlJIWV9idW5jaCA8TlJIWV9jbGFzc1RoaW5nPiAgICAqYnVuY2hfdGhp bmdQdHJzCgkpOwoKdm9pZCAgTlJIWV9saXN0Q2hpbGRyZW4gKAogICAgRklMRSAgICAgICAgICAg ICpmcCwKICAgIE5SSFlfY2xhc3NUaGluZyAqdGhpbmdQdHIKCSk7Cgp2b2lkIE5SSFlfbGlzdENh bWVyYSAoCiAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25z dCBMaXN0PE5SSFlfY2xhc3NDYW1lcmEgKj4gICAgICAmY2FtZXJhTGlzdCwKICAgIGNvbnN0IExp c3Q8VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0TGlnaHQgKAogICAgRklMRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzTGln aHQgKj4gICAgICAmbGlnaHRMaXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoK dm9pZCBOUkhZX2xpc3RIb21lICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg CSpmcCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0hvbWUgKj4gICAgICAmaG9tZUxpc3QsCiAg ICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkIE5SSFlfbGlzdE9iamVjdCAoCiAg ICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBMaXN0PE5S SFlfY2xhc3NPYmplY3QgKj4gICAgICAgJm9iamVjdExpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5l PiAJCQkmbHMKCSk7Cgp2b2lkICBOUkhZX2xpc3RNYXAgKAogICAgRklMRSAgICAgICAgICAgICAg ICAgICAgICAgICpmcCwKICAgIExpc3QgPE5SSFlfY2xhc3NNYXAqPiAgIGxpc3Rfb19tYXBzLAog ICAgY29uc3QgTGlzdDxUd2luZT4gJmxzCgkpOwoKdm9pZCAgTlJIWV9saXN0TWF0ZXJpYWwgKAog ICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICpmcCwKICAgIExpc3QgPE5SSFlfY2xhc3NN YXRlcmlhbCo+ICBsaXN0X29fbWF0ZXJpYWxzLAogICAgY29uc3QgTGlzdDxUd2luZT4gJmxzCgkp OwoKdm9pZCBOUkhZX2xpc3RGdXIgKAogICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzRnVyICo+ICAgICAgICZmdXJMaXN0LAog ICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RNdXNjbGUgKAog ICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxO UkhZX2NsYXNzTXVzY2xlICo+ICAgICAgJm11c2NsZUxpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5l PiAJCQkmbHMKCSk7Cgp2b2lkIE5SSFlfbGlzdExheWVyICgKICAgIEZJTEUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0xheWVyICo+ICAg ICAgICZsYXllckxpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkIE5S SFlfbGlzdER5bmFtaWNzICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpm cCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc0R5bmFtaWNzICo+ICAgJmR5bmFtaWNzTGlzdCwK ICAgIGNvbnN0IExpc3Q8VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0Q29sbGlzaW9u ICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExp c3Q8TlJIWV9jbGFzc0NvbGxpc2lvbiAqPiAgICZjb2xsaXNpb25MaXN0LAogICAgY29uc3QgTGlz dDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RGb3JjZSAoCiAgICBGSUxFICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NGb3Jj ZSAqPiAgICZmb3JjZUxpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lk IE5SSFlfbGlzdEdlbmVyYXRvciAoCiAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAg IAkqZnAsCiAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NHZW5lcmF0b3IgKj4gICAmZ2VuZXJhdG9y TGlzdCwKICAgIGNvbnN0IExpc3Q8VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0Um90 byAoCiAgICBGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBM aXN0PE5SSFlfY2xhc3NSb3RvICo+ICAgJmxzTGlzdCwKICAgIGNvbnN0IExpc3Q8VHdpbmU+IAkJ CSZscwoJKTsKCnZvaWQgTlJIWV9saXN0U291bmQgKAogICAgRklMRSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzU291bmQgKj4gICAmbHNM aXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RJbmt5 ICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExp c3Q8TlJIWV9jbGFzc0lua3kgKj4gICAmbHNMaXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJ JmxzCgkpOwoKdm9pZCBOUkhZX2xpc3RTY2FmZm9sZCAoCiAgICBGSUxFICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAkqZnAsCiAgICBjb25zdCBMaXN0PE5SSFlfY2xhc3NTY2FmZm9sZCAqPiAg ICZsc0xpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkIE5SSFlfbGlz dEtsaXN0ICgKICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNv bnN0IExpc3Q8TlJIWV9jbGFzc0tsaXN0ICo+ICAgJmxzTGlzdCwKICAgIGNvbnN0IExpc3Q8VHdp bmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0VHJhY2sgKAogICAgRklMRSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAJKmZwLAogICAgY29uc3QgTGlzdDxOUkhZX2NsYXNzVHJhY2sgKj4g ICAmbHNMaXN0LAogICAgY29uc3QgTGlzdDxUd2luZT4gCQkJJmxzCgkpOwoKdm9pZCBOUkhZX2xp c3RVc2VNYXAgKAogICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKmZwLAogICAg Y29uc3QgTGlzdDxOUkhZX2NsYXNzVXNlTWFwICo+ICAgJmxzTGlzdCwKICAgIGNvbnN0IExpc3Q8 VHdpbmU+IAkJCSZscwoJKTsKCnZvaWQgTlJIWV9saXN0VGV4ICgKICAgIEZJTEUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCSpmcCwKICAgIGNvbnN0IExpc3Q8TlJIWV9jbGFzc1RleCAqPiAg ICZsc0xpc3QsCiAgICBjb25zdCBMaXN0PFR3aW5lPiAJCQkmbHMKCSk7Cgp2b2lkICBOUkhZX2xp c3RDICgKICAgIEZJTEUgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnAsCiAgICBOUkhZX2J1 bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMKCSk7Cgp2b2lkICBOUkhZ X2xpc3RPICgKICAgIEZJTEUgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnAsCiAgICBOUkhZ X2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMKCSk7Cgp2b2lkICBO UkhZX2xpc3RQYXJlbnQgKAogICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZnAs CiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMKCSk7 Cgp2b2lkICBOUkhZX2xpc3RDaGFubmVsVmFsdWVzICgKICAgIEZJTEUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKmZwLAogICAgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgICAgICAgICAqZnJh bmdlLAogICAgTlJIWV9idW5jaCA8TlJIWV9jbGFzc1RoaW5nPiAgICAqYnVuY2hfdGhpbmdQdHJz CgkpOwoKdm9pZCAgTlJIWV9saXN0Q2hhbm5lbEtleVZhbHVlcyAoCiAgICBGSUxFICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpmcCwKICAgIE5SSFlfSU5UX0ZSQU5HRSAgICAgICAgICAgICAg ICAgKmZyYW5nZSwKICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xhc3NUaGluZz4gICAgKmJ1bmNoX3Ro aW5nUHRycwoJKTsKCnZvaWQgIE5SSFlfbGlzdFNsaWdodCAoCiAgICBGSUxFICpmcCwgCiAgICBj b25zdCBMaXN0IDxUd2luZT4gJmxzCgkpOwoKIyAyODA1ICJoL25yaHlwcml2YXRlLnAiCgoKCiAK CnZvaWQgIE5SSFlfbWF0Y2hGdW5jQWRkQ2hpbGRyZW4gKAogICAgTlJIWV9jbGFzc1RoaW5nICAg ICAgICAgKnBhcmVudCwKICAgIExpc3QgPE5SSFlfY2xhc3NUaGluZyo+ICpjaGlsZHJlbgoJKTsK CnZvaWQgIE5SSFlfbWF0Y2hGdW5jQWRkUGFyZW50cyAoCiAgICBOUkhZX2NsYXNzVGhpbmcgICAg ICAgICAqY2hpbGQsCiAgICBMaXN0IDxOUkhZX2NsYXNzVGhpbmcqPiAqcGFyZW50cwoJKTsKCgog Cgp2b2lkICBxdWF0ZXJuaW9uTGluZWFySW50ZXJwICgKTlJIWV9jbGFzc0NoYW5uZWwgKnhSb3Qs Ck5SSFlfY2xhc3NDaGFubmVsICp5Um90LApOUkhZX2NsYXNzQ2hhbm5lbCAqelJvdCwKZmxvYXQg ICAgICAgZnJhbmdlU3RhcnQsCmZsb2F0ICAgICAgICAgZnJhbmdlRW5kLApMaXN0IDxmbG9hdD4g ICAga2V5TGlzdAoJKTsKCnZvaWQgIHF1YXRlcm5pb25TcGxpbmVJbnRlcnAgKApOUkhZX2NsYXNz Q2hhbm5lbCAqeFJvdCwKTlJIWV9jbGFzc0NoYW5uZWwgKnlSb3QsCk5SSFlfY2xhc3NDaGFubmVs ICp6Um90LApmbG9hdCAgICAgICBmcmFuZ2VTdGFydCwKZmxvYXQgICAgICAgICBmcmFuZ2VFbmQs CkJPT0xFQU4gICAgICAgICAgIG1hdGNoLApMaXN0IDxmbG9hdD4gICAga2V5TGlzdAoJKTsKCgoK CgoKCgoKCiAKCgogCgpOUkhZX2NsYXNzVGhpbmcgKk5SSFlfZ2V0SGllclJvb3RBc1RoaW5nICgK ICAgIHZvaWQKCSk7Cgp2b2lkICBOUkhZX2xpc3RHZW5lYWxvZ3kgKAogICAgRklMRSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqZnAsCiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ ICAgICpzb3VyY2UsCiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpob3dSZWxh dGVkCgkpOwoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgpJTlQgTlJIWV9nZXRQYXJzZURpcmVjdGlvbk1vZGUgKAogICAg dm9pZCAKCSk7CgpJTlQgTlJIWV9zZXRQYXJzZURpcmVjdGlvbk1vZGUgKAogICAgSU5UIHdoaWNo CgkpOwoKWk9PTEVBTiBOUkhZX2dldERlYnVnUHJpbnRFYWNoVG9rZW4gKAogICAgdm9pZCAKCSk7 CgpaT09MRUFOIE5SSFlfc2V0RGVidWdQcmludEVhY2hUb2tlbiAoCiAgICBJTlQgc3RhdHVzCgkp OwoKSU5UIE5SSFlfZ2V0RGVmYXVsdE5hbWVTcGFjZU1vZGUgKAogICAgdm9pZCAKCSk7CgpJTlQg TlJIWV9zZXREZWZhdWx0TmFtZVNwYWNlTW9kZSAoCiAgICBJTlQgd2hpY2gKCSk7CgpJTlQgTlJI WV9nZXRVc2VPbmVBc01vZGUgKAogICAgdm9pZCAKCSk7CgpJTlQgTlJIWV9zZXRVc2VPbmVBc01v ZGUgKAogICAgSU5UIHdoaWNoCgkpOwoKTlJIWV9idW5jaCA8TlJIWV9jbGFzc1RoaW5nPiAqTlJI WV9wYXJzZUludG9EZWZhdWx0TmFtZVNwYWNlICgKICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwK ICAgIGNvbnN0IFpPT0xFQU4gICByZWN1cnNpdmVGbGFnLAogICAgY29uc3QgWk9PTEVBTiAgIHBh cmVudEZsYWcKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKClBPTElTSCBOUkhZX2R1bWJtYXRjaCAo CiAgICBjb25zdCBDSEFSICAqZGVzaXJlZFRva2VuLAogICAgY29uc3QgQ0hBUiAgKnRvTWF0Y2hB Z2FpbnN0VG9rZW4KCSk7CgoKCgoKCgoKCgoKCgoKCgoKCgpaT09MRUFOIE5SSFlfZXhhbWluZVJh bmdlICgKICAgIENIQVIgICAgKnJhbmdlUHRyLAogICAgWk9PTEVBTiAqaXNOdW1lcmljLAogICAg Q0hBUiAgICAqKnN0YXJ0UHRyLAogICAgQ0hBUiAgICAqKmh5cGhlblB0ciwKICAgIENIQVIgICAg KiplbmRQdHIsCiAgICBDSEFSICAgICoqaW5jUHRyLAogICAgSU5UICAgICAqaW5jcmVtZW50Cgkp OwoKdm9pZCAgTlJIWV9jbGVhbnVwSW50ZXJuYWxQYXJzZVN0dWZmICgKICAgIHZvaWQgCgkpOwoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdm9pZCBOUkhZX3BhcnNl SW50b0NoYW5uZWxzICgKICAgIGNvbnN0IGNoYXIgKiBvcGVyLAogICAgQk9PTEVBTiByZWN1cnNp dmUsCiAgICBMaXN0IDxOUkhZX2NsYXNzQ2hhbm5lbCAqPiAmY2hhbm5lbHMKCSk7CgoKCgoKCiAK CnZvaWQgTlJIWV9wdHNMb2FkRm9ybWF0ICgKICAgIGNvbnN0IGNsYXNzIFBUU19JdGVtU3BlYyAm aXRlbSwKICAgIGludCAmd2lkdGgsCiAgICBpbnQgJmhlaWdodAoJKTsKCgogCgp0ZW1wbGF0ZTxj bGFzcyBUPiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8VCAqPiAq JnYKCSk7Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZl Y3RvcjxOUkhZX2NsYXNzVGhpbmcgKj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9h ZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc09iamVjdCAqPiAqJnYKCSk7 Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3RvcjxO UkhZX2NsYXNzQ2FtZXJhICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVt TGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NMaWdodCAqPiAqJnYKCSk7Cgp0ZW1w bGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3RvcjxOUkhZX2Ns YXNzTW9kZWwgKj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRk cmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc1RyYWNrICo+IComdgoJKTsKCnRlbXBsYXRlPD4g dm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NIb21l ICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAog ICAgdmVjdG9yPE5SSFlfY2xhc3NSb3RvICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZ X2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NUZXggKj4gKiZ2Cgkp OwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8 TlJIWV9jbGFzc01hdGVyaWFsICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJ dGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NNYXAgKj4gKiZ2CgkpOwoKdGVt cGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9j bGFzc1VzZU1hcCAqPiAqJnYKCSk7Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RB ZGRyZXNzICgKICAgIHZlY3RvcjxOUkhZX2NsYXNzU291bmQgKj4gKiZ2CgkpOwoKdGVtcGxhdGU8 PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc0R5 bmFtaWNzICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJl c3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NGb3JjZSAqPiAqJnYKCSk7Cgp0ZW1wbGF0ZTw+IHZv aWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3RvcjxOUkhZX2NsYXNzR2VuZXJh dG9yICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3Mg KAogICAgdmVjdG9yPE5SSFlfY2xhc3NDb2xsaXNpb24gKj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2 b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9jbGFzc0lua3kg Kj4gKiZ2CgkpOwoKdGVtcGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAg ICB2ZWN0b3I8TlJIWV9jbGFzc1NjYWZmb2xkICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBO UkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NBcHBhcml0aW9u ICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVtTGlzdEFkZHJlc3MgKAog ICAgdmVjdG9yPE5SSFlfY2xhc3NSb290ICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZ X2xvYWRJdGVtTGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NLbGlzdCAqPiAqJnYK CSk7Cgp0ZW1wbGF0ZTw+IHZvaWQgTlJIWV9sb2FkSXRlbUxpc3RBZGRyZXNzICgKICAgIHZlY3Rv cjxOUkhZX2NsYXNzRnVyICo+IComdgoJKTsKCnRlbXBsYXRlPD4gdm9pZCBOUkhZX2xvYWRJdGVt TGlzdEFkZHJlc3MgKAogICAgdmVjdG9yPE5SSFlfY2xhc3NNdXNjbGUgKj4gKiZ2CgkpOwoKdGVt cGxhdGU8PiB2b2lkIE5SSFlfbG9hZEl0ZW1MaXN0QWRkcmVzcyAoCiAgICB2ZWN0b3I8TlJIWV9j bGFzc0xheWVyICo+IComdgoJKTsKCgogCgpOUkhZX2NsYXNzVGltZSAqTlJIWV9nZXRUaW1lTG9y ZCAoCiAgICB2b2lkIAoJKTsKCkxpc3QgPE5SSFlfRlJBTkdFPiBOUkhZX3BhcnNlRnJhbmdlICgK ICAgIGNvbnN0IENIQVIgICphc2NpaQoJKTsKCgoKCgoKCgoKCiAKCmNvbnN0IENIQVIgKk5SSFlf cHJpbnRab29sZWFuICgKICAgIGNvbnN0IFpPT0xFQU4gICBzdGF0dXMKCSk7CgpJTlQgTlJIWV9w YXJzZVpvb2xlYW4gKAogICAgY29uc3QgQ0hBUiAgKmFzY2lpCgkpOwoKY29uc3QgQ0hBUiAqTlJI WV9wcmludFBvbGlzaCAoCiAgICBjb25zdCBQT0xJU0ggICAgc3RhdHVzCgkpOwoKSU5UIE5SSFlf cGFyc2VQb2xpc2ggKAogICAgY29uc3QgQ0hBUiAgKmFzY2lpCgkpOwoKY29uc3QgY2hhciAqTlJI WV9wcmludE9wdGlvblR5cGUgKAogICAgaW50IHR5cGUKCSk7Cgpjb25zdCBjaGFyICpOUkhZX3By aW50VGhpbmdUeXBlICgKICAgIGludCB0eXBlCgkpOwoKY29uc3QgQ0hBUiAqTlJIWV9wcmludE9w dGlvblBhcnNlRXJyb3IgKAogICAgY29uc3QgSU5UICAgY29kZQoJKTsKCmNvbnN0IENIQVIgKk5S SFlfcHJpbnRPcGVyYW5kUGFyc2VFcnJvciAoCiAgICBjb25zdCBJTlQgICBjb2RlCgkpOwoKY29u c3QgQ0hBUiAqTlJIWV9wcmludFJlYWwgKAogICAgUkVBTCAgICBudW1iZXIKCSk7Cgpjb25zdCBD SEFSICpOUkhZX3ByaW50UmVhbEZyYW5nZSAoCiAgICBSRUFMICAgIHN0YXJ0CgkpOwoKY29uc3Qg Q0hBUiAqTlJIWV9wcmludFJlYWxGcmFuZ2UgKAogICAgUkVBTCAgICBzdGFydCwKICAgIFJFQUwg ICAgZW5kCgkpOwoKY29uc3QgQ0hBUiAqTlJIWV9wcmludFJlYWxGcmFuZ2UgKAogICAgY29uc3Qg TlJIWV9SRUFMX0ZSQU5HRSAgJmZyYW5nZQoJKTsKCmNvbnN0IENIQVIgKk5SSFlfcHJpbnRSZWFs RnJhbmdlICgKICAgIFJFQUwgICAgc3RhcnQsCiAgICBSRUFMICAgIGVuZCwKICAgIFJFQUwgICAg aW5jCgkpOwoKdm9pZCAgTlJIWV9wcmludE1hdHJpeCAoCiAgICBGSUxFICAgICAgICAqZnAsCiAg ICBJTlQgICAgICAgICBpbmRlbnQsCiAgICBaT09MRUFOICAgICBkb0JlZ2luRW5kLAogICAgTV9N YXRyaXggICAgbWF0CgkpOwoKdm9pZCAgTlJIWV9wcmludE1hdHJpeCAoCiAgICBGSUxFICAgICAg ICAqZnAsCiAgICBJTlQgICAgICAgICBpbmRlbnQsCiAgICBaT09MRUFOICAgICBkb0JlZ2luRW5k LAogICAgZmxvYXQgICAgICAgbWF0WzRdWzRdCgkpOwoKQk9PTEVBTiBOUkhZX21hdHJpeElkZW50 aXR5ICgKICAgIGNvbnN0IE1fTWF0cml4ICZtCgkpOwoKQk9PTEVBTiBOUkhZX21hdHJpeElkZW50 aXR5ICgKICAgIGNvbnN0IE1fTWF0cml4ICZtLAogICAgZmxvYXQgdG9sZXJhbmNlCgkpOwoKQk9P TEVBTiBOUkhZX21hdHJpY2VzRXF1YWwgKAogICAgY29uc3QgTV9NYXRyaXggJm0xLAogICAgY29u c3QgTV9NYXRyaXggJm0yCgkpOwoKQk9PTEVBTiBOUkhZX21hdHJpY2VzQ2xvc2UgKAogICAgY29u c3QgTV9NYXRyaXggJm0xLAogICAgY29uc3QgTV9NYXRyaXggJm0yLAogICAgZmxvYXQgdG9sZXJh bmNlCgkpOwoKTV9NYXRyaXggTlJIWV9vcnRob05vcm1hbGl6ZSAoCiAgICBjb25zdCBjaGFyICp0 eXBlLAogICAgY29uc3QgTV9WZWN0b3IgJm9yaWdpbiwKICAgIE1fVmVjdG9yIHYxLAogICAgTV9W ZWN0b3IgdjIKCSk7CgpNX1ZlY3RvciBOUkhZX3JvdFNtb290aENoZWNrICgKICAgTV9WZWN0b3Ig cm90cywgCiAgIE1fVmVjdG9yIHByZXZSb3QKCSk7Cgp2b2lkICBOUl9zdmRjbXAgKApkb3VibGUg KiphLCAKaW50IG0sIAppbnQgbiwgCmRvdWJsZSAqdywgCmRvdWJsZSAqKnYKCSk7Cgp2b2lkICBO Ul9zdmJrc2IgKApkb3VibGUgKip1LCAKZG91YmxlICp3LCAKZG91YmxlICoqdiwgCmludCBtLCAK aW50IG4sIApkb3VibGUgKmIsCmRvdWJsZSAqeAoJKTsKCmRvdWJsZSAqTlJfZHZlY3RvciAoCmlu dCBubCwKaW50IG5oCgkpOwoKdm9pZCBOUl9mcmVlX2R2ZWN0b3IgKApkb3VibGUgKnYsIAppbnQg bmwsIAppbnQgbmgKCSk7Cgpkb3VibGUgKipOUl9kbWF0cml4ICgKaW50IG5ybCwgCmludCBucmgs IAppbnQgbmNsLCAKaW50IG5jaAoJKTsKCmZsb2F0ICoqTlJfZm1hdHJpeCAoCmludCBucmwsIApp bnQgbnJoLCAKaW50IG5jbCwgCmludCBuY2gKCSk7Cgp2b2lkICBOUl9mcmVlX2RtYXRyaXggKAog IGRvdWJsZSAqKm0sIAogIGludCBucmwsIAogIGludCBucmgsIAogIGludCBuY2wsIAogIGludCBu Y2gKCSk7CgpmbG9hdCAqTlJfdmVjdG9yICgKICAgIGludCBubCwKICAgIGludCBuaAoJKTsKCnZv aWQgTlJfZnJlZV92ZWN0b3IgKAogICAgZmxvYXQgKnYsCiAgICBpbnQgbmwsCiAgICBpbnQgbmgK CSk7CgpCT09MRUFOIE5SX2Nob2xkYyAoCiAgICBkb3VibGUgKiphLCAKICAgIGludCBuLCAKICAg IGRvdWJsZSAqcAoJKTsKCnZvaWQgTlJfbHVkY21wICgKICAgIGludCBuLAogICAgaW50ICppbmR4 LAogICAgZG91YmxlICoqYSwKICAgIGZsb2F0ICpkCgkpOwoKTV9NYXRyaXggTlJIWV9zcGVjdWxh ciAoCiAgICBOUkhZX2NsYXNzT2JqZWN0ICpsaWdodCwKICAgIGNvbnN0IE1fTWF0cml4ICZyZWZs ZWN0b3JNYXQsCiAgICBOUkhZX2NsYXNzT2JqZWN0ICpmcm9tCgkpOwoKTV9NYXRyaXggTlJIWV9u b3JtYWwgKAogICAgTlJIWV9jbGFzc09iamVjdCAqbGlnaHQsCiAgICBjb25zdCBNX01hdHJpeCAm cmVmbGVjdG9yTWF0CgkpOwoKTV9NYXRyaXggTlJIWV9ncm91cE1hdHJpeCAoCiAgICBjbGFzcyBT aGFwZSAqc2hhcGUsCiAgICBjb25zdCBUd2luZSAmZ3JvdXAKCSk7CgoKIAoKCiAKCgoKCgoKCgoK CgojIDQ4ICJoL25yaHlwcml2YXRlLmgiIDIKCgoKIyAyOSAiaC9OUkhZLmgiIDIKCgogCgoKCiAK CiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoK CgojIDIwMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyAz NyAiaC9OUkhZLmgiIDIKCgogCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCiAKCgogCnN0cnVj dCBOUkhZX0NPTU1BTkQgCiAgICB7CiAgICBjb25zdCBjaGFyICAgICAgKm5hbWU7ICAgICAgICAg ICAKICAgIGNvbnN0IGNoYXIgICAgICAqYWthOyAgICAgICAgICAgIAogICAgSU5UICAgICAgICAg ICAgIHVzZUZvckFjY2VzczsgICAgCgogICAgIAogICAgdW5pb24gewogICAgICAgIGludCAgICAg KCpmdW5jT2ZXb3JkcykoY29uc3QgY2hhciAqLCBMaXN0PGNvbnN0IGNoYXIgKj4pOwogICAgICAg IGludCAgICAgKCpmdW5jT2ZFeHBycykoTGlzdDxIVV9FeHByZXNzaW9uPik7CgogICAgICAgIH0g eDsKCgoKCgoKICAgICAKICAgIElOVCAgICAgICAgICAgICAoKmluaXRpYWxpemVGdW5jKShjb25z dCBjaGFyICopOwogICAgY29uc3QgY2hhciAgICAgICpvcGVyOyAgICAgICAgICAgCiAgICBjb25z dCBjaGFyICAgICAgKmhlbHA7ICAgICAgICAgICAKCiAgICBlbnVtIHsgV09SRFMsIEVYUFJTIH0g dHlwZTsgICAgICAKICAgIH07CiAKCiAKCgp0eXBlZGVmIHN0cnVjdCBBc2NpaU9iakNoYW4gewog ICAgVHdpbmUgICB0aGluZzsKICAgIFR3aW5lICAgY2hhbm5lbDsKICAgIH0gQVNDSUlfT0JKX0NI QU47CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUgKEFTQ0lJX09CSl9DSEFOKSB7IHJldHVy biAoIkFTQ0lJX09CSl9DSEFOIik7IH07CgogCgoKCgoKCiAKCiAKCgoKCgoKCgoKCiAKCgoKIAog CmNvbnN0IGludCBOUkhZX1dPUkxEU1RBVFVTX0RPX05PVEhJTkcgICAgICAgID0gMHgwOwpjb25z dCBpbnQgTlJIWV9XT1JMRFNUQVRVU19NVVNUX1JFTUFLRV9XT1JMRCA9ICgxPDwwKTsKY29uc3Qg aW50IE5SSFlfV09STERTVEFUVVNfTVVTVF9SRURSQVdfV09STEQgPSAoMTw8MSk7CmNvbnN0IGlu dCBOUkhZX1dPUkxEU1RBVFVTX01VU1RfTUFTSyAgICAgICAgID0gKAogICAgTlJIWV9XT1JMRFNU QVRVU19NVVNUX1JFTUFLRV9XT1JMRCB8CiAgICBOUkhZX1dPUkxEU1RBVFVTX01VU1RfUkVEUkFX X1dPUkxEKTsKY29uc3QgaW50IE5SSFlfV09STERTVEFUVVNfTVVTVF9ET19FVkVSWVRISU5HPSBO UkhZX1dPUkxEU1RBVFVTX01VU1RfTUFTSzsKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICJoL05SSFkucCIgMQogCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgpjbGFzcyBOUkhZX1dvcmxkICpOUkhZQUNDRVNTX1JlYWQgKAog ICAgY29uc3QgQ0hBUiAgKmluY29taW5nRmlsZW5hbWUKICk7Cgp2b2lkIE5SSFlBQ0NFU1NfRnJl ZURhdGEgKAogICAgTlJIWV9Xb3JsZCAqd29ybGQKICk7CgpCT09MRUFOIE5SSFlBQ0NFU1NfQ2hv cmNoYW4gKAogICAgY2xhc3MgTlJIWV9Xb3JsZCAqIHdvcmxkUHRyLAogICAgZmxvYXQgZnJhbWUs CiAgICBmbG9hdCByZWZGcmFtZSwKICAgIGNvbnN0IFR3aW5lICYgdGFyZ2V0CiApOwoKQk9PTEVB TiBOUkhZQUNDRVNTX0Nob3JDYW1lcmEgKAogICAgY2xhc3MgTlJIWV9Xb3JsZCAqIHdvcmxkUHRy LAogICAgZmxvYXQgZnJhbWUsCiAgICBmbG9hdCByZWZGcmFtZSwKICAgIGNvbnN0IFR3aW5lICYg dGFyZ2V0CiApOwoKaW50IE5SSFlBQ0NFU1NfQ2hvck9iamVjdCAoCiAgICBOUkhZX1dvcmxkICog d29ybGRQdHIsCiAgICBmbG9hdCBmcmFtZSwKICAgIGNvbnN0IFR3aW5lICYgb2JqTmFtZSwKICAg IGludCBtb3Rpb25ibHVyLAogICAgZmxvYXQgc2h1dHRlclN0YXJ0LAogICAgZmxvYXQgc2h1dHRl ckVuZCwKICAgIGNvbnN0IFR3aW5lICYgZ2VvbSwKICAgIGNvbnN0IFR3aW5lICYgbmV4dEdlb20s CiAgICBjb25zdCBUd2luZSAmIGdyb3VwLAogICAgY29uc3QgVHdpbmUgJiByZXNvbHV0aW9uLAog ICAgY29uc3QgVHdpbmUgJiBzaGFwZUZpbGUKICk7CgoKCgoKQk9PTEVBTiBOUkhZQUNDRVNTX0No b3JkdW1wICgKICAgIE5SSFlfV29ybGQgKndvcmxkUHRyLAogICAgY29uc3QgVHdpbmUgJmZpbGVu YW1lLAogICAgZmxvYXQgZnJhbWUsCiAgICBjb25zdCBUd2luZSAmY2FtTmFtZSwKICAgIEZJTEUg KmZwLAogICAgaW50IG9iamRpc3AsCiAgICBpbnQgbW90aW9uYmx1ciwKICAgIGZsb2F0IHNodXR0 ZXJTdGFydCwKICAgIGZsb2F0IHNodXR0ZXJFbmQsCiAgICBCT09MRUFOIGxlZnRleWUsCiAgICBC T09MRUFOIHJpZ2h0ZXllLAogICAgQk9PTEVBTiBtYXRlcmlhbHMsCiAgICBCT09MRUFOIG1hcHMs CiAgICBCT09MRUFOIGxpZ2h0c09ubHksCiAgICBCT09MRUFOIG9iamVjdHNPbmx5LAogICAgY29u c3QgTGlzdDxUd2luZT4gJmRlZm9ybWluZ09iamVjdHMKICk7CgpCT09MRUFOIE5SSFlBQ0NFU1Nf VmNtZCAoCiAgICBOUkhZX1dvcmxkICp3b3JsZFB0ciwKICAgIGZsb2F0IGZyYW1lLAogICAgY29u c3QgVHdpbmUgJmNvbW1hbmQsCiAgICBjb25zdCBUd2luZSAmYXJncwogKTsKCgogCgp2b2lkICAg IE5SSFlfU2F2ZUNoYW5uZWwgKAogICAgICAgICAgICBzdHJ1Y3QgTlJIWV9jbGFzc0NoYW5uZWwg KmNoYW4sCiAgICAgICAgICAgIEJPT0xFQU4gbWFrZUtleQogKTsKCnZvaWQgICAgTlJIWV9TYXZl Q2hhbm5lbHMgKAogICAgICAgICAgICBjb25zdCBMaXN0PGNsYXNzIE5SSFlfY2xhc3NDaGFubmVs ICo+ICZjaGFubmVscywKICAgICAgICAgICAgQk9PTEVBTiBtYWtlS2V5CiApOwoKdm9pZCAgICBO UkhZX1Jlc2V0Q2hhbm5lbCAoCiAgICAgICAgICAgIHN0cnVjdCBOUkhZX2NsYXNzQ2hhbm5lbCAq Y2hhbgogKTsKCnZvaWQgICAgTlJIWV9SZXNldENoYW5uZWxzICgKICAgICAgICAgICAgY29uc3Qg TGlzdDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqPiAmY2hhbm5lbHMKICk7CgoKIAoKCiAKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgp2b2lkIE5SSFlfQ29tcHV0ZVRvRG8gKAogICAgTlJI WV9jbGFzc1RoaW5nICp0aGluZ1B0ciwKICAgIGNvbnN0IFR3aW5lICZvbmx5LAogICAgY29uc3Qg VHdpbmUgJm5vdCwKICAgIGNvbnN0IFR3aW5lICZmdWxsLAogICAgTGlzdDxzaG9ydD4gJnRvRG9M aXN0CiApOwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCnZvaWQgIE5SSFlfQ2xlYW51cEF0RXhpdCAo CiAgICB2b2lkIAogKTsKCgoKCgoKIAoKCgoKCk5SSFlfQ09NTUFORCAqTlJIWV9HZXRBbmRJbml0 Q29tbWFuZFRhYmxlICgKICAgIHZvaWQgCiApOwoKTlJIWV9DT01NQU5EICpOUkhZX0dldENvbW1h bmRUYWJsZSAoCiAgICB2b2lkIAogKTsKCk5SSFlfQ09NTUFORCAqTlJIWV9Mb2FkT3V0c2lkZUNv bW1hbmRUYWJsZSAoCiAgICBOUkhZX0NPTU1BTkQgICAgKmNtZFB0cgogKTsKCmludCBOUkhZX0lu aXRpYWxpemVDbWRQYXJtcyAoCiAgICBjb25zdCBjaGFyICAqY2FsbGluZ0Z1bmMsCiAgICBjb25z dCBjaGFyICAqb3BlciwKICAgIGNsYXNzIE5SSFlfb3B0aW9ucyAqcGFybSwKICAgIGludCAgICAg ICAgIHBhcm1MZW4KICk7CgpJTlQgTlJIWV9QYXJzZU9wZXJhbmQgKAogICAgRklMRSAgICAgICAg ICAgICAgICAqZnAsCiAgICBjb25zdCBDSEFSICAgICAgICAgICpvcGVyLAogICAgTGlzdCA8Y29u c3QgQ0hBUio+ICBsaW5lLAogICAgTlJIWV9jbGFzc0NvbW1hbmQgICAqQ21kCiApOwoKSU5UIE5S SFlfUGFyc2VPcHRpb25zICgKICAgIEZJTEUgICAgICAgICAgICAgICAgKmZwLAogICAgY29uc3Qg Q0hBUiAgICAgICAgICAqb3BlciwKICAgIExpc3QgPGNvbnN0IENIQVIqPiAgbGluZSwKICAgIGNs YXNzIE5SSFlfY2xhc3NDb21tYW5kICogQ21kCiApOwoKY29uc3QgQ0hBUiAqTlJIWV9QcmludENv bW1hbmRDbGFzc1JldHVybiAoCiAgICBjb25zdCBJTlQgICBzdGF0dXMKICk7Cgp2b2lkICAqTlJI WV9DcmVhdGVUaGVDb21tYW5kRnJvbU91dHNpZGUgKAogICAgQ0hBUiAgICAqYXNjaWksCiAgICBJ TlQgICAgIHRha2VPcGVyYW5kcywKICAgIElOVCAgICAgdGFrZU9wdGlvbnMsCiAgICBJTlQgICAg IHRha2VFeHByZXNzaW9uLAogICAgQ0hBUiAgICAqY21kTmFtZSwKICAgIHZvaWQgICAgICpwYXJt cywKICAgIElOVCAgICAgbnVtYmVyUGFybXMKICk7Cgp2b2lkICBOUkhZX01vZGlmeUNvbW1hbmRU YWJsZUZvckFjY2VzcyAoCiAgICB2b2lkIAogKTsKCk5SSFlfQ09NTUFORCAqTlJIWV9GaW5kQ29t bWFuZCAoCiAgICBjb25zdCBDSEFSICAqdG9CZUZvdW5kCiApOwoKSU5UIE5SSFlfR2V0RmluZENv bW1hbmRBbWJpZ3VvdXNFcnJvciAoCiAgICB2b2lkIAogKTsKCnZvaWQgIE5SSFlfUHJpbnRGaW5k Q29tbWFuZEFtYmlndW91c0Vycm9yICgKICAgIEZJTEUgICAgICAgICpmcCwKICAgIElOVCAgICAg ICAgIGluZGVudCwKICAgIGNvbnN0IENIQVIgICp0b0JlRm91bmQKICk7CgoKIAoKSU5UIE5SSFlf UHJvZ3JhbW1pbmdFcnJvckNoZWNrICgKICAgIHZvaWQgCiApOwoKSU5UIE5SSFlfQ2hlY2tPcHRp b25QYXJzZUVycm9yUHJpbnRpbmdTdGF0ZW1lbnQgKAogICAgdm9pZCAKICk7CgpJTlQgTlJIWV9D aGVja09wZXJhbmRQYXJzZUVycm9yUHJpbnRpbmdTdGF0ZW1lbnQgKAogICAgdm9pZCAKICk7CgoK IAoKSFVfVmFsdWUgTlJIWV9TaGlmdEZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAg ICAgICAgICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgICAgICAmZ2VuZXJpY1N0YXRl CiApOwoKSFVfVmFsdWUgTlJIWV9TaGlmdFhGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAg ICAgICAgICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7 CgpIVV9WYWx1ZSBOUkhZX0NoYW5WYWxGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAg ICAgICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgICAgICYgZ2VuZXJpY1N0YXRlCiAp OwoKSFVfVmFsdWUgTlJIWV9DaGFuVmFsWEZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAg ICAgICAgICAgICAgYXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoK SFVfVmFsdWUgTlJIWV9DYnJ0RnVuY3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAg ICAgICAgYXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFs dWUgTlJIWV9TaWduRnVuY3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgICAg YXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFsdWUgTlJI WV9Ob3JtUm90RnVuY3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgICAgYXJn LAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFsdWUgTlJIWV9T bW9vdGhSb3RGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgICBhcmcs CiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX05v cm1GdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgIGFyZywKICAgIEhV X1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfQXZlckZyYW5n ZUZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgIGFyZywKICAgIEhV X1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfQXZlck1pbk1h eEZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgIGFyZywKICAgIEhV X1BhcnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfQ2hhblZlbEZ1 bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgICBhcmcsCiAgICBIVV9Q YXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX0NoYW5BY2NlbEZ1 bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgIGFyZywKICAgIEhVX1Bh cnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfUG9zaXRpb254RnVu Y3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgICAgICAgICBhcmcsCiAgICBI VV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX1Bvc2l0aW9u eUZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgIGFyZywKICAgIEhVX1Bh cnNlclN0YXRlICAmIGdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5SSFlfUG9zaXRpb256RnVu Y3Rpb24gKAogICAgTGlzdDxIVV9WYWx1ZT4gICAgICAgICAgICAgYXJnLAogICAgSFVfUGFyc2Vy U3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKSFVfVmFsdWUgTlJIWV9HZXRNYXRyaXhGdW5jdGlv biAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgICAgICAgIGFyZywKICAgIEhVX1Bh cnNlclN0YXRlICAgICAgICZnZW5lcmljU3RhdGUKICk7CgoKCgoKSFVfVmFsdWUgTlJIWV9EaXN0 YW5jZUZ1bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+ICAgICAgICAgICAgICAgICAgICAgYXJn LAogICAgSFVfUGFyc2VyU3RhdGUgICAgICAgJmdlbmVyaWNTdGF0ZQogKTsKCkhVX1ZhbHVlIE5S SFlfUmVsYXRpdmVGdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAgICAgICAgICAgICAg ICAgIGFyZywKICAgIEhVX1BhcnNlclN0YXRlICAgICAgICZnZW5lcmljU3RhdGUKICk7CgoKCgoK SFVfVmFsdWUgTlJIWV9Db2xsaXNpb25GdW5jdGlvbiAoCiAgICBMaXN0PEhVX1ZhbHVlPiAgICAg ICAgICAgICBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpUd2lu ZSBOUkhZX1ZjaG9yRXhpc3RzRnVuY3Rpb24gKAogICAgTGlzdDxUd2luZT4gICAgICAgICAgICAg JiBhcmcsCiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpUd2luZSBOUkhZ X1ZjaG9yT2JqZWN0TGlzdEZ1bmN0aW9uICgKICAgIExpc3Q8VHdpbmU+ICAgICAgICAgICAgICYg YXJnLAogICAgSFVfUGFyc2VyU3RhdGUgICYgZ2VuZXJpY1N0YXRlCiApOwoKVHdpbmUgTlJIWV9W Y2hvckNoYW5uZWxzRnVuY3Rpb24gKAogICAgTGlzdDxUd2luZT4gICAgICAgICAgICAgJiBhcmcs CiAgICBIVV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpUd2luZSBOUkhZX1ZjaG9y UGFyZW50RnVuY3Rpb24gKAogICAgTGlzdDxUd2luZT4gICAgICAgICAgICAgJiBhcmcsCiAgICBI VV9QYXJzZXJTdGF0ZSAgJiBnZW5lcmljU3RhdGUKICk7CgpIVV9WYWx1ZSBOUkhZX0dldE5EQ0Z1 bmN0aW9uICgKICAgIExpc3Q8SFVfVmFsdWU+IGFyZywKICAgIEhVX1BhcnNlclN0YXRlICZnZW5l cmljU3RhdGUKICk7CgoKIAoKCgoKCkJPT0xFQU4gTlJIWV9TZXREZWJ1Z0Zyb21Wb29kb28gKAog ICAgY29uc3QgQk9PTEVBTiAgIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJIWV9HZXREZWJ1Z0Zyb21W b29kb28gKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRUZXN0RnJvbVZvb2RvbyAoCiAg ICBjb25zdCBCT09MRUFOICAgc3RhdHVzCiApOwoKQk9PTEVBTiBOUkhZX0dldFRlc3RGcm9tVm9v ZG9vICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfU2V0RGlzcGxheUZyb21Wb29kb28gKAog ICAgY29uc3QgQk9PTEVBTiAgIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJIWV9HZXREaXNwbGF5RnJv bVZvb2RvbyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX0dldE1heFNjcmVlbkluUGl4ZWxzICgK ICAgIGludCAqeCwKICAgIGludCAqeQogKTsKCnZvaWQgTlJIWV9TZXRNYXhTY3JlZW5JblBpeGVs cyAoCiAgICBjb25zdCBpbnQgICB4LAogICAgY29uc3QgaW50ICAgeQogKTsKCnZvaWQgTlJIWV9T ZXRVcGRhdGVXb3JsZEZsYWcgKAogICAgYm9vbCBzdGF0dXMKICk7Cgpib29sIE5SSFlfR2V0VXBk YXRlV29ybGRGbGFnICgKICAgIHZvaWQKICk7Cgp2b2lkIE5SSFlfU2V0UmVkcmF3V29ybGRGbGFn ICgKICAgIGJvb2wgc3RhdHVzCiApOwoKYm9vbCBOUkhZX0dldFJlZHJhd1dvcmxkRmxhZyAoCiAg ICB2b2lkCiApOwoKdm9pZCBOUkhZX1VwZGF0ZVdvcmxkU3RhdHVzRmxhZ3MgKAogICAgaW50IGZs YWdzCiApOwoKdm9pZCBOUkhZX1NldEluQmV0YUZsYWcgKAogICAgYm9vbCBpbkJldGEKICk7Cgpi b29sIE5SSFlfR2V0SW5CZXRhRmxhZyAoKTsKCnZvaWQgTlJIWV9TZXRQcm9ncmFtVmVyc2lvbiAo CiAgICAgICAgY29uc3QgVHdpbmUgJnZlcnNpb24KICk7Cgpjb25zdCBjaGFyICpOUkhZX0dldFBy b2dyYW1WZXJzaW9uICgpOwoKTGlzdDxUd2luZT4gTlJIWV9HZXRGaWxlTGlzdCAoCiAgICAgICAg dm9pZAogKTsKCkxpc3Q8VHdpbmU+IE5SSFlfU2V0RmlsZUxpc3QgKAogICAgICAgIGNvbnN0IExp c3Q8VHdpbmU+ICYgbmV3RmlsZUxpc3QKICk7CgpUd2luZSBOUkhZX1NldEFsbE5yaHlBbmROZWVk bGVDb21tYW5kcyAoCiAgICBUd2luZSAgIENvbW1hbmRzVHdpbmUKICk7CgpUd2luZSBOUkhZX0dl dEFsbE5yaHlBbmROZWVkbGVDb21tYW5kcyAoCiAgICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1Nl dFZvb2Rvb0RhdGFDaGFuZ2VkICAgKAogICAgICAgIEJPT0xFQU4gbmV3U3RhdGUKICk7CgpCT09M RUFOIE5SSFlfR2V0Vm9vZG9vRGF0YUNoYW5nZWQgICAoCiAgICAgICAgdm9pZAogKTsKCnZvaWQg TlJIWV9TZXROcmh5SW5pdGlhbGl6ZWQgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9HZXRO cmh5SW5pdGlhbGl6ZWQgKAogICAgdm9pZAogKTsKCnZvaWQgKk5SSFlfR2V0VHJhY2tpbmdXaXRo RGlzcGxheUZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1NldFRyYWNraW5nV2l0 aERpc3BsYXlGdW5jdGlvbiAoCiAgICB2b2lkICAgICgqdGhlRnVuYykoKQogKTsKCkJPT0xFQU4g TlJIWV9DYWxsVHJhY2tpbmdXaXRoRGlzcGxheUZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lk ICpOUkhZX0dldEludGVyZmFjZUZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1Nl dEludGVyZmFjZUZ1bmN0aW9uICgKICAgIEJPT0xFQU4gKCp0aGVGdW5jKSgpCiApOwoKQk9PTEVB TiBOUkhZX0NhbGxJbnRlcmZhY2VGdW5jdGlvbiAoCiAgICB2b2lkCiApOwoKdm9pZCAqTlJIWV9H ZXRQcm9jZXNzVUlGdW5jdGlvbiAoCiAgICB2b2lkCiApOwoKdm9pZCAqTlJIWV9TZXRQcm9jZXNz VUlGdW5jdGlvbiAoCiAgICBCT09MRUFOICgqdGhlRnVuYykoKQogKTsKCkJPT0xFQU4gTlJIWV9D YWxsUHJvY2Vzc1VJRnVuY3Rpb24gKAogICAgdm9pZAogKTsKCnZvaWQgKk5SSFlfR2V0U3VzcGVu ZEZ1bmN0aW9uICgKICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1NldFN1c3BlbmRGdW5jdGlvbiAo CiAgICBCT09MRUFOICgqdGhlRnVuYykoQk9PTEVBTikKICk7CgpCT09MRUFOIE5SSFlfQ2FsbFN1 c3BlbmRGdW5jdGlvbiAoCiAgICBCT09MRUFOIHN1c3BlbmRGbGFnCiApOwoKdm9pZCBOUkhZX1Nl dFRyYWNrSW50ZXJmYWNlQnVzeUZ1bmN0aW9uICgKICAgIEJPT0xFQU4gICAgKCp0aGVGdW5jKShp bnQsIGZsb2F0LCBjb25zdCBjaGFyICosIGNsYXNzIE5SSFlfY2xhc3NUcmFjayAqKQogKTsKCkJP T0xFQU4gTlJIWV9DYWxsVHJhY2tJbnRlcmZhY2VCdXN5RnVuY3Rpb24gKAogICAgaW50IHBhcm0s CiAgICBmbG9hdCB2LCAKICAgIGNvbnN0IGNoYXIgKm1zZywKICAgIGNsYXNzIE5SSFlfY2xhc3NU cmFjayogdHJhY2sKICk7Cgp2b2lkIE5SSFlfU2V0VHJhY2tSZWRyYXdXb3JsZCAoCiAgICBCT09M RUFOICAgICgqdGhlRnVuYykodm9pZCkKICk7Cgp2b2lkIE5SSFlfQ2FsbFRyYWNrUmVkcmF3V29y bGQgKAogICAgdm9pZAogKTsKCnZvaWQgKk5SSFlfR2V0SW50ZXJmYWNlQnVzeUZ1bmN0aW9uICgK ICAgIHZvaWQKICk7Cgp2b2lkICpOUkhZX1NldEludGVyZmFjZUJ1c3lGdW5jdGlvbiAoCiAgICB2 b2lkICAgICgqdGhlRnVuYykoaW50LCBjb25zdCBjaGFyICopCiApOwoKdm9pZCBOUkhZX0NhbGxJ bnRlcmZhY2VCdXN5RnVuY3Rpb24gKAogICAgaW50IHBhcm0sCiAgICBjb25zdCBjaGFyICptc2cK ICk7Cgp2b2lkICpOUkhZX0dldEN0cmxDSGFuZGxlciAoCiAgICB2b2lkCiApOwoKdm9pZCAqTlJI WV9TZXRDdHJsQ0hhbmRsZXIgKAogICAgdm9pZCAgICAoKnRoZUhhbmRsZXIpKHZvaWQpCiApOwoK dm9pZCBOUkhZX0NhbGxDdHJsQ0hhbmRsZXIgKAogICAgdm9pZAogKTsKCnZvaWQgTlJIWV9DbGVh clVzZXJJbnRlcmZhY2VGbGFncyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldFVzZXJJbnRl cmZhY2VGbGFnICgKICAgIHVuc2lnbmVkIG5ld0ZsYWdzCiApOwoKdm9pZCBOUkhZX1Jlc2V0VXNl ckludGVyZmFjZUZsYWcgKAogICAgdW5zaWduZWQgb2Jzb2xldGVGbGFncwogKTsKCnVuc2lnbmVk IE5SSFlfR2V0VXNlckludGVyZmFjZUZsYWcgKAogICAgdm9pZAogKTsKCnZvaWQgTlJIWV9TZXRT dGFnZUNvdW50ICgKICAgIGludCBudW1TdGFnZXMKICk7Cgp2b2lkIE5SSFlfQWRkU3RhZ2VDb3Vu dCAoCiAgICBpbnQgbnVtU3RhZ2VzCiApOwoKQk9PTEVBTiBOUkhZX0NoZWNrU3RhZ2VMaW1pdCAo CiAgICBpbnQgZGVsdGEKICk7Cgp2b2lkICAgIE5SSFlfU2V0VHdlbHZlRmxkU3RhdGUgICgKICAg ICAgICBCT09MRUFOIG5ld1N0YXRlCiApOwoKdm9pZCAgICBOUkhZX1NldFR3ZWx2ZUZsZEluT3Zl cmxheSAgKAogICAgICAgIEJPT0xFQU4gZmxhZwogKTsKCkJPT0xFQU4gICAgTlJIWV9TZXRUd2Vs dmVGbGRTdHlsZSAgICgKICAgICAgICBjb25zdCBUd2luZSAmbmV3U3R5bGUKICk7CgpCT09MRUFO ICAgIE5SSFlfU2V0VHdlbHZlRmxkRmlsZW5hbWUgICAgKAogICAgICAgIGNvbnN0IFR3aW5lICZm aWxlbmFtZQogKTsKCnZvaWQgICAgTlJIWV9TZXRUd2VsdmVGbGRDb2xvciAgKAogICAgICAgIGZs b2F0ICpuZXdDb2xvcgogKTsKCkJPT0xFQU4gTlJIWV9HZXRUd2VsdmVGbGRTdGF0ZSAgKAogICAg ICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfR2V0VHdlbHZlRmxkSW5PdmVybGF5ICAoCiAgICAg ICAgdm9pZAogKTsKClR3aW5lICAgTlJIWV9HZXRUd2VsdmVGbGRTdHlsZSAgKAogICAgICAgIHZv aWQKICk7CgpUd2luZSAgIE5SSFlfR2V0VHdlbHZlRmxkRmlsZW5hbWUgICAoCiAgICAgICAgdm9p ZAogKTsKCmZsb2F0ICpOUkhZX0dldFR3ZWx2ZUZsZENvbG9yICgpOwoKdm9pZCAgTlJIWV9EZXNj cmliZVR3ZWx2ZWZsZCAoCiAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJmRlc2MK ICk7CgpCT09MRUFOIE5SSFlfTG9hZFR3ZWx2ZUZsZFNoYXBlICgKICAgICAgICAgICAgY29uc3Qg VHdpbmUgJmZpbGVuYW1lCiApOwoKY2xhc3MgU2hhcGUgKk5SSFlfR2V0VHdlbHZlRmxkU2hhcGUg KCk7Cgp2b2lkICAgIE5SSFlfU2V0R3JvdW5kU3RhdGUgICAgICgKICAgICAgICBCT09MRUFOIG5l d1N0YXRlCiApOwoKQk9PTEVBTiAgICBOUkhZX0dldEdyb3VuZFN0YXRlICAoCiAgICAgICAgdm9p ZAogKTsKCnZvaWQgTlJIWV9TZXRBdXRvS2V5U3RhdGUgKAoJCQkgIEJPT0xFQU4gbmV3U3RhdGUK ICk7CgpCT09MRUFOIE5SSFlfR2V0QXV0b0tleVN0YXRlICgKCQkJICAgICB2b2lkCiApOwoKdm9p ZCAgICBOUkhZX1NldENhY2hlSW1hZ2VzU3RhdGUgICAgKAogICAgICAgIEJPT0xFQU4gbmV3U3Rh dGUKICk7CgpCT09MRUFOICAgIE5SSFlfR2V0Q2FjaGVJbWFnZXNTdGF0ZSAgICAgKAogICAgICAg IHZvaWQKICk7Cgp2b2lkICAgIE5SSFlfU2V0Q2FsY0R5bmFtaWNzU3RhdGUgICAgKAogICAgICAg IEJPT0xFQU4gbmV3U3RhdGUKICk7CgpCT09MRUFOICAgIE5SSFlfR2V0Q2FsY0R5bmFtaWNzU3Rh dGUgICAgICgKICAgICAgICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1NldEdob3N0U3RhdGUgICgK ICAgICAgICBCT09MRUFOIG5ld1N0YXRlCiApOwoKdm9pZCAgICBOUkhZX1RvdWNoR2hvc3RTdGF0 ZSAgKCk7CgpCT09MRUFOIE5SSFlfR2V0R2hvc3RTdGF0ZSAgKAogICAgICAgIHZvaWQKICk7Cgp2 b2lkICAgIE5SSFlfU2V0R2hvc3RJbk92ZXJsYXkgICgKICAgICAgICBCT09MRUFOIGluT3Zlcmxh eQogKTsKCkJPT0xFQU4gTlJIWV9HZXRHaG9zdEluT3ZlcmxheSAgKAogICAgICAgIHZvaWQKICk7 Cgp2b2lkICAgIE5SSFlfU2V0R2hvc3RDb2xvciAgICAgICgKICAgICAgICBmbG9hdCBuZXdSZWQs CiAgICAgICAgZmxvYXQgbmV3R3JlZW4sCiAgICAgICAgZmxvYXQgbmV3Qmx1ZSwKICAgICAgICBm bG9hdCBuZXdJbnRlbnMKICk7CgpmbG9hdCAgICAqTlJIWV9HZXRHaG9zdENvbG9yICAgICgKICAg ICAgICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1NldFdyaXRlRmlsZW5hbWUgKAogICAgICAgIGNv bnN0IGNoYXIgKmZpbGVuYW1lCiApOwoKdm9pZCAgICBOUkhZX1NldFdyaXRlT3B0aW9uICAgICAg KAogICAgICAgIGNvbnN0IFR3aW5lICZuZXdPcHRpb24KICk7Cgp2b2lkICAgIE5SSFlfU2V0Rmls ZVdyaXRlU3VjY2VzcyAoCiAgICAgICAgQk9PTEVBTiBzdWNjZXNzCiApOwoKdm9pZCAgICBOUkhZ X1NldEluVHJhY2tDb21tYW5kICgKICAgICAgICBCT09MRUFOIHN0YXR1cwogKTsKCnZvaWQgICAg TlJIWV9TZXRJblJlYWRDb21tYW5kICgKICAgICAgICBCT09MRUFOIHN0YXR1cwogKTsKCnZvaWQg ICAgTlJIWV9TZXRJbldyaXRlQ29tbWFuZCAoCiAgICAgICAgQk9PTEVBTiBzdGF0dXMKICk7Cgpj aGFyICpOUkhZX0dldFdyaXRlRmlsZW5hbWUgKAogICAgICAgIHZvaWQKICk7CgpUd2luZSAgIE5S SFlfR2V0V3JpdGVPcHRpb24gICAgICAgICAgKAogICAgICAgIHZvaWQKICk7CgpCT09MRUFOIE5S SFlfR2V0RmlsZVdyaXRlU3VjY2VzcyAoCiAgICAgICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9J c0luVHJhY2tDb21tYW5kICgKICAgICAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX0lzSW5SZWFk Q29tbWFuZCAoCiAgICAgICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9Jc0luV3JpdGVDb21tYW5k ICgKICAgICAgICB2b2lkCiApOwoKVHdpbmUgTlJIWV9HZXRMYXN0UmVhZEZpbGVOYW1lICgKICk7 CgppbnQgTlJIWV9UZXh0Q29tbWFuZCAoCiAgICAgICAgY29uc3QgVHdpbmUgJmNvbW1hbmQKICk7 Cgp2b2lkIE5SSFlfVGV4dENvbW1hbmRTdHJlYW0gKAogICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2Ny aWJlU3RyZWFtICZzCiApOwoKSU5UIE5SSFlfR2V0TWF4VXNlckRlZmluZUJ1dHRvbnMgKAogICAg dm9pZAogKTsKCnZvaWQgICAgTlJIWV9TZXRVc2VyQnV0dG9uICAgICAgICAoCiAgICAgICAgaW50 IGluZGV4LCAKICAgICAgICBjb25zdCBUd2luZSAmbGFiZWwsIAogICAgICAgIGNvbnN0IFR3aW5l ICZjb21tYW5kCiApOwoKdm9pZCAgICBOUkhZX1NldFVzZXJCdXR0b25MYWJlbCAoCiAgICAgICAg aW50IGluZGV4LCAKICAgICAgICBjb25zdCBUd2luZSAmbGFiZWwKICk7Cgp2b2lkICAgIE5SSFlf U2V0VXNlckJ1dHRvbkNvbW1hbmQgICgKICAgICAgICBpbnQgaW5kZXgsIAogICAgICAgIGNvbnN0 IFR3aW5lICZjb21tYW5kCiApOwoKdm9pZCAgICBOUkhZX1NldFVzZXJCdXR0b25Db2xvciAgKAog ICAgICAgIGludCBpbmRleCwgCiAgICAgICAgZmxvYXQgciwgCiAgICAgICAgZmxvYXQgZywgCiAg ICAgICAgZmxvYXQgYiwKICAgICAgICBmbG9hdCBpbnRlbnMKICk7Cgp2b2lkIE5SSFlfUmVzZXRV c2VyQnV0dG9uICgKICAgIGludCBpbmRleAogKTsKCkJPT0xFQU4gTlJIWV9Jc1VzZXJCdXR0b25E ZWZpbmVkICAoCiAgICAgICAgaW50IGluZGV4CiApOwoKVHdpbmUgICBOUkhZX0dldFVzZXJCdXR0 b25MYWJlbCAgICgKICAgICAgICBpbnQgaW5kZXgKICk7CgpUd2luZSAgIE5SSFlfR2V0VXNlckJ1 dHRvbkNvbW1hbmQgKAogICAgICAgIGludCBpbmRleAogKTsKCnZvaWQgICAgTlJIWV9HZXRVc2Vy QnV0dG9uQ29sb3IgICgKICAgICAgICBpbnQgaW5kZXgsIAogICAgICAgIGZsb2F0ICpyLCAKICAg ICAgICBmbG9hdCAqZywgCiAgICAgICAgZmxvYXQgKmIsCiAgICAgICAgZmxvYXQgKmludGVucwog KTsKCnZvaWQgICAgTlJIWV9TZXRVc2VyQnV0dG9uV2lsbENhbGwgKAogICAgICAgIGludCBpbmRl eAogKTsKCmludCAgICAgTlJIWV9HZXRVc2VyQnV0dG9uV2lsbENhbGwgKCk7Cgp2b2lkICAgIE5S SFlfRXhlY3V0ZVVzZXJCdXR0b25XaWxsQ2FsbCAoCiApOwoKaW50IE5SSFlfR2V0U2hlbGZJbmRl eCAoCiAgICAgICAgY29uc3QgVHdpbmUgJmxhYmVsCiApOwoKQk9PTEVBTiBOUkhZX0NyZWF0ZVNo ZWxmICgKICAgICAgICAgICAgY29uc3QgVHdpbmUgJmxhYmVsCiApOwoKaW50IE5SSFlfRGVsZXRl U2hlbGYgKAogICAgICAgICAgICBjb25zdCBUd2luZSAmbGFiZWwKICk7CgpCT09MRUFOIE5SSFlf U2V0Q3VycmVudFNoZWxmICgKICAgICAgICAgICAgY29uc3QgVHdpbmUgJmxhYmVsCiApOwoKY29u c3QgVHdpbmUgJk5SSFlfR2V0Q3VycmVudFNoZWxmICgpOwoKaW50IE5SSFlfR2V0TnVtYmVyU2hl bHZlcyAoKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxmTGFiZWwgKAogICAgICAgICAgICBp bnQgc2hlbGZJbmRleAogKTsKCmludCBOUkhZX0dldE1heFNoZWxmQnV0dG9ucyAoKTsKCmludCBO UkhZX0ZpbmRTaGVsZkJ1dHRvbiAoCiAgICAgICAgaW50IHNoZWxmSW5kZXgsCiAgICAgICAgY29u c3QgVHdpbmUgJmxhYmVsCiApOwoKaW50IE5SSFlfQ3JlYXRlU2hlbGZCdXR0b25MYWJlbCAoCiAg ICAgICAgaW50IHNoZWxmSW5kZXgsCiAgICAgICAgaW50IGJ1dHRvbkluZGV4LAogICAgICAgIGNv bnN0IFR3aW5lICZsYWJlbAogKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxmQnV0dG9uTGFi ZWwgKAogICAgICAgIGludCBzaGVsZkluZGV4LAogICAgICAgIGludCBidXR0b25JbmRleAogKTsK CkJPT0xFQU4gTlJIWV9TZXRTaGVsZkJ1dHRvbkNvbW1hbmQgKAogICAgICAgIGludCBzaGVsZklu ZGV4LAogICAgICAgIGludCBidXR0b25JbmRleCwKICAgICAgICBjb25zdCBUd2luZSAmY29tbWFu ZAogKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxmQnV0dG9uQ29tbWFuZCAoCiAgICAgICAg aW50IHNoZWxmSW5kZXgsCiAgICAgICAgaW50IGJ1dHRvbkluZGV4CiApOwoKQk9PTEVBTiBOUkhZ X0NsZWFyU2hlbGZCdXR0b24gKAogICAgICAgIGludCBzaGVsZkluZGV4LAogICAgICAgIGludCBi dXR0b25JbmRleAogKTsKCnZvaWQgICAgTlJIWV9TZXRTaGVsZkJ1dHRvbldpbGxDYWxsICgKICAg ICAgICBjb25zdCBUd2luZSAmY29tbWFuZAogKTsKCmNvbnN0IFR3aW5lICZOUkhZX0dldFNoZWxm QnV0dG9uV2lsbENhbGwgKCk7Cgp2b2lkICAgIE5SSFlfRXhlY3V0ZVNoZWxmQnV0dG9uV2lsbENh bGwgKCk7Cgp2b2lkIE5SSFlfU2V0TG9vcFN0YXR1cyAoCiAgICAgICAgQk9PTEVBTiBzdGF0dXMK ICk7CgpCT09MRUFOIE5SSFlfR2V0TG9vcFN0YXR1cyAoCiAgICAgICAgdm9pZAogKTsKCnZvaWQg TlJIWV9TZXRJbWFnZUNhY2hlTGltaXQgKAogICAgICAgIGludCBsaW1pdAogKTsKCmludCBOUkhZ X0dldEltYWdlQ2FjaGVMaW1pdCAoCiAgICAgICAgdm9pZAogKTsKCnZvaWQgTlJIWV9TZXRMb29w RGVjb3VwbGVTd2FwYnVmICgKICAgICAgICBCT09MRUFOIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJI WV9HZXRMb29wRGVjb3VwbGVTd2FwYnVmICgKICAgICAgICB2b2lkCiApOwoKaW50IE5SSFlfU2V0 U2xpY2VzICgKICAgICAgICBpbnQgc2xpY2VzCiApOwoKaW50IE5SSFlfR2V0U2xpY2VzICgKCXZv aWQKICk7CgpjaGFyIE5SSFlfU2V0U2h1dHRlciAoCiAgICAgICAgZmxvYXQgbWluLAogICAgICAg IGZsb2F0IG1heAogKTsKCnZvaWQgTlJIWV9HZXRTaHV0dGVyICgKICAgICAgICBmbG9hdCAmbWlu LAogICAgICAgIGZsb2F0ICZtYXgKICk7Cgp2b2lkIE5SSFlfR2V0TW90aW9uQmx1clBhcm1zICgK ICAgICAgICBmbG9hdCAmbWluLAogICAgICAgIGZsb2F0ICZtYXgsCiAgICAgICAgaW50ICAgJm5z bGljZXMKICk7Cgp2b2lkIE5SSFlfU2V0RnVsbEV4aXQgKAogICAgICAgIEJPT0xFQU4gc3RhdHVz CiApOwoKQk9PTEVBTiBOUkhZX0dldEZ1bGxFeGl0ICgKICAgICAgICB2b2lkCiApOwoKZmxvYXQg TlJIWV9HZXRUcmFja0ljb25JbnRlbnNpdHkgKAogKTsKCnZvaWQgIE5SSFlfU2V0VHJhY2tJY29u SW50ZW5zaXR5ICgKICAgIGZsb2F0IGljb25JbnRlbnNpdHkKICk7CgpCT09MRUFOIE5SSFlfR2V0 VHJhY2tTaG93UGF0aHMgKAogKTsKCnZvaWQgIE5SSFlfU2V0VHJhY2tTaG93UGF0aHMgKAogICAg Qk9PTEVBTiBzaG93UGF0aHMKICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrU2hvd0FsbFBhdGhzICgK ICAgIEJPT0xFQU4gc2hvd0FsbFBhdGhzCiApOwoKQk9PTEVBTiBOUkhZX0dldFRyYWNrU2hvd0Fs bFBhdGhzICgKICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrU2hvd0xhYmVscyAoCiAgICBCT09MRUFO IHNob3dMYWJlbHMKICk7CgpCT09MRUFOIE5SSFlfR2V0VHJhY2tTaG93TGFiZWxzICgKICk7Cgp2 b2lkICBOUkhZX1NldFRyYWNrQ2VudGVyICgKICAgIEJPT0xFQU4gY2VudGVyCiApOwoKQk9PTEVB TiBOUkhZX0dldFRyYWNrQ2VudGVyICgKICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrQ3JvcE1hcCAo CiAgICBCT09MRUFOIGNyb3BNYXAKICk7CgpCT09MRUFOIE5SSFlfR2V0VHJhY2tDcm9wTWFwICgK ICk7Cgp2b2lkICBOUkhZX1NldFRyYWNrQ3VycmVudCAoCiAgICBUd2luZSYgdHJhY2tDdXJyZW50 CiApOwoKVHdpbmUgTlJIWV9HZXRUcmFja0N1cnJlbnQgKAogKTsKCkJPT0xFQU4gTlJIWV9HZXRI YXJkd2FyZUlEICgKICAgICAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEhhcmR3YXJlSUQgKAog ICAgdm9pZAogKTsKCgoKCgp2b2lkICAgICpOUkhZX0dldEN1cnJlbnRDb250ZXh0ICgKICAgICAg ICB2b2lkCiApOwoKdm9pZCAgICBOUkhZX1NldEN1cnJlbnRDb250ZXh0ICgKICAgIHZvaWQgICAg KmNvbnRleHQKICk7CgpCT09MRUFOIE5SSFlfU2V0U3RlcmVvRmxpcEZsYWcgKAogICAgQk9PTEVB TiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0U3RlcmVvRmxpcEZsYWcgKAogICAgdm9pZAog KTsKCklOVCBOUkhZX1NldFN0ZXJlb1NwbGl0RmxhZyAoCiAgICBpbnQgc3RhdHVzCiApOwoKSU5U IE5SSFlfR2V0U3RlcmVvU3BsaXRGbGFnICgKICAgIHZvaWQKICk7CgpmbG9hdCBOUkhZX1NldFN0 ZXJlb0hvckJsYW5raW5nICgKICAgIGZsb2F0ICAgIHZhbHVlCiApOwoKZmxvYXQgTlJIWV9HZXRT dGVyZW9Ib3JCbGFua2luZyAoCiAgICB2b2lkCiApOwoKZmxvYXQgTlJIWV9HZXRTdGVyZW9Ib3JC bGFua2luZ0RlZmF1bHQgKAogICAgdm9pZAogKTsKCmZsb2F0IE5SSFlfU2V0U3RlcmVvVmVyQmxh bmtpbmcgKAogICAgZmxvYXQgICAgdmFsdWUKICk7CgpmbG9hdCBOUkhZX0dldFN0ZXJlb1ZlckJs YW5raW5nICgKICAgIHZvaWQKICk7CgpmbG9hdCBOUkhZX0dldFN0ZXJlb1ZlckJsYW5raW5nRGVm YXVsdCAoCiAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX1NldFN0ZXJlb1VzZU9uZVR3ZW50eUN5 Y2xlICgKICAgIEJPT0xFQU4gc3RhdHVzCiApOwoKQk9PTEVBTiBOUkhZX0dldFN0ZXJlb1VzZU9u ZVR3ZW50eUN5Y2xlICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfU2V0U3RlcmVvTW90aWZX aW5kb3dCb3JkZXIgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0U3Rl cmVvTW90aWZXaW5kb3dCb3JkZXIgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRTdGVy ZW9TaG93TFJMYWJlbHMgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0 U3RlcmVvU2hvd0xSTGFiZWxzICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfR2V0QWxwaGFi ZXRpemVVc2FnZSAoCiAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX1NldEFscGhhYmV0aXplVXNh Z2UgKAogICAgQk9PTEVBTiAgICAgc3RhdHVzCiApOwoKQk9PTEVBTiBOUkhZX0dldFNwb3RMaXRl RGlzcGxheUFzU29saWQgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRTcG90TGl0ZURp c3BsYXlBc1NvbGlkICgKICAgIEJPT0xFQU4gICAgIHN0YXR1cwogKTsKCkJPT0xFQU4gTlJIWV9H ZXRTcG90TGl0ZUZvY3VzVXNlTWF4ICgKICAgIHZvaWQKICk7CgpCT09MRUFOIE5SSFlfU2V0U3Bv dExpdGVGb2N1c1VzZU1heCAoCiAgICBCT09MRUFOICAgICBzdGF0dXMKICk7CgpCT09MRUFOIE5S SFlfR2V0TG9ja2VkRm9yUmVhZCAoCiAgICB2b2lkCiApOwoKQk9PTEVBTiBOUkhZX1NldExvY2tl ZEZvclJlYWQgKAogICAgQk9PTEVBTiBzdGF0dXMKICk7CgpCT09MRUFOIE5SSFlfR2V0U2hvd0lu dGVybmFsT25seU9wdGlvbnMgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9TZXRTaG93SW50 ZXJuYWxPbmx5T3B0aW9ucyAoCiAgICBCT09MRUFOICAgICBzdGF0dXMKICk7Cgp2b2lkIE5SSFlf U2V0RW52QyAoCiAgICBjb25zdCBUd2luZSAmY2hhbm5lbAogKTsKClR3aW5lIE5SSFlfR2V0RW52 QyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkYgKAogICAgZmxvYXQgZgogKTsKCmZs b2F0IE5SSFlfR2V0RW52RiAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkZzICgKICAg IGZsb2F0IGZzCiApOwoKZmxvYXQgTlJIWV9HZXRFbnZGcyAoCiAgICB2b2lkCiApOwoKdm9pZCBO UkhZX1NldEVudkZlICgKICAgIGZsb2F0IGZlCiApOwoKZmxvYXQgTlJIWV9HZXRFbnZGZSAoCiAg ICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkZpbmMgKAogICAgZmxvYXQgZmluYwogKTsKCmZs b2F0IE5SSFlfR2V0RW52RmluYyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkZtaW4g KAogICAgZmxvYXQgZm1pbgogKTsKCmZsb2F0IE5SSFlfR2V0RW52Rm1pbiAoCiAgICB2b2lkCiAp OwoKdm9pZCBOUkhZX1NldEVudkZtYXggKAogICAgZmxvYXQgZm1heAogKTsKCmZsb2F0IE5SSFlf R2V0RW52Rm1heCAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudk1mcyAoCiAgICBmbG9h dCBtZnMKICk7CgpmbG9hdCBOUkhZX0dldEVudk1mcyAoCiAgICB2b2lkCiApOwoKdm9pZCBOUkhZ X1NldEVudk1mZSAoCiAgICBmbG9hdCBtZmUKICk7CgpmbG9hdCBOUkhZX0dldEVudk1mZSAoCiAg ICB2b2lkCiApOwoKdm9pZCBOUkhZX1NldEVudkxhc3RGaWxlUmVhZCAoCiAgICBjb25zdCBUd2lu ZSAmbGFzdEZpbGVSZWFkCiApOwoKVHdpbmUgTlJIWV9HZXRFbnZMYXN0RmlsZVJlYWQgKAogICAg dm9pZAogKTsKCnZvaWQgTlJIWV9TZXRPblNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgQk9P TEVBTiAoKnRoZUZ1bmMpKHZvaWQgKnNvdW5kKQogKTsKCkJPT0xFQU4gTlJIWV9DYWxsT25Tb3Vu ZEludGVyZmFjZUZ1bmN0aW9uICgKICAgIHZvaWQgKnNvdW5kCiApOwoKdm9pZCBOUkhZX1NldE9m ZlNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgQk9PTEVBTiAoKnRoZUZ1bmMpKHZvaWQgKnNv dW5kKQogKTsKCkJPT0xFQU4gTlJIWV9DYWxsT2ZmU291bmRJbnRlcmZhY2VGdW5jdGlvbiAoCiAg ICB2b2lkICpzb3VuZAogKTsKCnZvaWQgTlJIWV9TZXRBdGV4aXRTb3VuZEludGVyZmFjZUZ1bmN0 aW9uICgKICAgIEJPT0xFQU4gKCp0aGVGdW5jKSh2b2lkICpzb3VuZCkKICk7CgpCT09MRUFOIE5S SFlfQ2FsbEF0ZXhpdFNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgdm9pZCAqc291bmQKICk7 Cgp2b2lkIE5SSFlfU2V0RGVzdHJ1Y3RvclNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgQk9P TEVBTiAoKnRoZUZ1bmMpKHZvaWQgKnNvdW5kKQogKTsKCkJPT0xFQU4gTlJIWV9DYWxsRGVzdHJ1 Y3RvclNvdW5kSW50ZXJmYWNlRnVuY3Rpb24gKAogICAgdm9pZCAqc291bmQKICk7Cgp2b2lkIE5S SFlfSW52YWxpZGF0ZUZyYW5nZSAoCiAgICBmbG9hdCBmc3RhcnQsCiAgICBmbG9hdCBmZW5kLAog ICAgZmxvYXQgZmluYwogKTsKCnZvaWQgTlJIWV9JbnZhbGlkYXRlRnJhbmdlICgKICAgIHZvaWQg KnBvcnQsCiAgICBmbG9hdCBmc3RhcnQsCiAgICBmbG9hdCBmZW5kLAogICAgZmxvYXQgZmluYwog KTsKCkJPT0xFQU4gTlJIWV9Jc0ludmFsaWRhdGVkRnJhbmdlICgpOwoKQk9PTEVBTiBOUkhZX0dl dEludmFsaWRhdGVkRnJhbmdlICgKICAgIHZvaWQgICoqY3VyUG9ydCwKICAgIGZsb2F0ICpmc3Rh cnQsIAogICAgZmxvYXQgKmZlbmQsCiAgICBmbG9hdCAqZmluYwogKTsKCmNoYXIgKipOUkhZX0dl dFZhbGlkRXh0ZW5zaW9ucyAoCiAgICAgICAgdm9pZCAKICk7CgppbnQgTlJIWV9HZXROdW1iZXJF eHRlbnNpb25zICgKICAgICAgICB2b2lkIAogKTsKCnZvaWQgTlJIWV9TZXRNYW5pcHVsYXRvclNt b290aG5lc3MgKAogICAgICAgIGZsb2F0IGYKICk7CgpmbG9hdCBOUkhZX0dldE1hbmlwdWxhdG9y U21vb3RobmVzcyAoKTsKCnZvaWQgICAgIE5SSFlfU3BsaXREb3RGaWxlTmFtZSAoCiAgICAgICAg ICAgIENIQVIgICAgKmluLAogICAgICAgICAgICBDSEFSICAgICpiYXNlLAogICAgICAgICAgICBJ TlQgICAgICpmcmFtZSwKICAgICAgICAgICAgQ0hBUiAgICAqZXh0bgogKTsKCkJPT0xFQU4gTlJI WV9HZXRTbGlkZXIgKAogICAgdm9pZAogKTsKCnZvaWQgTlJIWV9TZXRTbGlkZXIgKAogICAgQk9P TEVBTiBzdGF0ZQogKTsKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgp2b2lkICBOUkhZX0Vz dGFibGlzaFBvcnRHcmFwaGljcyAoCgkJCQkgQk9PTEVBTiBmbGFnLAoJCQkJIGNvbnN0IGNoYXIq IG5hbWUKICk7Cgp2b2lkIE5SSFlfRXN0YWJsaXNoQ2FtZXJhR3JhcGhpY3MgKAogICAgTlJIWV9j bGFzc0NhbWVyYSAqY2FtZXJhCiApOwoKdm9pZCBOUkhZX1NldE1hdGVyaWFsICgKICAgIE5SSFlf Y2xhc3NNYXRlcmlhbCAqbXRsUHRyLAogICAgZmxvYXQgb3BhY2l0eQogKTsKCgoKCgoKCgoKdm9p ZCBOUkhZX0dMSW5mb01hdHJpeCAoCiAgICB2b2lkIAogKTsKCgoKCgppbnQgTlJIWV9HZXRNb25p dG9yICgpOwoKdm9pZCBOUkhZX1NldE1vbml0b3IgKAogICAgaW50IGZyYW1lUmF0ZQogKTsKCgoK Cgp2b2lkIE5SSFlfU2V0SW52ZXJzZUNhbWVyYU1hdHJpeCAoCiAgICBjb25zdCBNX01hdHJpeCAm bWF0CiApOwoKY29uc3QgTV9NYXRyaXggJk5SSFlfR2V0SW52ZXJzZUNhbWVyYU1hdHJpeCAoCiAg ICB2b2lkCiApOwoKCgoKCgogCgoKCgoKCgoKCgogCgoKIAoKaW50IE5SSFlfSW5pdGlhbGl6ZSAo CiAgICB2b2lkCiApOwoKdm9pZCAgTlJIWV9Jbml0aWFsaXplQ2hhbkZ1bmN0aW9ucyAoKTsKCnZv aWQgIE5SSFlfSW5pdGlhbGl6ZVZjaG9yRnVuY3Rpb25zICgpOwoKCiAKCgoKCgoKCkJPT0xFQU4g TlJIWV9SZWFkV3Jlbk10bCAoCiAgICBORVRGSUxFX0ZJTEUgICAgKmZwdHIsCiAgICBUd2luZSAg ICAgICAgICAgZmlsZW5hbWUKICk7CgoKIAoKQk9PTEVBTiBOUkhZX1JlYWRXcmVuTWFwICgKICAg IE5FVEZJTEVfRklMRSAgICAqZnB0ciwKICAgIFR3aW5lICAgICAgICAgICBmaWxlbmFtZQogKTsK CgogCgp2b2lkICBOUkhZX0xpc3RIaWVyYXJjaHkgKAogICAgRklMRSAgICAgICAgICAgICpmcCwK ICAgIHZvaWQgICAgICAgICAgICAgKipnZW5lcmljUHRycywKICAgIElOVCAgICAgICAgICAgICBu dW1iZXJHZW5lcmljUHRycywKICAgIElOVCAgICAgICAgICAgICBhbGxGbGFnLAogICAgSU5UICAg ICAgICAgICAgIGNoYW5GbGFnLAogICAgSU5UICAgICAgICAgICAgIGRlYnVnRmxhZwogKTsKCgog CgpJTlQgTlJIWV9SZWFkVmRhICgKICAgIE5FVEZJTEVfRklMRSAgICAgICAgICAgICAgICAgICAg KiBmaWxlLAogICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZGFGaWxlTmFtZSwK ICAgIGNvbnN0IExpc3QgPE5SSFlfSU5UX0ZSQU5HRT4gICAgJiByZW1hcEZyYW5nZUxpc3QKICk7 CgpUd2luZSBOUkhZX0dldFZkYUZpbGVuYW1lICgKICAgIGNvbnN0IENIQVIgICppbmNvbWluZ0Zp bGVOYW1lCiApOwoKTkVURklMRV9GSUxFICpOUkhZX09wZW5GaWxlICgKICAgIFR3aW5lICAgZmls ZU5hbWUKICk7CgpCT09MRUFOIE5SSFlfQ2xvc2VGaWxlICgKICAgIE5FVEZJTEVfRklMRSAgICAq IGZpbGUsCiAgICBUd2luZSAgICAgICAgICAgZmlsZU5hbWUKICk7CgoKCgoKSU5UIE5SSFlfUmVh ZENoYW5Bc2NpaSAoCiAgICBORVRGSUxFX0ZJTEUgICAgKmZpbGUsCiAgICBUd2luZSAgICAgICAg ICAgYXNjRmlsZU5hbWUsCiAgICBjb25zdCBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAq PiAmY2hhbkxpc3QsCiAgICBjb25zdCBzdHJ1Y3QgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgICAm ZnJhbmdlCiApOwoKSU5UIE5SSFlfUmVhZE9ialRvQ2hhbiAoCiAgICBORVRGSUxFX0ZJTEUgICAg KmZpbGUsCiAgICBUd2luZSAgICAgICAgICAgb2JqVG9DaGFuRmlsZW5hbWUKICk7CgppbnQgTlJI WV9SZWFkTXRuICgKICAgIE5FVEZJTEVfRklMRSAqIGZpbGUsCiAgICBMaXN0IDxOUkhZX2NsYXNz Q2hhbm5lbCAqPiBkZXN0aW5hdGlvbiwKICAgIExpc3QgPE5SSFlfY2xhc3NDaGFubmVsICo+IG9u bHksCiAgICBCT09MRUFOIHN0YXJ0U3BlY2lmaWVkLAogICAgaW50IHN0YXJ0RnJhbWUsCiAgICBj b25zdCBMaXN0IDxOUkhZX0lOVF9GUkFOR0U+ICZmcmFuZ2VMaXN0CiApOwoKaW50IE5SSFlfUmVh ZENoZWQgKAoJCSAgTkVURklMRV9GSUxFKiBmaWxlLAoJCSAgTGlzdDwgTlJIWV9jbGFzc0NoYW5u ZWwqID4gZGVzdGluYXRpb24sCgkJICBMaXN0PCBOUkhZX2NsYXNzQ2hhbm5lbCogPiBvbmx5LAoJ CSAgQk9PTEVBTiBzdGFydFNwZWNpZmllZCwKCQkgIGludCBzdGFydEZyYW1lLAoJCSAgY29uc3Qg TGlzdDwgTlJIWV9JTlRfRlJBTkdFID4mIGZyYW5nZUxpc3QKICk7CgoKIAoKCiAKCgoKCgoKCgoK VHdpbmUgTlJIWV9EZWNvZGVPcGVuR0xCbGVuZEludCAoCiAgICBJTlQgaW5jb21pbmdJbnQKICk7 CgoKCgoKCiAKCkJPT0xFQU4gTlJIWV9TZXRTaW5nbGVTdGF0dXMgKAogICAgQk9PTEVBTiBmbGFn CiApOwoKQk9PTEVBTiBOUkhZX0dldFNpbmdsZVN0YXR1cyAoCiAgICB2b2lkCiApOwoKdm9pZCBO UkhZX1NldE5vVXBkYXRlU3RhdHVzICgKICAgIEJPT0xFQU4gbmV3U3RhdGUKICk7CgpCT09MRUFO IE5SSFlfR2V0Tm9VcGRhdGVTdGF0dXMgKAogICAgdm9pZAogKTsKCkJPT0xFQU4gTlJIWV9HZXRO b1VwZGF0ZVN0YXR1cyAoCiAgICBjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqY2hhbgogKTsKCgog Cgp2b2lkICBOUkhZX0xpc3RGcmFtZUluZm8gKAogICAgdm9pZCAKICk7Cgp2b2lkICBOUkhZX0dl dEN1cnJlbnRGcmFuZ2UgKAogICAgUkVBTCAgICAqc3RhcnQsCiAgICBSRUFMICAgICplbmQsCiAg ICBSRUFMICAgICppbmMKICk7CgpmbG9hdCBOUkhZX0dldEN1cnJlbnRGcmFtZSAoCiAgICB2b2lk CiApOwoKQk9PTEVBTiBOUkhZX1NldEN1cnJlbnRGcmFtZSAoCiAgICBmbG9hdCBmcmFtZQogKTsK CkJPT0xFQU4gTlJIWV9HZXRBbGxvd091dE9mUmFuZ2VDdXJyZW50RnJhbWUgKAogICAgdm9pZAog KTsKCkJPT0xFQU4gTlJIWV9TZXRBbGxvd091dE9mUmFuZ2VDdXJyZW50RnJhbWUgKAogICAgQk9P TEVBTiBuZXdTdGF0ZQogKTsKCklOVCBOUkhZX0dldEZyYW1lT2Zmc2V0ICgKICAgIHZvaWQgCiAp OwoKaW50IE5SSFlfR2V0VXNlclRvdGFsRnJhbWVzU3RhcnQgKCk7CgppbnQgTlJIWV9HZXRVc2Vy VG90YWxGcmFtZXNFbmQgKCk7CgoKIAoKSU5UIE5SSFlfR2V0VmVyYm9zaXR5ICgKICAgIHZvaWQg CiApOwoKSU5UIE5SSFlfU2V0VmVyYm9zaXR5ICgKICAgIGNvbnN0IElOVCAgIHN0YXR1cwogKTsK CgogCgpmbG9hdCBOUkhZX0dldExhc3RUcmF2ZXJzZWRGcmFtZSAoKTsKCmludCBOUkhZX1VwZGF0 ZVRyYXZlcnNlICgKICAgIGZsb2F0IGZyYW1lCiApOwoKdm9pZCBOUkhZX1NldERpcnR5V29ybGRG bGFnICgKICAgIHZvaWQKICk7Cgp2b2lkIE5SSFlfVXBkYXRlVHJhdmVyc2VUaGluZyAoCiAgICBm bG9hdCBmcmFtZSwKICAgIE5SSFlfY2xhc3NUaGluZyAqdGhpbmdQdHIKICk7CgoKIAoKQk9PTEVB TiBOUkhZX1NhdmVVbmRvICgKICAgICAgICBCT09MRUFOIGNvbmQKICk7Cgp2b2lkICBOUkhZX1Vu ZG9QdXNoU3RhcnRCZWFkICgKICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24KICk7 Cgp2b2lkICBOUkhZX1VuZG9QdXNoRW5kQmVhZCAoCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRl c2NyaXB0aW9uCiApOwoKdm9pZCBOUkhZX1VuZG9QdXJnZSAoKTsKCnZvaWQgTlJIWV9Qcm9jZXNz VW5kb1B1cmdlICgpOwoKdm9pZCBOUkhZX1B1c2hVbmRvU3RhdHVzICgKICAgICAgICBCT09MRUFO IGlzT24KICk7Cgp2b2lkIE5SSFlfUG9wVW5kb1N0YXR1cyAoKTsKCnZvaWQgIE5SSFlfU2V0VW5k byAoCiAgICAgICAgQk9PTEVBTiBzZXRPbgogKTsKCnZvaWQgIE5SSFlfU2V0VW5kb0Z1bGwgKAog ICAgICAgIEJPT0xFQU4gc2V0T24KICk7CgpCT09MRUFOIE5SSFlfR2V0VW5kb1N0YXR1cyAoKTsK CkJPT0xFQU4gTlJIWV9HZXRVbmRvRnVsbCAoKTsKCgogCgpCT09MRUFOIE5SSFlfRGlzcGxheVRy YXZlcnNlICgKICAgIElOVCBkaXNwbGF5TW9kZSwKICAgIEJPT0xFQU4gbGFiZWxPYmplY3RzLAog ICAgY29uc3QgY2hhciAqbGFiZWxQcmVmaXgsCiAgICBjb25zdCBjaGFyICpsYWJlbFN1ZmZpeAog KTsKCgogCgoKCgoKCgoKCgoKIyAxOTYgImgvTlJIWS5oIiAyCgoKIAoKIyAyNyAibnJoeS9OUkhZ X0FjY2Vzcy5jIiAyCgojIDEgImgvbnJoeS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK Y2xhc3MgT2JzZXJ2ZXI7CgogCgoKCiAKCgogCgoKCgogCgoKCiAKCgoKCgogCgoKCiAKCgoKCiAK Y29uc3QgaW50IFRISU5HX1RZUEVfQU5ZVEhJTkcgICA9IC00OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAKY29uc3QgaW50IFRISU5HX1RZUEVfVEhJTkcgICAg ICA9IC0zOwpjb25zdCBpbnQgVEhJTkdfVFlQRV9BUFBBUklUSU9OID0gLTI7CmNvbnN0IGludCBU SElOR19UWVBFX09CSkVDVCAgICAgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKIAplbnVtIE5SSFlfVGhpbmdUeXBlIHsKICAgICAKICAgIFRISU5HX1RZUEVfVU5LTk9XTiwK CiAgICAgCiAgICBUSElOR19UWVBFX0NBTUVSQSwKICAgIFRISU5HX1RZUEVfQ09MTElTSU9OLAog ICAgVEhJTkdfVFlQRV9EVU1NWSwKICAgIFRISU5HX1RZUEVfRFlOQU1JQ1MsCiAgICBUSElOR19U WVBFX0ZJTFRFUiwKICAgIFRISU5HX1RZUEVfRk9SQ0UsCiAgICBUSElOR19UWVBFX0ZVUiwKICAg IFRISU5HX1RZUEVfTVVTQ0xFLAogICAgVEhJTkdfVFlQRV9HRU5FUkFUT1IsCiAgICBUSElOR19U WVBFX0hPTUUsCiAgICBUSElOR19UWVBFX0lOS1ksCiAgICBUSElOR19UWVBFX0tMSVNULAogICAg VEhJTkdfVFlQRV9MQVlFUiwKICAgIFRISU5HX1RZUEVfTElHSFQsCiAgICBUSElOR19UWVBFX01B UCwKICAgIFRISU5HX1RZUEVfTUFURVJJQUwsCiAgICBUSElOR19UWVBFX01PREVMLAogICAgVEhJ TkdfVFlQRV9ST09ULAogICAgVEhJTkdfVFlQRV9ST1RPLAogICAgVEhJTkdfVFlQRV9TQ0FGRk9M RCwKICAgIFRISU5HX1RZUEVfU09VTkQsCiAgICBUSElOR19UWVBFX1RFWCwKICAgIFRISU5HX1RZ UEVfVFJBQ0ssCiAgICBUSElOR19UWVBFX1VTRU1BUCwKCiAgICAgCiAgICBUSElOR19UWVBFX0VO RAp9OwoKY29uc3QgaW50IFRZUEVfVEhJTkdDSEFOTkVMID0gVEhJTkdfVFlQRV9FTkQgKyAxOwoK IApleHRlcm4gY29uc3QgY2hhciAqKm5yaHlfaXRlbU5hbWVzOwoKIAoKCiMgMSAiaC9ucmh5LnAi IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgogCgoKCgoKCgpJTlQgTlJIWV9Jc0Fz Y2lpQU1lbWJlck9mQ2hhbm5lbExpc3QgKAogICAgY29uc3QgQ0hBUiAgKmFzY2lpLAogICAgSU5U ICAgICAgICAgdHlwZQoJKTsKCklOVCAqTlJIWV9HZXRBbGxBc2NpaU1hdGNoZXNJbkNoYW5uZWxM aXN0ICgKICAgIGNvbnN0IENIQVIgICphc2NpaSwKICAgIElOVCAgICAgICAgIHR5cGUsCiAgICBJ TlQgICAgICAgICAqbnVtYmVyTWF0Y2hlcwoJKTsKCklOVCBOUkhZX0dldFR5cGVfX05vdEFDaGFu X18gKAogICAgdm9pZCAKCSk7CgpaT09MRUFOIE5SSFlfQ2hlY2tBbmRGaXhOYU5DaGFubmVscyAo CiAgICBOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVGhpbmc+ICAgICpidW5jaF90aGluZ1B0cnMsCiAg ICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIGZpeEZsYWcKCSk7CgoKIAoKdm9pZCAg ICBOUkhZX1NhdmVDaGFubmVsICgKICAgICAgICAgICAgc3RydWN0IE5SSFlfY2xhc3NDaGFubmVs ICpjaGFuLAogICAgICAgICAgICBCT09MRUFOIG1ha2VLZXkKCSk7Cgp2b2lkICAgIE5SSFlfU2F2 ZUNoYW5uZWxzICgKICAgICAgICAgICAgY29uc3QgTGlzdDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5l bCAqPiAmY2hhbm5lbHMsCiAgICAgICAgICAgIEJPT0xFQU4gbWFrZUtleQoJKTsKCnZvaWQgICAg TlJIWV9SZXNldENoYW5uZWwgKAogICAgICAgICAgICBzdHJ1Y3QgTlJIWV9jbGFzc0NoYW5uZWwg KmNoYW4KCSk7Cgp2b2lkICAgIE5SSFlfUmVzZXRDaGFubmVscyAoCiAgICAgICAgICAgIGNvbnN0 IExpc3Q8Y2xhc3MgTlJIWV9jbGFzc0NoYW5uZWwgKj4gJmNoYW5uZWxzCgkpOwoKCiAKCgogCgoK CgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCkxpc3Q8dm9p ZCAqPiBOUkhZX0xvb2t1cENoYW5TcGVjRm9yUGFyc2xleSAoCgkJCQkJICAgY29uc3QgY2hhciog b2JqZWN0LAoJCQkJCSAgIEhVX1BhcnNlclN0YXRlJiBzdGF0ZQoJKTsKCkhVX1ZhbHVlIE5SSFlf RXZhbHVhdGVDaGFuU3BlY0ZvclBhcnNsZXkgKAoJCQkJCSBjb25zdCBjaGFyKiBvYmplY3QsCgkJ CQkJIGNvbnN0IExpc3Q8IHZvaWQqID4mIGxvb2t1cCwKCQkJCQkgSFVfUGFyc2VyU3RhdGUmIGdl bmVyaWNTdGF0ZQoJKTsKCmludCBOUkhZX1BhcnNlQ2hhblNwZWNGb3JQYXJzbGV5ICgKCQkJCSBU d2luZSYgb2JqZWN0CgkpOwoKaW50IE5SSFlfUGFyc2VDaGFuU3BlY0ZvclBhcnNsZXkgKAoJCQkJ IFR3aW5lJiBvYmplY3QsCgkJCQkgY29uc3QgY2hhciogZnVuY05hbWUsCgkJCQkgaW50IGFyZwoJ KTsKCgogCgoKIAoKCgoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIyAy MDggImgvbnJoeS5wIgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKdm9pZCBOUkhZX1BsYXlTb3VuZHMgKAoJKTsKCgoKCgoKIAoKCiAK CgogCgoKIAoKTlJIWV9jbGFzc09iamVjdCAqTlJIWV9HZXRNYW5pcHVsYXRpb25PYmplY3QgKCk7 CgppbnQgTlJIWV9HZXRNYW5pcHVsYXRpb25TcGFjZSAoKTsKCnZvaWQgIE5SSFlfU2V0TWFuaXB1 bGF0aW9uU3BhY2UgKAoJCQkgICAgICAgaW50IHNwYWNlCgkpOwoKdm9pZCAgTlJIWV9TZXRNYW5p cHVsYXRpb25TZWxlY3Rpb25Nb2RlICgKCQkJCSAgICAgICBaT09MRUFOIG1vZGUKCSk7CgpaT09M RUFOIE5SSFlfR2V0TWFuaXB1bGF0aW9uU2VsZWN0aW9uTW9kZSAoKTsKClpPT0xFQU4gTlJIWV9H ZXRNYW5pcHVsYXRpb25FeHRyYU1vZGUgKCk7CgpmbG9hdCBOUkhZX0dldE1hbmlwdWxhdG9ySWNv bkludGVuc2l0eSAoKTsKCnZvaWQgICBOUkhZX1NldE1hbmlwdWxhdG9ySWNvbkludGVuc2l0eSAo CgkJCQkgICAgICAgZmxvYXQgaW50ZW5zaXR5CgkpOwoKdm9pZCAgKk5SSFlfR2V0T2JqZWN0TWFu aXB1bGF0b3IgKCk7CgpCT09MRUFOIE5SSFlfRGVzdHJveU9iamVjdE1hbmlwdWxhdG9yICgpOwoK dm9pZCAgTlJIWV9TZXRNYW5pcHVsYXRpbmdGbGFnICgKCQkJICAgICAgQk9PTEVBTiBmbGFnCgkp OwoKQk9PTEVBTiBOUkhZX0dldE1hbmlwdWxhdGluZ0ZsYWcgKCk7CgoKIAoKCiAKCgogCgoKCgoK CiAKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCiAK ClpPT0xFQU4gTlJIWV9TZXRMZWdhbE5ld1RoaW5nICgKICAgIFpPT0xFQU4gICAgIHN0YXR1cywK ICAgIGNvbnN0IENIQVIgICpuYW1lCgkpOwoKdm9pZCAgTlJIWV9TZXRMZWdhbE5ld1RoaW5nRm9y UmVhZCAoCiAgICBaT09MRUFOICAgICBzdGF0dXMKCSk7CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCiAKCgogCgpNX01hdHJpeCBTaGFwZV9SZWdpc3RlclBvaW50cyAoCiAgTGlzdCA8TV9W ZWN0b3I+ICAgICAgIHAzLAogIExpc3QgPE1fVmVjdG9yPiAgICAgICBjMywKICBMaXN0IDxmbG9h dD4gICAgIHdlaWdodHMsCiAgQk9PTEVBTiAgICAgICAgIHVzZUNoYW5zCgkpOwoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiMgODMzICJoL25yaHkucCIKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgogCgoKIAoK CgoKCgoKCgoKCgoKCgoKCkJPT0xFQU4gTlJIWV9Jc0luQ2FsY0hhY2sgKAogICAgdm9pZAoJKTsK CkJPT0xFQU4gTlJIWV9TZXRJc0luQ2FsY0hhY2sgKAogICAgQk9PTEVBTiBuZXdTdGF0ZQoJKTsK CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgogCgoKIAoK CgojIDk0MiAiaC9ucmh5LnAiCgoKCgoKCgogCgoKCgoKdm9pZCAgTlJIWV9EZXNjcmliZURlYnVn ICgKICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmZGVzYwoJKTsKCgogCgoKIAoK CiAKCgogCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK IAoKCiAKCgoKCgoKIAoKCiAKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgogCgoKIAoKCiAKCgog CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCgoKIAoKCiAKCgoKCgoK CgogCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgog CgoKIAoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKIAoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKWk9PTEVBTiBOUkhZX1NldENvbW1hbmRDYWNoaW5n ICgKICAgIFpPT0xFQU4gc3RhdHVzCgkpOwoKCiAKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog CgoKIAoKCgoKCgogCgoKCgoKCiAKCgogCgoKCgoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgogCgoKIAoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgogCgoKIAoK CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgp2b2lkICBOUkhZX0Rlc2NyaWJlU2V0dGluZ3MgKAog ICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICZkZXNjCgkpOwoKCgoKCgogCgoKIAoK CiAKCgogCgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgoKCgoKCgoKCiAKCgogCgp2b2lkICBO UkhZX0Rlc2NyaWJlU3RlcmVvICgKICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAm ZGVzYwoJKTsKCgogCgoKCgoKCgoKCgoKCiAKCgogCgoKIAoKCiAKCgoKCgoKIAoKCiAKCgogCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgogCgpaT09MRUFOIE5SSFlfR2V0 RGVidWdVbmRvRnVuY1RyYWNraW5nICgKICAgIHZvaWQgCgkpOwoKWk9PTEVBTiBOUkhZX1NldERl YnVnVW5kb0Z1bmNUcmFja2luZyAoCiAgICBaT09MRUFOIHN0YXR1cwoJKTsKCnZvaWQgIE5SSFlf VW5kb0luaXQgKAogICAgICAgIHZvaWQgCgkpOwoKCiAKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKQk9PTEVBTiBOUkhZX0NvbGxpc2lvbl9QYWlyICgK ICAgIE5SSFlfY2xhc3NPYmplY3QgKm9iakEsCiAgICBOUkhZX2NsYXNzT2JqZWN0ICpvYmpCLAog ICAgaW50IGZyYW1lCgkpOwoKCiAKCkJPT0xFQU4gTlJIWV9VcGRhdGVUaGluZ0Zyb21DaGFuQ0Ig KAogICAgICAgIGNsYXNzIE5SSFlfY2xhc3NDaGFubmVsICpjaGFuLAogICAgICAgIHZvaWQgKndp ZAoJKTsKCkJPT0xFQU4gTlJIWV9QdXJnZUN1cnJlbnRDaGFubmVscyAoKTsKCkJPT0xFQU4gTlJI WV9TZXRDaGFubmVsc1RvQ3VycmVudCAoCiAgICAgICAgY29uc3QgTGlzdCA8Y2xhc3MgTlJIWV9j bGFzc0NoYW5uZWwgKj4gJmNoYW5MaXN0CgkpOwoKQk9PTEVBTiBOUkhZX0FkZENoYW5uZWxUb0N1 cnJlbnQgKAogICAgICAgIGNsYXNzIE5SSFlfY2xhc3NDaGFubmVsICpjaGFuCgkpOwoKQk9PTEVB TiBOUkhZX1JlbW92ZUNoYW5uZWxGcm9tQ3VycmVudCAoCiAgICAgICAgY2xhc3MgTlJIWV9jbGFz c0NoYW5uZWwgKmNoYW4KCSk7CgpCT09MRUFOIE5SSFlfSXNDaGFubmVsQ3VycmVudCAoCiAgICAg ICAgY2xhc3MgTlJIWV9jbGFzc0NoYW5uZWwgKmNoYW4KCSk7CgpCT09MRUFOIE5SSFlfTWFrZUNo YW5uZWxUaGVDdXJyZW50ICgKICAgICAgICBjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqY2hhbgoJ KTsKCk5SSFlfY2xhc3NDaGFubmVsICpOUkhZX0dldFRoZUN1cnJlbnQgKCk7CgpMaXN0PE5SSFlf Y2xhc3NDaGFubmVsICo+IE5SSFlfR2V0Q3VycmVudENoYW5uZWxzICgpOwoKTGlzdDxOUkhZX2Ns YXNzQ2hhbm5lbCAqPiBOUkhZX0dldFVuc29ydGVkQ3VycmVudENoYW5uZWxzICgpOwoKdm9pZCBO UkhZX0xpc3RDdXJyZW50Q2hhbm5lbHMgKCk7Cgp2b2lkIE5SSFlfQ3JlYXRlQ3VycmVudEVkaXRv ciAoCiAgICAgICAgaW50IHR5cGUKCSk7Cgp2b2lkIE5SSFlfRGVzdHJveUN1cnJlbnRFZGl0b3Ig KAogICAgICAgIGludCB0eXBlCgkpOwoKdm9pZCBOUkhZX0RlbGF5ZWRVcGRhdGVDdXJyZW50RWRp dG9yICgKICAgICAgICB1bnNpZ25lZCBmbGFncwoJKTsKCnZvaWQgTlJIWV9VcGRhdGVDdXJyZW50 RWRpdG9yICgKICAgICAgICB1bnNpZ25lZCBmbGFncwoJKTsKCnZvaWQgTlJIWV9TdWJzY3JpYmVU b0N1cnJlbnRDaGFubmVsTGlzdCAoCiAgICAgICAgT2JzZXJ2ZXIgKm9ic2VydmVyCgkpOwoKdm9p ZCBOUkhZX1Vuc3Vic2NyaWJlRnJvbUN1cnJlbnRDaGFubmVsTGlzdCAoCiAgICAgICAgT2JzZXJ2 ZXIgKm9ic2VydmVyCgkpOwoKZmxvYXQgKk5SSFlfR2V0Q3VycmVudENoYW5uZWxDb2xvciAoCiAg ICAgICAgY2xhc3MgTlJIWV9jbGFzc0NoYW5uZWwgKmNoYW4KCSk7Cgp2b2lkIE5SSFlfRGVzY3Jp YmVDdXJyZW50Q2hhbm5lbHMgKAogICAgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICZkZXNjCgkp OwoKdm9pZCBOUkhZX0Rlc2NyaWJlVGhlQ3VycmVudENoYW5uZWwgKAogICAgTlJIWV9DbGFzc0Rl c2NyaWJlU3RyZWFtICZkZXNjCgkpOwoKdm9pZCBOUkhZX0Rlc2NyaWJlQ29uZFRoZUN1cnJlbnRD aGFubmVsICgKICAgIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmZGVzYywKICAgIGNsYXNzIE5S SFlfY2xhc3NDaGFubmVsICpjaGFuCgkpOwoKdm9pZCBOUkhZX0Rlc2NyaWJlQWxsQ3VycmVudEN1 cnZlcyAoCiAgICBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJmRlc2MKCSk7CgoKCgoKCiAKCgog CgoKCgoKCiAKCgoKCgoKCgogCgoKIAoKCgoKCgoKCiAKCnZvaWQgIE5SSFlfQ2xlYW51cE9wdGlv blBhcm1zICgKICAgIHZvaWQgCgkpOwoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAK CmludCBNX0RlY29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQsCiAgICAgICAg TV9GTE9BVCAqIHNjYWxlLAogICAgICAgIE1fRkxPQVQgKiBzaGVhciwKICAgICAgICBjbGFzcyBN X1F1YXQgKnF1YXQsCiAgICAgICAgTV9GTE9BVCAqIHRyYW5zLAogICAgICAgIE1fRkxPQVQgKiBw ZXJzcAoJKTsKCmludCBNX0RlY29tcG9zZSAoCiAgICAgICAgY29uc3QgTV9NYXRyaXggJiBtYXQs CiAgICAgICAgTV9WZWN0b3IgJnNjYWxlLAogICAgICAgIE1fVmVjdG9yICZzaGVhciwKICAgICAg ICBjbGFzcyBNX1F1YXQgJnF1YXQsCiAgICAgICAgTV9WZWN0b3IgJnRyYW5zLAogICAgICAgIE1f VmVjdG9yNCAmcGVyc3AKCSk7CgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpMaXN0IDxBU0NJSV9PQkpfQ0hBTj4g TlJIWV9QYXJzZU9yaWdUb2tlbiAoCiAgICBjb25zdCBDSEFSICAgICAgKm9yaWdUb2tlbgoJKTsK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCkxpc3QgPEFTQ0lJX09CSl9DSEFOPiBOUkhZX1BhcnNlQ2hhbkluZm9JblRva2VuICgKICAg IGNvbnN0IENIQVIgICp0aGluZ05hbWUsCiAgICBjb25zdCBDSEFSICAqY2hhbk5hbWUKCSk7CgpM aXN0IDxBU0NJSV9PQkpfQ0hBTj4gTlJIWV9QYXJzZUNoYW5JbmZvSW5Ub2tlbiAoCiAgICBUd2lu ZSAgICZ0b2tlbgoJKTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKWk9PTEVB TiBOUkhZX0lzTmFtZUxlZ2FsICgKICAgIGNvbnN0IENIQVIgICpuYW1lSW5RdWVzdGlvbgoJKTsK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKVHdpbmUg TlJIWV9QdHNGaW5kRmlsZXNldCAoCiAgICBjb25zdCBUd2luZSAmIGZpbGVzZXQKCSk7CgpUd2lu ZSBOUkhZX1B0c0NyZWF0ZUZpbGVzZXQgKAogICAgY29uc3QgVHdpbmUgJiBmaWxlc2V0LAogICAg Y29uc3QgVHdpbmUgJiBkZmx0RmlsZXR5cGUKCSk7CgoKIAoKCiAKCk5SSFlfYnVuY2ggPE5SSFlf SU5UX0ZSQU5HRT4gKk5SSFlfcGFyc2VJbnRGcmFuZ2VJbnRvQnVuY2ggKAogICAgY29uc3QgQ0hB UiAgKmFzY2lpCgkpOwoKCgoKCk5SSFlfYnVuY2ggPE5SSFlfUkVBTF9GUkFOR0U+ICpOUkhZX3Bh cnNlUmVhbEZyYW5nZUludG9CdW5jaCAoCiAgICBjb25zdCBjaGFyKiBhc2NpaQoJKTsKClpPT0xF QU4gTlJIWV9Jc0ZyYW5nZVdpdGhpblVzZXJUb3RhbEZyYW1lcyAoCiAgICBOUkhZX1JFQUxfRlJB TkdFICAgIGZyYW5nZQoJKTsKClpPT0xFQU4gTlJIWV9Jc0ZyYW5nZVdpdGhpblVzZXJUb3RhbEZy YW1lcyAoCiAgICBOUkhZX0lOVF9GUkFOR0UgZnJhbmdlCgkpOwoKWk9PTEVBTiBOUkhZX0lzRnJh bmdlV2l0aGluVXNlclRvdGFsRnJhbWVzICgKICAgIFJFQUwgICAgICAgICAgICBzdGFydCwKICAg IFJFQUwgICAgICAgICAgICBlbmQKCSk7CgpaT09MRUFOIE5SSFlfSXNGcmFuZ2VXaXRoaW5Vc2Vy VG90YWxGcmFtZXMgKAogICAgSU5UICAgICAgICAgICAgIHN0YXJ0LAogICAgSU5UICAgICAgICAg ICAgIGVuZAoJKTsKCgoKCgoKIAoKVHdpbmUgTlJIWV9Gb3JtYXQgKCAKICAgIGNvbnN0IENIQVIg ICpmb3JtYXQsCiAgICAuLi4KCSk7Cgp2b2lkICBOUkhZX1ByaW50VmVjdCAoCmNvbnN0IGNoYXIg Km5hbWUsIApNX1ZlY3RvciB2ZWN0CgkpOwoKdm9pZCAgTlJIWV9QcmludE1hdCAoCmNvbnN0IGNo YXIgKm5hbWUsIApNX01hdHJpeCBtYXQKCSk7CgpmbG9hdCBOUkhZX0ludGVyc2VjdFJheXMgKApN X1ZlY3RvciAgICBPMSwKTV9WZWN0b3IgICAgTzIsCk1fVmVjdG9yICByYXkxLApNX1ZlY3RvciAg cmF5MiwKTV9WZWN0b3IgICAgKnB0CgkpOwoKCiAKCnZvaWQgTlJIWV9Jbml0aWFsaXplV29ybGQg KCk7CgpJTlQgTlJIWV9HZXRGcHMgKAogICAgdm9pZCAKCSk7CgpJTlQgTlJIWV9TZXRGcHMgKAog ICAgSU5UICAgICBuZXdfZnBzCgkpOwoKSU5UIE5SSFlfR2V0UGxheUZwcyAoCiAgICB2b2lkIAoJ KTsKCklOVCBOUkhZX1NldFBsYXlGcHMgKAogICAgSU5UICAgICBuZXdfcGxheWZwcwoJKTsKClJF QUwgTlJIWV9HZXRGYXN0Rm9yd2FyZCAoCiAgICB2b2lkIAoJKTsKClJFQUwgTlJIWV9TZXRGYXN0 Rm9yd2FyZCAoCiAgICBSRUFMICAgICAgICBuZXdfZmFzdEZvcndhcmQKCSk7CgpSRUFMIE5SSFlf R2V0T3JpZ2luU2l6ZSAoKTsKClJFQUwgTlJIWV9TZXRPcmlnaW5TaXplICgKICAgIFJFQUwgbmV3 T3JpZ2luU2l6ZQoJKTsKCkJPT0xFQU4gTlJIWV9HZXRPcmlnaW5EaXNwbGF5ICgpOwoKQk9PTEVB TiBOUkhZX1NldE9yaWdpbkRpc3BsYXkgKAogICAgQk9PTEVBTiBuZXdPcmlnaW5EaXNwbGF5Cgkp OwoKUkVBTCBOUkhZX0dldEZpcnN0UmVwZWF0ICgpOwoKdm9pZCBOUkhZX1NldEZpcnN0UmVwZWF0 ICgKICAgIFJFQUwgZGVsYXkKCSk7CgpCT09MRUFOIE5SSFlfU2V0U2NuU2VjdGlvbiAoCiAgICBj b25zdCBMaXN0IDxOUkhZX0lOVF9GUkFOR0UgKj4gJiBmcmFuZ2VQdHJzCgkpOwoKTlJIWV9JTlRf RlJBTkdFIE5SSFlfR2V0U2VjdGlvbkZyYW5nZSAoCiAgICBmbG9hdCBmcmFtZQoJKTsKCklOVCBO UkhZX0dldFNvdW5kQWN0aW9uICgKICAgIHZvaWQgCgkpOwoKSU5UIE5SSFlfU2V0U291bmRBY3Rp b24gKAogICAgSU5UICAgICBzb3VuZF9hY3Rpb24KCSk7CgoKIAoKCgoKCgoKCgoKCiMgMTEwICJo L25yaHkuaCIgMgoKCiAKCiMgMjggIm5yaHkvTlJIWV9BY2Nlc3MuYyIgMgoKIyAxICJoL05SSFlw cml2YXRlLnAiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKdm9pZCAgcHJpbnRWYWxpZEZyYW1l cyAoCiAgICBjb25zdCBMaXN0IDxSRUFMPiAmIGZyYW1lTGlzdAogKTsKCgoKCgoKCgoKCiAKCgoK CgoKIAoKSU5UIGRvTm90aGluZ0Z1bmNPZldvcmRzICgKICAgIGNvbnN0IGNoYXIgKiwKICAgIExp c3Q8Y29uc3QgY2hhciAqPgogKTsKCklOVCBkb05vdGhpbmdJbml0aWFsaXplRnVuYyAoCiAgICBj b25zdCBjaGFyICoKICk7CgoKCgoKCiAKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKdm9pZCAgTlJIWV9nbFB1c2hBdHRyaWIgKAogICAgdm9pZCAKICk7Cgp2b2lk ICBOUkhZX2dsUG9wQXR0cmliICgKICAgIHZvaWQgCiApOwoKdm9pZCAgTlJIWV9nbEVuYWJsZSAo CiAgICB1bnNpZ25lZCAgICBzdGF0ZQogKTsKCgoKCgp2b2lkICBOUkhZX2dsRGlzYWJsZSAoCiAg ICB1bnNpZ25lZCAgICBzdGF0ZQogKTsKCgoKCgp2b2lkICBOUkhZX2dsTGlnaHRzT2ZmICgKICAg IHZvaWQgCiApOwoKdm9pZCAgTlJIWV9nbEluaXRBdHRyaWJTdGFjayAoCiAgICB2b2lkIAogKTsK CnZvaWQgTlJIWV9nbExpZ2h0c09uICgKICAgIHZvaWQKICk7CgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoKCgoKCgogCgoKIAoKCiAKCgoKCgppbnQgbnJoeV9w YXJzZUludG9Xb3JkcyAoCiAgICBjb25zdCBUd2luZSAmaW5wdXRMaW5lLAogICAgTGlzdDxUd2lu ZT4gJndvcmRzCiApOwoKCiAKCgogCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog Cgpjb25zdCBMaXN0PE5SSFlfY2xhc3NUaGluZyo+ICZOUkhZX2dldFBpY2tlZE9iamVjdHMgKCk7 CgoKIAoKCgoKCgoKCgoKCiMgMjkgIm5yaHkvTlJIWV9BY2Nlc3MuYyIgMgoKIyAxICJoL25yaHlf d29ybGQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr LTIvc3RyaW5nIiAxIDMKIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTIvc3RkL2Jhc3RyaW5n LmgiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgoK CgoKI3ByYWdtYSBpbnRlcmZhY2UKCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9jc3RkZGVmIiAx IDMKIAogCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0y LjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBo YS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNiAiL3Vz ci9pbmNsdWRlL2crKy0yL2NzdGRkZWYiIDIgMwoKCiMgMzUgIi91c3IvaW5jbHVkZS9nKystMi9z dGQvYmFzdHJpbmcuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystMi9zdGQvc3RyYWl0cy5o IiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoK CiAKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRzLmgiCgoKCgpleHRlcm4gIkMrKyIgewp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgewogIHR5cGVk ZWYgY2hhclQgY2hhcl90eXBlOyAgCgogICAKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5 cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJv b2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJl dHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEs IGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRp YyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAg eyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4g Y2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2RlbChjaGFyX3R5cGUgYSkgeyByZXR1 cm4gMDsgfQogICAKICAKICAgCgogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBl KiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIHNpemVfdCBp OwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJaWYgKG5lIChzMVtpXSwgczJbaV0pKQoJ ICByZXR1cm4gbHQgKHMxW2ldLCBzMltpXSkgPyAtMSA6IDE7CgogICAgICByZXR1cm4gMDsKICAg IH0KICAgIAogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7 CiAgICAgIHNpemVfdCBsID0gMDsKICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQoJKyts OwogICAgICByZXR1cm4gbDsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90 eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAo OyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoK ICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUq IHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgY2hhcl90eXBlIGFbbl07CiAgICAgIHNpemVfdCBp OwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNzaWduIChhW2ldLCBzMltpXSk7CiAg ICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKHMxW2ldLCBhW2ldKTsKICAgICAg cmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEs IGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkK CWFzc2lnbiAoczFbbl0sIGMpOwogICAgICByZXR1cm4gczE7CiAgICB9Cn07CgpjbGFzcyBpc3Ry ZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi91c3IvaW5jbHVkZS9nKystMi9jY3R5cGUiIDEgMwog CiAKCgoKCgojIDEwNSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9zdHJhaXRzLmgiIDIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLTIvY3N0cmluZyIgMSAzCiAKIAoKCgoKCgojIDk0ICIvdXNyL2lu Y2x1ZGUvZysrLTIvY3N0cmluZyIgMwoKCgojIDEwNiAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9z dHJhaXRzLmgiIDIgMwoKCnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBl ZGVmIGNoYXIgY2hhcl90eXBlOwoKICBzdGF0aWMgdm9pZCBhc3NpZ24gKGNoYXJfdHlwZSYgYzEs IGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IGMxID0gYzI7IH0KICBzdGF0aWMgYm9vbCBlcSAo Y29uc3QgY2hhcl90eXBlICYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAo YzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0 IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgIT0gYzIpOyB9CiAgc3RhdGljIGJvb2wg bHQgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVy biAoYzEgPCBjMik7IH0KICBzdGF0aWMgY2hhcl90eXBlIGVvcyAoKSB7IHJldHVybiAwOyB9CiAg c3RhdGljIGJvb2wgaXNfZGVsKGNoYXJfdHlwZSBhKSB7IHJldHVybiAoX19jdHlwZV9iWyhpbnQp ICggKCBhICkgKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSAgIF9JU3NwYWNlICkgIDsgfQoKICBz dGF0aWMgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSog czIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGlj IHNpemVfdCBsZW5ndGggKGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAo cyk7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFy X3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMx LCBzMiwgbik7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25z dCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1t b3ZlIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMx LCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSop IG1lbXNldCAoczEsIGMsIG4pOyB9Cn07CgojIDE1OSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9z dHJhaXRzLmgiIDMKCn0gIAoKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9iYXN0cmluZy5o IiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0yL2FsbG9jLmgiIDEgMwogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUvZysrLTIvYWxsb2MuaCIgMwoKCgoKIAog CiAKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy0yL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgpleHRlcm4g IkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwoKIyAxICIvdXNyL2luY2x1ZGUv ZysrLTIvaXRlcmF0b3IiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgvZWdjcy0yLjkxLjY2L2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9hbHBoYS1yZWRoYXQtbGludXgv ZWdjcy0yLjkxLjY2L2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMzIgIi91c3IvaW5jbHVkZS9nKyst Mi9pdGVyYXRvciIgMiAzCgoKCgoKCiAKIAogCiMgNDQgIi91c3IvaW5jbHVkZS9nKystMi9zdGQv YmFzdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCBfX291dF9vZl9yYW5nZSAoY29uc3QgY2hh ciAqKTsKZXh0ZXJuIHZvaWQgX19sZW5ndGhfZXJyb3IgKGNvbnN0IGNoYXIgKik7CgoKCgoKCgoK CgoKCgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90 cmFpdHM8Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0 cmluZwp7CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsK ICAgIGJvb2wgc2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiByZWludGVycHJl dF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2hhclQmIG9wZXJhdG9yW10gKHNpemVf dCBzKSB7IHJldHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdyYWIgKCkgeyBpZiAoc2Vs ZmlzaCkgcmV0dXJuIGNsb25lICgpOyArK3JlZjsgcmV0dXJuIGRhdGEgKCk7IH0KICAgIHZvaWQg cmVsZWFzZSAoKSB7IGlmICgtLXJlZiA9PSAwKSBkZWxldGUgdGhpczsgfQoKICAgIGlubGluZSBz dGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0 YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVw KiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQg Y29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92 ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAo c2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBl eGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJv Yl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJl cCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0cmFpdHMJCXRyYWl0c190eXBlOwog IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFsdWVfdHlwZTsKICB0eXBlZGVm CSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYg cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl ZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7 CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25z dF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBz dGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3Qg eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVw IChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJs aWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0 YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5s ZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47 IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVz OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEp L3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4g c2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNvbnN0IGJhc2lj X3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAhPSB0aGlzKSB7IHJlcCAoKS0+cmVs ZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkg eyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJl cCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0 ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5n cmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBj aGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWdu IChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmls UmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4s IGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQoK ICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nKElucHV0SXRl cmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcC5ncmFi ICgpKSB7IGFzc2lnbiAoYmVnaW4sIGVuZCk7IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyBy ZXAgKCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hh clQgKmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBh cHBlbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6 ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBzdHIs IHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBzLCBuKTsgfQogIGJh c2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAo cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChzaXplX3R5 cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgbiwgYyk7 IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBw ZW5kKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmV0 dXJuIHJlcGxhY2UgKGllbmQgKCksIGllbmQgKCksIGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19z dHJpbmcmIGFzc2lnbiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAw LAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBz dHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMsIHNp emVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgcywgbik7IH0KICBiYXNp Y19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMs IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoc2l6ZV90eXBl IG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBuLCBjKTsgfQoKICB0 ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5w dXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVw bGFjZSAoaWJlZ2luICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5n JiBvcGVyYXRvcj0gKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzKTsgfQog IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjaGFyVCBjKQogICAgeyByZXR1cm4gYXNzaWduICgx LCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGJhc2ljX3N0cmluZyYg cmhzKQogICAgeyByZXR1cm4gYXBwZW5kIChyaHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRv cis9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAocyk7IH0KICBiYXNpY19z dHJpbmcmIG9wZXJhdG9yKz0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhcHBlbmQgKDEsIGMpOyB9 CgogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zMSwgY29uc3QgYmFzaWNfc3Ry aW5nJiBzdHIsCgkJCXNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKQogICAg eyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3MyLCBuKTsgfQogIGJhc2ljX3N0cmlu ZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAg ICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNl cnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gaW5zZXJ0IChw b3MsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6 ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChw b3MsIDAsIG4sIGMpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIGNoYXJUIGMpCiAg ICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVn aW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9 CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAg eyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2lu ICgpLCBuLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQoK ICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3Ig cCwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXBs YWNlIChwLCBwLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBlcmFzZSAoc2l6ZV90 eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBv cywgbiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRv ciBwKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9f bywgMSwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBp YmVnaW4oKSArIF9fbzsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGYsIGl0ZXJhdG9yIGwp CiAgICB7IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9fbywg bC1mLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTtzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJl Z2luKCkgKyBfX287IH0KCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zMSwg c2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJIHNpemVfdHlwZSBwb3My ID0gMCwgc2l6ZV90eXBlIG4yID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXpl X3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAoJCQkgc2l6ZV90eXBlIG4y KTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwg Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFpdHM6 Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBz aXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiByZXBs YWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJl cGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9y IGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVybiBy ZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmluZyYg cmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6ZV90 eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcywg bik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwg Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIg LSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRv ciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGli ZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRv cj4KICAgIGJhc2ljX3N0cmluZyYgcmVwbGFjZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCgkJ CSAgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMik7CgoKCgoKcHJpdmF0ZToKICBz dGF0aWMgY2hhclQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAgdm9pZCB1bmlx dWUgKCkgeyBpZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0cnVlKTsgfQog IHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQoK cHVibGljOgogIGNoYXJUIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAg ICAgIGlmIChwb3MgPT0gbGVuZ3RoICgpKQoJcmV0dXJuIGVvcyAoKTsKICAgICAgcmV0dXJuIGRh dGEgKClbcG9zXTsKICAgIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3Mp CiAgICB7IHNlbGZpc2ggKCk7IHJldHVybiAoKnJlcCAoKSlbcG9zXTsgfQoKICByZWZlcmVuY2Ug YXQgKHNpemVfdHlwZSBwb3MpCiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgp ICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAg ICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQgKHNpemVf dHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkg X19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAgICAg cmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KCnByaXZhdGU6CiAgdm9pZCB0ZXJtaW5hdGUgKCkg Y29uc3QKICAgIHsgdHJhaXRzOjphc3NpZ24gKCgqcmVwICgpKVtsZW5ndGggKCldLCBlb3MgKCkp OyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGNfc3RyICgpIGNvbnN0CiAgICB7IGlmIChsZW5n dGggKCkgPT0gMCkgcmV0dXJuICIiOyB0ZXJtaW5hdGUgKCk7IHJldHVybiBkYXRhICgpOyB9CiAg dm9pZCByZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKTsKICB2b2lkIHJlc2l6ZSAoc2l6ZV90 eXBlIG4pCiAgICB7IHJlc2l6ZSAobiwgZW9zICgpKTsgfQogIHZvaWQgcmVzZXJ2ZSAoc2l6ZV90 eXBlKSB7IH0KCiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90 eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZCAoY29uc3QgYmFzaWNfc3RyaW5n JiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoc3RyLmRh dGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJU KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmQg KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZp bmQgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjaGFy VCBjLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSByZmluZCAoY29uc3Qg YmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1 cm4gcmZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBy ZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsK ICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykg Y29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0K ICBzaXplX3R5cGUgcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsK CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHN0ci5kYXRh KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25z dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlw ZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0 CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7 IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDAp IGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5kX2xh c3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29u c3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3Ro KCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlw ZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25z dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5k X2xhc3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5k X2xhc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1 cm4gcmZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25z dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVy biBmaW5kX2ZpcnN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAg c2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv cywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29u c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9m aXJzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBm aW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBz aXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVf dHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZiAoc3Ry LmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rf b2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAg c2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z ID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHMsIHBvcywgdHJh aXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBj LCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIGJhc2ljX3N0cmluZyBzdWJzdHIgKHNp emVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBi YXNpY19zdHJpbmcgKCp0aGlzLCBwb3MsIG4pOyB9CgogIGludCBjb21wYXJlIChjb25zdCBiYXNp Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29u c3Q7CiAgIAogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6 ZV90eXBlIG4pIGNvbnN0OwogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl IHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBjb21wYXJlIChzLCBwb3MsIHRyYWl0czo6bGVu Z3RoIChzKSk7IH0KCiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigq dGhpcylbMF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhp cylbbGVuZ3RoICgpXTsgfQoKcHJpdmF0ZToKICBpdGVyYXRvciBpYmVnaW4gKCkgY29uc3QgeyBy ZXR1cm4gJigqcmVwICgpKVswXTsgfQogIGl0ZXJhdG9yIGllbmQgKCkgY29uc3QgeyByZXR1cm4g JigqcmVwICgpKVtsZW5ndGggKCldOyB9CgpwdWJsaWM6CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4g KCkgY29uc3QgeyByZXR1cm4gaWJlZ2luICgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNv bnN0IHsgcmV0dXJuIGllbmQgKCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4o KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv ciAoZW5kICgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVu ZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7 IH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvYyAoc2l6ZV90eXBlIHNpemUsIGJvb2wgc2F2ZSk7CiAg c3RhdGljIHNpemVfdHlwZSBfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90 eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pOwogIGlubGluZSBib29sIGNoZWNrX3JlYWxsb2MgKHNp emVfdHlwZSBzKSBjb25zdDsKCiAgc3RhdGljIFJlcCBuaWxSZXA7CiAgY2hhclQgKmRhdDsKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiB0 ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpy ZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElucHV0SXRlcmF0b3IgajEsIElucHV0 SXRlcmF0b3IgajIpCgoKCgoKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAg c2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgpOwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7 CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0 X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBw b3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAo KSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsg fSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hl Y2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5l d2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBv cyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3Ig KDsgajEgIT0gajI7ICsrajEsICsrcG9zKQoJdHJhaXRzOjphc3NpZ24gKCgqcClbcG9zXSwgKmox KTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3Zl IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAg Zm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlb cG9zXSwgKmoxKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlz Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9y KyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkg ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3Ry LmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJo cyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPgpvcGVyYXRvcisgKGNoYXJUIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4gc3RyICgxLCBsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0 cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRv cisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBj b25zdCBjaGFyVCogcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY2hhclQgcmhzKQp7 CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBz dHIuYXBwZW5kICgxLCByaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0g KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAg IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg cmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAo Y29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg Ym9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo cykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0 IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJu IChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3Qg YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJU KiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv cGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg bGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg cmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy YXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0 cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA+IDApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp bmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy ZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGNoYXJUKiBsaHMsIGNv bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0 dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0 IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFy VCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv cGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPj0g MCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0 b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMu Y29tcGFyZSAocmhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgY2hhclQq IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp CnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRv cj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywg Y29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s aW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg Ym9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi b29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+PSAwKTsKfQoKY2xhc3Mg aXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+PiAoaXN0cmVhbSYsIGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBvc3RyZWFtJgpvcGVyYXRvcjw8IChv c3RyZWFtJiwgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jik7 CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlz dHJlYW0mCmdldGxpbmUgKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mLCBjaGFyVCBkZWxpbSA9ICdcbicpOwoKfSAgCgojIDEgIi91c3IvaW5jbHVkZS9n KystMi9zdGQvYmFzdHJpbmcuY2MiIDEgMwogCiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAK CiAKIAogCiAKIAoKIAogCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCAqIGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKb3BlcmF0b3IgbmV3IChzaXplX3Qgcywg c2l6ZV90IGV4dHJhKQp7CiAgcmV0dXJuIEFsbG9jYXRvcjo6YWxsb2NhdGUocyArIGV4dHJhICog c2l6ZW9mIChjaGFyVCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqIHB0cikKewogIEFsbG9j YXRvcjo6ZGVhbGxvY2F0ZShwdHIsIHNpemVvZihSZXApICsKCQkJcmVpbnRlcnByZXRfY2FzdDxS ZXAgKj4ocHRyKS0+cmVzICoKCQkJc2l6ZW9mIChjaGFyVCkpOyAKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHNpemVfdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmZyb2Jfc2l6ZSAoc2l6 ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykgaSAqPSAyOwogIHJldHVy biBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAg KgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNyZWF0ZSAo c2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJhICsgMSk7CiAgUmVwICpw ID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAtPnJlZiA9IDE7CiAgcC0+ c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3Jl YXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwog IHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qgcywgc2l6ZV90IHIpCnsK ICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sIGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3JlYWxsb2MgKGJhc2ljX3N0 cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAoY2hhclQpOwogIHJlcCAo KS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYgPiAxCgkgIHx8IHMgPiBj YXBhY2l0eSAoKQoJICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBhY2l0eSAoKSkpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lk IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmFsbG9jIChiYXNpY19z dHJpbmc6OnNpemVfdHlwZSBzaXplLCBib29sIHNhdmUpCnsKICBpZiAoISBjaGVja19yZWFsbG9j IChzaXplKSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKHNpemUpOwoKICBp ZiAoc2F2ZSkKICAgIHsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3RoICgpKTsKICAg ICAgcC0+bGVuID0gbGVuZ3RoICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9IDA7CgogIHJl cHVwIChwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9z MSwgc2l6ZV90eXBlIG4xLAoJIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9z Miwgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOwoK ICBpZiAocG9zMSA9PSAwICYmIG4xID49IGxlbmd0aCAoKSAmJiBwb3MyID09IDAgJiYgbjIgPj0g bGVuMikKICAgIHJldHVybiBvcGVyYXRvcj0gKHN0cik7CgogIGRvIHsgaWYgKCBwb3MyID4gbGVu MiApIF9fb3V0X29mX3JhbmdlICgicG9zMiA+IGxlbjIiKTsgfSB3aGlsZSAoMCkgOwoKICBpZiAo bjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVuMiAtIHBvczI7CgogIHJldHVybiByZXBsYWNl IChwb3MxLCBuMSwgc3RyLmRhdGEgKCkgKyBwb3MyLCBuMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY29weSAoc2l6ZV90IHBvcywg Y29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6OmNvcHkgKGRh dGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBz aXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjptb3ZlIChkYXRhICgpICsgcG9zLCBzLCBu KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXpl X3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3R5 cGUgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5n ZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAg bjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiAp IF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUg KDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxs b2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwog ICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwg ZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+Y29weSAocG9z LCBzLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAo KS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7 CiAgICAgIHJlcCAoKS0+Y29weSAocG9zLCBzLCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBu ZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpzZXQgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUIGMs IHNpemVfdCBuKQp7CiAgdHJhaXRzOjpzZXQgIChkYXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVt cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEs IHNpemVfdHlwZSBuMiwgY2hhclQgYykKewogIGNvbnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7 CiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0g d2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBk byB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJs ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXds ZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsK ICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRh dGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEs IGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBwLT5zZXQgIChwb3MsIGMsIG4yKTsKICAgICAgcmVw dXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwg ZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5zZXQg IChwb3MsIGMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0 aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlc2l6 ZSAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCnsKICBkbyB7IGlmICggbiA+IG1heF9zaXplICgpICkg X19sZW5ndGhfZXJyb3IgKCJuID4gbWF4X3NpemUgKCkiKTsgfSB3aGlsZSAoMCkgOwoKICBpZiAo biA+IGxlbmd0aCAoKSkKICAgIGFwcGVuZCAobiAtIGxlbmd0aCAoKSwgYyk7CiAgZWxzZQogICAg ZXJhc2UgKG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVf dHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb3B5IChjaGFy VCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBkbyB7IGlmICggcG9z ID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGls ZSAoMCkgOwoKICBpZiAobiA+IGxlbmd0aCAoKSAtIHBvcykKICAgIG4gPSBsZW5ndGggKCkgLSBw b3M7CgogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAgcmV0dXJuIG47Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBz aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwog IGZvciAoOyB4cG9zICsgbiA8PSBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVx IChkYXRhICgpIFt4cG9zXSwgKnMpCgkmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9z LCBzLCBuKSA9PSAwKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6Cl9maW5kIChjb25zdCBjaGFyVCogcHRy LCBjaGFyVCBjLCBzaXplX3R5cGUgeHBvcywgc2l6ZV90eXBlIGxlbikKewogIGZvciAoOyB4cG9z IDwgbGVuOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAocHRyIFt4cG9zXSwgYykpCiAgICAg IHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46OgpmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgcmV0dXJuIF9m aW5kIChkYXRhICgpLCBjLCBwb3MsIGxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPjo6CnJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90 eXBlIG4pIGNvbnN0CnsKICBpZiAobiA+IGxlbmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBz aXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIG47CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0g cG9zOwoKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRh dGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhwb3MsIHMs IG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29u c3QKewogIGlmICgxID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5wb3M7CgogIHNpemVfdCB4cG9z ID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CgogIGZv ciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBbeHBv c10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9y ICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBb eHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfb2YgKGNvbnN0IGNo YXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChsZW5ndGgo KSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwog IGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4g MDspCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSAhPSBucG9zKQogICAg ICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z LCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9z IDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAw LCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNp emVfdHlwZSBwb3MpIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8 IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBj KSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0 cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5 cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChsZW5ndGgoKSA9PSAwKQogICAgcmV0 dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9z KQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDspCiAgICBpZiAoX2Zp bmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsK ICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Ojpz aXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9s YXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGlmIChsZW5ndGgo KSA9PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwog IGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4g MDspCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4g eHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9z LCBzaXplX3R5cGUgbikgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291 dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVfdCBy bGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlm IChybGVuID4gc3RyLmxlbmd0aCAoKSkKICAgIHJsZW4gPSBzdHIubGVuZ3RoICgpOwogIGludCBy ID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzdHIuZGF0YSAoKSwgcmxlbik7CiAg aWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIGlmIChybGVuID09IG4pCiAgICByZXR1cm4gMDsK ICByZXR1cm4gKGxlbmd0aCAoKSAtIHBvcykgLSBzdHIubGVuZ3RoICgpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMs IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxl bmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDAp IDsKCiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAg cmxlbiA9IG47CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMsIHJs ZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBv cykgLSBuOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+CmlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICZpcywgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ICZzKQp7CiAgaW50IHcgPSBpcy53aWR0aCAoMCk7 CiAgaWYgKGlzLmlwZngwICgpKQogICAgewogICAgICByZWdpc3RlciBzdHJlYW1idWYgKnNiID0g aXMucmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCgl7CgkgIGlu dCBjaCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkKCSAgICB7CgkgICAgICBp cy5zZXRzdGF0ZSAoaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBlbHNlIGlm ICh0cmFpdHM6OmlzX2RlbCAoY2gpKQoJICAgIHsKCSAgICAgIHNiLT5zdW5nZXRjICgpOwoJICAg ICAgYnJlYWs7CgkgICAgfQoJICBzICs9IGNoOwoJICBpZiAoLS13ID09IDEpCgkgICAgYnJlYWs7 Cgl9CiAgICB9CgogIGlzLmlzZnggKCk7CiAgaWYgKHMubGVuZ3RoICgpID09IDApCiAgICBpcy5z ZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpvc3RyZWFtICYKb3BlcmF0b3I8 PCAob3N0cmVhbSAmbywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiBzKQp7CiAgcmV0dXJuIG8ud3JpdGUgKHMuZGF0YSAoKSwgcy5sZW5ndGggKCkpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppc3Ry ZWFtJgpnZXRsaW5lIChpc3RyZWFtICZpcywgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+JiBzLCBjaGFyVCBkZWxpbSkKewogIGlmIChpcy5pcGZ4MSAoKSkKICAgIHsKICAg ICAgc2l6ZV90ICAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0gaXMucmRidWYgKCk7 CiAgICAgIHMucmVzaXplICgwKTsKCiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+ c2J1bXBjICgpOwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUg KGNvdW50ID09IDAKCQkJICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0KQoJCQkgICA6IGlv czo6ZW9mYml0KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCgkgICsrY291bnQ7CgoJICBpZiAoY2gg PT0gZGVsaW0pCgkgICAgYnJlYWs7CgoJICBzICs9IGNoOwoKCSAgaWYgKHMubGVuZ3RoICgpID09 IHMubnBvcyAtIDEpCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7Cgkg ICAgICBicmVhazsKCSAgICB9Cgl9CiAgICB9CgogICAKICAgCiAgaXMuaXNmeCAoKTsKCiAgcmV0 dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcApiYXNp Y19zdHJpbmc8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bmlsUmVwID0geyAwLCAwLCAxLCBm YWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpucG9zOwoKfSAg CiMgNjE4ICIvdXNyL2luY2x1ZGUvZysrLTIvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgojIDYgIi91 c3IvaW5jbHVkZS9nKystMi9zdHJpbmciIDIgMwoKCmV4dGVybiAiQysrIiB7CnR5cGVkZWYgYmFz aWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7CiAKfSAgCgoKIyAyMyAiaC9ucmh5X3dvcmxkLmgiIDIK CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIAogCiAKCiMgMSAiaC9ucmh5X2NsYXNzVGltZS5oIiAx CiAKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIAoKCnN0cnVjdCBOUkhZX0lOVF9GUkFOR0Ugewpw dWJsaWMgOgogICAgSU5UICAgICAgICAgICAgICAgICBzdGFydDsKICAgIElOVCAgICAgICAgICAg ICAgICAgZW5kOwogICAgSU5UICAgICAgICAgICAgICAgICBpbmM7CgogICAgIAogICAgVHdpbmUg ICAgICAgICAgICAgICBHZXROYW1lRm9yQnVuY2goKTsKCiAgICBOUkhZX0lOVF9GUkFOR0UgKAog ICAgICAgIHZvaWQgCiAgICApIHsgc3RhcnQgPSAwOyBlbmQgPSAwOyBpbmMgPSAwOyB9CgogICAg IAoKICAgIHN0YXRpYyB2b2lkICAgICAgICAgICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAg c3RhdGljIGNvbnN0IENIQVIgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJO UkhZX0lOVF9GUkFOR0UiKTsgfQoKICAgIHZvaWQgICAgICAgICAgICAgICAgIFByaW50U2VsZiAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg ICApIHsgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfY2xhc3NUaW1lLmgiLCBUWFRfU3JjTGluZSAg ID0gNTIsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiJWQtJWQ6JWRcbiIsIHN0YXJ0LCBlbmQsIGlu Yyk7IH0KfTsKaW5saW5lIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSggTlJIWV9JTlRfRlJBTkdFICkg eyByZXR1cm4gIk5SSFlfSU5UX0ZSQU5HRSI7IH07CgpzdHJ1Y3QgTlJIWV9SRUFMX0ZSQU5HRSB7 CnB1YmxpYyA6CiAgICBSRUFMICAgICAgICAgICAgICAgIHN0YXJ0OwogICAgUkVBTCAgICAgICAg ICAgICAgICBlbmQ7CiAgICBSRUFMICAgICAgICAgICAgICAgIGluYzsKCiAgICAgCiAgICBUd2lu ZSAgICAgICAgICAgICAgIEdldE5hbWVGb3JCdW5jaCgpOwoKICAgIE5SSFlfUkVBTF9GUkFOR0Ug KAogICAgICAgIHZvaWQgCiAgICApIHsgc3RhcnQgPSAoUkVBTCkwLjA7IGVuZCA9IChSRUFMKTAu MDsgaW5jID0gKFJFQUwpMC4wOyB9CgogICAgfk5SSFlfUkVBTF9GUkFOR0UgKAogICAgICAgIHZv aWQgCiAgICApIHsgc3RhcnQgPSAoUkVBTCkwLjA7IGVuZCA9IChSRUFMKTAuMDsgaW5jID0gKFJF QUwpMC4wOyB9CgogICAgIAoKICAgIHN0YXRpYyB2b2lkICAgICAgICAgICpGaW5kICgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAg ICAgICAgICk7CgogICAgc3RhdGljIGNvbnN0IENIQVIgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg ICkgeyByZXR1cm4gKCJOUkhZX1JFQUxfRlJBTkdFIik7IH0KCgoKCgoKCgoKICAgIHZvaWQgICAg ICAgICAgICAgICAgIFByaW50U2VsZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IAogICAgICAgICAgICAgICAgICAgICAgICApIHsgVFhUX1NyY0ZpbGUgICA9ICJoL25yaHlfY2xh c3NUaW1lLmgiLCBUWFRfU3JjTGluZSAgID0gOTMsIFRYVF9PdXRwdXRmICAoc3RkZXJyLCAiJWYt JWY6JWZcbiIsIHN0YXJ0LCBlbmQsIGluYyk7IH0KfTsKCgoKCiAKCgoKCgoKCgoKCgoKCmNsYXNz IE5SSFlfRlJBTkdFIHsKcHVibGljOgogICAgIAogICAgSU5UICAgICAgICAgICAgICAgICBmbGFn czsKCiAgICAgCiAgICBOUkhZX1JFQUxfRlJBTkdFICAgIHJlYWxGcmFuZ2U7CiAgICBOUkhZX0lO VF9GUkFOR0UgICAgIGludEZyYW5nZTsKCiAgICBOUkhZX0ZSQU5HRSAoCiAgICAgICAgdm9pZCAK ICAgICkgeyBmbGFncyA9ICgweDAwMDAwMDAwKSA7IH0KCiAgICB+TlJIWV9GUkFOR0UgKAogICAg ICAgIHZvaWQgCiAgICApIHsgZmxhZ3MgPSAoMHgwMDAwMDAwMCkgOyB9CgogICAgc3RhdGljIGNv bnN0IENIQVIgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKCJOUkhZX0ZSQU5H RSIpOyB9CgoKCgoKCgoKCn07CmlubGluZSBjb25zdCBjaGFyICpjbGFzc05hbWUoIE5SSFlfRlJB TkdFICkgeyByZXR1cm4gIk5SSFlfRlJBTkdFIjsgfTsKCgogCiAKCiAKIAoKY2xhc3MgRnJhbmdl U3Vic2NyaWJlciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBTZXRUb3RhbEZyYW5nZSAoZmxv YXQgc3RhcnQsIGZsb2F0IGVuZCkgeyB9OwogICAgdmlydHVhbCB2b2lkIFNldEZyYW5nZSAgICAg IChmbG9hdCBzdGFydCwgZmxvYXQgZW5kKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgU2V0RnJhbWUg ICAgICAgKGZsb2F0IG5ld0ZyYW1lKSB7IH07CiAgICB2aXJ0dWFsIHZvaWQgU2V0RmluYyAgICAg ICAgKGZsb2F0IGZpbmMpICAgICB7IH07CiAgICB2aXJ0dWFsIHZvaWQgU2hpZnRGcmFtZXMgICAg KGZsb2F0IHN0YXJ0LCBmbG9hdCBzaXplLCBmbG9hdCBkZWx0YSkgeyB9Owp9OwoKIAoKCgpjbGFz cyBOUkhZX2NsYXNzVGltZSB7CgogICAgIAogICAgZnJpZW5kIGNsYXNzIE5SSFlfY2xhc3NDaGFu bmVsOwogICAgTGlzdCA8RnJhbmdlU3Vic2NyaWJlciAqPiBfY3VycmVudEZyYW5nZVN1YnNjcmli ZXJzOwogICAgdm9pZCBwdWJsaXNoVG90YWxGcmFuZ2UgICAoKTsKICAgIHZvaWQgcHVibGlzaEN1 cnJlbnRGcmFuZ2UgKCk7CiAgICB2b2lkIHB1Ymxpc2hDdXJyZW50RnJhbWUgICgpOwogICAgdm9p ZCBwdWJsaXNoQ3VycmVudEZpbmMgICAoKTsKICAgIHZvaWQgcHVibGlzaFNoaWZ0RnJhbWVzICAg KGZsb2F0LCBmbG9hdCwgZmxvYXQpOwogICAgIAoKICAgICAKCgogICAgSU5UICAgICAgICAgICAg IHRvdGFsRnJhbWVzOwoKICAgICAKCiAgICBJTlQgICAgICAgICAgICAgb2Zmc2V0OwoKICAgICAK ICAgIFJFQUwgICAgICAgICAgICBjdXJyZW50RnJhbWU7CgogICAgIAogICAgTlJIWV9GUkFOR0Ug ICAgIGN1cnJlbnRGcmFuZ2U7CgogICAgIAoKCiAgICBaT09MRUFOICAgICAgICAgYWxsb3dPdXRP ZlJhbmdlQ3VycmVudEZyYW1lOwoKICAgICAKCiAgICBaT09MRUFOICAgICAgICAgc2VjdGlvbkFj dGl2ZTsKICAgIFJFQUwgICAgICAgICAgICBzZWN0aW9uU3RhcnQ7CiAgICBSRUFMICAgICAgICAg ICAgc2VjdGlvbkVuZDsKCiAgICAgCgogICAgQk9PTEVBTiBfY3JlYXRlZEZsYWc7CgogICAgIAoK CiAgICAgCgogICAgSU5UICAgICAgICAgICAgIGdldEZyYW1lSW5kZXggKAogICAgICAgICAgICAg ICAgICAgICAgICBJTlQgICAgIHRpbWUKICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICh0 aW1lIC0gb2Zmc2V0KTsgfQoKcHVibGljOgoKICAgIE5SSFlfY2xhc3NUaW1lICgpOwoKICAgICAK ICAgIFpPT0xFQU4gICAgICAgICBTZXRPZmZzZXQgKAogICAgICAgICAgICAgICAgICAgICAgICBJ TlQgICAgIG9mZnNldAogICAgICAgICAgICAgICAgICAgICk7CiAgICBJTlQgICAgICAgICAgICAg R2V0T2Zmc2V0ICgKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg ICAgICApIHsgcmV0dXJuIChvZmZzZXQpOyB9CgogICAgIAogICAgdm9pZCAgICAgICAgICAgICBT ZXRGcmFtZVZhcmlhYmxlcyAoKTsKCiAgICAgCgogICAgSU5UICAgICAgICAgICAgIEdldFVzZXJU b3RhbEZyYW1lc1N0YXJ0ICgKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAg ICAgICAgICAgICApIHsgcmV0dXJuICgxICsgb2Zmc2V0KTsgfQogICAgSU5UICAgICAgICAgICAg IEdldFVzZXJUb3RhbEZyYW1lc0VuZCAoCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg ICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAodG90YWxGcmFtZXMgKyBvZmZzZXQpOyB9CiAg ICB2b2lkICAgICAgICAgICAgIEdldFVzZXJUb3RhbEZyYW5nZSAoCiAgICAgICAgICAgICAgICAg ICAgICAgIElOVCAgICAgKnN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICpl bmQKICAgICAgICAgICAgICAgICAgICApIHsgKnN0YXJ0ID0gKDEgKyBvZmZzZXQpOwogICAgICAg ICAgICAgICAgICAgICAgICAqZW5kID0gKHRvdGFsRnJhbWVzICsgb2Zmc2V0KTsKICAgICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgCgogICAgWk9PTEVBTiAgICAgICAgIEFkZEZyYW1lcyAoCiAg ICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgYW1vdW50LAogICAgICAgICAgICAgICAgICAg ICAgICBJTlQgICAgIGluc2VydEFmdGVyCiAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xF QU4gICAgICAgICBTdWJGcmFtZXMgKAogICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgIGFt b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICByZW1vdmVBZnRlcgogICAgICAg ICAgICAgICAgICAgICk7CgogICAgIAoKCgogICAgWk9PTEVBTiAgICAgICAgIFNldEFsbG93T3V0 T2ZSYW5nZUN1cnJlbnRGcmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFpPT0xFQU4gc3Rh dGUKICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgIEdldEFsbG93T3V0 T2ZSYW5nZUN1cnJlbnRGcmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg ICAgICAgICAgICAgICAgKSB7IHJldHVybiAoYWxsb3dPdXRPZlJhbmdlQ3VycmVudEZyYW1lKTsg fQoKICAgIFpPT0xFQU4gICAgICAgICBTZXRTZWN0aW9uQWN0aXZlICgKICAgICAgICAgICAgICAg ICAgICAgICAgWk9PTEVBTiBuZXdTdGF0dXMKICAgICAgICAgICAgICAgICAgICApIHsgWk9PTEVB TiAgICAgb2xkOwogICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSBzZWN0aW9uQWN0aXZlOwog ICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQWN0aXZlID0gbmV3U3RhdHVzOwogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKG9sZCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAg ICBaT09MRUFOICAgICAgICAgR2V0U2VjdGlvbkFjdGl2ZSAoCiAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoc2VjdGlvbkFjdGl2ZSk7 IH0KICAgIFpPT0xFQU4gICAgICAgICBTZXRTZWN0aW9uUmFuZ2UgKAogICAgICAgICAgICAgICAg ICAgICAgICBSRUFMICAgIHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAgIGVu ZAogICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgIEdldFNlY3Rpb25S YW5nZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgKnN0YXJ0LAogICAgICAgICAg ICAgICAgICAgICAgICBSRUFMICAgICplbmQKICAgICAgICAgICAgICAgICAgICApIHsgKnN0YXJ0 ID0gc2VjdGlvblN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICAqZW5kID0gc2VjdGlvbkVu ZDsKICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgU2V0 Q3VycmVudEZyYW5nZSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgbmV3U3RhcnQs CiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgbmV3RW5kLAogICAgICAgICAgICAgICAg ICAgICAgICBSRUFMICAgIG5ld0luYwogICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAg ICAgICAgICAgICBHZXRDdXJyZW50RnJhbmdlICgKICAgICAgICAgICAgICAgICAgICAgICAgUkVB TCAgICAqc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgKmVuZCwKICAgICAg ICAgICAgICAgICAgICAgICAgUkVBTCAgICAqaW5jCiAgICAgICAgICAgICAgICAgICAgKSB7ICpz dGFydCA9IGN1cnJlbnRGcmFuZ2UucmVhbEZyYW5nZS5zdGFydDsKICAgICAgICAgICAgICAgICAg ICAgICAgKmVuZCA9IGN1cnJlbnRGcmFuZ2UucmVhbEZyYW5nZS5lbmQ7CiAgICAgICAgICAgICAg ICAgICAgICAgICppbmMgPSBjdXJyZW50RnJhbmdlLnJlYWxGcmFuZ2UuaW5jOwogICAgICAgICAg ICAgICAgICAgICAgfQoKICAgIHZvaWQgICAgICAgICAgICAgR2V0Q3VycmVudEZyYW5nZSAoCiAg ICAgICAgICAgICAgICAgICAgICAgIE5SSFlfUkVBTF9GUkFOR0UgICAgKmZyYW5nZQogICAgICAg ICAgICAgICAgICAgICkgeyBmcmFuZ2UtPnN0YXJ0ID0gY3VycmVudEZyYW5nZS5yZWFsRnJhbmdl LnN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICBmcmFuZ2UtPmVuZCA9IGN1cnJlbnRGcmFu Z2UucmVhbEZyYW5nZS5lbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW5nZS0+aW5jID0g Y3VycmVudEZyYW5nZS5yZWFsRnJhbmdlLmluYzsKICAgICAgICAgICAgICAgICAgICAgIH0KCiAg ICB2b2lkICAgICAgICAgICAgIEdldEN1cnJlbnRGcmFuZ2UgKAogICAgICAgICAgICAgICAgICAg ICAgICBJTlQgICAgICpzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAqZW5k LAogICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICppbmMKICAgICAgICAgICAgICAgICAg ICApIHsgKnN0YXJ0ID0gY3VycmVudEZyYW5nZS5pbnRGcmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAg ICAgICAgICAgICAgICplbmQgPSBjdXJyZW50RnJhbmdlLmludEZyYW5nZS5lbmQ7CiAgICAgICAg ICAgICAgICAgICAgICAgICppbmMgPSBjdXJyZW50RnJhbmdlLmludEZyYW5nZS5pbmM7CiAgICAg ICAgICAgICAgICAgICAgICB9CgogICAgdm9pZCAgICAgICAgICAgICBHZXRDdXJyZW50RnJhbmdl ICgKICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9JTlRfRlJBTkdFICAgICAqZnJhbmdlCiAg ICAgICAgICAgICAgICAgICAgKSB7IGZyYW5nZS0+c3RhcnQgPSBjdXJyZW50RnJhbmdlLmludEZy YW5nZS5zdGFydDsKICAgICAgICAgICAgICAgICAgICAgICAgZnJhbmdlLT5lbmQgPSBjdXJyZW50 RnJhbmdlLmludEZyYW5nZS5lbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW5nZS0+aW5j ID0gY3VycmVudEZyYW5nZS5pbnRGcmFuZ2UuaW5jOwogICAgICAgICAgICAgICAgICAgICAgfQoK ICAgICAKICAgIFpPT0xFQU4gICAgICAgICBTZXRDdXJyZW50RnJhbWUoZmxvYXQgbmV3RnJhbWUp OwogICAgZmxvYXQgICAgICAgICAgIEdldEN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIGN1cnJlbnRG cmFtZTsgfQoKICAgICAKICAgIHZvaWQgICAgICAgICAgICBTZXRVbmRvRm9yRnJhbmdlQ2hhbmdl IChjb25zdCBOUkhZX1JFQUxfRlJBTkdFICZuZXdGcmFuZ2UpOwogICAgIAogICAgdm9pZCAgICAg ICAgICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJI WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYgICAgCiAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZv aWQgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAg IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgKTsK ICAgIHZvaWQgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAg ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg ICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAg ICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJiwgICAKICAg ICAgICAgICAgICAgICAgICAgICAgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgIGZyYW5nZQogICAg ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUg KAogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g JiwKICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9JTlRfRlJBTkdFICAgICAgICAgIGZyYW5n ZQogICAgICAgICAgICAgICAgICAgICk7CgoKCiAgICBCT09MRUFOIEdldENyZWF0ZWRGbGFnICgp IHsgcmV0dXJuIChfY3JlYXRlZEZsYWcpOyB9CiAgICB2b2lkIFNldENyZWF0ZWRGbGFnICgpIHsg X2NyZWF0ZWRGbGFnID0gMSA7IH0KICAgIHZvaWQgQ2xlYXJDcmVhdGVkRmxhZygpIHsgX2NyZWF0 ZWRGbGFnID0gMCA7IH0KICAgIHZvaWQgQXR0YWNoQ3VycmVudEZyYW5nZVN1YnNjcmliZXIgKEZy YW5nZVN1YnNjcmliZXIgKiBzdWJzY3JpYmVyKTsKICAgIHZvaWQgRGV0YWNoQ3VycmVudEZyYW5n ZVN1YnNjcmliZXIgKEZyYW5nZVN1YnNjcmliZXIgKiBzdWJzY3JpYmVyKTsKICAgIGludCBHZXRU b3RhbEZyYW1lcyAoKSB7IHJldHVybiAodG90YWxGcmFtZXMpOyB9Cn07CgogCgogCgojIDMwICJo L25yaHlfd29ybGQuaCIgMgoKCgogCiAKCmNsYXNzIE5SSFlfY2xhc3NBcHBhcml0aW9uOwpjbGFz cyBOUkhZX2NsYXNzQ2FtZXJhOwpjbGFzcyBOUkhZX2NsYXNzQ29sbGlzaW9uOwpjbGFzcyBOUkhZ X2NsYXNzRHluYW1pY3M7CmNsYXNzIE5SSFlfY2xhc3NGb3JjZTsKY2xhc3MgTlJIWV9jbGFzc0dl bmVyYXRvcjsKY2xhc3MgTlJIWV9jbGFzc0hvbWU7CmNsYXNzIE5SSFlfY2xhc3NJbmt5OwpjbGFz cyBOUkhZX2NsYXNzS2xpc3Q7CmNsYXNzIE5SSFlfY2xhc3NGdXI7CmNsYXNzIE5SSFlfY2xhc3NN dXNjbGU7CmNsYXNzIE5SSFlfY2xhc3NMYXllcjsKY2xhc3MgTlJIWV9jbGFzc0xpZ2h0OwpjbGFz cyBOUkhZX2NsYXNzTWFwOwpjbGFzcyBOUkhZX2NsYXNzTWF0ZXJpYWw7CmNsYXNzIE5SSFlfY2xh c3NNb2RlbDsKY2xhc3MgTlJIWV9jbGFzc09iamVjdDsKY2xhc3MgTlJIWV9jbGFzc1Jvb3Q7CmNs YXNzIE5SSFlfY2xhc3NSb3RvOwpjbGFzcyBOUkhZX2NsYXNzU2NhZmZvbGQ7CmNsYXNzIE5SSFlf Y2xhc3NTb3VuZDsKY2xhc3MgTlJIWV9jbGFzc1RleDsKY2xhc3MgTlJIWV9jbGFzc1RoaW5nOwpj bGFzcyBOUkhZX2NsYXNzVGltZTsKY2xhc3MgTlJIWV9jbGFzc1RyYWNrOwpjbGFzcyBOUkhZX2Ns YXNzVXNlTWFwOwoKY2xhc3MgRnJhbmdlQ2FjaGVMb3JkOwpjbGFzcyBOUkhZX1RyYXZlcnNlOwoK IAoKY2xhc3MgTlJIWV9Xb3JsZCB7CgogICAgc3RhdGljIHZlY3RvcjxOUkhZX1dvcmxkICo+ICpf d29ybGRzOwogICAgdmVjdG9yPE5SSFlfSU5UX0ZSQU5HRT4gX3NjblNlY3Rpb25zOwoKICAgIHZl Y3RvcjxOUkhZX2NsYXNzVGhpbmcgKj4gICAgICAgX2FsbFRoaW5nczsKICAgIHZlY3RvcjxOUkhZ X2NsYXNzT2JqZWN0ICo+ICAgICAgX2FsbE9iamVjdHM7CiAgICB2ZWN0b3I8TlJIWV9jbGFzc0Nh bWVyYSAqPiAgICAgIF9hbGxDYW1lcmFzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NMaWdodCAqPiAg ICAgICBfYWxsTGlnaHRzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NNb2RlbCAqPiAgICAgICBfYWxs TW9kZWxzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NUcmFjayAqPiAgICAgICBfYWxsVHJhY2tzOwog ICAgdmVjdG9yPE5SSFlfY2xhc3NIb21lICo+ICAgICAgICBfYWxsSG9tZXM7CiAgICB2ZWN0b3I8 TlJIWV9jbGFzc01hcCAqPiAgICAgICAgIF9hbGxNYXBzOwogICAgdmVjdG9yPE5SSFlfY2xhc3NV c2VNYXAgKj4gICAgICBfYWxsVXNlTWFwczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzU291bmQgKj4g ICAgICAgX2FsbFNvdW5kczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzRHluYW1pY3MgKj4gICAgX2Fs bER5bmFtaWNzczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzRm9yY2UgKj4gICAgICAgX2FsbEZvcmNl czsKICAgIHZlY3RvcjxOUkhZX2NsYXNzR2VuZXJhdG9yICo+ICAgX2FsbEdlbmVyYXRvcnM7CiAg ICB2ZWN0b3I8TlJIWV9jbGFzc0NvbGxpc2lvbiAqPiAgIF9hbGxDb2xsaXNpb25zOwogICAgdmVj dG9yPE5SSFlfY2xhc3NJbmt5ICo+ICAgICAgICBfYWxsSW5reXM7CiAgICB2ZWN0b3I8TlJIWV9j bGFzc1NjYWZmb2xkICo+ICAgIF9hbGxTY2FmZm9sZHM7CiAgICB2ZWN0b3I8TlJIWV9jbGFzc0Fw cGFyaXRpb24gKj4gIF9hbGxBcHBhcml0aW9uczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzUm90byAq PiAgICAgICAgX2FsbFJvdG9zOwogICAgdmVjdG9yPE5SSFlfY2xhc3NUZXggKj4gICAgICAgICBf YWxsVGV4czsKICAgIHZlY3RvcjxOUkhZX2NsYXNzTWF0ZXJpYWwgKj4gICAgX2FsbE1hdGVyaWFs czsKICAgIHZlY3RvcjxOUkhZX2NsYXNzUm9vdCAqPiAgICAgICAgX2FsbFJvb3RzOwogICAgdmVj dG9yPE5SSFlfY2xhc3NLbGlzdCAqPiAgICAgICBfYWxsS2xpc3RzOwogICAgdmVjdG9yPE5SSFlf Y2xhc3NGdXIgKj4gICAgICAgICBfYWxsRnVyczsKICAgIHZlY3RvcjxOUkhZX2NsYXNzTXVzY2xl ICo+ICAgICAgX2FsbE11c2NsZXM7CiAgICB2ZWN0b3I8TlJIWV9jbGFzc0xheWVyICo+ICAgICAg IF9hbGxMYXllcnM7CgogICAgTlJIWV9jbGFzc1RoaW5nICpfaGllclJvb3Q7ICAKcHVibGljOgoK ICAgIE5SSFlfY2xhc3NUaGluZyAqaGllclJvb3QoKSB7IHJldHVybiBfaGllclJvb3Q7IH0KCiAg ICBGcmFuZ2VDYWNoZUxvcmQgKmltYWdlQ2FjaGVMb3JkOwogICAgRnJhbmdlQ2FjaGVMb3JkICpm cmFuZ2VDYWNoZUxvcmQ7CiAgICBOUkhZX2NsYXNzVGltZSAqVGltZUxvcmQ7CiAgICBOUkhZX1Ry YXZlcnNlICpUcmF2ZXJzZTsKCiAgICAgCiAgICAgCiAgICAgCgogICAgaW50IE5SSFlfRnBzOwog ICAgaW50IE5SSFlfUGxheUZwczsKICAgIGZsb2F0IE5SSFlfRmFzdEZvcndhcmQ7CiAgICBmbG9h dCBOUkhZX09yaWdpblNpemU7CiAgICBmbG9hdCBOUkhZX0ZpcnN0UmVwZWF0OwogICAgQk9PTEVB TiBOUkhZX09yaWdpbkRpc3BsYXk7CiAgICBpbnQgTlJIWV9Tb3VuZEFjdGlvbjsKCiAgICAgCgog ICAgTlJIWV9Xb3JsZCAoKTsKICAgIH5OUkhZX1dvcmxkICgpOwoKICAgICAKCiAgICB2b2lkIElu aXRpYWxpemVGb3JBY2Nlc3MgKCk7CiAgICB2b2lkIEF0dGFjaFRvV29ybGQgKGZsb2F0IGZyYW1l KTsKICAgIHZvaWQgQXR0YWNoVG9Xb3JsZCAoZmxvYXQgZnJhbWUsIGZsb2F0IHJlZkZyYW1lKTsK CiAgICAgCgogICAgQk9PTEVBTiBTZXRXb3JsZCAoaW50IHdvcmxkKTsKICAgIHZvaWQgTmV3V29y bGQgKCk7CgogICAgdm9pZCBzZXRTY25TZWN0aW9ucyhjb25zdCB2ZWN0b3I8TlJIWV9JTlRfRlJB TkdFPiAmc2VjdGlvbnMpIHsKICAgICAgICBfc2NuU2VjdGlvbnMgPSBzZWN0aW9uczsgfQogICAg TlJIWV9JTlRfRlJBTkdFIEdldFNlY3Rpb25GcmFuZ2UgKGZsb2F0IGZyYW1lKTsKICAgIHN0cmlu ZyBHZXRTY25TZWN0aW9uU3RyaW5nKCk7CgogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NUaGlu ZyAqPiAmYWxsVGhpbmdzKCkgeyByZXR1cm4gX2FsbFRoaW5nczsgfQogICAgY29uc3QgdmVjdG9y PE5SSFlfY2xhc3NPYmplY3QgKj4gJmFsbE9iamVjdHMoKSB7IHJldHVybiBfYWxsT2JqZWN0czsg fQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NDYW1lcmEgKj4gJmFsbENhbWVyYXMoKSB7IHJl dHVybiBfYWxsQ2FtZXJhczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NMaWdodCAqPiAm YWxsTGlnaHRzKCkgeyByZXR1cm4gX2FsbExpZ2h0czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlf Y2xhc3NNb2RlbCAqPiAmYWxsTW9kZWxzKCkgeyByZXR1cm4gX2FsbE1vZGVsczsgfQogICAgY29u c3QgdmVjdG9yPE5SSFlfY2xhc3NUcmFjayAqPiAmYWxsVHJhY2tzKCkgeyByZXR1cm4gX2FsbFRy YWNrczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NIb21lICo+ICZhbGxIb21lcygpIHsg cmV0dXJuIF9hbGxIb21lczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NNYXAgKj4gJmFs bE1hcHMoKSB7IHJldHVybiBfYWxsTWFwczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NV c2VNYXAgKj4gJmFsbFVzZU1hcHMoKSB7IHJldHVybiBfYWxsVXNlTWFwczsgfQogICAgY29uc3Qg dmVjdG9yPE5SSFlfY2xhc3NTb3VuZCAqPiAmYWxsU291bmRzKCkgeyByZXR1cm4gX2FsbFNvdW5k czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NEeW5hbWljcyAqPiAmYWxsRHluYW1pY3Nz KCkgeyByZXR1cm4gX2FsbER5bmFtaWNzczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NG b3JjZSAqPiAmYWxsRm9yY2VzKCkgeyByZXR1cm4gX2FsbEZvcmNlczsgfQogICAgY29uc3QgdmVj dG9yPE5SSFlfY2xhc3NHZW5lcmF0b3IgKj4gJmFsbEdlbmVyYXRvcnMoKSB7IHJldHVybiBfYWxs R2VuZXJhdG9yczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NDb2xsaXNpb24gKj4gJmFs bENvbGxpc2lvbnMoKSB7IHJldHVybiBfYWxsQ29sbGlzaW9uczsgfQogICAgY29uc3QgdmVjdG9y PE5SSFlfY2xhc3NJbmt5ICo+ICZhbGxJbmt5cygpIHsgcmV0dXJuIF9hbGxJbmt5czsgfQogICAg Y29uc3QgdmVjdG9yPE5SSFlfY2xhc3NTY2FmZm9sZCAqPiAmYWxsU2NhZmZvbGRzKCkgeyByZXR1 cm4gX2FsbFNjYWZmb2xkczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NBcHBhcml0aW9u ICo+ICZhbGxBcHBhcml0aW9ucygpIHsgcmV0dXJuIF9hbGxBcHBhcml0aW9uczsgfQogICAgY29u c3QgdmVjdG9yPE5SSFlfY2xhc3NSb3RvICo+ICZhbGxSb3RvcygpIHsgcmV0dXJuIF9hbGxSb3Rv czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NUZXggKj4gJmFsbFRleHMoKSB7IHJldHVy biBfYWxsVGV4czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NNYXRlcmlhbCAqPiAmYWxs TWF0ZXJpYWxzKCkgeyByZXR1cm4gX2FsbE1hdGVyaWFsczsgfQogICAgY29uc3QgdmVjdG9yPE5S SFlfY2xhc3NSb290ICo+ICZhbGxSb290cygpIHsgcmV0dXJuIF9hbGxSb290czsgfQogICAgY29u c3QgdmVjdG9yPE5SSFlfY2xhc3NLbGlzdCAqPiAmYWxsS2xpc3RzKCkgeyByZXR1cm4gX2FsbEts aXN0czsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NGdXIgKj4gJmFsbEZ1cnMoKSB7IHJl dHVybiBfYWxsRnVyczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlfY2xhc3NNdXNjbGUgKj4gJmFs bE11c2NsZXMoKSB7IHJldHVybiBfYWxsTXVzY2xlczsgfQogICAgY29uc3QgdmVjdG9yPE5SSFlf Y2xhc3NMYXllciAqPiAmYWxsTGF5ZXJzKCkgeyByZXR1cm4gX2FsbExheWVyczsgfQp9OwoKZXh0 ZXJuIE5SSFlfV29ybGQgKldvcmxkOwogCgojIDMwICJucmh5L05SSFlfQWNjZXNzLmMiIDIKCgoj IDEgImgvbnJoeV9jbGFzc0NhbWVyYS5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAK CgoKIAoKCiAKCgoKCgogCiMgMSAiaC9ucmh5X2NsYXNzT2JqZWN0LmgiIDEKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKDAogCgoKCiAKCgogCgoKCgoKIAojIDEgImgvbnJoeV9jbGFzc0FwcGFyaXRp b24uaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgogCgoKIAoKCgoKCiAKIyAxICJoL25y aHlfY2xhc3NUaGluZy5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoMCiAKCgoKIAoKCiAKCgoK CgogCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvT2JzZXJ2ZXIuaCIgMQoKCgoKCiAKIAogCiAK CgoKCgoKCgoKCgogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgU3ViamVj dDsKCmNsYXNzIE9ic2VydmVyIHsKcHJvdGVjdGVkOgogICAgZnJpZW5kIGNsYXNzIFN1YmplY3Q7 CiAgICBTdWJqZWN0ICpfc3ViamVjdDsKCnB1YmxpYzoKICAgIE9ic2VydmVyIChTdWJqZWN0ICpz dWIpOwogICAgdmlydHVhbCB+T2JzZXJ2ZXIgKCk7CgogICAgdmlydHVhbCB2b2lkIFJlZnJlc2hP YnNlcnZlciAoU3ViamVjdCAqKSAgeyB9OwogICAgdmlydHVhbCBpbnQgIEdldE9ic2VydmVyVHlw ZSAoKSAgICAgICAgICAgeyByZXR1cm4gMHgwMDAwMDA4MCA7IH07CiAgICB2aXJ0dWFsIGludCAg QWxsb3dEZXN0cnVjdEJ5U3ViamVjdCAoKSAgICB7IHJldHVybiAwOyB9OwoKICAgIFN1YmplY3Qg KnN1YmplY3QoKSAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIF9zdWJqZWN0OyB9Owp9 OwoKY2xhc3MgU3ViamVjdCB7CnByaXZhdGU6CiAgICBzdGF0aWMgTGlzdDxTdWJqZWN0ICo+IF90 b1VwZGF0ZTsKcHJvdGVjdGVkOgogICAgTGlzdDxPYnNlcnZlciAqPiAgICAgICBfb2JzZXJ2ZXJz OwogICAgdW5zaWduZWQgICAgICAgICAgICAgICBfdXBkYXRlRmxhZ3M7CgpwdWJsaWM6CiAgICBT dWJqZWN0ICgpIDogX3VwZGF0ZUZsYWdzICgwKSAgICAgICAgICB7IH07CiAgICBTdWJqZWN0IChj b25zdCBTdWJqZWN0ICYpOwogICAgU3ViamVjdCAmb3BlcmF0b3IgPSAoY29uc3QgU3ViamVjdCAm KTsKICAgIHZpcnR1YWwgflN1YmplY3QgKCk7CiAgICB1bnNpZ25lZCBJc1VwZGF0ZVNldCAodW5z aWduZWQgZmxhZ3MpICB7IHJldHVybiAoX3VwZGF0ZUZsYWdzICYgZmxhZ3MpOyB9OwogICAgdW5z aWduZWQgR2V0VXBkYXRlRmxhZ3MgKCkgICAgICAgICAgICAgeyByZXR1cm4gKF91cGRhdGVGbGFn cyk7IH07CiAgICB2b2lkIERlbGF5ZWRVcGRhdGUgKHVuc2lnbmVkIGZsYWdzKSAgICB7CiAgICAg ICAgaWYgKCEgX3VwZGF0ZUZsYWdzICYmIGZsYWdzKQogICAgICAgICAgICBfdG9VcGRhdGUuYXBw ZW5kICh0aGlzKTsKICAgICAgICBfdXBkYXRlRmxhZ3MgfD0gZmxhZ3M7CiAgICB9OwogICAgaW50 IE5lZWRzVXBkYXRlICgpICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKF91cGRhdGVGbGFn cyAhPSAwKTsgfTsKICAgIHN0YXRpYyB2b2lkIFVwZGF0ZUFsbE9ic2VydmVycyAoKTsKCiAgICB2 aXJ0dWFsIHZvaWQgQ3JlYXRlT2JzZXJ2ZXIgIChpbnQgdHlwZSkgeyB9OwogICAgdmlydHVhbCB2 b2lkIERlc3Ryb3lPYnNlcnZlciAoaW50IHR5cGUpOwoKICAgIGludCBJc0N1cnJlbnQgKCkgICAg ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChfb2JzZXJ2ZXJzLnNpemUoKSA+IDApOyB9Owog ICAgdm9pZCBTdWJzY3JpYmUgICAgICAgKE9ic2VydmVyICpvYnMpOwogICAgdm9pZCBVbnN1YnNj cmliZSAgICAgKE9ic2VydmVyICpvYnMpOwogICAgdm9pZCBVcGRhdGVPYnNlcnZlcnMgKHVuc2ln bmVkIGZsYWdzID0gMCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgT2JzZXJ2ZXJGYWN0 b3J5IHsKcHJvdGVjdGVkOgogICAgc3RhdGljIHZvaWQgZG9DcmVhdGVPYnNlcnZlciAgICAgICAg ICAgICAoU3ViamVjdCAqc3ViaiwgaW50IHR5cGUpOwogICAgc3RhdGljIExpc3Q8IHZvaWQgKCop IChTdWJqZWN0ICosIGludCkgPiAgX29ic2VydmVyQ3JlYXRlRnVuYzsKcHVibGljOgogICAgc3Rh dGljIHZvaWQgQWRkQ3JlYXRlT2JzZXJ2ZXJDYWxsYmFjayAgICAodm9pZCAoKmZjbikoU3ViamVj dCAqLCBpbnQgdHlwZSkpOwogICAgc3RhdGljIHZvaWQgUmVtb3ZlQ3JlYXRlT2JzZXJ2ZXJDYWxs YmFjayAodm9pZCAoKmZjbikoU3ViamVjdCAqLCBpbnQgdHlwZSkpOwp9OwoKCiMgMSAiL3NvZnR3 YXJlL3RoYWxpYS9oL09ic2VydmVyLmMiIDEKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgT2JzZXJ2 ZXJGYWN0b3J5PFQ+OjpBZGRDcmVhdGVPYnNlcnZlckNhbGxiYWNrICgKICAgICAgICB2b2lkICgq ZmNuKSAoU3ViamVjdCAqLCBpbnQgdHlwZSkKICAgICAgICApIAp7CiAgICAgICAgX29ic2VydmVy Q3JlYXRlRnVuYy5hcHBlbmQgKGZjbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIE9ic2Vy dmVyRmFjdG9yeTxUPjo6UmVtb3ZlQ3JlYXRlT2JzZXJ2ZXJDYWxsYmFjayAoCiAgICAgICAgdm9p ZCAoKmZjbikgKFN1YmplY3QgKiwgaW50IHR5cGUpCiAgICAgICAgKSAKewogICAgZm9yIChpbnQg aT0wOyBpPF9vYnNlcnZlckNyZWF0ZUZ1bmMuc2l6ZSgpOyBpKyspCiAgICAgICAgaWYgKF9vYnNl cnZlckNyZWF0ZUZ1bmNbaV0gPT0gZmNuKSB7CiAgICAgICAgICAgIF9vYnNlcnZlckNyZWF0ZUZ1 bmMucmVtb3ZlIChpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4Kdm9pZCBPYnNlcnZlckZhY3Rvcnk8VD46OmRvQ3JlYXRlT2JzZXJ2ZXIgKAogICAg ICAgIFN1YmplY3QgKnN1YmosIAogICAgICAgIGludCB0eXBlCiAgICAgICAgKSAKewogICAgZm9y IChpbnQgaT0wOyBpPF9vYnNlcnZlckNyZWF0ZUZ1bmMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAo Kl9vYnNlcnZlckNyZWF0ZUZ1bmNbaV0pKHN1YmosIHR5cGUpOwogICAgfQp9CiMgMTExICIvc29m dHdhcmUvdGhhbGlhL2gvT2JzZXJ2ZXIuaCIgMgoKCgoKIyAzOSAiaC9ucmh5X2NsYXNzVGhpbmcu aCIgMgoKIyAxICJoL25yaHlfZGVwZW5kLmgiIDEKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoK Y2xhc3MgTlJIWV9kZXBlbmRNYXN0ZXI7CmNsYXNzIE5SSFlfZGVwZW5kQ2xpZW50OwpjbGFzcyBO UkhZX2RlcGVuZERhdGE7CmNsYXNzIE5SSFlfZGVwZW5kVHlwZTsKCmNsYXNzIE5SSFlfZGVwZW5k Q2xpZW50IHsKICAgIGZyaWVuZCBOUkhZX2RlcGVuZE1hc3RlcjsKICAgIGZyaWVuZCBOUkhZX2Rl cGVuZERhdGE7CiAgICB2ZWN0b3I8TlJIWV9kZXBlbmREYXRhICo+IF9tYXN0ZXJzOwogICAgc3Rh dGljIHZlY3Rvcjxib29sPiBfdmVyYm9zZTsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIGRl dGFjaChOUkhZX2RlcGVuZERhdGEgKmRhdGEpOwogICAgdmlydHVhbCB2b2lkIG1ha2VEaXJ0eShO UkhZX2RlcGVuZERhdGEgKmRhdGEpOwogICAgdmlydHVhbCBzdHJpbmcgY2xpZW50TmFtZSgpID0g MDsKcHVibGljOgogICAgTlJIWV9kZXBlbmRDbGllbnQoKSB7fQogICAgTlJIWV9kZXBlbmRDbGll bnQoY29uc3QgTlJIWV9kZXBlbmRDbGllbnQgJikge30KICAgIH5OUkhZX2RlcGVuZENsaWVudCgp OwogICAgTlJIWV9kZXBlbmREYXRhICZBZGRNYXN0ZXIoTlJIWV9kZXBlbmRNYXN0ZXIgKm1hc3Rl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5k VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudERhdGEpOwog ICAgdm9pZCBSZW1vdmVNYXN0ZXIoTlJIWV9kZXBlbmRUeXBlICpkZXBlbmRUeXBlLCB2b2lkICpj bGllbnREYXRhKTsKICAgIGludCBSZW1vdmVNYXN0ZXJzKE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5k VHlwZSwgdm9pZCAqY2xpZW50RGF0YSk7CiAgICBpbnQgUmVtb3ZlTWFzdGVycyhOUkhZX2RlcGVu ZFR5cGUgKmRlcGVuZFR5cGUpOwogICAgaW50IENvbXB1dGUoZmxvYXQgZnJhbWUpOwogICAgc3Rh dGljIHZvaWQgUHVzaFZlcmJvc2UoYm9vbCB2ZXJib3NlKTsKICAgIHN0YXRpYyBib29sIFBvcFZl cmJvc2UoKTsKICAgIHN0YXRpYyBib29sIEdldFZlcmJvc2UoKTsKfTsKCmNsYXNzIE5SSFlfZGVw ZW5kTWFzdGVyIHsKICAgIGZyaWVuZCBOUkhZX2RlcGVuZENsaWVudDsKICAgIGZyaWVuZCBOUkhZ X2RlcGVuZERhdGE7CiAgICB2ZWN0b3I8TlJIWV9kZXBlbmREYXRhICo+IF9jbGllbnRzOwogICAg dmlydHVhbCBpbnQgY29tcHV0ZShmbG9hdCBmcmFtZSwgTlJIWV9kZXBlbmRUeXBlICpkZXBlbmRU eXBlKSA9IDA7CnB1YmxpYzoKICAgIE5SSFlfZGVwZW5kTWFzdGVyKCkge30KICAgIE5SSFlfZGVw ZW5kTWFzdGVyKGNvbnN0IE5SSFlfZGVwZW5kTWFzdGVyICYpIHt9CiAgICB+TlJIWV9kZXBlbmRN YXN0ZXIoKTsKICAgIHZvaWQgTWFrZURpcnR5KE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5kVHlwZSk7 CiAgICB2b2lkIE1ha2VEaXJ0eSgpOwogICAgYm9vbCBIYXNEZXBlbmRUeXBlKE5SSFlfZGVwZW5k VHlwZSAqZGVwZW5kVHlwZSk7Cn07CgpjbGFzcyBOUkhZX2RlcGVuZERhdGEgewogICAgZnJpZW5k IE5SSFlfZGVwZW5kTWFzdGVyOwogICAgZnJpZW5kIE5SSFlfZGVwZW5kQ2xpZW50OwogICAgTlJI WV9kZXBlbmRNYXN0ZXIgKl9tYXN0ZXI7CiAgICBOUkhZX2RlcGVuZENsaWVudCAqX2NsaWVudDsK ICAgIE5SSFlfZGVwZW5kVHlwZSAqX2RlcGVuZFR5cGU7CiAgICB2b2lkICpfY2xpZW50RGF0YTsK ICAgIE5SSFlfZGVwZW5kRGF0YShOUkhZX2RlcGVuZE1hc3RlciAqbWFzdGVyLCBOUkhZX2RlcGVu ZFR5cGUgKl9kZXBlbmRUeXBlLAogICAgICAgICAgICAgICAgICAgIE5SSFlfZGVwZW5kQ2xpZW50 ICpjbGllbnQsIHZvaWQgKmNsaWVudERhdGEpOwogICAgfk5SSFlfZGVwZW5kRGF0YSgpOwpwdWJs aWM6CiAgICBOUkhZX2RlcGVuZFR5cGUgKmRlcGVuZFR5cGUoKSB7IHJldHVybiBfZGVwZW5kVHlw ZTsgfQogICAgdm9pZCAqY2xpZW50RGF0YSgpIHsgcmV0dXJuIF9jbGllbnREYXRhOyB9Cn07Cgpj bGFzcyBOUkhZX2RlcGVuZFR5cGUge307CgoKIyA0MCAiaC9ucmh5X2NsYXNzVGhpbmcuaCIgMgoK CiAKCgoKCgpzdHJ1Y3QgVEhJTkdfSUQgewogICAgSU5UICAgICAgICAgdHlwZTsKCiAgICAgCiAg ICBJTlQgICAgICAgICAqYmFzZVR5cGVzOwogICAgSU5UICAgICAgICAgU2l6ZUJhc2VUeXBlczsK ICAgIElOVCAgICAgICAgIG51bWJlckJhc2VUeXBlczsKfTsKCiAKIAogCgogCmNsYXNzIE5SSFlf Q2xhc3NWaWV3T2JqZWN0OwpjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbDsKdHlwZWRlZiB2ZWN0b3I8 TlJIWV9jbGFzc0NoYW5uZWwgKj4gTlJIWV9jaGFubmVsczsKCiAKdGVtcGxhdGUgPGNsYXNzIFR5 cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2Fs cGhhbGlzdDsKCiAKY2xhc3MgTlJIWV9JbmNsdWRlSGlzdG9yeTsKY2xhc3MgTlJIWV9UcmF2ZXJz ZTsKCmV4dGVybiBOUkhZX2RlcGVuZFR5cGUgKk5SSFlfZGVwZW5kVGhpbmdXb3JsZDsKZXh0ZXJu IE5SSFlfZGVwZW5kVHlwZSAqTlJIWV9kZXBlbmRUaGluZ0xvY2FsOwpleHRlcm4gTlJIWV9kZXBl bmRUeXBlICpOUkhZX2RlcGVuZFRoaW5nU2hhcGU7CgogCnN0cnVjdCBOUkhZX2NsYXNzVGhpbmcg OgogICAgcHVibGljIFN1YmplY3QsCiAgICBwdWJsaWMgTlJIWV9kZXBlbmRDbGllbnQsCiAgICBw dWJsaWMgTlJIWV9kZXBlbmRNYXN0ZXIKewogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZ X2NsYXNzVGhpbmc+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNz VGhpbmc+OwogICAgZnJpZW5kIE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NUaGluZz47Cgpwcml2 YXRlOgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1RoaW5nQWN0aW9u OwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z1RoaW5nQ2xhc3M7CiAg ICBUSElOR19JRCAgICAgICAgICAgICAgICAgICAgICAgICppZDsgICAgIAoKICAgICAKICAgICAK ICAgICAKCiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIF9ub2RhbERpc3BsYXks IF9ub2RhbE9uRmxhZzsKCiAgICAgCiAgICBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAg IF9sb2NhbFRyYXZlcnNlQ29va2llOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg ICBfbG9jYWxUcmF2ZXJzaW5nOwogICAgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICBf d29ybGRUcmF2ZXJzZUNvb2tpZTsKICAgIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAg X3Zpc2libGVDb29raWU7CiAgICBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbkNv b2tpZTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgX3Zpc2libGVTdGF0ZTsK ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgX29uU3RhdGU7CgogICAgTV9NYXRy aXggICAgICAgICAgICAgICAgICAgICAgICAqX2xvY2FsSG9tZWxlc3NNYXRyaXg7CiAgICBNX01h dHJpeCAgICAgICAgICAgICAgICAgICAgICAgICpfbG9jYWxEcmF3aW5nTWF0cml4OwogICAgTV9N YXRyaXggICAgICAgICAgICAgICAgICAgICAgICAqX3dvcmxkRHJhd2luZ01hdHJpeDsKICAgIE1f TWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgKl93b3JsZEhvbWVsZXNzTWF0cml4OwogICAg TV9NYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAqX2ludmVyc2VMb2NhbEhvbWVsZXNzTWF0 cml4OwogICAgTV9NYXRyaXggICAgICAgICAgICAgICAgICAgICAgICAqX2ludmVyc2VXb3JsZEhv bWVsZXNzTWF0cml4OwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgX3N5bmNE cmF3aW5nVG9Ib21lbGVzczsKCiAgICAgCiAgICB2b2lkIGluaXRpYWxpemUoKTsKCnByb3RlY3Rl ZDoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRJRCAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgdHlwZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bmxvYWRJRCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIElOVCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcG9wSUQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK CiAgICBOUkhZX2NoYW5uZWxzIF9jaGFubmVsczsKICAgIE5SSFlfY2hhbm5lbHMgX2xpbmVhckNo YW5uZWxzOwogICAgTlJIWV9jaGFubmVscyBfbm9uTGluZWFyQ2hhbm5lbHM7CiAgICB2b2lkIGV4 dHJhY3RDaGFubmVsKE5SSFlfY2xhc3NDaGFubmVsICopOwogICAgdm9pZCBwdXNoQ2hhbm5lbChO UkhZX2NsYXNzQ2hhbm5lbCAqKTsKCiAgICAgCgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgICBmaW5kQ2hhbm5lbHMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ0hBUiAgICAgICAgICAgICAgICAqYXNjaWksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOUkhZX2NsYXNzQ2hhbm5lbCAgICoqb3V0Q2hhbm5lbHMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgICAgICAgICAgICpv dXROdW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgog ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzeW5jQ2hpbGRyZW4gKAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc1RoaW5nICpwYXJl bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNoYW5uZWwgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc0NoYW5uZWwgICAqY2hhblB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpPT0xFQU4gICAgICAgICAgICAgcHJl c2VydmVJbXBsaWNpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg IFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVGcm9tICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfY2xhc3NUaGluZyAqY2xvbmVGcm9tCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgIAogICAgIAog ICAgIAogICAgdmlydHVhbCB2b2lkIHByZVRyYXZlcnNlKGZsb2F0IGZyYW1lKTsKICAgIHZpcnR1 YWwgdm9pZCBwb3N0V29ybGRUcmF2ZXJzZSgpIHt9CiAgICB2aXJ0dWFsIHZvaWQgcG9zdExvY2Fs VHJhdmVyc2UoKTsKICAgIHZpcnR1YWwgdm9pZCBib3VuY2UoY29uc3QgY2hhciAqcmVhc29uKTsK CiAgICAgCiAgICB2b2lkIGRpcnR5Tm9kZShzaG9ydCBnb29kQ29va2llLCBzaG9ydCBiYWRDb29r aWUpOwogICAgdm9pZCBtYWtlRGlydHkoTlJIWV9kZXBlbmREYXRhICpkZXBlbmREYXRhKTsKICAg IHN0cmluZyBjbGllbnROYW1lKCk7CgogICAgIAogICAgaW50IGNvbXB1dGUoZmxvYXQgZnJhbWUs IE5SSFlfZGVwZW5kVHlwZSAqZGVwZW5kVHlwZSk7CgpwdWJsaWM6CgogICAgTlJIWV9jbGFzc1Ro aW5nICAgICAgICAgICAgICAgICAqIE9yaWdpbjsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAg ICAgICAgICAgTmFtZTsKCiAgICAgCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAg ICpQYXJlbnQ7CiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICoqQ2hpbGRyZW47 CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemVDaGlsZHJlbjsKICAgIElO VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyQ2hpbGRyZW47CgogICAgIAogICAg TlJIWV9DbGFzc1ZpZXdPYmplY3QgICAgICAgICAgICAqVmlld09iamVjdDsKCiAgICAgCiAgICBO UkhZX0luY2x1ZGVIaXN0b3J5ICAgICAgICAgICAgICpJbmNsdWRlSGlzdG9yeTsKCiAgICAgCiAg ICBOUkhZX2NsYXNzVGhpbmcgKAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lLAogICAgICAgIGNv bnN0IElOVCAgIGNoaWxkVHlwZQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzVGhpbmcgKAogICAg ICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwKICAgICAgICBOUkhZX2NsYXNzVGhpbmcgKmNsb25l RnJvbQogICAgICAgICk7CgogICAgTlJIWV9jbGFzc1RoaW5nICgpOwogICAgdmlydHVhbCB+TlJI WV9jbGFzc1RoaW5nICgpOwoKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAg ICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0 dXJuICgiTlJIWV9jbGFzc1RoaW5nIik7IH0KCiAgICAgCgogICAgc3RhdGljIElOVCAgICAgICAg ICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkgeyByZXR1cm4gKFRISU5HX1RZUEVfVEhJTkcpOyB9CgogICAgdm9pZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRGVidWdQcmludFRoaW5nU2VsZiAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICAgICAgICAqZnAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbWVzc2FnZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwoKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR2V0SWRfdHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIElOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR2V0TnVtYmVyQmFzZVR5cGVzICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkgeyByZXR1cm4gKGlkLT5udW1iZXJCYXNlVHlwZXMpOyB9CiAgICBJTlQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJhc2VUeXBlQnlJbmRleCAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgIGkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKSB7IGlmICgoaSA8IDApfHwoaSA+IGlkLT5udW1iZXJCYXNl VHlwZXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFRISU5HX1RZ UEVfVU5LTk9XTik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlkLT5iYXNlVHlwZXNbaV0pOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgIElzQUJhc2VUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElOVCB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgc3Rh dGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc1RoaW5nPiAqRmluZCAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZpcnR1YWwgdm9pZCAgICAgICAgICAgICAgICAg ICAgIFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBDSEFSICpuZXdOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPSAw OwogICAgdmlydHVhbCBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAqQ2xvbmUgKGNvbnN0IGNoYXIg Km5hbWUpID0gMDsKICAgIHZpcnR1YWwgY29uc3QgQ0hBUiAgICAgICAgICAgICAgKlByaW50RGVy aXZlZENsYXNzT2ZTZWxmVHlwZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IDA7 CiAgICB2aXJ0dWFsIElOVCAgICAgICAgICAgICAgICAgICAgIEdldERlcml2ZWRDbGFzc09mU2Vs ZlR5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IDA7CgogICAgIAoKCiAgICB2b2lk ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlTWVGb3JVbmRvICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpPT0xFQU4gZnJvbUNoaWxkID0gMCAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgRGVzY3Jp YmVDcmVhdGUgKCBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJiBkZXNjICkgPSAwOwogICAgdmly dHVhbCB2b2lkIERlc2NyaWJlQ3JlYXRlQ2hhbm5lbHMgKE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVh bSAmLCBpbnQgZGVuc2UgKTsKICAgIHZpcnR1YWwgdm9pZCBEZXNjcmliZUZ1bGxTdGF0ZSAoTlJI WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYgZGVzYykgewogICAgICAgIHJldHVybjsKICAgIH0KICAg IHZpcnR1YWwgdm9pZCBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoTlJIWV9DbGFzc0Rlc2NyaWJl U3RyZWFtICYgZGVzYykgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZvaWQgRGVzY3JpYmVV bmRvUmVuYW1lIChOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJiwgY29uc3QgVHdpbmUgJm5ld05h bWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgCgoKICAgIE5SSFlfY2xhc3ND aGFubmVsICAgICAgICAgICAgICAgKkFkZEltcGxpY2l0Q2hhbm5lbCAoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5cGUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICAg ICAgICAgICAgICAgKkFkZENoYW5uZWwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgSU5UICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgICAgICBpbnN0YW5jZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIE5SSFlfY2xhc3NDaGFubmVsICAgICAg ICAgICAgICAgKkFkZENoYW5uZWwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgSU5UICAgICAgICAgICB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkge3JldHVybiBBZGRDaGFubmVsKHR5cGUsMCk7fQoKICAgICAKCiAgICBOUkhZ X2NsYXNzQ2hhbm5lbCAgICAgICAgICAgICAgICpGaW5kUG9zc2libGVJbXBsaWNpdENoYW5uZWwg KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAg ICAgICB0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAoK ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0SW1wbGljaXRDaGFubmVsVmFs dWVXVW5kbyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ TlQgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmbG9hdCAgICAgICAgICAgICAgIG5ld1ZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CgogICAgIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg U2V0SW1wbGljaXRDaGFubmVsVmFsdWVzV1VuZG8gKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmxvYXQgICAgICAgICAgICAgICAqbmV3VmFsdWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIG51bSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAg dHlwZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQg ICAgICAgICAgIHR5cGUyPS0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgSU5UICAgICAgICAgICB0eXBlMz0tMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgdHlwZTQ9LTEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5cGU1PS0x CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgWk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRJbXBsaWNpdENoYW5uZWxWYWx1ZSAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5 cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAgICAgICAg ICAgICAgIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAg IAogICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRJbXBsaWNpdENoYW5uZWxW YWx1ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQg ICAgICAgICAgIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg ICAgCgoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlQ2hhbm5lbCAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2NsYXNzQ2hhbm5l bCAgICpjaGFuUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1 cm4gZGVsZXRlQ2hhbm5lbCAoY2hhblB0ciwgMSApOyB9CiAgICBaT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgIFJlYWxseURlbGV0ZUNoYW5uZWwgKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc0NoYW5uZWwgICAqY2hhblB0cgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIGRlbGV0ZUNoYW5uZWwgKGNoYW5Q dHIsIDAgKTsgfQoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdENoYW5u ZWxzKEZJTEUgKmZwLCBCT09MRUFOIHZlcmJvc2UgPSAwICk7CgogICAgIAoKCgoKCiAgICBOUkhZ X2NsYXNzQ2hhbm5lbCAgICAgICAgICAgICAgICpGaW5kTGluZWFyQ2hhbm5lbCAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICAgIHR5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAg ICAgIGluc3RhbmNlT25lQmFzZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICAgICAgICAgICAgICAgKkZpbmROb25MaW5lYXJDaGFu bmVsICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAg ICAgICAgICAgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg IE5SSFlfY2xhc3NDaGFubmVsICAgICAgICAgICAgICAgKkZpbmRDaGFubmVsICgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAg ICAgaW5zdGFuY2VPbmVCYXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluZENoYW5uZWxzICgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICAgICAgICAg KmFzY2lpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFz c0NoYW5uZWwgICAqKm91dENoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU5UICAgICAgICAgICAgICAgICAqb3V0TnVtYmVyCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICAgCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmluZENoYW5uZWxzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgKmFzY2lpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgKipvdXRDaGFubmVscywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgICAgICAgICAg Km91dE51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIGNv bnN0IE5SSFlfY2hhbm5lbHMgJmNoYW5uZWxzKCkgeyByZXR1cm4gX2NoYW5uZWxzOyB9CiAgICBj b25zdCBOUkhZX2NoYW5uZWxzICZsaW5lYXJDaGFubmVscygpIHsgcmV0dXJuIF9saW5lYXJDaGFu bmVsczsgfQogICAgY29uc3QgTlJIWV9jaGFubmVscyAmbm9uTGluZWFyQ2hhbm5lbHMoKSB7IHJl dHVybiBfbm9uTGluZWFyQ2hhbm5lbHM7IH0KCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdldE51bWJlckhpZGRlbkNoYW5uZWxzICgpOwogICAgSU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHZXROdW1iZXJJbXBsaWNpdENoYW5uZWxzICgpOwoKICAgICAKCiAgICBa T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VJbXBsaWNpdENoYW5uZWxFeHBsaWNp dCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2NsYXNzQ2hh bm5lbCAgICpjaGFuUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog ICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBSZW9yZGVyQ2hhbm5lbHMgKGNvbnN0 IFR3aW5lICZuZXdPcmRlcik7CgogICAgIAogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAg ICAgICBTZXRQYXJlbnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlJIWV9jbGFzc1RoaW5nICpuZXdQYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKCiAgICAgCiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50 UGFyZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAogICAgUE9MSVNIICAg ICAgICAgICAgICAgICAgICAgICAgICBHZXRHZW5lYWxvZ3kgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc1RoaW5nICpob3dSZWxhdGVkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgICAgICAgICAgICAg KnJlbGF0aW9uc2hpcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg IAogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDaGFubmVsVmFsdWVCeVR5 cGUgKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIg ICp0eXBlTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgCiAg ICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENoYW5uZWxWYWx1ZUJ5VHlwZSAo IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgdHlw ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIAogICAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRDaGFubmVsVmFsdWVCeVR5cGUoIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgIGluZGV4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgIHZhbHVlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgCiAgICBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgIFNldENoYW5uZWxWYWx1ZUJ5VHlwZSggCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICogdHlwZU5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAgICAgICAgdmFsdWUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICAgCiAgICAgCiAg ICAgCiAgICAgCgogICAgY29uc3QgTV9NYXRyaXggJkdldExvY2FsSG9tZWxlc3NNYXRyaXgoKTsK ICAgIGNvbnN0IE1fTWF0cml4ICZHZXRMb2NhbERyYXdpbmdNYXRyaXggKCk7CiAgICBjb25zdCBN X01hdHJpeCAmR2V0V29ybGRIb21lbGVzc01hdHJpeCAoKTsKICAgIGNvbnN0IE1fTWF0cml4ICZH ZXRXb3JsZERyYXdpbmdNYXRyaXggKCk7CiAgICBjb25zdCBNX01hdHJpeCAmR2V0T3JpZ2luTWF0 cml4KCk7CiAgICBjb25zdCBNX01hdHJpeCAmR2V0SW52ZXJzZU9yaWdpbk1hdHJpeCgpOwogICAg ICAgICAgICAgICAgICAgCiAgICBNX01hdHJpeCAgICAgICBHZXRDaGFubmVsSG9tZWxlc3NNYXRy aXggKCk7CiAgICBNX01hdHJpeCAgICAgICBHZXRDdXJyZW50TG9jYWxIb21lbGVzc01hdHJpeCgp OwogICAgTV9NYXRyaXggICAgICAgR2V0Q3VycmVudExvY2FsRHJhd2luZ01hdHJpeCgpOwogICAg TV9NYXRyaXggICAgICAgR2V0Q3VycmVudFdvcmxkSG9tZWxlc3NNYXRyaXgoKTsKICAgIE1fTWF0 cml4ICAgICAgIEdldEN1cnJlbnRXb3JsZERyYXdpbmdNYXRyaXgoKTsKICAgIE1fTWF0cml4ICAg ICAgIEdldEN1cnJlbnRDaGFubmVsSG9tZWxlc3NNYXRyaXggKCk7CiAgICBNX01hdHJpeCAgICAg ICBHZXRDdXJyZW50SW52ZXJzZVdvcmxkSG9tZWxlc3NNYXRyaXgoKTsKICAgIE1fTWF0cml4ICAg ICAgIEdldEN1cnJlbnRJbnZlcnNlTG9jYWxIb21lbGVzc01hdHJpeCgpOwogICAgICAgICAgICAg ICAgICAgCiAgICBjb25zdCBNX01hdHJpeCAmR2V0SW52ZXJzZUxvY2FsSG9tZWxlc3NNYXRyaXgo KTsKICAgIGNvbnN0IE1fTWF0cml4ICZHZXRJbnZlcnNlV29ybGRIb21lbGVzc01hdHJpeCgpOwog ICAgY29uc3QgTV9NYXRyaXggKkdldEludGVybmFsTG9jYWxEcmF3aW5nTWF0cml4KCk7CiAgICB2 b2lkICAgICAgICAgICBMb2NhbE11bHQoY29uc3QgTV9NYXRyaXggJm1hdCk7CiAgICB2b2lkICAg ICAgICAgICBTZXRJc0RlZm9ybWVkKCk7CiAgICAgCiAgICB2b2lkICAgICAgICAgICBTZXRXb3Js ZE1hdHJpeChjb25zdCBNX01hdHJpeCAmbWF0KTsKICAgICAgICAgICAgICAgICAgIAogICAgIAog ICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICAgICAgICAqR2V0Vm9pZENoYW5uZWxUeXBlTmFt ZUFuZEluc3RhbmNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgICAgICp0bXBWb2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog ICAgIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tSZWN1cnNpdmVs eUZvckNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ TlQgICAgICAgICB3aGF0VHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwoKICAgICAKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIFNldE5vZGFsRGlzcGxheShCT09M RUFOIHN0YXR1cyk7CiAgICB2aXJ0dWFsIEJPT0xFQU4gICAgICAgICBTZXROb2RhbE9uRmxhZyhC T09MRUFOIHN0YXR1cyk7CgogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgR2V0Tm9kYWxEaXNw bGF5KCkgeyByZXR1cm4gX25vZGFsRGlzcGxheTsgfQogICAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgR2V0Tm9kYWxPbkZsYWcoKSB7IHJldHVybiBfbm9kYWxPbkZsYWc7IH0KICAgIEJPT0xFQU4g ICAgICAgICAgICAgICAgIEdldFZpc2libGVTdGF0ZSgpOwogICAgdmlydHVhbCBCT09MRUFOICAg ICAgICAgR2V0VmlzaWJsZVN0YXRlKGZsb2F0IGZyYW1lKTsKICAgIHZpcnR1YWwgQk9PTEVBTiAg ICAgICAgIEdldE9uU3RhdGUoZmxvYXQgZnJhbWUpOwoKICAgICAKCiAgICBCT09MRUFOICAgICAg ICAgICAgICAgICBHZXRTYXZlZElzVmlzaWJsZSgpOwogICAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgR2V0U2F2ZWRJc1Zpc2libGUoZmxvYXQgZnJhbWUpOwogICAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgR2V0U2F2ZWRPblN0YXRlKGZsb2F0IGZyYW1lKTsKCiAgICBCT09MRUFOICAgICAgICAg ICAgICAgICBJc0RlZm9ybWluZyAoKTsKCiAgICAgCiAgICBpbmxpbmUgVHdpbmUgICAgICAgICAg ICBHZXROYW1lRm9yQnVuY2goKSB7IHJldHVybiBOYW1lOyB9CgogICAgdm9pZCAgICAgICAgICAg ICAgICAgICAgRGVsYXllZFVwZGF0ZUFsbENoYW5uZWxzICh1bnNpZ25lZCBmbGFncyk7CiAgICBp bnQgICAgICAgICAgICAgICAgICAgICBUcmF2ZXJzZUxvY2FsKGZsb2F0IGZyYW1lKTsKICAgIGlu dCAgICAgICAgICAgICAgICAgICAgIFRyYXZlcnNlV29ybGQoZmxvYXQgZnJhbWUpOwogICAgQk9P TEVBTiAgICAgICAgICAgICAgICAgR2V0TG9jYWxUcmF2ZXJzZWQoKTsKICAgIEJPT0xFQU4gICAg ICAgICAgICAgICAgIEdldExvY2FsVHJhdmVyc2luZygpIHsgcmV0dXJuIF9sb2NhbFRyYXZlcnNp bmc7IH0KICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIEdldFdvcmxkVHJhdmVyc2VkKCk7CiAg ICB2b2lkICAgICAgICAgICAgICAgICAgICBTZXRMb2NhbFRyYXZlcnNlZCgpOwogICAgdm9pZCAg ICAgICAgICAgICAgICAgICAgU2V0V29ybGRUcmF2ZXJzZWQoKTsKICAgIHZvaWQgICAgICAgICAg ICAgICAgICAgIFNldExvY2FsVHJhdmVyc2luZygpIHsgX2xvY2FsVHJhdmVyc2luZyA9IDEgOyB9 CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICBEaXJ0eU5vZGUoKTsKICAgIHZpcnR1YWwgTlJI WV9jbGFzc09iamVjdCAqR2V0T2JqZWN0UHRyKCkgeyByZXR1cm4gX19udWxsIDsgfQogICAgIAog ICAgaW50IFRyYXZlcnNlSGllcihmbG9hdCBmcmFtZSk7CiAgICB2aXJ0dWFsIHZvaWQJICAgIEdl dFNoYXBlKFJFQUwgZnJhbWUpOwp9OwoKIApjbGFzcyBOUkhZX2NsYXNzVGhpbmdPYnNlcnZlciA6 IAogICAgcHVibGljIE9ic2VydmVyCnsKcHJpdmF0ZToKICAgIHZvaWQgUmVmcmVzaE9ic2VydmVy IChTdWJqZWN0ICp0aGluZykgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBSZWZy ZXNoVGhpbmcgKHRoaW5nKTsgfTsKICAgIGludCAgR2V0T2JzZXJ2ZXJUeXBlICgpICAgICB7IHJl dHVybiBHZXRUeXBlVGhpbmcoKTsgICB9OwogICAgaW50ICBBbGxvd0Rlc3RydWN0QnlTdWJqZWN0 ICgpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIEFsbG93RGVzdHJ1 Y3RCeVN1YmplY3RUaGluZygpOyB9OwpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgUmVmcmVzaFRo aW5nIChTdWJqZWN0ICpzdWJqKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBP YnNlcnZlcjo6UmVmcmVzaE9ic2VydmVyIChzdWJqKTsgfTsKICAgIHZpcnR1YWwgaW50ICBHZXRU eXBlVGhpbmcgKCkgeyByZXR1cm4gT2JzZXJ2ZXI6OkdldE9ic2VydmVyVHlwZSgpOyB9OwogICAg dmlydHVhbCBpbnQgIEFsbG93RGVzdHJ1Y3RCeVN1YmplY3RUaGluZyAoKSAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gT2JzZXJ2ZXI6OkFsbG93RGVzdHJ1Y3RCeVN1 YmplY3QoKTsgfTsKCiAgICBOUkhZX2NsYXNzVGhpbmdPYnNlcnZlciAoTlJIWV9jbGFzc1RoaW5n ICp0aGluZykgOiBPYnNlcnZlciAodGhpbmcpIHsgfTsKfTsKCiAKCiAKCiMgMzUgImgvbnJoeV9j bGFzc0FwcGFyaXRpb24uaCIgMgoKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL0NPTE9SLmgiIDEK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IENvbG9yIHsKICAgIHB1YmxpYzoK CiAgICBmbG9hdCAgIHI7CiAgICBmbG9hdCAgIGc7CiAgICBmbG9hdCAgIGI7CgoKICAgIHByaXZh dGU6CiAgICAgICAgCiAgICBmbG9hdCB2YWx1ZSggZmxvYXQgbjEsIGZsb2F0IG4yLCBmbG9hdCBo dWUpOwoKICAgIAogICAgcHVibGljOgoKICAgIENvbG9yKCB2b2lkKTsKICAgIENvbG9yKCBmbG9h dCByLCBmbG9hdCBnLCBmbG9hdCBiKTsKICAgIENvbG9yKCBjb25zdCBDb2xvciAmIHRoYXQgKSB7 CiAgICAgICAgKnRoaXMgPSB0aGF0OwogICAgICAgIH07CgogICAgdm9pZCBTZXRSR0IoIGZsb2F0 IHIsIGZsb2F0IGcsIGZsb2F0IGIpOwogICAgdm9pZCBTZXRITFMoIGZsb2F0IGgsIGZsb2F0IGws IGZsb2F0IHMpOwogICAgdm9pZCBTZXRIU1YoIGZsb2F0IGgsIGZsb2F0IHMsIGZsb2F0IHYpOwog ICAgdm9pZCBTZXRQYWNrZWQoIHVuc2lnbmVkIGxvbmcgYyk7CgogICAgdm9pZCBHZXRSR0IoIGZs b2F0ICpyLCBmbG9hdCAqZywgZmxvYXQgKmIpOwogICAgdm9pZCBHZXRITFMoIGZsb2F0ICpoLCBm bG9hdCAqbCwgZmxvYXQgKnMpOwogICAgdm9pZCBHZXRIU1YoIGZsb2F0ICpoLCBmbG9hdCAqcywg ZmxvYXQgKnYpOwogICAgdm9pZCBHZXRQYWNrZWQoIHVuc2lnbmVkIGxvbmcgKmMpOwoKICAgIGlu dCAgUmVhZEJpbmFyeSggTkVURklMRV9GSUxFICpmcCk7CiAgICBpbnQgIFdyaXRlQmluYXJ5KCBO RVRGSUxFX0ZJTEUgKmZwKTsKCiAgICBpbnQgb3BlcmF0b3IgPT0gKGNvbnN0IENvbG9yICZjb2xv cikgY29uc3QgCiAgICAgICAgewogICAgICAgIHJldHVybigodGhpcy0+ciA9PSBjb2xvci5yKSAm JiAodGhpcy0+ZyA9PSBjb2xvci5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiAodGhpcy0+YiA9PSBjb2xvci5iKSk7CiAgICAgICAgfTsKCiAgICBpbnQgb3BlcmF0b3Ig IT0gKGNvbnN0IENvbG9yICZjb2xvcikgY29uc3QgCiAgICAgICAgewogICAgICAgIHJldHVybigo dGhpcy0+ciAhPSBjb2xvci5yKSB8fCAodGhpcy0+ZyAhPSBjb2xvci5nKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy0+YiAhPSBjb2xvci5iKSk7CiAgICAgICAg fTsKCiAgICBDb2xvciBvcGVyYXRvciooZmxvYXQgZikgY29uc3QKICAgIHsKICAgICAgICBDb2xv ciAgIHRtcDsKCgogICAgICAgIHRtcC5yID0gdGhpcy0+ciAqIGY7CiAgICAgICAgdG1wLmcgPSB0 aGlzLT5nICogZjsKICAgICAgICB0bXAuYiA9IHRoaXMtPmIgKiBmOwoKICAgICAgICByZXR1cm4o IHRtcCk7CiAgICB9CgogICAgQ29sb3Igb3BlcmF0b3IqKGRvdWJsZSBmKSBjb25zdAogICAgewog ICAgICAgIENvbG9yICAgdG1wOwoKCiAgICAgICAgdG1wLnIgPSB0aGlzLT5yICogZjsKICAgICAg ICB0bXAuZyA9IHRoaXMtPmcgKiBmOwogICAgICAgIHRtcC5iID0gdGhpcy0+YiAqIGY7CgogICAg ICAgIHJldHVybiggdG1wKTsKICAgIH0KCiAgICBmcmllbmQgaW5saW5lIENvbG9yIG9wZXJhdG9y ICooZmxvYXQgZiwgY29uc3QgQ29sb3IgJnYpCiAgICB7CiAgICBDb2xvciAgIHRtcDsKCiAgICAg ICAgdG1wLnIgPSB2LnIgKiBmOwogICAgICAgIHRtcC5nID0gdi5nICogZjsKICAgICAgICB0bXAu YiA9IHYuYiAqIGY7CgogICAgICAgIHJldHVybiggdG1wKTsKICAgIH0KCiAgICBmcmllbmQgaW5s aW5lIENvbG9yIG9wZXJhdG9yICooZG91YmxlIGYsIGNvbnN0IENvbG9yICZ2KQogICAgewogICAg Q29sb3IgICB0bXA7CgogICAgICAgIHRtcC5yID0gdi5yICogZjsKICAgICAgICB0bXAuZyA9IHYu ZyAqIGY7CiAgICAgICAgdG1wLmIgPSB2LmIgKiBmOwoKICAgICAgICByZXR1cm4oIHRtcCk7CiAg ICB9CgogICAgQ29sb3Igb3BlcmF0b3IvKGZsb2F0IGYpIGNvbnN0CiAgICB7CiAgICAgICAgQ29s b3IgICB0bXA7CgoKICAgICAgICB0bXAuciA9IHRoaXMtPnIgLyBmOwogICAgICAgIHRtcC5nID0g dGhpcy0+ZyAvIGY7CiAgICAgICAgdG1wLmIgPSB0aGlzLT5iIC8gZjsKCiAgICAgICAgcmV0dXJu KCB0bXApOwogICAgfQoKICAgIENvbG9yIG9wZXJhdG9yKyhjb25zdCBDb2xvciAmdikgY29uc3QK ICAgIHsKICAgIENvbG9yICAgdG1wOwoKICAgICAgICAKICAgICAgICB0bXAuciA9IHRoaXMtPnIg KyB2LnI7CiAgICAgICAgdG1wLmcgPSB0aGlzLT5nICsgdi5nOwogICAgICAgIHRtcC5iID0gdGhp cy0+YiArIHYuYjsKCiAgICAgICAgcmV0dXJuKCB0bXApOwogICAgfTsKCiAgICBDb2xvciBvcGVy YXRvci0oY29uc3QgQ29sb3IgJnYpIGNvbnN0CiAgICB7CiAgICBDb2xvciAgIHRtcDsKCiAgICAg ICAgCiAgICAgICAgdG1wLnIgPSB0aGlzLT5yIC0gdi5yOwogICAgICAgIHRtcC5nID0gdGhpcy0+ ZyAtIHYuZzsKICAgICAgICB0bXAuYiA9IHRoaXMtPmIgLSB2LmI7CgogICAgICAgIHJldHVybigg dG1wKTsKICAgIH07Cn07CgppbmxpbmUgY29uc3QgY2hhciAqY2xhc3NOYW1lKCBDb2xvciApIHsg cmV0dXJuICJDb2xvciI7IH07CgoKIyAzNyAiaC9ucmh5X2NsYXNzQXBwYXJpdGlvbi5oIiAyCgoK IAogCiAKCiAKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRl IDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2FscGhhbGlzdDsKCnN0cnVjdCBOUkhZX2NsYXNzQXBw YXJpdGlvbjpwdWJsaWMgTlJIWV9jbGFzc1RoaW5nIHsKcHJpdmF0ZToKICAgIHR5cGVkZWYgTlJI WV9jbGFzc1RoaW5nIGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9j bGFzc0FwcGFyaXRpb24+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2Ns YXNzQXBwYXJpdGlvbj47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc0FwcGFy aXRpb24+OwoKcHJvdGVjdGVkOgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAgTlJI WV9jbGFzc0FwcGFyaXRpb24gKAogICAgICAgIGNvbnN0IENIQVIgICAgICAgICAgICAgICpuYW1l LAogICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgIGNoaWxkVHlwZQogICAgICAgICk7CiAg ICBOUkhZX2NsYXNzQXBwYXJpdGlvbiAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAg Km5hbWUsCiAgICAgICAgTlJIWV9jbGFzc0FwcGFyaXRpb24gICAgKmNsb25lRnJvbQogICAgICAg ICk7CiAgICBOUkhZX2NsYXNzQXBwYXJpdGlvbiAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoK ICAgIH5OUkhZX2NsYXNzQXBwYXJpdGlvbiAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg ICAKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNs YXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFz c0FwcGFyaXRpb24iKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAgICAgICAgICAgICAgICAg ICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVy biAoVEhJTkdfVFlQRV9BUFBBUklUSU9OKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlf Y2xhc3NBcHBhcml0aW9uPiAqRmluZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0QXBwYXJpdGlv blBhcmVudCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUkhZX2J1 bmNoIDxOUkhZX2NsYXNzQXBwYXJpdGlvbj4gKnBhcmVudAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0 Q29sb3IgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVB TCAgICAgICpuZXdDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElOVCAgICAgICAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q29sb3JSZWQgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5l d0NvbG9yUmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09M RUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldENvbG9yR3JlZW4gKAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0NvbG9yR3JlZW4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAg ICAgICAgICAgICAgICAgICAgU2V0Q29sb3JCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdDb2xvckJsdWUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICAgU2V0Q29sb3JJbnRlbnMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0NvbG9ySW50ZW5zCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNl dE9wYWNpdHkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UkVBTCAgICAgIG5ld09wYWNpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKCiAgICAgCiAKICAgIFJFQUwgKkdldENvbG9yICgpOwoKICAgICAKCiAgICB2b2lkICAgR2V0 UmVjdXJzaXZlQ29sb3IgKENvbG9yICYsIGZsb2F0ICopOwoKICAgIHN0YXRpYyBaT09MRUFOICAg ICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUFwcGFyaXRpb25QYXJlbnQgKAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9idW5jaCA8TlJIWV9jbGFzc0FwcGFy aXRpb24+ICpwYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAg IHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUNvbG9yICgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgICAgICAgICpuZXdDb2xv ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgIG51 bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFt ICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3Ry ZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVub2RhbE9uRmxhZyAoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZU5vZGFsRGlzcGxheSAoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJl YW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUFwcGFyaXRpb25QYXJlbnQgKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJl U3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDb2xvciAoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgVHdpbmUgICAgICAg ICAgICAgICAgICAgICAgICAgICBHZXRDb2xvck9wdGlvbiggaW50IGlnbm9yZURlZmF1bHQgKTsK CiAgICAgCiAgICAgCiAgICAgCgogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBT ZXROb2RhbE9uRmxhZyAoQk9PTEVBTiBzdGF0dXMpOwoKICAgICAKCiAgICB2b2lkICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTZXROZWVkc1JlY2FsYyAoKTsKfTsKCiAKCiAKCiMgMzkgImgv bnJoeV9jbGFzc09iamVjdC5oIiAyCgoKCiAKY2xhc3MgTlJIWV9jbGFzc09iamVjdE1hbmlwdWxh dG9yOwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9tYXRjaDsKdGVtcGxhdGUg PGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfYWxwaGFsaXN0OwpjbGFzcyBOUkhZX29iamVjdEZpbGVE YXRhOwpjbGFzcyBOUkhZX2NsYXNzVHJhY2s7CgpjbGFzcyBOUkhZX2NsYXNzT2JqZWN0IDogCiAg ICBwdWJsaWMgTlJIWV9jbGFzc0FwcGFyaXRpb24sCiAgICBwdWJsaWMgT2JzZXJ2ZXJGYWN0b3J5 IDxOUkhZX2NsYXNzT2JqZWN0Pgp7CnByaXZhdGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NBcHBh cml0aW9uIGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc09i amVjdD4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xhc3NPYmplY3Q+ OwogICAgZnJpZW5kIE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NPYmplY3Q+OwoKICAgICAKICAg IFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgb2JqU3RhdGljOwoKICAgIE5SSFlfb2Jq ZWN0RmlsZURhdGEgICAgICAgICAgICAgKiBfZmlsZURhdGE7CgogICAgIAogICAgYm9vbCByZXBv c2l0aW9uU2F2ZUNoYW5zKCBjb25zdCBNX01hdHJpeCYsIHZlY3RvcjwgTlJIWV9jbGFzc0NoYW5u ZWwqID4mLAoJCQkgICAgICB2ZWN0b3I8IE5SSFlfY2xhc3NDaGFubmVsKiA+JiwKCQkJICAgICAg dmVjdG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYsCgkJCSAgICAgIGludCBmcmFtZSwgYm9vbCwg Ym9vbCwgYm9vbCwgYm9vbCApOwoKICAgIApwcm90ZWN0ZWQ6CiAgICBOUkhZX2NsYXNzT2JqZWN0 TWFuaXB1bGF0b3IgICAgICptYW5pcHVsYXRvcjsKICAgCiAgIAogICAgWk9PTEVBTiAgICAgICAg ICAgICAgICAgICAgICAgICBleHRyYU1vZGU7CiAgICBOUkhZX2NsYXNzT2JqZWN0ICAgICAgICAg ICAgICAgICpvcmJpdE9iamVjdDsKCiAgICBOUkhZX2NsYXNzVHJhY2sgICAgICAgICAgICAgICAg ICpwcmltYXJ5Q29uc3RyYWludDsKICAgIE5SSFlfY2xhc3NUcmFjayAgICAgICAgICAgICAgICpz ZWNvbmRhcnlDb25zdHJhaW50OwogICAgTlJIWV9jbGFzc09iamVjdCAgICAgICAgICAgICAgICpj b25zdHJhaW50R2VvbWV0cnk7CgogICAKCgoKIAoKCgoKCgoKCgogICAgdm9pZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwogICAgdm9pZCBkZXRhY2goTlJIWV9kZXBlbmREYXRhICopOwoKcHVibGljOgogICAgIAogICAg TlJIWV9jbGFzc09iamVjdCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICAgICAqbmFtZSwKICAg ICAgICBjb25zdCBJTlQgICAgICAgICAgIGNoaWxkVHlwZQogICAgICAgICk7CiAgICBOUkhZX2Ns YXNzT2JqZWN0ICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5S SFlfY2xhc3NPYmplY3QgICAgKmNsb25lRnJvbQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzT2Jq ZWN0ICgKICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgfk5SSFlfY2xhc3NPYmplY3QgKAog ICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAg ICAgICAgICAgICpQcmludFNlbGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KSB7IHJldHVybiAoIk5SSFlfY2xhc3NPYmplY3QiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5U ICAgICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9PQkpFQ1QpOyB9CgogICAgTGlzdCA8VHdp bmU+ICAgICAgICAgICAgICAgICAgICBMaXN0T2ZDaGFubmVscyAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CgogICAgc3RhdGljIE5SSFlfYnVuY2g8TlJIWV9jbGFzc09iamVjdD4g KkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hB UiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgoK ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VXb3JsZEhvbWVsZXNzUG9z aXRpb25NYXRyaXggKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgogICAgc3Rh dGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxlT2JqZWN0T3JpZ2luICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfYnVuY2ggPE5SSFlf Y2xhc3NPYmplY3Q+ICpvcmlnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKCiAgICB2aXJ0dWFsIHZvaWQgQ3JlYXRlT2JzZXJ2ZXIgKGludCB0eXBlKSB7IGRvQ3JlYXRl T2JzZXJ2ZXIgKHRoaXMsIHR5cGUpOyB9OwoKICAgICAKCgogICAgdm9pZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEZXNjcmliZUZ1bGxTdGF0ZVBhY2tlZCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEZXNjcmliZUZpbGVIZXJvICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdl dEZpbGVIZXJvT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdCApOwogICAgdm9pZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEZXNjcmliZUZpbGVTaW1wICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBUd2luZSAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdldEZpbGVTaW1wT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdCApOwogICAg dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZpbGVHcm91cCAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3Jp YmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgVHdp bmUgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGaWxlR3JvdXBPcHRpb24oIGludCBpZ25v cmVEZWZhdWx0ICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl VXNlSGVyb0ZsYWcgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0VXNlSGVy b0ZsYWdPcHRpb24oIGludCBpZ25vcmVEZWZhdWx0ICk7CgogICAgdm9pZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEZXNjcmliZUlzQW5pbWF0aW5nICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaWJlQW5pbUVuYWJsZWQgKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGVzY3JpYmVPYmplY3RPcmlnaW4gKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFR3aW5lICAgICAgICAgICAgICAg ICAgICAgICAgICAgR2V0T2JqZWN0T3JpZ2luT3B0aW9uKCBpbnQgaWdub3JlRGVmYXVsdCApOwoK ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdE9iamVjdChGSUxFICpmcCwg Y29uc3QgTGlzdDxUd2luZT4gJmxzKTsKCiAgICAgCiAgICAgCiAgICAgCiAgICBOUkhZX2NsYXNz T2JqZWN0TWFuaXB1bGF0b3IqIEdldE1hbmlwdWxhdG9yKCkgeyByZXR1cm4gKG1hbmlwdWxhdG9y KTsgfQogICAgQk9PTEVBTiBDcmVhdGVNYW5pcHVsYXRvcigpOyAKICAgIHZvaWQgRGVzdHJveU1h bmlwdWxhdG9yKCk7CiAgICB2b2lkIFJlcG9zaXRpb25DaGFucyggdmVjdG9yPCBOUkhZX2NsYXNz Q2hhbm5lbCogPiYsCgkJCSAgdmVjdG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYsCgkJCSAgdmVj dG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYgKTsKICAgIHZvaWQgUmVwb3NpdGlvbkNoYW5zKCBj bGFzcyBOUkhZX2NsYXNzQ2hhbm5lbExpc3QmICk7CiAgICBNX01hdHJpeCBSZXBvc2l0aW9uTWF0 cml4KCBjb25zdCBNX01hdHJpeCYsIGludCwKCQkJICAgICAgIHZlY3RvcjwgTlJIWV9jbGFzc0No YW5uZWwqID4mLAoJCQkgICAgICAgdmVjdG9yPCBOUkhZX2NsYXNzQ2hhbm5lbCogPiYsCgkJCSAg ICAgICB2ZWN0b3I8IE5SSFlfY2xhc3NDaGFubmVsKiA+JiApOwogICAgaW50IFJlcG9zaXRpb24o IGNvbnN0IE1fTWF0cml4JiBuZXdQb3MsIGludCBmcmFtZSwgYm9vbCBzY2FsZSA9IGZhbHNlLAoJ CSAgICBib29sIHJvdCA9IHRydWUsIGJvb2wgdHJhbiA9IHRydWUsIGJvb2wgc2F2ZSA9IHRydWUg KTsKICAgIGludCBSZXBvc2l0aW9uKCBOUkhZX2NsYXNzVGhpbmcqIHRhcmdldCwgaW50IGZyYW1l LAoJCSAgICBib29sIHNjYWxlID0gZmFsc2UsIGJvb2wgcm90ID0gdHJ1ZSwgYm9vbCB0cmFuID0g dHJ1ZSwKCQkgICAgYm9vbCBzYXZlID0gdHJ1ZSApOwoKICAgIHZvaWQgU2V0SWdub3JlRXh0cmFD aGFubmVsTW9kZSggWk9PTEVBTiBzdGF0ZSApIHsgZXh0cmFNb2RlID0gc3RhdGU7IH0KICAgIFpP T0xFQU4gR2V0SWdub3JlRXh0cmFDaGFubmVsTW9kZSgpIHsgcmV0dXJuKGV4dHJhTW9kZSk7IH0K ICAgIHZvaWQgU2V0T3JiaXRPYmplY3QoIE5SSFlfY2xhc3NPYmplY3QqIG9iaiApIHsgdGhpcy0+ b3JiaXRPYmplY3Q9b2JqOyB9CiAgICBOUkhZX2NsYXNzT2JqZWN0KiBHZXRPcmJpdE9iamVjdCgp OwogICAgTV9WZWN0b3IgR2V0UmF5SW50ZXJzZWN0aW9uKCBNX1ZlY3RvciBvcmlnaW4sIE1fVmVj dG9yIHJheSApOwogICAgQk9PTEVBTiBTZXRQcmltYXJ5Q29uc3RyYWludCggTlJIWV9jbGFzc1Ry YWNrKiB0cmsgKSB7Cgl0aGlzLT5wcmltYXJ5Q29uc3RyYWludD10cms7IAoJcmV0dXJuIDEgOwog ICAgfQogICAgTlJIWV9jbGFzc1RyYWNrKiBHZXRQcmltYXJ5Q29uc3RyYWludCgpIHsKCXJldHVy biB0aGlzLT5wcmltYXJ5Q29uc3RyYWludDsKICAgIH0KICAgIEJPT0xFQU4gU2V0U2Vjb25kYXJ5 Q29uc3RyYWludCggTlJIWV9jbGFzc1RyYWNrKiB0cmsgKSB7Cgl0aGlzLT5zZWNvbmRhcnlDb25z dHJhaW50PXRyazsKCXJldHVybiAxIDsKICAgIH0KICAgIE5SSFlfY2xhc3NUcmFjayogR2V0U2Vj b25kYXJ5Q29uc3RyYWludCgpIHsKCXJldHVybiB0aGlzLT5zZWNvbmRhcnlDb25zdHJhaW50Owog ICAgfQogICAgQk9PTEVBTiBTZXRDb25zdHJhaW50R2VvbWV0cnkoIE5SSFlfY2xhc3NPYmplY3Qq IG9iamVjdCApIHsKCXRoaXMtPmNvbnN0cmFpbnRHZW9tZXRyeT1vYmplY3Q7IAoJcmV0dXJuIDEg OwogICAgfQogICAgTlJIWV9jbGFzc09iamVjdCogR2V0Q29uc3RyYWludEdlb21ldHJ5KCkgewoJ cmV0dXJuIHRoaXMtPmNvbnN0cmFpbnRHZW9tZXRyeTsKICAgIH0KCgoKICAgICAKICAgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICBTZXRGaWxlSGVybyAoY29uc3QgVHdpbmUgJiBuZXdGaWxl SGVybyk7CiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgU2V0RmlsZVNpbXAgKGNvbnN0 IFR3aW5lICYgbmV3RmlsZVNpbXApOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIFNl dEZpbGVHcm91cCAoY29uc3QgVHdpbmUgJiBuZXdGaWxlR3JvdXApOwogICAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgIFNldFVzZUhlcm9GbGFnIChCT09MRUFOIG5ld1N0YXR1cyk7CiAgICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgR2V0VXNlSGVyb0ZsYWcgKCk7CiAgICBCT09MRUFO ICAgICAgICAgICAgICAgICAgICAgU2V0VXNlRmlsZUNoYW5uZWwgKEJPT0xFQU4gbmV3U3RhdHVz KTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBHZXRVc2VGaWxlQ2hhbm5lbCAoKTsK CiAgICBjb25zdCBUd2luZSAmICAgICAgICAgICAgICAgR2V0RmlsZUhlcm8gKCk7CiAgICBjb25z dCBUd2luZSAmICAgICAgICAgICAgICAgR2V0RmlsZVNpbXAgKCk7CiAgICBjb25zdCBUd2luZSAm ICAgICAgICAgICAgICAgR2V0RmlsZUdyb3VwICgpOwoKICAgIGNvbnN0IFR3aW5lICYgICAgICAg ICAgICAgICBHZXRPcmlnRmlsZUhlcm8gKCk7CiAgICBjb25zdCBUd2luZSAmICAgICAgICAgICAg ICAgR2V0T3JpZ0ZpbGVTaW1wICgpOwoKICAgIGNvbnN0IExpc3QgPFR3aW5lPiAmICAgICAgICBH ZXRGaWxlbmFtZXMgKGZsb2F0IHRpbWUpOwogICAgY29uc3QgVHdpbmUgJiAgICAgICAgICAgICAg IEdldEZpbGVHcm91cEFuZE92ZXJyaWRlICgpOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg ICAgICBPdmVycmlkZUZpbGUgKGNvbnN0IFR3aW5lICYgbmV3RmlsZSk7CiAgICB2b2lkICAgICAg ICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVOZXh0ZmlsZSAoY29uc3QgVHdpbmUgJiBuZXdOZXh0 ZmlsZSk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVHcm91cCAoY29u c3QgVHdpbmUgJiBuZXdHcm91cCk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgUmVz ZXRPdmVycmlkZSAoKTsKCiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgU2V0T2JqZWN0 T3JpZ2luKE5SSFlfY2xhc3NUaGluZyAqb3JpZ2luKTsKICAgIE5SSFlfY2xhc3NPYmplY3QgKkdl dE9iamVjdFB0cigpIHsgcmV0dXJuIHRoaXM7IH0KfTsKCiAKCiAKCiMgNDAgImgvbnJoeV9jbGFz c0NhbWVyYS5oIiAyCgojIDEgImgvbnJoeV9jbGFzc1ZpZXdNYW5pcHVsYXRvci5oIiAxCiAKCgoK CgoKCgoKCgoKCgoKCmNsYXNzIE5SSFlfY2xhc3NPYmplY3Q7CmNsYXNzIE5SSFlfY2xhc3NUaGlu ZzsKY2xhc3MgTlJIWV9jbGFzc0NhbWVyYTsKIyAxICJoL25yaHlfY2xhc3NPYnNlcnZlci5oIiAx CgoKCiAKCgoKIAogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMSAiaC9ucmh5X2NsYXNz Vmlld01hbmlwdWxhdG9yLmgiIDIKCiMgMSAiaC9ucmh5X2NsYXNzQ2hhbm5lbExpc3QuaCIgMQog CiAKIAogCiAKCgoKCgoKIyAxICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIgMQoKIAoK CgoKCgoKCgoKCgoKCgoKCiMgMjAzICIvc29mdHdhcmUvdGhhbGlhL2gvc3RkdHlwZXMuaCIKCgoK CgoKCgoKCgoKCgojIDEyICJoL25yaHlfY2xhc3NDaGFubmVsTGlzdC5oIiAyCgpjbGFzcyBOUkhZ X2NsYXNzQ2hhbm5lbDsKCiAKIAoKY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtOwoKIAoK Y2xhc3MgTlJIWV9jbGFzc0NoYW5uZWxMaXN0IDogCiAgICAgICAgcHVibGljIFN1YmplY3QsCiAg ICAgICAgcHVibGljIE9ic2VydmVyLCAgCiAgICAgICAgcHVibGljIE9ic2VydmVyRmFjdG9yeTxO UkhZX2NsYXNzQ2hhbm5lbExpc3Q+CnsKICAgIEJPT0xFQU4gY2hlY2tDaGFubmVsQ3VycmVuY3kg KE5SSFlfY2xhc3NDaGFubmVsICpjaGFuKTsKICAgIEJPT0xFQU4gX21hZGVDdXJyZW50Owpwcm90 ZWN0ZWQ6CiAgICBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqPiBfY2hhbm5lbHM7CiAg ICBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzVGhpbmcgICAqPiBfdGhpbmdzOwogICAgQk9PTEVBTiBf bmVlZHNTb3J0aW5nOwogICAgQk9PTEVBTiBfaXNTb3J0YWJsZTsKICAgIGludCAgQWxsb3dEZXN0 cnVjdEJ5U3ViamVjdCAoKSB7IHJldHVybiAwIDsgfTsKICAgIHZvaWQgc29ydCAoKTsKcHVibGlj OgogICAgTlJIWV9jbGFzc0NoYW5uZWxMaXN0IChCT09MRUFOIG1ha2VDdXJyZW50ID0gMSApOwog ICB+TlJIWV9jbGFzc0NoYW5uZWxMaXN0ICgpOwogICAgdm9pZCAgICBTb3J0ICgpIHsgaWYgKF9u ZWVkc1NvcnRpbmcpIHNvcnQoKTsgfQogICAgdm9pZCAgICBSZW1vdmVBbGwgICgpOwogICAgdm9p ZCAgICBTZXRDdXJyZW50IChjb25zdCBMaXN0IDxjbGFzcyBOUkhZX2NsYXNzQ2hhbm5lbCAqPiAm KTsKICAgIEJPT0xFQU4gQWRkICAgICAoTlJIWV9jbGFzc0NoYW5uZWwgKik7CiAgICBCT09MRUFO IFJlbW92ZSAgKE5SSFlfY2xhc3NDaGFubmVsICopOwogICAgQk9PTEVBTiBTYXZlICAgICgpOwog ICAgQk9PTEVBTiBSZXNldCAgICgpOwogICAgdm9pZCAgICBSZWZyZXNoT2JzZXJ2ZXIgKFN1Ympl Y3QgKik7CiAgICB2b2lkIENyZWF0ZU9ic2VydmVyIChpbnQgdHlwZSkgeyBkb0NyZWF0ZU9ic2Vy dmVyICh0aGlzLCB0eXBlKTsgfTsKICAgIGludCAgICAgc2l6ZSAgICAoKSB7IHJldHVybiBfY2hh bm5lbHMuc2l6ZSgpOyB9OwogICAgdm9pZCAgICBTZXRJc1NvcnRhYmxlIChCT09MRUFOIGY9IDEg KSB7IF9pc1NvcnRhYmxlID0gZjsgfTsKICAgIE5SSFlfY2xhc3NDaGFubmVsICpvcGVyYXRvciBb XSAoaW50IGkpIAogICAgICAgICAgICAgICAgeyBTb3J0ICgpOyByZXR1cm4gX2NoYW5uZWxzW2ld OyB9OwogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBOUkhZX2NsYXNzQ2hhbm5lbExpc3QmICk7 CiAgICBMaXN0IDxOUkhZX2NsYXNzQ2hhbm5lbCAqPiAmR2V0Q2hhbm5lbHMgKCkgCiAgICAgICAg ICAgICAgICB7IFNvcnQgKCk7IHJldHVybiBfY2hhbm5lbHM7IH07CiAgICBMaXN0IDxOUkhZX2Ns YXNzQ2hhbm5lbCAqPiAmR2V0VW5zb3J0ZWRDaGFubmVscyAoKSAKICAgICAgICAgICAgICAgIHsg cmV0dXJuIF9jaGFubmVsczsgfTsKICAgIExpc3QgPE5SSFlfY2xhc3NDaGFubmVsICo+IEdldENo YW5uZWxzQWRkZWQgKE5SSFlfY2xhc3NDaGFubmVsTGlzdCAmKTsKICAgIExpc3QgPE5SSFlfY2xh c3NDaGFubmVsICo+IEdldENoYW5uZWxzUmVtb3ZlZCAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoTlJIWV9jbGFzc0NoYW5uZWxMaXN0ICZjaGFuTGlzdCkgCiAgICAgICAgICAgICAg ICB7IHJldHVybiBjaGFuTGlzdC5HZXRDaGFubmVsc0FkZGVkICgqdGhpcyk7IH07CiAgICBMaXN0 IDxOUkhZX2NsYXNzQ2hhbm5lbCAqPiBHZXRDaGFubmVsc0ZvclRoaW5nIChOUkhZX2NsYXNzVGhp bmcgKik7CiAgICBMaXN0IDxOUkhZX2NsYXNzVGhpbmcgKj4gIEdldFRoaW5ncyAoKTsKICAgIExp c3QgPE5SSFlfY2xhc3NUaGluZyAqPiAgR2V0VGhpbmdzQ2hhbmdlZCAoTlJIWV9jbGFzc0NoYW5u ZWxMaXN0ICYpOwogICAgTGlzdCA8TlJIWV9jbGFzc1RoaW5nICo+ICBHZXRUaGluZ3NBZGRlZCAg IChOUkhZX2NsYXNzQ2hhbm5lbExpc3QgJik7CiAgICBMaXN0IDxOUkhZX2NsYXNzVGhpbmcgKj4g IEdldFRoaW5nc1JlbW92ZWQgKE5SSFlfY2xhc3NDaGFubmVsTGlzdCAmY2hhbkxpc3QpCiAgICAg ICAgICAgICAgICB7IHJldHVybiBjaGFuTGlzdC5HZXRUaGluZ3NBZGRlZCAoKnRoaXMpOyB9Owog ICAgaW50IEdldE9ic2VydmVyVHlwZSgpIHsgcmV0dXJuIDB4MDAwMDAwODAgOyB9OwoKICAgIHZv aWQgRGVzY3JpYmVDdXJ2ZXMoIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSYgKTsKCn07CgogCmNs YXNzIE5SSFlfY2xhc3NDaGFubmVsTGlzdE9ic2VydmVyIDogCiAgICBwdWJsaWMgT2JzZXJ2ZXIg IAp7CnByaXZhdGU6CiAgICB2b2lkIFJlZnJlc2hPYnNlcnZlciAoU3ViamVjdCAqY2hhbkxpc3Qp IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUmVmcmVzaENoYW5uZWxMaXN0IChj aGFuTGlzdCk7IH07CiAgICBpbnQgIEdldFR5cGUgKCkgICAgICAgICAgICAgeyByZXR1cm4gR2V0 VHlwZUNoYW5uZWxMaXN0KCk7ICAgfTsKICAgIGludCAgQWxsb3dEZXN0cnVjdEJ5U3ViamVjdCAo KSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBBbGxvd0Rlc3RydWN0 QnlTdWJqZWN0Q2hhbm5lbExpc3QoKTsgfTsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIFJlZnJl c2hDaGFubmVsTGlzdCAoU3ViamVjdCAqKSA9IDA7CiAgICB2aXJ0dWFsIGludCAgR2V0VHlwZUNo YW5uZWxMaXN0ICgpID0gMDsKICAgIHZpcnR1YWwgaW50ICBBbGxvd0Rlc3RydWN0QnlTdWJqZWN0 Q2hhbm5lbExpc3QgKCkgPSAwOwoKICAgIE5SSFlfY2xhc3NDaGFubmVsTGlzdE9ic2VydmVyIChO UkhZX2NsYXNzQ2hhbm5lbExpc3QgKmNoYW5MaXN0KSA6CiAgICAgICAgT2JzZXJ2ZXIgKGNoYW5M aXN0KSB7IH07Cn07CgoKCiMgMjIgImgvbnJoeV9jbGFzc1ZpZXdNYW5pcHVsYXRvci5oIiAyCgoj IDEgImgvVmlld01hbmlwdWxhdG9yLmgiIDEKCgoKIyAxICJoL01hbmlwdWxhdG9yLmgiIDEKCgoK IyAxICIvc29mdHdhcmUvdGhhbGlhL2gvT3BlblN0YWdlLmgiIDEKCgoKIyAxICIvdXNyL1gxMVI2 L2luY2x1ZGUvWG0vWG0uaCIgMQogCgoKIAogCgogCiAKIAoKCgoKCgoKCgoKCgoKIyAxICIvdXNy L1gxMVI2L2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAxCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9YMTFSNi9pbmNs dWRlL1gxMS9YbGliLmgiIDEKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWC5oIiAxCiAK CgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSUQ7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBNYXNrOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgQXRvbTsKdHlwZWRlZiB1bnNpZ25lZCBs b25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKCgoKCgoKCgoKdHlwZWRl ZiBYSUQgV2luZG93Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKdHlwZWRlZiBYSUQgRm9udDsKdHlw ZWRlZiBYSUQgUGl4bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9ybWFw Owp0eXBlZGVmIFhJRCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIEtleUNvZGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKIAoKCgoKCgoKCQkgICAgICAgCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoK CgoKIAoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoK CgoKCgoKCgojIDM0NSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YLmgiCgoKCgoKCgoKCgoKIAoK CgogCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgog CgoKCiAKCgoKCgogCgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgogCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoK IAoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCiAKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCiAKCgoKIAoK CgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoK CiAKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgojIDU2ICIvdXNyL1gxMVI2L2lu Y2x1ZGUvWDExL1hsaWIuaCIgMgoKCiAKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hmdW5j cHJvdG8uaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1OSAiL3Vzci9Y MTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCiMgMSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9Y b3NkZWZzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAgCgoKCgoKCgojIDk0ICIvdXNyL1gxMVI2 L2luY2x1ZGUvWDExL1hvc2RlZnMuaCIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj IDYwICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIgMgoKCgoKCgoKCgoKCgoKIyAxICIv dXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9lZ2NzLTIuOTEuNjYvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2FscGhhLXJlZGhhdC1saW51eC9l Z2NzLTIuOTEuNjYvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyA3MyAiL3Vzci9YMTFSNi9pbmNsdWRl L1gxMS9YbGliLmgiIDIKCiMgODYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgoKCgoK CgoKCgoKdHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgc3Ry dWN0IF9YRXh0RGF0YSB7CglpbnQgbnVtYmVyOwkJIAoJc3RydWN0IF9YRXh0RGF0YSAqbmV4dDsJ IAoJaW50ICgqZnJlZV9wcml2YXRlKSgJIAoKCXN0cnVjdCBfWEV4dERhdGEgKmV4dGVuc2lvbgoK CSk7CglYUG9pbnRlciBwcml2YXRlX2RhdGE7CSAKfSBYRXh0RGF0YTsKCiAKCgp0eXBlZGVmIHN0 cnVjdCB7CQkgCglpbnQgZXh0ZW5zaW9uOwkJIAoJaW50IG1ham9yX29wY29kZTsJIAoJaW50IGZp cnN0X2V2ZW50OwkgCglpbnQgZmlyc3RfZXJyb3I7CSAKfSBYRXh0Q29kZXM7CgogCgoKCnR5cGVk ZWYgc3RydWN0IHsKICAgIGludCBkZXB0aDsKICAgIGludCBiaXRzX3Blcl9waXhlbDsKICAgIGlu dCBzY2FubGluZV9wYWQ7Cn0gWFBpeG1hcEZvcm1hdFZhbHVlczsKCgogCgoKdHlwZWRlZiBzdHJ1 Y3QgewoJaW50IGZ1bmN0aW9uOwkJIAoJdW5zaWduZWQgbG9uZyBwbGFuZV9tYXNrOyAKCXVuc2ln bmVkIGxvbmcgZm9yZWdyb3VuZDsgCgl1bnNpZ25lZCBsb25nIGJhY2tncm91bmQ7IAoJaW50IGxp bmVfd2lkdGg7CQkgCglpbnQgbGluZV9zdHlsZTsJIAkgCglpbnQgY2FwX3N0eWxlOwkgIAkgCgoJ aW50IGpvaW5fc3R5bGU7CSAJIAoJaW50IGZpbGxfc3R5bGU7CSAJIAoKCWludCBmaWxsX3J1bGU7 CSAgCSAKCWludCBhcmNfbW9kZTsJCSAKCVBpeG1hcCB0aWxlOwkJIAoJUGl4bWFwIHN0aXBwbGU7 CQkgCglpbnQgdHNfeF9vcmlnaW47CSAKCWludCB0c195X29yaWdpbjsKICAgICAgICBGb250IGZv bnQ7CSAgICAgICAgIAoJaW50IHN1YndpbmRvd19tb2RlOyAgICAgIAoJaW50ICBncmFwaGljc19l eHBvc3VyZXM7IAoJaW50IGNsaXBfeF9vcmlnaW47CSAKCWludCBjbGlwX3lfb3JpZ2luOwoJUGl4 bWFwIGNsaXBfbWFzazsJIAoJaW50IGRhc2hfb2Zmc2V0OwkgCgljaGFyIGRhc2hlczsKfSBYR0NW YWx1ZXM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCBfWEdDCgoKCgoKCgoqR0M7CgogCgoKdHlwZWRl ZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglWaXN1YWxJRCB2aXN1YWxpZDsJIAoK CWludCBjX2NsYXNzOwkJIAoKCgoJdW5zaWduZWQgbG9uZyByZWRfbWFzaywgZ3JlZW5fbWFzaywg Ymx1ZV9tYXNrOwkgCglpbnQgYml0c19wZXJfcmdiOwkgCglpbnQgbWFwX2VudHJpZXM7CSAKfSBW aXN1YWw7CgogCgoJCnR5cGVkZWYgc3RydWN0IHsKCWludCBkZXB0aDsJCSAKCWludCBudmlzdWFs czsJCSAKCVZpc3VhbCAqdmlzdWFsczsJIAp9IERlcHRoOwoKIAoKCgoKCnN0cnVjdCBfWERpc3Bs YXk7CQkgCgp0eXBlZGVmIHN0cnVjdCB7CglYRXh0RGF0YSAqZXh0X2RhdGE7CSAKCXN0cnVjdCBf WERpc3BsYXkgKmRpc3BsYXk7IAoJV2luZG93IHJvb3Q7CQkgCglpbnQgd2lkdGgsIGhlaWdodDsJ IAoJaW50IG13aWR0aCwgbWhlaWdodDsJIAoJaW50IG5kZXB0aHM7CQkgCglEZXB0aCAqZGVwdGhz OwkJIAoJaW50IHJvb3RfZGVwdGg7CQkgCglWaXN1YWwgKnJvb3RfdmlzdWFsOwkgCglHQyBkZWZh dWx0X2djOwkJIAoJQ29sb3JtYXAgY21hcDsJCSAKCXVuc2lnbmVkIGxvbmcgd2hpdGVfcGl4ZWw7 Cgl1bnNpZ25lZCBsb25nIGJsYWNrX3BpeGVsOwkgCglpbnQgbWF4X21hcHMsIG1pbl9tYXBzOwkg CglpbnQgYmFja2luZ19zdG9yZTsJIAoJaW50ICBzYXZlX3VuZGVyczsJCglsb25nIHJvb3RfaW5w dXRfbWFzazsJIAp9IFNjcmVlbjsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CglYRXh0RGF0YSAqZXh0 X2RhdGE7CSAKCWludCBkZXB0aDsJCSAKCWludCBiaXRzX3Blcl9waXhlbDsJIAoJaW50IHNjYW5s aW5lX3BhZDsJIAp9IFNjcmVlbkZvcm1hdDsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBQaXht YXAgYmFja2dyb3VuZF9waXhtYXA7CSAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2dyb3VuZF9waXhl bDsJIAogICAgUGl4bWFwIGJvcmRlcl9waXhtYXA7CSAKICAgIHVuc2lnbmVkIGxvbmcgYm9yZGVy X3BpeGVsOwkgCiAgICBpbnQgYml0X2dyYXZpdHk7CQkgCiAgICBpbnQgd2luX2dyYXZpdHk7CQkg CiAgICBpbnQgYmFja2luZ19zdG9yZTsJCSAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFu ZXM7IAogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVsOyAKICAgIGludCAgc2F2ZV91bmRl cjsJCSAKICAgIGxvbmcgZXZlbnRfbWFzazsJCSAKICAgIGxvbmcgZG9fbm90X3Byb3BhZ2F0ZV9t YXNrOwkgCiAgICBpbnQgIG92ZXJyaWRlX3JlZGlyZWN0OwkgCiAgICBDb2xvcm1hcCBjb2xvcm1h cDsJCSAKICAgIEN1cnNvciBjdXJzb3I7CQkgCn0gWFNldFdpbmRvd0F0dHJpYnV0ZXM7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsJCQkgCiAgICBpbnQgd2lkdGgsIGhlaWdodDsJCSAK ICAgIGludCBib3JkZXJfd2lkdGg7CQkgCiAgICBpbnQgZGVwdGg7ICAgICAgICAgIAkgCiAgICBW aXN1YWwgKnZpc3VhbDsJCSAKICAgIFdpbmRvdyByb290OyAgICAgICAgCSAKCiAgICBpbnQgY19j bGFzczsJCSAKCgoKICAgIGludCBiaXRfZ3Jhdml0eTsJCSAKICAgIGludCB3aW5fZ3Jhdml0eTsJ CSAKICAgIGludCBiYWNraW5nX3N0b3JlOwkJIAogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3Bs YW5lczsgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tpbmdfcGl4ZWw7IAogICAgaW50ICBzYXZlX3Vu ZGVyOwkJIAogICAgQ29sb3JtYXAgY29sb3JtYXA7CQkgCiAgICBpbnQgIG1hcF9pbnN0YWxsZWQ7 CQkgCiAgICBpbnQgbWFwX3N0YXRlOwkJIAogICAgbG9uZyBhbGxfZXZlbnRfbWFza3M7CSAKICAg IGxvbmcgeW91cl9ldmVudF9tYXNrOwkgCiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsg IAogICAgaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAogICAgU2NyZWVuICpzY3JlZW47CQkgCn0g WFdpbmRvd0F0dHJpYnV0ZXM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgZmFtaWx5OwkJ IAoJaW50IGxlbmd0aDsJCSAKCWNoYXIgKmFkZHJlc3M7CQkgCn0gWEhvc3RBZGRyZXNzOwoKIAoK CnR5cGVkZWYgc3RydWN0IF9YSW1hZ2UgewogICAgaW50IHdpZHRoLCBoZWlnaHQ7CQkgCiAgICBp bnQgeG9mZnNldDsJCSAKICAgIGludCBmb3JtYXQ7CQkJIAogICAgY2hhciAqZGF0YTsJCQkgCiAg ICBpbnQgYnl0ZV9vcmRlcjsJCSAKICAgIGludCBiaXRtYXBfdW5pdDsJCSAKICAgIGludCBiaXRt YXBfYml0X29yZGVyOwkgCiAgICBpbnQgYml0bWFwX3BhZDsJCSAKICAgIGludCBkZXB0aDsJCQkg CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CQkgCiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CQkgCiAg ICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwkgCiAgICB1bnNpZ25lZCBsb25nIGdyZWVuX21hc2s7 CiAgICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICAgIFhQb2ludGVyIG9iZGF0YTsJCSAKICAg IHN0cnVjdCBmdW5jcyB7CQkgCgoJc3RydWN0IF9YSW1hZ2UgKigqY3JlYXRlX2ltYWdlKSgKCQlz dHJ1Y3QgX1hEaXNwbGF5KiAgLAoJCVZpc3VhbCoJCSAsCgkJdW5zaWduZWQgaW50CSAsCgkJaW50 CQkgLAoJCWludAkJICwKCQljaGFyKgkJICwKCQl1bnNpZ25lZCBpbnQJICwKCQl1bnNpZ25lZCBp bnQJICwKCQlpbnQJCSAsCgkJaW50CQkgKTsKCWludCAoKmRlc3Ryb3lfaW1hZ2UpICAgICAgICAo c3RydWN0IF9YSW1hZ2UgKik7Cgl1bnNpZ25lZCBsb25nICgqZ2V0X3BpeGVsKSAgKHN0cnVjdCBf WEltYWdlICosIGludCwgaW50KTsKCWludCAoKnB1dF9waXhlbCkgICAgICAgICAgICAoc3RydWN0 IF9YSW1hZ2UgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwoJc3RydWN0IF9YSW1hZ2UgKigq c3ViX2ltYWdlKShzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNp Z25lZCBpbnQpOwoJaW50ICgqYWRkX3BpeGVsKSAgICAgICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAq LCBsb25nKTsKCgoKCgoKCgoJfSBmOwp9IFhJbWFnZTsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgaW50IGJvcmRlcl93aWR0aDsK ICAgIFdpbmRvdyBzaWJsaW5nOwogICAgaW50IHN0YWNrX21vZGU7Cn0gWFdpbmRvd0NoYW5nZXM7 CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBwaXhlbDsKCXVuc2lnbmVkIHNo b3J0IHJlZCwgZ3JlZW4sIGJsdWU7CgljaGFyIGZsYWdzOyAgIAoJY2hhciBwYWQ7Cn0gWENvbG9y OwoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeDEsIHkxLCB4MiwgeTI7Cn0gWFNl Z21lbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4LCB5Owp9IFhQb2ludDsKICAgIAp0 eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgs IGhlaWdodDsKfSBYUmVjdGFuZ2xlOwogICAgCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgs IHk7CiAgICB1bnNpZ25lZCBzaG9ydCB3aWR0aCwgaGVpZ2h0OwogICAgc2hvcnQgYW5nbGUxLCBh bmdsZTI7Cn0gWEFyYzsKCgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGtleV9jbGlj a19wZXJjZW50OwogICAgICAgIGludCBiZWxsX3BlcmNlbnQ7CiAgICAgICAgaW50IGJlbGxfcGl0 Y2g7CiAgICAgICAgaW50IGJlbGxfZHVyYXRpb247CiAgICAgICAgaW50IGxlZDsKICAgICAgICBp bnQgbGVkX21vZGU7CiAgICAgICAgaW50IGtleTsKICAgICAgICBpbnQgYXV0b19yZXBlYXRfbW9k ZTsgICAgCn0gWEtleWJvYXJkQ29udHJvbDsKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp bnQga2V5X2NsaWNrX3BlcmNlbnQ7CglpbnQgYmVsbF9wZXJjZW50OwoJdW5zaWduZWQgaW50IGJl bGxfcGl0Y2gsIGJlbGxfZHVyYXRpb247Cgl1bnNpZ25lZCBsb25nIGxlZF9tYXNrOwoJaW50IGds b2JhbF9hdXRvX3JlcGVhdDsKCWNoYXIgYXV0b19yZXBlYXRzWzMyXTsKfSBYS2V5Ym9hcmRTdGF0 ZTsKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBUaW1lIHRpbWU7CglzaG9ydCB4LCB5Owp9 IFhUaW1lQ29vcmQ7CgogCgp0eXBlZGVmIHN0cnVjdCB7CiAJaW50IG1heF9rZXlwZXJtb2Q7CSAK IAlLZXlDb2RlICptb2RpZmllcm1hcDsJIAp9IFhNb2RpZmllcktleW1hcDsKCgogCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CgoKc3RydWN0IF9YUHJpdmF0ZTsJCSAKc3Ry dWN0IF9Ycm1IYXNoQnVja2V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgCgoKCnsKCVhFeHREYXRhICpl eHRfZGF0YTsJIAoJc3RydWN0IF9YUHJpdmF0ZSAqcHJpdmF0ZTE7CglpbnQgZmQ7CQkJIAoJaW50 IHByaXZhdGUyOwoJaW50IHByb3RvX21ham9yX3ZlcnNpb247IAoJaW50IHByb3RvX21pbm9yX3Zl cnNpb247IAoJY2hhciAqdmVuZG9yOwkJIAogICAgICAgIFhJRCBwcml2YXRlMzsKCVhJRCBwcml2 YXRlNDsKCVhJRCBwcml2YXRlNTsKCWludCBwcml2YXRlNjsKCVhJRCAoKnJlc291cmNlX2FsbG9j KSgJIAoKCQlzdHJ1Y3QgX1hEaXNwbGF5KgoKCSk7CglpbnQgYnl0ZV9vcmRlcjsJCSAKCWludCBi aXRtYXBfdW5pdDsJIAoJaW50IGJpdG1hcF9wYWQ7CQkgCglpbnQgYml0bWFwX2JpdF9vcmRlcjsJ IAoJaW50IG5mb3JtYXRzOwkJIAoJU2NyZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwkgCglpbnQg cHJpdmF0ZTg7CglpbnQgcmVsZWFzZTsJCSAKCXN0cnVjdCBfWFByaXZhdGUgKnByaXZhdGU5LCAq cHJpdmF0ZTEwOwoJaW50IHFsZW47CQkgCgl1bnNpZ25lZCBsb25nIGxhc3RfcmVxdWVzdF9yZWFk OyAgCgl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CSAKCVhQb2ludGVyIHByaXZhdGUxMTsKCVhQb2lu dGVyIHByaXZhdGUxMjsKCVhQb2ludGVyIHByaXZhdGUxMzsKCVhQb2ludGVyIHByaXZhdGUxNDsK CXVuc2lnbmVkIG1heF9yZXF1ZXN0X3NpemU7ICAKCXN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAq ZGI7CglpbnQgKCpwcml2YXRlMTUpKAoKCQlzdHJ1Y3QgX1hEaXNwbGF5KgoKCQkpOwoJY2hhciAq ZGlzcGxheV9uYW1lOwkgCglpbnQgZGVmYXVsdF9zY3JlZW47CSAKCWludCBuc2NyZWVuczsJCSAK CVNjcmVlbiAqc2NyZWVuczsJIAoJdW5zaWduZWQgbG9uZyBtb3Rpb25fYnVmZmVyOwkgCgl1bnNp Z25lZCBsb25nIHByaXZhdGUxNjsKCWludCBtaW5fa2V5Y29kZTsJIAoJaW50IG1heF9rZXljb2Rl OwkgCglYUG9pbnRlciBwcml2YXRlMTc7CglYUG9pbnRlciBwcml2YXRlMTg7CglpbnQgcHJpdmF0 ZTE5OwoJY2hhciAqeGRlZmF1bHRzOwkgCgkgCn0KCgoKKl9YUHJpdkRpc3BsYXk7CgoKCgoKIAoK CnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwkJIAoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAK CWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsJ ICAgICAgICAgCglXaW5kb3cgcm9vdDsJICAgICAgICAgCglXaW5kb3cgc3Vid2luZG93OwkgCglU aW1lIHRpbWU7CQkgCglpbnQgeCwgeTsJCSAKCWludCB4X3Jvb3QsIHlfcm9vdDsJIAoJdW5zaWdu ZWQgaW50IHN0YXRlOwkgCgl1bnNpZ25lZCBpbnQga2V5Y29kZTsJIAoJaW50ICBzYW1lX3NjcmVl bjsJIAp9IFhLZXlFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlw ZWRlZiBYS2V5RXZlbnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQg dHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURp c3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7 CSAgICAgICAgIAoJV2luZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7 CQkgCglpbnQgeF9yb290LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJdW5zaWdu ZWQgaW50IGJ1dHRvbjsJIAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhCdXR0b25FdmVudDsKdHlw ZWRlZiBYQnV0dG9uRXZlbnQgWEJ1dHRvblByZXNzZWRFdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZl bnQgWEJ1dHRvblJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAK CXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRp c3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAg IAoJV2luZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQg eF9yb290LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJY2hhciBpc19oaW50OwkJ IAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhNb3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZl bnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CQkgCgl1 bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNw bGF5OwkgCglXaW5kb3cgd2luZG93OwkgICAgICAgICAKCVdpbmRvdyByb290OwkgICAgICAgICAK CVdpbmRvdyBzdWJ3aW5kb3c7CSAKCVRpbWUgdGltZTsJCSAKCWludCB4LCB5OwkJIAoJaW50IHhf cm9vdCwgeV9yb290OwkgCglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7CgkgCgoKCglpbnQgIHNh bWVfc2NyZWVuOwkgCglpbnQgIGZvY3VzOwkJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkgCn0gWENy b3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2luZG93RXZlbnQ7CnR5 cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7 CglpbnQgdHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7 CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgbW9kZTsJCSAK CWludCBkZXRhaWw7CgkgCgoKCgp9IFhGb2N1c0NoYW5nZUV2ZW50Owp0eXBlZGVmIFhGb2N1c0No YW5nZUV2ZW50IFhGb2N1c0luRXZlbnQ7CnR5cGVkZWYgWEZvY3VzQ2hhbmdlRXZlbnQgWEZvY3Vz T3V0RXZlbnQ7CgogCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBz ZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93 IHdpbmRvdzsKCWNoYXIga2V5X3ZlY3RvclszMl07Cn0gWEtleW1hcEV2ZW50OwkKCnR5cGVkZWYg c3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9l dmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB4LCB5OwoJ aW50IHdpZHRoLCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCn0gWEV4cG9zZUV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCB4 LCB5OwoJaW50IHdpZHRoLCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCglpbnQgbWFqb3JfY29kZTsJ CSAKCWludCBtaW5vcl9jb2RlOwkJIAp9IFhHcmFwaGljc0V4cG9zZUV2ZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2 ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCBtYWpv cl9jb2RlOwkJIAoJaW50IG1pbm9yX2NvZGU7CQkgCn0gWE5vRXhwb3NlRXZlbnQ7Cgp0eXBlZGVm IHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRf ZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CglpbnQgc3RhdGU7 CQkgCn0gWFZpc2liaWxpdHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5z aWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxh eTsJIAoJV2luZG93IHBhcmVudDsJCSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgeCwgeTsJCSAK CWludCB3aWR0aCwgaGVpZ2h0OwkgCglpbnQgYm9yZGVyX3dpZHRoOwkgCglpbnQgIG92ZXJyaWRl X3JlZGlyZWN0OwkgCn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50 IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw bGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93Owp9IFhEZXN0cm95 V2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcg c2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRv dyBldmVudDsKCVdpbmRvdyB3aW5kb3c7CglpbnQgIGZyb21fY29uZmlndXJlOwp9IFhVbm1hcEV2 ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJ IAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7 CglXaW5kb3cgd2luZG93OwoJaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAp9IFhNYXBFdmVudDsK CnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWlu dCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBhcmVudDsKCVdp bmRvdyB3aW5kb3c7Cn0gWE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0 eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxh eSAqZGlzcGxheTsJIAoJV2luZG93IGV2ZW50OwoJV2luZG93IHdpbmRvdzsKCVdpbmRvdyBwYXJl bnQ7CglpbnQgeCwgeTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWFJlcGFyZW50RXZlbnQ7 Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglp bnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdp bmRvdyB3aW5kb3c7CglpbnQgeCwgeTsKCWludCB3aWR0aCwgaGVpZ2h0OwoJaW50IGJvcmRlcl93 aWR0aDsKCVdpbmRvdyBhYm92ZTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENvbmZpZ3Vy ZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlh bDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZl bnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7Cn0gWEdyYXZpdHlFdmVudDsKCnR5cGVkZWYg c3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9l dmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB3aWR0aCwg aGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlw ZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkg KmRpc3BsYXk7CSAKCVdpbmRvdyBwYXJlbnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7Cglp bnQgd2lkdGgsIGhlaWdodDsKCWludCBib3JkZXJfd2lkdGg7CglXaW5kb3cgYWJvdmU7CglpbnQg ZGV0YWlsOwkJIAoJdW5zaWduZWQgbG9uZyB2YWx1ZV9tYXNrOwp9IFhDb25maWd1cmVSZXF1ZXN0 RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFs OwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVu dDsKCVdpbmRvdyB3aW5kb3c7CglpbnQgcGxhY2U7CQkgCn0gWENpcmN1bGF0ZUV2ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBz ZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgcGFyZW50OwoJV2luZG93 IHdpbmRvdzsKCWludCBwbGFjZTsJCSAKfSBYQ2lyY3VsYXRlUmVxdWVzdEV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBhdG9t OwoJVGltZSB0aW1lOwoJaW50IHN0YXRlOwkJIAp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2 ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBzZWxlY3Rp b247CglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7 CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAK CURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBvd25lcjsKCVdpbmRvdyByZXF1ZXN0b3I7CglB dG9tIHNlbGVjdGlvbjsKCUF0b20gdGFyZ2V0OwoJQXRvbSBwcm9wZXJ0eTsKCVRpbWUgdGltZTsK fSBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1 bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNw bGF5OwkgCglXaW5kb3cgcmVxdWVzdG9yOwoJQXRvbSBzZWxlY3Rpb247CglBdG9tIHRhcmdldDsK CUF0b20gcHJvcGVydHk7CQkgCglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQ29sb3JtYXAg Y29sb3JtYXA7CSAKCglpbnQgIGNfbmV3OwkJIAoKCgoJaW50IHN0YXRlOwkJIAp9IFhDb2xvcm1h cEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlh bDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2lu ZG93OwoJQXRvbSBtZXNzYWdlX3R5cGU7CglpbnQgZm9ybWF0OwoJdW5pb24gewoJCWNoYXIgYlsy MF07CgkJc2hvcnQgc1sxMF07CgkJbG9uZyBsWzVdOwoJCX0gZGF0YTsKfSBYQ2xpZW50TWVzc2Fn ZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlh bDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2lu ZG93OwkJIAoJaW50IHJlcXVlc3Q7CQkgCgoJaW50IGZpcnN0X2tleWNvZGU7CSAKCWludCBjb3Vu dDsJCSAKfSBYTWFwcGluZ0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CglEaXNw bGF5ICpkaXNwbGF5OwkgCglYSUQgcmVzb3VyY2VpZDsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFs OwkgCgl1bnNpZ25lZCBjaGFyIGVycm9yX2NvZGU7CSAKCXVuc2lnbmVkIGNoYXIgcmVxdWVzdF9j b2RlOwkgCgl1bnNpZ25lZCBjaGFyIG1pbm9yX2NvZGU7CSAKfSBYRXJyb3JFdmVudDsKCnR5cGVk ZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2Vu ZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsgCglXaW5kb3cgd2luZG93OwkgCn0gWEFueUV2 ZW50OwoKIAoKCgp0eXBlZGVmIHVuaW9uIF9YRXZlbnQgewogICAgICAgIGludCB0eXBlOwkJIAoJ WEFueUV2ZW50IHhhbnk7CglYS2V5RXZlbnQgeGtleTsKCVhCdXR0b25FdmVudCB4YnV0dG9uOwoJ WE1vdGlvbkV2ZW50IHhtb3Rpb247CglYQ3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CglYRm9jdXND aGFuZ2VFdmVudCB4Zm9jdXM7CglYRXhwb3NlRXZlbnQgeGV4cG9zZTsKCVhHcmFwaGljc0V4cG9z ZUV2ZW50IHhncmFwaGljc2V4cG9zZTsKCVhOb0V4cG9zZUV2ZW50IHhub2V4cG9zZTsKCVhWaXNp YmlsaXR5RXZlbnQgeHZpc2liaWxpdHk7CglYQ3JlYXRlV2luZG93RXZlbnQgeGNyZWF0ZXdpbmRv dzsKCVhEZXN0cm95V2luZG93RXZlbnQgeGRlc3Ryb3l3aW5kb3c7CglYVW5tYXBFdmVudCB4dW5t YXA7CglYTWFwRXZlbnQgeG1hcDsKCVhNYXBSZXF1ZXN0RXZlbnQgeG1hcHJlcXVlc3Q7CglYUmVw YXJlbnRFdmVudCB4cmVwYXJlbnQ7CglYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKCVhHcmF2 aXR5RXZlbnQgeGdyYXZpdHk7CglYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0OwoJ WENvbmZpZ3VyZVJlcXVlc3RFdmVudCB4Y29uZmlndXJlcmVxdWVzdDsKCVhDaXJjdWxhdGVFdmVu dCB4Y2lyY3VsYXRlOwoJWENpcmN1bGF0ZVJlcXVlc3RFdmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsK CVhQcm9wZXJ0eUV2ZW50IHhwcm9wZXJ0eTsKCVhTZWxlY3Rpb25DbGVhckV2ZW50IHhzZWxlY3Rp b25jbGVhcjsKCVhTZWxlY3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CglYU2Vs ZWN0aW9uRXZlbnQgeHNlbGVjdGlvbjsKCVhDb2xvcm1hcEV2ZW50IHhjb2xvcm1hcDsKCVhDbGll bnRNZXNzYWdlRXZlbnQgeGNsaWVudDsKCVhNYXBwaW5nRXZlbnQgeG1hcHBpbmc7CglYRXJyb3JF dmVudCB4ZXJyb3I7CglYS2V5bWFwRXZlbnQgeGtleW1hcDsKCWxvbmcgcGFkWzI0XTsKfSBYRXZl bnQ7CgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQJbGJlYXJpbmc7CSAKICAgIHNo b3J0CXJiZWFyaW5nOwkgCiAgICBzaG9ydAl3aWR0aDsJCSAKICAgIHNob3J0CWFzY2VudDsJCSAK ICAgIHNob3J0CWRlc2NlbnQ7CSAKICAgIHVuc2lnbmVkIHNob3J0IGF0dHJpYnV0ZXM7CSAKfSBY Q2hhclN0cnVjdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBuYW1lOwogICAgdW5z aWduZWQgbG9uZyBjYXJkMzI7Cn0gWEZvbnRQcm9wOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWEV4 dERhdGEJKmV4dF9kYXRhOwkgCiAgICBGb250ICAgICAgICBmaWQ7ICAgICAgICAgICAgIAogICAg dW5zaWduZWQJZGlyZWN0aW9uOwkgCiAgICB1bnNpZ25lZAltaW5fY2hhcl9vcl9ieXRlMjsgCiAg ICB1bnNpZ25lZAltYXhfY2hhcl9vcl9ieXRlMjsgCiAgICB1bnNpZ25lZAltaW5fYnl0ZTE7CSAK ICAgIHVuc2lnbmVkCW1heF9ieXRlMTsJIAogICAgaW50IAlhbGxfY2hhcnNfZXhpc3Q7IAogICAg dW5zaWduZWQJZGVmYXVsdF9jaGFyOwkgCiAgICBpbnQgICAgICAgICBuX3Byb3BlcnRpZXM7ICAg IAogICAgWEZvbnRQcm9wCSpwcm9wZXJ0aWVzOwkgCiAgICBYQ2hhclN0cnVjdAltaW5fYm91bmRz OwkgCiAgICBYQ2hhclN0cnVjdAltYXhfYm91bmRzOwkgCiAgICBYQ2hhclN0cnVjdAkqcGVyX2No YXI7CSAKICAgIGludAkJYXNjZW50OwkJIAogICAgaW50CQlkZXNjZW50OwkgCn0gWEZvbnRTdHJ1 Y3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CQkgCiAgICBpbnQgbmNo YXJzOwkJCSAKICAgIGludCBkZWx0YTsJCQkgCiAgICBGb250IGZvbnQ7CQkJIAp9IFhUZXh0SXRl bTsKCnR5cGVkZWYgc3RydWN0IHsJCSAKICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTE7CiAgICB1bnNp Z25lZCBjaGFyIGJ5dGUyOwp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYQ2hhcjJi ICpjaGFyczsJCSAKICAgIGludCBuY2hhcnM7CQkJIAogICAgaW50IGRlbHRhOwkJCSAKICAgIEZv bnQgZm9udDsJCQkgCn0gWFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRp c3BsYXk7CgkJR0MgZ2M7CgkJVmlzdWFsICp2aXN1YWw7CgkJU2NyZWVuICpzY3JlZW47CgkJU2Ny ZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwoJCVhGb250U3RydWN0ICpmb250OyB9IFhFRGF0YU9i amVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhSZWN0YW5nbGUgICAgICBtYXhfaW5rX2V4dGVu dDsKICAgIFhSZWN0YW5nbGUgICAgICBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRl bnRzOwoKIAoKCgp0eXBlZGVmIHN0cnVjdCBfWE9NICpYT007CnR5cGVkZWYgc3RydWN0IF9YT0Mg KlhPQywgKlhGb250U2V0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAgICAgICAgICAgKmNo YXJzOwogICAgaW50ICAgICAgICAgICAgIG5jaGFyczsKICAgIGludCAgICAgICAgICAgICBkZWx0 YTsKICAgIFhGb250U2V0ICAgICAgICBmb250X3NldDsKfSBYbWJUZXh0SXRlbTsKCnR5cGVkZWYg c3RydWN0IHsKICAgIHdjaGFyX3QgICAgICAgICpjaGFyczsKICAgIGludCAgICAgICAgICAgICBu Y2hhcnM7CiAgICBpbnQgICAgICAgICAgICAgZGVsdGE7CiAgICBYRm9udFNldCAgICAgICAgZm9u dF9zZXQ7Cn0gWHdjVGV4dEl0ZW07CgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGlu dCBjaGFyc2V0X2NvdW50OwogICAgY2hhciAqKmNoYXJzZXRfbGlzdDsKfSBYT01DaGFyU2V0TGlz dDsKCnR5cGVkZWYgZW51bSB7CiAgICBYT01PcmllbnRhdGlvbl9MVFJfVFRCLAogICAgWE9NT3Jp ZW50YXRpb25fUlRMX1RUQiwKICAgIFhPTU9yaWVudGF0aW9uX1RUQl9MVFIsCiAgICBYT01Pcmll bnRhdGlvbl9UVEJfUlRMLAogICAgWE9NT3JpZW50YXRpb25fQ29udGV4dAp9IFhPcmllbnRhdGlv bjsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBudW1fb3JpZW50YXRpb247CiAgICBYT3JpZW50 YXRpb24gKm9yaWVudGF0aW9uOwkgCn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBpbnQgbnVtX2ZvbnQ7CiAgICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xpc3Q7CiAg ICBjaGFyICoqZm9udF9uYW1lX2xpc3Q7Cn0gWE9NRm9udEluZm87Cgp0eXBlZGVmIHN0cnVjdCBf WElNICpYSU07CnR5cGVkZWYgc3RydWN0IF9YSUMgKlhJQzsKCnR5cGVkZWYgdm9pZCAoKlhJTVBy b2MpKAoKICAgIFhJTSwKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIKCik7Cgp0eXBlZGVmIGlu dCAgKCpYSUNQcm9jKSgKCiAgICBYSUMsCiAgICBYUG9pbnRlciwKICAgIFhQb2ludGVyCgopOwoK dHlwZWRlZiB2b2lkICgqWElEUHJvYykoCgogICAgRGlzcGxheSosCiAgICBYUG9pbnRlciwKICAg IFhQb2ludGVyCgopOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVN0eWxlOwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfc3R5bGVzOwogICAgWElNU3R5bGUgKnN1 cHBvcnRlZF9zdHlsZXM7Cn0gWElNU3R5bGVzOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdm9pZCAqWFZhTmVzdGVk TGlzdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQb2ludGVyIGNsaWVudF9kYXRhOwogICAg WElNUHJvYyBjYWxsYmFjazsKfSBYSU1DYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQ b2ludGVyIGNsaWVudF9kYXRhOwogICAgWElDUHJvYyBjYWxsYmFjazsKfSBYSUNDYWxsYmFjazsK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1GZWVkYmFjazsKCgoKCgoKCgoKCgp0eXBlZGVmIHN0 cnVjdCBfWElNVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgICBYSU1GZWVkYmFj ayAqZmVlZGJhY2s7CiAgICBpbnQgIGVuY29kaW5nX2lzX3djaGFyOyAKICAgIHVuaW9uIHsKCWNo YXIgKm11bHRpX2J5dGU7Cgl3Y2hhcl90ICp3aWRlX2NoYXI7CiAgICB9IHN0cmluZzsgCn0gWElN VGV4dDsKCnR5cGVkZWYJdW5zaWduZWQgbG9uZwkgWElNUHJlZWRpdFN0YXRlOwoKCgoKCnR5cGVk ZWYJc3RydWN0CV9YSU1QcmVlZGl0U3RhdGVOb3RpZnlDYWxsYmFja1N0cnVjdCB7CiAgICBYSU1Q cmVlZGl0U3RhdGUgc3RhdGU7Cn0gWElNUHJlZWRpdFN0YXRlTm90aWZ5Q2FsbGJhY2tTdHJ1Y3Q7 Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTVJlc2V0U3RhdGU7CgoKCgp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgWElNU3RyaW5nQ29udmVyc2lvbkZlZWRiYWNrOwoKCgoKCgoKCnR5cGVkZWYgc3Ry dWN0IF9YSU1TdHJpbmdDb252ZXJzaW9uVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7 CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uRmVlZGJhY2sgKmZlZWRiYWNrOwogICAgaW50ICBlbmNv ZGluZ19pc193Y2hhcjsgCiAgICB1bmlvbiB7CgljaGFyICptYnM7Cgl3Y2hhcl90ICp3Y3M7CiAg ICB9IHN0cmluZzsgCn0gWElNU3RyaW5nQ29udmVyc2lvblRleHQ7Cgp0eXBlZGVmCXVuc2lnbmVk IHNob3J0CVhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbjsKCnR5cGVkZWYJdW5zaWduZWQgc2hv cnQJWElNU3RyaW5nQ29udmVyc2lvblR5cGU7CgoKCgoKCnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJ WElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbjsKCgoKIAoKCgoKCgp0eXBlZGVmIGVudW0gewog ICAgWElNRm9yd2FyZENoYXIsIFhJTUJhY2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBY SU1CYWNrd2FyZFdvcmQsCiAgICBYSU1DYXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0 TGluZSwgWElNUHJldmlvdXNMaW5lLAogICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLCAKICAg IFhJTUFic29sdXRlUG9zaXRpb24sCiAgICBYSU1Eb250Q2hhbmdlCn0gWElNQ2FyZXREaXJlY3Rp b247Cgp0eXBlZGVmIHN0cnVjdCBfWElNU3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0IHsK ICAgIFhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbiBwb3NpdGlvbjsKICAgIFhJTUNhcmV0RGly ZWN0aW9uIGRpcmVjdGlvbjsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb24gb3BlcmF0 aW9uOwogICAgdW5zaWduZWQgc2hvcnQgZmFjdG9yOwogICAgWElNU3RyaW5nQ29udmVyc2lvblRl eHQgKnRleHQ7Cn0gWElNU3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBz dHJ1Y3QgX1hJTVByZWVkaXREcmF3Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IGNhcmV0OwkJIAog ICAgaW50IGNoZ19maXJzdDsJIAogICAgaW50IGNoZ19sZW5ndGg7CSAKICAgIFhJTVRleHQgKnRl eHQ7Cn0gWElNUHJlZWRpdERyYXdDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBY SU1Jc0ludmlzaWJsZSwJICAKICAgIFhJTUlzUHJpbWFyeSwJIAogICAgWElNSXNTZWNvbmRhcnkJ IAp9IFhJTUNhcmV0U3R5bGU7Cgp0eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJh Y2tTdHJ1Y3QgewogICAgaW50IHBvc2l0aW9uOwkJICAKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRp cmVjdGlvbjsgIAogICAgWElNQ2FyZXRTdHlsZSBzdHlsZTsJICAKfSBYSU1QcmVlZGl0Q2FyZXRD YWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJp dG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRhVHlwZTsKCQp0eXBlZGVmIHN0cnVjdCBfWElNU3RhdHVz RHJhd0NhbGxiYWNrU3RydWN0IHsKICAgIFhJTVN0YXR1c0RhdGFUeXBlIHR5cGU7CiAgICB1bmlv biB7CglYSU1UZXh0ICp0ZXh0OwoJUGl4bWFwICBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3Rh dHVzRHJhd0NhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIg ewogICAgS2V5U3ltCSBrZXlzeW07CiAgICBpbnQJCSBtb2RpZmllcjsKICAgIGludAkJIG1vZGlm aWVyX21hc2s7Cn0gWElNSG90S2V5VHJpZ2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlU cmlnZ2VycyB7CiAgICBpbnQJCQkgbnVtX2hvdF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyCSpr ZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTUhvdEtl eVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFs dWVzOwogICAgY2hhciAqKnN1cHBvcnRlZF92YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCmV4dGVy biAiQyIgeyAKCgoKCgpleHRlcm4gaW50IF9YZGVidWc7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhM b2FkUXVlcnlGb250KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7Cgpl eHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVyeUZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJ CQkgCgopOwoKCmV4dGVybiBYVGltZUNvb3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgVGltZQkJICwKICAgIFRpbWUJCSAsCiAgICBpbnQq CQkgCgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFwRW50cnko CgogICAgWE1vZGlmaWVyS2V5bWFwKgkgLAoKICAgIHVuc2lnbmVkIGludAkgLAoKCgogICAgaW50 CQkJIAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAJKlhHZXRNb2RpZmllck1hcHBpbmcoCgog ICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gWE1vZGlmaWVyS2V5bWFwCSpYSW5zZXJ0TW9kaWZp ZXJtYXBFbnRyeSgKCiAgICBYTW9kaWZpZXJLZXltYXAqCSAsCgogICAgdW5zaWduZWQgaW50CSAs CgoKCiAgICBpbnQJCQkgICAgIAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2Rp Zmllcm1hcCgKCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIFhJbWFnZSAqWENyZWF0ZUltYWdlKAoK ICAgIERpc3BsYXkqCQkgLAogICAgVmlzdWFsKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGlu dCAgWEluaXRJbWFnZSgKCiAgICBYSW1hZ2UqCQkgCgopOwpleHRlcm4gWEltYWdlICpYR2V0SW1h Z2UoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIGludAkJCSAsCiAgICBp bnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2ln bmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgK CiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg bG9uZwkgLAogICAgaW50CQkJICwKICAgIFhJbWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50 CQkJIAoKKTsKCiAKCgpleHRlcm4gRGlzcGxheSAqWE9wZW5EaXNwbGF5KAoKICAgIGNvbnN0ICBj aGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0 ZXJuIGNoYXIgKlhGZXRjaEJ5dGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsK ZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAs CiAgICBpbnQJCQkgCgopOwpleHRlcm4gY2hhciAqWEdldEF0b21OYW1lKAoKICAgIERpc3BsYXkq CQkgLAogICAgQXRvbQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldEF0b21OYW1lcygKCiAgICBEaXNw bGF5KgkJICwKICAgIEF0b20qCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIqKgkJIAoKKTsKZXh0 ZXJuIGNoYXIgKlhHZXREZWZhdWx0KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIq CSAsCiAgICBjb25zdCAgY2hhcioJIAkJICAKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUo CgogICAgY29uc3QgIGNoYXIqCSAKCik7CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgog ICAgS2V5U3ltCQkgCgopOwoKZXh0ZXJuIGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5 KgkJICwKICAgIGludCAJCSAKCikpKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gaW50ICgq WFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQgKCopICgKCgkgICAg IERpc3BsYXkqCSAKCiAgICAgICAgICAgICkJCSAKCikpKAoKICAgIERpc3BsYXkqCQkgCgopOwpl eHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGNvbnN0ICBjaGFy KgkgLAogICAgaW50IAkJIAkJIAoKKTsKZXh0ZXJuIGludCAgWEludGVybkF0b21zKAoKICAgIERp c3BsYXkqCQkgLAogICAgY2hhcioqCQkgLAogICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBB dG9tKgkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIERp c3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAKCik7CmV4dGVybiBDb2xvcm1hcCBYQ3JlYXRlQ29s b3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBWaXN1YWwqCQkgLAog ICAgaW50CQkJIAkJCSAKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZVBpeG1hcEN1cnNvcigKCiAg ICBEaXNwbGF5KgkJICwKICAgIFBpeG1hcAkJICwKICAgIFBpeG1hcAkJICwKICAgIFhDb2xvcioJ CSAsCiAgICBYQ29sb3IqCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJ IAkJCSAgIAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhDdXJzb3IoCgogICAgRGlzcGxh eSoJCSAsCiAgICBGb250CQkgLAogICAgRm9udAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg dW5zaWduZWQgaW50CSAsCiAgICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoKKTsKZXh0ZXJu IEN1cnNvciBYQ3JlYXRlRm9udEN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVk IGludAkgCgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBj b25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIEdDIFhDcmVhdGVHQygKCiAgICBEaXNwbGF5KgkJICwK ICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWEdDVmFsdWVzKgkJIAoK KTsKZXh0ZXJuIEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwkJCSAKCik7CmV4dGVy biB2b2lkIFhGbHVzaEdDKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgCgopOwpleHRlcm4g UGl4bWFwIFhDcmVhdGVQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK ICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJ IAkJICAgICAgICAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZUJpdG1hcEZyb21EYXRhKAoKICAg IERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVu c2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0 ZVBpeG1hcEZyb21CaXRtYXBEYXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAs CiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBpbnQJ IAoKKTsKZXh0ZXJuIFdpbmRvdyBYQ3JlYXRlU2ltcGxlV2luZG93KAoKICAgIERpc3BsYXkqCQkg LAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBp bnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l ZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CmV4dGVybiBXaW5kb3cgWEdldFNlbGVj dGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0ZXJuIFdpbmRv dyBYQ3JlYXRlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50 CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkg LAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICBWaXN1YWwqCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWFNldFdpbmRvd0F0dHJpYnV0 ZXMqCSAKCik7IApleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29sb3JtYXBzKAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIg KipYTGlzdEZvbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBp bnQJCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRzV2l0aEluZm8o CgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBp bnQqCQkgLAogICAgWEZvbnRTdHJ1Y3QqKgkgCgopOwpleHRlcm4gY2hhciAqKlhHZXRGb250UGF0 aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAKCik7CmV4dGVybiBjaGFyICoqWExpc3RF eHRlbnNpb25zKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIEF0b20g KlhMaXN0UHJvcGVydGllcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGlu dCoJCSAKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhMaXN0SG9zdHMoCgogICAgRGlzcGxheSoJ CSAsCiAgICBpbnQqCQkgLAogICAgaW50ICoJCSAKCik7CmV4dGVybiBLZXlTeW0gWEtleWNvZGVU b0tleXN5bSgKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGlu dAkJCSAKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5RXZlbnQqCQkg LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFwcGluZygKCiAg ICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGludAkJCSAsCiAgICBp bnQqCQkgCgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBjb25zdCAgY2hh cioJIAoKKTsKZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCQkgCgop OwpleHRlcm4gbG9uZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgkJIAoK KTsKZXh0ZXJuIGNoYXIgKlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlzcGxheSoJCSAK Cik7CmV4dGVybiBjaGFyICpYU2NyZWVuUmVzb3VyY2VTdHJpbmcoCgoJU2NyZWVuKgkJIAoKKTsK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoKICAgIERpc3Bs YXkqCQkgCgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgKCiAgICBWaXN1 YWwqCQkgCgopOwoKIAoKZXh0ZXJuIGludCAgWEluaXRUaHJlYWRzKAoKICAgIHZvaWQKCik7Cgpl eHRlcm4gdm9pZCBYTG9ja0Rpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gdm9p ZCBYVW5sb2NrRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCiAKCmV4dGVybiBYRXh0Q29k ZXMgKlhJbml0RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAK Cik7CgpleHRlcm4gWEV4dENvZGVzICpYQWRkRXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgCgop OwpleHRlcm4gWEV4dERhdGEgKlhGaW5kT25FeHRlbnNpb25MaXN0KAoKICAgIFhFeHREYXRhKioJ CSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKipYRUhlYWRPZkV4dGVuc2lvbkxp c3QoCgogICAgWEVEYXRhT2JqZWN0CSAKCik7CgogCmV4dGVybiBXaW5kb3cgWFJvb3RXaW5kb3co CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gV2luZG93IFhEZWZhdWx0 Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0ZXJuIFdpbmRvdyBYUm9vdFdpbmRv d09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4dGVybiBWaXN1YWwgKlhEZWZhdWx0Vmlz dWFsKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFZpc3VhbCAqWERl ZmF1bHRWaXN1YWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gR0MgWERlZmF1 bHRHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBHQyBYRGVmYXVs dEdDT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEJs YWNrUGl4ZWwoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gdW5zaWdu ZWQgbG9uZyBYV2hpdGVQaXhlbCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4 dGVybiB1bnNpZ25lZCBsb25nIFhBbGxQbGFuZXMoCgogICAgdm9pZAoKKTsKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgWEJsYWNrUGl4ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4g dW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbE9mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4 dGVybiB1bnNpZ25lZCBsb25nIFhOZXh0UmVxdWVzdCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93blJlcXVlc3RQcm9jZXNzZWQoCgogICAgRGlzcGxh eSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2VydmVyVmVuZG9yKAoKICAgIERpc3BsYXkqCQkgCgop OwpleHRlcm4gY2hhciAqWERpc3BsYXlTdHJpbmcoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVy biBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJ IAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXBPZlNjcmVlbigKCiAgICBTY3Jl ZW4qCQkgCgopOwpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZlNjcmVlbigKCiAgICBTY3JlZW4q CQkgCgopOwpleHRlcm4gU2NyZWVuICpYU2NyZWVuT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkqCQkg LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFNjcmVlbiAqWERlZmF1bHRTY3JlZW5PZkRpc3BsYXko CgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBsb25nIFhFdmVudE1hc2tPZlNjcmVlbigKCiAg ICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYU2NyZWVuTnVtYmVyT2ZTY3JlZW4oCgogICAg U2NyZWVuKgkJIAoKKTsKCnR5cGVkZWYgaW50ICgqWEVycm9ySGFuZGxlcikgKAkgICAgIAoKICAg IERpc3BsYXkqCQkgLAogICAgWEVycm9yRXZlbnQqCSAKCik7CgpleHRlcm4gWEVycm9ySGFuZGxl ciBYU2V0RXJyb3JIYW5kbGVyICgKCiAgICBYRXJyb3JIYW5kbGVyCSAKCik7CgoKdHlwZWRlZiBp bnQgKCpYSU9FcnJvckhhbmRsZXIpICggICAgIAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJu IFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoKICAgIFhJT0Vycm9ySGFuZGxl cgkgCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0VmFsdWVzICpYTGlzdFBpeG1hcEZvcm1hdHMo CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICpYTGlzdERlcHRo cygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgCgopOwoKIAogCmV4 dGVybiBpbnQgIFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu ZG93CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgWFdpbmRvd0NoYW5n ZXMqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKioJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50 ICBYU2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBB dG9tKgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBpbnQgIFhJY29uaWZ5V2luZG93KAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAg WFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50 CQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldENvbW1hbmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBX aW5kb3cJCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGludCAgWEdl dFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg V2luZG93KioJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICBYU2V0V01Db2xvcm1hcFdp bmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgLAog ICAgaW50CQkJIAoKKTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAgIGNoYXIqKgkJ IAoKKTsKZXh0ZXJuIGludCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KgkJICwK ICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJIAoKKTsKCiAKCmV4dGVybiBpbnQgWEFjdGl2YXRl U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhBZGRIb3N0KAoK ICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RBZGRyZXNzKgkgCgopOwoKZXh0ZXJuIGludCBYQWRk SG9zdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3MqCSAsCiAgICBpbnQJCQkg ICAgIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvRXh0ZW5zaW9uTGlzdCgKCiAgICBzdHJ1Y3QgX1hF eHREYXRhKioJICwKICAgIFhFeHREYXRhKgkJIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvU2F2ZVNl dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgIFhBbGxv Y0NvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkg CgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JDZWxscygKCiAgICBEaXNwbGF5KgkJICwKICAg IENvbG9ybWFwCQkgLAogICAgaW50IAkgICAgICAgICAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgaW50 IAkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JQbGFuZXMoCgogICAgRGlzcGxheSoJCSAs CiAgICBDb2xvcm1hcAkJICwKICAgIGludCAJCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2ln bmVkIGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgbG9uZyoJIAoK KTsKCmV4dGVybiBpbnQgIFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBD b2xvcm1hcAkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgWENvbG9yKgkJICwKICAgIFhDb2xv cioJCSAKCik7CgpleHRlcm4gaW50IFhBbGxvd0V2ZW50cygKCiAgICBEaXNwbGF5KgkJICwKICAg IGludAkJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9mZigKCiAg ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEF1dG9SZXBlYXRPbigKCiAgICBEaXNwbGF5 KgkJIAoKKTsKCmV4dGVybiBpbnQgWEJlbGwoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIoCgogICAgRGlzcGxheSoJCSAKCik7Cgpl eHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhC aXRtYXBVbml0KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ2VsbHNPZlNjcmVl bigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0aXZlUG9pbnRlckdy YWIoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIEN1cnNvcgkJICwK ICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAgICBEaXNwbGF5KgkJICwK ICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJCSAKCik7Cgpl eHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICB1 bnNpZ25lZCBsb25nCSAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgkgCgopOwoKZXh0ZXJuIGludCBY Q2hhbmdlS2V5Ym9hcmRNYXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAg IGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENo YW5nZVBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJICwKICAgIGlu dCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4g aW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAg IEF0b20JCSAsCiAgICBBdG9tCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25z dCAgdW5zaWduZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VT YXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsK CmV4dGVybiBpbnQgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYU2V0V2luZG93QXR0cmlidXRl cyogIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAg ICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAgICBEaXNwbGF5KgkJCSAsCiAgICAg ICAgICAgICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAgICBYUG9pbnRlcgkJCSAKCiAgICAg ICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gaW50ICBYQ2hlY2tNYXNr RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAgWEV2ZW50KgkJIAoKKTsK CmV4dGVybiBpbnQgIFhDaGVja1R5cGVkRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJ CQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVkV2luZG93RXZl bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkgLAogICAgWEV2 ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1dpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkq CQkgLAogICAgV2luZG93CQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRl cm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NEb3du KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2lyY3Vs YXRlU3Vid2luZG93c1VwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0 ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGlu dAkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWENsZWFyV2luZG93KAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNwbGF5KAoKICAg IERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBYV2luZG93Q2hh bmdlcyoJIAkJIAoKKTsKCmV4dGVybiBpbnQgWENvbm5lY3Rpb25OdW1iZXIoCgogICAgRGlzcGxh eSoJCSAKCik7CgpleHRlcm4gaW50IFhDb252ZXJ0U2VsZWN0aW9uKAoKICAgIERpc3BsYXkqCQkg LAogICAgQXRvbQkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbQkJICwKICAgIFdpbmRvdwkJICwK ICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDb3B5QXJlYSgKCiAgICBEaXNwbGF5KgkJICwK ICAgIERyYXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkg LAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygKCiAgICBEaXNw bGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIEdDCQkJIAoKKTsK CmV4dGVybiBpbnQgWENvcHlQbGFuZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg LAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK ICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAg aW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWERlZmF1bHREZXB0 aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEZWZhdWx0 RGVwdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYRGVmYXVsdFNj cmVlbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWERlZmluZUN1cnNvcigKCiAg ICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBp bnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg QXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lXaW5kb3coCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93cygKCiAgICBE aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWERvZXNCYWNraW5nU3Rv cmUoCgogICAgU2NyZWVuKgkJICAgICAKCik7CgpleHRlcm4gaW50ICBYRG9lc1NhdmVVbmRlcnMo CgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc2FibGVBY2Nlc3NDb250cm9sKAoK ICAgIERpc3BsYXkqCQkgCgopOwoKCmV4dGVybiBpbnQgWERpc3BsYXlDZWxscygKCiAgICBEaXNw bGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVpZ2h0KAoKICAg IERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlIZWlnaHRN TSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5 S2V5Y29kZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsK CmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50 CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3BsYXkqCQkgLAog ICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxheSoJCSAsCiAg ICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAg dW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJ CQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3 YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhBcmMqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWERyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg LAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJ ICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcxNigKCiAgICBE aXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAg IGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4g aW50IFhEcmF3TGluZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJ CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl CQkgLAogICAgR0MJCQkgLAogICAgWFBvaW50KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBp bnQgWERyYXdQb2ludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdD CQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK ICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAs CiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGVzKAoKICAg IERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBYUmVjdGFuZ2xl KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMoCgogICAgRGlz cGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhTZWdtZW50KgkJICwK ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqCQkg LAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdTdHJp bmcxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAK Cik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYVGV4dEl0ZW0q CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgogICAgRGlzcGxh eSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJ CQkgLAogICAgWFRleHRJdGVtMTYqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRW5h YmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEV2ZW50 c1F1ZXVlZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50ICBY RmV0Y2hOYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY2hhcioqCQkg CgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBp bnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7Cgpl eHRlcm4gaW50IFhGaWxsQXJjcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAog ICAgR0MJCQkgLAogICAgWEFyYyoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmls bFBvbHlnb24oCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwK ICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVk IGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xl cygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWFJl Y3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmx1c2goCgogICAgRGlz cGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhGb3JjZVNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkq CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWUoCgogICAgdm9pZCoJCSAKCik7 CgpleHRlcm4gaW50IFhGcmVlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1h cAkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBD b2xvcm1hcAkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWdu ZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwK ICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0KAoKICAgIGNo YXIqKgkJICAgICAKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udCgKCiAgICBEaXNwbGF5KgkJICwK ICAgIFhGb250U3RydWN0KgkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZvKAoKICAgIGNo YXIqKgkJICwKICAgIFhGb250U3RydWN0KgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg WEZyZWVGb250TmFtZXMoCgogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRQ YXRoKAoKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAgICBEaXNwbGF5 KgkJICwKICAgIEdDCQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVNb2RpZmllcm1hcCgKCiAgICBY TW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoKICAgIERpc3Bs YXkqCQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYR2VvbWV0cnkoCgogICAgRGlz cGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hh cioJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l ZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJ CSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldEVycm9yRGF0 YWJhc2VUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioJCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50 CQkJICwKICAgIGNoYXIqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRGb250 UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBBdG9tCQkgLAogICAgdW5zaWduZWQg bG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRHQ1ZhbHVlcygKCiAgICBEaXNwbGF5KgkJICwK ICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJCSAKCik7Cgpl eHRlcm4gaW50ICBYR2V0R2VvbWV0cnkoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJ ICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVk IGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVu c2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRJY29uTmFtZSgKCiAgICBEaXNwbGF5 KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldElu cHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cqCQkgLAogICAgaW50KgkJIAoK KTsKCmV4dGVybiBpbnQgWEdldEtleWJvYXJkQ29udHJvbCgKCiAgICBEaXNwbGF5KgkJICwKICAg IFhLZXlib2FyZFN0YXRlKgkgCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNvbnRyb2woCgog ICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7 CgpleHRlcm4gaW50IFhHZXRQb2ludGVyTWFwcGluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIHVu c2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0U2NyZWVuU2F2 ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJ CSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFRyYW5zaWVudEZvckhpbnQoCgog ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgCgopOwoKZXh0ZXJu IGludCBYR2V0V2luZG93UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs CiAgICBBdG9tCQkgLAogICAgbG9uZwkJICwKICAgIGxvbmcJCSAsCiAgICBpbnQgCQkgLAogICAg QXRvbQkJICwKICAgIEF0b20qCQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAs CiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgY2hhcioqCSAKCik7CgpleHRlcm4g aW50ICBYR2V0V2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJ ICwKICAgIFhXaW5kb3dBdHRyaWJ1dGVzKgkgCgopOwoKZXh0ZXJuIGludCBYR3JhYkJ1dHRvbigK CiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAs CiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJ CQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVy biBpbnQgWEdyYWJLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWdu ZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBU aW1lCQkgCgopOwoKZXh0ZXJuIGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkg LAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJICwKICAgIFRpbWUJCSAK Cik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJu IGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBY SGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWElmRXZlbnQo CgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAg ICBEaXNwbGF5KgkJCSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAg ICBYUG9pbnRlcgkJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7Cgpl eHRlcm4gaW50IFhJbWFnZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBp bnQgWEluc3RhbGxDb2xvcm1hcCgKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgCgop OwoKZXh0ZXJuIEtleUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5KgkJICwKICAg IEtleVN5bQkJIAoKKTsKCmV4dGVybiBpbnQgWEtpbGxDbGllbnQoCgogICAgRGlzcGxheSoJCSAs CiAgICBYSUQJCQkgCgopOwoKZXh0ZXJuIGludCAgWExvb2t1cENvbG9yKAoKICAgIERpc3BsYXkq CQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIFhDb2xvcioJCSAs CiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCBYTG93ZXJXaW5kb3coCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhNYXBSYWlzZWQoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhNYXBTdWJ3aW5kb3dzKAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYTWFwV2luZG93 KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYTWFza0V2 ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAKCik7Cgpl eHRlcm4gaW50IFhNYXhDbWFwc09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4g aW50IFhNaW5DbWFwc09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhN b3ZlUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50 CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkg CgopOwoKZXh0ZXJuIGludCBYTW92ZVdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYTmV4dEV2ZW50 KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWE5vT3Ao CgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50ICBYUGFyc2VDb2xvcigKCiAgICBEaXNw bGF5KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYQ29sb3Iq CQkgCgopOwoKZXh0ZXJuIGludCBYUGFyc2VHZW9tZXRyeSgKCiAgICBjb25zdCAgY2hhcioJICwK ICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWdu ZWQgaW50KgkgCgopOwoKZXh0ZXJuIGludCBYUGVla0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAog ICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFBlZWtJZkV2ZW50KAoKICAgIERpc3BsYXkq CQkgLAogICAgWEV2ZW50KgkJICwKICAgIGludCAgKCopICgKCgkgICAgICAgRGlzcGxheSoJCSAs CiAgICAgICAgICAgICAgIFhFdmVudCoJCSAsCiAgICAgICAgICAgICAgIFhQb2ludGVyCQkgCgog ICAgICAgICAgICAgKQkJICwKICAgIFhQb2ludGVyCQkgCgopOwoKZXh0ZXJuIGludCBYUGVuZGlu ZygKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFBsYW5lc09mU2NyZWVuKAoKICAg IFNjcmVlbioJCSAKICAgIAoKKTsKCmV4dGVybiBpbnQgWFByb3RvY29sUmV2aXNpb24oCgogICAg RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhQcm90b2NvbFZlcnNpb24oCgogICAgRGlzcGxh eSoJCSAKCik7CgoKZXh0ZXJuIGludCBYUHV0QmFja0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAog ICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFB1dEltYWdlKAoKICAgIERpc3BsYXkqCQkg LAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBYSW1hZ2UqCQkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGlu dAkgLAogICAgdW5zaWduZWQgaW50CSAJICAKCik7CgpleHRlcm4gaW50IFhRTGVuZ3RoKAoKICAg IERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCAgWFF1ZXJ5QmVzdEN1cnNvcigKCiAgICBEaXNw bGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgaW50ICAgICAgICAgLAogICAg dW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAK Cik7CgpleHRlcm4gaW50ICBYUXVlcnlCZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGlu dAkJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg aW50CSAsCiAgICB1bnNpZ25lZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRl cm4gaW50ICBYUXVlcnlCZXN0U3RpcHBsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxl CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVk IGludCoJICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RU aWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICB1bnNpZ25lZCBpbnQJ ICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQg aW50KgkgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlDb2xvcigKCiAgICBEaXNwbGF5KgkJICwKICAg IENvbG9ybWFwCQkgLAogICAgWENvbG9yKgkJIAoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5Q29sb3Jz KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgLAogICAg aW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUV4dGVuc2lvbigKCiAgICBEaXNwbGF5KgkJ ICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQq CQkgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlLZXltYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBj aGFyIFszMl0JCSAKCik7CgpleHRlcm4gaW50ICBYUXVlcnlQb2ludGVyKAoKICAgIERpc3BsYXkq CQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBp bnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgdW5zaWdu ZWQgaW50KiAgICAgICAgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlUZXh0RXh0ZW50cygKCiAgICBE aXNwbGF5KgkJICwKICAgIFhJRAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAs CiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBYQ2hhclN0cnVjdCoJ ICAgICAKCik7CgpleHRlcm4gaW50IFhRdWVyeVRleHRFeHRlbnRzMTYoCgogICAgRGlzcGxheSoJ CSAsCiAgICBYSUQJCQkgLAogICAgY29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgLAogICAg aW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAKCik7 CgpleHRlcm4gaW50ICBYUXVlcnlUcmVlKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgV2luZG93KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBXaW5kb3cqKgkJICwKICAgIHVu c2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgWFJhaXNlV2luZG93KAoKICAgIERpc3BsYXkq CQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYUmVhZEJpdG1hcEZpbGUoCgogICAg RGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZSAJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVu c2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIFBpeG1hcCoJCSAsCiAgICBp bnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFJlYWRCaXRtYXBGaWxlRGF0YSgK CiAgICBjb25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGlu dCoJICwKICAgIHVuc2lnbmVkIGNoYXIqKgkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7 CgpleHRlcm4gaW50IFhSZWJpbmRLZXlzeW0oCgogICAgRGlzcGxheSoJCSAsCiAgICBLZXlTeW0J CSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50CQkJICwKICAgIGNvbnN0ICB1bnNpZ25lZCBjaGFy KgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFJlY29sb3JDdXJzb3IoCgogICAgRGlz cGxheSoJCSAsCiAgICBDdXJzb3IJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoK KTsKCmV4dGVybiBpbnQgWFJlZnJlc2hLZXlib2FyZE1hcHBpbmcoCgogICAgWE1hcHBpbmdFdmVu dCoJICAgICAKCik7CgpleHRlcm4gaW50IFhSZW1vdmVGcm9tU2F2ZVNldCgKCiAgICBEaXNwbGF5 KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWFJlbW92ZUhvc3QoCgogICAgRGlz cGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3MqCSAKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0 cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFhIb3N0QWRkcmVzcyoJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhSZXBhcmVudFdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIFdpbmRvdwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu IGludCBYUmVzZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQg WFJlc2l6ZVdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2ln bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhSZXN0YWNrV2lu ZG93cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQJCQkgCgopOwoK ZXh0ZXJuIGludCBYUm90YXRlQnVmZmVycygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAK Cik7CgpleHRlcm4gaW50IFhSb3RhdGVXaW5kb3dQcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkg LAogICAgV2luZG93CQkgLAogICAgQXRvbSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWFNjcmVlbkNvdW50KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJu IGludCBYU2VsZWN0SW5wdXQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBs b25nCQkgCgopOwoKZXh0ZXJuIGludCAgWFNlbmRFdmVudCgKCiAgICBEaXNwbGF5KgkJICwKICAg IFdpbmRvdwkJICwKICAgIGludCAJCSAsCiAgICBsb25nCQkgLAogICAgWEV2ZW50KgkJIAoKKTsK CmV4dGVybiBpbnQgWFNldEFjY2Vzc0NvbnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJ CQkgCgopOwoKZXh0ZXJuIGludCBYU2V0QXJjTW9kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdD CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRCYWNrZ3JvdW5kKAoKICAgIERp c3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGlu dCBYU2V0Q2xpcE1hc2soCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBQaXhtYXAJ CSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlwT3JpZ2luKAoKICAgIERpc3BsYXkqCQkgLAogICAg R0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlw UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg ICBpbnQJCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWFNldENsb3NlRG93bk1vZGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBp bnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Q29tbWFuZCgKCiAgICBEaXNwbGF5KgkJICwKICAg IFdpbmRvdwkJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhT ZXREYXNoZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFJ1bGUo CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGlu dCBYU2V0RmlsbFN0eWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJ IAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAs CiAgICBGb250CQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udFBhdGgoCgogICAgRGlzcGxheSoJ CSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJCQkgCSAgICAgCgopOwoKZXh0ZXJuIGludCBYU2V0 Rm9yZWdyb3VuZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxv bmcJIAoKKTsKCmV4dGVybiBpbnQgWFNldEZ1bmN0aW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAg R0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldEdyYXBoaWNzRXhwb3N1cmVz KAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBp bnQgWFNldEljb25OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29u c3QgIGNoYXIqCSAKCik7CgpleHRlcm4gaW50IFhTZXRJbnB1dEZvY3VzKAoKICAgIERpc3BsYXkq CQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4g aW50IFhTZXRMaW5lQXR0cmlidXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAg IHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgop OwoKZXh0ZXJuIGludCBYU2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAg WE1vZGlmaWVyS2V5bWFwKgkgCgopOwoKZXh0ZXJuIGludCBYU2V0UGxhbmVNYXNrKAoKICAgIERp c3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGlu dCBYU2V0UG9pbnRlck1hcHBpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgdW5zaWdu ZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRTY3JlZW5TYXZlcigK CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRTZWxlY3Rpb25Pd25lcigKCiAgICBEaXNw bGF5KgkJICwKICAgIEF0b20JICAgICAgICAgLAogICAgV2luZG93CQkgLAogICAgVGltZQkJIAoK KTsKCmV4dGVybiBpbnQgWFNldFN0YXRlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAog ICAgdW5zaWduZWQgbG9uZyAJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAsCiAg ICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRTdGlwcGxlKAoKICAgIERpc3Bs YXkqCQkgLAogICAgR0MJCQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3Vi d2luZG93TW9kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhTZXRUU09yaWdpbigKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwK ICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0VGlsZSgKCiAgICBE aXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIFBpeG1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFNl dFdpbmRvd0JhY2tncm91bmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1 bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFw KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0 ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyUGl4 bWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgUGl4bWFwCQkgCgopOwoK ZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyV2lkdGgoCgogICAgRGlzcGxheSoJCSAsCiAgICBX aW5kb3cJCSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0Nv bG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgQ29sb3JtYXAJCSAK Cik7CgpleHRlcm4gaW50IFhTdG9yZUJ1ZmZlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIGNvbnN0 ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTdG9y ZUJ5dGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYU3RvcmVDb2xvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9y bWFwCQkgLAogICAgWENvbG9yKgkJIAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3JzKAoKICAg IERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgaW50CQkJ IAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlTmFtZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCBYU3RvcmVOYW1lZENvbG9y KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBjb25zdCAgY2hhcioJICwK ICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTeW5jKAoK ICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWFRleHRFeHRlbnRz KAoKICAgIFhGb250U3RydWN0KgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgLAog ICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAK Cik7CgpleHRlcm4gaW50IFhUZXh0RXh0ZW50czE2KAoKICAgIFhGb250U3RydWN0KgkgLAogICAg Y29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAs CiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAKCik7CgpleHRlcm4gaW50IFhUZXh0V2lk dGgoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAK Cik7CgpleHRlcm4gaW50IFhUZXh0V2lkdGgxNigKCiAgICBYRm9udFN0cnVjdCoJICwKICAgIGNv bnN0ICBYQ2hhcjJiKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhUcmFuc2xhdGVD b29yZGluYXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJ ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAg ICBXaW5kb3cqCQkgCgopOwoKZXh0ZXJuIGludCBYVW5kZWZpbmVDdXJzb3IoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJCdXR0b24oCgogICAg RGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg V2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYVW5ncmFiS2V5KAoKICAgIERpc3BsYXkqCQkgLAog ICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJu IGludCBYVW5ncmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBUaW1lCQkgCgopOwoK ZXh0ZXJuIGludCBYVW5ncmFiUG9pbnRlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFRpbWUJCSAK Cik7CgpleHRlcm4gaW50IFhVbmdyYWJTZXJ2ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl cm4gaW50IFhVbmluc3RhbGxDb2xvcm1hcCgKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFw CQkgCgopOwoKZXh0ZXJuIGludCBYVW5sb2FkRm9udCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEZv bnQJCSAKCik7CgpleHRlcm4gaW50IFhVbm1hcFN1YndpbmRvd3MoCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbm1hcFdpbmRvdygKCiAgICBEaXNwbGF5 KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWFZlbmRvclJlbGVhc2UoCgogICAg RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhXYXJwUG9pbnRlcigKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg LAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAg ICBpbnQJCQkgCSAgICAgCgopOwoKZXh0ZXJuIGludCBYV2lkdGhNTU9mU2NyZWVuKAoKICAgIFNj cmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhXaWR0aE9mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAK Cik7CgpleHRlcm4gaW50IFhXaW5kb3dFdmVudCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIGxvbmcJCSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYV3JpdGVC aXRtYXBGaWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBQaXht YXAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAJCSAgICAgCgopOwoKZXh0ZXJuIGludCAgWFN1cHBvcnRzTG9jYWxlKAoK ICAgIHZvaWQKCik7CgpleHRlcm4gY2hhciAqWFNldExvY2FsZU1vZGlmaWVycygKCiAgICBjb25z dCAgY2hhcioJIAoKKTsKCmV4dGVybiBYT00gWE9wZW5PTSgKCiAgICBEaXNwbGF5KgkJCSAsCiAg ICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjb25zdCAgY2hhcioJCSAsCiAgICBj b25zdCAgY2hhcioJCSAKCik7CgpleHRlcm4gaW50ICBYQ2xvc2VPTSgKCiAgICBYT00JCQkgCgop OwoKZXh0ZXJuIGNoYXIgKlhTZXRPTVZhbHVlcygKCiAgICBYT00JCQkgLAogICAgLi4uCgopOwoK ZXh0ZXJuIGNoYXIgKlhHZXRPTVZhbHVlcygKCiAgICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0 ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZPTSgKCiAgICBYT00JCQkgCgopOwoKZXh0ZXJuIGNoYXIg KlhMb2NhbGVPZk9NKAoKICAgIFhPTQkJCSAKCik7CgpleHRlcm4gWE9DIFhDcmVhdGVPQygKCiAg ICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWERlc3Ryb3lPQygKCiAgICBYT0MJ CQkgCgopOwoKZXh0ZXJuIFhPTSBYT01PZk9DKAoKICAgIFhPQwkJCSAKCik7CgpleHRlcm4gY2hh ciAqWFNldE9DVmFsdWVzKAoKICAgIFhPQwkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hhciAq WEdldE9DVmFsdWVzKAoKICAgIFhPQwkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gWEZvbnRTZXQg WENyZWF0ZUZvbnRTZXQoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg IGNoYXIqKioJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIHZvaWQg WEZyZWVGb250U2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEZvbnRTZXQJCSAKCik7CgpleHRl cm4gaW50IFhGb250c09mRm9udFNldCgKCiAgICBYRm9udFNldAkJICwKICAgIFhGb250U3RydWN0 KioqCSAsCiAgICBjaGFyKioqCQkgCgopOwoKZXh0ZXJuIGNoYXIgKlhCYXNlRm9udE5hbWVMaXN0 T2ZGb250U2V0KAoKICAgIFhGb250U2V0CQkgCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZkZv bnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50ICBYQ29udGV4dERlcGVuZGVu dERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50ICBYRGlyZWN0aW9uYWxE ZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0CQkgCgopOwoKZXh0ZXJuIGludCAgWENvbnRl eHR1YWxEcmF3aW5nKAoKICAgIFhGb250U2V0CQkgCgopOwoKZXh0ZXJuIFhGb250U2V0RXh0ZW50 cyAqWEV4dGVudHNPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50IFht YlRleHRFc2NhcGVtZW50KAoKICAgIFhGb250U2V0CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYd2NUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNl dAkJICwKICAgIGNvbnN0ICB3Y2hhcl90KgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg WG1iVGV4dEV4dGVudHMoCgogICAgWEZvbnRTZXQJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg IGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0 ZXJuIGludCBYd2NUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldAkJICwKICAgIGNvbnN0ICB3Y2hh cl90KgkgLAogICAgaW50CQkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJ CSAKCik7CgpleHRlcm4gaW50ICBYbWJUZXh0UGVyQ2hhckV4dGVudHMoCgogICAgWEZvbnRTZXQJ CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwK ICAgIFhSZWN0YW5nbGUqCQkgLAogICAgaW50CQkJICwKICAgIGludCoJCSAsCiAgICBYUmVjdGFu Z2xlKgkJICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHdjVGV4dFBlckNo YXJFeHRlbnRzKAoKICAgIFhGb250U2V0CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBp bnQJCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIGludAkJ CSAsCiAgICBpbnQqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJIAoK KTsKCmV4dGVybiB2b2lkIFhtYkRyYXdUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFhtYlRleHRJ dGVtKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdUZXh0KAoKICAgIERp c3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg aW50CQkJICwKICAgIFh3Y1RleHRJdGVtKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiB2b2lk IFhtYkRyYXdTdHJpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhG b250U2V0CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9pZCBYd2NEcmF3U3RyaW5nKAoK ICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdD CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3Bs YXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdDCQkJICwKICAg IGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHdjRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAg RHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg ICBpbnQJCQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu IFhJTSBYT3BlbklNKAoKICAgIERpc3BsYXkqCQkJICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tl dFJlYyoJICwKICAgIGNoYXIqCQkJICwKICAgIGNoYXIqCQkJIAoKKTsKCmV4dGVybiBpbnQgIFhD bG9zZUlNKAoKICAgIFhJTSAgCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJTVZhbHVlcygKCiAgICBY SU0gICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJTVZhbHVlcygKCiAgICBYSU0gICwgLi4u CgopOwoKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZJTSgKCiAgICBYSU0gIAoKKTsKCmV4dGVy biBjaGFyICpYTG9jYWxlT2ZJTSgKCiAgICBYSU0gIAoKKTsKCmV4dGVybiBYSUMgWENyZWF0ZUlD KAoKICAgIFhJTSAgLCAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJveUlDKAoKICAgIFhJQyAg CgopOwoKZXh0ZXJuIHZvaWQgWFNldElDRm9jdXMoCgogICAgWElDICAKCik7CgpleHRlcm4gdm9p ZCBYVW5zZXRJQ0ZvY3VzKAoKICAgIFhJQyAgCgopOwoKZXh0ZXJuIHdjaGFyX3QgKlh3Y1Jlc2V0 SUMoCgogICAgWElDICAKCik7CgpleHRlcm4gY2hhciAqWG1iUmVzZXRJQygKCiAgICBYSUMgIAoK KTsKCmV4dGVybiBjaGFyICpYU2V0SUNWYWx1ZXMoCgogICAgWElDICAsIC4uLgoKKTsKCmV4dGVy biBjaGFyICpYR2V0SUNWYWx1ZXMoCgogICAgWElDICAsIC4uLgoKKTsKCmV4dGVybiBYSU0gWElN T2ZJQygKCiAgICBYSUMgIAoKKTsKCmV4dGVybiBpbnQgIFhGaWx0ZXJFdmVudCgKCiAgICBYRXZl bnQqCSAsCiAgICBXaW5kb3cJIAoKKTsKCmV4dGVybiBpbnQgWG1iTG9va3VwU3RyaW5nKAoKICAg IFhJQwkJCSAsCiAgICBYS2V5UHJlc3NlZEV2ZW50KgkgLAogICAgY2hhcioJCSAsCiAgICBpbnQJ CQkgLAogICAgS2V5U3ltKgkJICwKICAgIGludCAqCQkgCgopOwoKZXh0ZXJuIGludCBYd2NMb29r dXBTdHJpbmcoCgogICAgWElDCQkJICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqCSAsCiAgICB3Y2hh cl90KgkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50ICoJCSAKCik7Cgpl eHRlcm4gWFZhTmVzdGVkTGlzdCBYVmFDcmVhdGVOZXN0ZWRMaXN0KAoKICAgIGludCAgLCAuLi4K Cik7CgogCgpleHRlcm4gaW50ICBYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soCgogICAg RGlzcGxheSoJCQkgLAogICAgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKgkgLAogICAgY2hhcioJ CQkgLAogICAgY2hhcioJCQkgLAogICAgWElEUHJvYwkJCSAsCiAgICBYUG9pbnRlcgkJCSAKCik7 CgpleHRlcm4gaW50ICBYVW5yZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNw bGF5KgkJCSAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAs CiAgICBjaGFyKgkJCSAsCiAgICBYSURQcm9jCQkJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCnR5 cGVkZWYgdm9pZCAoKlhDb25uZWN0aW9uV2F0Y2hQcm9jKSgKCiAgICBEaXNwbGF5KgkJCSAsCiAg ICBYUG9pbnRlcgkJCSAsCiAgICBpbnQJCQkJICwKICAgIGludCAJCQkgLAkgIAogICAgWFBvaW50 ZXIqCQkJICAgCgopOwogICAgCgpleHRlcm4gaW50ICBYSW50ZXJuYWxDb25uZWN0aW9uTnVtYmVy cygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBpbnQqKgkJCSAsCiAgICBpbnQqCQkJIAoKKTsKCmV4 dGVybiB2b2lkIFhQcm9jZXNzSW50ZXJuYWxDb25uZWN0aW9uKAoKICAgIERpc3BsYXkqCQkJICwK ICAgIGludAkJCQkgCgopOwoKZXh0ZXJuIGludCAgWEFkZENvbm5lY3Rpb25XYXRjaCgKCiAgICBE aXNwbGF5KgkJCSAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYwkgLAogICAgWFBvaW50ZXIJCQkg CgopOwoKZXh0ZXJuIHZvaWQgWFJlbW92ZUNvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNwbGF5KgkJ CSAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYwkgLAogICAgWFBvaW50ZXIJCQkgCgopOwoKfSAK CgojIDU3ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEgIi91c3Iv WDExUjYvaW5jbHVkZS9YMTEvWHV0aWwuaCIgMQogCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgoKCgoKCgoKCiAKCgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgCWxvbmcgZmxhZ3M7CSAKCWludCB4LCB5OwkJIAoJaW50IHdpZHRoLCBo ZWlnaHQ7CSAKCWludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhf aGVpZ2h0OwogICAgCWludCB3aWR0aF9pbmMsIGhlaWdodF9pbmM7CglzdHJ1Y3QgewoJCWludCB4 OwkgCgkJaW50IHk7CSAKCX0gbWluX2FzcGVjdCwgbWF4X2FzcGVjdDsKCWludCBiYXNlX3dpZHRo LCBiYXNlX2hlaWdodDsJCSAKCWludCB3aW5fZ3Jhdml0eTsJCQkgCn0gWFNpemVIaW50czsKCiAK CgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZyBmbGFnczsJIAoJ aW50ICBpbnB1dDsJIAoKCWludCBpbml0aWFsX3N0YXRlOwkgCglQaXhtYXAgaWNvbl9waXhtYXA7 CSAKCVdpbmRvdyBpY29uX3dpbmRvdzsgCSAKCWludCBpY29uX3gsIGljb25feTsgCSAKCVBpeG1h cCBpY29uX21hc2s7CSAKCVhJRCB3aW5kb3dfZ3JvdXA7CSAKCSAKfSBYV01IaW50czsKCiAKCgoK CgoKCgoKCgoKIAoKCgoKIAoKCgoKCgkJCSAKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVu c2lnbmVkIGNoYXIgKnZhbHVlOwkJIAogICAgQXRvbSBlbmNvZGluZzsJCQkgCiAgICBpbnQgZm9y bWF0OwkJCQkgCiAgICB1bnNpZ25lZCBsb25nIG5pdGVtczsJCSAKfSBYVGV4dFByb3BlcnR5OwoK CgoKCnR5cGVkZWYgZW51bSB7CiAgICBYU3RyaW5nU3R5bGUsCQkgCiAgICBYQ29tcG91bmRUZXh0 U3R5bGUsCQkgCiAgICBYVGV4dFN0eWxlLAkJCSAKICAgIFhTdGRJQ0NUZXh0U3R5bGUJCSAKfSBY SUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBtaW5fd2lkdGgsIG1pbl9o ZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwoJaW50IHdpZHRoX2luYywgaGVpZ2h0 X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0cnVjdCB7CgljaGFyICpyZXNfbmFtZTsKCWNo YXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50OwoKIAoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVm IHN0cnVjdCBfWENvbXBvc2VTdGF0dXMgewogICAgWFBvaW50ZXIgY29tcG9zZV9wdHI7CSAKICAg IGludCBjaGFyc19tYXRjaGVkOwkJIAp9IFhDb21wb3NlU3RhdHVzOwoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsgCgogCiAKCgoK IAoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIFZpc3VhbCAqdmlzdWFsOwogIFZpc3VhbElEIHZp c3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRlcHRoOwoKICBpbnQgY19jbGFzczsJCQkJCSAK CgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcgZ3JlZW5fbWFzazsK ICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6ZTsKICBpbnQgYml0 c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwoKCgoKCgoKCgoKCgoKIAoKCgp0eXBlZGVmIHN0cnVj dCB7CglDb2xvcm1hcCBjb2xvcm1hcDsKCXVuc2lnbmVkIGxvbmcgcmVkX21heDsKCXVuc2lnbmVk IGxvbmcgcmVkX211bHQ7Cgl1bnNpZ25lZCBsb25nIGdyZWVuX21heDsKCXVuc2lnbmVkIGxvbmcg Z3JlZW5fbXVsdDsKCXVuc2lnbmVkIGxvbmcgYmx1ZV9tYXg7Cgl1bnNpZ25lZCBsb25nIGJsdWVf bXVsdDsKCXVuc2lnbmVkIGxvbmcgYmFzZV9waXhlbDsKCVZpc3VhbElEIHZpc3VhbGlkOwkJIAoJ WElEIGtpbGxpZDsJCQkgCn0gWFN0YW5kYXJkQ29sb3JtYXA7CgoKCgogCgoKCgoKCgogCgoKCgoK CiAKCgoKCgp0eXBlZGVmIGludCBYQ29udGV4dDsKCgoKCmV4dGVybiAiQyIgeyAKCiAKCmV4dGVy biBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWElj b25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRz ICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3Jt YXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGlu dHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoK ICAgIFJlZ2lvbgkJICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIFJlZ2lvbiBYQ3Jl YXRlUmVnaW9uKAoKICAgIHZvaWQKCik7CgpleHRlcm4gY2hhciAqWERlZmF1bHRTdHJpbmcoCgog ICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlzcGxheSoJCSAs CiAgICBYSUQJCQkgLAogICAgWENvbnRleHQJCSAKCik7CgpleHRlcm4gaW50IFhEZXN0cm95UmVn aW9uKAoKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEVtcHR5UmVnaW9uKAoKICAgIFJl Z2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEVxdWFsUmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAg IFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEZpbmRDb250ZXh0KAoKICAgIERpc3BsYXkqCQkg LAogICAgWElECQkJICwKICAgIFhDb250ZXh0CQkgLAogICAgWFBvaW50ZXIqCQkgCgopOwoKZXh0 ZXJuIGludCAgWEdldENsYXNzSGludCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwK ICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldEljb25TaXplcygKCiAgICBE aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhJY29uU2l6ZSoqCQkgLAogICAgaW50KgkJ IAoKKTsKCmV4dGVybiBpbnQgIFhHZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAg IFdpbmRvdwkJICwKICAgIFhTaXplSGludHMqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFJHQkNv bG9ybWFwcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTdGFuZGFyZENv bG9ybWFwKiogICwKICAgIGludCoJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCAgWEdl dFNpemVIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTaXplSGlu dHMqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRTdGFuZGFyZENvbG9ybWFw KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAq CSAsCiAgICBBdG9tCQkgCQkJICAgIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRUZXh0UHJvcGVydHko CgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAog ICAgQXRvbQkJIAoKKTsKCmV4dGVybiBYVmlzdWFsSW5mbyAqWEdldFZpc3VhbEluZm8oCgogICAg RGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAgWFZpc3VhbEluZm8qCSAsCiAgICBpbnQqCQkg CgopOwoKZXh0ZXJuIGludCAgWEdldFdNQ2xpZW50TWFjaGluZSgKCiAgICBEaXNwbGF5KgkJICwK ICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gWFdNSGludHMg KlhHZXRXTUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCQkgICAgICAKCik7 CgpleHRlcm4gaW50ICBYR2V0V01JY29uTmFtZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V01OYW1lKAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsK CmV4dGVybiBpbnQgIFhHZXRXTU5vcm1hbEhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu ZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBsb25nKgkJICAKCik7CgpleHRlcm4gaW50 ICBYR2V0V01TaXplSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBY U2l6ZUhpbnRzKgkJICwKICAgIGxvbmcqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQg IFhHZXRab29tSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6 ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24J CSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gdm9pZCBYQ29udmVy dENhc2UoCgogICAgS2V5U3ltCQkgLAogICAgS2V5U3ltKgkJICwKICAgIEtleVN5bSoJCSAKCik7 CgpleHRlcm4gaW50IFhMb29rdXBTdHJpbmcoCgogICAgWEtleUV2ZW50KgkJICwKICAgIGNoYXIq CQkgLAogICAgaW50CQkJICwKICAgIEtleVN5bSoJCSAsCiAgICBYQ29tcG9zZVN0YXR1cyoJIAoK KTsKCmV4dGVybiBpbnQgIFhNYXRjaFZpc3VhbEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBp bnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYVmlzdWFsSW5mbyoJIAoKKTsK CmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBpbnQJCQkgLAog ICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhQb2ludEluUmVnaW9uKAoKICAgIFJlZ2lvbgkJ ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIFJlZ2lvbiBYUG9seWdvblJl Z2lvbigKCiAgICBYUG9pbnQqCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRl cm4gaW50IFhSZWN0SW5SZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAgaW50CQkJICwKICAgIGlu dAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgCgopOwoKZXh0ZXJu IGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgLAogICAgWENv bnRleHQJCSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgWFNldENsYXNzSGlu dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgop OwoKZXh0ZXJuIGludCBYU2V0SWNvblNpemVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgLAogICAgWEljb25TaXplKgkJICwKICAgIGludAkJCSAgICAgCgopOwoKZXh0ZXJuIGludCBY U2V0Tm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6 ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCoJICwKICAgIGludAkJ CSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U2l6ZUhpbnRzKAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgop OwoKZXh0ZXJuIGludCBYU2V0U3RhbmRhcmRQcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAog ICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg IFBpeG1hcAkJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJ IAoKKTsKCmV4dGVybiB2b2lkIFhTZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVy biB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ CSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAg ICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhXTUhpbnRzKgkJIAoKKTsKCmV4dGVy biB2b2lkIFhTZXRXTUljb25OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAog ICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTU5hbWUoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJu IHZvaWQgWFNldFdNTm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs CiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTVByb3BlcnRpZXMoCgog ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAg WFRleHRQcm9wZXJ0eSoJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhp bnRzKgkJICwKICAgIFhXTUhpbnRzKgkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJu IHZvaWQgWG1iU2V0V01Qcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNoYXIqKgkJICwK ICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIFhXTUhpbnRzKgkJICwKICAgIFhD bGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNU2l6ZUhpbnRzKAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgop OwoKZXh0ZXJuIGludCBYU2V0UmVnaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAog ICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAg RGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCoJICwKICAg IEF0b20JCSAKCik7CgpleHRlcm4gaW50IFhTZXRab29tSGludHMoCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgWFNocmlu a1JlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4 dGVybiBpbnQgIFhTdHJpbmdMaXN0VG9UZXh0UHJvcGVydHkoCgogICAgY2hhcioqCQkgLAogICAg aW50CQkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50IFhTdWJ0cmFjdFJl Z2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7Cgpl eHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAg ICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAogICAgWElDQ0VuY29kaW5nU3R5bGUJICwKICAgIFhU ZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50IFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHko CgogICAgRGlzcGxheSoJCSAsCiAgICB3Y2hhcl90KioJCSAsCiAgICBpbnQJCQkgLAogICAgWElD Q0VuY29kaW5nU3R5bGUJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gdm9pZCBY d2NGcmVlU3RyaW5nTGlzdCgKCiAgICB3Y2hhcl90KioJCSAKCik7CgpleHRlcm4gaW50ICBYVGV4 dFByb3BlcnR5VG9TdHJpbmdMaXN0KAoKICAgIFhUZXh0UHJvcGVydHkqCSAsCiAgICBjaGFyKioq CQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlz dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAsCiAgICBjaGFyKioqCQkg LAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgK CiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAsCiAgICB3Y2hhcl90KioqCQkg LAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAg WFJlY3RhbmdsZSoJCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4g aW50IFhVbmlvblJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdp b24JCSAKCik7CgpleHRlcm4gaW50IFhXTUdlb21ldHJ5KAoKICAgIERpc3BsYXkqCQkgLAogICAg aW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICB1bnNp Z25lZCBpbnQJICwKICAgIFhTaXplSGludHMqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAs CiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gaW50IFhY b3JSZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgop OwoKfSAKCgojIDU4ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEg Ii91c3IvWDExUjYvaW5jbHVkZS9YMTEvWHJlc291cmNlLmgiIDEKIAogCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgpleHRl cm4gIkMiIHsgCgogCgoKCgoKZXh0ZXJuIGNoYXIgKlhwZXJtYWxsb2MoCgogICAgdW5zaWduZWQg aW50CSAKCik7CgogCgoKCgoKdHlwZWRlZiBpbnQgICAgIFhybVF1YXJrLCAqWHJtUXVhcmtMaXN0 OwoKCnR5cGVkZWYgY2hhciAqWHJtU3RyaW5nOwoKCiAKZXh0ZXJuIFhybVF1YXJrIFhybVN0cmlu Z1RvUXVhcmsoCgogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIFhybVF1YXJrIFhybVBl cm1TdHJpbmdUb1F1YXJrKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCiAKZXh0ZXJuIFhybVN0 cmluZyBYcm1RdWFya1RvU3RyaW5nKAoKICAgIFhybVF1YXJrIAkJIAoKKTsKCmV4dGVybiBYcm1R dWFyayBYcm1VbmlxdWVRdWFyaygKCiAgICB2b2lkCgopOwoKCgoKIAoKCgoKCnR5cGVkZWYgZW51 bSB7WHJtQmluZFRpZ2h0bHksIFhybUJpbmRMb29zZWx5fSBYcm1CaW5kaW5nLCAqWHJtQmluZGlu Z0xpc3Q7CgpleHRlcm4gdm9pZCBYcm1TdHJpbmdUb1F1YXJrTGlzdCgKCiAgICBjb25zdCAgY2hh cioJICwKICAgIFhybVF1YXJrTGlzdAkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtU3RyaW5nVG9CaW5k aW5nUXVhcmtMaXN0KAoKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgWHJtQmluZGluZ0xpc3QJICwK ICAgIFhybVF1YXJrTGlzdAkgCgopOwoKIAoKCgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybU5h bWU7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybU5hbWVMaXN0OwoKCgoKdHlwZWRlZiBYcm1RdWFy ayAgICAgWHJtQ2xhc3M7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybUNsYXNzTGlzdDsKCgoKCgoK IAoKCgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybVJlcHJlc2VudGF0aW9uOwoKCgp0eXBlZGVm IHN0cnVjdCB7CiAgICB1bnNpZ25lZCBpbnQgICAgc2l6ZTsKICAgIFhQb2ludGVyCSAgICBhZGRy Owp9IFhybVZhbHVlLCAqWHJtVmFsdWVQdHI7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9Ycm1I YXNoQnVja2V0UmVjICpYcm1IYXNoQnVja2V0Owp0eXBlZGVmIFhybUhhc2hCdWNrZXQgKlhybUhh c2hUYWJsZTsKdHlwZWRlZiBYcm1IYXNoVGFibGUgWHJtU2VhcmNoTGlzdFtdOwp0eXBlZGVmIHN0 cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqWHJtRGF0YWJhc2U7CgoKZXh0ZXJuIHZvaWQgWHJtRGVz dHJveURhdGFiYXNlKAoKICAgIFhybURhdGFiYXNlCQkgICAgIAoKKTsKCmV4dGVybiB2b2lkIFhy bVFQdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFzZSoJICwKICAgIFhybUJpbmRpbmdMaXN0CSAs CiAgICBYcm1RdWFya0xpc3QJICwKICAgIFhybVJlcHJlc2VudGF0aW9uCSAsCiAgICBYcm1WYWx1 ZSoJCSAKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFzZSoJ ICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYcm1WYWx1ZSoJ CSAKCik7CgpleHRlcm4gdm9pZCBYcm1RUHV0U3RyaW5nUmVzb3VyY2UoCgogICAgWHJtRGF0YWJh c2UqCSAsCiAgICBYcm1CaW5kaW5nTGlzdCAgICAgICAsCiAgICBYcm1RdWFya0xpc3QJICwKICAg IGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0U3RyaW5nUmVzb3VyY2UoCgog ICAgWHJtRGF0YWJhc2UqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkg CgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0TGluZVJlc291cmNlKAoKICAgIFhybURhdGFiYXNlKgkg LAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gaW50ICBYcm1RR2V0UmVzb3VyY2UoCgog ICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlzdAkJICwKICAgIFhybUNsYXNzTGlzdAkg LAogICAgWHJtUmVwcmVzZW50YXRpb24qCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7CgpleHRlcm4g aW50ICBYcm1HZXRSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIGNvbnN0ICBjaGFy KgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjaGFyKioJCSAsCiAgICBYcm1WYWx1ZSoJCSAK Cik7CgpleHRlcm4gaW50ICBYcm1RR2V0U2VhcmNoTGlzdCgKCiAgICBYcm1EYXRhYmFzZQkJICwK ICAgIFhybU5hbWVMaXN0CQkgLAogICAgWHJtQ2xhc3NMaXN0CSAsCiAgICBYcm1TZWFyY2hMaXN0 CSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtUUdldFNlYXJjaFJlc291cmNlKAoK ICAgIFhybVNlYXJjaExpc3QJICwKICAgIFhybU5hbWUJCSAsCiAgICBYcm1DbGFzcwkJICwKICAg IFhybVJlcHJlc2VudGF0aW9uKgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKIAoKCgoKCmV4dGVy biB2b2lkIFhybVNldERhdGFiYXNlKAoKICAgIERpc3BsYXkqCQkgLAogICAgWHJtRGF0YWJhc2UJ CSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSoJ CSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0RmlsZURhdGFiYXNlKAoKICAgIGNvbnN0 ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCAgWHJtQ29tYmluZUZpbGVEYXRhYmFzZSgKCiAgICBj b25zdCAgY2hhciogCSAsCiAgICBYcm1EYXRhYmFzZSoJICwKICAgIGludCAJCSAKCik7CgpleHRl cm4gWHJtRGF0YWJhc2UgWHJtR2V0U3RyaW5nRGF0YWJhc2UoCgogICAgY29uc3QgIGNoYXIqCSAg ICAKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRGaWxlRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJ CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybU1lcmdlRGF0YWJhc2Vz KAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgWHJtRGF0YWJhc2UqCSAKCik7CgpleHRlcm4gdm9p ZCBYcm1Db21iaW5lRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1EYXRhYmFz ZSoJICwKICAgIGludCAJCSAKCik7CgoKCgpleHRlcm4gaW50ICBYcm1FbnVtZXJhdGVEYXRhYmFz ZSgKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIFhybU5hbWVMaXN0CQkgLAogICAgWHJtQ2xhc3NM aXN0CSAsCiAgICBpbnQJCQkgLAogICAgaW50ICAoKikoCgoJICAgICBYcm1EYXRhYmFzZSoJICwK CSAgICAgWHJtQmluZGluZ0xpc3QJICwKCSAgICAgWHJtUXVhcmtMaXN0CSAsCgkgICAgIFhybVJl cHJlc2VudGF0aW9uKgkgLAoJICAgICBYcm1WYWx1ZSoJCSAsCgkgICAgIFhQb2ludGVyCQkgCgoJ ICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gY2hhciAqWHJtTG9jYWxlT2ZE YXRhYmFzZSgKCiAgICBYcm1EYXRhYmFzZSAJIAoKKTsKCgogCgoKCgoKdHlwZWRlZiBlbnVtIHsK ICAgIFhybW9wdGlvbk5vQXJnLAkgCiAgICBYcm1vcHRpb25Jc0FyZywgICAgICAKICAgIFhybW9w dGlvblN0aWNreUFyZywgIAogICAgWHJtb3B0aW9uU2VwQXJnLCAgICAgCiAgICBYcm1vcHRpb25S ZXNBcmcsCSAKICAgIFhybW9wdGlvblNraXBBcmcsICAgIAogICAgWHJtb3B0aW9uU2tpcExpbmUs ICAgCiAgICBYcm1vcHRpb25Ta2lwTkFyZ3MJIAoKfSBYcm1PcHRpb25LaW5kOwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgY2hhcgkgICAgKm9wdGlvbjsJICAgICAKICAgIGNoYXIJICAgICpzcGVjaWZp ZXI7ICAgICAgCiAgICBYcm1PcHRpb25LaW5kICAgYXJnS2luZDsJICAgICAKICAgIFhQb2ludGVy CSAgICB2YWx1ZTsJICAgICAKfSBYcm1PcHRpb25EZXNjUmVjLCAqWHJtT3B0aW9uRGVzY0xpc3Q7 CgoKZXh0ZXJuIHZvaWQgWHJtUGFyc2VDb21tYW5kKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAg WHJtT3B0aW9uRGVzY0xpc3QJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg IGludCoJCSAsCiAgICBjaGFyKioJCSAJCSAgICAgCgopOwoKfSAKCgogCiMgNTkgIi91c3IvWDEx UjYvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg Y2hhciAqU3RyaW5nOwoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjICpXaWRnZXQ7CnR5cGVkZWYgV2lkZ2V0ICpX aWRnZXRMaXN0Owp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0Q2xhc3NSZWMgKldpZGdldENsYXNzOwp0 eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlUmVjICpDb21wb3NpdGVXaWRnZXQ7CnR5cGVkZWYgc3Ry dWN0IF9YdEFjdGlvbnNSZWMgKlh0QWN0aW9uTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX1h0RXZlbnRS ZWMgKlh0RXZlbnRUYWJsZTsKCnR5cGVkZWYgc3RydWN0IF9YdEFwcFN0cnVjdCAqWHRBcHBDb250 ZXh0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJWHRWYWx1ZU1hc2s7CnR5cGVkZWYgdW5zaWduZWQg bG9uZwlYdEludGVydmFsSWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdElucHV0SWQ7CnR5cGVk ZWYgdW5zaWduZWQgbG9uZwlYdFdvcmtQcm9jSWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdFNp Z25hbElkOwp0eXBlZGVmIHVuc2lnbmVkIGludAlYdEdlb21ldHJ5TWFzazsKdHlwZWRlZiB1bnNp Z25lZCBsb25nCVh0R0NNYXNrOyAgICAKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVBpeGVsOwkgICAg IAp0eXBlZGVmIGludAkJWHRDYWNoZVR5cGU7CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKdHlwZWRlZiBjaGFyCQlCb29sZWFuOwp0eXBlZGVmIGxvbmcJCVh0QXJnVmFsOwp0eXBlZGVm IHVuc2lnbmVkIGNoYXIJWHRFbnVtOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50CUNhcmRpbmFsOwp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0CURpbWVuc2lvbjsgICAKdHlwZWRlZiBzaG9ydAkJUG9zaXRp b247ICAgIAoKCnR5cGVkZWYgdm9pZCoJCVh0UG9pbnRlcjsKCgoKCiAKIAp0eXBlZGVmIFh0UG9p bnRlcglPcGFxdWU7CgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvQ29yZS5oIiAxCiAKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBl ZGVmIHN0cnVjdCBfV2lkZ2V0Q2xhc3NSZWMgKkNvcmVXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1 Y3QgX1dpZGdldFJlYyAqQ29yZVdpZGdldDsKZXh0ZXJuICBXaWRnZXRDbGFzcyBjb3JlV2lkZ2V0 Q2xhc3M7CgoKZXh0ZXJuICBXaWRnZXRDbGFzcyB3aWRnZXRDbGFzczsKCgoKCiAKIyAxOTIgIi91 c3IvWDExUjYvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCiMgMSAiL3Vzci9YMTFSNi9pbmNs dWRlL1gxMS9Db21wb3NpdGUuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0NvbXBvc2l0ZUNsYXNzUmVjICpD b21wb3NpdGVXaWRnZXRDbGFzczsKCnR5cGVkZWYgQ2FyZGluYWwgKCpYdE9yZGVyUHJvYykoCgog ICAgV2lkZ2V0IAkgCgopOwoKZXh0ZXJuICJDIiB7IAoKZXh0ZXJuIHZvaWQgWHRNYW5hZ2VDaGls ZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2 b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5t YW5hZ2VDaGlsZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsK CmV4dGVybiB2b2lkIFh0VW5tYW5hZ2VDaGlsZCgKCiAgICBXaWRnZXQgCQkgCgopOwoKdHlwZWRl ZiB2b2lkICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldExpc3QJ CSAsCiAgICBDYXJkaW5hbCAqCQkgLAogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsICoJ CSAsCiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdENoYW5nZU1hbmFnZWRTZXQo CgogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsCQkgLAogICAgWHREb0NoYW5nZVByb2MJ ICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFdpZGdldExpc3QJCSAsCiAgICBDYXJkaW5hbAkJIAoK KTsKCn0gCgoKZXh0ZXJuICBXaWRnZXRDbGFzcyBjb21wb3NpdGVXaWRnZXRDbGFzczsKCgoKIAoj IDE5MyAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKIyAxICIvdXNyL1gx MVI2L2luY2x1ZGUvWDExL0NvbnN0cmFpbnQuaCIgMQogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Db25zdHJhaW50 Q2xhc3NSZWMgKkNvbnN0cmFpbnRXaWRnZXRDbGFzczsKCgpleHRlcm4gIFdpZGdldENsYXNzIGNv bnN0cmFpbnRXaWRnZXRDbGFzczsKCgoKIAojIDE5NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9J bnRyaW5zaWMuaCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL09iamVjdC5oIiAxCiAK IAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX09iamVjdFJlYyAqT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0Q2xh c3NSZWMgKk9iamVjdENsYXNzOwoKCmV4dGVybiAgV2lkZ2V0Q2xhc3Mgb2JqZWN0Q2xhc3M7CgoK IAojIDE5NSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKIyAxICIvdXNy L1gxMVI2L2luY2x1ZGUvWDExL1JlY3RPYmouaCIgMQogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9SZWN0T2JqUmVj ICpSZWN0T2JqOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNsYXNzUmVjICpSZWN0T2JqQ2xhc3M7 CgoKZXh0ZXJuICBXaWRnZXRDbGFzcyByZWN0T2JqQ2xhc3M7CgoKIAojIDE5NiAiL3Vzci9YMTFS Ni9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKCnR5cGVkZWYgc3RydWN0IF9UcmFuc2xhdGlv bkRhdGEgKlh0VHJhbnNsYXRpb25zOwp0eXBlZGVmIHN0cnVjdCBfVHJhbnNsYXRpb25EYXRhICpY dEFjY2VsZXJhdG9yczsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgTW9kaWZpZXJzOwoKdHlwZWRlZiB2 b2lkICgqWHRBY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgWEV2ZW50KgkJICwKICAg IFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7Cgp0eXBlZGVmIFh0QWN0aW9uUHJvYyog WHRCb3VuZEFjdGlvbnM7Cgp0eXBlZGVmIHN0cnVjdCBfWHRBY3Rpb25zUmVjewogICAgU3RyaW5n CSBzdHJpbmc7CiAgICBYdEFjdGlvblByb2MgcHJvYzsKfSBYdEFjdGlvbnNSZWM7Cgp0eXBlZGVm IGVudW0gewogCiAKICAgIFh0QWRkcmVzcywJCSAKICAgIFh0QmFzZU9mZnNldCwJIAogICAgWHRJ bW1lZGlhdGUsCSAKICAgIFh0UmVzb3VyY2VTdHJpbmcsCSAKICAgIFh0UmVzb3VyY2VRdWFyaywJ IAogICAgWHRXaWRnZXRCYXNlT2Zmc2V0LAkgCiAgICBYdFByb2NlZHVyZUFyZwkgCn0gWHRBZGRy ZXNzTW9kZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0QWRkcmVzc01vZGUgICBhZGRyZXNzX21v ZGU7CiAgICBYdFBvaW50ZXIJICAgIGFkZHJlc3NfaWQ7CiAgICBDYXJkaW5hbAkgICAgc2l6ZTsK fSBYdENvbnZlcnRBcmdSZWMsICpYdENvbnZlcnRBcmdMaXN0OwoKdHlwZWRlZiB2b2lkICgqWHRD b252ZXJ0QXJnUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIENhcmRpbmFsKgkJICwKICAgIFhy bVZhbHVlKgkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0R2VvbWV0cnlNYXNrIHJlcXVl c3RfbW9kZTsKICAgIFBvc2l0aW9uIHgsIHk7CiAgICBEaW1lbnNpb24gd2lkdGgsIGhlaWdodCwg Ym9yZGVyX3dpZHRoOwogICAgV2lkZ2V0IHNpYmxpbmc7CiAgICBpbnQgc3RhY2tfbW9kZTsgICAg Cn0gWHRXaWRnZXRHZW9tZXRyeTsKCiAKCgogCgoKdHlwZWRlZiB2b2lkICgqWHRDb252ZXJ0ZXIp KCAgCgogICAgWHJtVmFsdWUqCQkgLAogICAgQ2FyZGluYWwqCQkgLAogICAgWHJtVmFsdWUqCQkg LAogICAgWHJtVmFsdWUqCQkgCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRUeXBlQ29udmVydGVy KSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIENhcmRpbmFsKgkJICwK ICAgIFhybVZhbHVlKgkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIFh0UG9pbnRlcioJCSAKCik7 Cgp0eXBlZGVmIHZvaWQgKCpYdERlc3RydWN0b3IpKAoKICAgIFh0QXBwQ29udGV4dAkgLAogICAg WHJtVmFsdWUqCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIENh cmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgT3BhcXVlIFh0Q2FjaGVSZWY7Cgp0eXBlZGVmIE9wYXF1 ZSBYdEFjdGlvbkhvb2tJZDsKCnR5cGVkZWYgdm9pZCAoKlh0QWN0aW9uSG9va1Byb2MpKAoKICAg IFdpZGdldAkJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFN0cmluZwkJICwKICAgIFhFdmVudCoJ CSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIFh0QmxvY2tIb29rSWQ7Cgp0eXBlZGVmIHZvaWQgKCpYdEJsb2NrSG9va1Byb2MpKAoK ICAgIFh0UG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0S2V5UHJvYykoCgogICAgRGlz cGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQgIAkJICwKICAgIE1vZGlmaWVycwkJICwKICAgIE1v ZGlmaWVycyoJCSAsCiAgICBLZXlTeW0qCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDYXNlUHJv YykoCgogICAgRGlzcGxheSoJCSAsCiAgICBLZXlTeW0JCSAsCiAgICBLZXlTeW0qCQkgLAogICAg S2V5U3ltKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXZlbnRIYW5kbGVyKSgKCiAgICBXaWRn ZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFhFdmVudCoJCSAsCiAgICBCb29sZWFuKgkJ IAoKKTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIEV2ZW50TWFzazsKCnR5cGVkZWYgZW51bSB7WHRM aXN0SGVhZCwgWHRMaXN0VGFpbCB9IFh0TGlzdFBvc2l0aW9uOwoKdHlwZWRlZiB1bnNpZ25lZCBs b25nCVh0SW5wdXRNYXNrOwoKCgoKCnR5cGVkZWYgdm9pZCAoKlh0VGltZXJDYWxsYmFja1Byb2Mp KAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdEludGVydmFsSWQqCSAKCik7Cgp0eXBlZGVmIHZv aWQgKCpYdElucHV0Q2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgLAogICAgaW50KgkJ ICwKICAgIFh0SW5wdXRJZCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNpZ25hbENhbGxiYWNr UHJvYykoCgogICAgWHRQb2ludGVyCQkgLAogICAgWHRTaWduYWxJZCoJCSAKCik7Cgp0eXBlZGVm IHN0cnVjdCB7CiAgICBTdHJpbmcJbmFtZTsKICAgIFh0QXJnVmFsCXZhbHVlOwp9IEFyZywgKkFy Z0xpc3Q7Cgp0eXBlZGVmIFh0UG9pbnRlcglYdFZhckFyZ3NMaXN0OwoKdHlwZWRlZiB2b2lkICgq WHRDYWxsYmFja1Byb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAkgCiAg ICBYdFBvaW50ZXIgCQkgCSAKCik7Cgp0eXBlZGVmIHN0cnVjdCBfWHRDYWxsYmFja1JlYyB7CiAg ICBYdENhbGxiYWNrUHJvYyAgY2FsbGJhY2s7CiAgICBYdFBvaW50ZXIJICAgIGNsb3N1cmU7Cn0g WHRDYWxsYmFja1JlYywgKlh0Q2FsbGJhY2tMaXN0OwoKdHlwZWRlZiBlbnVtIHsKCVh0Q2FsbGJh Y2tOb0xpc3QsCglYdENhbGxiYWNrSGFzTm9uZSwKCVh0Q2FsbGJhY2tIYXNTb21lCn0gWHRDYWxs YmFja1N0YXR1czsKCnR5cGVkZWYgZW51bSAgewogICAgWHRHZW9tZXRyeVllcywJICAgCiAgICBY dEdlb21ldHJ5Tm8sCSAgIAogICAgWHRHZW9tZXRyeUFsbW9zdCwJICAgCiAgICBYdEdlb21ldHJ5 RG9uZQkgICAKfSBYdEdlb21ldHJ5UmVzdWx0OwoKdHlwZWRlZiBlbnVtIHtYdEdyYWJOb25lLCBY dEdyYWJOb25leGNsdXNpdmUsIFh0R3JhYkV4Y2x1c2l2ZX0gWHRHcmFiS2luZDsKCnR5cGVkZWYg c3RydWN0IHsKICAgIFdpZGdldCAgc2hlbGxfd2lkZ2V0OwogICAgV2lkZ2V0ICBlbmFibGVfd2lk Z2V0Owp9IFh0UG9wZG93bklEUmVjLCAqWHRQb3Bkb3duSUQ7Cgp0eXBlZGVmIHN0cnVjdCBfWHRS ZXNvdXJjZSB7CiAgICBTdHJpbmcJcmVzb3VyY2VfbmFtZTsJIAogICAgU3RyaW5nCXJlc291cmNl X2NsYXNzOwkgCiAgICBTdHJpbmcJcmVzb3VyY2VfdHlwZTsJIAogICAgQ2FyZGluYWwJcmVzb3Vy Y2Vfc2l6ZTsJIAogICAgQ2FyZGluYWwJcmVzb3VyY2Vfb2Zmc2V0OyAKICAgIFN0cmluZwlkZWZh dWx0X3R5cGU7CSAKICAgIFh0UG9pbnRlcglkZWZhdWx0X2FkZHI7CSAKfSBYdFJlc291cmNlLCAq WHRSZXNvdXJjZUxpc3Q7Cgp0eXBlZGVmIHZvaWQgKCpYdFJlc291cmNlRGVmYXVsdFByb2MpKAoK ICAgIFdpZGdldAkgLAogICAgaW50CQkgLAogICAgWHJtVmFsdWUqCSAKCik7Cgp0eXBlZGVmIFN0 cmluZyAoKlh0TGFuZ3VhZ2VQcm9jKSgKCiAgICBEaXNwbGF5KgkgLAogICAgU3RyaW5nCSAsCiAg ICBYdFBvaW50ZXIJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXJyb3JNc2dIYW5kbGVyKSgKCiAg ICBTdHJpbmcgCQkgLAogICAgU3RyaW5nCQkgLAogICAgU3RyaW5nCQkgLAogICAgU3RyaW5nCQkg LAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0 RXJyb3JIYW5kbGVyKSgKCiAgU3RyaW5nCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDcmVhdGVQ b3B1cENoaWxkUHJvYykoCgogICAgV2lkZ2V0CSAKCik7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFdv cmtQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgCSAKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBj aGFyIG1hdGNoOwogICAgU3RyaW5nIHN1YnN0aXR1dGlvbjsKfSBTdWJzdGl0dXRpb25SZWMsICpT dWJzdGl0dXRpb247Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdEZpbGVQcmVkaWNhdGUpKAoKICAgU3Ry aW5nICAKCik7Cgp0eXBlZGVmIFh0UG9pbnRlciBYdFJlcXVlc3RJZDsKCnR5cGVkZWYgQm9vbGVh biAoKlh0Q29udmVydFNlbGVjdGlvblByb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tKgkJ ICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAgdW5z aWduZWQgbG9uZyoJICwKICAgIGludCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxl Y3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAKCik7Cgp0eXBlZGVmIHZv aWQgKCpYdFNlbGVjdGlvbkRvbmVQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAs CiAgICBBdG9tKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0U2VsZWN0aW9uQ2FsbGJhY2tQcm9j KSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIEF0b20qCQkgLAogICAg QXRvbSoJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgdW5zaWduZWQgbG9uZyoJICwKICAgIGlu dCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxlY3Rpb25JbmNyUHJvYykoCgogICAg V2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCnR5cGVkZWYg dm9pZCAoKlh0U2VsZWN0aW9uRG9uZUluY3JQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRv bSoJCSAsCiAgICBBdG9tKgkJICwKICAgIFh0UmVxdWVzdElkKgkgLAogICAgWHRQb2ludGVyIAkJ IAoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0Q29udmVydFNlbGVjdGlvbkluY3JQcm9jKSgKCiAg ICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAog ICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQqCQkgLAogICAg dW5zaWduZWQgbG9uZyoJICwKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlcXVlc3RJZCoJIAoK KTsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FuY2VsQ29udmVydFNlbGVjdGlvblByb2MpKAoKICAgIFdp ZGdldCAJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAogICAgWHRSZXF1ZXN0SWQqCSAs CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRFdmVudERpc3BhdGNo UHJvYykoCgogICAgWEV2ZW50KgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXh0ZW5zaW9uU2Vs ZWN0UHJvYykoCgogICAgV2lkZ2V0CQkgLAogICAgaW50KgkJICwKICAgIFh0UG9pbnRlcioJCSAs CiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgCgopOwoKIAoKCgoKCmV4dGVybiAiQyIgeyAK CmV4dGVybiBCb29sZWFuIFh0Q29udmVydEFuZFN0b3JlKAoKICAgIFdpZGdldCAJCSAsCiAgICBj b25zdCAgY2hhciogIAkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgY29uc3QgIGNoYXIqICAJICwK ICAgIFhybVZhbHVlKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q2FsbENvbnZlcnRlcigKCiAg ICBEaXNwbGF5KgkJICwKICAgIFh0VHlwZUNvbnZlcnRlciAJICwKICAgIFhybVZhbHVlUHRyIAkg LAogICAgQ2FyZGluYWwgCQkgLAogICAgWHJtVmFsdWVQdHIgCSAsCiAgICBYcm1WYWx1ZSoJCSAs CiAgICBYdENhY2hlUmVmKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVudCgK CiAgICBYRXZlbnQqIAkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q2FsbEFjY2VwdEZvY3VzKAoK ICAgIFdpZGdldCAJCSAsCiAgICBUaW1lKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0UGVla0V2 ZW50KCAgCgogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwUGVla0V2ZW50 KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRlcm4gQm9vbGVh biBYdElzU3ViY2xhc3MoCgogICAgV2lkZ2V0IAkJICwKICAgIFdpZGdldENsYXNzIAkgCgopOwoK ZXh0ZXJuIEJvb2xlYW4gWHRJc09iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJv b2xlYW4gX1h0Q2hlY2tTdWJjbGFzc0ZsYWcoICAKCiAgICBXaWRnZXQJCSAsCiAgICB1bnNpZ25l ZCBpbnQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gX1h0SXNTdWJjbGFzc09mKCAgCgogICAgV2lk Z2V0CQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIHVuc2ln bmVkIGludCAJCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdElzTWFuYWdlZCgKCiAgICBXaWRnZXQg CQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1JlYWxpemVkKAoKICAgIFdpZGdldCAJCSAKCik7 CgpleHRlcm4gQm9vbGVhbiBYdElzU2Vuc2l0aXZlKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRl cm4gQm9vbGVhbiBYdE93blNlbGVjdGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAs CiAgICBUaW1lIAkJICwKICAgIFh0Q29udmVydFNlbGVjdGlvblByb2MgICwKICAgIFh0TG9zZVNl bGVjdGlvblByb2MJICwKICAgIFh0U2VsZWN0aW9uRG9uZVByb2MgIAoKKTsKCmV4dGVybiBCb29s ZWFuIFh0T3duU2VsZWN0aW9uSW5jcmVtZW50YWwoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20g CQkgLAogICAgVGltZSAJCSAsCiAgICBYdENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYwkgLAogICAg WHRMb3NlU2VsZWN0aW9uSW5jclByb2MJICwKICAgIFh0U2VsZWN0aW9uRG9uZUluY3JQcm9jCSAs CiAgICBYdENhbmNlbENvbnZlcnRTZWxlY3Rpb25Qcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgCgop OwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1bHQgWHRNYWtlUmVzaXplUmVxdWVzdCgKCiAgICBXaWRn ZXQgCQkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgRGlt ZW5zaW9uKgkJICwKICAgIERpbWVuc2lvbioJCSAKCik7CgpleHRlcm4gdm9pZCBYdFRyYW5zbGF0 ZUNvb3JkcygKCiAgICBXaWRnZXQgCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAsCiAgICBQ b3NpdGlvbioJCSAsCiAgICBQb3NpdGlvbioJCSAKCik7CgpleHRlcm4gS2V5U3ltKiBYdEdldEtl eXN5bVRhYmxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgS2V5Q29kZSoJCSAsCiAgICBpbnQqCQkg CgopOwoKZXh0ZXJuIHZvaWQgWHRLZXlzeW1Ub0tleWNvZGVMaXN0KAoKICAgIERpc3BsYXkqCQkg LAogICAgS2V5U3ltIAkJICwKICAgIEtleUNvZGUqKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsK CmV4dGVybiB2b2lkIFh0U3RyaW5nQ29udmVyc2lvbldhcm5pbmcoICAKCiAgICBjb25zdCAgY2hh ciogCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlTdHJp bmdDb252ZXJzaW9uV2FybmluZygKCiAgICBEaXNwbGF5KgkgCSAsCiAgICBjb25zdCAgY2hhciog CSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgoKZXh0ZXJuICBYdENvbnZlcnRBcmdSZWMgY29u c3QgY29sb3JDb252ZXJ0QXJnc1tdOwpleHRlcm4gIFh0Q29udmVydEFyZ1JlYyBjb25zdCBzY3Jl ZW5Db252ZXJ0QXJnW107CgoKCgoKZXh0ZXJuIHZvaWQgWHRBcHBBZGRDb252ZXJ0ZXIoICAKCiAg ICBYdEFwcENvbnRleHQJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJ ICwKICAgIFh0Q29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdAkgLAogICAgQ2FyZGlu YWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDb252ZXJ0ZXIoICAKCiAgICBjb25zdCAgY2hh ciogCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDb252ZXJ0ZXIgCSAsCiAgICBYdENv bnZlcnRBcmdMaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRU eXBlQ29udmVydGVyKAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkg LAogICAgWHRUeXBlQ29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENh cmRpbmFsIAkJICwKICAgIFh0Q2FjaGVUeXBlIAkgLAogICAgWHREZXN0cnVjdG9yIAkgCgopOwoK ZXh0ZXJuIHZvaWQgWHRBcHBTZXRUeXBlQ29udmVydGVyKAoKICAgIFh0QXBwQ29udGV4dCAJICwK ICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRUeXBlQ29u dmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAg IFh0Q2FjaGVUeXBlIAkgLAogICAgWHREZXN0cnVjdG9yIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRD b252ZXJ0KCAgCgogICAgV2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYcm1W YWx1ZSoJCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHREaXJlY3RDb252ZXJ0KCAgCgogICAgWHRDb252ZXJ0ZXIgCSAsCiAgICBYcm1W YWx1ZVB0ciAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIFhybVZhbHVlUHRyIAkgLAogICAgWHJt VmFsdWUqCQkgCgopOwoKIAoKCgoKCmV4dGVybiBYdFRyYW5zbGF0aW9ucyBYdFBhcnNlVHJhbnNs YXRpb25UYWJsZSgKCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gWHRBY2NlbGVyYXRv cnMgWHRQYXJzZUFjY2VsZXJhdG9yVGFibGUoCgogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRPdmVycmlkZVRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRU cmFuc2xhdGlvbnMgCSAKCik7CgpleHRlcm4gdm9pZCBYdEF1Z21lbnRUcmFuc2xhdGlvbnMoCgog ICAgV2lkZ2V0IAkJICwKICAgIFh0VHJhbnNsYXRpb25zIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJ bnN0YWxsQWNjZWxlcmF0b3JzKAoKICAgIFdpZGdldCAJCSAsCiAgICBXaWRnZXQJCSAKCik7Cgpl eHRlcm4gdm9pZCBYdEluc3RhbGxBbGxBY2NlbGVyYXRvcnMoCgogICAgV2lkZ2V0IAkJICwKICAg IFdpZGdldAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5pbnN0YWxsVHJhbnNsYXRpb25zKAoKICAg IFdpZGdldCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcEFkZEFjdGlvbnMoCgogICAgWHRBcHBD b250ZXh0IAkgLAogICAgWHRBY3Rpb25MaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRBZGRBY3Rpb25zKCAgCgogICAgWHRBY3Rpb25MaXN0IAkgLAogICAgQ2FyZGlu YWwgCQkgCgopOwoKZXh0ZXJuIFh0QWN0aW9uSG9va0lkIFh0QXBwQWRkQWN0aW9uSG9vaygKCiAg ICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEFjdGlvbkhvb2tQcm9jIAkgLAogICAgWHRQb2ludGVy IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWN0aW9uSG9vaygKCiAgICBYdEFjdGlvbkhv b2tJZCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QWN0aW9uTGlzdCgKCiAgICBXaWRnZXRDbGFz cwkJICwKICAgIFh0QWN0aW9uTGlzdCoJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4dGVybiB2 b2lkIFh0Q2FsbEFjdGlvblByb2MoCgogICAgV2lkZ2V0CQkgLAogICAgY29uc3QgIGNoYXIqIAkg LAogICAgWEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbAkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0UmVnaXN0ZXJHcmFiQWN0aW9uKAoKICAgIFh0QWN0aW9uUHJvYyAJICwKICAg IGludCAgCQkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgaW50CQkJICwKICAgIGludAkgCQkg CgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRNdWx0aUNsaWNrVGltZSgKCiAgICBEaXNwbGF5KgkJICwK ICAgIGludCAJCSAKCik7CgpleHRlcm4gaW50IFh0R2V0TXVsdGlDbGlja1RpbWUoCgogICAgRGlz cGxheSoJCSAKCik7CgpleHRlcm4gS2V5U3ltIFh0R2V0QWN0aW9uS2V5c3ltKAoKICAgIFhFdmVu dCoJCSAsCiAgICBNb2RpZmllcnMqCQkgCgopOwoKIAoKCgoKCmV4dGVybiB2b2lkIFh0VHJhbnNs YXRlS2V5Y29kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludCAgCQkgLAogICAg TW9kaWZpZXJzIAkJICwKICAgIE1vZGlmaWVycyoJCSAsCiAgICBLZXlTeW0qCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBp bnQgCQkgLAogICAgTW9kaWZpZXJzCQkgLAogICAgTW9kaWZpZXJzKgkJICwKICAgIEtleVN5bSoJ CSAKCik7CgpleHRlcm4gdm9pZCBYdFNldEtleVRyYW5zbGF0b3IoCgogICAgRGlzcGxheSoJCSAs CiAgICBYdEtleVByb2MgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckNhc2VDb252ZXJ0 ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBYdENhc2VQcm9jIAkJICwKICAgIEtleVN5bSAJCSAs CiAgICBLZXlTeW0gCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDb252ZXJ0Q2FzZSgKCiAgICBEaXNw bGF5KgkJICwKICAgIEtleVN5bSAJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgS2V5U3ltKgkJIAoK KTsKCiAKCgoKCgogCgoKCgpleHRlcm4gdm9pZCBYdEFkZEV2ZW50SGFuZGxlcigKCiAgICBXaWRn ZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRs ZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVFdmVudEhh bmRsZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwK ICAgIFh0RXZlbnRIYW5kbGVyIAkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lk IFh0QWRkUmF3RXZlbnRIYW5kbGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1hc2sgCQkg LAogICAgaW50ICAJCSAsCiAgICBYdEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRlciAJCSAK Cik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVJhd0V2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgCQkg LAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRsZXIgCSAs CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudEhhbmRsZXIo CgogICAgV2lkZ2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0 RXZlbnRIYW5kbGVyIAkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0TGlzdFBvc2l0aW9uIAkg CgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRSYXdFdmVudEhhbmRsZXIoCgogICAgV2lkZ2V0IAkJ ICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0RXZlbnRIYW5kbGVyIAkg LAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0TGlzdFBvc2l0aW9uIAkgCgopOwoKZXh0ZXJuIFh0 RXZlbnREaXNwYXRjaFByb2MgWHRTZXRFdmVudERpc3BhdGNoZXIoCgogICAgRGlzcGxheSoJCSAs CiAgICBpbnQJCQkgLAogICAgWHRFdmVudERpc3BhdGNoUHJvYwkgCgopOwoKZXh0ZXJuIEJvb2xl YW4gWHREaXNwYXRjaEV2ZW50VG9XaWRnZXQoCgogICAgV2lkZ2V0CQkgLAogICAgWEV2ZW50KgkJ IAoKKTsKCmV4dGVybiB2b2lkIFh0SW5zZXJ0RXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQJ CSAsCiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRFdmVudEhhbmRsZXIJICwK ICAgIFh0UG9pbnRlcgkJICwKICAgIFh0TGlzdFBvc2l0aW9uCSAKCik7CgpleHRlcm4gdm9pZCBY dFJlbW92ZUV2ZW50VHlwZUhhbmRsZXIoCgogICAgV2lkZ2V0CQkgLAogICAgaW50CQkJICwKICAg IFh0UG9pbnRlcgkJICwKICAgIFh0RXZlbnRIYW5kbGVyCSAsCiAgICBYdFBvaW50ZXIJCSAKCik7 CgpleHRlcm4gRXZlbnRNYXNrIFh0QnVpbGRFdmVudE1hc2soCgogICAgV2lkZ2V0IAkJIAoKKTsK CmV4dGVybiB2b2lkIFh0UmVnaXN0ZXJFeHRlbnNpb25TZWxlY3RvcigKCiAgICBEaXNwbGF5KgkJ ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWHRFeHRlbnNpb25TZWxlY3RQcm9jICAs CiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFkZEdyYWIoCgogICAgV2lkZ2V0 IAkJICwKICAgIGludCAgCQkgLAogICAgaW50ICAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92 ZUdyYWIoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UHJvY2Vzc0V2ZW50KCAg CgogICAgWHRJbnB1dE1hc2sgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBQcm9jZXNzRXZlbnQo CgogICAgWHRBcHBDb250ZXh0IAkJICwKICAgIFh0SW5wdXRNYXNrIAkJIAoKKTsKCmV4dGVybiB2 b2lkIFh0TWFpbkxvb3AoICAKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBNYWluTG9v cCgKCiAgICBYdEFwcENvbnRleHQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRFeHBvc3VyZVRv UmVnaW9uKAoKICAgIFhFdmVudCoJCSAsCiAgICBSZWdpb24gCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRTZXRLZXlib2FyZEZvY3VzKAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldCAJCSAKCik7Cgpl eHRlcm4gV2lkZ2V0IFh0R2V0S2V5Ym9hcmRGb2N1c1dpZGdldCgKCiAgICBXaWRnZXQJCSAKCik7 CgpleHRlcm4gWEV2ZW50KiBYdExhc3RFdmVudFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgkJIAoK KTsKCmV4dGVybiBUaW1lIFh0TGFzdFRpbWVzdGFtcFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgkJ IAoKKTsKCiAKCgoKCgpleHRlcm4gWHRJbnRlcnZhbElkIFh0QWRkVGltZU91dCggIAoKICAgIHVu c2lnbmVkIGxvbmcgCSAsCiAgICBYdFRpbWVyQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIg CQkgCgopOwoKZXh0ZXJuIFh0SW50ZXJ2YWxJZCBYdEFwcEFkZFRpbWVPdXQoCgogICAgWHRBcHBD b250ZXh0IAkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIFh0VGltZXJDYWxsYmFja1Byb2Mg ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVRpbWVPdXQoCgog ICAgWHRJbnRlcnZhbElkIAkgCgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFkZElucHV0KCAgCgog ICAgaW50IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdElucHV0Q2FsbGJhY2tQcm9jICAs CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFwcEFkZElucHV0KAoK ICAgIFh0QXBwQ29udGV4dCAgICAgICAJICwKICAgIGludCAJCSAsCiAgICBYdFBvaW50ZXIgCQkg LAogICAgWHRJbnB1dENhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVy biB2b2lkIFh0UmVtb3ZlSW5wdXQoCgogICAgWHRJbnB1dElkIAkJIAoKKTsKCmV4dGVybiBYdFNp Z25hbElkIFh0QXBwQWRkU2lnbmFsKAoKICAgIFh0QXBwQ29udGV4dCAgICAgICAJICwKICAgIFh0 U2lnbmFsQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRSZW1vdmVTaWduYWwoCgogICAgWHRTaWduYWxJZCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdE5v dGljZVNpZ25hbCgKCiAgICBYdFNpZ25hbElkCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHROZXh0RXZl bnQoICAKCiAgICBYRXZlbnQqIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTmV4dEV2ZW50KAoK ICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFhFdmVudCoJCSAKCik7CgoKCgoKCgpleHRlcm4gWHRJ bnB1dE1hc2sgWHRQZW5kaW5nKCAgCgogICAgdm9pZAoKKTsKCmV4dGVybiBYdElucHV0TWFzayBY dEFwcFBlbmRpbmcoCgogICAgWHRBcHBDb250ZXh0IAkgCgopOwoKZXh0ZXJuIFh0QmxvY2tIb29r SWQgWHRBcHBBZGRCbG9ja0hvb2soCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRCbG9ja0hv b2tQcm9jIAkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQmxv Y2tIb29rKAoKICAgIFh0QmxvY2tIb29rSWQgCSAKCik7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgpleHRlcm4gdm9pZCBYdFJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsK CnZvaWQgWHRVbnJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lk IFh0RGVzdHJveVdpZGdldCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRT ZW5zaXRpdmUoCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRTZXRNYXBwZWRXaGVuTWFuYWdlZCgKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJCSAKCik7 CgpleHRlcm4gV2lkZ2V0IFh0TmFtZVRvV2lkZ2V0KAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25z dCAgY2hhciogCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0V2luZG93VG9XaWRnZXQoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cgCQkgCgopOwoKZXh0ZXJuIFh0UG9pbnRlciBYdEdldENsYXNz RXh0ZW5zaW9uKAoKICAgIFdpZGdldENsYXNzCQkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBYcm1R dWFyawkJICwKICAgIGxvbmcJCSAsCiAgICBDYXJkaW5hbAkJIAoKKTsKCiAKCgoKCgoKCgoKZXh0 ZXJuIEFyZ0xpc3QgWHRNZXJnZUFyZ0xpc3RzKAoKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGlu YWwgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgogCgoKCgoKCgoK ZXh0ZXJuIFh0VmFyQXJnc0xpc3QgWHRWYUNyZWF0ZUFyZ3NMaXN0KAoKICAgIFh0UG9pbnRlcgkJ ICwgLi4uCgopOwoKIAoKCgoKCgoKIAoKZXh0ZXJuIERpc3BsYXkgKlh0RGlzcGxheSgKCiAgICBX aWRnZXQgCQkgCgopOwoKZXh0ZXJuIERpc3BsYXkgKlh0RGlzcGxheU9mT2JqZWN0KAoKICAgIFdp ZGdldCAJCSAKCik7CgpleHRlcm4gU2NyZWVuICpYdFNjcmVlbigKCiAgICBXaWRnZXQgCQkgCgop OwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW5PZk9iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoK ZXh0ZXJuIFdpbmRvdyBYdFdpbmRvdygKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpbmRv dyBYdFdpbmRvd09mT2JqZWN0KAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gU3RyaW5nIFh0 TmFtZSgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpZGdldENsYXNzIFh0U3VwZXJjbGFz cygKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpZGdldENsYXNzIFh0Q2xhc3MoCgogICAg V2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRQYXJlbnQoCgogICAgV2lkZ2V0IAkJIAoK KTsKCgoKCgoKCmV4dGVybiB2b2lkIFh0QWRkQ2FsbGJhY2soCgogICAgV2lkZ2V0IAkJICwKICAg IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdENhbGxiYWNrUHJvYyAJICwKICAgIFh0UG9pbnRlciAJ CSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZUNhbGxiYWNrKAoKICAgIFdpZGdldCAJCSAsCiAg ICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja1Byb2MgCSAsCiAgICBYdFBvaW50ZXIg CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAg IGNvbnN0ICBjaGFyKiAJICwKICAgIFh0Q2FsbGJhY2tMaXN0IAkgCgopOwoKZXh0ZXJuIHZvaWQg WHRSZW1vdmVDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAs CiAgICBYdENhbGxiYWNrTGlzdCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWxsQ2FsbGJh Y2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgCgopOwoKCmV4dGVybiB2 b2lkIFh0Q2FsbENhbGxiYWNrcygKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJ ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxDYWxsYmFja0xpc3Qo CgogICAgV2lkZ2V0CQkgLAogICAgWHRDYWxsYmFja0xpc3QgCSAsCiAgICBYdFBvaW50ZXIgCQkg CgopOwoKZXh0ZXJuIFh0Q2FsbGJhY2tTdGF0dXMgWHRIYXNDYWxsYmFja3MoCgogICAgV2lkZ2V0 IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAKCik7CgogCgoKCgoKCmV4dGVybiBYdEdlb21ldHJ5 UmVzdWx0IFh0TWFrZUdlb21ldHJ5UmVxdWVzdCgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRXaWRn ZXRHZW9tZXRyeSoJICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCSAKCik7CgpleHRlcm4gWHRHZW9t ZXRyeVJlc3VsdCBYdFF1ZXJ5R2VvbWV0cnkoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0V2lkZ2V0 R2VvbWV0cnkqCSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgCgopOwoKZXh0ZXJuIFdpZGdldCBY dENyZWF0ZVBvcHVwU2hlbGwoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3Mg CSAsCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7 CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0ICBjaGFyKiAJ ICwKICAgIFdpZGdldENsYXNzCQkgLAogICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJu IHZvaWQgWHRQb3B1cCgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRHcmFiS2luZCAJCSAKCik7Cgpl eHRlcm4gdm9pZCBYdFBvcHVwU3ByaW5nTG9hZGVkKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRl cm4gdm9pZCBYdENhbGxiYWNrTm9uZSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJ ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9uZXhjbHVz aXZlKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRQb2ludGVyIAkJ IAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tFeGNsdXNpdmUoCgogICAgV2lkZ2V0IAkJICwK ICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRQ b3Bkb3duKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrUG9wZG93 bigKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0UG9pbnRlciAJCSAK Cik7CgpleHRlcm4gdm9pZCBYdE1lbnVQb3B1cEFjdGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAg WEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4g V2lkZ2V0IFh0Q3JlYXRlV2lkZ2V0KAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBXaWRnZXRD bGFzcyAJICwKICAgIFdpZGdldCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJ IAoKKTsKCmV4dGVybiBXaWRnZXQgWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0KAoKICAgIGNvbnN0ICBj aGFyKiAgCSAsCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFdpZGdldCAJCSAsCiAgICBBcmdMaXN0 IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUNyZWF0ZVdpZGdl dCgKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIFdpZGdldAkJ ICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoCgog ICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBXaWRnZXQJCSAsCiAg ICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlQXBwbGljYXRpb25TaGVsbCggIAoKICAg IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIEFyZ0xpc3QgCQkgLAog ICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdEFwcENyZWF0ZVNoZWxsKAoKICAg IGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzIAkg LAogICAgRGlzcGxheSoJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsK CmV4dGVybiBXaWRnZXQgWHRWYUFwcENyZWF0ZVNoZWxsKAoKICAgIGNvbnN0ICBjaGFyKiAJICwK ICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzCQkgLAogICAgRGlzcGxheSoJCSAs CiAgICAuLi4KCik7CgogCgoKCgoKZXh0ZXJuIHZvaWQgWHRUb29sa2l0SW5pdGlhbGl6ZSgKCiAg ICB2b2lkCgopOwoKZXh0ZXJuIFh0TGFuZ3VhZ2VQcm9jIFh0U2V0TGFuZ3VhZ2VQcm9jKAoKICAg IFh0QXBwQ29udGV4dAkgLAogICAgWHRMYW5ndWFnZVByb2MJICwKICAgIFh0UG9pbnRlcgkJIAoK KTsKCmV4dGVybiB2b2lkIFh0RGlzcGxheUluaXRpYWxpemUoCgogICAgWHRBcHBDb250ZXh0IAkg LAogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciog CSAsCiAgICBYcm1PcHRpb25EZXNjUmVjKiAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIGludCoJ CSAsCiAgICBjaGFyKioJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0T3BlbkFwcGxpY2F0aW9uKAoK ICAgIFh0QXBwQ29udGV4dCoJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9wdGlvbkRl c2NMaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgaW50KgkJICwKICAgIFN0cmluZyoJCSAs CiAgICBTdHJpbmcqCQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBBcmdMaXN0IAkJICwKICAg IENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYU9wZW5BcHBsaWNhdGlvbigKCiAg ICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYcm1PcHRpb25EZXNj TGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBpbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAg IFN0cmluZyoJCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRn ZXQgWHRBcHBJbml0aWFsaXplKCAgCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29uc3QgIGNo YXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY0xpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBp bnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBBcmdMaXN0IAkJICwK ICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFwcEluaXRpYWxpemUoICAK CiAgICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYcm1PcHRpb25E ZXNjTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBpbnQqCQkgLAogICAgU3RyaW5nKgkJICwK ICAgIFN0cmluZyoJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0SW5pdGlhbGl6ZSgg IAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHJtT3B0 aW9uRGVzY1JlYyogCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioq CQkgCgopOwoKZXh0ZXJuIERpc3BsYXkgKlh0T3BlbkRpc3BsYXkoCgogICAgWHRBcHBDb250ZXh0 IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3Qg IGNoYXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY1JlYyoJICwKICAgIENhcmRpbmFsIAkJICwKICAg IGludCoJCSAsCiAgICBjaGFyKioJCSAKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0Q3JlYXRl QXBwbGljYXRpb25Db250ZXh0KAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBYdEFwcFNldEZh bGxiYWNrUmVzb3VyY2VzKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFN0cmluZyoJCSAKCik7 CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoCgogICAgWHRBcHBDb250 ZXh0IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3MoCgogICAgV2lk Z2V0Q2xhc3MgCSAKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0V2lkZ2V0VG9BcHBsaWNhdGlv bkNvbnRleHQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBYdEFwcENvbnRleHQgWHREaXNw bGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gWHJt RGF0YWJhc2UgWHREYXRhYmFzZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBYcm1EYXRh YmFzZSBYdFNjcmVlbkRhdGFiYXNlKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gdm9pZCBY dENsb3NlRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QXBw bGljYXRpb25SZXNvdXJjZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAg ICBYdFJlc291cmNlTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAog ICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRWYUdldEFwcGxpY2F0aW9uUmVzb3Vy Y2VzKAoKICAgIFdpZGdldAkJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0UmVzb3VyY2VMaXN0 CSAsCiAgICBDYXJkaW5hbAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U3VicmVz b3VyY2VzKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgY29uc3QgIGNo YXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdFJlc291cmNlTGlzdCAJICwKICAg IENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRWYUdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQJCSAsCiAgICBYdFBvaW50 ZXIJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYdFJl c291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBY dFNldFZhbHVlcygKCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5h bCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFZhU2V0VmFsdWVzKAoKICAgIFdpZGdldAkJICwKICAg IC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0VmFsdWVzKAoKICAgIFdpZGdldCAJCSAsCiAgICBB cmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRWYWx1 ZXMoCgogICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRTdWJ2YWx1 ZXMoCgogICAgWHRQb2ludGVyIAkJICwKICAgIFh0UmVzb3VyY2VMaXN0IAkgLAogICAgQ2FyZGlu YWwgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gdm9p ZCBYdFZhU2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0UmVzb3VyY2VMaXN0 CSAsCiAgICBDYXJkaW5hbAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U3VidmFs dWVzKAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlc291cmNlTGlzdCAJICwKICAgIENhcmRp bmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZv aWQgWHRWYUdldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIJCSAsCiAgICBYdFJlc291cmNlTGlz dAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFJlc291 cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFh0UmVzb3VyY2VMaXN0KgkgLAogICAg Q2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRDb25zdHJhaW50UmVzb3VyY2VMaXN0 KAoKICAgIFdpZGdldENsYXNzIAkgLAogICAgWHRSZXNvdXJjZUxpc3QqCSAsCiAgICBDYXJkaW5h bCoJCSAKCik7CgoKCgoKCgoKCgoKIyAyMDc2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0ludHJp bnNpYy5oIgoKCgoKCgoKCgoKCgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9YdENoZWNrcG9pbnRU b2tlblJlYyB7CiAgICBpbnQJCXNhdmVfdHlwZTsKICAgIGludAkJaW50ZXJhY3Rfc3R5bGU7CiAg ICBCb29sZWFuCXNodXRkb3duOwogICAgQm9vbGVhbglmYXN0OwogICAgQm9vbGVhbgljYW5jZWxf c2h1dGRvd247CiAgICBpbnQJCXBoYXNlOwogICAgaW50CQlpbnRlcmFjdF9kaWFsb2dfdHlwZTsJ IAogICAgQm9vbGVhbglyZXF1ZXN0X2NhbmNlbDsJCSAKICAgIEJvb2xlYW4JcmVxdWVzdF9uZXh0 X3BoYXNlOwkgCiAgICBCb29sZWFuCXNhdmVfc3VjY2VzczsJCSAKICAgIGludAkJdHlwZTsJCSAK ICAgIFdpZGdldAl3aWRnZXQ7CQkgCn0gWHRDaGVja3BvaW50VG9rZW5SZWMsICpYdENoZWNrcG9p bnRUb2tlbjsKClh0Q2hlY2twb2ludFRva2VuIFh0U2Vzc2lvbkdldFRva2VuKAoKICAgIFdpZGdl dAkJIAoKKTsKCnZvaWQgWHRTZXNzaW9uUmV0dXJuVG9rZW4oCgogICAgWHRDaGVja3BvaW50VG9r ZW4JIAoKKTsKCiAKCgoKCgpleHRlcm4gWHRFcnJvck1zZ0hhbmRsZXIgWHRBcHBTZXRFcnJvck1z Z0hhbmRsZXIoCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRFcnJvck1zZ0hhbmRsZXIgCSAK Cik7CgpleHRlcm4gdm9pZCBYdFNldEVycm9yTXNnSGFuZGxlciggIAoKICAgIFh0RXJyb3JNc2dI YW5kbGVyIAkgCgopOwoKZXh0ZXJuIFh0RXJyb3JNc2dIYW5kbGVyIFh0QXBwU2V0V2FybmluZ01z Z0hhbmRsZXIoCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRFcnJvck1zZ0hhbmRsZXIgCSAK Cik7CgpleHRlcm4gdm9pZCBYdFNldFdhcm5pbmdNc2dIYW5kbGVyKCAgCgogICAgWHRFcnJvck1z Z0hhbmRsZXIgCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcEVycm9yTXNnKAoKICAgIFh0QXBwQ29u dGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBj b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBTdHJpbmcqCQkgLAogICAg Q2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRFcnJvck1zZyggIAoKICAgIGNvbnN0ICBj aGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBj b25zdCAgY2hhciogCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRBcHBXYXJuaW5nTXNnKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0 ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwK ICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHRXYXJuaW5nTXNnKCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAg Y29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkg LAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4dGVybiBYdEVycm9ySGFu ZGxlciBYdEFwcFNldEVycm9ySGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEVy cm9ySGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0RXJyb3JIYW5kbGVyKCAgCgogICAg WHRFcnJvckhhbmRsZXIgCSAKCik7CgpleHRlcm4gWHRFcnJvckhhbmRsZXIgWHRBcHBTZXRXYXJu aW5nSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEVycm9ySGFuZGxlciAJIAoK KTsKCmV4dGVybiB2b2lkIFh0U2V0V2FybmluZ0hhbmRsZXIoICAKCiAgICBYdEVycm9ySGFuZGxl ciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwRXJyb3IoCgogICAgWHRBcHBDb250ZXh0IAkgLAog ICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRFcnJvciggIAoKICAgIGNvbnN0 ICBjaGFyKiAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwV2FybmluZygKCiAgICBYdEFwcENvbnRl eHQgCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdFdhcm5pbmcoICAK CiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgKlh0QXBwR2V0RXJy b3JEYXRhYmFzZSgKCiAgICBYdEFwcENvbnRleHQgCSAKCik7CgpleHRlcm4gWHJtRGF0YWJhc2Ug Klh0R2V0RXJyb3JEYXRhYmFzZSggIAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBYdEFwcEdl dEVycm9yRGF0YWJhc2VUZXh0KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0ICBjaGFy KiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0 ICBjaGFyKiAgCSAsCiAgICBTdHJpbmcgCQkgLAogICAgaW50IAkJICwKICAgIFhybURhdGFiYXNl IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRFcnJvckRhdGFiYXNlVGV4dCggIAoKICAgIGNvbnN0 ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAg IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBTdHJpbmcgCQkgLAogICAgaW50IAkJIAoKKTsKCiAKCgoK CgpleHRlcm4gY2hhciAqWHRNYWxsb2MoCgogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIGNo YXIgKlh0Q2FsbG9jKAoKICAgIENhcmRpbmFsCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0 ZXJuIGNoYXIgKlh0UmVhbGxvYygKCiAgICBjaGFyKiAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7 CgpleHRlcm4gdm9pZCBYdEZyZWUoCgogICAgY2hhcioJCSAKCik7CgojIDIzNTkgIi91c3IvWDEx UjYvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiCgoKCgoKCiAKCgoKCgpleHRlcm4gWHRXb3JrUHJv Y0lkIFh0QWRkV29ya1Byb2MoICAKCiAgICBYdFdvcmtQcm9jIAkJICwKICAgIFh0UG9pbnRlciAJ CSAKCik7CgpleHRlcm4gWHRXb3JrUHJvY0lkIFh0QXBwQWRkV29ya1Byb2MoCgogICAgWHRBcHBD b250ZXh0IAkgLAogICAgWHRXb3JrUHJvYyAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0 ZXJuIHZvaWQgIFh0UmVtb3ZlV29ya1Byb2MoCgogICAgWHRXb3JrUHJvY0lkIAkgCgopOwoKCiAK CgoKCmV4dGVybiBHQyBYdEdldEdDKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdEdDTWFzayAJCSAs CiAgICBYR0NWYWx1ZXMqIAkJIAoKKTsKCmV4dGVybiBHQyBYdEFsbG9jYXRlR0MoCgogICAgV2lk Z2V0IAkJICwKICAgIENhcmRpbmFsCQkgLAogICAgWHRHQ01hc2sgCQkgLAogICAgWEdDVmFsdWVz KiAJCSAsCiAgICBYdEdDTWFzawkJICwKICAgIFh0R0NNYXNrCQkgCgopOwoKIAoKCgpleHRlcm4g dm9pZCBYdERlc3Ryb3lHQyggIAoKICAgIEdDIAkJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVh c2VHQygKCiAgICBXaWRnZXQgCQkgLAogICAgR0MgCQkJIAoKKTsKCgoKZXh0ZXJuIHZvaWQgWHRB cHBSZWxlYXNlQ2FjaGVSZWZzKAoKICAgIFh0QXBwQ29udGV4dAkgLAogICAgWHRDYWNoZVJlZioJ CSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrUmVsZWFzZUNhY2hlUmVmKAoKICAgIFdpZGdl dCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAkgCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJu IHZvaWQgWHRDYWxsYmFja1JlbGVhc2VDYWNoZVJlZkxpc3QoCgogICAgV2lkZ2V0IAkJICwKICAg IFh0UG9pbnRlciAJCSAsCSAKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFNl dFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIFdpZGdldCAJCSAsCiAgICBXaWRnZXQqCQkgLAogICAg Q2FyZGluYWwJCSAKCik7CgpleHRlcm4gU3RyaW5nIFh0RmluZEZpbGUoCgogICAgY29uc3QgIGNo YXIqIAkgLAogICAgU3Vic3RpdHV0aW9uCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBYdEZpbGVQ cmVkaWNhdGUJIAoKKTsKCmV4dGVybiBTdHJpbmcgWHRSZXNvbHZlUGF0aG5hbWUoCgogICAgRGlz cGxheSoJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBj b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBTdWJzdGl0dXRpb24JICwK ICAgIENhcmRpbmFsCQkgLAogICAgWHRGaWxlUHJlZGljYXRlIAkgCgopOwoKIAoKCgoKCgogICAg CmV4dGVybiB2b2lkIFh0RGlzb3duU2VsZWN0aW9uKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9t IAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25WYWx1ZSgK CiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBBdG9tIAkJICwKICAgIFh0U2VsZWN0 aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgVGltZSAJCSAKCik7Cgpl eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlcygKCiAgICBXaWRnZXQgCQkgLAogICAgQXRv bSAJCSAsCiAgICBBdG9tKgkJICwKICAgIGludCAJCSAsCiAgICBYdFNlbGVjdGlvbkNhbGxiYWNr UHJvYyAgLAogICAgWHRQb2ludGVyKgkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRBcHBTZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIHVuc2ln bmVkIGxvbmcgCSAKCik7CgpleHRlcm4gdm9pZCBYdFNldFNlbGVjdGlvblRpbWVvdXQoICAKCiAg ICB1bnNpZ25lZCBsb25nIAkgCgopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWHRBcHBHZXRTZWxl Y3Rpb25UaW1lb3V0KAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4dGVybiB1bnNpZ25lZCBs b25nIFh0R2V0U2VsZWN0aW9uVGltZW91dCggIAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFNlbGVj dGlvblJlcXVlc3RFdmVudCAqWHRHZXRTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldCAJCSAs CiAgICBBdG9tIAkJICwKICAgIFh0UmVxdWVzdElkIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRT ZWxlY3Rpb25WYWx1ZUluY3JlbWVudGFsKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tIAkJICwK ICAgIEF0b20gCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRl ciAJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWVz SW5jcmVtZW50YWwoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbSoJCSAs CiAgICBpbnQgCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRl cioJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0U2VsZWN0aW9uUGFyYW1l dGVycygKCiAgICBXaWRnZXQJCSAsCiAgICBBdG9tCQkgLAogICAgQXRvbQkJICwKICAgIFh0UG9p bnRlcgkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9p ZCBYdEdldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJICwK ICAgIFh0UmVxdWVzdElkCQkgLAogICAgQXRvbSoJCSAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAg dW5zaWduZWQgbG9uZyoJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdENyZWF0ZVNl bGVjdGlvblJlcXVlc3QoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiB2 b2lkIFh0U2VuZFNlbGVjdGlvblJlcXVlc3QoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJICwK ICAgIFRpbWUJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbmNlbFNlbGVjdGlvblJlcXVlc3QoCgog ICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBBdG9tIFh0UmVzZXJ2ZVByb3Bl cnR5QXRvbSgKCiAgICBXaWRnZXQJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVhc2VQcm9wZXJ0 eUF0b20oCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R3Jh YktleSgKCiAgICBXaWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50ICAJCSAsCiAgICBNb2RpZmll cnMJIAkgLAogICAgaW50ICAJCSAsCiAgICBpbnQgCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVy biB2b2lkIFh0VW5ncmFiS2V5KAoKICAgIFdpZGdldCAJCSAsCiAgICB1bnNpZ25lZCBpbnQgIAkJ ICwKICAgIE1vZGlmaWVycwkgCSAKCik7CgpleHRlcm4gaW50IFh0R3JhYktleWJvYXJkKAoKICAg IFdpZGdldCAJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgLAogICAg VGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYktleWJvYXJkKAoKICAgIFdpZGdldCAJ CSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R3JhYkJ1dHRvbigKCiAgICBXaWRn ZXQgCQkgLAogICAgaW50IAkJICwKICAgIE1vZGlmaWVycwkgCSAsCiAgICBpbnQgIAkJICwKICAg IHVuc2lnbmVkIGludAkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAsCiAgICBXaW5kb3cgCQkg LAogICAgQ3Vyc29yIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5ncmFiQnV0dG9uKAoKICAgIFdp ZGdldCAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIE1vZGlmaWVycwkgCSAKCik7CgpleHRl cm4gaW50IFh0R3JhYlBvaW50ZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAgCQkgLAogICAg dW5zaWduZWQgaW50CSAsCiAgICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIFdpbmRvdyAJCSAs CiAgICBDdXJzb3IgCQkgLAogICAgVGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYlBv aW50ZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRH ZXRBcHBsaWNhdGlvbk5hbWVBbmRDbGFzcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFN0cmluZyoJ CSAsCiAgICBTdHJpbmcqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckRyYXdhYmxlKAoK ICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBXaWRnZXQJCSAKCik7CgpleHRl cm4gdm9pZCBYdFVucmVnaXN0ZXJEcmF3YWJsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh YmxlCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdEhvb2tzT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkq CQkgCgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lk Z2V0OwogICAgQXJnTGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDcmVhdGVI b29rRGF0YVJlYywgKlh0Q3JlYXRlSG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJp bmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdFBvaW50ZXIgZXZlbnRfZGF0YTsKICAg IENhcmRpbmFsIG51bV9ldmVudF9kYXRhOwp9IFh0Q2hhbmdlSG9va0RhdGFSZWMsICpYdENoYW5n ZUhvb2tEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgV2lkZ2V0IG9sZCwgcmVxOwogICAgQXJn TGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDaGFuZ2VIb29rU2V0VmFsdWVz RGF0YVJlYywgKlh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBTdHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdEdlb21ldHJ5TWFzayBjaGFu Z2VNYXNrOwogICAgWFdpbmRvd0NoYW5nZXMgY2hhbmdlczsKfSBYdENvbmZpZ3VyZUhvb2tEYXRh UmVjLCAqWHRDb25maWd1cmVIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFN0cmluZyB0 eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkqIHJlcXVlc3Q7CiAg ICBYdFdpZGdldEdlb21ldHJ5KiByZXBseTsKICAgIFh0R2VvbWV0cnlSZXN1bHQgcmVzdWx0Owp9 IFh0R2VvbWV0cnlIb29rRGF0YVJlYywgKlh0R2VvbWV0cnlIb29rRGF0YTsKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKfSBYdERlc3Ryb3lIb29r RGF0YVJlYywgKlh0RGVzdHJveUhvb2tEYXRhOwoKZXh0ZXJuIHZvaWQgWHRHZXREaXNwbGF5cygK CiAgICBYdEFwcENvbnRleHQJICwKICAgIERpc3BsYXkqKioJCSAsCiAgICBDYXJkaW5hbCoJCSAK Cik7CgpleHRlcm4gQm9vbGVhbiBYdFRvb2xraXRUaHJlYWRJbml0aWFsaXplKAoKICAgIHZvaWQK Cik7CgpleHRlcm4gdm9pZCBYdEFwcFNldEV4aXRGbGFnKAoKICAgIFh0QXBwQ29udGV4dAkgCgop OwoKZXh0ZXJuIEJvb2xlYW4gWHRBcHBHZXRFeGl0RmxhZygKCiAgICBYdEFwcENvbnRleHQJIAoK KTsKCmV4dGVybiB2b2lkIFh0QXBwTG9jaygKCiAgICBYdEFwcENvbnRleHQJIAoKKTsKCmV4dGVy biB2b2lkIFh0QXBwVW5sb2NrKAoKICAgIFh0QXBwQ29udGV4dAkgCgopOwoKIAoKCgoKIAoKZXh0 ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0FjY2VsZXJhdG9yVGFibGUoCgogICAgRGlzcGxheSoJ ICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQ dHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9v bGVhbiBYdEN2dFN0cmluZ1RvQXRvbSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIg ICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQ dHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9C b29sKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCog ICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVy KgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Jvb2xlYW4oCgogICAgRGlzcGxh eSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFs dWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4g Qm9vbGVhbiBYdEN2dFN0cmluZ1RvQ29tbWFuZEFyZ0FycmF5KAoKICAgIERpc3BsYXkqCSAsCiAg ICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAs CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4g WHRDdnRTdHJpbmdUb0N1cnNvcigKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJ IAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJ ICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9EaW1l bnNpb24oCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFs KiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50 ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGlyZWN0b3J5U3RyaW5nKAoK ICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkK ICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgop OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Rpc3BsYXkoCgogICAgRGlzcGxheSoJICwK ICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJ ICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVh biBYdEN2dFN0cmluZ1RvRmlsZSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJ IAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJ ICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9GbG9h dCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAg ICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJ IAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250KAoKICAgIERpc3BsYXkqCSAs CiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRy CSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xl YW4gWHRDdnRTdHJpbmdUb0ZvbnRTZXQoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv Rm9udFN0cnVjdCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2Fy ZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0 UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9HcmF2aXR5KAoKICAg IERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAogICAgQ2FyZGluYWwqICAgICwJCiAgICBY cm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4 dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Jbml0aWFsU3RhdGUoCgogICAgRGlzcGxheSoJICwK ICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJ ICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVh biBYdEN2dFN0cmluZ1RvSW50KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkg CiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkg LAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1BpeGVs KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAg LAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkg CgopOwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvUmVzdGFydFN0eWxlKAoKICAgIERp c3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhy bVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0 ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Nob3J0KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1W YWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBY cm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRT dHJpbmdUb1RyYW5zbGF0aW9uVGFibGUoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv VW5zaWduZWRDaGFyKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Zpc3VhbCgKCiAg ICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAg ICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsK CiAKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sKAoKICAgIERpc3BsYXkqCSAsCiAgICBY cm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAg ICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRD dnRJbnRUb0Jvb2xlYW4oCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAg IENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAg ICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvQ29sb3IoCgogICAg RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgoK CmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9GbG9hdCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJt VmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0 SW50VG9Gb250KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJk aW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQ b2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRUb1BpeGVsKAoKICAgIERpc3Bs YXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZh bHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJu IEJvb2xlYW4gWHRDdnRJbnRUb1BpeG1hcCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQ dHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFs dWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCgoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRU b1Nob3J0KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5h bCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2lu dGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRUb1Vuc2lnbmVkQ2hhcigKCiAgICBE aXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBY cm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCiAK CmV4dGVybiBCb29sZWFuIFh0Q3Z0Q29sb3JUb1BpeGVsKAoKICAgIERpc3BsYXkqCSAsCiAgICBY cm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAg ICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKIAoKCgoKfSAKCgogCiMgMjMg Ii91c3IvWDExUjYvaW5jbHVkZS9YbS9YbS5oIiAyCgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9Y MTEvU2hlbGwuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1NNL1NNbGliLmgiIDEKIAoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL1gxMVI2L2luY2x1 ZGUvWDExL1NNL1NNLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK IAoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzcgIi91c3Iv WDExUjYvaW5jbHVkZS9YMTEvU00vU01saWIuaCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUv WDExL0lDRS9JQ0VsaWIuaCIgMQogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL0lDRS9JQ0UuaCIgMQogCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDM1ICIvdXNyL1gxMVI2L2lu Y2x1ZGUvWDExL0lDRS9JQ0VsaWIuaCIgMgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKkljZVBvaW50 ZXI7CgoKCgp0eXBlZGVmIGVudW0gewogICAgSWNlUG9BdXRoSGF2ZVJlcGx5LAogICAgSWNlUG9B dXRoUmVqZWN0ZWQsCiAgICBJY2VQb0F1dGhGYWlsZWQsCiAgICBJY2VQb0F1dGhEb25lQ2xlYW51 cAp9IEljZVBvQXV0aFN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJY2VQYUF1dGhDb250aW51 ZSwKICAgIEljZVBhQXV0aEFjY2VwdGVkLAogICAgSWNlUGFBdXRoUmVqZWN0ZWQsCiAgICBJY2VQ YUF1dGhGYWlsZWQKfSBJY2VQYUF1dGhTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQ29u bmVjdFBlbmRpbmcsCiAgICBJY2VDb25uZWN0QWNjZXB0ZWQsCiAgICBJY2VDb25uZWN0UmVqZWN0 ZWQsCiAgICBJY2VDb25uZWN0SU9FcnJvcgp9IEljZUNvbm5lY3RTdGF0dXM7Cgp0eXBlZGVmIGVu dW0gewogICAgSWNlUHJvdG9jb2xTZXR1cFN1Y2Nlc3MsCiAgICBJY2VQcm90b2NvbFNldHVwRmFp bHVyZSwKICAgIEljZVByb3RvY29sU2V0dXBJT0Vycm9yLAogICAgSWNlUHJvdG9jb2xBbHJlYWR5 QWN0aXZlCn0gSWNlUHJvdG9jb2xTZXR1cFN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJY2VB Y2NlcHRTdWNjZXNzLAogICAgSWNlQWNjZXB0RmFpbHVyZSwKICAgIEljZUFjY2VwdEJhZE1hbGxv Ywp9IEljZUFjY2VwdFN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJY2VDbG9zZWROb3csCiAg ICBJY2VDbG9zZWRBU0FQLAogICAgSWNlQ29ubmVjdGlvbkluVXNlLAogICAgSWNlU3RhcnRlZFNo dXRkb3duTmVnb3RpYXRpb24KfSBJY2VDbG9zZVN0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBJ Y2VQcm9jZXNzTWVzc2FnZXNTdWNjZXNzLAogICAgSWNlUHJvY2Vzc01lc3NhZ2VzSU9FcnJvciwK ICAgIEljZVByb2Nlc3NNZXNzYWdlc0Nvbm5lY3Rpb25DbG9zZWQKfSBJY2VQcm9jZXNzTWVzc2Fn ZXNTdGF0dXM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBsb25nCXNlcXVlbmNlX29m X3JlcXVlc3Q7CiAgICBpbnQJCQltYWpvcl9vcGNvZGVfb2ZfcmVxdWVzdDsKICAgIGludAkJCW1p bm9yX29wY29kZV9vZl9yZXF1ZXN0OwogICAgSWNlUG9pbnRlcgkJcmVwbHk7Cn0gSWNlUmVwbHlX YWl0SW5mbzsKCnR5cGVkZWYgc3RydWN0IF9JY2VDb25uICpJY2VDb25uOwp0eXBlZGVmIHN0cnVj dCBfSWNlTGlzdGVuT2JqICpJY2VMaXN0ZW5PYmo7Cgp0eXBlZGVmIHZvaWQgKCpJY2VXYXRjaFBy b2MpICgKCiAgICBJY2VDb25uCQkgLAogICAgSWNlUG9pbnRlcgkJICwKICAgIGludCAJCSAsCiAg ICBJY2VQb2ludGVyICoJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBvUHJvY2Vzc01zZ1Byb2Mp ICgKCiAgICBJY2VDb25uIAkJICwKICAgIEljZVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAg dW5zaWduZWQgbG9uZwkgLAogICAgaW50IAkJICwKICAgIEljZVJlcGx5V2FpdEluZm8gKiAgICwK ICAgIGludCAgKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBhUHJvY2Vzc01zZ1Byb2MpICgK CiAgICBJY2VDb25uIAkJICwKICAgIEljZVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgdW5z aWduZWQgbG9uZwkgLAogICAgaW50IAkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludAkJ CSBtYWpvcl92ZXJzaW9uOwogICAgaW50CQkJIG1pbm9yX3ZlcnNpb247CiAgICBJY2VQb1Byb2Nl c3NNc2dQcm9jICBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBvVmVyc2lvblJlYzsKCnR5cGVkZWYg c3RydWN0IHsKICAgIGludAkJCSBtYWpvcl92ZXJzaW9uOwogICAgaW50CQkJIG1pbm9yX3ZlcnNp b247CiAgICBJY2VQYVByb2Nlc3NNc2dQcm9jICBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBhVmVy c2lvblJlYzsKCnR5cGVkZWYgSWNlUG9BdXRoU3RhdHVzICgqSWNlUG9BdXRoUHJvYykgKAoKICAg IEljZUNvbm4JCSAsCiAgICBJY2VQb2ludGVyICoJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkg LAogICAgaW50CQkJICwKICAgIEljZVBvaW50ZXIJCSAsCiAgICBpbnQgKgkJICwKICAgIEljZVBv aW50ZXIgKgkgLAogICAgY2hhciAqKgkJIAoKKTsKCnR5cGVkZWYgSWNlUGFBdXRoU3RhdHVzICgq SWNlUGFBdXRoUHJvYykgKAoKICAgIEljZUNvbm4JCSAsCiAgICBJY2VQb2ludGVyICoJICwKICAg IGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgSWNlUG9pbnRlcgkJICwKICAgIGludCAqCQkgLAog ICAgSWNlUG9pbnRlciAqCSAsCiAgICBjaGFyICoqCQkgCgopOwoKdHlwZWRlZiBpbnQgICgqSWNl SG9zdEJhc2VkQXV0aFByb2MpICgKCiAgICBjaGFyICoJCSAKCik7Cgp0eXBlZGVmIGludCAgKCpJ Y2VQcm90b2NvbFNldHVwUHJvYykgKAoKICAgIEljZUNvbm4gCQkgLAogICAgaW50CQkJICwKICAg IGludAkJCSAsCiAgICBjaGFyICoJCSAsCiAgICBjaGFyICoJCSAsCiAgICBJY2VQb2ludGVyICoJ ICwKICAgIGNoYXIgKioJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VQcm90b2NvbEFjdGl2YXRl UHJvYykgKAoKICAgIEljZUNvbm4gCQkgLAogICAgSWNlUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYg dm9pZCAoKkljZUlPRXJyb3JQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAKCik7Cgp0eXBlZGVmIHZv aWQgKCpJY2VQaW5nUmVwbHlQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAsCiAgICBJY2VQb2ludGVy CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlRXJyb3JIYW5kbGVyKSAoCgogICAgSWNlQ29ubiAJ CSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcgCSAsCiAgICBp bnQgCQkgLAogICAgaW50CQkJICwKICAgIEljZVBvaW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQg KCpJY2VJT0Vycm9ySGFuZGxlcikgKAoKICAgIEljZUNvbm4gCQkgCgopOwoKCiAKCgoKZXh0ZXJu ICJDIiB7IAoKZXh0ZXJuIGludCBJY2VSZWdpc3RlckZvclByb3RvY29sU2V0dXAgKAoKICAgIGNo YXIgKgkJCSAsCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIGludAkJCQkgLAog ICAgSWNlUG9WZXJzaW9uUmVjICoJCSAsCiAgICBpbnQJCQkJICwKICAgIGNoYXIgKioJCQkgLAog ICAgSWNlUG9BdXRoUHJvYyAqCQkgLAogICAgSWNlSU9FcnJvclByb2MJCSAKCik7CgpleHRlcm4g aW50IEljZVJlZ2lzdGVyRm9yUHJvdG9jb2xSZXBseSAoCgogICAgY2hhciAqCQkJICwKICAgIGNo YXIgKgkJCSAsCiAgICBjaGFyICoJCQkgLAogICAgaW50CQkJCSAsCiAgICBJY2VQYVZlcnNpb25S ZWMgKgkJICwKICAgIGludAkJCQkgLAogICAgY2hhciAqKgkJCSAsCiAgICBJY2VQYUF1dGhQcm9j ICoJCSAsCiAgICBJY2VIb3N0QmFzZWRBdXRoUHJvYwkgLAogICAgSWNlUHJvdG9jb2xTZXR1cFBy b2MJICwKICAgIEljZVByb3RvY29sQWN0aXZhdGVQcm9jCSAsCiAgICBJY2VJT0Vycm9yUHJvYwkJ IAoKKTsKCmV4dGVybiBJY2VDb25uIEljZU9wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICoJCSAs CiAgICBJY2VQb2ludGVyCQkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg LAogICAgY2hhciAqCQkgCgopOwoKZXh0ZXJuIEljZVBvaW50ZXIgSWNlR2V0Q29ubmVjdGlvbkNv bnRleHQgKAoKICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gaW50ICBJY2VMaXN0ZW5Gb3JDb25u ZWN0aW9ucyAoCgogICAgaW50ICoJCSAsCiAgICBJY2VMaXN0ZW5PYmogKioJICwKICAgIGludAkJ CSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gaW50ICBJY2VMaXN0ZW5Gb3JXZWxsS25vd25D b25uZWN0aW9ucyAoCgogICAgY2hhciAqCQkgLAogICAgaW50ICoJCSAsCiAgICBJY2VMaXN0ZW5P YmogKioJICwKICAgIGludAkJCSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gaW50IEljZUdl dExpc3RlbkNvbm5lY3Rpb25OdW1iZXIgKAoKICAgIEljZUxpc3Rlbk9iagkgCgopOwoKZXh0ZXJu IGNoYXIgKkljZUdldExpc3RlbkNvbm5lY3Rpb25TdHJpbmcgKAoKICAgIEljZUxpc3Rlbk9iagkg CgopOwoKZXh0ZXJuIGNoYXIgKkljZUNvbXBvc2VOZXR3b3JrSWRMaXN0ICgKCiAgICBpbnQJCQkg LAogICAgSWNlTGlzdGVuT2JqICoJIAoKKTsKCmV4dGVybiB2b2lkIEljZUZyZWVMaXN0ZW5PYmpz ICgKCiAgICBpbnQJCQkgLAogICAgSWNlTGlzdGVuT2JqICoJIAoKKTsKCmV4dGVybiB2b2lkIElj ZVNldEhvc3RCYXNlZEF1dGhQcm9jICgKCiAgICBJY2VMaXN0ZW5PYmoJCSAsCiAgICBJY2VIb3N0 QmFzZWRBdXRoUHJvYyAgIAkgCgopOwoKZXh0ZXJuIEljZUNvbm4gSWNlQWNjZXB0Q29ubmVjdGlv biAoCgogICAgSWNlTGlzdGVuT2JqCSAsCiAgICBJY2VBY2NlcHRTdGF0dXMgKgkgCgopOwoKZXh0 ZXJuIHZvaWQgSWNlU2V0U2h1dGRvd25OZWdvdGlhdGlvbiAoCgogICAgSWNlQ29ubgkJICwKICAg IGludCAJCSAKCik7CgpleHRlcm4gaW50ICBJY2VDaGVja1NodXRkb3duTmVnb3RpYXRpb24gKAoK ICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gSWNlQ2xvc2VTdGF0dXMgSWNlQ2xvc2VDb25uZWN0 aW9uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGludCAgSWNlQWRkQ29ubmVjdGlvbldh dGNoICgKCiAgICBJY2VXYXRjaFByb2MJCSAsCiAgICBJY2VQb2ludGVyCQkJIAoKKTsKCmV4dGVy biB2b2lkIEljZVJlbW92ZUNvbm5lY3Rpb25XYXRjaCAoCgogICAgSWNlV2F0Y2hQcm9jCQkgLAog ICAgSWNlUG9pbnRlcgkJCSAKCik7CgpleHRlcm4gSWNlUHJvdG9jb2xTZXR1cFN0YXR1cyBJY2VQ cm90b2NvbFNldHVwICgKCiAgICBJY2VDb25uCQkgLAogICAgaW50IAkJICwKICAgIEljZVBvaW50 ZXIJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CSoJCSAsCiAgICBpbnQJKgkJICwKICAgIGNoYXIg KioJCSAsCiAgICBjaGFyICoqCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4 dGVybiBpbnQgIEljZVByb3RvY29sU2h1dGRvd24gKAoKICAgIEljZUNvbm4JCSAsCiAgICBpbnQJ CQkgCgopOwoKZXh0ZXJuIEljZVByb2Nlc3NNZXNzYWdlc1N0YXR1cyBJY2VQcm9jZXNzTWVzc2Fn ZXMgKAoKICAgIEljZUNvbm4JCSAsCiAgICBJY2VSZXBseVdhaXRJbmZvICoJICwKICAgIGludCAg KgkJIAoKKTsKCmV4dGVybiBpbnQgIEljZVBpbmcgKAoKICAgSWNlQ29ubgkJICwKICAgSWNlUGlu Z1JlcGx5UHJvYwkgLAogICBJY2VQb2ludGVyCQkgCgopOwoKZXh0ZXJuIGNoYXIgKkljZUFsbG9j U2NyYXRjaCAoCgogICBJY2VDb25uCQkgLAogICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4g aW50IEljZUZsdXNoICgKCiAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gaW50IEljZUdldE91dEJ1 ZlNpemUgKAoKICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgSWNlR2V0SW5CdWZTaXplICgK CiAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gSWNlQ29ubmVjdFN0YXR1cyBJY2VDb25uZWN0aW9u U3RhdHVzICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGNoYXIgKkljZVZlbmRvciAoCgog ICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpJY2VSZWxlYXNlICgKCiAgICBJY2VDb25u CQkgCgopOwoKZXh0ZXJuIGludCBJY2VQcm90b2NvbFZlcnNpb24gKAoKICAgIEljZUNvbm4JCSAK Cik7CgpleHRlcm4gaW50IEljZVByb3RvY29sUmV2aXNpb24gKAoKICAgIEljZUNvbm4JCSAKCik7 CgpleHRlcm4gaW50IEljZUNvbm5lY3Rpb25OdW1iZXIgKAoKICAgIEljZUNvbm4JCSAKCik7Cgpl eHRlcm4gY2hhciAqSWNlQ29ubmVjdGlvblN0cmluZyAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4 dGVybiB1bnNpZ25lZCBsb25nIEljZUxhc3RTZW50U2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNv bm4JCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBJY2VMYXN0UmVjZWl2ZWRTZXF1ZW5jZU51 bWJlciAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgIEljZVN3YXBwaW5nICgKCiAg ICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIEljZUVycm9ySGFuZGxlciBJY2VTZXRFcnJvckhhbmRs ZXIgKAoKICAgIEljZUVycm9ySGFuZGxlciAJIAoKKTsKCmV4dGVybiBJY2VJT0Vycm9ySGFuZGxl ciBJY2VTZXRJT0Vycm9ySGFuZGxlciAoCgogICAgSWNlSU9FcnJvckhhbmRsZXIgCSAKCik7CgoK IAoKCgpleHRlcm4gaW50ICBJY2VJbml0VGhyZWFkcyAoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2 b2lkIEljZUFwcExvY2tDb25uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIHZvaWQgSWNl QXBwVW5sb2NrQ29ubiAoCgogICAgSWNlQ29ubgkJIAoKKTsKCn0gCgoKIyAzOCAiL3Vzci9YMTFS Ni9pbmNsdWRlL1gxMS9TTS9TTWxpYi5oIiAyCgoKCiAKCgoKdHlwZWRlZiBJY2VQb2ludGVyIFNt UG9pbnRlcjsKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9TbWNDb25uICpTbWNDb25uOwp0eXBlZGVm IHN0cnVjdCBfU21zQ29ubiAqU21zQ29ubjsKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGlu dAkJbGVuZ3RoOwkJIAogICAgU21Qb2ludGVyICAgdmFsdWU7CQkgCn0gU21Qcm9wVmFsdWU7Cgp0 eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyCSpuYW1lOwkJIAogICAgY2hhcgkqdHlwZTsJCSAKICAg IGludAkJbnVtX3ZhbHM7CSAKICAgIFNtUHJvcFZhbHVlICp2YWxzOwkJIAp9IFNtUHJvcDsKCgoM CiAKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFNtY0Nsb3NlZE5vdywKICAgIFNtY0Nsb3NlZEFTQVAs CiAgICBTbWNDb25uZWN0aW9uSW5Vc2UKfSBTbWNDbG9zZVN0YXR1czsKCgoMCiAKCgoKdHlwZWRl ZiB2b2lkICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoKICAgIFNtY0Nvbm4JCSAsCiAgICBTbVBv aW50ZXIJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50 IAkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY1NhdmVZb3Vyc2VsZlBoYXNlMlByb2MpICgKCiAg ICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21jSW50 ZXJhY3RQcm9jKSAoCgogICAgU21jQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCnR5cGVk ZWYgdm9pZCAoKlNtY0RpZVByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkg CgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25DYW5jZWxsZWRQcm9jKSAoCgogICAgU21j Q29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY1NhdmVDb21w bGV0ZVByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRl ZiB2b2lkICgqU21jUHJvcFJlcGx5UHJvYykgKAoKICAgIFNtY0Nvbm4JCSAsCiAgICBTbVBvaW50 ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qcm9wICoqCQkgCgopOwoKCiAKCgoKdHlwZWRlZiBz dHJ1Y3QgewoKICAgIHN0cnVjdCB7CglTbWNTYXZlWW91cnNlbGZQcm9jCSBjYWxsYmFjazsKCVNt UG9pbnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZlX3lvdXJzZWxmOwoKICAgIHN0cnVjdCB7 CglTbWNEaWVQcm9jCQkgY2FsbGJhY2s7CglTbVBvaW50ZXIJCSBjbGllbnRfZGF0YTsKICAgIH0g ZGllOwoKICAgIHN0cnVjdCB7CglTbWNTYXZlQ29tcGxldGVQcm9jCSBjYWxsYmFjazsKCVNtUG9p bnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZlX2NvbXBsZXRlOwoKICAgIHN0cnVjdCB7CglT bWNTaHV0ZG93bkNhbmNlbGxlZFByb2MgY2FsbGJhY2s7CglTbVBvaW50ZXIJCSBjbGllbnRfZGF0 YTsKICAgIH0gc2h1dGRvd25fY2FuY2VsbGVkOwoKfSBTbWNDYWxsYmFja3M7CgoKCgoKCgoMCiAK CgoKdHlwZWRlZiBpbnQgICgqU21zUmVnaXN0ZXJDbGllbnRQcm9jKSAoCgogICAgU21zQ29ubiAJ CSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBjaGFyICoJCSAJCQkJICAgICAKCik7Cgp0eXBlZGVm IHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNt UG9pbnRlcgkJICwKICAgIGludAkJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdERv bmVQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJICwKICAgIGludCAJCSAK Cik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNlbGZSZXF1ZXN0UHJvYykgKAoKICAgIFNt c0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJCSAsCiAg ICBpbnQJCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpT bXNTYXZlWW91cnNlbGZQaGFzZTJSZXF1ZXN0UHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBT bVBvaW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNlbGZEb25lUHJvYykg KAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQgCQkgCgopOwoKdHlw ZWRlZiB2b2lkICgqU21zQ2xvc2VDb25uZWN0aW9uUHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAg ICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqKgkJIAoKKTsKCnR5cGVkZWYg dm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNtUG9p bnRlcgkJICwKICAgIGludAkJCSAsCiAgICBTbVByb3AgKioJCSAKCik7Cgp0eXBlZGVmIHZvaWQg KCpTbXNEZWxldGVQcm9wZXJ0aWVzUHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50 ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNt c0dldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoK KTsKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBzdHJ1Y3QgewoJU21zUmVnaXN0ZXJDbGll bnRQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IHJlZ2lzdGVy X2NsaWVudDsKCiAgICBzdHJ1Y3QgewoJU21zSW50ZXJhY3RSZXF1ZXN0UHJvYwljYWxsYmFjazsK CVNtUG9pbnRlcgkJbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9yZXF1ZXN0OwoKICAgIHN0 cnVjdCB7CglTbXNJbnRlcmFjdERvbmVQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2Vy X2RhdGE7CiAgICB9IGludGVyYWN0X2RvbmU7CgogICAgc3RydWN0IHsKCVNtc1NhdmVZb3Vyc2Vs ZlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQkJbWFuYWdlcl9kYXRhOwogICAgfSBz YXZlX3lvdXJzZWxmX3JlcXVlc3Q7CgogICAgc3RydWN0IHsKCVNtc1NhdmVZb3Vyc2VsZlBoYXNl MlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQkJCW1hbmFnZXJfZGF0YTsKICAgIH0g c2F2ZV95b3Vyc2VsZl9waGFzZTJfcmVxdWVzdDsKCiAgICBzdHJ1Y3QgewoJU21zU2F2ZVlvdXJz ZWxmRG9uZVByb2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJCW1hbmFnZXJfZGF0YTsKICAgIH0gc2F2 ZV95b3Vyc2VsZl9kb25lOwoKICAgIHN0cnVjdCB7CglTbXNDbG9zZUNvbm5lY3Rpb25Qcm9jCWNh bGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IGNsb3NlX2Nvbm5lY3Rpb247 CgogICAgc3RydWN0IHsKCVNtc1NldFByb3BlcnRpZXNQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVy CQltYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0aWVzOwoKICAgIHN0cnVjdCB7CglTbXNE ZWxldGVQcm9wZXJ0aWVzUHJvYwljYWxsYmFjazsKCVNtUG9pbnRlcgkJbWFuYWdlcl9kYXRhOwog ICAgfSBkZWxldGVfcHJvcGVydGllczsKCiAgICBzdHJ1Y3QgewoJU21zR2V0UHJvcGVydGllc1By b2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJCW1hbmFnZXJfZGF0YTsKICAgIH0gZ2V0X3Byb3BlcnRp ZXM7Cgp9IFNtc0NhbGxiYWNrczsKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgICgqU21zTmV3 Q2xpZW50UHJvYykgKAoKICAgIFNtc0Nvbm4gCQkgLAogICAgU21Qb2ludGVyCQkgLAogICAgdW5z aWduZWQgbG9uZyAqCSAsCiAgICBTbXNDYWxsYmFja3MgKgkgLAogICAgY2hhciAqKgkJIAoKKTsK CgoMCiAKCgoKdHlwZWRlZiB2b2lkICgqU21jRXJyb3JIYW5kbGVyKSAoCgogICAgU21jQ29ubgkJ ICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIGlu dCAJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgq U21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubgkJICwKICAgIGludCAJCSAsCiAgICBpbnQJ CQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAg U21Qb2ludGVyCQkgCgopOwoKCgwKIAoKCgpleHRlcm4gIkMiIHsgCgpleHRlcm4gU21jQ29ubiBT bWNPcGVuQ29ubmVjdGlvbiAoCgogICAgY2hhciAqCQkgLAogICAgU21Qb2ludGVyCQkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBTbWNDYWxsYmFj a3MgKgkgLAogICAgY2hhciAqCQkgLAogICAgY2hhciAqKgkJICwKICAgIGludAkJCSAsCiAgICBj aGFyICoJCSAKCik7CgpleHRlcm4gU21jQ2xvc2VTdGF0dXMgU21jQ2xvc2VDb25uZWN0aW9uICgK CiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIgKioJCSAKCik7CgpleHRlcm4g dm9pZCBTbWNNb2RpZnlDYWxsYmFja3MgKAoKICAgIFNtY0Nvbm4JCSAsCiAgICB1bnNpZ25lZCBs b25nCSAsCiAgICBTbWNDYWxsYmFja3MgKgkgCgopOwoKZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVy dGllcyAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAgICAgIAkgICAgICAgICAsCiAgICBTbVBy b3AgKioJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNEZWxldGVQcm9wZXJ0aWVzICgKCiAgICBTbWND b25uCQkgLAogICAgaW50ICAgICAgCSAgICAgICAgICwKICAgIGNoYXIgKioJCSAKCik7CgpleHRl cm4gaW50ICBTbWNHZXRQcm9wZXJ0aWVzICgKCiAgICBTbWNDb25uCQkgLAogICAgU21jUHJvcFJl cGx5UHJvYwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKZXh0ZXJuIGludCAgU21jSW50ZXJhY3RS ZXF1ZXN0ICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAgIFNtY0ludGVyYWN0UHJv YwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21jSW50ZXJhY3REb25lICgK CiAgICBTbWNDb25uCQkgLAogICAgaW50ICAJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNSZXF1ZXN0 U2F2ZVlvdXJzZWxmICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAgIGludCAgCQkg LAogICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIGludCAg U21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgogICAgU21jQ29ubgkJCSAsCiAgICBTbWNT YXZlWW91cnNlbGZQaGFzZTJQcm9jCSAsCiAgICBTbVBvaW50ZXIJCQkgCgopOwoKZXh0ZXJuIHZv aWQgU21jU2F2ZVlvdXJzZWxmRG9uZSAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAJCSAKCik7 CgpleHRlcm4gaW50IFNtY1Byb3RvY29sVmVyc2lvbiAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4 dGVybiBpbnQgU21jUHJvdG9jb2xSZXZpc2lvbiAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVy biBjaGFyICpTbWNWZW5kb3IgKAoKICAgIFNtY0Nvbm4JCSAKCik7CgpleHRlcm4gY2hhciAqU21j UmVsZWFzZSAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbWNDbGllbnRJRCAo CgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBJY2VDb25uIFNtY0dldEljZUNvbm5lY3Rpb24g KAoKICAgIFNtY0Nvbm4JCSAKCik7CgpleHRlcm4gaW50ICBTbXNJbml0aWFsaXplICgKCiAgICBj aGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIFNtc05ld0NsaWVudFByb2MJCSAsCiAgICBT bVBvaW50ZXIJCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0aFByb2MJICwKICAgIGludAkJCQkgLAog ICAgY2hhciAqCQkJIAoKKTsKCmV4dGVybiBjaGFyICpTbXNDbGllbnRIb3N0TmFtZSAoCgogICAg U21zQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbXNHZW5lcmF0ZUNsaWVudElEICgKCiAgICBT bXNDb25uCQkgCgopOwoKZXh0ZXJuIGludCAgU21zUmVnaXN0ZXJDbGllbnRSZXBseSAoCgogICAg U21zQ29ubgkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4dGVybiB2b2lkIFNtc1NhdmVZb3Vyc2Vs ZiAoCgogICAgU21zQ29ubgkJICwKICAgIGludAkJCSAsCiAgICBpbnQgIAkJICwKICAgIGludAkJ CSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21zU2F2ZVlvdXJzZWxmUGhhc2UyICgK CiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21zSW50ZXJhY3QgKAoKICAgIFNtc0Nv bm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoKICAgIFNtc0Nvbm4JCSAKCik7CgpleHRl cm4gdm9pZCBTbXNTYXZlQ29tcGxldGUgKAoKICAgIFNtc0Nvbm4JCSAKCik7CgpleHRlcm4gdm9p ZCBTbXNTaHV0ZG93bkNhbmNlbGxlZCAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiB2b2lk IFNtc1JldHVyblByb3BlcnRpZXMgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBpbnQJCQkgLAogICAg U21Qcm9wICoqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21zQ2xlYW5VcCAoCgogICAgU21zQ29ubgkJ IAoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xWZXJzaW9uICgKCiAgICBTbXNDb25uCQkgCgop OwoKZXh0ZXJuIGludCBTbXNQcm90b2NvbFJldmlzaW9uICgKCiAgICBTbXNDb25uCQkgCgopOwoK ZXh0ZXJuIGNoYXIgKlNtc0NsaWVudElEICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIElj ZUNvbm4gU21zR2V0SWNlQ29ubmVjdGlvbiAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiBT bWNFcnJvckhhbmRsZXIgU21jU2V0RXJyb3JIYW5kbGVyICgKCiAgICBTbWNFcnJvckhhbmRsZXIg CSAKCik7CgpleHRlcm4gU21zRXJyb3JIYW5kbGVyIFNtc1NldEVycm9ySGFuZGxlciAoCgogICAg U21zRXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgU21GcmVlUHJvcGVydHkgKAoKICAg IFNtUHJvcCAqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21GcmVlUmVhc29ucyAoCgogICAgaW50CQkJ ICwKICAgIGNoYXIgKioJCSAKCik7Cgp9IAoKCiMgNTQgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEv U2hlbGwuaCIgMgoKCiAKCgoKCiAKCgoKCgoKCgoKCgogCiAKIAogCgojIDE5NiAiL3Vzci9YMTFS Ni9pbmNsdWRlL1gxMS9TaGVsbC5oIgoKZXh0ZXJuIGNvbnN0ICBjaGFyIFh0U2hlbGxTdHJpbmdz W107CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjICpTaGVsbFdpZGdl dENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfT3ZlcnJpZGVTaGVsbENsYXNzUmVjICpPdmVycmlkZVNo ZWxsV2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9XTVNoZWxsQ2xhc3NSZWMgKldNU2hlbGxX aWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgKlRyYW5z aWVudFNoZWxsV2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Ub3BMZXZlbFNoZWxsQ2xhc3NS ZWMgKlRvcExldmVsU2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9u U2hlbGxDbGFzc1JlYyAqQXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVj dCBfU2Vzc2lvblNoZWxsQ2xhc3NSZWMgKlNlc3Npb25TaGVsbFdpZGdldENsYXNzOwoKCmV4dGVy biAgV2lkZ2V0Q2xhc3Mgc2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuICBXaWRnZXRDbGFzcyBvdmVy cmlkZVNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mgd21TaGVsbFdpZGdldENs YXNzOwpleHRlcm4gIFdpZGdldENsYXNzIHRyYW5zaWVudFNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVy biAgV2lkZ2V0Q2xhc3MgdG9wTGV2ZWxTaGVsbFdpZGdldENsYXNzOwpleHRlcm4gIFdpZGdldENs YXNzIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuICBXaWRnZXRDbGFzcyBzZXNz aW9uU2hlbGxXaWRnZXRDbGFzczsKCgoKIAojIDI0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0u aCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hhdG9tLmgiIDEKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojIDI1ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNy L1gxMVI2L2luY2x1ZGUvWG0vWG1TdHJEZWZzLmgiIDEKIAoKCiAKIAoKIAogCiAKCiAKCiAKIAoK CgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCiAKCiMgODk3ICIvdXNyL1gxMVI2L2luY2x1ZGUv WG0vWG1TdHJEZWZzLmgiCgoKCgoKZXh0ZXJuICAgIGNoYXIgX1htU3RyaW5nc1tdOwoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0gICAKCgojIDEgIi91c3IvWDExUjYvaW5jbHVk ZS9YMTEvU3RyaW5nRGVmcy5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCiMgMzI0ICIvdXNyL1gxMVI2L2lu Y2x1ZGUvWDExL1N0cmluZ0RlZnMuaCIKCmV4dGVybiBjb25zdCAgY2hhciBYdFN0cmluZ3NbXTsK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzUwNiAiL3Vzci9YMTFSNi9pbmNsdWRlL1ht L1htU3RyRGVmcy5oIiAyCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfSAgIAoKCgoj IDI2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNyL1gxMVI2L2luY2x1 ZGUvWG0vVmlydEtleXMuaCIgMQogCgoKIAogCgogCiAKIAoKCgoKIyAxICIvdXNyL1gxMVI2L2lu Y2x1ZGUvWG0vWG0uaCIgMQogCgoKIAogCgogCiAKIAoKCiMgMTQzOSAiL3Vzci9YMTFSNi9pbmNs dWRlL1htL1htLmgiCgogIAojIDE0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0vVmlydEtleXMuaCIg MgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKZXh0ZXJuIHZvaWQgWG1UcmFuc2xhdGVLZXkoIAogICAgICAgICAgICAgICAg ICAgICAgICBEaXNwbGF5ICpkcHksCgogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQga2V5Y29kZSwKCgoKICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzIG1vZGlmaWVy cywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzICptb2RpZmllcnNfcmV0dXJuLAog ICAgICAgICAgICAgICAgICAgICAgICBLZXlTeW0gKmtleXN5bV9yZXR1cm4pIDsKCgogCgoKCn0g ICAKCgoKIyAyNyAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiIDIKCgoKZXh0ZXJuICJDIiB7 CgoKCgoKCgoKCmV4dGVybiAgaW50IHhtVXNlVmVyc2lvbjsKCgogCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgpleHRlcm4gICBjaGFyICAgIF9YbVNERUZBVUxUX0ZPTlRbXTsgICAgICAgICAgICAgCmV4 dGVybiAgIGNoYXIgICAgX1htU0RFRkFVTFRfQkFDS0dST1VORFtdOyAgICAgICAKCiAKCgoKCgp0 eXBlZGVmIGVudW17IFhtRk9OVF9JU19GT05ULCBYbUZPTlRfSVNfRk9OVFNFVCB9IFhtRm9udFR5 cGU7CgplbnVtIHsgWG1TVFJJTkdfRElSRUNUSU9OX0xfVE9fUiwJWG1TVFJJTkdfRElSRUNUSU9O X1JfVE9fTCwKICAgICAgIFhtU1RSSU5HX0RJUkVDVElPTl9ERUZBVUxUID0gMjU1CiAgICAgfTsK CnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0cmluZ0RpcmVjdGlvbjsgICAgICAKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyICoJWG1TdHJpbmc7CQkgCnR5cGVkZWYgWG1TdHJpbmcgKglYbVN0cmluZ1Rh YmxlOwkJIAp0eXBlZGVmIGNoYXIgKgkJWG1TdHJpbmdDaGFyU2V0OwkgCnR5cGVkZWYgdW5zaWdu ZWQgY2hhcglYbVN0cmluZ0NvbXBvbmVudFR5cGU7CSAKCnR5cGVkZWYgc3RydWN0IF9YbUZvbnRM aXN0UmVjICAgICAgICpYbUZvbnRMaXN0RW50cnk7ICAgCnR5cGVkZWYgc3RydWN0IF9YbUZvbnRM aXN0UmVjICAgICAgICpYbUZvbnRMaXN0OyAgICAgICAgCnR5cGVkZWYgc3RydWN0IF9fWG1TdHJp bmdDb250ZXh0UmVjICpfWG1TdHJpbmdDb250ZXh0OyAgCnR5cGVkZWYgc3RydWN0IF9fWG1TdHJp bmdSZWMgICAgICAgICpfWG1TdHJpbmc7ICAgICAgICAgCnR5cGVkZWYgc3RydWN0IF9YbXRTdHJp bmdDb250ZXh0UmVjICpYbVN0cmluZ0NvbnRleHQ7ICAgCnR5cGVkZWYgc3RydWN0IF9YbUZvbnRM aXN0Q29udGV4dFJlYyAqWG1Gb250Q29udGV4dDsgICAgCgplbnVtewlYbVNUUklOR19DT01QT05F TlRfVU5LTk9XTiwJWG1TVFJJTkdfQ09NUE9ORU5UX0NIQVJTRVQsCglYbVNUUklOR19DT01QT05F TlRfVEVYVCwJWG1TVFJJTkdfQ09NUE9ORU5UX0RJUkVDVElPTiwKICAgICAgICBYbVNUUklOR19D T01QT05FTlRfU0VQQVJBVE9SLCAgIFhtU1RSSU5HX0NPTVBPTkVOVF9MT0NBTEVfVEVYVAoJIAoJ fSA7CgoKCgoJCQkgCgoKIAoKCgoKCgoKCiAKCgpleHRlcm4gIFdpZGdldENsYXNzIHhtUHJpbWl0 aXZlV2lkZ2V0Q2xhc3M7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NSZWMgKiBY bVByaW1pdGl2ZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1QcmltaXRpdmVSZWMgICAg ICAqIFhtUHJpbWl0aXZlV2lkZ2V0OwoKCiAKCgpleHRlcm4gIFdpZGdldENsYXNzIHhtR2FkZ2V0 Q2xhc3M7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0Q2xhc3NSZWMgKiBYbUdhZGdldENsYXNz Owp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRSZWMgICAgICAqIFhtR2FkZ2V0OwoKCiAKCgoKZXh0 ZXJuICBXaWRnZXRDbGFzcyB4bU1hbmFnZXJXaWRnZXRDbGFzczsKCgp0eXBlZGVmIHN0cnVjdCBf WG1NYW5hZ2VyQ2xhc3NSZWMgKiBYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3Qg X1htTWFuYWdlclJlYyAgICAgICogWG1NYW5hZ2VyV2lkZ2V0OwoKCiAKCgoKCgoKCgoKCgoKCgoK CiAKCgoKIAoKZW51bXsJWG1DSEFOR0VfQUxMLAkJCVhtQ0hBTkdFX05PTkUsCglYbUNIQU5HRV9X SURUSCwJCQlYbUNIQU5HRV9IRUlHSFQKCX0gOwoKIAoKZW51bXsJWG1QSVhFTFMsCQkJWG0xMDBU SF9NSUxMSU1FVEVSUywKCVhtMTAwMFRIX0lOQ0hFUywJCVhtMTAwVEhfUE9JTlRTLAoJWG0xMDBU SF9GT05UX1VOSVRTCgl9IDsKCiAKCmVudW17CVhtREVTVFJPWSwJCQlYbVVOTUFQLAoJWG1ET19O T1RISU5HCgl9IDsKZW51bXsJWG1FWFBMSUNJVCwJCQlYbVBPSU5URVIKCX0gOwogCgoKCmVudW17 CVhtTk9ORSwJCQkJWG1UQUJfR1JPVVAsCglYbVNUSUNLWV9UQUJfR1JPVVAsCQlYbUVYQ0xVU0lW RV9UQUJfR1JPVVAKCX0gOwoKCgogCgoKCmVudW17CSAJCQlYbUJFTEwgPSAxCgl9IDsKCiAKCgoK ZW51bXsJWG1OT19PUklFTlRBVElPTiwJCVhtVkVSVElDQUwsCglYbUhPUklaT05UQUwKCX0gOwpl bnVtewlYbVdPUktfQVJFQSwJCQlYbU1FTlVfQkFSLAoJWG1NRU5VX1BVTExET1dOLAkJWG1NRU5V X1BPUFVQLAoJWG1NRU5VX09QVElPTgoJfSA7CmVudW17CVhtTk9fUEFDS0lORywJCQlYbVBBQ0tf VElHSFQsCglYbVBBQ0tfQ09MVU1OLAkJCVhtUEFDS19OT05FCgl9IDsKZW51bXsgCglYbUFMSUdO TUVOVF9DT05URU5UU19UT1AgPSAzLAoJWG1BTElHTk1FTlRfQ09OVEVOVFNfQk9UVE9NCgl9IDsK ZW51bXsJWG1URUFSX09GRl9FTkFCTEVELAkJWG1URUFSX09GRl9ESVNBQkxFRAoJfSA7CmVudW17 CVhtVU5QT1NULAkJIAlYbVVOUE9TVF9BTkRfUkVQTEFZCgl9IDsKZW51bXsgICBYbUxBU1RfUE9T SVRJT04gPSAtMSwgICAgICAgICAgIFhtRklSU1RfUE9TSVRJT04KCX0gOwogCgoKCmVudW17CVht QUxJR05NRU5UX0JFR0lOTklORywJCVhtQUxJR05NRU5UX0NFTlRFUiwKCVhtQUxJR05NRU5UX0VO RAoJfSA7CmVudW17ICAgWG1BTElHTk1FTlRfQkFTRUxJTkVfVE9QLCAgICAgCglYbUFMSUdOTUVO VF9CQVNFTElORV9CT1RUT00gPSAyLCBYbUFMSUdOTUVOVF9XSURHRVRfVE9QLAoJWG1BTElHTk1F TlRfV0lER0VUX0JPVFRPTQogICAJfSA7CiAKCgoKZW51bXsJWG1GUkFNRV9HRU5FUklDX0NISUxE LCAgICAgICAgICBYbUZSQU1FX1dPUktBUkVBX0NISUxELAogICAgICAgIFhtRlJBTUVfVElUTEVf Q0hJTEQKCX0gOwogCgoKCmVudW17CVhtTl9PRl9NQU5ZID0gMSwJCVhtT05FX09GX01BTlkKCX0g OwogCgoKCmVudW17CVhtQVRUQUNIX05PTkUsCQkJWG1BVFRBQ0hfRk9STSwKCVhtQVRUQUNIX09Q UE9TSVRFX0ZPUk0sCQlYbUFUVEFDSF9XSURHRVQsCglYbUFUVEFDSF9PUFBPU0lURV9XSURHRVQs CVhtQVRUQUNIX1BPU0lUSU9OLAoJWG1BVFRBQ0hfU0VMRgoJfSA7CmVudW17CVhtUkVTSVpFX05P TkUsCQkJWG1SRVNJWkVfR1JPVywKCVhtUkVTSVpFX0FOWQoJfSA7CiAKCgoKZW51bXsJWG1DUl9O T05FLAkJCVhtQ1JfSEVMUCwKCVhtQ1JfVkFMVUVfQ0hBTkdFRCwJCVhtQ1JfSU5DUkVNRU5ULAoJ WG1DUl9ERUNSRU1FTlQsCQkJWG1DUl9QQUdFX0lOQ1JFTUVOVCwKCVhtQ1JfUEFHRV9ERUNSRU1F TlQsCQlYbUNSX1RPX1RPUCwKCVhtQ1JfVE9fQk9UVE9NLAkJCVhtQ1JfRFJBRywKCVhtQ1JfQUNU SVZBVEUsCQkJWG1DUl9BUk0sCglYbUNSX0RJU0FSTSwJCQlYbUNSX01BUCA9IDE2LAoJWG1DUl9V Tk1BUCwJCQlYbUNSX0ZPQ1VTLAoJWG1DUl9MT1NJTkdfRk9DVVMsCQlYbUNSX01PRElGWUlOR19U RVhUX1ZBTFVFLAoJWG1DUl9NT1ZJTkdfSU5TRVJUX0NVUlNPUiwJWG1DUl9FWEVDVVRFLAoJWG1D Ul9TSU5HTEVfU0VMRUNULAkJWG1DUl9NVUxUSVBMRV9TRUxFQ1QsCglYbUNSX0VYVEVOREVEX1NF TEVDVCwJCVhtQ1JfQlJPV1NFX1NFTEVDVCwKCVhtQ1JfREVGQVVMVF9BQ1RJT04sCQlYbUNSX0NM SVBCT0FSRF9EQVRBX1JFUVVFU1QsCglYbUNSX0NMSVBCT0FSRF9EQVRBX0RFTEVURSwJWG1DUl9D QVNDQURJTkcsCglYbUNSX09LLAkJCVhtQ1JfQ0FOQ0VMLAoJWG1DUl9BUFBMWSA9IDM0LAkJWG1D Ul9OT19NQVRDSCwKCVhtQ1JfQ09NTUFORF9FTlRFUkVELAkJWG1DUl9DT01NQU5EX0NIQU5HRUQs CglYbUNSX0VYUE9TRSwJCQlYbUNSX1JFU0laRSwKCVhtQ1JfSU5QVVQsCQkJWG1DUl9HQUlOX1BS SU1BUlksCglYbUNSX0xPU0VfUFJJTUFSWSwJCVhtQ1JfQ1JFQVRFLAoJWG1DUl9URUFSX09GRl9B Q1RJVkFURSwJCVhtQ1JfVEVBUl9PRkZfREVBQ1RJVkFURSwKCVhtQ1JfT0JTQ1VSRURfVFJBVkVS U0FMLAlYbUNSX1BST1RPQ09MUwoJIAoJfSA7CiAKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50 ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsKfSBYbUFueUNhbGxiYWNrU3RydWN0OwoK dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsK ICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1BcnJvd0J1dHRvbkNhbGxiYWNrU3RydWN0OwoK dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsK ICAgIFdpbmRvdyAgd2luZG93Owp9IFhtRHJhd2luZ0FyZWFDYWxsYmFja1N0cnVjdDsKCnR5cGVk ZWYgc3RydWN0CnsKICAgIGludCAgICAgcmVhc29uOwogICAgWEV2ZW50ICAqZXZlbnQ7CiAgICBX aW5kb3cgIHdpbmRvdzsKICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1EcmF3bkJ1dHRvbkNh bGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBY RXZlbnQgICpldmVudDsKICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1QdXNoQnV0dG9uQ2Fs bGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgICAgIHJlYXNvbjsKICAgIFhF dmVudCAgKmV2ZW50OwogICAgV2lkZ2V0ICB3aWRnZXQ7CiAgICBjaGFyICAgICpkYXRhOwogICAg Y2hhciAgICAqY2FsbGJhY2tzdHJ1Y3Q7Cn0gWG1Sb3dDb2x1bW5DYWxsYmFja1N0cnVjdDsKCnR5 cGVkZWYgc3RydWN0CnsKICAgaW50IHJlYXNvbjsKICAgWEV2ZW50ICogZXZlbnQ7CiAgIGludCB2 YWx1ZTsKICAgaW50IHBpeGVsOwp9IFhtU2Nyb2xsQmFyQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVm IHN0cnVjdAp7CiAgIGludCByZWFzb247CiAgIFhFdmVudCAqIGV2ZW50OwogICBpbnQgc2V0Owp9 IFhtVG9nZ2xlQnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgIGludCAJ ICAgICByZWFzb247CiAgIFhFdmVudCAgICAqZXZlbnQ7CiAgIFhtU3RyaW5nICBpdGVtOwogICBp bnQgICAgICAgaXRlbV9sZW5ndGg7CiAgIGludCAgICAgICBpdGVtX3Bvc2l0aW9uOwogICBYbVN0 cmluZyAgKnNlbGVjdGVkX2l0ZW1zOwogICBpbnQgICAgICAgc2VsZWN0ZWRfaXRlbV9jb3VudDsK ICAgaW50ICAgICAgICpzZWxlY3RlZF9pdGVtX3Bvc2l0aW9uczsKICAgY2hhciAgICAgIHNlbGVj dGlvbl90eXBlOwp9IFhtTGlzdENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAg aW50IHJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0cmluZwl2YWx1ZTsKICAgIGlu dAkJbGVuZ3RoOwp9IFhtU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj dAp7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50CSpldmVudDsKICAgIFhtU3RyaW5nCXZhbHVl OwogICAgaW50CQlsZW5ndGg7Cn0gWG1Db21tYW5kQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0 cnVjdAp7CiAgICBpbnQgCXJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0cmluZwl2 YWx1ZTsKICAgIGludAkJbGVuZ3RoOwogICAgWG1TdHJpbmcJbWFzazsKICAgIGludAkJbWFza19s ZW5ndGg7CiAgICBYbVN0cmluZwlkaXIgOwogICAgaW50CQlkaXJfbGVuZ3RoIDsKICAgIFhtU3Ry aW5nICAgIHBhdHRlcm4gOwogICAgaW50CQlwYXR0ZXJuX2xlbmd0aCA7Cn0gWG1GaWxlU2VsZWN0 aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgaW50IHJlYXNvbjsK ICAgWEV2ZW50ICogZXZlbnQ7CiAgIGludCB2YWx1ZTsKfSBYbVNjYWxlQ2FsbGJhY2tTdHJ1Y3Q7 CgoKIAoKCgplbnVtewlYbU1VTFRJQ0xJQ0tfRElTQ0FSRCwJCVhtTVVMVElDTElDS19LRUVQCgl9 IDsKIAoKCgplbnVtewlYbVNIQURPV19JTiA9IDcsCQlYbVNIQURPV19PVVQKCX0gOwogCgoKCmVu dW17CVhtQVJST1dfVVAsCQkJWG1BUlJPV19ET1dOLAoJWG1BUlJPV19MRUZULAkJCVhtQVJST1df UklHSFQKCX0gOwogCgoKCgplbnVtewlYbU5PX0xJTkUsCQkJWG1TSU5HTEVfTElORSwKCVhtRE9V QkxFX0xJTkUsCQkJWG1TSU5HTEVfREFTSEVEX0xJTkUsCglYbURPVUJMRV9EQVNIRURfTElORSwJ CVhtU0hBRE9XX0VUQ0hFRF9JTiwKCVhtU0hBRE9XX0VUQ0hFRF9PVVQsCQlYbVNIQURPV19FVENI RURfSU5fREFTSCwKCVhtU0hBRE9XX0VUQ0hFRF9PVVRfREFTSCwJWG1JTlZBTElEX1NFUEFSQVRP Ul9UWVBFCgl9IDsKCmVudW17CVhtUElYTUFQID0gMSwJCQlYbVNUUklORwoJfSA7CgogCgoKCmVu dW17CVhtV0lORE9XLAkJICAgICAgCglYbUNVUlNPUiA9IDIKCX0gOwoKIAoKCgplbnVtewlYbU1B WF9PTl9UT1AsCQkJWG1NQVhfT05fQk9UVE9NLAoJWG1NQVhfT05fTEVGVCwJCQlYbU1BWF9PTl9S SUdIVAoJfSA7CiAKCgoKCgplbnVtewlYbVNJTkdMRV9TRUxFQ1QsCQlYbU1VTFRJUExFX1NFTEVD VCwKCVhtRVhURU5ERURfU0VMRUNULAkJWG1CUk9XU0VfU0VMRUNUCgl9IDsKZW51bXsJWG1TVEFU SUMsCQkJWG1EWU5BTUlDCgl9IDsKIAoKCgoKCmVudW17CVhtVkFSSUFCTEUsCQkJWG1DT05TVEFO VCwKCVhtUkVTSVpFX0lGX1BPU1NJQkxFCgl9IDsKZW51bXsJWG1BVVRPTUFUSUMsCQkJWG1BUFBM SUNBVElPTl9ERUZJTkVECgl9IDsKZW51bXsJIAkJCVhtQVNfTkVFREVEID0gMQoJfSA7CgoKCgoK CgoKCgoKIAoKCgoKCmVudW17CVhtQ09NTUFORF9BQk9WRV9XT1JLU1BBQ0UsCVhtQ09NTUFORF9C RUxPV19XT1JLU1BBQ0UKCX0gOwogCgoKCgoKZW51bXsJWG1NVUxUSV9MSU5FX0VESVQsCQlYbVNJ TkdMRV9MSU5FX0VESVQKCX0gOwoKdHlwZWRlZiBlbnVtewoJWG1URVhUX0ZPUldBUkQsCglYbVRF WFRfQkFDS1dBUkQKCX0gWG1UZXh0RGlyZWN0aW9uOwoKdHlwZWRlZiBsb25nIFhtVGV4dFBvc2l0 aW9uOwp0eXBlZGVmIEF0b20gWG1UZXh0Rm9ybWF0OwoKCgoKCgoKdHlwZWRlZiBlbnVtewoJWG1T RUxFQ1RfUE9TSVRJT04sCQlYbVNFTEVDVF9XSElURVNQQUNFLAoJWG1TRUxFQ1RfV09SRCwJCQlY bVNFTEVDVF9MSU5FLAoJWG1TRUxFQ1RfQUxMLAkJCVhtU0VMRUNUX1BBUkFHUkFQSAoJfSBYbVRl eHRTY2FuVHlwZSA7Cgp0eXBlZGVmIGVudW17CglYbUhJR0hMSUdIVF9OT1JNQUwsCQlYbUhJR0hM SUdIVF9TRUxFQ1RFRCwKCVhtSElHSExJR0hUX1NFQ09OREFSWV9TRUxFQ1RFRAoJfSBYbUhpZ2hs aWdodE1vZGUgOwoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqcHRyOyAgICAgICAgICAg ICAgICAgICAKICAgIGludCBsZW5ndGg7ICAgICAgICAgICAgICAgICAgCiAgICBYbVRleHRGb3Jt YXQgZm9ybWF0OyAgICAgICAgCn0gWG1UZXh0QmxvY2tSZWMsICpYbVRleHRCbG9jazsKCnR5cGVk ZWYgc3RydWN0CnsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsKICAgIEJvb2xl YW4gZG9pdDsKICAgIGxvbmcgY3Vyckluc2VydCwgbmV3SW5zZXJ0OwogICAgbG9uZyBzdGFydFBv cywgZW5kUG9zOwogICAgWG1UZXh0QmxvY2sgdGV4dDsKfSBYbVRleHRWZXJpZnlDYWxsYmFja1N0 cnVjdCwgKlhtVGV4dFZlcmlmeVB0cjsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICB3Y2hhcl90 ICp3Y3NwdHI7ICAgICAgICAgICAgIAogICAgaW50IGxlbmd0aDsgICAgICAgICAgICAgICAgICAK fSBYbVRleHRCbG9ja1JlY1djcywgKlhtVGV4dEJsb2NrV2NzOwoKdHlwZWRlZiBzdHJ1Y3QKewog ICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgQm9vbGVhbiBkb2l0OwogICAg bG9uZyBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBsb25nIHN0YXJ0UG9zLCBlbmRQb3M7CiAg ICBYbVRleHRCbG9ja1djcyB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0V2NzLCAq WG1UZXh0VmVyaWZ5UHRyV2NzOwoKIAoKCgoKCgoKIAoKCgoKCgogCgplbnVtewlYbURJQUxPR19O T05FLAkJCVhtRElBTE9HX0FQUExZX0JVVFRPTiwKCVhtRElBTE9HX0NBTkNFTF9CVVRUT04sCQlY bURJQUxPR19ERUZBVUxUX0JVVFRPTiwKCVhtRElBTE9HX09LX0JVVFRPTiwJCVhtRElBTE9HX0ZJ TFRFUl9MQUJFTCwKCVhtRElBTE9HX0ZJTFRFUl9URVhULAkJWG1ESUFMT0dfSEVMUF9CVVRUT04s CglYbURJQUxPR19MSVNULAkJCVhtRElBTE9HX0xJU1RfTEFCRUwsCglYbURJQUxPR19NRVNTQUdF X0xBQkVMLAkJWG1ESUFMT0dfU0VMRUNUSU9OX0xBQkVMLAoJWG1ESUFMT0dfU1lNQk9MX0xBQkVM LAkJWG1ESUFMT0dfVEVYVCwKCVhtRElBTE9HX1NFUEFSQVRPUiwJCVhtRElBTE9HX0RJUl9MSVNU LAoJWG1ESUFMT0dfRElSX0xJU1RfTEFCRUwKCX0gOwoKCgoKCgoKCiAKCmVudW17CVhtRElBTE9H X01PREVMRVNTLAkJWG1ESUFMT0dfUFJJTUFSWV9BUFBMSUNBVElPTl9NT0RBTCwKCVhtRElBTE9H X0ZVTExfQVBQTElDQVRJT05fTU9EQUwsWG1ESUFMT0dfU1lTVEVNX01PREFMCgl9IDsKCiAKCgoK IAoKCgogCgplbnVtewlYbVBMQUNFX1RPUCwJCQlYbVBMQUNFX0FCT1ZFX1NFTEVDVElPTiwKCVht UExBQ0VfQkVMT1dfU0VMRUNUSU9OCgl9IDsKCiAKCgoKCgogCgplbnVtewlYbURJQUxPR19XT1JL X0FSRUEsCQlYbURJQUxPR19QUk9NUFQsCglYbURJQUxPR19TRUxFQ1RJT04sCQlYbURJQUxPR19D T01NQU5ELAoJWG1ESUFMT0dfRklMRV9TRUxFQ1RJT04KCX0gOwoKIAoKCgogCgplbnVtewlYbURJ QUxPR19URU1QTEFURSwJCVhtRElBTE9HX0VSUk9SLAoJWG1ESUFMT0dfSU5GT1JNQVRJT04sCQlY bURJQUxPR19NRVNTQUdFLAoJWG1ESUFMT0dfUVVFU1RJT04sCQlYbURJQUxPR19XQVJOSU5HLAoJ WG1ESUFMT0dfV09SS0lORwoJfSA7CgogCgp0eXBlZGVmIGVudW17CglYbVZJU0lCSUxJVFlfVU5P QlNDVVJFRCwJWG1WSVNJQklMSVRZX1BBUlRJQUxMWV9PQlNDVVJFRCwKCVhtVklTSUJJTElUWV9G VUxMWV9PQlNDVVJFRAoJfSBYbVZpc2liaWxpdHkgOwoKCnR5cGVkZWYgZW51bXsKCVhtVFJBVkVS U0VfQ1VSUkVOVCwJCVhtVFJBVkVSU0VfTkVYVCwKCVhtVFJBVkVSU0VfUFJFViwJCVhtVFJBVkVS U0VfSE9NRSwKCVhtVFJBVkVSU0VfTkVYVF9UQUJfR1JPVVAsCVhtVFJBVkVSU0VfUFJFVl9UQUJf R1JPVVAsCglYbVRSQVZFUlNFX1VQLAkJCVhtVFJBVkVSU0VfRE9XTiwKCVhtVFJBVkVSU0VfTEVG VCwJCVhtVFJBVkVSU0VfUklHSFQKCX0gWG1UcmF2ZXJzYWxEaXJlY3Rpb24gOwoKdHlwZWRlZiBz dHJ1Y3QgX1htVHJhdmVyc2VPYnNjdXJlZENhbGxiYWNrU3RydWN0CnsJaW50CQkJcmVhc29uIDsK CVhFdmVudCAqCQlldmVudCA7CglXaWRnZXQJCQl0cmF2ZXJzYWxfZGVzdGluYXRpb24gOwoJWG1U cmF2ZXJzYWxEaXJlY3Rpb24JZGlyZWN0aW9uIDsKCX0gWG1UcmF2ZXJzZU9ic2N1cmVkQ2FsbGJh Y2tTdHJ1Y3QgOwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgWG1OYXZpZ2F0aW9uVHlwZTsKCgog CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFhtQnV0dG9uVHlwZTsKdHlwZWRlZiBYbUJ1dHRv blR5cGUgKiBYbUJ1dHRvblR5cGVUYWJsZTsKdHlwZWRlZiBLZXlTeW0gKiBYbUtleVN5bVRhYmxl Owp0eXBlZGVmIFhtU3RyaW5nQ2hhclNldCAqIFhtU3RyaW5nQ2hhclNldFRhYmxlOwoKZW51bXsJ WG1QVVNIQlVUVE9OID0gMSwJCVhtVE9HR0xFQlVUVE9OLAoJWG1SQURJT0JVVFRPTiwJCQlYbUNB U0NBREVCVVRUT04sCglYbVNFUEFSQVRPUiwJCQlYbURPVUJMRV9TRVBBUkFUT1IsCglYbVRJVExF Cgl9IDsKCgoKIAoKCgp0eXBlZGVmIFh0UG9pbnRlcgkoKlhtUmVzb3VyY2VCYXNlUHJvYykoIFdp ZGdldCwgWHRQb2ludGVyKSA7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htU2Vjb25kYXJ5UmVzb3VyY2VE YXRhUmVjewogICAgWG1SZXNvdXJjZUJhc2VQcm9jCWJhc2VfcHJvYzsKICAgIFh0UG9pbnRlcgkJ Y2xpZW50X2RhdGE7CiAgICBTdHJpbmcJCW5hbWU7CiAgICBTdHJpbmcJCXJlc19jbGFzczsKICAg IFh0UmVzb3VyY2VMaXN0CXJlc291cmNlczsKICAgIENhcmRpbmFsCQludW1fcmVzb3VyY2VzOwp9 WG1TZWNvbmRhcnlSZXNvdXJjZURhdGFSZWMsICpYbVNlY29uZGFyeVJlc291cmNlRGF0YTsKCiAK CgoKCgoKZXh0ZXJuIENhcmRpbmFsIFhtR2V0U2Vjb25kYXJ5UmVzb3VyY2VEYXRhKCAKICAgICAg ICAgICAgICAgICAgICAgICAgV2lkZ2V0Q2xhc3Mgd19jbGFzcywKICAgICAgICAgICAgICAgICAg ICAgICAgWG1TZWNvbmRhcnlSZXNvdXJjZURhdGEgKipzZWNvbmRhcnlEYXRhUnRuKSA7CgoKIAoK IAojIDczMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiCgoKZXh0ZXJuIEJvb2xlYW4gWG1J bnN0YWxsSW1hZ2UoIAogICAgICAgICAgICAgICAgICAgICAgICBYSW1hZ2UgKmltYWdlLAogICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICppbWFnZV9uYW1lKSA7CmV4dGVybiBCb29sZWFuIFht VW5pbnN0YWxsSW1hZ2UoIAogICAgICAgICAgICAgICAgICAgICAgICBYSW1hZ2UgKmltYWdlKSA7 CmV4dGVybiBQaXhtYXAgWG1HZXRQaXhtYXAoIAogICAgICAgICAgICAgICAgICAgICAgICBTY3Jl ZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAg ICAgICAgUGl4ZWwgYmFja2dyb3VuZCkgOwpleHRlcm4gUGl4bWFwIFhtR2V0UGl4bWFwQnlEZXB0 aCggCiAgICAgICAgICAgICAgICAgICAgICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICppbWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhl bCBmb3JlZ3JvdW5kLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kLAoJ CQlpbnQgZGVwdGgpIDsKZXh0ZXJuIEJvb2xlYW4gWG1EZXN0cm95UGl4bWFwKCAKICAgICAgICAg ICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBp eG1hcCBwaXhtYXApIDsKCgogCgogCgoKCgoKCmV4dGVybiB2b2lkIFhtVXBkYXRlRGlzcGxheSgg CiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3KSA7CgoKIAoKIAoKdHlwZWRlZiBsb25n IFhtT2Zmc2V0Owp0eXBlZGVmIFhtT2Zmc2V0ICpYbU9mZnNldFB0cjsKCiAKCgoKCgoKCgpleHRl cm4gdm9pZCBYbVJlc29sdmVQYXJ0T2Zmc2V0cyggCiAgICAgICAgICAgICAgICAgICAgICAgIFdp ZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtT2Zmc2V0UHRyICpv ZmZzZXQpIDsKZXh0ZXJuIHZvaWQgWG1SZXNvbHZlQWxsUGFydE9mZnNldHMoIAogICAgICAgICAg ICAgICAgICAgICAgICBXaWRnZXRDbGFzcyB3X2NsYXNzLAogICAgICAgICAgICAgICAgICAgICAg ICBYbU9mZnNldFB0ciAqb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBYbU9mZnNldFB0 ciAqY29uc3RyYWludF9vZmZzZXQpIDsKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXRCYXNlbGlu ZXMoCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAg ICAgICAgIERpbWVuc2lvbiAqKmJhc2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpsaW5lX2NvdW50KTsKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXREaXNwbGF5UmVjdCgKICAg ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAg WFJlY3RhbmdsZSAqZGlzcGxheXJlY3QpOwoKCiAKCiAKIyA4MTQgIi91c3IvWDExUjYvaW5jbHVk ZS9YbS9YbS5oIgoKCmV4dGVybiB2b2lkIFhtUmVnaXN0ZXJDb252ZXJ0ZXJzKCB2b2lkICkgOwpl eHRlcm4gdm9pZCBYbUN2dFN0cmluZ1RvVW5pdFR5cGUoIAogICAgICAgICAgICAgICAgICAgICAg ICBYcm1WYWx1ZVB0ciBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCAqbnVt X2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICpmcm9tX3ZhbCwKICAgICAg ICAgICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3ZhbCkgOwpleHRlcm4gY2hhciAqIFhtUmVn aXN0ZXJTZWdtZW50RW5jb2RpbmcoIAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb250 bGlzdF90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmN0X2VuY29kaW5nKSA7CmV4 dGVybiBjaGFyICogWG1NYXBTZWdtZW50RW5jb2RpbmcoIAogICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpmb250bGlzdF90YWcpIDsKZXh0ZXJuIFhtU3RyaW5nIFhtQ3Z0Q1RUb1htU3RyaW5n KCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGV4dCkgOwpleHRlcm4gQm9vbGVhbiBY bUN2dFRleHRUb1htU3RyaW5nKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAqZGlz cGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAg ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLAogICAgICAgICAgICAgICAgICAgICAg ICBYcm1WYWx1ZSAqZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp0 b192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciAqY29udmVydGVyX2RhdGEp IDsKZXh0ZXJuIGNoYXIgKiBYbUN2dFhtU3RyaW5nVG9DVCggCiAgICAgICAgICAgICAgICAgICAg ICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9vbGVhbiBYbUN2dFhtU3RyaW5nVG9UZXh0 KCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAqZGlzcGxheSwKICAgICAgICAgICAg ICAgICAgICAgICAgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2Fy ZGluYWwgKm51bV9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqZnJvbV92 YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp0b192YWwsCiAgICAgICAgICAg ICAgICAgICAgICAgIFh0UG9pbnRlciAqY29udmVydGVyX2RhdGEpIDsKCgogCgogCiMgODYwICIv dXNyL1gxMVI2L2luY2x1ZGUvWG0vWG0uaCIKCgpleHRlcm4gaW50IFhtQ29udmVydFVuaXRzKCAK ICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGRpbWVuc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50 IGZyb21fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGZyb21fdmFs LAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgdG9fdHlwZSkgOwpleHRlcm4g aW50IFhtQ3Z0VG9Ib3Jpem9udGFsUGl4ZWxzKCAKICAgICAgICAgICAgICAgICAgICAgICAgU2Ny ZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBmcm9tX3Zh bCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGZyb21fdHlwZSkgOwpleHRl cm4gaW50IFhtQ3Z0VG9WZXJ0aWNhbFBpeGVscyggCiAgICAgICAgICAgICAgICAgICAgICAgIFNj cmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgZnJvbV92 YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBmcm9tX3R5cGUpIDsKZXh0 ZXJuIGludCBYbUN2dEZyb21Ib3Jpem9udGFsUGl4ZWxzKCAKICAgICAgICAgICAgICAgICAgICAg ICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBm cm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHRvX3R5cGUpIDsK ZXh0ZXJuIGludCBYbUN2dEZyb21WZXJ0aWNhbFBpeGVscyggCiAgICAgICAgICAgICAgICAgICAg ICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQg ZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCB0b190eXBlKSA7 CmV4dGVybiB2b2lkIFhtU2V0Rm9udFVuaXRzKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlz cGxheSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhfdmFsdWUsCiAgICAg ICAgICAgICAgICAgICAgICAgIGludCB2X3ZhbHVlKSA7CmV4dGVybiB2b2lkIFhtU2V0Rm9udFVu aXQoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAg ICAgICAgICAgICAgICBpbnQgdmFsdWUpIDsKCgogCgogCgoKCgoKCgpleHRlcm4gdm9pZCBYbVNl dE1lbnVDdXJzb3IoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5LAog ICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3IgY3Vyc29ySWQpIDsKZXh0ZXJuIEN1cnNvciBY bUdldE1lbnVDdXJzb3IoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5 KSA7CgoKIAoKIAojIDkyMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiCgoKZXh0ZXJuIFdp ZGdldCBYbUNyZWF0ZVNpbXBsZU1lbnVCYXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRn ZXQgcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJk aW5hbCBhcmdfY291bnQpIDsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVNpbXBsZVBvcHVwTWVudSgg CiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAg ICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ19jb3VudCkgOwpleHRlcm4gV2lk Z2V0IFhtQ3JlYXRlU2ltcGxlUHVsbGRvd25NZW51KCAKICAgICAgICAgICAgICAgICAgICAgICAg V2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg Q2FyZGluYWwgYXJnX2NvdW50KSA7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTaW1wbGVPcHRpb25N ZW51KCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAg ICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnX2NvdW50KSA7CmV4dGVy biBXaWRnZXQgWG1DcmVhdGVTaW1wbGVSYWRpb0JveCggCiAgICAgICAgICAgICAgICAgICAgICAg IFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg IENhcmRpbmFsIGFyZ19jb3VudCkgOwpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2ltcGxlQ2hlY2tC b3goIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcGFyZW50LAogICAgICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBh cmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdfY291bnQpIDsKCgogCgog CgoKCgoKCgoKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlTWVudUJhciggCgkJCVdpZGdl dCBwYXJlbnQsCgkJCVN0cmluZyBuYW1lLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3Jl YXRlU2ltcGxlUG9wdXBNZW51KAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJ WHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJCS4uLikgOwpleHRlcm4gV2lkZ2V0IFhtVmFDcmVh dGVTaW1wbGVQdWxsZG93bk1lbnUoIAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwK CQkJaW50IHBvc3RfZnJvbV9idXR0b24sCgkJCVh0Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJCQku Li4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlT3B0aW9uTWVudSgKCQkJV2lkZ2V0 IHBhcmVudCwKCQkJU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5n IG9wdGlvbl9sYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgS2V5U3ltIG9wdGlvbl9tbmVt b25pYywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1dHRvbl9zZXQsCiAgICAgICAgICAg ICAgICAgICAgICAgIFh0Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdp ZGdldCBYbVZhQ3JlYXRlU2ltcGxlUmFkaW9Cb3goIAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJp bmcgbmFtZSwKCQkJaW50IGJ1dHRvbl9zZXQsCgkJCVh0Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJ CQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlQ2hlY2tCb3goIAoJCQlXaWRn ZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJ CS4uLikgOwoKIAoKIAoKCgoKCgoKZXh0ZXJuIFdpZGdldCBYbVRyYWNraW5nRXZlbnQoIAogICAg ICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAg ICBDdXJzb3IgY3Vyc29yLAoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpbmVUbywK CgoKICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpwZXYpIDsKZXh0ZXJuIFdpZGdldCBY bVRyYWNraW5nTG9jYXRlKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCwK ICAgICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yIGN1cnNvciwKCiAgICAgICAgICAgICAgICAg ICAgICAgIGludCBjb25maW5lVG8pIDsKCgoKCgogCgogCgoKCnR5cGVkZWYgdm9pZCAoKlhtQ29s b3JQcm9jKSAoWENvbG9yICpiZ19jb2xvciwgWENvbG9yICpmZ19jb2xvciwKCVhDb2xvciAqc2Vs X2NvbG9yLCBYQ29sb3IgKnRzX2NvbG9yLCBYQ29sb3IgKmJzX2NvbG9yKTsKCgogCgoKCgoKCgoK CmV4dGVybiBYbUNvbG9yUHJvYyBYbVNldENvbG9yQ2FsY3VsYXRpb24oIAogICAgICAgICAgICAg ICAgICAgICAgICBYbUNvbG9yUHJvYyBwcm9jKSA7CmV4dGVybiBYbUNvbG9yUHJvYyBYbUdldENv bG9yQ2FsY3VsYXRpb24oIHZvaWQgKSA7CmV4dGVybiB2b2lkIFhtR2V0Q29sb3JzKCAKICAgICAg ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg IENvbG9ybWFwIGNvbG9yX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFja2dy b3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgKmZvcmVncm91bmRfcmV0LAogICAg ICAgICAgICAgICAgICAgICAgICBQaXhlbCAqdG9wX3NoYWRvd19yZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgIFBpeGVsICpib3R0b21fc2hhZG93X3JldCwKICAgICAgICAgICAgICAgICAgICAg ICAgUGl4ZWwgKnNlbGVjdF9yZXQpIDsKZXh0ZXJuIHZvaWQgWG1DaGFuZ2VDb2xvcigKICAgICAg ICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAg UGl4ZWwgYmFja2dyb3VuZCkgOwoKCiAKCiAKIyAxMTIxICIvdXNyL1gxMVI2L2luY2x1ZGUvWG0v WG0uaCIKCgpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdDcmVhdGUoIAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICp0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJT ZXQgY2hhcnNldCkgOwpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdDcmVhdGVTaW1wbGUoIAogICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICp0ZXh0KSA7CmV4dGVybiBYbVN0cmluZyBYbVN0cmlu Z0NyZWF0ZUxvY2FsaXplZCggCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0KSA7 CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0RpcmVjdGlvbkNyZWF0ZSggCgogICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZGlyZWN0aW9uKSA7CgoKCmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ1Nl cGFyYXRvckNyZWF0ZSggdm9pZCApIDsKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nU2VnbWVudENy ZWF0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0LAoKICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcGFyYXRvcikg OwoKCgoKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nTHRvUkNyZWF0ZSggCiAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hh clNldCBjaGFyc2V0KSA7CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZUx0b1IoIAogICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICp0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBY bVN0cmluZ0NoYXJTZXQgY2hhcnNldCkgOwpleHRlcm4gQm9vbGVhbiBYbVN0cmluZ0luaXRDb250 ZXh0KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb250ZXh0ICpjb250ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIHZvaWQgWG1T dHJpbmdGcmVlQ29udGV4dCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ29udGV4 dCBjb250ZXh0KSA7CmV4dGVybiBYbVN0cmluZ0NvbXBvbmVudFR5cGUgWG1TdHJpbmdHZXROZXh0 Q29tcG9uZW50KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb250ZXh0IGNvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICBYbVN0cmluZ0NoYXJTZXQgKmNoYXJzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg IFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIFht U3RyaW5nQ29tcG9uZW50VHlwZSAqdW5rbm93bl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIHNob3J0ICp1bmtub3duX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqKnVua25vd25fdmFsdWUpIDsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9uZW50 VHlwZSBYbVN0cmluZ1BlZWtOZXh0Q29tcG9uZW50KCAKICAgICAgICAgICAgICAgICAgICAgICAg WG1TdHJpbmdDb250ZXh0IGNvbnRleHQpIDsKZXh0ZXJuIEJvb2xlYW4gWG1TdHJpbmdHZXROZXh0 U2VnbWVudCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ29udGV4dCBjb250ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBY bVN0cmluZ0RpcmVjdGlvbiAqZGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBCb29s ZWFuICpzZXBhcmF0b3IpIDsKZXh0ZXJuIEJvb2xlYW4gWG1TdHJpbmdHZXRMdG9SKCAKICAgICAg ICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq KnRleHQpIDsKZXh0ZXJuIFhtRm9udExpc3RFbnRyeSBYbUZvbnRMaXN0RW50cnlDcmVhdGUoIAog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YWcsCiAgICAgICAgICAgICAgICAgICAgICAg IFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGZvbnQp IDsKZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEVudHJ5RnJlZSggCiAgICAgICAgICAgICAgICAgICAg ICAgIFhtRm9udExpc3RFbnRyeSAqZW50cnkpIDsKZXh0ZXJuIFh0UG9pbnRlciBYbUZvbnRMaXN0 RW50cnlHZXRGb250KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdEVudHJ5IGVu dHJ5LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlICp0eXBlUmV0dXJuKSA7CmV4 dGVybiBjaGFyICogWG1Gb250TGlzdEVudHJ5R2V0VGFnKCAKICAgICAgICAgICAgICAgICAgICAg ICAgWG1Gb250TGlzdEVudHJ5IGVudHJ5KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RB cHBlbmRFbnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAg ICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9u dExpc3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KCAKICAgICAgICAgICAgICAgICAgICAgICAg WG1Gb250Q29udGV4dCBjb250ZXh0KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1v dmVFbnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAg ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9udExp c3RFbnRyeSBYbUZvbnRMaXN0RW50cnlMb2FkKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlz cGxheSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udE5hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgIFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqdGFnKSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoIAog ICAgICAgICAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAg ICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1T dHJpbmdDcmVhdGVGb250TGlzdCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0 ICpmb250LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCkg OwpleHRlcm4gdm9pZCBYbUZvbnRMaXN0RnJlZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFht Rm9udExpc3QgZm9udGxpc3QpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdEFkZCggCiAg ICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAgICAgICAgICAgICAg ICAgICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdD aGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdENvcHkoIAogICAg ICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0KSA7CmV4dGVybiBCb29sZWFu IFhtRm9udExpc3RJbml0Rm9udENvbnRleHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZv bnRDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZv bnRsaXN0KSA7CmV4dGVybiBCb29sZWFuIFhtRm9udExpc3RHZXROZXh0Rm9udCggCiAgICAgICAg ICAgICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBY Rm9udFN0cnVjdCAqKmZvbnQpIDsKZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEZyZWVGb250Q29udGV4 dCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCkgOwpleHRl cm4gWG1TdHJpbmcgWG1TdHJpbmdDb25jYXQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0 cmluZyBhLAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBiKSA7CmV4dGVybiBYbVN0 cmluZyBYbVN0cmluZ05Db25jYXQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBm aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc2Vjb25kLAogICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdDb3B5KCAKICAg ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVybiBYbVN0cmluZyBY bVN0cmluZ05Db3B5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyLAogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gQm9vbGVhbiBYbVN0cmluZ0J5dGVD b21wYXJlKCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgYTEsCiAgICAgICAgICAg ICAgICAgICAgICAgIFhtU3RyaW5nIGIxKSA7CmV4dGVybiBCb29sZWFuIFhtU3RyaW5nQ29tcGFy ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGEsCiAgICAgICAgICAgICAgICAg ICAgICAgIFhtU3RyaW5nIGIpIDsKZXh0ZXJuIGludCBYbVN0cmluZ0xlbmd0aCggCiAgICAgICAg ICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9vbGVhbiBYbVN0cmlu Z0VtcHR5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVy biBCb29sZWFuIFhtU3RyaW5nSGFzU3Vic3RyaW5nKCAKICAgICAgICAgICAgICAgICAgICAgICAg WG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdWJzdHJp bmcpIDsKZXh0ZXJuIHZvaWQgWG1TdHJpbmdGcmVlKCAKICAgICAgICAgICAgICAgICAgICAgICAg WG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVybiBEaW1lbnNpb24gWG1TdHJpbmdCYXNlbGluZSggCiAg ICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZm9udGxpc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gRGltZW5zaW9uIFhtU3RyaW5nV2lk dGgoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIERpbWVuc2lvbiBYbVN0 cmluZ0hlaWdodCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZm9udGxpc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gdm9pZCBY bVN0cmluZ0V4dGVudCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZm9udGxp c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZywKICAgICAgICAgICAg ICAgICAgICAgICAgRGltZW5zaW9uICp3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgRGlt ZW5zaW9uICpoZWlnaHQpIDsKZXh0ZXJuIGludCBYbVN0cmluZ0xpbmVDb3VudCggCiAgICAgICAg ICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gdm9pZCBYbVN0cmluZ0Ry YXcoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkLAogICAgICAgICAgICAgICAg ICAgICAgICBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250 bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAg ICAgICAgICAgICAgICBHQyBnYywKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp ZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sCiAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXlfZGlyLAoKCgoKCgoKICAgICAgICAgICAg ICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCkgOwpleHRlcm4gdm9pZCBYbVN0cmluZ0RyYXdJ bWFnZSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmQsCiAgICAgICAgICAgICAg ICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZv bnRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAg ICAgICAgICAgICAgICAgIEdDIGdjLAoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsCiAg ICAgICAgICAgICAgICAgICAgICAgIGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQg d2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhbGlnbiwKICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxheV9kaXIsCgoKCgoKCgogICAgICAgICAg ICAgICAgICAgICAgICBYUmVjdGFuZ2xlICpjbGlwKSA7CmV4dGVybiB2b2lkIFhtU3RyaW5nRHJh d1VuZGVybGluZSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmQsCiAgICAgICAg ICAgICAgICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRM aXN0IGZudGxzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyLAogICAgICAg ICAgICAgICAgICAgICAgICBHQyBnYywKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LAog ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sCiAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXlfZGlyLAoKCgoKCgoKICAgICAgICAg ICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwKICAgICAgICAgICAgICAgICAgICAgICAg WG1TdHJpbmcgdW5kZXIpIDsKCgogCgogCgoKCgoKCmV4dGVybiBXaWRnZXQgWG1HZXREZXN0aW5h dGlvbiggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmRpc3BsYXkpIDsKCgogCgog CiMgMTM1NyAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiCgoKZXh0ZXJuIEJvb2xlYW4gWG1J c1RyYXZlcnNhYmxlKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCkgOwpleHRl cm4gWG1WaXNpYmlsaXR5IFhtR2V0VmlzaWJpbGl0eSggCiAgICAgICAgICAgICAgICAgICAgICAg IFdpZGdldCB3aWQpIDsKZXh0ZXJuIFdpZGdldCBYbUdldFRhYkdyb3VwKCAKICAgICAgICAgICAg ICAgICAgICAgICAgV2lkZ2V0IHdpZCkgOwpleHRlcm4gV2lkZ2V0IFhtR2V0Rm9jdXNXaWRnZXQo IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkKSA7CmV4dGVybiBCb29sZWFuIFht UHJvY2Vzc1RyYXZlcnNhbCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3LAogICAg ICAgICAgICAgICAgICAgICAgICBYbVRyYXZlcnNhbERpcmVjdGlvbiBkaXIpIDsKZXh0ZXJuIHZv aWQgWG1BZGRUYWJHcm91cCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB0YWJHcm91 cCkgOwpleHRlcm4gdm9pZCBYbVJlbW92ZVRhYkdyb3VwKCAKICAgICAgICAgICAgICAgICAgICAg ICAgV2lkZ2V0IHcpIDsKCgogCgoKIAojIDEzOTIgIi91c3IvWDExUjYvaW5jbHVkZS9YbS9YbS5o IgoKCmV4dGVybiB2b2lkIFhtSW1SZWdpc3RlciggCiAgICAgICAgICAgICAgICAgICAgICAgIFdp ZGdldCB3LAoJCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQpIDsKZXh0ZXJuIHZvaWQgWG1JbVVucmVn aXN0ZXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdykgOwpleHRlcm4gdm9pZCBY bUltU2V0Rm9jdXNWYWx1ZXMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywKICAg ICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAg ICBDYXJkaW5hbCBudW1fYXJncykgOwpleHRlcm4gdm9pZCBYbUltU2V0VmFsdWVzKCAKICAgICAg ICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xp c3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX2FyZ3MpIDsKZXh0 ZXJuIHZvaWQgWG1JbVVuc2V0Rm9jdXMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQg dykgOwpleHRlcm4gWElNIFhtSW1HZXRYSU0oIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRn ZXQgdykgOwpleHRlcm4gaW50IFhtSW1NYkxvb2t1cFN0cmluZyggCiAgICAgICAgICAgICAgICAg ICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBYS2V5UHJlc3NlZEV2ZW50 ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBLZXlTeW0gKmtl eXN5bSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0dXMpIDsKZXh0ZXJuIHZvaWQg WG1JbVZhU2V0Rm9jdXNWYWx1ZXMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywK ICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSA7CmV4dGVybiB2b2lkIFhtSW1WYVNldFZhbHVl cyggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAg ICAgICAuLi4pIDsKCgogCgogCgoKfSAgIAoKCiAKCgojIDEgIi91c3IvWDExUjYvaW5jbHVkZS9Y bS9WZW5kb3JTLmgiIDEKIAoKCiAKIAoKIAogCiAKCiAKCiAKCiAKCgoKCiMgMSAiL3Vzci9YMTFS Ni9pbmNsdWRlL1htL1htLmgiIDEKIAoKCiAKIAoKIAogCiAKCgojIDE0MzkgIi91c3IvWDExUjYv aW5jbHVkZS9YbS9YbS5oIgoKICAKIyAyMCAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1ZlbmRvclMu aCIgMgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxs UmVjICpYbVZlbmRvclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1WZW5kb3JTaGVsbENs YXNzUmVjICpYbVZlbmRvclNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3MgdmVu ZG9yU2hlbGxXaWRnZXRDbGFzczsKCgogCgoKCgoKCmV4dGVybiBCb29sZWFuIFhtSXNNb3RpZldN UnVubmluZyggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBzaGVsbCkgOwoKCiAKCgoK fSAgIAoKCgogCiMgMTQzNyAiL3Vzci9YMTFSNi9pbmNsdWRlL1htL1htLmgiIDIKCgoKICAKIyA0 ICIvc29mdHdhcmUvdGhhbGlhL2gvT3BlblN0YWdlLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX09wZW5T dGFnZUNsYXNzUmVjICAgKk9wZW5TdGFnZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfT3Bl blN0YWdlUmVjICAgICAgICAqT3BlblN0YWdlV2lkZ2V0OwoKZXh0ZXJuIFdpZGdldENsYXNzIG9w ZW5TdGFnZVdpZGdldENsYXNzOwoKZW51bSBPcGVuU3RhZ2VQbGFuZXMgewogICAgT3BlblN0YWdl RW1wdHksCiAgICBPcGVuU3RhZ2VOb3JtYWwsCiAgICBPcGVuU3RhZ2VPdmVybGF5LAogICAgT3Bl blN0YWdlUG9wdXAKICAgIH07CgogCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBPcGVuU3Rh Z2VSZXF1ZXN0UmVkcmF3KCBXaWRnZXQgc3RhZ2UgKTsKZXh0ZXJuIHZvaWQgT3BlblN0YWdlUmVx dWVzdE92ZXJsYXlSZWRyYXcoIFdpZGdldCBzdGFnZSApOwpleHRlcm4gdm9pZCBPcGVuU3RhZ2VS ZXF1ZXN0UG9wdXBSZWRyYXcoIFdpZGdldCBzdGFnZSApOwoKCn0KCgogCgoKCgoKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICAgIGludCAgICAgICAgICAgICByZWFzb247ICAgICAgICAgIAogICAgWEV2 ZW50ICAgICAgICAgICpldmVudDsgICAgICAgICAgCiAgICBpbnQgICAgICAgICAgICAgeCwgeTsg ICAgICAgICAgICAKICAgIGludCAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OyAgIAogICAgdW5z aWduZWQgaW50ICAgIHN0YXRlOyAgICAgICAgICAgCiAgICBpbnQgICAgICAgICAgICAgYnV0dG9u OyAgICAgICAgICAKICAgIH0gT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3Q7CgoKIyA0ICJoL01hbmlw dWxhdG9yLmgiIDIKCiMgMSAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoK CgoKCgoKCgoKCgoKCgojIDIwMyAiL3NvZnR3YXJlL3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoK CgoKCgoKCgoKIyA1ICJoL01hbmlwdWxhdG9yLmgiIDIKCgoKIyAxICIvdXNyL1gxMVI2L2luY2x1 ZGUvWDExL2N1cnNvcmZvbnQuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDggImgvTWFuaXB1bGF0b3IuaCIgMgoKCgpjbGFzcyBNYW5p cHVsYXRvcgp7CnByb3RlY3RlZDoKICAgIHZvaWQqIF9pbnRlcmVzdDsKICAgIHVpbnQgX2N1cnNv cjsKICAgIGZsb2F0IF9pbnRlbnNpdHk7CgpwdWJsaWM6CiAgICAgCiAgICBlbnVtIHsgSElULCBN SVNTLCBESVNBQkxFRCB9OwoKICAgIE1hbmlwdWxhdG9yKHZvaWQqKTsKICAgIHZpcnR1YWwgfk1h bmlwdWxhdG9yKCk7CiAgICB2aXJ0dWFsIGludCAgR2V0TWFuQ3Vyc29yKCkgeyByZXR1cm4oX2N1 cnNvcik7IH0KCiAgICB2aXJ0dWFsIGludCBTdGFydE1hbmlwdWxhdGlvbiggT3BlblN0YWdlQ2Fs bGJhY2tTdHJ1Y3QqIGNiLAoJCQkJICAgdm9pZCogY2FtUHRyLCBpbnQgcG9ydFdpZHRoLAoJCQkJ ICAgaW50IHBvcnRIZWlnaHQsIHZvaWQqIHVEYXRhID0gX19udWxsICkgPSAwOwogICAgdmlydHVh bCBib29sIE1vdmUoIE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0KiApID0gMDsKICAgIHZpcnR1YWwg Ym9vbCBGaW5pc2hNYW5pcHVsYXRpb24oIE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0KiApID0gMDsK ICAgIHZpcnR1YWwgaW50IFN0YXJ0RmVlZGJhY2soKSA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgTW90 aW9uRmVlZGJhY2soKSA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgRmluaXNoRmVlZGJhY2soKSA9IDA7 CiAgICB2aXJ0dWFsIHZvaWQgUmVmcmVzaCgpID0gMDsKICAgIHZpcnR1YWwgaW50IENoZWNrSG90 U3BvdHMoIE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0KiApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBD YWxjSG90U3BvdHMoIGludCwgaW50ICkgPSAwOwogICAgdmlydHVhbCB2b2lkIERyYXdpbmdSb3V0 aW5lKCB2b2lkKiApID0gMDsKCn07CgpjbGFzcyBPYmplY3RNYW5pcHVsYXRvcjogcHVibGljIE1h bmlwdWxhdG9yCnsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIFNlbGVjdE1hbmlwQXhpcygp OwoKICAgICAKICAgICAKICAgICAKICAgIHZpcnR1YWwgdm9pZCAgICAgIFNldENhbWVyYSh2b2lk ICopID0gMDsKICAgIHZpcnR1YWwgZmxvYXQgICAgIEdldENhbWVyYU9ydGhvU2NhbGUodm9pZCAq KSA9IDA7CiAgICB2aXJ0dWFsIGZsb2F0ICAgICBHZXRDYW1lcmFGb2NhbExlbmd0aCh2b2lkICop ID0gMDsKICAgIHZpcnR1YWwgZmxvYXQgICAgIEdldENhbWVyYVpvb20odm9pZCAqKSA9IDA7CiAg ICB2aXJ0dWFsIE1fTWF0cml4ICBHZXRDYW1lcmFNYXRyaXgodm9pZCAqKSA9IDA7CiAgICB2aXJ0 dWFsIE1fTWF0cml4ICBHZXRDYW1lcmFJbnZlcnNlTWF0cml4KHZvaWQgKikgPSAwOwogICAgdmly dHVhbCBib29sICAgaXNPcnRob0NhbWVyYSh2b2lkICopID0gMDsKICAgIE1fVmVjdG9yNCAgICAg ICAgIE1ha2VTY3JlZW5QbGFuZShNX1ZlY3RvcjIgJiwgTV9WZWN0b3IyICYpOwogICAgdmlydHVh bCBpbnQgICAgICAgR2V0TWFuaXB1bGF0aW9uU3BhY2UoKTsKCiAgICAgCiAgICBNX1ZlY3RvcjIg ICAgICAgICAgICBfaG90WCxfaG90WSxfaG90WixfaG90TzsKICAgIE1fVmVjdG9yMiAgICAgIF9o b3RYVmVjdCxfaG90WVZlY3QsX2hvdFpWZWN0OwogICAgZmxvYXQgICAgICAgICAgICAgICAgICAg ICAgICAgICBfaG90WFZlY3RMZW47CiAgICBmbG9hdCAgICAgICAgICAgICAgICAgICAgICAgICAg IF9ob3RZVmVjdExlbjsKICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2hvdFpW ZWN0TGVuOwoKICAgIHVpbnQgICAgIF9zcGFjZSwgX2F4aXMsIF9kaW0sIF90eXBlLCBfYWNjZXNz OwogICAgTV9WZWN0b3IyICAgICAgICAgICAgICAgICBfaG90UHQsIF9ob3REaXJWZWM7CiAgICBm bG9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgX2hvdERpclZlY0xlbjsKICAgIE1fVmVjdG9y ICAgICAgICAgICAgICAgICAgICAgICAgX3dvcmxkRGlyVmVjOwogICAgaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfaWNvbk1vZGU7CgogICAgTV9NYXRyaXggICAgICAgICAgICBf b3JpZW50YXRpb247CiAgICBNX01hdHJpeCAgICAgICAgICAgIF9uZXdPcmllbnRhdGlvbjsKICAg ICAKICAgIHVpbnQgICAgICAgICAgICAgICAgX3N0YXJ0WCwgX3N0YXJ0WTsKICAgIHVpbnQgICAg ICAgICAgICAgICAgX2xhc3RYLCAgX2xhc3RZOwogIAogICAgIAogICAgIAogICAgZmxvYXQgICAg ICAgICAgICAgICBfdHJhblNlbnMsIF9yb3RTZW5zOwogICAgZmxvYXQgICAgICAgICAgICAgICBf bWFuU2l6ZTsKCiAgICAgCiAgICAgCiAgICAgCiAgICB1aW50ICAgICAgICAgICAgICAgIF9wV2lk dGgsIF9wSGVpZ2h0OwogICAgTV9NYXRyaXggICAgICAgICAgICBfY2FtTWF0LCBfaW52Q2FtTWF0 LCBfcHJvak1hdDsKICAgIGZsb2F0ICAgICAgICAgICAgICAgX2ZvY2FsLCBfaGl0aGVyLCBfYXNw ZWN0LCBfYXBlcnR1cmUsIF96b29tOwogICAgZmxvYXQgICAgICAgICAgICAgICBfeE9mZnNldCwg X3lPZmZzZXQsIF9pc09ydGhvLCBfb3J0aG9TY2FsZTsKCiAgICAgCiAgICAgCiAgICAgCiAgICBm bG9hdCAgICAgICAgICAgICAgIF9yZWFsT3J0aG9TY2FsZTsKCnB1YmxpYzoKICAgIGVudW0geyBB WElTX1gsIEFYSVNfWSwgQVhJU19aLCBBWElTX1pTLCBBWElTX1pDLCBBWElTX1hZLCBBWElTX05P TkUgfTsKICAgIGVudW0geyBESU1fMUQsIERJTV8yRCB9OwogICAgZW51bSB7IEFDQ0VTU19IT1RL RVksIEFDQ0VTU19JQ09OIH07CiAgICBlbnVtIHsgVFlQRV9UUkFOLCBUWVBFX1JPVCwgVFlQRV9T Q0FMRSB9OwogICAgZW51bSB7IENPT1JEX05PTkUsIENPT1JEX09GRiwgQ09PUkRfTE9DQUwsIENP T1JEX1dPUkxELCBDT09SRF9TQ1JFRU4sCgkgICBDT09SRF9NQU5JUFVMQVRPUiwgQ09PUkRfQ09O U1RSQUlORUQsIENPT1JEX0NPTlNUUkFJTkVEMiB9OwogICAgZW51bSB7IElDT05fTk9ORSAgICAg PSAwLCAKCSAgIElDT05fVFJBTlggICAgPSAxLCAKCSAgIElDT05fVFJBTlkgICAgPSAyLAoJICAg SUNPTl9UUkFOWiAgICA9IDQsCgkgICBJQ09OX1JPVFggICAgID0gOCwKCSAgIElDT05fUk9UWSAg ICAgPSAxNiwKCSAgIElDT05fUk9UWiAgICAgPSAzMiwKCSAgIElDT05fT1JJR0lOICAgPSA2NCwK CSAgIElDT05fRElTQUJMRUQgPSAxMjggfTsKCiAgICBPYmplY3RNYW5pcHVsYXRvcih2b2lkICop OwogICAgdmlydHVhbCB+T2JqZWN0TWFuaXB1bGF0b3IoKTsKCiAgICAgCiAgICB2aXJ0dWFsIGlu dCAgICAgU3RhcnRNYW5pcHVsYXRpb24oT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QgKmNiLAoJCQkJ ICAgICAgdm9pZCAqY2FtUHRyLAoJCQkJICAgICAgaW50IHBvcnRXaWR0aCwgaW50IHBvcnRIZWln aHQsCgkJCQkgICAgICB2b2lkICp1RGF0YSA9IF9fbnVsbCApOwogICAgdmlydHVhbCBib29sIE1v dmUoT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QgKmNiKTsKICAgIHZpcnR1YWwgYm9vbCBGaW5pc2hN YW5pcHVsYXRpb24oT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QgKmNiKTsKCiAgICAgCiAgICB2aXJ0 dWFsIHZvaWQgRHJhd2luZ1JvdXRpbmUodm9pZCAqKTsKICAgIHZpcnR1YWwgaW50ICBDaGVja0hv dFNwb3RzKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIHZvaWQgQ2Fs Y0hvdFNwb3RzKGludCBwb3J0V2lkdGgsCgkJCSAgICAgIGludCBwb3J0SGVpZ2h0KTsKICAgIHZp cnR1YWwgTV9NYXRyaXggR2V0TWFuQmFzaXMoY29uc3QgTV9NYXRyaXggJmNhbU1hdCkgPSAwOwoK ICAgICAKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBUUkFOX0lDT05fV0lEVEg7CiAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgVFJBTl9JQ09OX0hFSUdIVDsKICAgIHN0YXRpYyBjb25zdCBpbnQg VFJBTl9JQ09OX0hPVF9YOwogICAgc3RhdGljIGNvbnN0IGludCBUUkFOX0lDT05fSE9UX1k7CiAg ICBzdGF0aWMgY29uc3QgY2hhciBUUkFOX0lDT05fQklUU1tdOwogICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIFJPVF9JQ09OX1dJRFRIOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFJPVF9JQ09O X0hFSUdIVDsKICAgIHN0YXRpYyBjb25zdCBpbnQgUk9UX0lDT05fSE9UX1g7CiAgICBzdGF0aWMg Y29uc3QgaW50IFJPVF9JQ09OX0hPVF9ZOwogICAgc3RhdGljIGNvbnN0IGNoYXIgUk9UX0lDT05f QklUU1tdOwoKfTsKCgojIDQgImgvVmlld01hbmlwdWxhdG9yLmgiIDIKCgpjbGFzcyBWaWV3TWFu aXB1bGF0b3I6IHB1YmxpYyBNYW5pcHVsYXRvcgp7CnByb3RlY3RlZDoKICAKICAgIE1fVmVjdG9y IF9vcmJpdEF4aXNYLCBfb3JiaXRBeGlzWSwgX29yYml0QXhpc1o7CiAgICBNX01hdHJpeCBfb3Ji aXRNYXQ7CiAgICBNX01hdHJpeCBfb3JpZW50YXRpb247CiAgICBNX01hdHJpeCBfbmV3T3JpZW50 YXRpb247CiAgICB1aW50ICBfbW9kZTsKICAgIGZsb2F0IF9zdGFydFgsIF9zdGFydFk7CiAgICBm bG9hdCBfbGFzdFgsICBfbGFzdFk7CiAgICB1aW50IF9wV2lkdGgsIF9wSGVpZ2h0OwogICAgYm9v bCBfaXNPcnRob0NhbWVyYTsKICAgIGZsb2F0IF9vcnRob1NjYWxlOwoKcHVibGljOgogICAgIAog ICAgZW51bSB7IFJPVFhZLCBST1RaLCBUUkFOWFksIFRSQU5aLCBOT09QIH07CgogICAgVmlld01h bmlwdWxhdG9yKHZvaWQgKik7CiAgICB2aXJ0dWFsIH5WaWV3TWFuaXB1bGF0b3IoKTsKCiAgICB2 aXJ0dWFsIGludCBTdGFydE1hbmlwdWxhdGlvbiggT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QqIGNi LAoJCQkJICAgdm9pZCogY2FtUHRyLAoJCQkJICAgaW50IHBvcnRXaWR0aCwgaW50IHBvcnRIZWln aHQsCgkJCQkgICB2b2lkICp1RGF0YSA9IF9fbnVsbCAgKTsKICAgIHZpcnR1YWwgYm9vbCBNb3Zl KE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIGJvb2wgRmluaXNoTWFu aXB1bGF0aW9uKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIGludCBD aGVja0hvdFNwb3RzKE9wZW5TdGFnZUNhbGxiYWNrU3RydWN0ICpjYik7CiAgICB2aXJ0dWFsIHZv aWQgQ2FsY0hvdFNwb3RzKCBpbnQgcG9ydFdpZHRoLCBpbnQgcG9ydEhlaWdodCApOwogICAgdmly dHVhbCB2b2lkIERyYXdpbmdSb3V0aW5lKHZvaWQgKik7CgogICAgIAogICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIENBTV9JQ09OX1dJRFRIOwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIENBTV9J Q09OX0hFSUdIVDsKICAgIHN0YXRpYyBjb25zdCBpbnQgQ0FNX0lDT05fSE9UX1g7CiAgICBzdGF0 aWMgY29uc3QgaW50IENBTV9JQ09OX0hPVF9ZOwogICAgc3RhdGljIGNvbnN0IGNoYXIgQ0FNX0lD T05fQklUU1tdOwp9OwoKCgoKIyAyMyAiaC9ucmh5X2NsYXNzVmlld01hbmlwdWxhdG9yLmgiIDIK Cgp1c2luZyBzdGQ6OnZlY3RvcjsKCmNsYXNzIE5SSFlfQ2hhbm5lbE1hbmlwdWxhdG9yCnsKCnBy b3RlY3RlZDoKICAgIE5SSFlfY2xhc3NDaGFubmVsTGlzdCBfY2hhbkxpc3Q7CiAgICB2aXJ0dWFs IHZvaWQgZ2V0Q2hhbkxpc3QoIE5SSFlfY2xhc3NDaGFubmVsTGlzdCogY0xpc3QgPSBfX251bGwg ICkgPSAwOwoKcHVibGljOgogICAgTlJIWV9DaGFubmVsTWFuaXB1bGF0b3IoKXt9CiAgICB2aXJ0 dWFsIH5OUkhZX0NoYW5uZWxNYW5pcHVsYXRvcigpe30KCiAgICAgCiAgICB2b2lkIFNhdmVDaGFu bmVscygpOwogICAgdm9pZCBSZXNldENoYW5uZWxzKCk7CiAgICB2b2lkIEF1ZGl0Q2hhbm5lbHMo KTsKICAgIHZvaWQgU2V0VW5kb0NoYW5uZWxzKCk7CgogICAgIAogICAgc3RhdGljIE5SSFlfQ2hh bm5lbE1hbmlwdWxhdG9yKiBnZXQoIE1hbmlwdWxhdG9yKiApOwp9OwoKY2xhc3MgTlJIWV9DYW1l cmFNYW5pcHVsYXRvcjoKICAgIHB1YmxpYyBOUkhZX0NoYW5uZWxNYW5pcHVsYXRvciwKICAgIHB1 YmxpYyBWaWV3TWFuaXB1bGF0b3IsCiAgICBwdWJsaWMgT2JzZXJ2ZXIKewoKICAgIGNsYXNzIE5S SFlfY2xhc3NDYW1lcmEqIF9jYW1lcmE7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICB2b2lkIGdldENo YW5MaXN0KCBOUkhZX2NsYXNzQ2hhbm5lbExpc3QqIGNMaXN0ID0gX19udWxsICApOwoKcHVibGlj OgogICAgTlJIWV9DYW1lcmFNYW5pcHVsYXRvciggTlJIWV9jbGFzc0NhbWVyYSogKTsKICAgIH5O UkhZX0NhbWVyYU1hbmlwdWxhdG9yKCk7CgogICAgIAogICAgaW50ICBHZXRPYnNlcnZlclR5cGUo KSB7IHJldHVybiAweDAwMDAwMDA0IDsgfTsKICAgIHZvaWQgUmVmcmVzaE9ic2VydmVyIChTdWJq ZWN0ICopOwogICAgaW50ICBBbGxvd0Rlc3RydWN0QnlTdWJqZWN0ICgpIHsgcmV0dXJuIDAgOyB9 OwoKICAgICAKICAgIHZvaWQgUmVmcmVzaCgpOwogICAgaW50IFN0YXJ0RmVlZGJhY2soKTsKICAg IGJvb2wgTW90aW9uRmVlZGJhY2soKTsKICAgIGJvb2wgRmluaXNoRmVlZGJhY2soKTsKICAgIGJv b2wgTW92ZSggT3BlblN0YWdlQ2FsbGJhY2tTdHJ1Y3QqICk7Cgp9OwoKY2xhc3MgTlJIWV9DYW1l cmFSaWdNYW5pcHVsYXRvcjoKICAgIHB1YmxpYyBOUkhZX0NoYW5uZWxNYW5pcHVsYXRvciwKICAg IHB1YmxpYyBWaWV3TWFuaXB1bGF0b3IsCiAgICBwdWJsaWMgT2JzZXJ2ZXIKewogICAgTlJIWV9j bGFzc09iamVjdCogX3BhcmVudDsKICAgIE5SSFlfY2xhc3NDYW1lcmEqIF9jYW1lcmE7Cgpwcm90 ZWN0ZWQ6CiAgICAgCiAgICB2b2lkIGdldENoYW5MaXN0KCBOUkhZX2NsYXNzQ2hhbm5lbExpc3Qq IGNMaXN0ID0gX19udWxsICApOwoKcHVibGljOgogICAgTlJIWV9DYW1lcmFSaWdNYW5pcHVsYXRv ciggTlJIWV9jbGFzc0NhbWVyYSogKTsKICAgIH5OUkhZX0NhbWVyYVJpZ01hbmlwdWxhdG9yKCk7 CgogICAgIAogICAgaW50IEdldE9ic2VydmVyVHlwZSgpIHsgcmV0dXJuIDB4MDAwMDAwMDQgOyB9 CiAgICB2b2lkIFJlZnJlc2hPYnNlcnZlciggU3ViamVjdCogKTsKICAgIGludCBBbGxvd0Rlc3Ry dWN0QnlTdWJqZWN0KCkgeyByZXR1cm4gMCA7IH0KCiAgICAgCiAgICB2b2lkIFJlZnJlc2goKTsK ICAgIGludCBTdGFydEZlZWRiYWNrKCk7CiAgICBib29sIE1vdGlvbkZlZWRiYWNrKCk7CiAgICBi b29sIEZpbmlzaEZlZWRiYWNrKCk7Cgp9OwoKCiMgNDEgImgvbnJoeV9jbGFzc0NhbWVyYS5oIiAy CgoKY2xhc3MgTlJIWV9jbGFzc1RyYWNrM2Q7CgogCiAKIAoKCiAKdGVtcGxhdGUgPGNsYXNzIFR5 cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX2Fs cGhhbGlzdDsKY2xhc3MgTlJIWV9jbGFzc1JvdG87CmNsYXNzIE5SSFlfY2xhc3NDaGFubmVsOwoK IAoKc3RydWN0IE5SSFlfY2xhc3NDYW1lcmE6CiAgICBwdWJsaWMgTlJIWV9jbGFzc09iamVjdCwK ICAgIHB1YmxpYyBPYnNlcnZlckZhY3RvcnkgPE5SSFlfY2xhc3NDYW1lcmE+CnsKcHJpdmF0ZToK ICAgIHR5cGVkZWYgTlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlf YWxwaGFsaXN0PE5SSFlfY2xhc3NDYW1lcmE+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21h dGNoIDxOUkhZX2NsYXNzQ2FtZXJhPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2Ns YXNzQ2FtZXJhPjsKCiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1l X2hlcm87CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lX3NpbXA7 CiAgICBMaXN0PE5SSFlfY2xhc3NSb3RvKj4gICAgICAgICAgIHJvdG9zOwoKICAgIFpPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgb3J0aG9BY3RpdmU7CgogICAgIAoKICAgIE1fTWF0cml4 ICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhUHJvamVjdGlvbk1hdHJpeDsKICAgIE1fTWF0 cml4ICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhT3J0aG9NYXRyaXg7CgogICAgIAoKICAg IE1fTWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVvTGVmdE1hdHJpeDsKICAgIE1f TWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVvUmlnaHRNYXRyaXg7CiAgICBNX01h dHJpeCAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXJlb0xlZnRQcm9qZWN0aW9uTWF0cml4Owog ICAgTV9NYXRyaXggICAgICAgICAgICAgICAgICAgICAgICBzdGVyZW9SaWdodFByb2plY3Rpb25N YXRyaXg7CgogICAgIAoKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcmVv TW9kZTsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VNYXRy aXggKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkIGRldGFjaChOUkhZX2Rl cGVuZERhdGEgKik7CgogICAgIAogICAgTGlzdCA8TV9WZWN0b3IyPiAgICAgICAgICAgICAgICBz a2V0Y2hQaXhlbHM7CiAgICBOUkhZX2NsYXNzT2JqZWN0KiBnZXRQb3NPYmplY3QoKTsKCnByb3Rl Y3RlZDoKICAgIE5SSFlfY2xhc3NUcmFjazNkICAgICAgICAgICAgICAgKnRyYWNrM2RSZWNvcmQ7 CiAgICBWaWV3TWFuaXB1bGF0b3IqIGNhbWVyYU1hbmlwdWxhdG9yOwogICAgYm9vbCBkaXJ0eUNh bWVyYU1hbmlwdWxhdG9yOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu aXRpYWxpemUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9MSVNI ICBvcnRob0ZsYWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAK ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFdvcmxkVHJhdmVyc2UoKTsK CnB1YmxpYzoKICAgICAKICAgIE5SSFlfY2xhc3NDYW1lcmEgKAogICAgICAgIGNvbnN0IENIQVIg ICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NDYW1lcmEgKAogICAgICAgIGNvbnN0IENI QVIgICAgICAgICAgKm5hbWUsCiAgICAgICAgTlJIWV9jbGFzc0NhbWVyYSAgICAqY2xvbmVGcm9t CiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NDYW1lcmEgKAogICAgICAgIHZvaWQgCiAgICAgICAg KTsKCiAgICB+TlJIWV9jbGFzc0NhbWVyYSAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAg ICAKICAgIHN0YXRpYyBjb25zdCBDSEFSICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFt ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc0NhbWVy YSIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAgICAgR2V0U2Vs ZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuIChUSElOR19U WVBFX0NBTUVSQSk7IH0KCgogICAgZW51bSB7IFJFUE9TSVRJT05fTk9ORSwgUkVQT1NJVElPTl9P QkpFQ1QsIFJFUE9TSVRJT05fUklHIH07CiAgICBpbnQgUmVwb3NpdGlvblR5cGUoKTsKICAgIFZp ZXdNYW5pcHVsYXRvciogR2V0Q2FtZXJhTWFuaXB1bGF0b3IoKTsKICAgIGJvb2wgQ3JlYXRlQ2Ft ZXJhTWFuaXB1bGF0b3IoKTsgCiAgICB2b2lkIERlc3Ryb3lDYW1lcmFNYW5pcHVsYXRvcigpOwog ICAgdm9pZCBEaXJ0eUNhbWVyYU1hbmlwdWxhdG9yKCk7CiAgICBpbnQgTG9va0F0T3JiaXRPYmpl Y3QoKTsKICAgIGludCBQb2ludEF0T3JiaXRPYmplY3QoKTsKCiAgICBzdGF0aWMgTlJIWV9idW5j aDxOUkhZX2NsYXNzQ2FtZXJhPiAgICAgKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5h bWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAg Km5ld05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZ X2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAg ICAgICpQcmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgeyByZXR1cm4gKCJjYW1lcmEiKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfQ0FNRVJBKTsgfQoKICAgIHN0YXRpYyBaT09M RUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUZvY2FsICgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBmb2NhbAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAg ICAgICAgICBDaGVja1Bvc3NpYmxlQXNwZWN0ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBhc3BlY3QKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hl Y2tQb3NzaWJsZUFwZXJ0dXJlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFJFQUwgICAgICBhcGVydHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3Np YmxlSGl0aGVyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFJFQUwgICAgICBoaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK ICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZVlvbiAoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgeW9u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBzdGF0aWMgWk9PTEVB TiAgICAgICAgICAgICAgICAgIENoZWNrUG9zc2libGVGYWRlciAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgZmFkZXIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAg ICAgICAgQ2hlY2tQb3NzaWJsZU9ydGhvU2NhbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG9ydGhvU2NhbGUKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgCgogICAgIAogICAgWk9PTEVBTiAgICAgICAg ICAgICAgICAgICAgICAgICBTZXRSb3RvICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3Q8TlJIWV9jbGFzc1JvdG8qPiAgICAgICAmbmV3Um90b0xpc3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBJTlQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFkZFJvdG8gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlJIWV9jbGFzc1JvdG8gICAgICAgICAgICAgICpuZXdSb3RvCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZW1vdmVSb3RvICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5SSFlfY2xhc3NSb3RvICAgICAgICAgICAgICAqUm90bwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0 Rm9jYWxJbk1NICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFJFQUwgICAgICBuZXdGb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRBc3BlY3QgKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0FzcGVj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgICBTZXRBcGVydHVyZSAoCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3QXBlcnR1cmUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICAgU2V0SGl0aGVyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFJFQUwgICAgICBuZXdIaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0WW9uICgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdZ b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgICAgU2V0RmFkZXIgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0ZhZGVyCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg IFNldEljb25zY2FsZSAoZmxvYXQgbmV3SWNvbnNjYWxlKTsKICAgIFpPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgU2V0T3J0aG9BY3RpdmUgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgWk9PTEVBTiAgIG5ld09ydGhvQWN0aXZlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgIFNldE9ydGhvU2NhbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUkVBTCAgICAgIG5ld09ydGhvU2NhbGUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgIFNldFNvbGlkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFJFQUwgICAgICBuZXdTb2xpZFZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgeyByZXR1cm4gKDAgKTsgfQogICAgIAogICAgWk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICAgICBTZXRTdGVyZW9MZWZ0RXllQWN0aXZlICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFpPT0xFQU4gICBzdGF0dXMKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgIFNldFN0ZXJlb1JpZ2h0RXllQWN0aXZlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFpPT0xFQU4gICBzdGF0dXMKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKCiAgICAgCgoKICAgICAKICAgICAKICAgIExpc3Q8TlJIWV9jbGFz c1JvdG8qPiAgICAgICAgICAgJkdldFJvdG9zICgpIHsgcmV0dXJuIHRoaXMtPnJvdG9zOyB9Cgog ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGb2NhbEluTU0gKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAg R2V0QXNwZWN0ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdldEFwZXJ0dXJlICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEhpdGhlciAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHZXRZb24gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0RmFkZXIgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIEdldE9ydGhvQWN0aXZlICgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKG9ydGhvQWN0aXZlKTsgfSAgCiAgICBS RUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE9ydGhvU2NhbGUgKAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R2V0Q2FtZXJhTWF0cml4ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1fTWF0cml4ICAgICZtYXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVByb2plY3Rp b25NYXRyaXggKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9NYXRy aXggICAgJm1hdHJpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg dm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q2FtZXJhSW52ZXJzZVdvcmxkTWF0 cml4ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAg ICZtYXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q2FtZXJhRmFkZXJWYWx1ZSAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH ZXRDYW1lcmFTdGVyZW9BY3RpdmVGbGFnICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAg ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDYW1lcmFTdGVyZW9MZWZ0TWF0 cml4ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAg ICZtYXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVN0ZXJlb1JpZ2h0TWF0cml4ICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAgICZtYXRy aXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVN0ZXJlb0xlZnRQcm9qZWN0aW9uTWF0cml4 ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1fTWF0cml4ICAgICZt YXRyaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdldENhbWVyYVN0ZXJlb1JpZ2h0UHJvamVjdGlvbk1h dHJpeCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNX01hdHJpeCAg ICAmbWF0cml4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAog ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTb2xpZCAoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApIHsgcmV0dXJuICgoUkVBTCkwLjApOyB9CiAgICAgCiAgICBaT09MRUFO ICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0ZXJlb0xlZnRFeWVBY3RpdmUgKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg IEdldFN0ZXJlb1JpZ2h0RXllQWN0aXZlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog ICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGVyZW9Nb2RlICgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCBDcmVhdGVPYnNlcnZlciAoaW50IHR5cGUp IHsgCglPYnNlcnZlckZhY3Rvcnk8TlJIWV9jbGFzc0NhbWVyYT46OmRvQ3JlYXRlT2JzZXJ2ZXIg KHRoaXMsIHR5cGUpOyB9OwoKICAgICAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3Ry ZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmli ZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGVzY3JpYmVEZWxldGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZvY2FsSW5NTSAoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0g JgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVBc3BlY3QgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERlc2NyaWJlQXBlcnR1cmUgKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaWJlSGl0aGVyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZXNjcmliZVlvbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGVzY3JpYmVGYWRlciAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp YmVPcnRob0FjdGl2ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3Jp YmVPcnRob1NjYWxlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CiAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl c2NyaWJlUm90byAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz cyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVU cmFjazNkUmVjb3JkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli ZUljb25zY2FsZShOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJik7CiAgICB2b2lkIAkJCSAgICBM aXN0Q2FtZXJhKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwoKICAgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRyYWNrM2RSZWNvcmQgKCk7CgogICAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlVHJhY2szZFJlY29yZCAoKTsKCiAg ICBOUkhZX2NsYXNzVHJhY2szZCAgICAgICAgICAgICAgICAqR2V0VHJhY2szZFJlY29yZCAoKTsK CgogICAgIAogICAgdm9pZCBhZGRTa2V0Y2hQaXhlbCggTV9WZWN0b3IyJiApOwogICAgdm9pZCBl cmFzZVNrZXRjaFBpeGVscyggTV9WZWN0b3IyJiwgZmxvYXQgKTsKICAgIHZvaWQgd2lwZVNrZXRj aCgpOwogICAgTV9WZWN0b3IyIHNrZXRjaFBpeGVsKCB1bnNpZ25lZCApOwogICAgdW5zaWduZWQg blNrZXRjaFBpeGVscygpOwogICAgCgp9OwoKIAoKIAoKIyAzMiAibnJoeS9OUkhZX0FjY2Vzcy5j IiAyCgojIDEgImgvbnJoeV9jbGFzc0xpZ2h0LmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgwKIAoKCgogCgoKIAoKCgoKCiAKCgoKY2xhc3MgTlJIWV9jbGFzc1VzZU1hcDsKCiAKIAogCgog CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNoOwp0ZW1wbGF0ZSA8Y2xhc3Mg VHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCgpzdHJ1Y3QgTlJIWV9jbGFzc0xpZ2h0IDog CiAgICBwdWJsaWMgTlJIWV9jbGFzc09iamVjdCwKICAgIHB1YmxpYyBPYnNlcnZlckZhY3Rvcnkg PE5SSFlfY2xhc3NMaWdodD4Kewpwcml2YXRlOgogICAgdHlwZWRlZiBOUkhZX2NsYXNzT2JqZWN0 IGluaGVyaXRlZDsKICAgIHR5cGVkZWYgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc0xpZ2h0PiBh bHBoYWxpc3Q7CiAgICBmcmllbmQgTlJIWV9tYXRjaCA8TlJIWV9jbGFzc0xpZ2h0PjsKICAgIGZy aWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzTGlnaHQ+OwoKICAgIFR3aW5lICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWNvbk5hbWVfaGVybzsKICAgIFR3aW5lICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWNvbk5hbWVfc2ltcDsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgIHNwb3RsaWdodFN0YXR1czsKCiAgICAgCiAgICBaT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgIHNwb3RsaWdodEljb25TdGF0dXM7CgogICAgIAogICAgWk9PTEVBTiAg ICAgICAgICAgICAgICAgICAgICAgICBzcG90bGlnaHRCZWFtU3RhdHVzOwoKICAgIHZvaWQgZGV0 YWNoKE5SSFlfZGVwZW5kRGF0YSAqKTsKCiAgICBib29sIF9zaGFkb3dGbGFnOwoKcHJvdGVjdGVk OgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIApwdWJsaWM6CiAgICAgCiAgICBOUkhZX2NsYXNzTGlnaHQg KAogICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NMaWdo dCAoCiAgICAgICAgY29uc3QgQ0hBUiAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NMaWdo dCAqY2xvbmVGcm9tCiAgICAgICAgKTsKICAgIE5SSFlfY2xhc3NMaWdodCAoCiAgICAgICAgdm9p ZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzTGlnaHQgKAogICAgICAgIHZvaWQgCiAgICAg ICAgKTsKCiAgICAgCiAgICBzdGF0aWMgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICpQcmludFNl bGZDbGFzc25hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoIk5SSFlf Y2xhc3NMaWdodCIpOyB9CgogICAgIAoKICAgIHN0YXRpYyBJTlQgICAgICAgICAgICAgICAgICAg ICAgR2V0U2VsZkNsYXNzVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJu IChUSElOR19UWVBFX0xJR0hUKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1bmNoPE5SSFlfY2xhc3NM aWdodD4gKkZpbmQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQ0hBUiAgKm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg ICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWUgKAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBOUkhZX2NsYXNzVGhpbmcgICAgICAg ICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwoKICAgICAKCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAgICAgICpQcmludERl cml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyBy ZXR1cm4gKCJsaWdodCIpOyB9CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdl dERlcml2ZWRDbGFzc09mU2VsZlR5cGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJl dHVybiAoVEhJTkdfVFlQRV9MSUdIVCk7IH0KCiAgICAgCiAgICBzdGF0aWMgWk9PTEVBTiAgICAg ICAgICAgICAgICAgIENoZWNrUG9zc2libGVGb2N1cyAoCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSRUFMICAgICAgICAqbmV3Rm9jdXMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICBudW1iZXIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAg ICAgQ2hlY2tQb3NzaWJsZUF0dGVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJFQUwgICAgICAgICpuZXdBdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IElOVCAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwoKICAgICAKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg IFNldExndENvbG9yICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFJFQUwgICAgICAqbmV3TGd0Q29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBJTlQgICAgICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExn dERpZmYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVB TCAgICAgICpuZXdMZ3REaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgSU5UICAgICAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZ3RTcGVjICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICAq bmV3TGd0U3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IElOVCAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExndFNwZWNSZWQgKAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0xn dFNwZWNSZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BlY0dyZWVuICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdMZ3RTcGVjR3Jl ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BlY0JsdWUgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0xndFNwZWNCbHVlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAg ICAgICAgICAgICAgICBTZXRMZ3REaWZmUmVkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdMZ3REaWZmUmVkCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgIFNldExndERpZmZHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBSRUFMICAgICAgbmV3TGd0RGlmZkdyZWVuCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNl dExndERpZmZCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFJFQUwgICAgICBuZXdMZ3REaWZmQmx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGd0SW50 ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwg ICAgICBuZXdMZ3RJbnRlbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BlY0ludGVucyAoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3 TGd0SW50ZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09M RUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExndERpZmZJbnRlbnMgKAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0xndEludGVu cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgICAgU2V0TGd0U3BvdExpZ2h0SWNvblN0YXR1cyAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBaT09MRUFOICAgbmV3TGd0U3Bv dExpZ2h0SWNvblN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog ICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRMZ3RTcG90TGlnaHRCZWFtU3Rh dHVzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFpPT0xF QU4gICBuZXdMZ3RTcG90TGlnaHRCZWFtU3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldExndFNw b3RMaWdodFN0YXR1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBaT09MRUFOICAgbmV3TGd0U3BvdExpZ2h0U3RhdHVzCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNl dEZvY3VzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJF QUwgICAgICAqbmV3Rm9jdXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJTlQgICAgICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldEZvY3VzTWluICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBu ZXdGb2N1c01pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRGb2N1c01heCAoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3Rm9jdXNNYXgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgU2V0Rm9jdXNFeHAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0ZvY3VzRXhwCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg IFNldEF0dGVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFJFQUwgICAgICAqbmV3QXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBJTlQgICAgICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldEF0dGVuU3Rh cnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAg ICAgIG5ld0F0dGVuU3RhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK ICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0QXR0ZW5FbmQgKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0F0dGVu RW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgIFNldEF0dGVuRXhwICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdBdHRlbkV4cAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIFpPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgU2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld1NvbGlkVmFsdWUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKSB7IHJldHVybiAoMCApOyB9CiAgICBaT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgIFNldEljb25zY2FsZShmbG9hdCBuZXdJY29uc2NhbGUpOwogICAgUkVB TCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRMZ3REaWZmUmVkICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldExn dERpZmZHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHZXRMZ3REaWZmQmx1ZSAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRMZ3REaWZmSW50 ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgUkVBTCAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHZXRMZ3RTcGVjUmVkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldExndFNwZWNHcmVlbiAoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHZXRMZ3RTcGVjQmx1ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVB TCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRMZ3RTcGVjSW50ZW5zICgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CgoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg R2V0TGd0U3BvdExpZ2h0SWNvblN0YXR1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsg cmV0dXJuIChzcG90bGlnaHRJY29uU3RhdHVzKTsgfQogICAgWk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICAgICBHZXRMZ3RTcG90TGlnaHRCZWFtU3RhdHVzICgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgeyByZXR1cm4gKHNwb3RsaWdodEJlYW1TdGF0dXMpOyB9CiAgICBaT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgIEdldExndFNwb3RMaWdodFN0YXR1cyAoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApIHsgcmV0dXJuIChzcG90bGlnaHRTdGF0dXMpOyB9CiAgICBSRUFMICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdldExndFNwb3RFeHAgKAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TGd0U3Bv dEFuZ2xlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpHZXRGb2N1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRGb2N1c01pbiAoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBH ZXRGb2N1c01heCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHZXRGb2N1c0V4cCAoCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqR2V0QXR0ZW4gKAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR2V0QXR0ZW5TdGFydCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVBTCAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRBdHRlbkVuZCAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRBdHRlbkV4 cCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKICAgIFJFQUwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7 IHJldHVybiAoKFJFQUwpMC4wKTsgfQogICAgCiAgICB2b2lkIENyZWF0ZU9ic2VydmVyIChpbnQg dHlwZSkgewoJT2JzZXJ2ZXJGYWN0b3J5PE5SSFlfY2xhc3NMaWdodD46OmRvQ3JlYXRlT2JzZXJ2 ZXIgKHRoaXMsIHR5cGUpOyB9CiAgICAKICAgICAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERlc2NyaWJlQ3JlYXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERlc2NyaWJlRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg IERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERlc2NyaWJlV3JlbkZ1bGxTdGF0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBE ZXNjcmliZUxndENvbG9yICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny aWJlTGd0SW50ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl TGd0U3BvdExpZ2h0U3RhdHVzICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl c2NyaWJlTGd0U3BvdExpZ2h0SWNvblN0YXR1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEZXNjcmliZUxndFNwb3RFeHAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzY3JpYmVMZ3RTcG90QW5nbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzY3JpYmVGb2N1cyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBE ZXNjcmliZUF0dGVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl RGlmZnVzZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVNwZWN1 bGFyICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlf Q2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVRleHR1cmUg KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFz c0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK ICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVJY29uc2NhbGUoTlJI WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYpOwogICAgdm9pZCAJCQkgICAgU2V0VXNlTWFwc0xpc3Qg KAogICAgCQkJCQlOUkhZX2J1bmNoIDxOUkhZX2NsYXNzVXNlTWFwPiAgKm5ld1VzZU1hcHMKCQkJ CSAgICApOwogICAgdm9pZCAJCQkgICAgUmVtb3ZlVXNlTWFwc0xpc3QgKAogICAgCQkJCQlOUkhZ X2J1bmNoIDxOUkhZX2NsYXNzVXNlTWFwPiAgKm5ld1VzZU1hcHMKCQkJCSAgICApOwoKICAgIHZv aWQgCQkJICAgIEVyYXNlVXNlTWFwc0xpc3QgKAogICAgCQkJCQl2b2lkCgkJCQkgICAgKTsKICAg IHZvaWQgCQkJICAgIExpc3RMaWdodChGSUxFICpmcCwgY29uc3QgTGlzdDxUd2luZT4gJmxzKTsK CiAgICBib29sCUdldFNoYWRvd0ZsYWcodm9pZCkgeyByZXR1cm4gX3NoYWRvd0ZsYWc7IH0KCiAg ICB2b2lkCVNldFNoYWRvd0ZsYWcoYm9vbCBmbGFnKSB7IF9zaGFkb3dGbGFnID0gZmxhZzsgfQoK CiAgICBMaXN0PE5SSFlfY2xhc3NVc2VNYXAgICo+IAlfdXNlbWFwc0xpc3Q7CiAgIAogICAgc3Rh dGljIGludAkJCV9tYXhMaWdodHM7Cgpwcm90ZWN0ZWQ6CiAgICAgCiAgICB2b2lkIHBvc3RXb3Js ZFRyYXZlcnNlICgpOwp9OwoKIAoKIAoKIyAzMyAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEg ImgvbnJoeV9jbGFzc01hcC5oIiAxCgogCgoKCgoKCgoKCgoKCgoKCgwKIAoKCgogCgoKIAoKCgoK CiAKCgojIDEgImgvbnJoeV9jbGFzc1JvdG9EYXRhLmgiIDEKCgoKCiMgMSAiL3NvZnR3YXJlL3Ro YWxpYS9oL3N0ZHR5cGVzLmgiIDEKCiAKCgoKCgoKCgoKCgoKCgoKCgojIDIwMyAiL3NvZnR3YXJl L3RoYWxpYS9oL3N0ZHR5cGVzLmgiCgoKCgoKCgoKCgoKCgoKIyA1ICJoL25yaHlfY2xhc3NSb3Rv RGF0YS5oIiAyCgoKCgoKCgoKCmNsYXNzIE5SSFlfY2xhc3NNYXA7CmNsYXNzIE5SSFlfY2xhc3NS b3RvOwoKY2xhc3MgICBOUkhZX2NsYXNzUm90b0RhdGEgewoKcHVibGljOgoKICAgIE5SSFlfY2xh c3NSb3RvRGF0YSggdm9pZCApIHt9OwogICAgTlJIWV9jbGFzc1JvdG9EYXRhKCBJTlQgaW54LCBU d2luZSBuYW1lLCBJTlQgZGVwdGgsIE5SSFlfY2xhc3NNYXAgKk1hcCk7CiAgICBOUkhZX2NsYXNz Um90b0RhdGEoIE5SSFlfY2xhc3NSb3RvRGF0YSAqY2xvbmVGcm9tLCBOUkhZX2NsYXNzTWFwICpN YXApOwogICAgfk5SSFlfY2xhc3NSb3RvRGF0YSggdm9pZCApOwoKICAgIHZvaWQgICAgIFJlYWRJ bWFnZSgpOwogICAgdm9pZCAgICAgUmVhZENyb3BEYXRhUHJlY2lzZSggdm9pZCApOwogICAgdm9p ZCAgICAgV3JpdGVDcm9wRGF0YVByZWNpc2UoIE5SSFlfY2xhc3NSb3RvICosIElOVCAqLAoJCQkJ ICB1bnNpZ25lZCB3ID0gMCwgdW5zaWduZWQgaCA9IDAKCQkJCSAgKTsKICAgIHZvaWQgICAgIFZp c2libGVDcm9wUGFyYW1ldGVyc1ByZWNpc2UoICAJUkVBTCAgICBwb3J0Wm9vbSwgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJUkVBTCAgICBwb3J0WG9mZnNldCwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJUkVBTCAgICBwb3J0WW9mZnNl dCApOwogICAgSU5UICAgICBHZXRXaWR0aCAoIHZvaWQgKSB7IHJldHVybiggdGhpcy0+d2lkdGgp O30KICAgIElOVCAgICAgR2V0SGVpZ2h0ICggdm9pZCApIHsgcmV0dXJuKCB0aGlzLT5oZWlnaHQp O30KICAgIHZvaWQgICAgIFJlc2V0Q2xlYW4gKHZvaWQgKSB7IHRoaXMtPmNsZWFuID0gMCA7fQog ICAgdm9pZCAgICAgQ2xlYXIgKHZvaWQgKTsKCiAgICB2b2lkIFNldE5hbWUgKFR3aW5lICZuYW1l KSB7IGZpbGVuYW1lID0gbmFtZTsgfQogICAgc2hvcnQgR2V0Q29va2llICgpIHsgcmV0dXJuIF9t YXBDb29raWU7IH0KICAgIHZvaWQgU2V0Q29va2llIChzaG9ydCBjKSB7IF9tYXBDb29raWUgPSBj OyB9CgogICAgSU5UICAgICAgICAgICAgICAgICBpbmRleDsgICAgICAgICAgIAogICAgSU5UICAg ICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgIAogICAgSU5UICAgICAgICAgICAgICAgICBo ZWlnaHQ7ICAgICAgICAgCiAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAgIG9yaWdXaWR0aDsg ICAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAgIG9yaWdIZWlnaHQ7ICAgICAKICAgIFJFQUwg ICAgICAgICAgICAgICAgeE9yaWdpbjsgICAgICAgICAKICAgIFJFQUwgICAgICAgICAgICAgICAg eU9yaWdpbjsgICAgICAgICAKICAgIFJFQUwgICAgICAgICAgICAgICAgZGVjaW1hdGU7ICAgICAg ICAKCiAgICBJTlQgICAgICAgICAgICAgICAgIGltYWdlV2lkdGg7ICAgICAgCiAgICBJTlQgICAg ICAgICAgICAgICAgIGltYWdlSGVpZ2h0OwogICAgSU5UICAgICAgICAgICAgICAgICBwb3J0V2lk dGg7ICAgICAgIAogICAgSU5UICAgICAgICAgICAgICAgICBwb3J0SGVpZ2h0OwogICAgICAgIAog ICAgUkVBTCAgICAgICAgICAgICAgICB2aXNpYmxlQ3JvcFdpZHRoOwkgCiAgICBSRUFMICAgICAg ICAgICAgICAgIHZpc2libGVDcm9wSGVpZ2h0OwogICAgUkVBTCAgICAgICAgICAgICAgICB2aXNp YmxlQ3JvcFhvZmZzZXQ7ICAKICAgIFJFQUwgICAgICAgICAgICAgICAgdmlzaWJsZUNyb3BZb2Zm c2V0OyAgCgogICAgUkVBTCAgICAgICAgICAgICAgICB3YXJyYXlXaWR0aDsJIAogICAgUkVBTCAg ICAgICAgICAgICAgICB3YXJyYXlIZWlnaHQ7CiAgICBSRUFMICAgICAgICAgICAgICAgIHdhcnJh eVhvZmZzZXQ7ICAgICAgIAogICAgUkVBTCAgICAgICAgICAgICAgICB3YXJyYXlZb2Zmc2V0OyAg ICAgICAKCiAgICBSRUFMICAgICAgICAgICAgICAgIHBvcnRab29tOyAgICAgICAgCiAgICBSRUFM ICAgICAgICAgICAgICAgIHBvcnRYb2Zmc2V0OyAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAg IHBvcnRZb2Zmc2V0OwoKICAgIFJFQUwgICAgICAgICAgICAgICAgcmVjdFpvb207ICAgICAgICAK CiAgICBSRUFMICAgICAgICAgICAgICAgIHJlZFdlaWdodDsgICAgICAgCiAgICBSRUFMICAgICAg ICAgICAgICAgIGdyZWVuV2VpZ2h0OwogICAgUkVBTCAgICAgICAgICAgICAgICBibHVlV2VpZ2h0 OwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgZmlsbU1vZGU7ICAgICAgICAKCiAgICBCT09MRUFO ICAgICAgICAgICAgIGZpdDsgICAgICAgICAgICAgCiAgICAgCiAgICB1bnNpZ25lZCBjaGFyICAg ICAgIGRlcHRoOyAgICAgICAgICAgCiAgICB1bnNpZ25lZCBsb25nICAgICAgICpyYXJyYXk7ICAg ICAgICAgCiAgICBVX0NIQVIgICAgICAgICAgICAgICpjYXJyYXk7ICAgICAgICAgCiAgICBUd2lu ZSAgICAgICAgICAgICAgIGZpbGVuYW1lOyAgICAgICAgCiAgICBOUkhZX2NsYXNzTWFwICAgICAg ICpNYXA7ICAgICAgICAgICAgCgogICAgIAogICAgc3RhdGljICB1bnNpZ25lZCBsb25nICAgICAg ICAgICAqYnl0ZTJsb25nTFVUOwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgY2xlYW47ICAgICAg IAogICAgQk9PTEVBTiAgICAgICAgICAgICByZWFkV2hvbGVJbWFnZTsgIAoKcHJpdmF0ZToKCQog ICAgc2hvcnQgX21hcENvb2tpZTsKCQp9OwoKaW5saW5lIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgg TlJIWV9jbGFzc1JvdG9EYXRhICkgeyByZXR1cm4gIk5SSFlfY2xhc3NSb3RvRGF0YSI7IH07CgpJ TlQgR2V0QXZhaWxhYmxlTWVtb3J5KHZvaWQpOwoKCiMgMzUgImgvbnJoeV9jbGFzc01hcC5oIiAy CgojIDEgImgvTlJIWV9Db29raWUuaCIgMQoKCgpjbGFzcyBOUkhZX0Nvb2tpZSB7CiAgICBzaG9y dCBfY29va2llOwpwdWJsaWM6CiAgICBOUkhZX0Nvb2tpZSgpIDogX2Nvb2tpZSgxKSB7fQogICAg dm9pZCBVcGRhdGVDb29raWUoKSB7IF9jb29raWUrKzsgfQogICAgc2hvcnQgR2V0QmFkQ29va2ll KCkgeyByZXR1cm4gX2Nvb2tpZSAtIDE7IH0KICAgIHNob3J0IEdldENvb2tpZSgpIHsgcmV0dXJu IF9jb29raWU7IH0KfTsKCgojIDM2ICJoL25yaHlfY2xhc3NNYXAuaCIgMgoKCmVudW0gZXhjZXB0 aW9uVVYgeyBCTEVFRCwgTk9STUFMIH07CgogCiAKIAoKIAp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4g Y2xhc3MgTlJIWV9tYXRjaDsKdGVtcGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfYWxwaGFs aXN0OwoKc3RydWN0IE5SSFlfY2xhc3NNYXA6cHVibGljIE5SSFlfY2xhc3NUaGluZyB7CnByaXZh dGU6CiAgICB0eXBlZGVmIE5SSFlfY2xhc3NUaGluZyBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5S SFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NNYXA+IGFscGhhbGlzdDsKICAgIGZyaWVuZCBOUkhZX21h dGNoIDxOUkhZX2NsYXNzTWFwPjsKICAgIGZyaWVuZCBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNz TWFwPjsKCiAgICAgCiAgICAgICAgSU5UICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7Cgpwcm90 ZWN0ZWQ6CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKCiAgICBJTlQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlcHRoOwoKICAgICAKICAgICAKICAgICAKCiAgICBUd2luZSAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEZpbGVuYW1lOwoKICAgIExpc3Q8TlJIWV9jbGFz c1JvdG9EYXRhICo+ICAgICAgbWFwRGF0YTsKICAgIE5SSFlfY2xhc3NSb3RvRGF0YSAgICAgICAg ICAgICAgKmN1cnJlbnRNYXA7CgogICAgIAoKICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAg ICAgICAgKnJhcnJheTsgICAgICAgIAoKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW1hZ2VXaWR0aDsgICAgICAKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SW1hZ2VIZWlnaHQ7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3BXaWR0 aDsKICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JvcEhlaWdodDsKICAgIElO VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JvcFhvcmlnaW47CiAgICBJTlQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENyb3BZb3JpZ2luOwogICAgRkxPQVQgICAgICAgICAgICAg ICAgICAgICAgICAgICBDcm9wRGVjaW1hdGU7ICAgCiAgICB2b2lkIHBvc3RXb3JsZFRyYXZlcnNl ICgpOwoKcHVibGljOgoKICAgIExpc3Q8VHdpbmU+CSAgICBfd3Jlbk9wdHM7CiAgICBCT09MRUFO ICAgICAgICAgX2NyZWF0ZURwdDsKCgogICAgVHdpbmUgICAgICAgICAgIGZpbGVOYW1lOwogICAg ZXhjZXB0aW9uVVYgICAgIG91dFVWYXJlYTsgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgIFR3aW5lICAgICAgICAgICBtb3N0UmVjZW50bHlSZWFkRmlsZTsK ICAgIAogICAgQk9PTEVBTiAgICAgICAgIGZpbG1Nb2RlOyAgICAgICAgCiAgICBCT09MRUFOICAg ICAgICAgcmVhZFdob2xlSW1hZ2U7ICAKCiAgICBOUkhZX0Nvb2tpZSAgICAgX01hcENvb2tpZTsK CiAgICAgCiAgICBOUkhZX2NsYXNzTWFwICgKICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAg ICAgICk7CiAgICBOUkhZX2NsYXNzTWFwICgKICAgICAgICBjb25zdCBDSEFSICAgICAgKm5hbWUs CiAgICAgICAgTlJIWV9jbGFzc01hcCAgICpjbG9uZUZyb20KICAgICAgICApOwogICAgTlJIWV9j bGFzc01hcCAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgIH5OUkhZX2NsYXNzTWFwICgK ICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIgICAg ICAgICAgICAgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkgeyByZXR1cm4gKCJOUkhZX2NsYXNzTWFwIik7IH0KCiAgICAgCgogICAgc3RhdGljIElOVCAg ICAgICAgICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTUFQKTsgfQoKICAgIHN0YXRpYyBOUkhZX2J1 bmNoPE5SSFlfY2xhc3NNYXA+ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdO YW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgTlJIWV9jbGFz c1RoaW5nICAgICAgICAgICAgICAgICAqQ2xvbmUgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQ0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKCiAgICBjb25zdCBDSEFSICAgICAgICAgICAgICAgICAgICAgICpQ cmludERlcml2ZWRDbGFzc09mU2VsZlR5cGVOYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkgeyByZXR1cm4gKCJtYXAiKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkg eyByZXR1cm4gKFRISU5HX1RZUEVfTUFQKTsgfQoKCiAgICAgCgoKICAgIHZvaWQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGVzY3JpYmVXcmVuRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaWJlRGVsZXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERlc2NyaWJlRmlsZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVzY3JpYmVEZXB0aCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNj cmliZU1hcE9uICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz IE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZvaWQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGaWxtTW9kZSAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlQ3JvcCAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERlc2NyaWJlV3Jlbk9wdHMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkIAkJCSAgICBMaXN0TWFwKEZJTEUgKmZw LCBjb25zdCBMaXN0PFR3aW5lPiAmbHMpOwoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICAgU2V0RmlsZU5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQ0hBUiAgICAgICpuZXdGaWxlTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREZXB0 aCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAg ICAgbmV3RGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFR3 aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RmlsZU5hbWUgKAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKSB7IHJldHVybiAodGhpcy0+cGFyc2VkRmlsZW5hbWUpOyB9CiAgICB2b2lk ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzZUZpbGVOYW1lICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERl cHRoICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKGRlcHRoKTsgfQoKICAg IEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q3VycmVudE1hcCggSU5UIHZhbHVl KTsKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0Q3VycmVudE1hcCggdm9p ZCApOwogICAgTlJIWV9jbGFzc1JvdG9EYXRhICAgICAgICAgICAgICAqR2V0Q3VycmVudE1hcCgp OwogICAgTlJIWV9jbGFzc1JvdG9EYXRhICAgICAgICAgICAgICAqR2V0Q3VycmVudE1hcCggSU5U IHZhbHVlKTsKCiAgICAgCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldElt YWdlV2lkdGgodm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 IHJldHVybiAodGhpcy0+SW1hZ2VXaWR0aCk7IH0gICAgICAgCiAgICBJTlQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdldEltYWdlSGVpZ2h0KHZvaWQgKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKHRoaXMtPkltYWdlSGVpZ2h0KTsgfQoKICAg IEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q3JvcFByZURlY2ltV2lkdGgodm9p ZCApOwogICAgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDcm9wUHJlRGVjaW1I ZWlnaHQodm9pZCApOwogICAgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDcm9w WG9yaWdpbih2b2lkICk7CiAgICBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENy b3BZb3JpZ2luKHZvaWQgKTsKICAgIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0 RGVjaW1hdGUodm9pZCApOwoKICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgKkdl dEltYWdlRGF0YVJlYWRQdHIodm9pZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7IHJldHVybiAodGhpcy0+cmFycmF5KTsgfSAgICAgICAKCiAgICB2b2lkICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWFkSW1hZ2UoVHdpbmUpOwogICAgWk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgICBDaGVja01lbW9yeSAoY29uc3QgY2hhciAqbmFtZSk7CiAgICBl eGNlcHRpb25VViAgICAgICAgICAgICAgICAgICAgIEdldEV4Y2VwdGlvblR5cGUoIHZvaWQgKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKHRoaXMtPm91 dFVWYXJlYSk7IH0KICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1cmdlRnJh bmdlKE5SSFlfSU5UX0ZSQU5HRSAqcmFuZ2UpOwogICAgVHdpbmUgICAgICAgICAgICAgICAgICAg ICAgICAgICBDb25zdHJ1Y3RNYXBOYW1lKElOVCB2YWx1ZSk7CgogICAgdm9pZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVsb2FkKHZvaWQgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAg ICAgICAgVXBkYXRlV3Jlbk9wdHMoIAogCQkJCVR3aW5lICAgICAgICAgICZ0CiAgICApOwogICAg dm9pZCAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVdyZW5PcHRzKCAKIAkJCQlUd2luZSAgICAg ICAgICAmdAogICAgKTsKCn07CgogCgogCgojIDM0ICJucmh5L05SSFlfQWNjZXNzLmMiIDIKCiMg MSAiaC9ucmh5X2NsYXNzTWF0ZXJpYWwuaCIgMQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKDAog CgoKCiAKCgogCgoKCgoKIAoKCgpjbGFzcyBOUkhZX2NsYXNzVXNlTWFwOwoKIAogCiAKCiAKdGVt cGxhdGUgPGNsYXNzIFR5cGU+IGNsYXNzIE5SSFlfbWF0Y2g7CnRlbXBsYXRlIDxjbGFzcyBUeXBl PiBjbGFzcyBOUkhZX2FscGhhbGlzdDsKCiAKCnN0cnVjdCBOUkhZX2NsYXNzTWF0ZXJpYWwgOgog ICAgcHVibGljIE5SSFlfY2xhc3NUaGluZywKICAgIHB1YmxpYyBPYnNlcnZlckZhY3RvcnkgPE5S SFlfY2xhc3NNYXRlcmlhbD4KewogICAgdHlwZWRlZiBOUkhZX2NsYXNzVGhpbmcgaW5oZXJpdGVk OwogICAgdHlwZWRlZiBOUkhZX2FscGhhbGlzdDxOUkhZX2NsYXNzTWF0ZXJpYWw+IGFscGhhbGlz dDsKICAgIGZyaWVuZCBOUkhZX21hdGNoIDxOUkhZX2NsYXNzTWF0ZXJpYWw+OwogICAgZnJpZW5k IE5SSFlfYWxwaGFsaXN0PE5SSFlfY2xhc3NNYXRlcmlhbD47CgogICAgdm9pZCBkZXRhY2goTlJI WV9kZXBlbmREYXRhICopOwoKICAgIHNob3J0IAlfdXNlbWFwQ29va2llOwoKcHJvdGVjdGVkOgog ICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWN0aXZlVXNlbWFwOwoKICAgIHZv aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgKAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKCnB1YmxpYzoKICAgICAKICAgIE5SSFlfY2xhc3NNYXRlcmlhbCAoCiAg ICAgICAgY29uc3QgQ0hBUiAgKm5hbWUKICAgICAgICApOwogICAgTlJIWV9jbGFzc01hdGVyaWFs ICgKICAgICAgICBjb25zdCBDSEFSICAgICAgICAgICpuYW1lLAogICAgICAgIE5SSFlfY2xhc3NN YXRlcmlhbCAgKmNsb25lRnJvbQogICAgICAgICk7CiAgICBOUkhZX2NsYXNzTWF0ZXJpYWwgKAog ICAgICAgIHZvaWQgCiAgICAgICAgKTsKCiAgICB+TlJIWV9jbGFzc01hdGVyaWFsICgKICAgICAg ICB2b2lkIAogICAgICAgICk7CgogICAgIAogICAgc3RhdGljIGNvbnN0IENIQVIgICAgICAgICAg ICAgICAqUHJpbnRTZWxmQ2xhc3NuYW1lICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgeyBy ZXR1cm4gKCJOUkhZX2NsYXNzTWF0ZXJpYWwiKTsgfQoKICAgICAKCiAgICBzdGF0aWMgSU5UICAg ICAgICAgICAgICAgICAgICAgIEdldFNlbGZDbGFzc1R5cGUgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSB7IHJldHVybiAoVEhJTkdfVFlQRV9NQVRFUklBTCk7IH0KCiAgICBzdGF0aWMgTlJI WV9idW5jaDxOUkhZX2NsYXNzTWF0ZXJpYWw+ICpGaW5kICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuYW1lCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CiAKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZW5hbWUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Q0hBUiAgKm5ld05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAg ICBOUkhZX2NsYXNzVGhpbmcgICAgICAgICAgICAgICAgICpDbG9uZSAoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmV3TmFtZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKCgogICAgY29uc3QgQ0hBUiAgICAg ICAgICAgICAgICAgICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApIHsgcmV0dXJuICgibWF0ZXJpYWwiKTsgfQogICAgSU5UICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTUFURVJJQUwpOyB9 CgogICAgIAogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxl QW1iaWVudCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAg ICAgICAqbmV3QW1iaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElOVCAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwogICAgc3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxlRGlmZnVz ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICAgICAgICAq bmV3RGlmZnVzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IElOVCAgIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg c3RhdGljIFpPT0xFQU4gICAgICAgICAgICAgICAgICBDaGVja1Bvc3NpYmxlU3BlY3VsYXIgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgKm5ld1Nw ZWN1bGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5U ICAgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBzdGF0 aWMgWk9PTEVBTiAgICAgICAgICAgICAgICAgIENoZWNrUG9zc2libGVTcGVjdWxhckV4cG9uZW50 ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgIG5l d1NwZWN1bGFyRXhwb25lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK ICAgIHN0YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZU9wYWNpdHkg KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgKm5l d09wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ TlQgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0 YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZVJlZmxlY3RpdmUgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCAgICAgICAgKm5ld1Jl ZmxlY3RpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ TlQgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHN0 YXRpYyBaT09MRUFOICAgICAgICAgICAgICAgICAgQ2hlY2tQb3NzaWJsZUlsbHVtICgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICBuZXdJbGx1 bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAKCiAgICBaT09M RUFOICAgICAgICAgICAgICAgICAgICAgICAgIFNldEFtYmllbnQgKAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgICpuZXdBbWJpZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgIG51bWJl cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAg ICAgICAgICAgICAgICAgICAgICBTZXRBbWJpZW50UmVkICgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdBbWJpZW50UmVkCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAg ICAgICAgICAgIFNldEFtYmllbnRHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3QW1iaWVudEdyZWVuCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgIFNldEFtYmllbnRCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFJFQUwgICAgICBuZXdBbWJpZW50Qmx1ZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRB bWJpZW50SW50ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFJFQUwgICAgICBuZXdBbWJpZW50SW50ZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREaWZm dXNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwg ICAgICAqbmV3RGlmZnVzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElOVCAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0RGlmZnVzZVJlZCAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAg bmV3RGlmZnVzZVJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg Wk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREaWZmdXNlR3JlZW4gKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld0RpZmZ1 c2VHcmVlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICBTZXREaWZmdXNlQmx1ZSAoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3RGlmZnVzZUJsdWUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAg ICAgICAgICAgICAgICAgICAgU2V0RGlmZnVzZUludGVucyAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3RGlmZnVzZUludGVucwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFpPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgU2V0U3BlY3VsYXIgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgICpuZXdTcGVjdWxhciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICBudW1iZXIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgU2V0U3BlY3VsYXJSZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld1NwZWN1bGFyUmVkCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg IFNldFNwZWN1bGFyR3JlZW4gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUkVBTCAgICAgIG5ld1NwZWN1bGFyR3JlZW4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0 U3BlY3VsYXJCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFJFQUwgICAgICBuZXdTcGVjdWxhckJsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0U3BlY3Vs YXJJbnRlbnMgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UkVBTCAgICAgIG5ld1NwZWN1bGFySW50ZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRTcGVjdWxh ckV4cG9uZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFJFQUwgICAgICBuZXdTcGVjdWxhckV4cG9uZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRPcGFj aXR5ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwg ICAgICAqbmV3T3BhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IElOVCAgICAgICBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0T3BhY2l0eU1pbiAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSRUFMICAgICAg bmV3T3BhY2l0eU1pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg Wk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRPcGFjaXR5TWF4ICgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdPcGFjaXR5 TWF4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgIFNldE9wYWNpdHlFeHAgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgIG5ld09wYWNpdHlFeHAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgIFNldFJlZmxlY3RpdmUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUkVBTCAgICAgICpuZXdSZWZsZWN0aXZlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgIG51bWJlcgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICAgICBTZXRSZWZsZWN0aXZlUmVkICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdSZWZsZWN0aXZlUmVkCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgIFNldFJlZmxlY3RpdmVHcmVlbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBSRUFMICAgICAgbmV3UmVmbGVjdGl2ZUdyZWVuCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgIFNldFJlZmxlY3RpdmVCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdSZWZsZWN0aXZlQmx1ZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAg ICAgICBTZXRSZWZsZWN0aXZlSW50ZW5zICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFJFQUwgICAgICBuZXdSZWZsZWN0aXZlSW50ZW5zCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgICBTZXRJbGx1bSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBJTlQgICAgICAgbmV3SWxsdW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKCiAgICAgCiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICpHZXRB bWJpZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdldEFtYmllbnRSZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0QW1iaWVudEdyZWVuICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdldEFtYmllbnRCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBS RUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEFtYmllbnRJbnRlbnMgKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKCiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpHZXREaWZmdXNlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdldERpZmZ1c2VSZWQgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RGlmZnVzZUdy ZWVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdldERpZmZ1c2VCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldERpZmZ1c2VJbnRlbnMgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpHZXRTcGVjdWxhciAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgUkVB TCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTcGVjdWxhclJlZCAoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRT cGVjdWxhckdyZWVuICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdldFNwZWN1bGFyQmx1ZSAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwogICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTcGVjdWxh ckludGVucyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgIFJFQUwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0U3BlY3VsYXJFeHBvbmVudCAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwoKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkdldE9wYWNp dHkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR2V0T3BhY2l0eU1pbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog ICAgUkVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRPcGFjaXR5TWF4ICgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdldE9wYWNpdHlFeHAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBSRUFMICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpHZXRSZWZsZWN0aXZlICgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFJlZmxl Y3RpdmVSZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIFJFQUwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0UmVmbGVjdGl2ZUdyZWVuICgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFJlZmxlY3Rp dmVCbHVlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBSRUFMICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdldFJlZmxlY3RpdmVJbnRlbnMgKAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKCiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldElsbHVtICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBUd2luZSAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdldElsbHVtQXNjaWkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAg CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUNyZWF0ZSAoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVz Y3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERlc2NyaWJlRnVsbFN0YXRlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHZv aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVGdWxsU3RhdGVQYWNrZWQgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rl c2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEZXNjcmliZVdyZW5GdWxsU3RhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZURlbGV0ZSAoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3Jp YmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg IERlc2NyaWJlTWF0ZXJpYWxPbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjbGFzcyBOUkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGVzY3JpYmVBbWJpZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNj cmliZURpZmZ1c2UgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVT cGVjdWxhciAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVTcGVj dWxhckV4cG9uZW50ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs YXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmli ZU9wYWNpdHkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mg TlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlUmVm bGVjdGl2ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBO UkhZX0NsYXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVJbGx1 bSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0Ns YXNzRGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVUZXh0dXJlICgK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NE ZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cgog ICAgdm9pZCAJCQkgICAgTGlzdE1hdGVyaWFsKEZJTEUgKmZwLCBjb25zdCBMaXN0PFR3aW5lPiAm bHMpOwoKICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0VXNlTWFwICgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5SSFlfYnVuY2ggPE5SSFlfY2xh c3NVc2VNYXA+ICAgKm5ld1VzZU1hcFB0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwogICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBTZXRVc2VNYXAgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJIWV9jbGFzc1VzZU1hcCAg ICAqbmV3VXNlTWFwUHRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAg ICBOUkhZX2NsYXNzVXNlTWFwICAgICAgICAgICAgICAgICpHZXRVc2VNYXAoIHZvaWQgKSB7cmV0 dXJuIHVzZW1hcDt9CgogICAgdm9pZCAJCQkgICAgU2V0VXNlTWFwc0xpc3QgKAogICAgCQkJCQlO UkhZX2J1bmNoIDxOUkhZX2NsYXNzVXNlTWFwPiAgKm5ld1VzZU1hcHMKCQkJCSAgICApOwoKICAg IHZvaWQgCQkJICAgIFJlbW92ZVVzZU1hcHNMaXN0ICgKICAgIAkJCQkJTlJIWV9idW5jaCA8TlJI WV9jbGFzc1VzZU1hcD4gICpuZXdVc2VNYXBzCgkJCQkgICAgKTsKCiAgICB2b2lkIAkJCSAgICBF cmFzZVVzZU1hcHNMaXN0ICgKICAgIAkJCQkJdm9pZAoJCQkJICAgICk7CgogICAgdm9pZAkJCSAg ICBTZXRBY3RpdmVVc2VtYXBOYW1lIChUd2luZSBuYW1lKXsKCQkJCQlfYWN0aXZlVXNlbWFwID0g bmFtZTsKCQkJCQlTZXRBY3RpdmVVc2VtYXAoKTsKCQkJCSAgICB9OwoKICAgIHZvaWQJCQkgICAg U2V0QWN0aXZlVXNlbWFwKHZvaWQpOwoKICAgIFR3aW5lCQkJICAgIEdldEFjdGl2ZVVzZW1hcE5h bWUgKHZvaWQpewoJCQkJCXJldHVybiBfYWN0aXZlVXNlbWFwOwoJCQkJICAgIH07CgogICAgTlJI WV9jbGFzc1VzZU1hcCAgICAgICAgICAgICAgICAqdXNlbWFwOwogICAgTGlzdDxOUkhZX2NsYXNz VXNlTWFwICAqPiAgICAgICBfdXNlbWFwc0xpc3Q7CgogICAgVHdpbmUgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXBUd2luZTsKICAgIFR3aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFwdHlwZVR3aW5lOwogICAgVHdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1dnRhZ1R3 aW5lOwoKICAgIHZvaWQgQ3JlYXRlT2JzZXJ2ZXIgKGludCB0eXBlKSB7IGRvQ3JlYXRlT2JzZXJ2 ZXIgKHRoaXMsIHR5cGUpOyB9Owp9OwoKIAoKIAoKIyAzNSAibnJoeS9OUkhZX0FjY2Vzcy5jIiAy CgojIDEgImgvbnJoeV9jbGFzc01vZGVsLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKIAoKCiAKCgoKCgogCgoKCiAKY2xhc3MgTlJIWV9jbGFzc1RyYWNrU2hhcGU7CgoKIAoKCgoK CgogCgoKCiAKCiAKIAogCgogCnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBOUkhZX21hdGNo Owp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4gY2xhc3MgTlJIWV9hbHBoYWxpc3Q7CgogCgpzdHJ1Y3Qg TlJIWV9jbGFzc01vZGVsOgogICAgcHVibGljIE5SSFlfY2xhc3NPYmplY3QsCiAgICBwdWJsaWMg T2JzZXJ2ZXJGYWN0b3J5IDxOUkhZX2NsYXNzTW9kZWw+CnsKcHJpdmF0ZToKICAgIHR5cGVkZWYg TlJIWV9jbGFzc09iamVjdCBpbmhlcml0ZWQ7CiAgICB0eXBlZGVmIE5SSFlfYWxwaGFsaXN0PE5S SFlfY2xhc3NNb2RlbD4gYWxwaGFsaXN0OwogICAgZnJpZW5kIE5SSFlfbWF0Y2ggPE5SSFlfY2xh c3NNb2RlbD47CiAgICBmcmllbmQgTlJIWV9hbHBoYWxpc3Q8TlJIWV9jbGFzc01vZGVsPjsKCnBy aXZhdGU6CgogCgoKCgogICAgIAogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBk b05vdExpZ2h0OwogCgogICAgIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg Ym91bmRpbmc7Cgpwcm90ZWN0ZWQ6CiAgICBOUkhZX2NsYXNzVHJhY2tTaGFwZSAgICAgICAgICAg ICp0cmFja1NoYXBlSW5mbzsgICAgCgogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5pdGlhbGl6ZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKcHVibGljOgogICAg IAogICAgTlJIWV9jbGFzc01vZGVsICgKICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAg ICk7CiAgICBOUkhZX2NsYXNzTW9kZWwgKAogICAgICAgIGNvbnN0IENIQVIgICAgICAqbmFtZSwK ICAgICAgICBOUkhZX2NsYXNzTW9kZWwgKmNsb25lRnJvbQogICAgICAgICk7CgogICAgTlJIWV9j bGFzc01vZGVsICgKICAgICAgICB2b2lkIAogICAgICAgICk7CgogICAgfk5SSFlfY2xhc3NNb2Rl bCAoCiAgICAgICAgdm9pZCAKICAgICAgICApOwoKICAgICAKICAgIHN0YXRpYyBjb25zdCBDSEFS ICAgICAgICAgICAgICAgKlByaW50U2VsZkNsYXNzbmFtZSAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApIHsgcmV0dXJuICgiTlJIWV9jbGFzc01vZGVsIik7IH0KCiAgICAgCgogICAgc3RhdGlj IElOVCAgICAgICAgICAgICAgICAgICAgICBHZXRTZWxmQ2xhc3NUeXBlICgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTU9ERUwpOyB9CgogICAgc3RhdGlj IE5SSFlfYnVuY2g8TlJIWV9jbGFzc01vZGVsPiAqRmluZCAoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSICAqbmFtZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlbmFtZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD SEFSICAqbmV3TmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAg IE5SSFlfY2xhc3NUaGluZyAgICAgICAgICAgICAgICAgKkNsb25lICgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIgICpuZXdOYW1lCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgIAoKICAgIHZvaWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRGVzY3JpYmVDcmVhdGUgKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZUZ1bGxTdGF0ZSAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERlc2NyaWJlRnVsbFN0YXRlUGFja2VkICgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xhc3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEZWxldGUgKAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rl c2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAK CgoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVEb05vdExpZ2h0 ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5SSFlfQ2xh c3NEZXNjcmliZVN0cmVhbSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlU29saWQgKAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2Ny aWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIHZv aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVQcmltYXJ5Q29uc3RyYWludCAo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOUkhZX0NsYXNz RGVzY3JpYmVTdHJlYW0gJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwog ICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZVNlY29uZGFyeUNvbnN0 cmFpbnQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTlJI WV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpYmVDb25zdHJh aW50R2VvbWV0cnkgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh c3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaWJl VHJhY2tTaGFwZUluZm8gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny aWJlVHJhY2tTaGFwZUluZm9QYWNrZWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2xhc3MgTlJIWV9DbGFzc0Rlc2NyaWJlU3RyZWFtICYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERlc2NyaWJlRXh0cmFDaGFubmVsTW9kZSgKCQkJCQljbGFzcyBOUkhZX0NsYXNzRGVzY3Jp YmVTdHJlYW0gJgoJCQkJICAgICk7CgogCgogICAgY29uc3QgQ0hBUiAgICAgICAgICAgICAgICAg ICAgICAqUHJpbnREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlTmFtZSAoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApIHsgcmV0dXJuICgibW9kZWwiKTsgfQogICAgSU5UICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHZXREZXJpdmVkQ2xhc3NPZlNlbGZUeXBlICgKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgeyByZXR1cm4gKFRISU5HX1RZUEVfTU9ERUwpOyB9CgogCgoKCiAgICBaT09MRUFO ICAgICAgICAgICAgICAgICAgICAgICAgIFNldERvTm90TGlnaHQgKAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWk9PTEVBTiAgICAgbmV3U3RhdHVzCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAg ICAgICAgIEdldERvTm90TGlnaHQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7IHJldHVy biAoZG9Ob3RMaWdodCk7IH0KIAoKICAgIFpPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg U2V0U29saWQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UkVBTCAgICAgIG5ld1NvbGlkVmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKICAgIFJFQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U29saWQgKAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICBaT09MRUFOICAgICAgICAgICAgICAgICAgICAg ICAgIFNldEJvdW5kaW5nICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFpPT0xFQU4gICBuZXdCb3VuZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwogICAgWk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCb3VuZGlu ZyAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKCiAKCgoKCiAgICB2b2lkIENyZWF0ZU9i c2VydmVyIChpbnQgdHlwZSkgewoJT2JzZXJ2ZXJGYWN0b3J5PE5SSFlfY2xhc3NNb2RlbD46OmRv Q3JlYXRlT2JzZXJ2ZXIgKHRoaXMsIHR5cGUpOyB9OwoKIAoKICAgIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICAgIENyZWF0ZVRyYWNrU2hhcGVJbmZvICgpOwoKICAgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVRyYWNrU2hhcGVJbmZvICgpOwoKICAgIE5SSFlf Y2xhc3NUcmFja1NoYXBlICAgICAgICAgICAgICpHZXRUcmFja1NoYXBlSW5mbyAoKTsKfTsKCiAK CiAKCgoKIyAzNiAibnJoeS9OUkhZX0FjY2Vzcy5jIiAyCgojIDEgImgvbnJoeV9jbGFzc1VzZU1h cC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKDAoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9HTC9nbC5o IiAxIDMKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojIDEzNyAiL3Vzci9pbmNsdWRlL0dML2dsLmgiIDMKCgoKCgoKCgpleHRlcm4g IkMiIHsKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIGVudW0gewoJIAoJ R0xfRkFMU0UJCQk9IDAsCglHTF9UUlVFCQkJCT0gMSwKCgkgCglHTF9CWVRFCQkJCT0gMHgxNDAw LAoJR0xfVU5TSUdORURfQllURQkJPSAweDE0MDEsCglHTF9TSE9SVAkJCT0gMHgxNDAyLAoJR0xf VU5TSUdORURfU0hPUlQJCT0gMHgxNDAzLAoJR0xfSU5UCQkJCT0gMHgxNDA0LAoJR0xfVU5TSUdO RURfSU5UCQkJPSAweDE0MDUsCglHTF9GTE9BVAkJCT0gMHgxNDA2LAoJR0xfRE9VQkxFCQkJPSAw eDE0MEEsCglHTF8yX0JZVEVTCQkJPSAweDE0MDcsCglHTF8zX0JZVEVTCQkJPSAweDE0MDgsCglH TF80X0JZVEVTCQkJPSAweDE0MDksCgoJIAoJR0xfTElORVMJCQk9IDB4MDAwMSwKCUdMX1BPSU5U UwkJCT0gMHgwMDAwLAoJR0xfTElORV9TVFJJUAkJCT0gMHgwMDAzLAoJR0xfTElORV9MT09QCQkJ PSAweDAwMDIsCglHTF9UUklBTkdMRVMJCQk9IDB4MDAwNCwKCUdMX1RSSUFOR0xFX1NUUklQCQk9 IDB4MDAwNSwKCUdMX1RSSUFOR0xFX0ZBTgkJCT0gMHgwMDA2LAoJR0xfUVVBRFMJCQk9IDB4MDAw NywKCUdMX1FVQURfU1RSSVAJCQk9IDB4MDAwOCwKCUdMX1BPTFlHT04JCQk9IDB4MDAwOSwKCUdM X0VER0VfRkxBRwkJCT0gMHgwQjQzLAoKCSAKCUdMX1ZFUlRFWF9BUlJBWQkJCT0gMHg4MDc0LAoJ R0xfTk9STUFMX0FSUkFZCQkJPSAweDgwNzUsCglHTF9DT0xPUl9BUlJBWQkJCT0gMHg4MDc2LAoJ R0xfSU5ERVhfQVJSQVkJCQk9IDB4ODA3NywKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVkJCT0gMHg4 MDc4LAoJR0xfRURHRV9GTEFHX0FSUkFZCQk9IDB4ODA3OSwKCUdMX1ZFUlRFWF9BUlJBWV9TSVpF CQk9IDB4ODA3QSwKCUdMX1ZFUlRFWF9BUlJBWV9UWVBFCQk9IDB4ODA3QiwKCUdMX1ZFUlRFWF9B UlJBWV9TVFJJREUJCT0gMHg4MDdDLAoJR0xfTk9STUFMX0FSUkFZX1RZUEUJCT0gMHg4MDdFLAoJ R0xfTk9STUFMX0FSUkFZX1NUUklERQkJPSAweDgwN0YsCglHTF9DT0xPUl9BUlJBWV9TSVpFCQk9 IDB4ODA4MSwKCUdMX0NPTE9SX0FSUkFZX1RZUEUJCT0gMHg4MDgyLAoJR0xfQ09MT1JfQVJSQVlf U1RSSURFCQk9IDB4ODA4MywKCUdMX0lOREVYX0FSUkFZX1RZUEUJCT0gMHg4MDg1LAoJR0xfSU5E RVhfQVJSQVlfU1RSSURFCQk9IDB4ODA4NiwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfU0laRQk9 IDB4ODA4OCwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfVFlQRQk9IDB4ODA4OSwKCUdMX1RFWFRV UkVfQ09PUkRfQVJSQVlfU1RSSURFCT0gMHg4MDhBLAoJR0xfRURHRV9GTEFHX0FSUkFZX1NUUklE RQk9IDB4ODA4QywKCUdMX1ZFUlRFWF9BUlJBWV9QT0lOVEVSCQk9IDB4ODA4RSwKCUdMX05PUk1B TF9BUlJBWV9QT0lOVEVSCQk9IDB4ODA4RiwKCUdMX0NPTE9SX0FSUkFZX1BPSU5URVIJCT0gMHg4 MDkwLAoJR0xfSU5ERVhfQVJSQVlfUE9JTlRFUgkJPSAweDgwOTEsCglHTF9URVhUVVJFX0NPT1JE X0FSUkFZX1BPSU5URVIJPSAweDgwOTIsCglHTF9FREdFX0ZMQUdfQVJSQVlfUE9JTlRFUgk9IDB4 ODA5MywKICAgICAgICBHTF9WMkYJCQkJPSAweDJBMjAsCglHTF9WM0YJCQkJPSAweDJBMjEsCglH TF9DNFVCX1YyRgkJCT0gMHgyQTIyLAoJR0xfQzRVQl9WM0YJCQk9IDB4MkEyMywKCUdMX0MzRl9W M0YJCQk9IDB4MkEyNCwKCUdMX04zRl9WM0YJCQk9IDB4MkEyNSwKCUdMX0M0Rl9OM0ZfVjNGCQkJ PSAweDJBMjYsCglHTF9UMkZfVjNGCQkJPSAweDJBMjcsCglHTF9UNEZfVjRGCQkJPSAweDJBMjgs CglHTF9UMkZfQzRVQl9WM0YJCQk9IDB4MkEyOSwKCUdMX1QyRl9DM0ZfVjNGCQkJPSAweDJBMkEs CglHTF9UMkZfTjNGX1YzRgkJCT0gMHgyQTJCLAoJR0xfVDJGX0M0Rl9OM0ZfVjNGCQk9IDB4MkEy QywKCUdMX1Q0Rl9DNEZfTjNGX1Y0RgkJPSAweDJBMkQsCgoJIAoJR0xfTUFUUklYX01PREUJCQk9 IDB4MEJBMCwKCUdMX01PREVMVklFVwkJCT0gMHgxNzAwLAoJR0xfUFJPSkVDVElPTgkJCT0gMHgx NzAxLAoJR0xfVEVYVFVSRQkJCT0gMHgxNzAyLAoKCSAKCUdMX1BPSU5UX1NNT09USAkJCT0gMHgw QjEwLAoJR0xfUE9JTlRfU0laRQkJCT0gMHgwQjExLAoJR0xfUE9JTlRfU0laRV9HUkFOVUxBUklU WSAJPSAweDBCMTMsCglHTF9QT0lOVF9TSVpFX1JBTkdFCQk9IDB4MEIxMiwKCgkgCglHTF9MSU5F X1NNT09USAkJCT0gMHgwQjIwLAoJR0xfTElORV9TVElQUExFCQkJPSAweDBCMjQsCglHTF9MSU5F X1NUSVBQTEVfUEFUVEVSTgkJPSAweDBCMjUsCglHTF9MSU5FX1NUSVBQTEVfUkVQRUFUCQk9IDB4 MEIyNiwKCUdMX0xJTkVfV0lEVEgJCQk9IDB4MEIyMSwKCUdMX0xJTkVfV0lEVEhfR1JBTlVMQVJJ VFkJPSAweDBCMjMsCglHTF9MSU5FX1dJRFRIX1JBTkdFCQk9IDB4MEIyMiwKCgkgCglHTF9QT0lO VAkJCT0gMHgxQjAwLAoJR0xfTElORQkJCQk9IDB4MUIwMSwKCUdMX0ZJTEwJCQkJPSAweDFCMDIs CglHTF9DQ1cJCQkJPSAweDA5MDEsCglHTF9DVwkJCQk9IDB4MDkwMCwKCUdMX0ZST05UCQkJPSAw eDA0MDQsCglHTF9CQUNLCQkJCT0gMHgwNDA1LAoJR0xfQ1VMTF9GQUNFCQkJPSAweDBCNDQsCglH TF9DVUxMX0ZBQ0VfTU9ERQkJPSAweDBCNDUsCglHTF9QT0xZR09OX1NNT09USAkJPSAweDBCNDEs CglHTF9QT0xZR09OX1NUSVBQTEUJCT0gMHgwQjQyLAoJR0xfRlJPTlRfRkFDRQkJCT0gMHgwQjQ2 LAoJR0xfUE9MWUdPTl9NT0RFCQkJPSAweDBCNDAsCglHTF9QT0xZR09OX09GRlNFVF9GQUNUT1IJ PSAweDgwMzgsCglHTF9QT0xZR09OX09GRlNFVF9VTklUUwkJPSAweDJBMDAsCglHTF9QT0xZR09O X09GRlNFVF9QT0lOVAkJPSAweDJBMDEsCglHTF9QT0xZR09OX09GRlNFVF9MSU5FCQk9IDB4MkEw MiwKCUdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwJCT0gMHg4MDM3LAoKCSAKCUdMX0NPTVBJTEUJCQk9 IDB4MTMwMCwKCUdMX0NPTVBJTEVfQU5EX0VYRUNVVEUJCT0gMHgxMzAxLAoJR0xfTElTVF9CQVNF CQkJPSAweDBCMzIsCglHTF9MSVNUX0lOREVYCQkJPSAweDBCMzMsCglHTF9MSVNUX01PREUJCQk9 IDB4MEIzMCwKCgkgCglHTF9ORVZFUgkJCT0gMHgwMjAwLAoJR0xfTEVTUwkJCQk9IDB4MDIwMSwK CUdMX0dFUVVBTAkJCT0gMHgwMjA2LAoJR0xfTEVRVUFMCQkJPSAweDAyMDMsCglHTF9HUkVBVEVS CQkJPSAweDAyMDQsCglHTF9OT1RFUVVBTAkJCT0gMHgwMjA1LAoJR0xfRVFVQUwJCQk9IDB4MDIw MiwKCUdMX0FMV0FZUwkJCT0gMHgwMjA3LAoJR0xfREVQVEhfVEVTVAkJCT0gMHgwQjcxLAoJR0xf REVQVEhfQklUUwkJCT0gMHgwRDU2LAoJR0xfREVQVEhfQ0xFQVJfVkFMVUUJCT0gMHgwQjczLAoJ R0xfREVQVEhfRlVOQwkJCT0gMHgwQjc0LAoJR0xfREVQVEhfUkFOR0UJCQk9IDB4MEI3MCwKCUdM X0RFUFRIX1dSSVRFTUFTSwkJPSAweDBCNzIsCglHTF9ERVBUSF9DT01QT05FTlQJCT0gMHgxOTAy LAoKCSAKCUdMX0xJR0hUSU5HCQkJPSAweDBCNTAsCglHTF9MSUdIVDAJCQk9IDB4NDAwMCwKCUdM X0xJR0hUMQkJCT0gMHg0MDAxLAoJR0xfTElHSFQyCQkJPSAweDQwMDIsCglHTF9MSUdIVDMJCQk9 IDB4NDAwMywKCUdMX0xJR0hUNAkJCT0gMHg0MDA0LAoJR0xfTElHSFQ1CQkJPSAweDQwMDUsCglH TF9MSUdIVDYJCQk9IDB4NDAwNiwKCUdMX0xJR0hUNwkJCT0gMHg0MDA3LAoJR0xfU1BPVF9FWFBP TkVOVAkJPSAweDEyMDUsCglHTF9TUE9UX0NVVE9GRgkJCT0gMHgxMjA2LAoJR0xfQ09OU1RBTlRf QVRURU5VQVRJT04JCT0gMHgxMjA3LAoJR0xfTElORUFSX0FUVEVOVUFUSU9OCQk9IDB4MTIwOCwK CUdMX1FVQURSQVRJQ19BVFRFTlVBVElPTgk9IDB4MTIwOSwKCUdMX0FNQklFTlQJCQk9IDB4MTIw MCwKCUdMX0RJRkZVU0UJCQk9IDB4MTIwMSwKCUdMX1NQRUNVTEFSCQkJPSAweDEyMDIsCglHTF9T SElOSU5FU1MJCQk9IDB4MTYwMSwKCUdMX0VNSVNTSU9OCQkJPSAweDE2MDAsCglHTF9QT1NJVElP TgkJCT0gMHgxMjAzLAoJR0xfU1BPVF9ESVJFQ1RJT04JCT0gMHgxMjA0LAoJR0xfQU1CSUVOVF9B TkRfRElGRlVTRQkJPSAweDE2MDIsCglHTF9DT0xPUl9JTkRFWEVTCQk9IDB4MTYwMywKCUdMX0xJ R0hUX01PREVMX1RXT19TSURFCQk9IDB4MEI1MiwKCUdMX0xJR0hUX01PREVMX0xPQ0FMX1ZJRVdF Ugk9IDB4MEI1MSwKCUdMX0xJR0hUX01PREVMX0FNQklFTlQJCT0gMHgwQjUzLAoJR0xfRlJPTlRf QU5EX0JBQ0sJCT0gMHgwNDA4LAoJR0xfU0hBREVfTU9ERUwJCQk9IDB4MEI1NCwKCUdMX0ZMQVQJ CQkJPSAweDFEMDAsCglHTF9TTU9PVEgJCQk9IDB4MUQwMSwKCUdMX0NPTE9SX01BVEVSSUFMCQk9 IDB4MEI1NywKCUdMX0NPTE9SX01BVEVSSUFMX0ZBQ0UJCT0gMHgwQjU1LAoJR0xfQ09MT1JfTUFU RVJJQUxfUEFSQU1FVEVSCT0gMHgwQjU2LAoJR0xfTk9STUFMSVpFCQkJPSAweDBCQTEsCgoJIAoJ R0xfQ0xJUF9QTEFORTAJCQk9IDB4MzAwMCwKCUdMX0NMSVBfUExBTkUxCQkJPSAweDMwMDEsCglH TF9DTElQX1BMQU5FMgkJCT0gMHgzMDAyLAoJR0xfQ0xJUF9QTEFORTMJCQk9IDB4MzAwMywKCUdM X0NMSVBfUExBTkU0CQkJPSAweDMwMDQsCglHTF9DTElQX1BMQU5FNQkJCT0gMHgzMDA1LAoKCSAK CUdMX0FDQ1VNX1JFRF9CSVRTCQk9IDB4MEQ1OCwKCUdMX0FDQ1VNX0dSRUVOX0JJVFMJCT0gMHgw RDU5LAoJR0xfQUNDVU1fQkxVRV9CSVRTCQk9IDB4MEQ1QSwKCUdMX0FDQ1VNX0FMUEhBX0JJVFMJ CT0gMHgwRDVCLAoJR0xfQUNDVU1fQ0xFQVJfVkFMVUUJCT0gMHgwQjgwLAoJR0xfQUNDVU0JCQk9 IDB4MDEwMCwKCUdMX0FERAkJCQk9IDB4MDEwNCwKCUdMX0xPQUQJCQkJPSAweDAxMDEsCglHTF9N VUxUCQkJCT0gMHgwMTAzLAoJR0xfUkVUVVJOCQkJPSAweDAxMDIsCgoJIAoJR0xfQUxQSEFfVEVT VAkJCT0gMHgwQkMwLAoJR0xfQUxQSEFfVEVTVF9SRUYJCT0gMHgwQkMyLAoJR0xfQUxQSEFfVEVT VF9GVU5DCQk9IDB4MEJDMSwKCgkgCglHTF9CTEVORAkJCT0gMHgwQkUyLAoJR0xfQkxFTkRfU1JD CQkJPSAweDBCRTEsCglHTF9CTEVORF9EU1QJCQk9IDB4MEJFMCwKCUdMX1pFUk8JCQkJPSAwLAoJ R0xfT05FCQkJCT0gMSwKCUdMX1NSQ19DT0xPUgkJCT0gMHgwMzAwLAoJR0xfT05FX01JTlVTX1NS Q19DT0xPUgkJPSAweDAzMDEsCglHTF9EU1RfQ09MT1IJCQk9IDB4MDMwNiwKCUdMX09ORV9NSU5V U19EU1RfQ09MT1IJCT0gMHgwMzA3LAoJR0xfU1JDX0FMUEhBCQkJPSAweDAzMDIsCglHTF9PTkVf TUlOVVNfU1JDX0FMUEhBCQk9IDB4MDMwMywKCUdMX0RTVF9BTFBIQQkJCT0gMHgwMzA0LAoJR0xf T05FX01JTlVTX0RTVF9BTFBIQQkJPSAweDAzMDUsCglHTF9TUkNfQUxQSEFfU0FUVVJBVEUJCT0g MHgwMzA4LAoJR0xfQ09OU1RBTlRfQ09MT1IJCT0gMHg4MDAxLAoJR0xfT05FX01JTlVTX0NPTlNU QU5UX0NPTE9SCT0gMHg4MDAyLAoJR0xfQ09OU1RBTlRfQUxQSEEJCT0gMHg4MDAzLAoJR0xfT05F X01JTlVTX0NPTlNUQU5UX0FMUEhBCT0gMHg4MDA0LAoKCSAKCUdMX0ZFRURCQUNLCQkJPSAweDFD MDEsCglHTF9SRU5ERVIJCQk9IDB4MUMwMCwKCUdMX1NFTEVDVAkJCT0gMHgxQzAyLAoKCSAKCUdM XzJECQkJCT0gMHgwNjAwLAoJR0xfM0QJCQkJPSAweDA2MDEsCglHTF8zRF9DT0xPUgkJCT0gMHgw NjAyLAoJR0xfM0RfQ09MT1JfVEVYVFVSRQkJPSAweDA2MDMsCglHTF80RF9DT0xPUl9URVhUVVJF CQk9IDB4MDYwNCwKCUdMX1BPSU5UX1RPS0VOCQkJPSAweDA3MDEsCglHTF9MSU5FX1RPS0VOCQkJ PSAweDA3MDIsCglHTF9MSU5FX1JFU0VUX1RPS0VOCQk9IDB4MDcwNywKCUdMX1BPTFlHT05fVE9L RU4JCT0gMHgwNzAzLAoJR0xfQklUTUFQX1RPS0VOCQkJPSAweDA3MDQsCglHTF9EUkFXX1BJWEVM X1RPS0VOCQk9IDB4MDcwNSwKCUdMX0NPUFlfUElYRUxfVE9LRU4JCT0gMHgwNzA2LAoJR0xfUEFT U19USFJPVUdIX1RPS0VOCQk9IDB4MDcwMCwKCUdMX0ZFRURCQUNLX0JVRkZFUl9QT0lOVEVSCT0g MHgwREYwLAoJR0xfRkVFREJBQ0tfQlVGRkVSX1NJWkUJCT0gMHgwREYxLAoJR0xfRkVFREJBQ0tf QlVGRkVSX1RZUEUJCT0gMHgwREYyLAoKCgkgCglHTF9GT0cJCQkJPSAweDBCNjAsCglHTF9GT0df TU9ERQkJCT0gMHgwQjY1LAoJR0xfRk9HX0RFTlNJVFkJCQk9IDB4MEI2MiwKCUdMX0ZPR19DT0xP UgkJCT0gMHgwQjY2LAoJR0xfRk9HX0lOREVYCQkJPSAweDBCNjEsCglHTF9GT0dfU1RBUlQJCQk9 IDB4MEI2MywKCUdMX0ZPR19FTkQJCQk9IDB4MEI2NCwKCUdMX0xJTkVBUgkJCT0gMHgyNjAxLAoJ R0xfRVhQCQkJCT0gMHgwODAwLAoJR0xfRVhQMgkJCQk9IDB4MDgwMSwKCgkgCglHTF9MT0dJQ19P UAkJCT0gMHgwQkYxLAoJR0xfSU5ERVhfTE9HSUNfT1AJCT0gMHgwQkYxLAoJR0xfQ09MT1JfTE9H SUNfT1AJCT0gMHgwQkYyLAoJR0xfTE9HSUNfT1BfTU9ERQkJPSAweDBCRjAsCglHTF9DTEVBUgkJ CT0gMHgxNTAwLAoJR0xfU0VUCQkJCT0gMHgxNTBGLAoJR0xfQ09QWQkJCQk9IDB4MTUwMywKCUdM X0NPUFlfSU5WRVJURUQJCT0gMHgxNTBDLAoJR0xfTk9PUAkJCQk9IDB4MTUwNSwKCUdMX0lOVkVS VAkJCT0gMHgxNTBBLAoJR0xfQU5ECQkJCT0gMHgxNTAxLAoJR0xfTkFORAkJCQk9IDB4MTUwRSwK CUdMX09SCQkJCT0gMHgxNTA3LAoJR0xfTk9SCQkJCT0gMHgxNTA4LAoJR0xfWE9SCQkJCT0gMHgx NTA2LAoJR0xfRVFVSVYJCQk9IDB4MTUwOSwKCUdMX0FORF9SRVZFUlNFCQkJPSAweDE1MDIsCglH TF9BTkRfSU5WRVJURUQJCQk9IDB4MTUwNCwKCUdMX09SX1JFVkVSU0UJCQk9IDB4MTUwQiwKCUdM X09SX0lOVkVSVEVECQkJPSAweDE1MEQsCgoJIAoJR0xfU1RFTkNJTF9URVNUCQkJPSAweDBCOTAs CglHTF9TVEVOQ0lMX1dSSVRFTUFTSwkJPSAweDBCOTgsCglHTF9TVEVOQ0lMX0JJVFMJCQk9IDB4 MEQ1NywKCUdMX1NURU5DSUxfRlVOQwkJCT0gMHgwQjkyLAoJR0xfU1RFTkNJTF9WQUxVRV9NQVNL CQk9IDB4MEI5MywKCUdMX1NURU5DSUxfUkVGCQkJPSAweDBCOTcsCglHTF9TVEVOQ0lMX0ZBSUwJ CQk9IDB4MEI5NCwKCUdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTCT0gMHgwQjk2LAoJR0xfU1RF TkNJTF9QQVNTX0RFUFRIX0ZBSUwJPSAweDBCOTUsCglHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFCQk9 IDB4MEI5MSwKCUdMX1NURU5DSUxfSU5ERVgJCT0gMHgxOTAxLAoJR0xfS0VFUAkJCQk9IDB4MUUw MCwKCUdMX1JFUExBQ0UJCQk9IDB4MUUwMSwKCUdMX0lOQ1IJCQkJPSAweDFFMDIsCglHTF9ERUNS CQkJCT0gMHgxRTAzLAoKCSAKCUdMX05PTkUJCQkJPSAwLAoJR0xfTEVGVAkJCQk9IDB4MDQwNiwK CUdMX1JJR0hUCQkJPSAweDA0MDcsCgkgCgkgCgkgCglHTF9GUk9OVF9MRUZUCQkJPSAweDA0MDAs CglHTF9GUk9OVF9SSUdIVAkJCT0gMHgwNDAxLAoJR0xfQkFDS19MRUZUCQkJPSAweDA0MDIsCglH TF9CQUNLX1JJR0hUCQkJPSAweDA0MDMsCglHTF9BVVgwCQkJCT0gMHgwNDA5LAoJR0xfQVVYMQkJ CQk9IDB4MDQwQSwKCUdMX0FVWDIJCQkJPSAweDA0MEIsCglHTF9BVVgzCQkJCT0gMHgwNDBDLAoJ R0xfQ09MT1JfSU5ERVgJCQk9IDB4MTkwMCwKCUdMX1JFRAkJCQk9IDB4MTkwMywKCUdMX0dSRUVO CQkJPSAweDE5MDQsCglHTF9CTFVFCQkJCT0gMHgxOTA1LAoJR0xfQUxQSEEJCQk9IDB4MTkwNiwK CUdMX0xVTUlOQU5DRQkJCT0gMHgxOTA5LAoJR0xfTFVNSU5BTkNFX0FMUEhBCQk9IDB4MTkwQSwK CUdMX0FMUEhBX0JJVFMJCQk9IDB4MEQ1NSwKCUdMX1JFRF9CSVRTCQkJPSAweDBENTIsCglHTF9H UkVFTl9CSVRTCQkJPSAweDBENTMsCglHTF9CTFVFX0JJVFMJCQk9IDB4MEQ1NCwKCUdMX0lOREVY X0JJVFMJCQk9IDB4MEQ1MSwKCUdMX1NVQlBJWEVMX0JJVFMJCT0gMHgwRDUwLAoJR0xfQVVYX0JV RkZFUlMJCQk9IDB4MEMwMCwKCUdMX1JFQURfQlVGRkVSCQkJPSAweDBDMDIsCglHTF9EUkFXX0JV RkZFUgkJCT0gMHgwQzAxLAoJR0xfRE9VQkxFQlVGRkVSCQkJPSAweDBDMzIsCglHTF9TVEVSRU8J CQk9IDB4MEMzMywKCUdMX0JJVE1BUAkJCT0gMHgxQTAwLAoJR0xfQ09MT1IJCQk9IDB4MTgwMCwK CUdMX0RFUFRICQkJPSAweDE4MDEsCglHTF9TVEVOQ0lMCQkJPSAweDE4MDIsCglHTF9ESVRIRVIJ CQk9IDB4MEJEMCwKCUdMX1JHQgkJCQk9IDB4MTkwNywKCUdMX1JHQkEJCQkJPSAweDE5MDgsCgoJ IAoJR0xfTUFYX0xJU1RfTkVTVElORwkJPSAweDBCMzEsCglHTF9NQVhfQVRUUklCX1NUQUNLX0RF UFRICT0gMHgwRDM1LAoJR0xfTUFYX01PREVMVklFV19TVEFDS19ERVBUSAk9IDB4MEQzNiwKCUdM X01BWF9OQU1FX1NUQUNLX0RFUFRICQk9IDB4MEQzNywKCUdMX01BWF9QUk9KRUNUSU9OX1NUQUNL X0RFUFRICT0gMHgwRDM4LAoJR0xfTUFYX1RFWFRVUkVfU1RBQ0tfREVQVEgJPSAweDBEMzksCglH TF9NQVhfRVZBTF9PUkRFUgkJPSAweDBEMzAsCglHTF9NQVhfTElHSFRTCQkJPSAweDBEMzEsCglH TF9NQVhfQ0xJUF9QTEFORVMJCT0gMHgwRDMyLAoJR0xfTUFYX1RFWFRVUkVfU0laRQkJPSAweDBE MzMsCglHTF9NQVhfUElYRUxfTUFQX1RBQkxFCQk9IDB4MEQzNCwKCUdMX01BWF9WSUVXUE9SVF9E SU1TCQk9IDB4MEQzQSwKCUdMX01BWF9DTElFTlRfQVRUUklCX1NUQUNLX0RFUFRIPSAweDBEM0Is CgoJIAoJR0xfQVRUUklCX1NUQUNLX0RFUFRICQk9IDB4MEJCMCwKCUdMX0NMSUVOVF9BVFRSSUJf U1RBQ0tfREVQVEgJPSAweDBCQjEsCglHTF9DT0xPUl9DTEVBUl9WQUxVRQkJPSAweDBDMjIsCglH TF9DT0xPUl9XUklURU1BU0sJCT0gMHgwQzIzLAoJR0xfQ1VSUkVOVF9JTkRFWAkJPSAweDBCMDEs CglHTF9DVVJSRU5UX0NPTE9SCQk9IDB4MEIwMCwKCUdMX0NVUlJFTlRfTk9STUFMCQk9IDB4MEIw MiwKCUdMX0NVUlJFTlRfUkFTVEVSX0NPTE9SCQk9IDB4MEIwNCwKCUdMX0NVUlJFTlRfUkFTVEVS X0RJU1RBTkNFCT0gMHgwQjA5LAoJR0xfQ1VSUkVOVF9SQVNURVJfSU5ERVgJCT0gMHgwQjA1LAoJ R0xfQ1VSUkVOVF9SQVNURVJfUE9TSVRJT04JPSAweDBCMDcsCglHTF9DVVJSRU5UX1JBU1RFUl9U RVhUVVJFX0NPT1JEUyA9IDB4MEIwNiwKCUdMX0NVUlJFTlRfUkFTVEVSX1BPU0lUSU9OX1ZBTElE ID0gMHgwQjA4LAoJR0xfQ1VSUkVOVF9URVhUVVJFX0NPT1JEUwk9IDB4MEIwMywKCUdMX0lOREVY X0NMRUFSX1ZBTFVFCQk9IDB4MEMyMCwKCUdMX0lOREVYX01PREUJCQk9IDB4MEMzMCwKCUdMX0lO REVYX1dSSVRFTUFTSwkJPSAweDBDMjEsCglHTF9NT0RFTFZJRVdfTUFUUklYCQk9IDB4MEJBNiwK CUdMX01PREVMVklFV19TVEFDS19ERVBUSAk9IDB4MEJBMywKCUdMX05BTUVfU1RBQ0tfREVQVEgJ CT0gMHgwRDcwLAoJR0xfUFJPSkVDVElPTl9NQVRSSVgJCT0gMHgwQkE3LAoJR0xfUFJPSkVDVElP Tl9TVEFDS19ERVBUSAk9IDB4MEJBNCwKCUdMX1JFTkRFUl9NT0RFCQkJPSAweDBDNDAsCglHTF9S R0JBX01PREUJCQk9IDB4MEMzMSwKCUdMX1RFWFRVUkVfTUFUUklYCQk9IDB4MEJBOCwKCUdMX1RF WFRVUkVfU1RBQ0tfREVQVEgJCT0gMHgwQkE1LAoJR0xfVklFV1BPUlQJCQk9IDB4MEJBMiwKCgoJ IAoJR0xfQVVUT19OT1JNQUwJCQk9IDB4MEQ4MCwKCUdMX01BUDFfQ09MT1JfNAkJCT0gMHgwRDkw LAoJR0xfTUFQMV9HUklEX0RPTUFJTgkJPSAweDBERDAsCglHTF9NQVAxX0dSSURfU0VHTUVOVFMJ CT0gMHgwREQxLAoJR0xfTUFQMV9JTkRFWAkJCT0gMHgwRDkxLAoJR0xfTUFQMV9OT1JNQUwJCQk9 IDB4MEQ5MiwKCUdMX01BUDFfVEVYVFVSRV9DT09SRF8xCQk9IDB4MEQ5MywKCUdMX01BUDFfVEVY VFVSRV9DT09SRF8yCQk9IDB4MEQ5NCwKCUdMX01BUDFfVEVYVFVSRV9DT09SRF8zCQk9IDB4MEQ5 NSwKCUdMX01BUDFfVEVYVFVSRV9DT09SRF80CQk9IDB4MEQ5NiwKCUdMX01BUDFfVkVSVEVYXzMJ CT0gMHgwRDk3LAoJR0xfTUFQMV9WRVJURVhfNAkJPSAweDBEOTgsCglHTF9NQVAyX0NPTE9SXzQJ CQk9IDB4MERCMCwKCUdMX01BUDJfR1JJRF9ET01BSU4JCT0gMHgwREQyLAoJR0xfTUFQMl9HUklE X1NFR01FTlRTCQk9IDB4MEREMywKCUdMX01BUDJfSU5ERVgJCQk9IDB4MERCMSwKCUdMX01BUDJf Tk9STUFMCQkJPSAweDBEQjIsCglHTF9NQVAyX1RFWFRVUkVfQ09PUkRfMQkJPSAweDBEQjMsCglH TF9NQVAyX1RFWFRVUkVfQ09PUkRfMgkJPSAweDBEQjQsCglHTF9NQVAyX1RFWFRVUkVfQ09PUkRf MwkJPSAweDBEQjUsCglHTF9NQVAyX1RFWFRVUkVfQ09PUkRfNAkJPSAweDBEQjYsCglHTF9NQVAy X1ZFUlRFWF8zCQk9IDB4MERCNywKCUdMX01BUDJfVkVSVEVYXzQJCT0gMHgwREI4LAoJR0xfQ09F RkYJCQk9IDB4MEEwMCwKCUdMX0RPTUFJTgkJCT0gMHgwQTAyLAoJR0xfT1JERVIJCQk9IDB4MEEw MSwKCgkgCglHTF9GT0dfSElOVAkJCT0gMHgwQzU0LAoJR0xfTElORV9TTU9PVEhfSElOVAkJPSAw eDBDNTIsCglHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQJPSAweDBDNTAsCglHTF9QT0lO VF9TTU9PVEhfSElOVAkJPSAweDBDNTEsCglHTF9QT0xZR09OX1NNT09USF9ISU5UCQk9IDB4MEM1 MywKCUdMX0RPTlRfQ0FSRQkJCT0gMHgxMTAwLAoJR0xfRkFTVEVTVAkJCT0gMHgxMTAxLAoJR0xf TklDRVNUCQkJPSAweDExMDIsCgoJIAoJR0xfU0NJU1NPUl9URVNUCQkJPSAweDBDMTEsCglHTF9T Q0lTU09SX0JPWAkJCT0gMHgwQzEwLAoKCSAKCUdMX01BUF9DT0xPUgkJCT0gMHgwRDEwLAoJR0xf TUFQX1NURU5DSUwJCQk9IDB4MEQxMSwKCUdMX0lOREVYX1NISUZUCQkJPSAweDBEMTIsCglHTF9J TkRFWF9PRkZTRVQJCQk9IDB4MEQxMywKCUdMX1JFRF9TQ0FMRQkJCT0gMHgwRDE0LAoJR0xfUkVE X0JJQVMJCQk9IDB4MEQxNSwKCUdMX0dSRUVOX1NDQUxFCQkJPSAweDBEMTgsCglHTF9HUkVFTl9C SUFTCQkJPSAweDBEMTksCglHTF9CTFVFX1NDQUxFCQkJPSAweDBEMUEsCglHTF9CTFVFX0JJQVMJ CQk9IDB4MEQxQiwKCUdMX0FMUEhBX1NDQUxFCQkJPSAweDBEMUMsCglHTF9BTFBIQV9CSUFTCQkJ PSAweDBEMUQsCglHTF9ERVBUSF9TQ0FMRQkJCT0gMHgwRDFFLAoJR0xfREVQVEhfQklBUwkJCT0g MHgwRDFGLAoJR0xfUElYRUxfTUFQX1NfVE9fU19TSVpFCT0gMHgwQ0IxLAoJR0xfUElYRUxfTUFQ X0lfVE9fSV9TSVpFCT0gMHgwQ0IwLAoJR0xfUElYRUxfTUFQX0lfVE9fUl9TSVpFCT0gMHgwQ0Iy LAoJR0xfUElYRUxfTUFQX0lfVE9fR19TSVpFCT0gMHgwQ0IzLAoJR0xfUElYRUxfTUFQX0lfVE9f Ql9TSVpFCT0gMHgwQ0I0LAoJR0xfUElYRUxfTUFQX0lfVE9fQV9TSVpFCT0gMHgwQ0I1LAoJR0xf UElYRUxfTUFQX1JfVE9fUl9TSVpFCT0gMHgwQ0I2LAoJR0xfUElYRUxfTUFQX0dfVE9fR19TSVpF CT0gMHgwQ0I3LAoJR0xfUElYRUxfTUFQX0JfVE9fQl9TSVpFCT0gMHgwQ0I4LAoJR0xfUElYRUxf TUFQX0FfVE9fQV9TSVpFCT0gMHgwQ0I5LAoJR0xfUElYRUxfTUFQX1NfVE9fUwkJPSAweDBDNzEs CglHTF9QSVhFTF9NQVBfSV9UT19JCQk9IDB4MEM3MCwKCUdMX1BJWEVMX01BUF9JX1RPX1IJCT0g MHgwQzcyLAoJR0xfUElYRUxfTUFQX0lfVE9fRwkJPSAweDBDNzMsCglHTF9QSVhFTF9NQVBfSV9U T19CCQk9IDB4MEM3NCwKCUdMX1BJWEVMX01BUF9JX1RPX0EJCT0gMHgwQzc1LAoJR0xfUElYRUxf TUFQX1JfVE9fUgkJPSAweDBDNzYsCglHTF9QSVhFTF9NQVBfR19UT19HCQk9IDB4MEM3NywKCUdM X1BJWEVMX01BUF9CX1RPX0IJCT0gMHgwQzc4LAoJR0xfUElYRUxfTUFQX0FfVE9fQQkJPSAweDBD NzksCglHTF9QQUNLX0FMSUdOTUVOVAkJPSAweDBEMDUsCglHTF9QQUNLX0xTQl9GSVJTVAkJPSAw eDBEMDEsCglHTF9QQUNLX1JPV19MRU5HVEgJCT0gMHgwRDAyLAoJR0xfUEFDS19TS0lQX1BJWEVM UwkJPSAweDBEMDQsCglHTF9QQUNLX1NLSVBfUk9XUwkJPSAweDBEMDMsCglHTF9QQUNLX1NXQVBf QllURVMJCT0gMHgwRDAwLAoJR0xfVU5QQUNLX0FMSUdOTUVOVAkJPSAweDBDRjUsCglHTF9VTlBB Q0tfTFNCX0ZJUlNUCQk9IDB4MENGMSwKCUdMX1VOUEFDS19ST1dfTEVOR1RICQk9IDB4MENGMiwK CUdMX1VOUEFDS19TS0lQX1BJWEVMUwkJPSAweDBDRjQsCglHTF9VTlBBQ0tfU0tJUF9ST1dTCQk9 IDB4MENGMywKCUdMX1VOUEFDS19TV0FQX0JZVEVTCQk9IDB4MENGMCwKCUdMX1pPT01fWAkJCT0g MHgwRDE2LAoJR0xfWk9PTV9ZCQkJPSAweDBEMTcsCgoJIAoJR0xfVEVYVFVSRV9FTlYJCQk9IDB4 MjMwMCwKCUdMX1RFWFRVUkVfRU5WX01PREUJCT0gMHgyMjAwLAoJR0xfVEVYVFVSRV8xRAkJCT0g MHgwREUwLAoJR0xfVEVYVFVSRV8yRAkJCT0gMHgwREUxLAoJR0xfVEVYVFVSRV9XUkFQX1MJCT0g MHgyODAyLAoJR0xfVEVYVFVSRV9XUkFQX1QJCT0gMHgyODAzLAoJR0xfVEVYVFVSRV9NQUdfRklM VEVSCQk9IDB4MjgwMCwKCUdMX1RFWFRVUkVfTUlOX0ZJTFRFUgkJPSAweDI4MDEsCglHTF9URVhU VVJFX0VOVl9DT0xPUgkJPSAweDIyMDEsCglHTF9URVhUVVJFX0dFTl9TCQk9IDB4MEM2MCwKCUdM X1RFWFRVUkVfR0VOX1QJCT0gMHgwQzYxLAoJR0xfVEVYVFVSRV9HRU5fTU9ERQkJPSAweDI1MDAs CglHTF9URVhUVVJFX0JPUkRFUl9DT0xPUgkJPSAweDEwMDQsCglHTF9URVhUVVJFX1dJRFRICQk9 IDB4MTAwMCwKCUdMX1RFWFRVUkVfSEVJR0hUCQk9IDB4MTAwMSwKCUdMX1RFWFRVUkVfQk9SREVS CQk9IDB4MTAwNSwKCUdMX1RFWFRVUkVfQ09NUE9ORU5UUwkJPSAweDEwMDMsCglHTF9URVhUVVJF X1JFRF9TSVpFCQk9IDB4ODA1QywKCUdMX1RFWFRVUkVfR1JFRU5fU0laRQkJPSAweDgwNUQsCglH TF9URVhUVVJFX0JMVUVfU0laRQkJPSAweDgwNUUsCglHTF9URVhUVVJFX0FMUEhBX1NJWkUJCT0g MHg4MDVGLAoJR0xfVEVYVFVSRV9MVU1JTkFOQ0VfU0laRQk9IDB4ODA2MCwKCUdMX1RFWFRVUkVf SU5URU5TSVRZX1NJWkUJPSAweDgwNjEsCglHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUCT0gMHgy NzAwLAoJR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSCT0gMHgyNzAyLAoJR0xfTElORUFSX01JUE1B UF9ORUFSRVNUCT0gMHgyNzAxLAoJR0xfTElORUFSX01JUE1BUF9MSU5FQVIJCT0gMHgyNzAzLAoJ R0xfT0JKRUNUX0xJTkVBUgkJPSAweDI0MDEsCglHTF9PQkpFQ1RfUExBTkUJCQk9IDB4MjUwMSwK CUdMX0VZRV9MSU5FQVIJCQk9IDB4MjQwMCwKCUdMX0VZRV9QTEFORQkJCT0gMHgyNTAyLAoJR0xf U1BIRVJFX01BUAkJCT0gMHgyNDAyLAoJR0xfREVDQUwJCQk9IDB4MjEwMSwKCUdMX01PRFVMQVRF CQkJPSAweDIxMDAsCglHTF9ORUFSRVNUCQkJPSAweDI2MDAsCglHTF9SRVBFQVQJCQk9IDB4Mjkw MSwKCUdMX0NMQU1QCQkJPSAweDI5MDAsCglHTF9TCQkJCT0gMHgyMDAwLAoJR0xfVAkJCQk9IDB4 MjAwMSwKCUdMX1IJCQkJPSAweDIwMDIsCglHTF9RCQkJCT0gMHgyMDAzLAoJR0xfVEVYVFVSRV9H RU5fUgkJPSAweDBDNjIsCglHTF9URVhUVVJFX0dFTl9RCQk9IDB4MEM2MywKCglHTF9QUk9YWV9U RVhUVVJFXzFECQk9IDB4ODA2MywKCUdMX1BST1hZX1RFWFRVUkVfMkQJCT0gMHg4MDY0LAoJR0xf VEVYVFVSRV9QUklPUklUWQkJPSAweDgwNjYsCglHTF9URVhUVVJFX1JFU0lERU5UCQk9IDB4ODA2 NywKCUdMX1RFWFRVUkVfQklORElOR18xRAkJPSAweDgwNjgsCglHTF9URVhUVVJFX0JJTkRJTkdf MkQJCT0gMHg4MDY5LAoKCSAKCUdMX0FMUEhBNAkJCT0gMHg4MDNCLAoJR0xfQUxQSEE4CQkJPSAw eDgwM0MsCglHTF9BTFBIQTEyCQkJPSAweDgwM0QsCglHTF9BTFBIQTE2CQkJPSAweDgwM0UsCglH TF9MVU1JTkFOQ0U0CQkJPSAweDgwM0YsCglHTF9MVU1JTkFOQ0U4CQkJPSAweDgwNDAsCglHTF9M VU1JTkFOQ0UxMgkJCT0gMHg4MDQxLAoJR0xfTFVNSU5BTkNFMTYJCQk9IDB4ODA0MiwKCUdMX0xV TUlOQU5DRTRfQUxQSEE0CQk9IDB4ODA0MywKCUdMX0xVTUlOQU5DRTZfQUxQSEEyCQk9IDB4ODA0 NCwKCUdMX0xVTUlOQU5DRThfQUxQSEE4CQk9IDB4ODA0NSwKCUdMX0xVTUlOQU5DRTEyX0FMUEhB NAkJPSAweDgwNDYsCglHTF9MVU1JTkFOQ0UxMl9BTFBIQTEyCQk9IDB4ODA0NywKCUdMX0xVTUlO QU5DRTE2X0FMUEhBMTYJCT0gMHg4MDQ4LAoJR0xfSU5URU5TSVRZCQkJPSAweDgwNDksCglHTF9J TlRFTlNJVFk0CQkJPSAweDgwNEEsCglHTF9JTlRFTlNJVFk4CQkJPSAweDgwNEIsCglHTF9JTlRF TlNJVFkxMgkJCT0gMHg4MDRDLAoJR0xfSU5URU5TSVRZMTYJCQk9IDB4ODA0RCwKCUdMX1IzX0cz X0IyCQkJPSAweDJBMTAsCglHTF9SR0I0CQkJCT0gMHg4MDRGLAoJR0xfUkdCNQkJCQk9IDB4ODA1 MCwKCUdMX1JHQjgJCQkJPSAweDgwNTEsCglHTF9SR0IxMAkJCT0gMHg4MDUyLAoJR0xfUkdCMTIJ CQk9IDB4ODA1MywKCUdMX1JHQjE2CQkJPSAweDgwNTQsCglHTF9SR0JBMgkJCT0gMHg4MDU1LAoJ R0xfUkdCQTQJCQk9IDB4ODA1NiwKCUdMX1JHQjVfQTEJCQk9IDB4ODA1NywKCUdMX1JHQkE4CQkJ PSAweDgwNTgsCglHTF9SR0IxMF9BMgkJCT0gMHg4MDU5LAoJR0xfUkdCQTEyCQkJPSAweDgwNUEs CglHTF9SR0JBMTYJCQk9IDB4ODA1QiwKCgkgCglHTF9WRU5ET1IJCQk9IDB4MUYwMCwKCUdMX1JF TkRFUkVSCQkJPSAweDFGMDEsCglHTF9WRVJTSU9OCQkJPSAweDFGMDIsCglHTF9FWFRFTlNJT05T CQkJPSAweDFGMDMsCgoJIAoJR0xfSU5WQUxJRF9WQUxVRQkJPSAweDA1MDEsCglHTF9JTlZBTElE X0VOVU0JCQk9IDB4MDUwMCwKCUdMX0lOVkFMSURfT1BFUkFUSU9OCQk9IDB4MDUwMiwKCUdMX1NU QUNLX09WRVJGTE9XCQk9IDB4MDUwMywKCUdMX1NUQUNLX1VOREVSRkxPVwkJPSAweDA1MDQsCglH TF9PVVRfT0ZfTUVNT1JZCQk9IDB4MDUwNSwKCgkgCgoKICAgICAgICAgCglHTF9DT05TVEFOVF9D T0xPUl9FWFQJCT0gMHg4MDAxLAoJR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SX0VYVAk9IDB4 ODAwMiwKCUdMX0NPTlNUQU5UX0FMUEhBX0VYVAkJPSAweDgwMDMsCglHTF9PTkVfTUlOVVNfQ09O U1RBTlRfQUxQSEFfRVhUCT0gMHg4MDA0LAoJR0xfQkxFTkRfRVFVQVRJT05fRVhUCQk9IDB4ODAw OSwKCUdMX01JTl9FWFQJCQk9IDB4ODAwNywKCUdMX01BWF9FWFQJCQk9IDB4ODAwOCwKCUdMX0ZV TkNfQUREX0VYVAkJCT0gMHg4MDA2LAoJR0xfRlVOQ19TVUJUUkFDVF9FWFQJCT0gMHg4MDBBLAoJ R0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUX0VYVAk9IDB4ODAwQiwKCUdMX0JMRU5EX0NPTE9SX0VY VAkJPSAweDgwMDUsCgoJIAogICAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0VYVCAgICAgICAgICAg PSAweDgwMzcsCiAgICAgICAgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SX0VYVCAgICA9IDB4ODAz OCwKICAgICAgICBHTF9QT0xZR09OX09GRlNFVF9CSUFTX0VYVCAgICAgID0gMHg4MDM5LAoKCSAK CUdMX1ZFUlRFWF9BUlJBWV9FWFQJCQk9IDB4ODA3NCwKCUdMX05PUk1BTF9BUlJBWV9FWFQJCQk9 IDB4ODA3NSwKCUdMX0NPTE9SX0FSUkFZX0VYVAkJCT0gMHg4MDc2LAoJR0xfSU5ERVhfQVJSQVlf RVhUCQkJPSAweDgwNzcsCglHTF9URVhUVVJFX0NPT1JEX0FSUkFZX0VYVAkJPSAweDgwNzgsCglH TF9FREdFX0ZMQUdfQVJSQVlfRVhUCQkJPSAweDgwNzksCglHTF9WRVJURVhfQVJSQVlfU0laRV9F WFQJCT0gMHg4MDdBLAoJR0xfVkVSVEVYX0FSUkFZX1RZUEVfRVhUCQk9IDB4ODA3QiwKCUdMX1ZF UlRFWF9BUlJBWV9TVFJJREVfRVhUCQk9IDB4ODA3QywKCUdMX1ZFUlRFWF9BUlJBWV9DT1VOVF9F WFQJCT0gMHg4MDdELAoJR0xfTk9STUFMX0FSUkFZX1RZUEVfRVhUCQk9IDB4ODA3RSwKCUdMX05P Uk1BTF9BUlJBWV9TVFJJREVfRVhUCQk9IDB4ODA3RiwKCUdMX05PUk1BTF9BUlJBWV9DT1VOVF9F WFQJCT0gMHg4MDgwLAoJR0xfQ09MT1JfQVJSQVlfU0laRV9FWFQJCQk9IDB4ODA4MSwKCUdMX0NP TE9SX0FSUkFZX1RZUEVfRVhUCQkJPSAweDgwODIsCglHTF9DT0xPUl9BUlJBWV9TVFJJREVfRVhU CQk9IDB4ODA4MywKCUdMX0NPTE9SX0FSUkFZX0NPVU5UX0VYVAkJPSAweDgwODQsCglHTF9JTkRF WF9BUlJBWV9UWVBFX0VYVAkJCT0gMHg4MDg1LAoJR0xfSU5ERVhfQVJSQVlfU1RSSURFX0VYVAkJ PSAweDgwODYsCglHTF9JTkRFWF9BUlJBWV9DT1VOVF9FWFQJCT0gMHg4MDg3LAoJR0xfVEVYVFVS RV9DT09SRF9BUlJBWV9TSVpFX0VYVAkJPSAweDgwODgsCglHTF9URVhUVVJFX0NPT1JEX0FSUkFZ X1RZUEVfRVhUCQk9IDB4ODA4OSwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfU1RSSURFX0VYVAk9 IDB4ODA4QSwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfQ09VTlRfRVhUCT0gMHg4MDhCLAoJR0xf RURHRV9GTEFHX0FSUkFZX1NUUklERV9FWFQJCT0gMHg4MDhDLAoJR0xfRURHRV9GTEFHX0FSUkFZ X0NPVU5UX0VYVAkJPSAweDgwOEQsCglHTF9WRVJURVhfQVJSQVlfUE9JTlRFUl9FWFQJCT0gMHg4 MDhFLAoJR0xfTk9STUFMX0FSUkFZX1BPSU5URVJfRVhUCQk9IDB4ODA4RiwKCUdMX0NPTE9SX0FS UkFZX1BPSU5URVJfRVhUCQk9IDB4ODA5MCwKCUdMX0lOREVYX0FSUkFZX1BPSU5URVJfRVhUCQk9 IDB4ODA5MSwKCUdMX1RFWFRVUkVfQ09PUkRfQVJSQVlfUE9JTlRFUl9FWFQJPSAweDgwOTIsCglH TF9FREdFX0ZMQUdfQVJSQVlfUE9JTlRFUl9FWFQJCT0gMHg4MDkzLAoKCSAKCUdMX1RFWFRVUkVf UFJJT1JJVFlfRVhUCQk9IDB4ODA2NiwKCUdMX1RFWFRVUkVfUkVTSURFTlRfRVhUCQk9IDB4ODA2 NywKCUdMX1RFWFRVUkVfMURfQklORElOR19FWFQJPSAweDgwNjgsCglHTF9URVhUVVJFXzJEX0JJ TkRJTkdfRVhUCT0gMHg4MDY5LAoKCSAKCUdMX1BBQ0tfU0tJUF9JTUFHRVNfRVhUCQk9IDB4ODA2 QiwKCUdMX1BBQ0tfSU1BR0VfSEVJR0hUX0VYVAk9IDB4ODA2QywKCUdMX1VOUEFDS19TS0lQX0lN QUdFU19FWFQJPSAweDgwNkQsCglHTF9VTlBBQ0tfSU1BR0VfSEVJR0hUX0VYVAk9IDB4ODA2RSwK CUdMX1RFWFRVUkVfM0RfRVhUCQk9IDB4ODA2RiwKCUdMX1BST1hZX1RFWFRVUkVfM0RfRVhUCQk9 IDB4ODA3MCwKCUdMX1RFWFRVUkVfREVQVEhfRVhUCQk9IDB4ODA3MSwKCUdMX1RFWFRVUkVfV1JB UF9SX0VYVAkJPSAweDgwNzIsCglHTF9NQVhfM0RfVEVYVFVSRV9TSVpFX0VYVAk9IDB4ODA3MywK CUdMX1RFWFRVUkVfM0RfQklORElOR19FWFQJPSAweDgwNkEsCgogICAgICAgICAKCUdMX1RBQkxF X1RPT19MQVJHRV9FWFQJCQk9IDB4ODAzMSwKCUdMX0NPTE9SX1RBQkxFX0ZPUk1BVF9FWFQJCT0g MHg4MEQ4LAoJR0xfQ09MT1JfVEFCTEVfV0lEVEhfRVhUCQk9IDB4ODBEOSwKCUdMX0NPTE9SX1RB QkxFX1JFRF9TSVpFX0VYVAkJPSAweDgwREEsCglHTF9DT0xPUl9UQUJMRV9HUkVFTl9TSVpFX0VY VAkJPSAweDgwREIsCglHTF9DT0xPUl9UQUJMRV9CTFVFX1NJWkVfRVhUCQk9IDB4ODBEQywKCUdM X0NPTE9SX1RBQkxFX0FMUEhBX1NJWkVfRVhUCSAJPSAweDgwREQsCglHTF9DT0xPUl9UQUJMRV9M VU1JTkFOQ0VfU0laRV9FWFQJPSAweDgwREUsCglHTF9DT0xPUl9UQUJMRV9JTlRFTlNJVFlfU0la RV9FWFQJPSAweDgwREYsCglHTF9URVhUVVJFX0lOREVYX1NJWkVfRVhUCQk9IDB4ODBFMSwgIAoJ R0xfQ09MT1JfSU5ERVgxX0VYVAkJCT0gMHg4MEUyLAoJR0xfQ09MT1JfSU5ERVgyX0VYVAkJCT0g MHg4MEUzLAoJR0xfQ09MT1JfSU5ERVg0X0VYVAkJCT0gMHg4MEU0LAoJR0xfQ09MT1JfSU5ERVg4 X0VYVAkJCT0gMHg4MEU1LAoJR0xfQ09MT1JfSU5ERVgxMl9FWFQJCQk9IDB4ODBFNiwKCUdMX0NP TE9SX0lOREVYMTZfRVhUCQkJPSAweDgwRTcsCgoJIAoJR0xfU0hBUkVEX1RFWFRVUkVfUEFMRVRU RV9FWFQJCT0gMHg4MUZCLAoKCgoKCgoKCgoJIAoJR0xfUE9JTlRfU0laRV9NSU5fRVhUCQkJPSAw eDgxMjYsCglHTF9QT0lOVF9TSVpFX01BWF9FWFQJCQk9IDB4ODEyNywKCUdMX1BPSU5UX0ZBREVf VEhSRVNIT0xEX1NJWkVfRVhUCT0gMHg4MTI4LAoJR0xfRElTVEFOQ0VfQVRURU5VQVRJT05fRVhU CQk9IDB4ODEyOQp9CgoKCgoKICAgCiAgR0xlbnVtOwoKCgogCgoKCgplbnVtIHsKCUdMX0NVUlJF TlRfQklUCQk9IDB4MDAwMDAwMDEsCglHTF9QT0lOVF9CSVQJCT0gMHgwMDAwMDAwMiwKCUdMX0xJ TkVfQklUCQk9IDB4MDAwMDAwMDQsCglHTF9QT0xZR09OX0JJVAkJPSAweDAwMDAwMDA4LAoJR0xf UE9MWUdPTl9TVElQUExFX0JJVAk9IDB4MDAwMDAwMTAsCglHTF9QSVhFTF9NT0RFX0JJVAk9IDB4 MDAwMDAwMjAsCglHTF9MSUdIVElOR19CSVQJCT0gMHgwMDAwMDA0MCwKCUdMX0ZPR19CSVQJCT0g MHgwMDAwMDA4MCwKCUdMX0RFUFRIX0JVRkZFUl9CSVQJPSAweDAwMDAwMTAwLAoJR0xfQUNDVU1f QlVGRkVSX0JJVAk9IDB4MDAwMDAyMDAsCglHTF9TVEVOQ0lMX0JVRkZFUl9CSVQJPSAweDAwMDAw NDAwLAoJR0xfVklFV1BPUlRfQklUCQk9IDB4MDAwMDA4MDAsCglHTF9UUkFOU0ZPUk1fQklUCT0g MHgwMDAwMTAwMCwKCUdMX0VOQUJMRV9CSVQJCT0gMHgwMDAwMjAwMCwKCUdMX0NPTE9SX0JVRkZF Ul9CSVQJPSAweDAwMDA0MDAwLAoJR0xfSElOVF9CSVQJCT0gMHgwMDAwODAwMCwKCUdMX0VWQUxf QklUCQk9IDB4MDAwMTAwMDAsCglHTF9MSVNUX0JJVAkJPSAweDAwMDIwMDAwLAoJR0xfVEVYVFVS RV9CSVQJCT0gMHgwMDA0MDAwMCwKCUdMX1NDSVNTT1JfQklUCQk9IDB4MDAwODAwMDAsCglHTF9B TExfQVRUUklCX0JJVFMJPSAweDAwMGZmZmZmCn07CgoKZW51bSB7CglHTF9DTElFTlRfUElYRUxf U1RPUkVfQklUCT0gMHgwMDAwMDAwMSwKCUdMX0NMSUVOVF9WRVJURVhfQVJSQVlfQklUCT0gMHgw MDAwMDAwMiwKCUdMX0NMSUVOVF9BTExfQVRUUklCX0JJVFMJPSAweDAwMDBGRkZGCn07CgoKCnR5 cGVkZWYgdW5zaWduZWQgaW50IEdMYml0ZmllbGQ7CgoKCgoKCgogCgoKCgoKIAogCnR5cGVkZWYg dm9pZAkJR0x2b2lkOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJR0xib29sZWFuOwp0eXBlZGVmIHNp Z25lZCBjaGFyCUdMYnl0ZTsJCSAKdHlwZWRlZiBzaG9ydAkJR0xzaG9ydDsJIAp0eXBlZGVmIGlu dAkJR0xpbnQ7CQkgCnR5cGVkZWYgdW5zaWduZWQgY2hhcglHTHVieXRlOwkgCnR5cGVkZWYgdW5z aWduZWQgc2hvcnQJR0x1c2hvcnQ7CSAKdHlwZWRlZiB1bnNpZ25lZCBpbnQJR0x1aW50OwkJIAp0 eXBlZGVmIGludAkJR0xzaXplaTsJIAp0eXBlZGVmIGZsb2F0CQlHTGZsb2F0OwkgCnR5cGVkZWYg ZmxvYXQJCUdMY2xhbXBmOwkgCnR5cGVkZWYgZG91YmxlCQlHTGRvdWJsZTsJIAp0eXBlZGVmIGRv dWJsZQkJR0xjbGFtcGQ7CSAKCgoKCgoKCgogCgoKCmV4dGVybiAgdm9pZCAgIGdsQ2xlYXJJbmRl eCggR0xmbG9hdCBjICk7CgpleHRlcm4gIHZvaWQgICBnbENsZWFyQ29sb3IoIEdMY2xhbXBmIHJl ZCwKCQkJICBHTGNsYW1wZiBncmVlbiwKCQkJICBHTGNsYW1wZiBibHVlLAoJCQkgIEdMY2xhbXBm IGFscGhhICk7CgpleHRlcm4gIHZvaWQgICBnbENsZWFyKCBHTGJpdGZpZWxkIG1hc2sgKTsKCmV4 dGVybiAgdm9pZCAgIGdsSW5kZXhNYXNrKCBHTHVpbnQgbWFzayApOwoKZXh0ZXJuICB2b2lkICAg Z2xDb2xvck1hc2soIEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwKCQkJIEdMYm9vbGVh biBibHVlLCBHTGJvb2xlYW4gYWxwaGEgKTsKCmV4dGVybiAgdm9pZCAgIGdsQWxwaGFGdW5jKCBH TGVudW0gZnVuYywgR0xjbGFtcGYgcmVmICk7CgpleHRlcm4gIHZvaWQgICBnbEJsZW5kRnVuYygg R0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yICk7CgpleHRlcm4gIHZvaWQgICBnbExvZ2lj T3AoIEdMZW51bSBvcGNvZGUgKTsKCmV4dGVybiAgdm9pZCAgIGdsQ3VsbEZhY2UoIEdMZW51bSBt b2RlICk7CgpleHRlcm4gIHZvaWQgICBnbEZyb250RmFjZSggR0xlbnVtIG1vZGUgKTsKCmV4dGVy biAgdm9pZCAgIGdsUG9pbnRTaXplKCBHTGZsb2F0IHNpemUgKTsKCmV4dGVybiAgdm9pZCAgIGds TGluZVdpZHRoKCBHTGZsb2F0IHdpZHRoICk7CgpleHRlcm4gIHZvaWQgICBnbExpbmVTdGlwcGxl KCBHTGludCBmYWN0b3IsIEdMdXNob3J0IHBhdHRlcm4gKTsKCmV4dGVybiAgdm9pZCAgIGdsUG9s eWdvbk1vZGUoIEdMZW51bSBmYWNlLCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xQ b2x5Z29uT2Zmc2V0KCBHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyApOwoKZXh0ZXJuICB2 b2lkICAgZ2xQb2x5Z29uU3RpcHBsZSggY29uc3QgR0x1Ynl0ZSAqbWFzayApOwoKZXh0ZXJuICB2 b2lkICAgZ2xHZXRQb2x5Z29uU3RpcHBsZSggR0x1Ynl0ZSAqbWFzayApOwoKZXh0ZXJuICB2b2lk ICAgZ2xFZGdlRmxhZyggR0xib29sZWFuIGZsYWcgKTsKCmV4dGVybiAgdm9pZCAgIGdsRWRnZUZs YWd2KCBjb25zdCBHTGJvb2xlYW4gKmZsYWcgKTsKCmV4dGVybiAgdm9pZCAgIGdsU2Npc3Nvcigg R0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CgpleHRlcm4gIHZvaWQgICBnbENsaXBQbGFuZSgg R0xlbnVtIHBsYW5lLCBjb25zdCBHTGRvdWJsZSAqZXF1YXRpb24gKTsKCmV4dGVybiAgdm9pZCAg IGdsR2V0Q2xpcFBsYW5lKCBHTGVudW0gcGxhbmUsIEdMZG91YmxlICplcXVhdGlvbiApOwoKZXh0 ZXJuICB2b2lkICAgZ2xEcmF3QnVmZmVyKCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAg Z2xSZWFkQnVmZmVyKCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xFbmFibGUoIEdM ZW51bSBjYXAgKTsKCmV4dGVybiAgdm9pZCAgIGdsRGlzYWJsZSggR0xlbnVtIGNhcCApOwoKZXh0 ZXJuICBHTGJvb2xlYW4gICBnbElzRW5hYmxlZCggR0xlbnVtIGNhcCApOwoKCmV4dGVybiAgdm9p ZCAgIGdsRW5hYmxlQ2xpZW50U3RhdGUoIEdMZW51bSBjYXAgKTsgICAKCmV4dGVybiAgdm9pZCAg IGdsRGlzYWJsZUNsaWVudFN0YXRlKCBHTGVudW0gY2FwICk7ICAgCgoKZXh0ZXJuICB2b2lkICAg Z2xHZXRCb29sZWFudiggR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFtcyApOwoKZXh0ZXJu ICB2b2lkICAgZ2xHZXREb3VibGV2KCBHTGVudW0gcG5hbWUsIEdMZG91YmxlICpwYXJhbXMgKTsK CmV4dGVybiAgdm9pZCAgIGdsR2V0RmxvYXR2KCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFt cyApOwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRJbnRlZ2VydiggR0xlbnVtIHBuYW1lLCBHTGludCAq cGFyYW1zICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xQdXNoQXR0cmliKCBHTGJpdGZpZWxkIG1hc2sg KTsKCmV4dGVybiAgdm9pZCAgIGdsUG9wQXR0cmliKCB2b2lkICk7CgoKZXh0ZXJuICB2b2lkICAg Z2xQdXNoQ2xpZW50QXR0cmliKCBHTGJpdGZpZWxkIG1hc2sgKTsKCmV4dGVybiAgdm9pZCAgIGds UG9wQ2xpZW50QXR0cmliKCB2b2lkICk7CgoKZXh0ZXJuICBHTGludCAgIGdsUmVuZGVyTW9kZSgg R0xlbnVtIG1vZGUgKTsKCmV4dGVybiAgR0xlbnVtICAgZ2xHZXRFcnJvciggdm9pZCApOwoKZXh0 ZXJuICBjb25zdCBHTHVieXRlKiAgIGdsR2V0U3RyaW5nKCBHTGVudW0gbmFtZSApOwoKZXh0ZXJu ICB2b2lkICAgZ2xGaW5pc2goIHZvaWQgKTsKCmV4dGVybiAgdm9pZCAgIGdsRmx1c2goIHZvaWQg KTsKCmV4dGVybiAgdm9pZCAgIGdsSGludCggR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUgKTsK CgoKIAoKCgpleHRlcm4gIHZvaWQgICBnbENsZWFyRGVwdGgoIEdMY2xhbXBkIGRlcHRoICk7Cgpl eHRlcm4gIHZvaWQgICBnbERlcHRoRnVuYyggR0xlbnVtIGZ1bmMgKTsKCmV4dGVybiAgdm9pZCAg IGdsRGVwdGhNYXNrKCBHTGJvb2xlYW4gZmxhZyApOwoKZXh0ZXJuICB2b2lkICAgZ2xEZXB0aFJh bmdlKCBHTGNsYW1wZCBuZWFyX3ZhbCwgR0xjbGFtcGQgZmFyX3ZhbCApOwoKCiAKCgoKZXh0ZXJu ICB2b2lkICAgZ2xDbGVhckFjY3VtKCBHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IGJsdWUsIEdMZmxvYXQgYWxw aGEgKTsKCmV4dGVybiAgdm9pZCAgIGdsQWNjdW0oIEdMZW51bSBvcCwgR0xmbG9hdCB2YWx1ZSAp OwoKCgogCgoKCmV4dGVybiAgdm9pZCAgIGdsTWF0cml4TW9kZSggR0xlbnVtIG1vZGUgKTsKCmV4 dGVybiAgdm9pZCAgIGdsT3J0aG8oIEdMZG91YmxlIGxlZnQsIEdMZG91YmxlIHJpZ2h0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSBib3R0b20sIEdMZG91YmxlIHRv cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgbmVhcl92YWwsIEdM ZG91YmxlIGZhcl92YWwgKTsKCmV4dGVybiAgdm9pZCAgIGdsRnJ1c3R1bSggR0xkb3VibGUgbGVm dCwgR0xkb3VibGUgcmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xk b3VibGUgYm90dG9tLCBHTGRvdWJsZSB0b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0xkb3VibGUgbmVhcl92YWwsIEdMZG91YmxlIGZhcl92YWwgKTsKCmV4dGVybiAgdm9p ZCAgIGdsVmlld3BvcnQoIEdMaW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0ICk7CgpleHRlcm4gIHZv aWQgICBnbFB1c2hNYXRyaXgoIHZvaWQgKTsKCmV4dGVybiAgdm9pZCAgIGdsUG9wTWF0cml4KCB2 b2lkICk7CgpleHRlcm4gIHZvaWQgICBnbExvYWRJZGVudGl0eSggdm9pZCApOwoKZXh0ZXJuICB2 b2lkICAgZ2xMb2FkTWF0cml4ZCggY29uc3QgR0xkb3VibGUgKm0gKTsKZXh0ZXJuICB2b2lkICAg Z2xMb2FkTWF0cml4ZiggY29uc3QgR0xmbG9hdCAqbSApOwoKZXh0ZXJuICB2b2lkICAgZ2xNdWx0 TWF0cml4ZCggY29uc3QgR0xkb3VibGUgKm0gKTsKZXh0ZXJuICB2b2lkICAgZ2xNdWx0TWF0cml4 ZiggY29uc3QgR0xmbG9hdCAqbSApOwoKZXh0ZXJuICB2b2lkICAgZ2xSb3RhdGVkKCBHTGRvdWJs ZSBhbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSB4LCBH TGRvdWJsZSB5LCBHTGRvdWJsZSB6ICk7CmV4dGVybiAgdm9pZCAgIGdsUm90YXRlZiggR0xmbG9h dCBhbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IHgsIEdM ZmxvYXQgeSwgR0xmbG9hdCB6ICk7CgpleHRlcm4gIHZvaWQgICBnbFNjYWxlZCggR0xkb3VibGUg eCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApOwpleHRlcm4gIHZvaWQgICBnbFNjYWxlZiggR0xm bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiApOwoKZXh0ZXJuICB2b2lkICAgZ2xUcmFuc2xh dGVkKCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6ICk7CmV4dGVybiAgdm9pZCAg IGdsVHJhbnNsYXRlZiggR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiApOwoKCgogCgoK CmV4dGVybiAgR0xib29sZWFuICAgZ2xJc0xpc3QoIEdMdWludCBsaXN0ICk7CgpleHRlcm4gIHZv aWQgICBnbERlbGV0ZUxpc3RzKCBHTHVpbnQgbGlzdCwgR0xzaXplaSByYW5nZSApOwoKZXh0ZXJu ICBHTHVpbnQgICBnbEdlbkxpc3RzKCBHTHNpemVpIHJhbmdlICk7CgpleHRlcm4gIHZvaWQgICBn bE5ld0xpc3QoIEdMdWludCBsaXN0LCBHTGVudW0gbW9kZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xF bmRMaXN0KCB2b2lkICk7CgpleHRlcm4gIHZvaWQgICBnbENhbGxMaXN0KCBHTHVpbnQgbGlzdCAp OwoKZXh0ZXJuICB2b2lkICAgZ2xDYWxsTGlzdHMoIEdMc2l6ZWkgbiwgR0xlbnVtIHR5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKmxpc3RzICk7 CgpleHRlcm4gIHZvaWQgICBnbExpc3RCYXNlKCBHTHVpbnQgYmFzZSApOwoKCgogCgoKCmV4dGVy biAgdm9pZCAgIGdsQmVnaW4oIEdMZW51bSBtb2RlICk7CgpleHRlcm4gIHZvaWQgICBnbEVuZCgg dm9pZCApOwoKCmV4dGVybiAgdm9pZCAgIGdsVmVydGV4MmQoIEdMZG91YmxlIHgsIEdMZG91Ymxl IHkgKTsKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXgyZiggR0xmbG9hdCB4LCBHTGZsb2F0IHkgKTsK ZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXgyaSggR0xpbnQgeCwgR0xpbnQgeSApOwpleHRlcm4gIHZv aWQgICBnbFZlcnRleDJzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSApOwoKZXh0ZXJuICB2b2lkICAg Z2xWZXJ0ZXgzZCggR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApOwpleHRlcm4g IHZvaWQgICBnbFZlcnRleDNmKCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6ICk7CmV4 dGVybiAgdm9pZCAgIGdsVmVydGV4M2koIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHogKTsKZXh0 ZXJuICB2b2lkICAgZ2xWZXJ0ZXgzcyggR0xzaG9ydCB4LCBHTHNob3J0IHksIEdMc2hvcnQgeiAp OwoKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXg0ZCggR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xk b3VibGUgeiwgR0xkb3VibGUgdyApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDRmKCBHTGZsb2F0 IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcgKTsKZXh0ZXJuICB2b2lkICAgZ2xW ZXJ0ZXg0aSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyApOwpleHRlcm4gIHZv aWQgICBnbFZlcnRleDRzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSwgR0xzaG9ydCB6LCBHTHNob3J0 IHcgKTsKCmV4dGVybiAgdm9pZCAgIGdsVmVydGV4MmR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpl eHRlcm4gIHZvaWQgICBnbFZlcnRleDJmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZv aWQgICBnbFZlcnRleDJpdiggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0 ZXgyc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiAgdm9pZCAgIGdsVmVydGV4M2R2KCBj b25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDNmdiggY29uc3QgR0xm bG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDNpdiggY29uc3QgR0xpbnQgKnYgKTsK ZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXgzc3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiAg dm9pZCAgIGdsVmVydGV4NGR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZvaWQgICBn bFZlcnRleDRmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFZlcnRleDRp diggY29uc3QgR0xpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0ZXg0c3YoIGNvbnN0IEdM c2hvcnQgKnYgKTsKCgpleHRlcm4gIHZvaWQgICBnbE5vcm1hbDNiKCBHTGJ5dGUgbngsIEdMYnl0 ZSBueSwgR0xieXRlIG56ICk7CmV4dGVybiAgdm9pZCAgIGdsTm9ybWFsM2QoIEdMZG91YmxlIG54 LCBHTGRvdWJsZSBueSwgR0xkb3VibGUgbnogKTsKZXh0ZXJuICB2b2lkICAgZ2xOb3JtYWwzZigg R0xmbG9hdCBueCwgR0xmbG9hdCBueSwgR0xmbG9hdCBueiApOwpleHRlcm4gIHZvaWQgICBnbE5v cm1hbDNpKCBHTGludCBueCwgR0xpbnQgbnksIEdMaW50IG56ICk7CmV4dGVybiAgdm9pZCAgIGds Tm9ybWFsM3MoIEdMc2hvcnQgbngsIEdMc2hvcnQgbnksIEdMc2hvcnQgbnogKTsKCmV4dGVybiAg dm9pZCAgIGdsTm9ybWFsM2J2KCBjb25zdCBHTGJ5dGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xO b3JtYWwzZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsTm9ybWFsM2Z2 KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsTm9ybWFsM2l2KCBjb25zdCBH TGludCAqdiApOwpleHRlcm4gIHZvaWQgICBnbE5vcm1hbDNzdiggY29uc3QgR0xzaG9ydCAqdiAp OwoKCmV4dGVybiAgdm9pZCAgIGdsSW5kZXhkKCBHTGRvdWJsZSBjICk7CmV4dGVybiAgdm9pZCAg IGdsSW5kZXhmKCBHTGZsb2F0IGMgKTsKZXh0ZXJuICB2b2lkICAgZ2xJbmRleGkoIEdMaW50IGMg KTsKZXh0ZXJuICB2b2lkICAgZ2xJbmRleHMoIEdMc2hvcnQgYyApOwpleHRlcm4gIHZvaWQgICBn bEluZGV4dWIoIEdMdWJ5dGUgYyApOyAgIAoKZXh0ZXJuICB2b2lkICAgZ2xJbmRleGR2KCBjb25z dCBHTGRvdWJsZSAqYyApOwpleHRlcm4gIHZvaWQgICBnbEluZGV4ZnYoIGNvbnN0IEdMZmxvYXQg KmMgKTsKZXh0ZXJuICB2b2lkICAgZ2xJbmRleGl2KCBjb25zdCBHTGludCAqYyApOwpleHRlcm4g IHZvaWQgICBnbEluZGV4c3YoIGNvbnN0IEdMc2hvcnQgKmMgKTsKZXh0ZXJuICB2b2lkICAgZ2xJ bmRleHVidiggY29uc3QgR0x1Ynl0ZSAqYyApOyAgIAoKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjNi KCBHTGJ5dGUgcmVkLCBHTGJ5dGUgZ3JlZW4sIEdMYnl0ZSBibHVlICk7CmV4dGVybiAgdm9pZCAg IGdsQ29sb3IzZCggR0xkb3VibGUgcmVkLCBHTGRvdWJsZSBncmVlbiwgR0xkb3VibGUgYmx1ZSAp OwpleHRlcm4gIHZvaWQgICBnbENvbG9yM2YoIEdMZmxvYXQgcmVkLCBHTGZsb2F0IGdyZWVuLCBH TGZsb2F0IGJsdWUgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjNpKCBHTGludCByZWQsIEdMaW50 IGdyZWVuLCBHTGludCBibHVlICk7CmV4dGVybiAgdm9pZCAgIGdsQ29sb3IzcyggR0xzaG9ydCBy ZWQsIEdMc2hvcnQgZ3JlZW4sIEdMc2hvcnQgYmx1ZSApOwpleHRlcm4gIHZvaWQgICBnbENvbG9y M3ViKCBHTHVieXRlIHJlZCwgR0x1Ynl0ZSBncmVlbiwgR0x1Ynl0ZSBibHVlICk7CmV4dGVybiAg dm9pZCAgIGdsQ29sb3IzdWkoIEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50IGJsdWUg KTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjN1cyggR0x1c2hvcnQgcmVkLCBHTHVzaG9ydCBncmVl biwgR0x1c2hvcnQgYmx1ZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRiKCBHTGJ5dGUgcmVk LCBHTGJ5dGUgZ3JlZW4sIEdMYnl0ZSBibHVlLCBHTGJ5dGUgYWxwaGEgKTsKZXh0ZXJuICB2b2lk ICAgZ2xDb2xvcjRkKCBHTGRvdWJsZSByZWQsIEdMZG91YmxlIGdyZWVuLAoJCSAgICAgICBHTGRv dWJsZSBibHVlLCBHTGRvdWJsZSBhbHBoYSApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yNGYoIEdM ZmxvYXQgcmVkLCBHTGZsb2F0IGdyZWVuLAoJCSAgICAgICBHTGZsb2F0IGJsdWUsIEdMZmxvYXQg YWxwaGEgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRpKCBHTGludCByZWQsIEdMaW50IGdyZWVu LCBHTGludCBibHVlLCBHTGludCBhbHBoYSApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yNHMoIEdM c2hvcnQgcmVkLCBHTHNob3J0IGdyZWVuLAoJCSAgICAgICBHTHNob3J0IGJsdWUsIEdMc2hvcnQg YWxwaGEgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjR1YiggR0x1Ynl0ZSByZWQsIEdMdWJ5dGUg Z3JlZW4sCgkJCUdMdWJ5dGUgYmx1ZSwgR0x1Ynl0ZSBhbHBoYSApOwpleHRlcm4gIHZvaWQgICBn bENvbG9yNHVpKCBHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWludCBibHVlLCBHTHVpbnQg YWxwaGEgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjR1cyggR0x1c2hvcnQgcmVkLCBHTHVzaG9y dCBncmVlbiwKCQkJR0x1c2hvcnQgYmx1ZSwgR0x1c2hvcnQgYWxwaGEgKTsKCgpleHRlcm4gIHZv aWQgICBnbENvbG9yM2J2KCBjb25zdCBHTGJ5dGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xv cjNkdiggY29uc3QgR0xkb3VibGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjNmdiggY29u c3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yM2l2KCBjb25zdCBHTGludCAq diApOwpleHRlcm4gIHZvaWQgICBnbENvbG9yM3N2KCBjb25zdCBHTHNob3J0ICp2ICk7CmV4dGVy biAgdm9pZCAgIGdsQ29sb3IzdWJ2KCBjb25zdCBHTHVieXRlICp2ICk7CmV4dGVybiAgdm9pZCAg IGdsQ29sb3IzdWl2KCBjb25zdCBHTHVpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjN1 c3YoIGNvbnN0IEdMdXNob3J0ICp2ICk7CgpleHRlcm4gIHZvaWQgICBnbENvbG9yNGJ2KCBjb25z dCBHTGJ5dGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRkdiggY29uc3QgR0xkb3VibGUg KnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjRmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRl cm4gIHZvaWQgICBnbENvbG9yNGl2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBn bENvbG9yNHN2KCBjb25zdCBHTHNob3J0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsQ29sb3I0dWJ2 KCBjb25zdCBHTHVieXRlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsQ29sb3I0dWl2KCBjb25zdCBH THVpbnQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xDb2xvcjR1c3YoIGNvbnN0IEdMdXNob3J0ICp2 ICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDFkKCBHTGRvdWJsZSBzICk7CmV4dGVybiAg dm9pZCAgIGdsVGV4Q29vcmQxZiggR0xmbG9hdCBzICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29v cmQxaSggR0xpbnQgcyApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkMXMoIEdMc2hvcnQgcyAp OwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDJkKCBHTGRvdWJsZSBzLCBHTGRvdWJsZSB0ICk7 CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQyZiggR0xmbG9hdCBzLCBHTGZsb2F0IHQgKTsKZXh0 ZXJuICB2b2lkICAgZ2xUZXhDb29yZDJpKCBHTGludCBzLCBHTGludCB0ICk7CmV4dGVybiAgdm9p ZCAgIGdsVGV4Q29vcmQycyggR0xzaG9ydCBzLCBHTHNob3J0IHQgKTsKCmV4dGVybiAgdm9pZCAg IGdsVGV4Q29vcmQzZCggR0xkb3VibGUgcywgR0xkb3VibGUgdCwgR0xkb3VibGUgciApOwpleHRl cm4gIHZvaWQgICBnbFRleENvb3JkM2YoIEdMZmxvYXQgcywgR0xmbG9hdCB0LCBHTGZsb2F0IHIg KTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDNpKCBHTGludCBzLCBHTGludCB0LCBHTGludCBy ICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQzcyggR0xzaG9ydCBzLCBHTHNob3J0IHQsIEdM c2hvcnQgciApOwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDRkKCBHTGRvdWJsZSBzLCBHTGRv dWJsZSB0LCBHTGRvdWJsZSByLCBHTGRvdWJsZSBxICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29v cmQ0ZiggR0xmbG9hdCBzLCBHTGZsb2F0IHQsIEdMZmxvYXQgciwgR0xmbG9hdCBxICk7CmV4dGVy biAgdm9pZCAgIGdsVGV4Q29vcmQ0aSggR0xpbnQgcywgR0xpbnQgdCwgR0xpbnQgciwgR0xpbnQg cSApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkNHMoIEdMc2hvcnQgcywgR0xzaG9ydCB0LCBH THNob3J0IHIsIEdMc2hvcnQgcSApOwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDFkdiggY29u c3QgR0xkb3VibGUgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDFmdiggY29uc3QgR0xm bG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkMWl2KCBjb25zdCBHTGludCAqdiAp OwpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkMXN2KCBjb25zdCBHTHNob3J0ICp2ICk7CgpleHRl cm4gIHZvaWQgICBnbFRleENvb3JkMmR2KCBjb25zdCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZv aWQgICBnbFRleENvb3JkMmZ2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGds VGV4Q29vcmQyaXYoIGNvbnN0IEdMaW50ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQy c3YoIGNvbnN0IEdMc2hvcnQgKnYgKTsKCmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQzZHYoIGNv bnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsVGV4Q29vcmQzZnYoIGNvbnN0IEdM ZmxvYXQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDNpdiggY29uc3QgR0xpbnQgKnYg KTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhDb29yZDNzdiggY29uc3QgR0xzaG9ydCAqdiApOwoKZXh0 ZXJuICB2b2lkICAgZ2xUZXhDb29yZDRkdiggY29uc3QgR0xkb3VibGUgKnYgKTsKZXh0ZXJuICB2 b2lkICAgZ2xUZXhDb29yZDRmdiggY29uc3QgR0xmbG9hdCAqdiApOwpleHRlcm4gIHZvaWQgICBn bFRleENvb3JkNGl2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFRleENvb3Jk NHN2KCBjb25zdCBHTHNob3J0ICp2ICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQb3MyZCgg R0xkb3VibGUgeCwgR0xkb3VibGUgeSApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczJmKCBH TGZsb2F0IHgsIEdMZmxvYXQgeSApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczJpKCBHTGlu dCB4LCBHTGludCB5ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zMnMoIEdMc2hvcnQgeCwg R0xzaG9ydCB5ICk7CgpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczNkKCBHTGRvdWJsZSB4LCBH TGRvdWJsZSB5LCBHTGRvdWJsZSB6ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zM2YoIEdM ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQ b3MzaSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiApOwpleHRlcm4gIHZvaWQgICBnbFJhc3Rl clBvczNzKCBHTHNob3J0IHgsIEdMc2hvcnQgeSwgR0xzaG9ydCB6ICk7CgpleHRlcm4gIHZvaWQg ICBnbFJhc3RlclBvczRkKCBHTGRvdWJsZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6LCBHTGRv dWJsZSB3ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zNGYoIEdMZmxvYXQgeCwgR0xmbG9h dCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczRp KCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3ICk7CmV4dGVybiAgdm9pZCAgIGds UmFzdGVyUG9zNHMoIEdMc2hvcnQgeCwgR0xzaG9ydCB5LCBHTHNob3J0IHosIEdMc2hvcnQgdyAp OwoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQb3MyZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4 dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zMmZ2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAg dm9pZCAgIGdsUmFzdGVyUG9zMml2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBn bFJhc3RlclBvczJzdiggY29uc3QgR0xzaG9ydCAqdiApOwoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0 ZXJQb3MzZHYoIGNvbnN0IEdMZG91YmxlICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9z M2Z2KCBjb25zdCBHTGZsb2F0ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zM2l2KCBj b25zdCBHTGludCAqdiApOwpleHRlcm4gIHZvaWQgICBnbFJhc3RlclBvczNzdiggY29uc3QgR0xz aG9ydCAqdiApOwoKZXh0ZXJuICB2b2lkICAgZ2xSYXN0ZXJQb3M0ZHYoIGNvbnN0IEdMZG91Ymxl ICp2ICk7CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zNGZ2KCBjb25zdCBHTGZsb2F0ICp2ICk7 CmV4dGVybiAgdm9pZCAgIGdsUmFzdGVyUG9zNGl2KCBjb25zdCBHTGludCAqdiApOwpleHRlcm4g IHZvaWQgICBnbFJhc3RlclBvczRzdiggY29uc3QgR0xzaG9ydCAqdiApOwoKCmV4dGVybiAgdm9p ZCAgIGdsUmVjdGQoIEdMZG91YmxlIHgxLCBHTGRvdWJsZSB5MSwgR0xkb3VibGUgeDIsIEdMZG91 YmxlIHkyICk7CmV4dGVybiAgdm9pZCAgIGdsUmVjdGYoIEdMZmxvYXQgeDEsIEdMZmxvYXQgeTEs IEdMZmxvYXQgeDIsIEdMZmxvYXQgeTIgKTsKZXh0ZXJuICB2b2lkICAgZ2xSZWN0aSggR0xpbnQg eDEsIEdMaW50IHkxLCBHTGludCB4MiwgR0xpbnQgeTIgKTsKZXh0ZXJuICB2b2lkICAgZ2xSZWN0 cyggR0xzaG9ydCB4MSwgR0xzaG9ydCB5MSwgR0xzaG9ydCB4MiwgR0xzaG9ydCB5MiApOwoKCmV4 dGVybiAgdm9pZCAgIGdsUmVjdGR2KCBjb25zdCBHTGRvdWJsZSAqdjEsIGNvbnN0IEdMZG91Ymxl ICp2MiApOwpleHRlcm4gIHZvaWQgICBnbFJlY3RmdiggY29uc3QgR0xmbG9hdCAqdjEsIGNvbnN0 IEdMZmxvYXQgKnYyICk7CmV4dGVybiAgdm9pZCAgIGdsUmVjdGl2KCBjb25zdCBHTGludCAqdjEs IGNvbnN0IEdMaW50ICp2MiApOwpleHRlcm4gIHZvaWQgICBnbFJlY3RzdiggY29uc3QgR0xzaG9y dCAqdjEsIGNvbnN0IEdMc2hvcnQgKnYyICk7CgoKCiAKCgoKZXh0ZXJuICB2b2lkICAgZ2xWZXJ0 ZXhQb2ludGVyKCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiAgdm9p ZCAgIGdsTm9ybWFsUG9pbnRlciggR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQg ICBnbENvbG9yUG9pbnRlciggR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVy biAgdm9pZCAgIGdsSW5kZXhQb2ludGVyKCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsIGNv bnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQgICBnbFRleENvb3JkUG9pbnRlciggR0xp bnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwdHIgKTsKCmV4dGVybiAgdm9pZCAgIGdsRWRnZUZs YWdQb2ludGVyKCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0xib29sZWFuICpwdHIgKTsKCmV4dGVy biAgdm9pZCAgIGdsR2V0UG9pbnRlcnYoIEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyApOwoK ZXh0ZXJuICB2b2lkICAgZ2xBcnJheUVsZW1lbnQoIEdMaW50IGkgKTsKCmV4dGVybiAgdm9pZCAg IGdsRHJhd0FycmF5cyggR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50ICk7 CgpleHRlcm4gIHZvaWQgICBnbERyYXdFbGVtZW50cyggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291 bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk ICppbmRpY2VzICk7CgpleHRlcm4gIHZvaWQgICBnbEludGVybGVhdmVkQXJyYXlzKCBHTGVudW0g Zm9ybWF0LCBHTHNpemVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgR0x2b2lkICpwb2ludGVyICk7CgoKIAoKCgpleHRlcm4gIHZvaWQgICBnbFNoYWRlTW9k ZWwoIEdMZW51bSBtb2RlICk7CgpleHRlcm4gIHZvaWQgICBnbExpZ2h0ZiggR0xlbnVtIGxpZ2h0 LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuICB2b2lkICAgZ2xMaWdodGko IEdMZW51bSBsaWdodCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSApOwpleHRlcm4gIHZvaWQg ICBnbExpZ2h0ZnYoIEdMZW51bSBsaWdodCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpw YXJhbXMgKTsKZXh0ZXJuICB2b2lkICAgZ2xMaWdodGl2KCBHTGVudW0gbGlnaHQsIEdMZW51bSBw bmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApOwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRMaWdodGZ2 KCBHTGVudW0gbGlnaHQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zICk7CmV4dGVybiAg dm9pZCAgIGdsR2V0TGlnaHRpdiggR0xlbnVtIGxpZ2h0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpw YXJhbXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsTGlnaHRNb2RlbGYoIEdMZW51bSBwbmFtZSwgR0xm bG9hdCBwYXJhbSApOwpleHRlcm4gIHZvaWQgICBnbExpZ2h0TW9kZWxpKCBHTGVudW0gcG5hbWUs IEdMaW50IHBhcmFtICk7CmV4dGVybiAgdm9pZCAgIGdsTGlnaHRNb2RlbGZ2KCBHTGVudW0gcG5h bWUsIGNvbnN0IEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbExpZ2h0TW9kZWxp diggR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zICk7CgpleHRlcm4gIHZvaWQgICBn bE1hdGVyaWFsZiggR0xlbnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSApOwpl eHRlcm4gIHZvaWQgICBnbE1hdGVyaWFsaSggR0xlbnVtIGZhY2UsIEdMZW51bSBwbmFtZSwgR0xp bnQgcGFyYW0gKTsKZXh0ZXJuICB2b2lkICAgZ2xNYXRlcmlhbGZ2KCBHTGVudW0gZmFjZSwgR0xl bnVtIHBuYW1lLCBjb25zdCBHTGZsb2F0ICpwYXJhbXMgKTsKZXh0ZXJuICB2b2lkICAgZ2xNYXRl cmlhbGl2KCBHTGVudW0gZmFjZSwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zICk7 CgpleHRlcm4gIHZvaWQgICBnbEdldE1hdGVyaWFsZnYoIEdMZW51bSBmYWNlLCBHTGVudW0gcG5h bWUsIEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbEdldE1hdGVyaWFsaXYoIEdM ZW51bSBmYWNlLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiAgdm9pZCAg IGdsQ29sb3JNYXRlcmlhbCggR0xlbnVtIGZhY2UsIEdMZW51bSBtb2RlICk7CgoKCgogCgoKCmV4 dGVybiAgdm9pZCAgIGdsUGl4ZWxab29tKCBHTGZsb2F0IHhmYWN0b3IsIEdMZmxvYXQgeWZhY3Rv ciApOwoKZXh0ZXJuICB2b2lkICAgZ2xQaXhlbFN0b3JlZiggR0xlbnVtIHBuYW1lLCBHTGZsb2F0 IHBhcmFtICk7CmV4dGVybiAgdm9pZCAgIGdsUGl4ZWxTdG9yZWkoIEdMZW51bSBwbmFtZSwgR0xp bnQgcGFyYW0gKTsKCmV4dGVybiAgdm9pZCAgIGdsUGl4ZWxUcmFuc2ZlcmYoIEdMZW51bSBwbmFt ZSwgR0xmbG9hdCBwYXJhbSApOwpleHRlcm4gIHZvaWQgICBnbFBpeGVsVHJhbnNmZXJpKCBHTGVu dW0gcG5hbWUsIEdMaW50IHBhcmFtICk7CgpleHRlcm4gIHZvaWQgICBnbFBpeGVsTWFwZnYoIEdM ZW51bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgR0xmbG9hdCAqdmFsdWVzICk7CmV4dGVybiAgdm9pZCAgIGdsUGl4ZWxNYXB1 aXYoIEdMZW51bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEdMdWludCAqdmFsdWVzICk7CmV4dGVybiAgdm9pZCAgIGdsUGl4 ZWxNYXB1c3YoIEdMZW51bSBtYXAsIEdMaW50IG1hcHNpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdXNob3J0ICp2YWx1ZXMgKTsKCmV4dGVybiAgdm9p ZCAgIGdsR2V0UGl4ZWxNYXBmdiggR0xlbnVtIG1hcCwgR0xmbG9hdCAqdmFsdWVzICk7CmV4dGVy biAgdm9pZCAgIGdsR2V0UGl4ZWxNYXB1aXYoIEdMZW51bSBtYXAsIEdMdWludCAqdmFsdWVzICk7 CmV4dGVybiAgdm9pZCAgIGdsR2V0UGl4ZWxNYXB1c3YoIEdMZW51bSBtYXAsIEdMdXNob3J0ICp2 YWx1ZXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsQml0bWFwKCBHTHNpemVpIHdpZHRoLCBHTHNpemVp IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgeG9yaWcs IEdMZmxvYXQgeW9yaWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0 IHhtb3ZlLCBHTGZsb2F0IHltb3ZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgR0x1Ynl0ZSAqYml0bWFwICk7CgpleHRlcm4gIHZvaWQgICBnbFJlYWRQaXhlbHMoIEdM aW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0x2b2lkICpwaXhlbHMgKTsKCmV4dGVybiAgdm9pZCAgIGdsRHJh d1BpeGVscyggR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKCmV4 dGVybiAgdm9pZCAgIGdsQ29weVBpeGVscyggR0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSApOwoKCgog CgoKCmV4dGVybiAgdm9pZCAgIGdsU3RlbmNpbEZ1bmMoIEdMZW51bSBmdW5jLCBHTGludCByZWYs IEdMdWludCBtYXNrICk7CgpleHRlcm4gIHZvaWQgICBnbFN0ZW5jaWxNYXNrKCBHTHVpbnQgbWFz ayApOwoKZXh0ZXJuICB2b2lkICAgZ2xTdGVuY2lsT3AoIEdMZW51bSBmYWlsLCBHTGVudW0gemZh aWwsIEdMZW51bSB6cGFzcyApOwoKZXh0ZXJuICB2b2lkICAgZ2xDbGVhclN0ZW5jaWwoIEdMaW50 IHMgKTsKCgoKIAoKCgpleHRlcm4gIHZvaWQgICBnbFRleEdlbmQoIEdMZW51bSBjb29yZCwgR0xl bnVtIHBuYW1lLCBHTGRvdWJsZSBwYXJhbSApOwpleHRlcm4gIHZvaWQgICBnbFRleEdlbmYoIEdM ZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CmV4dGVybiAgdm9pZCAg IGdsVGV4R2VuaSggR0xlbnVtIGNvb3JkLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtICk7Cgpl eHRlcm4gIHZvaWQgICBnbFRleEdlbmR2KCBHTGVudW0gY29vcmQsIEdMZW51bSBwbmFtZSwgY29u c3QgR0xkb3VibGUgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbFRleEdlbmZ2KCBHTGVudW0g Y29vcmQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCAqcGFyYW1zICk7CmV4dGVybiAgdm9p ZCAgIGdsVGV4R2VuaXYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAq cGFyYW1zICk7CgpleHRlcm4gIHZvaWQgICBnbEdldFRleEdlbmR2KCBHTGVudW0gY29vcmQsIEdM ZW51bSBwbmFtZSwgR0xkb3VibGUgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbEdldFRleEdl bmZ2KCBHTGVudW0gY29vcmQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zICk7CmV4dGVy biAgdm9pZCAgIGdsR2V0VGV4R2VuaXYoIEdMZW51bSBjb29yZCwgR0xlbnVtIHBuYW1lLCBHTGlu dCAqcGFyYW1zICk7CgoKZXh0ZXJuICB2b2lkICAgZ2xUZXhFbnZmKCBHTGVudW0gdGFyZ2V0LCBH TGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0gKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhFbnZpKCBH TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtICk7CgpleHRlcm4gIHZvaWQg ICBnbFRleEVudmZ2KCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQg KnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBnbFRleEVudml2KCBHTGVudW0gdGFyZ2V0LCBHTGVu dW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsR2V0VGV4 RW52ZnYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zICk7CmV4 dGVybiAgdm9pZCAgIGdsR2V0VGV4RW52aXYoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg R0xpbnQgKnBhcmFtcyApOwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4UGFyYW1ldGVyZiggR0xlbnVt IHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CmV4dGVybiAgdm9pZCAgIGds VGV4UGFyYW1ldGVyaSggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSAp OwoKZXh0ZXJuICB2b2lkICAgZ2xUZXhQYXJhbWV0ZXJmdiggR0xlbnVtIHRhcmdldCwgR0xlbnVt IHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH TGZsb2F0ICpwYXJhbXMgKTsKZXh0ZXJuICB2b2lkICAgZ2xUZXhQYXJhbWV0ZXJpdiggR0xlbnVt IHRhcmdldCwgR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBHTGludCAqcGFyYW1zICk7CgpleHRlcm4gIHZvaWQgICBnbEdldFRleFBh cmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CmV4dGVybiAgdm9p ZCAgIGdsR2V0VGV4UGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyAp OwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRUZXhMZXZlbFBhcmFtZXRlcmZ2KCBHTGVudW0gdGFyZ2V0 LCBHTGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyApOwpleHRlcm4gIHZvaWQgICBn bEdldFRleExldmVsUGFyYW1ldGVyaXYoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBwbmFt ZSwgR0xpbnQgKnBhcmFtcyApOwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4SW1hZ2UxRCggR0xlbnVt IHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0xpbnQgaW50ZXJuYWxGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0xzaXplaSB3aWR0aCwgR0xpbnQgYm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdm9pZCAqcGl4ZWxzICk7CgpleHRlcm4g IHZvaWQgICBnbFRleEltYWdlMkQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGludGVybmFsRm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRl ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKCmV4dGVybiAgdm9pZCAgIGdsR2V0 VGV4SW1hZ2UoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x2b2lkICpwaXhlbHMgKTsKCgoKIAoKZXh0 ZXJuICB2b2lkICAgZ2xHZW5UZXh0dXJlcyggR0xzaXplaSBuLCBHTHVpbnQgKnRleHR1cmVzICk7 CgpleHRlcm4gIHZvaWQgICBnbERlbGV0ZVRleHR1cmVzKCBHTHNpemVpIG4sIGNvbnN0IEdMdWlu dCAqdGV4dHVyZXMpOwoKZXh0ZXJuICB2b2lkICAgZ2xCaW5kVGV4dHVyZSggR0xlbnVtIHRhcmdl dCwgR0x1aW50IHRleHR1cmUgKTsKCmV4dGVybiAgdm9pZCAgIGdsUHJpb3JpdGl6ZVRleHR1cmVz KCBHTHNpemVpIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBHTHVpbnQgKnRleHR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgR0xjbGFtcGYgKnByaW9yaXRpZXMgKTsKCmV4dGVybiAgR0xi b29sZWFuICAgZ2xBcmVUZXh0dXJlc1Jlc2lkZW50KCBHTHNpemVpIG4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgKnRleHR1 cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0xib29sZWFuICpyZXNpZGVuY2VzICk7CgpleHRlcm4gIEdMYm9vbGVhbiAgIGdsSXNUZXh0dXJl KCBHTHVpbnQgdGV4dHVyZSApOwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4U3ViSW1hZ2UxRCggR0xl bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0xpbnQgeG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKnBpeGVscyAp OwoKCmV4dGVybiAgdm9pZCAgIGdsVGV4U3ViSW1hZ2UyRCggR0xlbnVtIHRhcmdldCwgR0xpbnQg bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m ZnNldCwgR0xpbnQgeW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHZvaWQgKnBpeGVscyApOwoK CmV4dGVybiAgdm9pZCAgIGdsQ29weVRleEltYWdlMUQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl dmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gaW50 ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM aW50IHgsIEdMaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdMc2l6ZWkgd2lkdGgsIEdMaW50IGJvcmRlciApOwoKCmV4dGVybiAgdm9pZCAgIGdsQ29weVRl eEltYWdlMkQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHgsIEdMaW50IHksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBi b3JkZXIgKTsKCgpleHRlcm4gIHZvaWQgICBnbENvcHlUZXhTdWJJbWFnZTFEKCBHTGVudW0gdGFy Z2V0LCBHTGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCApOwoKCmV4dGVybiAgdm9p ZCAgIGdsQ29weVRleFN1YkltYWdlMkQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBH TGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHTGludCB4LCBHTGludCB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCApOwoKCgoKIAoKCgpleHRlcm4g IHZvaWQgICBnbE1hcDFkKCBHTGVudW0gdGFyZ2V0LCBHTGRvdWJsZSB1MSwgR0xkb3VibGUgdTIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0cmlkZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgb3JkZXIsIGNvbnN0IEdMZG91YmxlICpwb2lu dHMgKTsKZXh0ZXJuICB2b2lkICAgZ2xNYXAxZiggR0xlbnVtIHRhcmdldCwgR0xmbG9hdCB1MSwg R0xmbG9hdCB1MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RyaWRl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBvcmRlciwgY29uc3QgR0xm bG9hdCAqcG9pbnRzICk7CgpleHRlcm4gIHZvaWQgICBnbE1hcDJkKCBHTGVudW0gdGFyZ2V0LAoJ CSAgICAgR0xkb3VibGUgdTEsIEdMZG91YmxlIHUyLCBHTGludCB1c3RyaWRlLCBHTGludCB1b3Jk ZXIsCgkJICAgICBHTGRvdWJsZSB2MSwgR0xkb3VibGUgdjIsIEdMaW50IHZzdHJpZGUsIEdMaW50 IHZvcmRlciwKCQkgICAgIGNvbnN0IEdMZG91YmxlICpwb2ludHMgKTsKZXh0ZXJuICB2b2lkICAg Z2xNYXAyZiggR0xlbnVtIHRhcmdldCwKCQkgICAgIEdMZmxvYXQgdTEsIEdMZmxvYXQgdTIsIEdM aW50IHVzdHJpZGUsIEdMaW50IHVvcmRlciwKCQkgICAgIEdMZmxvYXQgdjEsIEdMZmxvYXQgdjIs IEdMaW50IHZzdHJpZGUsIEdMaW50IHZvcmRlciwKCQkgICAgIGNvbnN0IEdMZmxvYXQgKnBvaW50 cyApOwoKZXh0ZXJuICB2b2lkICAgZ2xHZXRNYXBkdiggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHF1 ZXJ5LCBHTGRvdWJsZSAqdiApOwpleHRlcm4gIHZvaWQgICBnbEdldE1hcGZ2KCBHTGVudW0gdGFy Z2V0LCBHTGVudW0gcXVlcnksIEdMZmxvYXQgKnYgKTsKZXh0ZXJuICB2b2lkICAgZ2xHZXRNYXBp diggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHF1ZXJ5LCBHTGludCAqdiApOwoKZXh0ZXJuICB2b2lk ICAgZ2xFdmFsQ29vcmQxZCggR0xkb3VibGUgdSApOwpleHRlcm4gIHZvaWQgICBnbEV2YWxDb29y ZDFmKCBHTGZsb2F0IHUgKTsKCmV4dGVybiAgdm9pZCAgIGdsRXZhbENvb3JkMWR2KCBjb25zdCBH TGRvdWJsZSAqdSApOwpleHRlcm4gIHZvaWQgICBnbEV2YWxDb29yZDFmdiggY29uc3QgR0xmbG9h dCAqdSApOwoKZXh0ZXJuICB2b2lkICAgZ2xFdmFsQ29vcmQyZCggR0xkb3VibGUgdSwgR0xkb3Vi bGUgdiApOwpleHRlcm4gIHZvaWQgICBnbEV2YWxDb29yZDJmKCBHTGZsb2F0IHUsIEdMZmxvYXQg diApOwoKZXh0ZXJuICB2b2lkICAgZ2xFdmFsQ29vcmQyZHYoIGNvbnN0IEdMZG91YmxlICp1ICk7 CmV4dGVybiAgdm9pZCAgIGdsRXZhbENvb3JkMmZ2KCBjb25zdCBHTGZsb2F0ICp1ICk7CgpleHRl cm4gIHZvaWQgICBnbE1hcEdyaWQxZCggR0xpbnQgdW4sIEdMZG91YmxlIHUxLCBHTGRvdWJsZSB1 MiApOwpleHRlcm4gIHZvaWQgICBnbE1hcEdyaWQxZiggR0xpbnQgdW4sIEdMZmxvYXQgdTEsIEdM ZmxvYXQgdTIgKTsKCmV4dGVybiAgdm9pZCAgIGdsTWFwR3JpZDJkKCBHTGludCB1biwgR0xkb3Vi bGUgdTEsIEdMZG91YmxlIHUyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0xpbnQgdm4sIEdMZG91YmxlIHYxLCBHTGRvdWJsZSB2MiApOwpleHRlcm4gIHZvaWQgICBnbE1h cEdyaWQyZiggR0xpbnQgdW4sIEdMZmxvYXQgdTEsIEdMZmxvYXQgdTIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB2biwgR0xmbG9hdCB2MSwgR0xmbG9hdCB2MiAp OwoKZXh0ZXJuICB2b2lkICAgZ2xFdmFsUG9pbnQxKCBHTGludCBpICk7CgpleHRlcm4gIHZvaWQg ICBnbEV2YWxQb2ludDIoIEdMaW50IGksIEdMaW50IGogKTsKCmV4dGVybiAgdm9pZCAgIGdsRXZh bE1lc2gxKCBHTGVudW0gbW9kZSwgR0xpbnQgaTEsIEdMaW50IGkyICk7CgpleHRlcm4gIHZvaWQg ICBnbEV2YWxNZXNoMiggR0xlbnVtIG1vZGUsIEdMaW50IGkxLCBHTGludCBpMiwgR0xpbnQgajEs IEdMaW50IGoyICk7CgoKCiAKCgoKZXh0ZXJuICB2b2lkICAgZ2xGb2dmKCBHTGVudW0gcG5hbWUs IEdMZmxvYXQgcGFyYW0gKTsKCmV4dGVybiAgdm9pZCAgIGdsRm9naSggR0xlbnVtIHBuYW1lLCBH TGludCBwYXJhbSApOwoKZXh0ZXJuICB2b2lkICAgZ2xGb2dmdiggR0xlbnVtIHBuYW1lLCBjb25z dCBHTGZsb2F0ICpwYXJhbXMgKTsKCmV4dGVybiAgdm9pZCAgIGdsRm9naXYoIEdMZW51bSBwbmFt ZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApOwoKCgogCgoKCmV4dGVybiAgdm9pZCAgIGdsRmVlZGJh Y2tCdWZmZXIoIEdMc2l6ZWkgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMZmxvYXQgKmJ1ZmZlciApOwoK ZXh0ZXJuICB2b2lkICAgZ2xQYXNzVGhyb3VnaCggR0xmbG9hdCB0b2tlbiApOwoKZXh0ZXJuICB2 b2lkICAgZ2xTZWxlY3RCdWZmZXIoIEdMc2l6ZWkgc2l6ZSwgR0x1aW50ICpidWZmZXIgKTsKCmV4 dGVybiAgdm9pZCAgIGdsSW5pdE5hbWVzKCB2b2lkICk7CgpleHRlcm4gIHZvaWQgICBnbExvYWRO YW1lKCBHTHVpbnQgbmFtZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xQdXNoTmFtZSggR0x1aW50IG5h bWUgKTsKCmV4dGVybiAgdm9pZCAgIGdsUG9wTmFtZSggdm9pZCApOwoKCgogCgoKCiAKZXh0ZXJu ICB2b2lkICAgZ2xCbGVuZEVxdWF0aW9uRVhUKCBHTGVudW0gbW9kZSApOwoKCgogCmV4dGVybiAg dm9pZCAgIGdsQmxlbmRDb2xvckVYVCggR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGNsYW1wZiBibHVlLCBHTGNs YW1wZiBhbHBoYSApOwoKCgogCmV4dGVybiAgdm9pZCAgIGdsUG9seWdvbk9mZnNldEVYVCggR0xm bG9hdCBmYWN0b3IsIEdMZmxvYXQgYmlhcyApOwoKCgogCgpleHRlcm4gIHZvaWQgICBnbFZlcnRl eFBvaW50ZXJFWFQoIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAq cHRyICk7CgpleHRlcm4gIHZvaWQgICBnbE5vcm1hbFBvaW50ZXJFWFQoIEdMZW51bSB0eXBlLCBH THNpemVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQgKnB0ciApOwoKZXh0ZXJuICB2b2lkICAgZ2xD b2xvclBvaW50ZXJFWFQoIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGNvdW50LCBjb25zdCBHTHZvaWQg KnB0ciApOwoKZXh0ZXJuICB2b2lkICAgZ2xJbmRleFBvaW50ZXJFWFQoIEdMZW51bSB0eXBlLCBH THNpemVpIHN0cmlkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQgICBnbFRl eENvb3JkUG9pbnRlckVYVCggR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgR0xzaXplaSBj b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEdMdm9pZCAqcHRyICk7CgpleHRlcm4gIHZvaWQgICBnbEVkZ2VGbGFnUG9pbnRlckVYVCggR0xz aXplaSBzdHJpZGUsIEdMc2l6ZWkgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBHTGJvb2xlYW4gKnB0ciApOwoKZXh0ZXJuICB2b2lkICAg Z2xHZXRQb2ludGVydkVYVCggR0xlbnVtIHBuYW1lLCB2b2lkICoqcGFyYW1zICk7CgpleHRlcm4g IHZvaWQgICBnbEFycmF5RWxlbWVudEVYVCggR0xpbnQgaSApOwoKZXh0ZXJuICB2b2lkICAgZ2xE cmF3QXJyYXlzRVhUKCBHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCApOwoKCgogCgpleHRlcm4gIHZv aWQgICBnbEdlblRleHR1cmVzRVhUKCBHTHNpemVpIG4sIEdMdWludCAqdGV4dHVyZXMgKTsKCmV4 dGVybiAgdm9pZCAgIGdsRGVsZXRlVGV4dHVyZXNFWFQoIEdMc2l6ZWkgbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50ICp0ZXh0dXJlcyk7 CgpleHRlcm4gIHZvaWQgICBnbEJpbmRUZXh0dXJlRVhUKCBHTGVudW0gdGFyZ2V0LCBHTHVpbnQg dGV4dHVyZSApOwoKZXh0ZXJuICB2b2lkICAgZ2xQcmlvcml0aXplVGV4dHVyZXNFWFQoIEdMc2l6 ZWkgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEdMdWludCAqdGV4dHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBHTGNsYW1wZiAqcHJpb3JpdGllcyApOwoKZXh0ZXJuICBHTGJv b2xlYW4gICBnbEFyZVRleHR1cmVzUmVzaWRlbnRFWFQoIEdMc2l6ZWkgbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCAq dGV4dHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTGJvb2xlYW4gKnJlc2lkZW5jZXMgKTsKCmV4dGVybiAgR0xib29sZWFuICAgZ2xJ c1RleHR1cmVFWFQoIEdMdWludCB0ZXh0dXJlICk7CgoKCiAKCmV4dGVybiAgdm9pZCAgIGdsVGV4 SW1hZ2UzREVYVCggR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgZGVw dGgsIEdMaW50IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpwaXhlbHMgKTsKIApleHRlcm4gIHZvaWQgICBn bFRleFN1YkltYWdlM0RFWFQoIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg em9mZnNldCwgR0xzaXplaSB3aWR0aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk ICpwaXhlbHMpOwoKZXh0ZXJuICB2b2lkICAgZ2xDb3B5VGV4U3ViSW1hZ2UzREVYVCggR0xlbnVt IHRhcmdldCwgR0xpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHpvZmZzZXQsIEdMaW50IHgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHks IEdMc2l6ZWkgd2lkdGgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTHNpemVpIGhlaWdodCApOwoKCgogCgpleHRlcm4gIHZvaWQgICBnbENvbG9yVGFi bGVFWFQoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBj b25zdCBHTHZvaWQgKnRhYmxlICk7CgpleHRlcm4gIHZvaWQgICBnbENvbG9yU3ViVGFibGVFWFQo IEdMZW51bSB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0xzaXplaSBzdGFydCwgR0xzaXplaSBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0x2b2lkICpkYXRhICk7 CgpleHRlcm4gIHZvaWQgICBnbEdldENvbG9yVGFibGVFWFQoIEdMZW51bSB0YXJnZXQsIEdMZW51 bSBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl bnVtIHR5cGUsIEdMdm9pZCAqdGFibGUgKTsKCmV4dGVybiAgdm9pZCAgIGdsR2V0Q29sb3JUYWJs ZVBhcmFtZXRlcmZ2RVhUKCBHTGVudW0gdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHBuYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqcGFyYW1z ICk7CgpleHRlcm4gIHZvaWQgICBnbEdldENvbG9yVGFibGVQYXJhbWV0ZXJpdkVYVCggR0xlbnVt IHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdMZW51bSBwbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdMaW50ICpwYXJhbXMgKTsKCgoKIApleHRlcm4gIHZvaWQgICBn bFBvaW50UGFyYW1ldGVyZkVYVCggR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtICk7CmV4dGVy biAgdm9pZCAgIGdsUG9pbnRQYXJhbWV0ZXJmdkVYVCggR0xlbnVtIHBuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMZmxvYXQgKnBhcmFt cyApOwoKCgogCgpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJpTUVTQSggR0xpbnQgeCwgR0xp bnQgeSApOwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJzTUVTQSggR0xzaG9ydCB4LCBHTHNo b3J0IHkgKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MyZk1FU0EoIEdMZmxvYXQgeCwgR0xm bG9hdCB5ICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zMmRNRVNBKCBHTGRvdWJsZSB4LCBH TGRvdWJsZSB5ICk7CgpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJpdk1FU0EoIGNvbnN0IEdM aW50ICpwICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zMnN2TUVTQSggY29uc3QgR0xzaG9y dCAqcCApOwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczJmdk1FU0EoIGNvbnN0IEdMZmxvYXQg KnAgKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MyZHZNRVNBKCBjb25zdCBHTGRvdWJsZSAq cCApOwoKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MzaU1FU0EoIEdMaW50IHgsIEdMaW50IHks IEdMaW50IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3Mzc01FU0EoIEdMc2hvcnQgeCwg R0xzaG9ydCB5LCBHTHNob3J0IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3MzZk1FU0Eo IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHogKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5k b3dQb3MzZE1FU0EoIEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91YmxlIHogKTsKCmV4dGVy biAgdm9pZCAgIGdsV2luZG93UG9zM2l2TUVTQSggY29uc3QgR0xpbnQgKnAgKTsKZXh0ZXJuICB2 b2lkICAgZ2xXaW5kb3dQb3Mzc3ZNRVNBKCBjb25zdCBHTHNob3J0ICpwICk7CmV4dGVybiAgdm9p ZCAgIGdsV2luZG93UG9zM2Z2TUVTQSggY29uc3QgR0xmbG9hdCAqcCApOwpleHRlcm4gIHZvaWQg ICBnbFdpbmRvd1BvczNkdk1FU0EoIGNvbnN0IEdMZG91YmxlICpwICk7CgpleHRlcm4gIHZvaWQg ICBnbFdpbmRvd1BvczRpTUVTQSggR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyAp OwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczRzTUVTQSggR0xzaG9ydCB4LCBHTHNob3J0IHks IEdMc2hvcnQgeiwgR0xzaG9ydCB3ICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zNGZNRVNB KCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcgKTsKZXh0ZXJuICB2 b2lkICAgZ2xXaW5kb3dQb3M0ZE1FU0EoIEdMZG91YmxlIHgsIEdMZG91YmxlIHksIEdMZG91Ymxl IHosIEdMZG91YmxlIHcpOwoKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3M0aXZNRVNBKCBjb25z dCBHTGludCAqcCApOwpleHRlcm4gIHZvaWQgICBnbFdpbmRvd1BvczRzdk1FU0EoIGNvbnN0IEdM c2hvcnQgKnAgKTsKZXh0ZXJuICB2b2lkICAgZ2xXaW5kb3dQb3M0ZnZNRVNBKCBjb25zdCBHTGZs b2F0ICpwICk7CmV4dGVybiAgdm9pZCAgIGdsV2luZG93UG9zNGR2TUVTQSggY29uc3QgR0xkb3Vi bGUgKnAgKTsKCgogCgpleHRlcm4gIHZvaWQgICBnbFJlc2l6ZUJ1ZmZlcnNNRVNBKCk7CgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKfQoKCgojIDIzICJoL25yaHlfY2xhc3NV c2VNYXAuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvR0wvZ2x1LmgiIDEgMwogCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4 dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgplbnVtIHsKCSAKCUdMVV9TTU9PVEgJPSAx MDAwMDAsCglHTFVfRkxBVAk9IDEwMDAwMSwKCUdMVV9OT05FCT0gMTAwMDAyLAoKCSAKCUdMVV9Q T0lOVAk9IDEwMDAxMCwKCUdMVV9MSU5FCT0gMTAwMDExLAoJR0xVX0ZJTEwJPSAxMDAwMTIsCglH TFVfU0lMSE9VRVRURQk9IDEwMDAxMywKCgkgCglHTFVfT1VUU0lERQk9IDEwMDAyMCwKCUdMVV9J TlNJREUJPSAxMDAwMjEsCgoJIAoJR0xVX0JFR0lOCT0gMTAwMTAwLAoJR0xVX1ZFUlRFWAk9IDEw MDEwMSwKCUdMVV9FTkQJCT0gMTAwMTAyLAoJR0xVX0VSUk9SCT0gMTAwMTAzLAoJR0xVX0VER0Vf RkxBRwk9IDEwMDEwNCwKCgkgCglHTFVfQ1cJCT0gMTAwMTIwLAoJR0xVX0NDVwkJPSAxMDAxMjEs CglHTFVfSU5URVJJT1IJPSAxMDAxMjIsCglHTFVfRVhURVJJT1IJPSAxMDAxMjMsCglHTFVfVU5L Tk9XTgk9IDEwMDEyNCwKCgkgCglHTFVfVEVTU19FUlJPUjEJPSAxMDAxNTEsICAgCglHTFVfVEVT U19FUlJPUjIgPSAxMDAxNTIsICAgCglHTFVfVEVTU19FUlJPUjMgPSAxMDAxNTMsICAgCglHTFVf VEVTU19FUlJPUjQgPSAxMDAxNTQsICAgCglHTFVfVEVTU19FUlJPUjUgPSAxMDAxNTUsICAgCglH TFVfVEVTU19FUlJPUjYgPSAxMDAxNTYsICAgCglHTFVfVEVTU19FUlJPUjcgPSAxMDAxNTcsICAg CglHTFVfVEVTU19FUlJPUjggPSAxMDAxNTgsICAgCglHTFVfVEVTU19FUlJPUjkgPSAxMDAxNTks ICAgCgoJIAoJR0xVX0FVVE9fTE9BRF9NQVRSSVgJPSAxMDAyMDAsCglHTFVfQ1VMTElORwkJPSAx MDAyMDEsCglHTFVfUEFSQU1FVFJJQ19UT0xFUkFOQ0U9IDEwMDIwMiwKCUdMVV9TQU1QTElOR19U T0xFUkFOQ0UJPSAxMDAyMDMsCglHTFVfRElTUExBWV9NT0RFCT0gMTAwMjA0LAoJR0xVX1NBTVBM SU5HX01FVEhPRAk9IDEwMDIwNSwKCUdMVV9VX1NURVAJCT0gMTAwMjA2LAoJR0xVX1ZfU1RFUAkJ PSAxMDAyMDcsCgoJR0xVX1BBVEhfTEVOR1RICQk9IDEwMDIxNSwKCUdMVV9QQVJBTUVUUklDX0VS Uk9SCT0gMTAwMjE2LAoJR0xVX0RPTUFJTl9ESVNUQU5DRQk9IDEwMDIxNywKCglHTFVfTUFQMV9U UklNXzIJCT0gMTAwMjEwLAoJR0xVX01BUDFfVFJJTV8zCQk9IDEwMDIxMSwKCglHTFVfT1VUTElO RV9QT0xZR09OCT0gMTAwMjQwLAoJR0xVX09VVExJTkVfUEFUQ0gJPSAxMDAyNDEsCgoJR0xVX05V UkJTX0VSUk9SMSAgPSAxMDAyNTEsICAgIAoJR0xVX05VUkJTX0VSUk9SMiAgPSAxMDAyNTIsICAg IAoJR0xVX05VUkJTX0VSUk9SMyAgPSAxMDAyNTMsICAgIAoJR0xVX05VUkJTX0VSUk9SNCAgPSAx MDAyNTQsICAgIAoJR0xVX05VUkJTX0VSUk9SNSAgPSAxMDAyNTUsICAgIAoJR0xVX05VUkJTX0VS Uk9SNiAgPSAxMDAyNTYsICAgIAoJR0xVX05VUkJTX0VSUk9SNyAgPSAxMDAyNTcsICAgIAoJR0xV X05VUkJTX0VSUk9SOCAgPSAxMDAyNTgsICAgIAoJR0xVX05VUkJTX0VSUk9SOSAgPSAxMDAyNTks ICAgIAoJR0xVX05VUkJTX0VSUk9SMTAgPSAxMDAyNjAsICAgIAoJR0xVX05VUkJTX0VSUk9SMTEg PSAxMDAyNjEsICAgIAoJR0xVX05VUkJTX0VSUk9SMTIgPSAxMDAyNjIsICAgIAoJR0xVX05VUkJT X0VSUk9SMTMgPSAxMDAyNjMsICAgIAoJR0xVX05VUkJTX0VSUk9SMTQgPSAxMDAyNjQsICAgIAoJ R0xVX05VUkJTX0VSUk9SMTUgPSAxMDAyNjUsICAgIAoJR0xVX05VUkJTX0VSUk9SMTYgPSAxMDAy NjYsICAgIAoJR0xVX05VUkJTX0VSUk9SMTcgPSAxMDAyNjcsICAgIAoJR0xVX05VUkJTX0VSUk9S MTggPSAxMDAyNjgsICAgIAoJR0xVX05VUkJTX0VSUk9SMTkgPSAxMDAyNjksICAgIAoJR0xVX05V UkJTX0VSUk9SMjAgPSAxMDAyNzAsICAgIAoJR0xVX05VUkJTX0VSUk9SMjEgPSAxMDAyNzEsICAg IAoJR0xVX05VUkJTX0VSUk9SMjIgPSAxMDAyNzIsICAgIAoJR0xVX05VUkJTX0VSUk9SMjMgPSAx MDAyNzMsICAgIAoJR0xVX05VUkJTX0VSUk9SMjQgPSAxMDAyNzQsICAgIAoJR0xVX05VUkJTX0VS Uk9SMjUgPSAxMDAyNzUsICAgIAoJR0xVX05VUkJTX0VSUk9SMjYgPSAxMDAyNzYsICAgIAoJR0xV X05VUkJTX0VSUk9SMjcgPSAxMDAyNzcsICAgIAoJR0xVX05VUkJTX0VSUk9SMjggPSAxMDAyNzgs ICAgIAoJR0xVX05VUkJTX0VSUk9SMjkgPSAxMDAyNzksICAgIAoJR0xVX05VUkJTX0VSUk9SMzAg PSAxMDAyODAsICAgIAoJR0xVX05VUkJTX0VSUk9SMzEgPSAxMDAyODEsICAgIAoJR0xVX05VUkJT X0VSUk9SMzIgPSAxMDAyODIsICAgIAoJR0xVX05VUkJTX0VSUk9SMzMgPSAxMDAyODMsICAgIAoJ R0xVX05VUkJTX0VSUk9SMzQgPSAxMDAyODQsICAgIAoJR0xVX05VUkJTX0VSUk9SMzUgPSAxMDAy ODUsICAgIAoJR0xVX05VUkJTX0VSUk9SMzYgPSAxMDAyODYsICAgIAoJR0xVX05VUkJTX0VSUk9S MzcgPSAxMDAyODcsICAgIAoKCSAKCUdMVV9JTlZBTElEX0VOVU0JCT0gMTAwOTAwLAoJR0xVX0lO VkFMSURfVkFMVUUJCT0gMTAwOTAxLAoJR0xVX09VVF9PRl9NRU1PUlkJCT0gMTAwOTAyLAoJR0xV X0lOQ09NUEFUSUJMRV9HTF9WRVJTSU9OCT0gMTAwOTAzLAoKCSAKCUdMVV9WRVJTSU9OCT0gMTAw ODAwLAoJR0xVX0VYVEVOU0lPTlMJPSAxMDA4MDEKfTsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgR0xV cXVhZHJpY09iaiBHTFVxdWFkcmljT2JqOwoKdHlwZWRlZiBzdHJ1Y3QgR0xVdHJpYW5ndWxhdG9y T2JqIEdMVXRyaWFuZ3VsYXRvck9iajsKCnR5cGVkZWYgc3RydWN0IEdMVW51cmJzT2JqIEdMVW51 cmJzT2JqOwoKCgoKCgoKCiAKCgoKCgpleHRlcm4gdm9pZCAgIGdsdUxvb2tBdCggR0xkb3VibGUg ZXlleCwgR0xkb3VibGUgZXlleSwgR0xkb3VibGUgZXlleiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHTGRvdWJsZSBjZW50ZXJ4LCBHTGRvdWJsZSBjZW50ZXJ5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIGNlbnRlcnosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0xkb3VibGUgdXB4LCBHTGRvdWJsZSB1cHksIEdMZG91YmxlIHVweiAp OwoKCmV4dGVybiB2b2lkICAgZ2x1T3J0aG8yRCggR0xkb3VibGUgbGVmdCwgR0xkb3VibGUgcmln aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIGJvdHRvbSwgR0xk b3VibGUgdG9wICk7CgoKZXh0ZXJuIHZvaWQgICBnbHVQZXJzcGVjdGl2ZSggR0xkb3VibGUgZm92 eSwgR0xkb3VibGUgYXNwZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0xkb3VibGUgek5lYXIsIEdMZG91YmxlIHpGYXIgKTsKCgpleHRlcm4gdm9pZCAgIGdsdVBpY2tN YXRyaXgoIEdMZG91YmxlIHgsIEdMZG91YmxlIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdMZG91YmxlIHdpZHRoLCBHTGRvdWJsZSBoZWlnaHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMaW50IHZpZXdwb3J0WzRdICk7CgpleHRlcm4g R0xpbnQgICBnbHVQcm9qZWN0KCBHTGRvdWJsZSBvYmp4LCBHTGRvdWJsZSBvYmp5LCBHTGRvdWJs ZSBvYmp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xkb3VibGUg bW9kZWxNYXRyaXhbMTZdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg R0xkb3VibGUgcHJvak1hdHJpeFsxNl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBHTGludCB2aWV3cG9ydFs0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdMZG91YmxlICp3aW54LCBHTGRvdWJsZSAqd2lueSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdMZG91YmxlICp3aW56ICk7CgpleHRlcm4gR0xpbnQgICBnbHVVblByb2pl Y3QoIEdMZG91YmxlIHdpbngsIEdMZG91YmxlIHdpbnksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdMZG91YmxlIHdpbnosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEdMZG91YmxlIG1vZGVsTWF0cml4WzE2XSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgR0xkb3VibGUgcHJvak1hdHJpeFsxNl0sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMaW50IHZpZXdwb3J0WzRdLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSAqb2JqeCwgR0xkb3VibGUg Km9ianksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91YmxlICpvYmp6 ICk7CgpleHRlcm4gY29uc3QgR0x1Ynl0ZSogICBnbHVFcnJvclN0cmluZyggR0xlbnVtIGVycm9y Q29kZSApOwoKCgogCgoKCgoKZXh0ZXJuIEdMaW50ICAgZ2x1U2NhbGVJbWFnZSggR0xlbnVtIGZv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHdpZHRoaW4s IEdMaW50IGhlaWdodGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl bnVtIHR5cGVpbiwgY29uc3Qgdm9pZCAqZGF0YWluLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0xpbnQgd2lkdGhvdXQsIEdMaW50IGhlaWdodG91dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlb3V0LCB2b2lkICpkYXRhb3V0ICk7 CgpleHRlcm4gR0xpbnQgICBnbHVCdWlsZDFETWlwbWFwcyggR0xlbnVtIHRhcmdldCwgR0xpbnQg Y29tcG9uZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu dCB3aWR0aCwgR0xlbnVtIGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSApOwoKZXh0ZXJuIEdMaW50ICAg Z2x1QnVpbGQyRE1pcG1hcHMoIEdMZW51bSB0YXJnZXQsIEdMaW50IGNvbXBvbmVudHMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgd2lkdGgsIEdMaW50IGhl aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBl LCBjb25zdCB2b2lkICpkYXRhICk7CgoKCiAKCgoKCgpleHRlcm4gR0xVcXVhZHJpY09iaiogICBn bHVOZXdRdWFkcmljKCB2b2lkICk7CgpleHRlcm4gdm9pZCAgIGdsdURlbGV0ZVF1YWRyaWMoIEdM VXF1YWRyaWNPYmogKnN0YXRlICk7CgpleHRlcm4gdm9pZCAgIGdsdVF1YWRyaWNEcmF3U3R5bGUo IEdMVXF1YWRyaWNPYmogKnF1YWRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdMZW51bSBkcmF3U3R5bGUgKTsKCmV4dGVybiB2b2lkICAgZ2x1UXVhZHJp Y09yaWVudGF0aW9uKCBHTFVxdWFkcmljT2JqICpxdWFkT2JqZWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBvcmllbnRhdGlvbiApOwoKZXh0ZXJu IHZvaWQgICBnbHVRdWFkcmljTm9ybWFscyggR0xVcXVhZHJpY09iaiAqcXVhZE9iamVjdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBub3JtYWxzICk7Cgpl eHRlcm4gdm9pZCAgIGdsdVF1YWRyaWNUZXh0dXJlKCBHTFVxdWFkcmljT2JqICpxdWFkT2JqZWN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuIHRleHR1 cmVDb29yZHMgKTsKCmV4dGVybiB2b2lkICAgZ2x1UXVhZHJpY0NhbGxiYWNrKCBHTFVxdWFkcmlj T2JqICpxb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51 bSB3aGljaCwgdm9pZCAoICAqZm4pKCkgKTsKCmV4dGVybiB2b2lkICAgZ2x1Q3lsaW5kZXIoIEdM VXF1YWRyaWNPYmogKnFvYmosC