<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>240517</bug_id>
          
          <creation_ts>2022-05-17 05:55:21 -0700</creation_ts>
          <short_desc>[GTK] AX: AtspiCollection is not implemented on the document</short_desc>
          <delta_ts>2022-06-28 02:54:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jbicha</cc>
    
    <cc>jcraig</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1869649</commentid>
    <comment_count>0</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2022-05-17 05:55:21 -0700</bug_when>
    <thetext>Steps to reproduce:
1. Launch Epiphany using WebKitGtk 2.36 (Gtk 3).
2. Launch Accerciser and examine the accessibility tree&apos;s implemented interfaces

Expected results: All objects in the accessibility tree claim to have implemented the collection interface

Actual results: All objects coming from Gtk in the accessibility tree claim to have implemented the collection interface. Any accessible which exposes &quot;WebKitGTK&quot; as the &quot;toolkit&quot; object attribute does not.

Impact: Orca&apos;s structural navigation commands (next/previous heading, next/previous form field, list of all headings, list of all form fields, etc., etc.) do not work. At the present time, there is silence (due to Orca not handling the unexpected not-implemented error). I&apos;m fixing that in Orca, but that just causes Orca to announce that there are no headings, form fields, etc., etc.

Given that distros are shipping WebKitGtk 2.36, it would be EXTREMELY appreciated if this can be seen as a critical bug fix to be addressed in 2.36.x.

Note that the collection interface is NOT an ATK thing. It&apos;s done entirely in AT-SPI2 so applications and toolkits get it &quot;for free.&quot; I&apos;m hoping it will be possible to implement support in WebKitGtk by simply using the default implementation rather than having to do the work from scratch.

Also note that while an AT *could* expect to use the collection interface on any accessible element, Orca only queries it on the accessible document. So as long as it&apos;s implemented there, I *think* Orca should be fine.

See:
* https://gitlab.gnome.org/GNOME/at-spi2-atk/-/blob/master/atk-adaptor/adaptors/collection-adaptor.c
* https://gitlab.gnome.org/GNOME/at-spi2-core/-/blob/master/atspi/atspi-collection.c</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869650</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-17 05:55:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/93419230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870909</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-20 19:38:35 -0700</bug_when>
    <thetext>(In reply to Joanmarie Diggs from comment #0)
&gt; Given that distros are shipping WebKitGtk 2.36, it would be EXTREMELY
&gt; appreciated if this can be seen as a critical bug fix to be addressed in
&gt; 2.36.x.

Hi Joanie! I understand this is not something you know how to easily fix? I&apos;m afraid that with Carlos Garcia out for a little while, you&apos;re the only WebKitGTK a11y expert remaining.

Since this is critical, I think we could probably switch 2.36 back to the old implementation, if you recommend doing so. The code was not deleted until after we branched. Of course, fixing only 2.36 would leave 2.38+ broken, so the problem will hit distros again pretty soon, but it would at least buy us time until Carlos Garcia returns. Adrian is planning to do a 2.36.3 release next week, so we should decide quickly whether to do this huge revert or not. I&apos;m certain Carlos would prefer that we investigate and fix things properly, but realistically, if we need it solved quick, switching back to ATK would be pragmatic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870929</commentid>
    <comment_count>3</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-05-21 05:13:01 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #2)
&gt; (In reply to Joanmarie Diggs from comment #0)
&gt; &gt; Given that distros are shipping WebKitGtk 2.36, it would be EXTREMELY
&gt; &gt; appreciated if this can be seen as a critical bug fix to be addressed in
&gt; &gt; 2.36.x.
&gt; 
&gt; Hi Joanie! I understand this is not something you know how to easily fix?
&gt; I&apos;m afraid that with Carlos Garcia out for a little while, you&apos;re the only
&gt; WebKitGTK a11y expert remaining.
&gt; 
&gt; Since this is critical, I think we could probably switch 2.36 back to the
&gt; old implementation, if you recommend doing so. The code was not deleted
&gt; until after we branched. Of course, fixing only 2.36 would leave 2.38+
&gt; broken, so the problem will hit distros again pretty soon, but it would at
&gt; least buy us time until Carlos Garcia returns. Adrian is planning to do a
&gt; 2.36.3 release next week, so we should decide quickly whether to do this
&gt; huge revert or not. I&apos;m certain Carlos would prefer that we investigate and
&gt; fix things properly, but realistically, if we need it solved quick,
&gt; switching back to ATK would be pragmatic.

I took a quick look at the GTK4 sources, and I do not see an implementation
of the Collection interface there. The new ATSPI implementation in WebKit
loosely follows its structure, so I *suppose* that&apos;s the reason why the
Collection interface was not implemented yet.

I tried Accerciser on a few GTK4 applications (Text Editor, Extensions,
GNOME Setting, Amberol) and indeed I cannot see the Collection interface
being implemented anywhere. Does Orca work with GTK4 applications at all
in this regard? 

(Also please bear with me, I am far from being an expert in a11y, but at
least I understand some bits these days due to helping out with reviewing
the new ATSPI implementation in WebKit =])</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870936</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-21 07:36:29 -0700</bug_when>
    <thetext>Ah, interesting. Thanks for looking, Adrian!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872932</commentid>
    <comment_count>5</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2022-05-31 04:10:18 -0700</bug_when>
    <thetext>At the present time, Orca only uses AtspiCollection for web content. Thus what GTK4 itself does -- or fails to do -- is irrelevant unless it impacts what gets exposed via WebKitGtk.

Regarding switching back to ATK temporarily.... &lt;insert shrug here&gt; I&apos;ve given the Orca users a heads up on the issue. And for web browsing, the reality is that Orca + Chromium and Gecko work better. (Something I hope to change in the not-to-distant future with all these fixes we&apos;re getting thanks to Carlos!)

I *think* that for things like email composition and reading in Evolution, things will be GoodEnough(tm) with the current state + some changes in Orca (which have and/or will be put into current stable and old stable).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878160</commentid>
    <comment_count>6</comment_count>
      <attachid>460476</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-06-24 04:05:53 -0700</bug_when>
    <thetext>Created attachment 460476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878167</commentid>
    <comment_count>7</comment_count>
      <attachid>460476</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-06-24 08:09:32 -0700</bug_when>
    <thetext>Comment on attachment 460476
Patch

Patch logic looks fine, but there are a couple of build issues introduced:

FAILED: bin/TestWebKitAPI/TestWebCore 
: &amp;&amp; /usr/bin/c++ -fdiagnostics-color=always -Wextra -Wall -pipe -Wno-odr -Wno-stringop-overread -Wno-stringop-overflow -Wno-nonnull -Wno-array-bounds -Wno-expansion-to-defined -Wno-noexcept-type -Wno-psabi -Wno-misleading-indentation -Wno-maybe-uninitialized -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wcast-align -Wno-tautological-compare  -fno-strict-aliasing -fno-exceptions -fno-rtti -O3 -DNDEBUG -fuse-ld=lld -Wl,--disable-new-dtags @CMakeFiles/TestWebCore.rsp -o bin/TestWebKitAPI/TestWebCore  &amp;&amp; :
ld.lld: error: undefined symbol: WebCore::AccessibilityObjectAtspi::s_collectionFunctions
&gt;&gt;&gt; referenced by UnifiedSource-aba958d6-5.cpp
&gt;&gt;&gt;               Source/WebCore/CMakeFiles/WebCore.dir/./__/__/WebCore/DerivedSources/unified-sources/UnifiedSource-aba958d6-5.cpp.o:(WebCore::AccessibilityObjectAtspi::registerObject() (.part.0))

and this:

In file included from /app/webkit/WebKitBuild/Release/WTF/Headers/wtf/Hasher.h:27,
                 from /app/webkit/Source/WebCore/platform/graphics/FloatPoint.h:31,
                 from /app/webkit/Source/WebCore/platform/graphics/FloatRect.h:29,
                 from /app/webkit/Source/WebCore/dom/ElementContext.h:29,
                 from /app/webkit/Source/WebCore/loader/FrameLoaderTypes.h:31,
                 from /app/webkit/Source/WebCore/loader/FrameLoaderClient.h:33,
                 from /app/webkit/Source/WebCore/accessibility/AccessibilityObjectInterface.h:30,
                 from /app/webkit/Source/WebCore/accessibility/AccessibilityObject.h:32,
                 from /app/webkit/Source/WebCore/accessibility/AccessibilityNodeObject.h:31,
                 from /app/webkit/Source/WebCore/accessibility/AccessibilityRenderObject.h:31,
                 from /app/webkit/Source/WebCore/accessibility/AccessibilityTree.h:32,
                 from /app/webkit/Source/WebCore/accessibility/AccessibilityTree.cpp:30,
                 from /app/webkit/WebKitBuild/Release/WebCore/DerivedSources/unified-sources/UnifiedSource-aba958d6-5.cpp:1:
/app/webkit/WebKitBuild/Release/WTF/Headers/wtf/URL.h:327:13: note: candidate: ‘bool WTF::operator==(const WTF::URL&amp;, const WTF::URL&amp;)’
  327 | inline bool operator==(const URL&amp; a, const URL&amp; b)
      |             ^~~~~~~~
/app/webkit/WebKitBuild/Release/WTF/Headers/wtf/URL.h:327:35: note:   no known conversion for argument 1 from ‘const WTF::String’ to ‘const WTF::URL&amp;’
  327 | inline bool operator==(const URL&amp; a, const URL&amp; b)
      |                        ~~~~~~~~~~~^
In file included from /app/webkit/WebKitBuild/Release/WebCore/DerivedSources/unified-sources/UnifiedSource-aba958d6-5.cpp:7:
/app/webkit/Source/WebCore/accessibility/atspi/AccessibilityObjectCollectionAtspi.cpp:156:23: error: no match for ‘operator==’ (operand types are ‘const WTF::String’ and ‘const char [11]’)


There has been some commits lately removing a few implicit constructors and
conversions between URL and String. Maybe you&apos;ll want to setup a to clone from
the GitHub repository now that it&apos;s the canonical source of truth (pun intended :)

Also I assume we&apos;ll want this backported to the 2.36.x release branch, so I will
be listing it there tentativaly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878457</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-06-27 01:48:39 -0700</bug_when>
    <thetext>Yes, I wrote this patch on the 2.36 branch, that&apos;s why it fails in trunk. I&apos;ll fix the issues and submit a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878464</commentid>
    <comment_count>9</comment_count>
      <attachid>460501</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-06-27 02:34:10 -0700</bug_when>
    <thetext>Created attachment 460501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878703</commentid>
    <comment_count>10</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-06-28 02:07:34 -0700</bug_when>
    <thetext>FWIW, I suppose the tag in the subject could be [ATSPI], but sometimes
we&apos;ve been using [GTK] or [WPE] for things that affect both ports anyway
so I&apos;m fine leaving it as-is 😉️</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878710</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-06-28 02:54:23 -0700</bug_when>
    <thetext>Committed 251906@main (9496bf12e02e): &lt;https://commits.webkit.org/251906@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 460501.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>460476</attachid>
            <date>2022-06-24 04:05:53 -0700</date>
            <delta_ts>2022-06-27 02:34:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-GTK-AX-AtspiCollection-is-not-implemented-on-the-doc.patch</filename>
            <type>text/plain</type>
            <size>41846</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">RnJvbSA3YWRkNWUwZTQ4NjRjY2IzYWYxM2U3ODI3NWVhYjAzZmVjYWFlY2Y2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYXJsb3MgR2FyY2lhIENhbXBvcyA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDI0IEp1biAyMDIyIDEzOjAwOjAxICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gW0dUS10gQVg6IEF0c3BpQ29sbGVjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhlIGRv
Y3VtZW50CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwNTE3CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9m
IENvbGxlY3Rpb24gaW50ZXJmYWNlLiBPbmx5IEdldE1hdGNoZXMKbWV0aG9kIGlzIGltcGxlbWVu
dGVkLCBzaW5jZSBpdCdzIHRoZSBvbmx5IG9uZSB1c2VkIGJ5IG9yY2EgKHRoZSBvbmx5CnVzZXIg
b2YgdGhlIGNvbGxlY3Rpb24gaW50ZXJmYWNlIHRvbykuCgpTb3VyY2UvV2ViQ29yZToKCiogU291
cmNlc0dUSy50eHQ6CiogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVt
cy5oOgoqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcDoK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW50ZXJmYWNlc0Zvck9iamVjdCk6
CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJlZ2lzdGVyT2JqZWN0KToKKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRlcmZhY2VzIGNvbnN0KToK
KiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oOgoqIGFjY2Vz
c2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdENvbGxlY3Rpb25BdHNwaS5jcHA6IEFk
ZGVkLgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hS
dWxlOjpDb2xsZWN0aW9uTWF0Y2hSdWxlKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hJbnRlcmZhY2VzKToKKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hTdGF0ZXMp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hSdWxl
OjptYXRjaFJvbGVzKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVj
dGlvbk1hdGNoUnVsZTo6bWF0Y2hBdHRyaWJ1dGVzKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2gpOgooV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjphZGRNYXRjaGVzSW5DYW5vbmljYWxPcmRlcik6CihXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om1hdGNoZXMpOgoqIGFjY2Vzc2liaWxpdHkvYXRz
cGkveG1sL0NvbGxlY3Rpb24ueG1sOgoKVG9vbHM6CiogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwOgoodGVzdENvbGxlY3Rpb25HZXRNYXRj
aGVzKToKKGJlZm9yZUFsbCk6Ci0tLQogU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgICAg
ICAgICAgICAgICAgIHwgICAxICsKIC4uLi9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5o
ICAgICAgICAgICB8ICAxOCArCiAuLi4vYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNw
cCAgICAgICAgfCAgIDYgKy0KIC4uLi9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCAg
ICAgICAgICB8ICAzNiArLQogLi4uL0FjY2Vzc2liaWxpdHlPYmplY3RDb2xsZWN0aW9uQXRzcGku
Y3BwICAgIHwgMzc3ICsrKysrKysrKysrKysrKysrKwogLi4uL2FjY2Vzc2liaWxpdHkvYXRzcGkv
eG1sL0NvbGxlY3Rpb24ueG1sICAgIHwgICA2ICstCiAuLi4vV2ViS2l0R3RrL1Rlc3RXZWJLaXRB
Y2Nlc3NpYmlsaXR5LmNwcCAgICAgfCAzMzcgKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFu
Z2VkLCA3NzYgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RD
b2xsZWN0aW9uQXRzcGkuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dU
Sy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCBjNzA0NDkxMmQzMTIu
LjVhMjU3N2M2YmJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTQyLDYgKzQyLDcgQEAgYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0QWN0aW9uQXRzcGkuY3BwCithY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RDb2xsZWN0aW9uQXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlP
YmplY3RDb21wb25lbnRBdHNwaS5jcHAKIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdERvY3VtZW50QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlPYmplY3RIeXBlcmxpbmtBdHNwaS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaAppbmRleCA4
YjUxOTY5N2EwYzEuLmEzYzBhYmEwMjNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaApAQCAt
Mjc2LDYgKzI3NiwyNCBAQCBlbnVtIFRleHRHcmFudWxhcml0eVR5cGUgewogICAgIFBhcmFncmFw
aEdyYW51bGFyaXR5CiB9OwogCitlbnVtIENvbGxlY3Rpb25NYXRjaFR5cGUgeworICAgIE1hdGNo
SW52YWxpZCwKKyAgICBNYXRjaEFsbCwKKyAgICBNYXRjaEFueSwKKyAgICBNYXRjaE5vbmUsCisg
ICAgTWF0Y2hFbXB0eQorfTsKKworZW51bSBDb2xsZWN0aW9uU29ydE9yZGVyIHsKKyAgICBTb3J0
T3JkZXJJbnZhbGlkLAorICAgIFNvcnRPcmRlckNhbm9uaWNhbCwKKyAgICBTb3J0T3JkZXJGbG93
LAorICAgIFNvcnRPcmRlclRhYiwKKyAgICBTb3J0T3JkZXJSZXZlcnNlQ2Fub25pY2FsLAorICAg
IFNvcnRPcmRlclJldmVyc2VGbG93LAorICAgIFNvcnRPcmRlclJldmVyc2VUYWIKK307CisKIH0g
Ly8gbmFtZXNwYWNlIEF0c3BpCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpLmNwcAppbmRleCBmODFhODg1OTg4ZDguLjliY2VjMDZiYTg4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcApAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgcm9sZUlzVGV4dFR5cGUoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkKIAogT3B0aW9uU2V0
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OmludGVyZmFjZXNGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiBjb3JlT2JqZWN0KQogewot
ICAgIE9wdGlvblNldDxJbnRlcmZhY2U+IGludGVyZmFjZXMgPSB7IEludGVyZmFjZTo6QWNjZXNz
aWJsZSwgSW50ZXJmYWNlOjpDb21wb25lbnQsIEludGVyZmFjZTo6QWN0aW9uIH07CisgICAgT3B0
aW9uU2V0PEludGVyZmFjZT4gaW50ZXJmYWNlcyA9IHsgSW50ZXJmYWNlOjpBY2Nlc3NpYmxlLCBJ
bnRlcmZhY2U6OkNvbXBvbmVudCwgSW50ZXJmYWNlOjpBY3Rpb24sIEludGVyZmFjZTo6Q29sbGVj
dGlvbiB9OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QuaXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgPyBjb3JlT2JqZWN0LnJlbmRlcmVyKCkgOiBudWxscHRy
OwogICAgIGlmIChjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpT
dGF0aWNUZXh0IHx8IGNvcmVPYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OkNvbG9yV2VsbCkKQEAgLTUwNiw2ICs1MDYsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6cmVnaXN0ZXJPYmplY3QoKQogICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0
X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtpdF90YWJsZV9pbnRlcmZhY2UpLCAmc190
YWJsZUZ1bmN0aW9ucyB9KTsKICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFj
ZTo6VGFibGVDZWxsKSkKICAgICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoeyBjb25zdF9jYXN0PEdE
QnVzSW50ZXJmYWNlSW5mbyo+KCZ3ZWJraXRfdGFibGVfY2VsbF9pbnRlcmZhY2UpLCAmc190YWJs
ZUNlbGxGdW5jdGlvbnMgfSk7CisgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZh
Y2U6OkNvbGxlY3Rpb24pKQorICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8
R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtpdF9jb2xsZWN0aW9uX2ludGVyZmFjZSksICZzX2Nv
bGxlY3Rpb25GdW5jdGlvbnMgfSk7CiAKICAgICBtX3BhdGggPSBBY2Nlc3NpYmlsaXR5QXRzcGk6
OnNpbmdsZXRvbigpLnJlZ2lzdGVyT2JqZWN0KCp0aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNjIsNiArMTE2NCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyKSBj
b25zdAogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInMiLCB3ZWJraXRf
dGFibGVfaW50ZXJmYWNlLm5hbWUpOwogICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50
ZXJmYWNlOjpUYWJsZUNlbGwpKQogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRl
ciwgInMiLCB3ZWJraXRfdGFibGVfY2VsbF9pbnRlcmZhY2UubmFtZSk7CisgICAgaWYgKG1faW50
ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkNvbGxlY3Rpb24pKQorICAgICAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInMiLCB3ZWJraXRfY29sbGVjdGlvbl9pbnRlcmZhY2Uu
bmFtZSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZXJpYWxpemUoR1Zh
cmlhbnRCdWlsZGVyKiBidWlsZGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKaW5k
ZXggMDdhNTc5MjUzYzU3Li40NjgwNjlhNTAwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGku
aApAQCAtNTUsNyArNTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEltYWdlID0gMSA8PCA4LAogICAg
ICAgICBTZWxlY3Rpb24gPSAxIDw8IDksCiAgICAgICAgIFRhYmxlID0gMSA8PCAxMCwKLSAgICAg
ICAgVGFibGVDZWxsID0gMSA8PCAxMQorICAgICAgICBUYWJsZUNlbGwgPSAxIDw8IDExLAorICAg
ICAgICBDb2xsZWN0aW9uID0gIDEgPDwgMTIKICAgICB9OwogICAgIGNvbnN0IE9wdGlvblNldDxJ
bnRlcmZhY2U+JiBpbnRlcmZhY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmZhY2VzOyB9CiAK
QEAgLTIyMyw2ICsyMjQsMzggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcm93RGVzY3JpcHRpb24o
dW5zaWduZWQpIGNvbnN0OwogICAgIFN0cmluZyBjb2x1bW5EZXNjcmlwdGlvbih1bnNpZ25lZCkg
Y29uc3Q7CiAKKyAgICBzdHJ1Y3QgQ29sbGVjdGlvbk1hdGNoUnVsZSB7CisgICAgICAgIENvbGxl
Y3Rpb25NYXRjaFJ1bGUoR1ZhcmlhbnQqKTsKKworICAgICAgICBib29sIG1hdGNoKEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSYpOworICAgICAgICBib29sIG1hdGNoSW50ZXJmYWNlcyhBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkmKTsKKyAgICAgICAgYm9vbCBtYXRjaFN0YXRlcyhBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmKTsKKyAgICAgICAgYm9vbCBtYXRjaFJvbGVzKEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSYpOworICAgICAgICBib29sIG1hdGNoQXR0cmlidXRlcyhBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkmKTsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDY0X3Qg
dmFsdWUgeyAwIH07CisgICAgICAgICAgICB1aW50MTZfdCB0eXBlIHsgMCB9OworICAgICAgICB9
IHN0YXRlczsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxTdHJpbmc+PiB2YWx1ZTsKKyAgICAgICAgICAgIHVpbnQxNl90IHR5cGUgeyAwIH07
CisgICAgICAgIH0gYXR0cmlidXRlczsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiB2YWx1ZTsKKyAgICAgICAgICAgIHVpbnQxNl90IHR5cGUgeyAwIH07
CisgICAgICAgIH0gcm9sZXM7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHZhbHVlOworICAgICAgICAgICAgdWludDE2X3QgdHlwZSB7IDAgfTsKKyAgICAg
ICAgfSBpbnRlcmZhY2VzOworICAgIH07CisgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk+PiBtYXRjaGVzKENvbGxlY3Rpb25NYXRjaFJ1bGUmLCB1aW50MzJfdCBzb3J0
T3JkZXIsIHVpbnQzMl90IG1heFJlc3VsdENvdW50LCBib29sIHRyYXZlcnNlKTsKKyAgICB2b2lk
IGFkZE1hdGNoZXNJbkNhbm9uaWNhbE9yZGVyKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpPj4mLCBDb2xsZWN0aW9uTWF0Y2hSdWxlJiwgdWludDMyX3QgbWF4UmVzdWx0Q291
bnQsIGJvb2wgdHJhdmVyc2UpOworCiAgICAgc3RhdGljIE9wdGlvblNldDxJbnRlcmZhY2U+IGlu
dGVyZmFjZXNGb3JPYmplY3QoQVhDb3JlT2JqZWN0Jik7CiAKICAgICBzdGF0aWMgR0RCdXNJbnRl
cmZhY2VWVGFibGUgc19hY2Nlc3NpYmxlRnVuY3Rpb25zOwpAQCAtMjM3LDYgKzI3MCw3IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfc2VsZWN0aW9uRnVuY3Rp
b25zOwogICAgIHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX3RhYmxlRnVuY3Rpb25zOwog
ICAgIHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX3RhYmxlQ2VsbEZ1bmN0aW9uczsKKyAg
ICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19jb2xsZWN0aW9uRnVuY3Rpb25zOwogCiAg
ICAgQVhDb3JlT2JqZWN0KiBtX2NvcmVPYmplY3QgeyBudWxscHRyIH07CiAgICAgT3B0aW9uU2V0
PEludGVyZmFjZT4gbV9pbnRlcmZhY2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29sbGVjdGlvbkF0c3BpLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdENv
bGxlY3Rpb25BdHNwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5hOWNiM2I2ZGFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb2xsZWN0aW9uQXRzcGkuY3BwCkBAIC0w
LDAgKzEsMzc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCIKKwor
I2lmIFVTRShBVFNQSSkKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGkuaCIKKyNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dE
QnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19jb2xsZWN0aW9u
RnVuY3Rpb25zID0geworICAgIC8vIG1ldGhvZF9jYWxsCisgICAgW10oR0RCdXNDb25uZWN0aW9u
KiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIq
IG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24q
IGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8gYXRzcGlPYmpl
Y3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4odXNlckRh
dGEpIH07CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAg
ICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0TWF0Y2hlcyIpKSB7CisgICAgICAg
ICAgICBHUmVmUHRyPEdWYXJpYW50PiBydWxlOworICAgICAgICAgICAgdWludDMyX3Qgc29ydHlC
eTsKKyAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgIGdib29sZWFuIHRyYXZlcnNl
OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKEAoYWlpYXtzc31pYWlp
YXNpYil1aWIpIiwgJnJ1bGUub3V0UHRyKCksICZzb3J0eUJ5LCAmY291bnQsICZ0cmF2ZXJzZSk7
CisgICAgICAgICAgICBpZiAoc29ydHlCeSA+IEF0c3BpOjpDb2xsZWN0aW9uU29ydE9yZGVyOjpT
b3J0T3JkZXJSZXZlcnNlVGFiKSB7CisgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl9lcnJvcihpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJP
Ul9JTlZBTElEX0FSR1MsICJOb3QgYSB2YWxpZCBzb3J0IG9yZGVyOiAldSIsIHNvcnR5QnkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbGxl
Y3Rpb25NYXRjaFJ1bGUgbWF0Y2hSdWxlKHJ1bGUuZ2V0KCkpOworICAgICAgICAgICAgR1Zhcmlh
bnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBF
KCJhKHNvKSIpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgd3JhcHBlciA6IGF0c3Bp
T2JqZWN0LT5tYXRjaGVzKG1hdGNoUnVsZSwgc29ydHlCeSwgc3RkOjptYXg8aW50PigwLCBjb3Vu
dCksIHRyYXZlcnNlKSkKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1
aWxkZXIsICJAKHNvKSIsIHdyYXBwZXItPnJlZmVyZW5jZSgpKTsKKyAgICAgICAgICAgIGdfZGJ1
c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25l
dygiKGEoc28pKSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMCht
ZXRob2ROYW1lLCAiR2V0TWF0Y2hlc1RvIikgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0
TWF0Y2hlc0Zyb20iKSB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBY3RpdmVEZXNjZW5k
YW50IikpCisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX2Vycm9y
X2xpdGVyYWwoaW52b2NhdGlvbiwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1JfTk9UX1NVUFBP
UlRFRCwgIiIpOworICAgIH0sCisgICAgLy8gZ2V0X3Byb3BlcnR5CisgICAgbnVsbHB0ciwKKyAg
ICAvLyBzZXRfcHJvcGVydHksCisgICAgbnVsbHB0ciwKKyAgICAvLyBwYWRkaW5nCisgICAgeyBu
dWxscHRyIH0KK307CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNo
UnVsZTo6Q29sbGVjdGlvbk1hdGNoUnVsZShHVmFyaWFudCogcnVsZSkKK3sKKyAgICBHVW5pcXVl
T3V0UHRyPEdWYXJpYW50SXRlcj4gc3RhdGVzSXRlcjsKKyAgICBpbnQgc3RhdGVzTWF0Y2hUeXBl
OworICAgIEdVbmlxdWVPdXRQdHI8R1ZhcmlhbnRJdGVyPiBhdHRyaWJ1dGVzSXRlcjsKKyAgICBp
bnQgYXR0cmlidXRlc01hdGNoVHlwZTsKKyAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4g
cm9sZXNJdGVyOworICAgIGludCByb2xlc01hdGNoVHlwZTsKKyAgICBHVW5pcXVlT3V0UHRyPEdW
YXJpYW50SXRlcj4gaW50ZXJmYWNlc0l0ZXI7CisgICAgaW50IGludGVyZmFjZXNNYXRjaFR5cGU7
CisgICAgZ2Jvb2xlYW4gaW52ZXJ0ZWQ7CisgICAgZ192YXJpYW50X2dldChydWxlLCAiKGFpaWF7
c3N9aWFpaWFzaWIpIiwgJnN0YXRlc0l0ZXIub3V0UHRyKCksICZzdGF0ZXNNYXRjaFR5cGUsICZh
dHRyaWJ1dGVzSXRlci5vdXRQdHIoKSwgJmF0dHJpYnV0ZXNNYXRjaFR5cGUsICZyb2xlc0l0ZXIu
b3V0UHRyKCksICZyb2xlc01hdGNoVHlwZSwgJmludGVyZmFjZXNJdGVyLm91dFB0cigpLCAmaW50
ZXJmYWNlc01hdGNoVHlwZSwgJmludmVydGVkKTsKKworICAgIGludCBzdGF0ZTsKKyAgICBpbnQg
aSA9IDA7CisgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX25leHQoc3RhdGVzSXRlci5nZXQoKSwg
ImkiLCAmc3RhdGUpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzI7ICsraikgewor
ICAgICAgICAgICAgaWYgKHN0YXRlICYgKDEgPDwgaikpCisgICAgICAgICAgICAgICAgc3RhdGVz
LnZhbHVlIHw9IEdfR1VJTlQ2NF9DT05TVEFOVCgxKSA8PCAoaSAqIDMyICsgaik7CisgICAgICAg
IH0KKyAgICAgICAgaSsrOworICAgIH0KKyAgICBzdGF0ZXMudHlwZSA9IHN0YXRlc01hdGNoVHlw
ZTsKKworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWU7CisgICAgY29uc3QgY2hhciogYXR0
cmlidXRlVmFsdWU7CisgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX25leHQoYXR0cmlidXRlc0l0
ZXIuZ2V0KCksICJ7JnMmc30iLCAmYXR0cmlidXRlTmFtZSwgJmF0dHJpYnV0ZVZhbHVlKSkgewor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGF0dHJpYnV0ZXMudmFsdWUuYWRkKFN0cmluZzo6ZnJv
bVVURjgoYXR0cmlidXRlTmFtZSksIFZlY3RvcjxTdHJpbmc+IHsgfSk7CisgICAgICAgIFN0cmlu
ZyB2YWx1ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRlVmFsdWUpOworICAgICAgICB1bnNp
Z25lZCBjdXJyZW50UG9zID0gMDsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAg
ICAgICBzaXplX3QgZW5kUG9zOworICAgICAgICB3aGlsZSAoKGVuZFBvcyA9IHZhbHVlLmZpbmQo
JzonLCBjdXJyZW50UG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
UG9zICE9IGVuZFBvcykgeworICAgICAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPSBlbmRQb3Mg
JiYgKChlbmRQb3MgJiYgdmFsdWVbZW5kUG9zIC0gMV0gIT0gJ1xcJykgfHwgKGVuZFBvcyA+IDEg
JiYgdmFsdWVbZW5kUG9zIC0gMl0gPT0gJ1xcJykpKSB7CisgICAgICAgICAgICAgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHZhbHVlLnN1YnN0cmluZyhzdGFydFBvcywg
ZW5kUG9zIC0gc3RhcnRQb3MpLnJlcGxhY2UoIlxcOiIsICI6IikucmVwbGFjZSgiXFxcXCIsICJc
XCIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRQb3MgPSBlbmRQ
b3MgKyAxOworICAgICAgICAgICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcykKKyAgICAgICAgICAg
ICAgICBzdGFydFBvcysrOworICAgICAgICB9CisgICAgICAgIGlmIChzdGFydFBvcyAhPSB2YWx1
ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KHZhbHVlLnN1YnN0cmluZyhzdGFydFBvcykucmVwbGFjZSgiXFw6IiwgIjoiKS5yZXBsYWNlKCJc
XFxcIiwgIlxcIikpOworICAgIH0KKyAgICBhdHRyaWJ1dGVzLnR5cGUgPSBhdHRyaWJ1dGVzTWF0
Y2hUeXBlOworCisgICAgaW50IHJvbGU7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKGdfdmFyaWFu
dF9pdGVyX25leHQocm9sZXNJdGVyLmdldCgpLCAiaSIsICZyb2xlKSkgeworICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IDMyOyArK2opIHsKKyAgICAgICAgICAgIGlmIChyb2xlICYgKDEgPDwg
aikpCisgICAgICAgICAgICAgICAgcm9sZXMudmFsdWUuYXBwZW5kKGkgKiAzMiArIGopOworICAg
ICAgICB9CisgICAgICAgIGkrKzsKKyAgICB9CisgICAgcm9sZXMudHlwZSA9IHJvbGVzTWF0Y2hU
eXBlOworCisgICAgY29uc3QgY2hhciogaW50ZXJmYWNlOworICAgIHdoaWxlIChnX3ZhcmlhbnRf
aXRlcl9uZXh0KGludGVyZmFjZXNJdGVyLmdldCgpLCAiJnMiLCAmaW50ZXJmYWNlKSkKKyAgICAg
ICAgaW50ZXJmYWNlcy52YWx1ZS5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChpbnRlcmZhY2UpKTsK
KyAgICBpbnRlcmZhY2VzLnR5cGUgPSBpbnRlcmZhY2VzTWF0Y2hUeXBlOworfQorCitib29sIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hJbnRlcmZh
Y2VzKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYgYXhPYmplY3QpCit7CisgICAgaWYgKGludGVy
ZmFjZXMudmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8g
bWF0Y2hJbnRlcmZhY2UgPSBbJl0oY29uc3QgU3RyaW5nJiBpbnRlcmZhY2UpIHsKKyAgICAgICAg
aWYgKGludGVyZmFjZSA9PSAiYWNjZXNzaWJsZSIpCisgICAgICAgICAgICByZXR1cm4gYXhPYmpl
Y3QuaW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6QWNjZXNzaWJsZSk7CisgICAgICAg
IGlmIChpbnRlcmZhY2UgPT0gImFjdGlvbiIpCisgICAgICAgICAgICByZXR1cm4gYXhPYmplY3Qu
aW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6QWN0aW9uKTsKKyAgICAgICAgaWYgKGlu
dGVyZmFjZSA9PSAiY29tcG9uZW50IikKKyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRl
cmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpDb21wb25lbnQpOworICAgICAgICBpZiAoaW50
ZXJmYWNlID09ICJ0ZXh0IikKKyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2Vz
KCkuY29udGFpbnMoSW50ZXJmYWNlOjpUZXh0KTsKKyAgICAgICAgaWYgKGludGVyZmFjZSA9PSAi
aHlwZXJ0ZXh0IikKKyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29u
dGFpbnMoSW50ZXJmYWNlOjpIeXBlcnRleHQpOworICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJo
eXBlcmxpbmsiKQorICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LmludGVyZmFjZXMoKS5jb250
YWlucyhJbnRlcmZhY2U6Okh5cGVybGluayk7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gImlt
YWdlIikKKyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMo
SW50ZXJmYWNlOjpJbWFnZSk7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gInNlbGVjdGlvbiIp
CisgICAgICAgICAgICByZXR1cm4gYXhPYmplY3QuaW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVy
ZmFjZTo6U2VsZWN0aW9uKTsKKyAgICAgICAgaWYgKGludGVyZmFjZSA9PSAidGFibGUiKQorICAg
ICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LmludGVyZmFjZXMoKS5jb250YWlucyhJbnRlcmZhY2U6
OlRhYmxlKTsKKyAgICAgICAgaWYgKGludGVyZmFjZSA9PSAidGFibGVjZWxsIikKKyAgICAgICAg
ICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpUYWJs
ZUNlbGwpOworICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJ2YWx1ZSIpCisgICAgICAgICAgICBy
ZXR1cm4gYXhPYmplY3QuaW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6VmFsdWUpOwor
ICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJkb2N1bWVudCIpCisgICAgICAgICAgICByZXR1cm4g
YXhPYmplY3QuaW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6RG9jdW1lbnQpOworICAg
ICAgICBpZiAoaW50ZXJmYWNlID09ICJjb2xsZWN0aW9uIikKKyAgICAgICAgICAgIHJldHVybiBh
eE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpDb2xsZWN0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBzd2l0Y2ggKGludGVyZmFjZXMudHlw
ZSkgeworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoSW52YWxpZDoK
KyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEVtcHR5OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0
Y2hBbGw6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJmYWNlIDogaW50ZXJmYWNlcy52
YWx1ZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaEludGVyZmFjZShpbnRlcmZhY2UpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoQW55OgorICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyZmFjZSA6IGludGVyZmFjZXMudmFsdWUpIHsKKyAg
ICAgICAgICAgIGlmIChtYXRjaEludGVyZmFjZShpbnRlcmZhY2UpKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNh
c2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoTm9uZToKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBpbnRlcmZhY2UgOiBpbnRlcmZhY2VzLnZhbHVlKSB7CisgICAgICAgICAgICBp
ZiAobWF0Y2hJbnRlcmZhY2UoaW50ZXJmYWNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpDb2xsZWN0aW9u
TWF0Y2hSdWxlOjptYXRjaFN0YXRlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF4T2JqZWN0
KQoreworICAgIGlmICghc3RhdGVzLnZhbHVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHN3aXRjaCAoc3RhdGVzLnR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hU
eXBlOjpNYXRjaEludmFsaWQ6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6
TWF0Y2hFbXB0eToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXRzcGk6OkNvbGxl
Y3Rpb25NYXRjaFR5cGU6Ok1hdGNoQWxsOgorICAgICAgICByZXR1cm4gKGF4T2JqZWN0LnN0YXRl
KCkgJiBzdGF0ZXMudmFsdWUpID09IHN0YXRlcy52YWx1ZTsKKyAgICBjYXNlIEF0c3BpOjpDb2xs
ZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEFueToKKyAgICAgICAgcmV0dXJuICEhKGF4T2JqZWN0LnN0
YXRlKCkgJiBzdGF0ZXMudmFsdWUpOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5
cGU6Ok1hdGNoTm9uZToKKyAgICAgICAgcmV0dXJuICEoYXhPYmplY3Quc3RhdGUoKSAmIHN0YXRl
cy52YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hSb2xlcyhBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkmIGF4T2JqZWN0KQoreworICAgIGlmIChyb2xlcy52YWx1ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoIChyb2xlcy50eXBlKSB7
CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0Y2hJbnZhbGlkOgorICAg
IGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoRW1wdHk6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEFs
bDoKKyAgICAgICAgaWYgKHJvbGVzLnZhbHVlLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiByb2xlcy52YWx1ZVswXSA9PSBheE9iamVjdC5y
b2xlKCk7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0Y2hBbnk6Cisg
ICAgICAgIGZvciAoYXV0byByb2xlIDogcm9sZXMudmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChy
b2xlID09IGF4T2JqZWN0LnJvbGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0
aW9uTWF0Y2hUeXBlOjpNYXRjaE5vbmU6CisgICAgICAgIGZvciAoYXV0byByb2xlIDogcm9sZXMu
dmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChyb2xlID09IGF4T2JqZWN0LnJvbGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hSdWxlOjptYXRjaEF0dHJpYnV0ZXMoQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpJiBheE9iamVjdCkKK3sKKyAgICBpZiAoYXR0cmlidXRlcy52YWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoIChhdHRyaWJ1dGVz
LnR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEludmFs
aWQ6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0Y2hFbXB0eToKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6
Ok1hdGNoQWxsOiB7CisgICAgICAgIGF1dG8gYXhBdHRyaWJ1dGVzID0gYXhPYmplY3QuYXR0cmli
dXRlcygpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRlcy52YWx1ZSkg
eworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGF4QXR0cmlidXRlcy5nZXQoaXQua2V5KTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgIGlmIChpdC52YWx1ZS5pc0VtcHR5KCkgfHwgaXQudmFsdWUuc2l6
ZSgpID4gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlm
ICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShpdC52YWx1ZVswXSwgdmFsdWUpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEFueTogewor
ICAgICAgICBhdXRvIGF4QXR0cmlidXRlcyA9IGF4T2JqZWN0LmF0dHJpYnV0ZXMoKTsKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMudmFsdWUpIHsKKyAgICAgICAgICAg
IGF1dG8gdmFsdWUgPSBheEF0dHJpYnV0ZXMuZ2V0KGl0LmtleSk7CisgICAgICAgICAgICBpZiAo
dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBpdC52YWx1ZS5maW5kSWYoWyZ2YWx1ZV0oYXV0byYgaXRlbSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGl0ZW0sIHZhbHVlKTsK
KyAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOworICAgICAgICAgICAgaWYgKGZvdW5kKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNo
Tm9uZTogeworICAgICAgICBhdXRvIGF4QXR0cmlidXRlcyA9IGF4T2JqZWN0LmF0dHJpYnV0ZXMo
KTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMudmFsdWUpIHsKKyAg
ICAgICAgICAgIGF1dG8gdmFsdWUgPSBheEF0dHJpYnV0ZXMuZ2V0KGl0LmtleSk7CisgICAgICAg
ICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBpdC52YWx1ZS5maW5kSWYoWyZ2YWx1ZV0oYXV0byYgaXRl
bSkgeworICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGl0ZW0s
IHZhbHVlKTsKKyAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOworICAgICAgICAgICAgaWYgKGZv
dW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hSdWxlOjptYXRjaChB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF4T2JqZWN0KQoreworICAgIGlmICghbWF0Y2hJbnRl
cmZhY2VzKGF4T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtYXRj
aFN0YXRlcyhheE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbWF0
Y2hSb2xlcyhheE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbWF0
Y2hBdHRyaWJ1dGVzKGF4T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphZGRNYXRjaGVz
SW5DYW5vbmljYWxPcmRlcihWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+
JiBtYXRjaExpc3QsIENvbGxlY3Rpb25NYXRjaFJ1bGUmIHJ1bGUsIHVpbnQzMl90IG1heFJlc3Vs
dENvdW50LCBib29sIHRyYXZlcnNlKQoreworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gbV9j
b3JlT2JqZWN0LT5jaGlsZHJlbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikg
eworICAgICAgICBhdXRvKiB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKTsKKyAgICAgICAgaWYg
KCF3cmFwcGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJ1bGUubWF0
Y2goKndyYXBwZXIpKSB7CisgICAgICAgICAgICBtYXRjaExpc3QuYXBwZW5kKHdyYXBwZXIpOwor
ICAgICAgICAgICAgaWYgKG1heFJlc3VsdENvdW50ICYmIG1hdGNoTGlzdC5zaXplKCkgPj0gbWF4
UmVzdWx0Q291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHRyYXZlcnNlKSB7CisgICAgICAgICAgICB3cmFwcGVyLT5hZGRNYXRjaGVzSW5DYW5v
bmljYWxPcmRlcihtYXRjaExpc3QsIHJ1bGUsIG1heFJlc3VsdENvdW50LCB0cmF2ZXJzZSk7Cisg
ICAgICAgICAgICBpZiAobWF4UmVzdWx0Q291bnQgJiYgbWF0Y2hMaXN0LnNpemUoKSA+PSBtYXhS
ZXN1bHRDb3VudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1ZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4gQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjptYXRjaGVzKENvbGxlY3Rpb25NYXRjaFJ1bGUmIHJ1bGUsIHVpbnQzMl90
IHNvcnRPcmRlciwgdWludDMyX3QgbWF4UmVzdWx0Q291bnQsIGJvb2wgdHJhdmVyc2UpCit7Cisg
ICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IG1hdGNoTGlzdDsKKworICAgIHN3aXRj
aCAoc29ydE9yZGVyKSB7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvblNvcnRPcmRlcjo6U29y
dE9yZGVySW52YWxpZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlv
blNvcnRPcmRlcjo6U29ydE9yZGVyQ2Fub25pY2FsOgorICAgICAgICBhZGRNYXRjaGVzSW5DYW5v
bmljYWxPcmRlcihtYXRjaExpc3QsIHJ1bGUsIG1heFJlc3VsdENvdW50LCB0cmF2ZXJzZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25Tb3J0T3JkZXI6OlNvcnRP
cmRlclJldmVyc2VDYW5vbmljYWw6CisgICAgICAgIGFkZE1hdGNoZXNJbkNhbm9uaWNhbE9yZGVy
KG1hdGNoTGlzdCwgcnVsZSwgbWF4UmVzdWx0Q291bnQsIHRyYXZlcnNlKTsKKyAgICAgICAgbWF0
Y2hMaXN0LnJldmVyc2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVj
dGlvblNvcnRPcmRlcjo6U29ydE9yZGVyRmxvdzoKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9u
U29ydE9yZGVyOjpTb3J0T3JkZXJUYWI6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvblNvcnRP
cmRlcjo6U29ydE9yZGVyUmV2ZXJzZUZsb3c6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvblNv
cnRPcmRlcjo6U29ydE9yZGVyUmV2ZXJzZVRhYjoKKyAgICAgICAgZ193YXJuaW5nKCJBdHNwaSBj
b2xsZWN0aW9uIHNvcnQgbWV0aG9kICV1IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCBzb3J0T3JkZXIp
OworICAgICAgICBicmVhazsKKworICAgIH0KKworICAgIHJldHVybiBtYXRjaExpc3Q7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBVFNQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24ueG1s
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS94bWwvQ29sbGVjdGlvbi54bWwK
aW5kZXggYTZkZmY3NGFmZDY5Li45MTNlYmNiODJjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24ueG1sCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24ueG1sCkBAIC0zLDcgKzMs
NyBAQAogPGludGVyZmFjZSBuYW1lPSJvcmcuYTExeS5hdHNwaS5Db2xsZWN0aW9uIj4KIAogICA8
bWV0aG9kIG5hbWU9IkdldE1hdGNoZXMiPgotICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0i
cnVsZSIgdHlwZT0iKGF1dWFzdWF1dXN1YikiLz4KKyAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5h
bWU9InJ1bGUiIHR5cGU9IihhaWlhe3NzfWlhaWlhc2liKSIvPgogICAgIDxhbm5vdGF0aW9uIG5h
bWU9Im9yZy5xdHByb2plY3QuUXREQnVzLlF0VHlwZU5hbWUuSW4wIiB2YWx1ZT0iUVNwaU1hdGNo
UnVsZSIvPgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0ic29ydGJ5IiB0eXBlPSJ1Ii8+
CiAgICAgPGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJjb3VudCIgdHlwZT0iaSIvPgpAQCAtMTUs
NyArMTUsNyBAQAogICA8bWV0aG9kIG5hbWU9IkdldE1hdGNoZXNUbyI+CiAgICAgPGFyZyBkaXJl
Y3Rpb249ImluIiBuYW1lPSJjdXJyZW50X29iamVjdCIgdHlwZT0ibyIvPgogICAgIDxhbm5vdGF0
aW9uIG5hbWU9Im9yZy5xdHByb2plY3QuUXREQnVzLlF0VHlwZU5hbWUuSW4wIiB2YWx1ZT0iUVNw
aU9iamVjdFJlZmVyZW5jZSIvPgotICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0icnVsZSIg
dHlwZT0iKGF1dWFzdWF1dXN1YikiLz4KKyAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9InJ1
bGUiIHR5cGU9IihhaWlhe3NzfWlhaWlhc2liKSIvPgogICAgIDxhbm5vdGF0aW9uIG5hbWU9Im9y
Zy5xdHByb2plY3QuUXREQnVzLlF0VHlwZU5hbWUuSW4xIiB2YWx1ZT0iUVNwaU1hdGNoUnVsZSIv
PgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0ic29ydGJ5IiB0eXBlPSJ1Ii8+CiAgICAg
PGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJ0cmVlIiB0eXBlPSJ1Ii8+CkBAIC0yOSw3ICsyOSw3
IEBACiAgIDxtZXRob2QgbmFtZT0iR2V0TWF0Y2hlc0Zyb20iPgogICAgIDxhcmcgZGlyZWN0aW9u
PSJpbiIgbmFtZT0iY3VycmVudF9vYmplY3QiIHR5cGU9Im8iLz4KICAgICA8YW5ub3RhdGlvbiBu
YW1lPSJvcmcucXRwcm9qZWN0LlF0REJ1cy5RdFR5cGVOYW1lLkluMCIgdmFsdWU9IlFTcGlPYmpl
Y3RSZWZlcmVuY2UiLz4KLSAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9InJ1bGUiIHR5cGU9
IihhdXVhc3VhdXVzdWIpIi8+CisgICAgPGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJydWxlIiB0
eXBlPSIoYWlpYXtzc31pYWlpYXNpYikiLz4KICAgICA8YW5ub3RhdGlvbiBuYW1lPSJvcmcucXRw
cm9qZWN0LlF0REJ1cy5RdFR5cGVOYW1lLkluMSIgdmFsdWU9IlFTcGlNYXRjaFJ1bGUiLz4KICAg
ICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9InNvcnRieSIgdHlwZT0idSIvPgogICAgIDxhcmcg
ZGlyZWN0aW9uPSJpbiIgbmFtZT0idHJlZSIgdHlwZT0idSIvPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2li
aWxpdHkuY3BwCmluZGV4IDRiMmI1YzFhZjhhNS4uNTMxNWY2MWFjNmVkIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0
eS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0zMjQxLDYgKzMyNDEsMzQyIEBAIHN0YXRpYyB2b2lkIHRl
c3RUYWJsZUJhc2ljKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogI2Vu
ZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RDb2xsZWN0aW9uR2V0TWF0Y2hlcyhBY2Nlc3NpYmls
aXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3co
ODAwLCA2MDApOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAg
ICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPGgxPkNvbGxlY3Rpb248L2gxPiIKKyAgICAgICAg
IiAgICA8cD5UaGlzIGlzIDxhIGhyZWY9JyMnPmxpbmsxPC9hPiBhbmQgPGEgaHJlZj0nIyc+bGlu
azI8L2E+IGluIHBhcmFncmFwaDwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8
L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7
CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsK
KworICAgIGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2Vi
LmdldCgpKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19DT0xMRUNUSU9OKGRvY3VtZW50
V2ViLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDIpOworCisgICAgYXV0
byBoMSA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1
bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNf
QUNDRVNTSUJMRShoMS5nZXQoKSkpOworCisgICAgYXV0byBwID0gYWRvcHRHUmVmKGF0c3BpX2Fj
Y2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAxLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHAuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQocC5nZXQo
KSwgbnVsbHB0ciksID09LCAyKTsKKworICAgIGF1dG8gbGluazEgPSBhZG9wdEdSZWYoYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgocC5nZXQoKSwgMCwgbnVsbHB0cikpOworICAg
IGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShsaW5rMS5nZXQoKSkpOworICAgIEdV
bmlxdWVQdHI8Y2hhcj4gdGV4dChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQobGluazEu
Z2V0KCkpLCAwLCAtMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LmdldCgp
LCA9PSwgImxpbmsxIik7CisKKyAgICBhdXRvIGxpbmsyID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vz
c2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHAuZ2V0KCksIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fz
c2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUobGluazIuZ2V0KCkpKTsKKyAgICB0ZXh0LnJl
c2V0KGF0c3BpX3RleHRfZ2V0X3RleHQoQVRTUElfVEVYVChsaW5rMi5nZXQoKSksIDAsIC0xLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAibGluazIiKTsK
KworICAgIC8vIEEgc2ltcGxlIHJ1bGUgYmFzZWQgb24gcm9sZXMuCisgICAgR0FycmF5KiByb2xl
cyA9IGdfYXJyYXlfc2l6ZWRfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKGludCksIDEpOworICAg
IGludCBsaW5rUm9sZSA9IEFUU1BJX1JPTEVfTElOSzsKKyAgICBnX2FycmF5X3ByZXBlbmRfdmFs
KHJvbGVzLCBsaW5rUm9sZSk7CisgICAgR1JlZlB0cjxBdHNwaU1hdGNoUnVsZT4gcnVsZSA9IGFk
b3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29s
bGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01B
VENIX05PTkUsCisgICAgICAgIHJvbGVzLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX0FMTCwKKyAg
ICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBGQUxT
RSkpOworICAgIGdfYXJyYXlfZnJlZShyb2xlcywgVFJVRSk7CisgICAgR0FycmF5KiBtYXRjaGVz
ID0gYXRzcGlfY29sbGVjdGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKGRvY3VtZW50
V2ViLmdldCgpKSwgcnVsZS5nZXQoKSwgQVRTUElfQ29sbGVjdGlvbl9TT1JUX09SREVSX0NBTk9O
SUNBTCwgMCwgVFJVRSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChtYXRjaGVzKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KG1hdGNoZXMtPmxlbiwgPT0sIDIpOworICAgIGdfYXNzZXJ0
X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAwKSA9PSBsaW5r
MS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3Bp
QWNjZXNzaWJsZSosIDEpID09IGxpbmsyLmdldCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hl
cywgVFJVRSk7CisKKyAgICAvLyBSZXZlcnNlIG9yZGVyLgorICAgIG1hdGNoZXMgPSBhdHNwaV9j
b2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkp
LCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfUkVWRVJTRV9DQU5PTklD
QUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7Cisg
ICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAyKTsKKyAgICBnX2Fzc2VydF90
cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0gbGluazIu
Z2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFj
Y2Vzc2libGUqLCAxKSA9PSBsaW5rMS5nZXQoKSk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMs
IFRSVUUpOworCisgICAgLy8gTGltaXQgcmVzdWx0cyB0byAxLgorICAgIG1hdGNoZXMgPSBhdHNw
aV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0
KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAx
LCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShn
X2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGxpbmsxLmdldCgp
KTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICAvLyBEb24ndCB0cmF2
ZXJzZS4KKyAgICBtYXRjaGVzID0gYXRzcGlfY29sbGVjdGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9D
T0xMRUNUSU9OKGRvY3VtZW50V2ViLmdldCgpKSwgcnVsZS5nZXQoKSwgQVRTUElfQ29sbGVjdGlv
bl9TT1JUX09SREVSX0NBTk9OSUNBTCwgMCwgRkFMU0UsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0
X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09
LCAwKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICBtYXRjaGVzID0g
YXRzcGlfY29sbGVjdGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKHAuZ2V0KCkpLCBy
dWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBGQUxT
RSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChtYXRjaGVzKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KG1hdGNoZXMtPmxlbiwgPT0sIDIpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJh
eV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAwKSA9PSBsaW5rMS5nZXQoKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSos
IDEpID09IGxpbmsyLmdldCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisK
KyAgICAvLyBSdWxlIHRvIG1hdGNoIGFsbCBpbnRlcmZhY2VzLgorICAgIEdBcnJheSogaW50ZXJm
YWNlcyA9IGdfYXJyYXlfc2l6ZWRfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKGNoYXIqKSwgMyk7
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGxpbmtJbnRlcmZhY2UgPSAiaHlwZXJsaW5rIjsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogdGV4dEludGVyZmFjZSA9ICJ0ZXh0IjsKKyAgICBnX2FycmF5
X2FwcGVuZF92YWwoaW50ZXJmYWNlcywgbGlua0ludGVyZmFjZSk7CisgICAgZ19hcnJheV9hcHBl
bmRfdmFsKGludGVyZmFjZXMsIHRleHRJbnRlcmZhY2UpOworICAgIHJ1bGUgPSBhZG9wdEdSZWYo
YXRzcGlfbWF0Y2hfcnVsZV9uZXcoCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25f
TUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05F
LAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAg
IGludGVyZmFjZXMsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAgICAgICBGQUxTRSkp
OworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExF
Q1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NP
UlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25u
dWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMik7
CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJs
ZSosIDApID09IGxpbmsxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgo
bWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJy
YXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKworICAgIC8vIEFkZGluZyB0YWJsZSBpbnRlcmZhY2Ug
dG8gbWFrZSB0aGUgbWF0Y2ggZmFpbC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGFibGVJbnRl
cmZhY2UgPSAidGFibGUiOworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbChpbnRlcmZhY2VzLCB0YWJs
ZUludGVyZmFjZSk7CisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygK
KyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBu
dWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFU
U1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgaW50ZXJmYWNlcywgQVRTUElfQ29s
bGVjdGlvbl9NQVRDSF9BTEwsCisgICAgICAgIEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3Bp
X2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQo
KSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAs
IFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19h
c3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAwKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0
Y2hlcywgVFJVRSk7CisKKyAgICAvLyBSdWxlIHRvIG1hdGNoIGFueSBvZiB0aGUgaW50ZXJmYWNl
cy4KKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorCW51bGxwdHIs
IEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29s
bGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01B
VENIX05PTkUsCisgICAgICAgIGludGVyZmFjZXMsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQU5Z
LAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9t
YXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBB
VFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsK
KyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0
Y2hlcy0+bGVuLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNo
ZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGgxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVl
KGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gcC5nZXQoKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJs
ZSosIDIpID09IGxpbmsxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgo
bWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMykgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJy
YXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggbm9uZSBvZiB0
aGUgaW50ZXJmYWNlcy4KKyAgICBnX2FycmF5X3JlbW92ZV9yYW5nZShpbnRlcmZhY2VzLCAxLCAy
KTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBu
dWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFU
U1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVj
dGlvbl9NQVRDSF9OT05FLAorICAgICAgICBpbnRlcmZhY2VzLCBBVFNQSV9Db2xsZWN0aW9uX01B
VENIX05PTkUsCisgICAgICAgIEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rp
b25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUu
Z2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51
bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21w
dWludChtYXRjaGVzLT5sZW4sID09LCAyKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5k
ZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0gaDEuZ2V0KCkpOworICAgIGdfYXNz
ZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9PSBw
LmdldCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisgICAgZ19hcnJheV9m
cmVlKGludGVyZmFjZXMsIFRSVUUpOworCisgICAgLy8gUnVsZSB0byBtYXRjaCBhbGwgc3RhdGVz
LgorICAgIEdSZWZQdHI8QXRzcGlTdGF0ZVNldD4gc2V0ID0gYWRvcHRHUmVmKGF0c3BpX3N0YXRl
X3NldF9uZXcobnVsbHB0cikpOworICAgIGF0c3BpX3N0YXRlX3NldF9hZGQoc2V0LmdldCgpLCBB
VFNQSV9TVEFURV9TSE9XSU5HKTsKKyAgICBhdHNwaV9zdGF0ZV9zZXRfYWRkKHNldC5nZXQoKSwg
QVRTUElfU1RBVEVfRk9DVVNBQkxFKTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNo
X3J1bGVfbmV3KAorICAgICAgICBzZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxM
LAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAg
IG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwg
QVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNo
ZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1l
bnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FO
T05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMp
OworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMik7CisgICAgZ19hc3Nl
cnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGxp
bmsxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRz
cGlBY2Nlc3NpYmxlKiwgMSkgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRj
aGVzLCBUUlVFKTsKKworICAgIC8vIEFkZGluZyBjaGVja2FibGUgc3RhdGUgdG8gbWFrZSB0aGUg
bWF0Y2ggZmFpbC4KKyAgICBhdHNwaV9zdGF0ZV9zZXRfYWRkKHNldC5nZXQoKSwgQVRTUElfU1RB
VEVfQ0hFQ0tBQkxFKTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3
KAorICAgICAgICBzZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAgICAg
ICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIs
IEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29s
bGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNw
aV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0
KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAw
LCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdf
YXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMCk7CisgICAgZ19hcnJheV9mcmVlKG1h
dGNoZXMsIFRSVUUpOworCisgICAgLy8gUnVsZSB0byBtYXRjaCBhbnkgb2YgdGhlIHN0YXRlcy4K
KyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBzZXQu
Z2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQU5ZLAorICAgICAgICBudWxscHRyLCBBVFNQ
SV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rp
b25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9O
T05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dl
dF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgp
LCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRy
KTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
bWF0Y2hlcy0+bGVuLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1h
dGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGgxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90
cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gcC5nZXQo
KSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNz
aWJsZSosIDIpID09IGxpbmsxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5k
ZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMykgPT0gbGluazIuZ2V0KCkpOworICAgIGdf
YXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggbm9uZSBv
ZiB0aGUgc3RhdGVzLgorICAgIGF0c3BpX3N0YXRlX3NldF9yZW1vdmUoc2V0LmdldCgpLCBBVFNQ
SV9TVEFURV9DSEVDS0FCTEUpOworICAgIGF0c3BpX3N0YXRlX3NldF9yZW1vdmUoc2V0LmdldCgp
LCBBVFNQSV9TVEFURV9TSE9XSU5HKTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNo
X3J1bGVfbmV3KAorICAgICAgICBzZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9O
RSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAg
ICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIs
IEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgRkFMU0UpKTsKKyAgICBtYXRj
aGVzID0gYXRzcGlfY29sbGVjdGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKGRvY3Vt
ZW50V2ViLmdldCgpKSwgcnVsZS5nZXQoKSwgQVRTUElfQ29sbGVjdGlvbl9TT1JUX09SREVSX0NB
Tk9OSUNBTCwgMCwgVFJVRSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChtYXRjaGVz
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KG1hdGNoZXMtPmxlbiwgPT0sIDIpOworICAgIGdfYXNz
ZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAwKSA9PSBo
MS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3Bp
QWNjZXNzaWJsZSosIDEpID09IHAuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBU
UlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggYWxsIHJvbGVzLgorICAgIHJvbGVzID0gZ19h
cnJheV9zaXplZF9uZXcoRkFMU0UsIEZBTFNFLCBzaXplb2YoaW50KSwgMik7CisgICAgaW50IGhl
YWRpbmdSb2xlID0gQVRTUElfUk9MRV9IRUFESU5HOworICAgIGdfYXJyYXlfcHJlcGVuZF92YWwo
cm9sZXMsIGxpbmtSb2xlKTsKKyAgICBnX2FycmF5X3ByZXBlbmRfdmFsKHJvbGVzLCBoZWFkaW5n
Um9sZSk7CisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAgICAg
ICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRy
LCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIHJvbGVzLCBBVFNQSV9Db2xs
ZWN0aW9uX01BVENIX0FMTCwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRD
SF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9u
X2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdl
dCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxs
cHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIC8vIE5vIG1hdGNoZXMg
d2hlbiBtb3JlIHRoYW4gb25lIHJvbGUgaXMgZ2l2ZW4gZm9yIE1BVENIX0FMTC4KKyAgICBnX2Fz
c2VydF9jbXB1aW50KG1hdGNoZXMtPmxlbiwgPT0sIDApOworICAgIGdfYXJyYXlfZnJlZShtYXRj
aGVzLCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggYW55IG9mIHRoZSByb2xlcy4KKyAg
ICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBudWxscHRy
LCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0Nv
bGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgcm9sZXMsIEFUU1BJX0NvbGxlY3Rpb25fTUFU
Q0hfQU5ZLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisg
ICAgICAgIEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNo
ZXMoQVRTUElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJ
X0NvbGxlY3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAg
IGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVz
LT5sZW4sID09LCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywg
QXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0gaDEuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19h
cnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9PSBsaW5rMS5nZXQoKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJs
ZSosIDIpID09IGxpbmsyLmdldCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7
CisKKyAgICAvLyBSdWxlIHRvIG1hdGNoIG5vbmUgb2YgdGhlIHJvbGVzLgorICAgIHJ1bGUgPSBh
ZG9wdEdSZWYoYXRzcGlfbWF0Y2hfcnVsZV9uZXcoCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0Nv
bGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9N
QVRDSF9OT05FLAorICAgICAgICByb2xlcywgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAor
ICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIEZB
TFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElf
Q09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rp
b25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0
X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09
LCAxKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nl
c3NpYmxlKiwgMCkgPT0gcC5nZXQoKSk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUp
OworCisgICAgZ19hcnJheV9mcmVlKHJvbGVzLCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0
Y2ggYWxsIGF0dHJpYnV0ZXMuCisgICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0g
YWRvcHRHUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwg
Z19mcmVlLCBnX2ZyZWUpKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGF0dHJpYnV0ZXMuZ2V0
KCksIGdfc3RyZHVwKCJ0YWciKSwgZ19zdHJkdXAoImEiKSk7CisgICAgcnVsZSA9IGFkb3B0R1Jl
ZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlv
bl9NQVRDSF9OT05FLAorICAgICAgICBhdHRyaWJ1dGVzLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9u
X01BVENIX0FMTCwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05F
LAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAg
IEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRT
UElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxl
Y3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNz
ZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4s
ID09LCAyKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlB
Y2Nlc3NpYmxlKiwgMCkgPT0gbGluazEuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJh
eV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9PSBsaW5rMi5nZXQoKSk7Cisg
ICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUpOworCisgICAgLy8gQWRkaW5nIGxldmVsIGF0
dHJpYnV0ZSB0byBtYWtlIHRoZSBtYXRjaCBmYWlsLgorICAgIGdfaGFzaF90YWJsZV9pbnNlcnQo
YXR0cmlidXRlcy5nZXQoKSwgZ19zdHJkdXAoImxldmVsIiksIGdfc3RyZHVwKCIxIikpOworICAg
IHJ1bGUgPSBhZG9wdEdSZWYoYXRzcGlfbWF0Y2hfcnVsZV9uZXcoCisgICAgICAgIG51bGxwdHIs
IEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgYXR0cmlidXRlcy5nZXQoKSwg
QVRTUElfQ29sbGVjdGlvbl9NQVRDSF9BTEwsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxl
Y3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRD
SF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9u
X2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdl
dCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxs
cHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVp
bnQobWF0Y2hlcy0+bGVuLCA9PSwgMCk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUp
OworCisgICAgLy8gUnVsZSB0byBtYXRjaCBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMuCisgICAgZ19o
YXNoX3RhYmxlX2luc2VydChhdHRyaWJ1dGVzLmdldCgpLCBnX3N0cmR1cCgibGV2ZWwiKSwgZ19z
dHJkdXAoIjE6MjozOjQiKSk7CisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxl
X25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAg
ICAgICBhdHRyaWJ1dGVzLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX0FOWSwKKyAgICAg
ICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRy
LCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIEZBTFNFKSk7CisgICAgbWF0
Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihkb2N1
bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRFUl9D
QU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hl
cyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAzKTsKKyAgICBnX2Fz
c2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0g
aDEuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNw
aUFjY2Vzc2libGUqLCAxKSA9PSBsaW5rMS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2Fy
cmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDIpID09IGxpbmsyLmdldCgpKTsK
KyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICAvLyBSdWxlIHRvIG1hdGNo
IG5vbmUgb2YgdGhlIGF0dHJpYnV0ZXMuCisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRj
aF9ydWxlX25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05F
LAorICAgICAgICBhdHRyaWJ1dGVzLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUs
CisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAg
bnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBGQUxTRSkpOwor
ICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJ
T04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRf
T1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxs
KG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSos
IDApID09IHAuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKworICAg
IC8vIENvbWJpbmVkIHJ1bGUgdG8gZmluZCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRzIHRoYXQgaW1w
bGVtZW50IHRleHQuCisgICAgaW50ZXJmYWNlcyA9IGdfYXJyYXlfc2l6ZWRfbmV3KEZBTFNFLCBG
QUxTRSwgc2l6ZW9mKGNoYXIqKSwgMSk7CisgICAgZ19hcnJheV9hcHBlbmRfdmFsKGludGVyZmFj
ZXMsIHRleHRJbnRlcmZhY2UpOworICAgIHNldCA9IGFkb3B0R1JlZihhdHNwaV9zdGF0ZV9zZXRf
bmV3KG51bGxwdHIpKTsKKyAgICBhdHNwaV9zdGF0ZV9zZXRfYWRkKHNldC5nZXQoKSwgQVRTUElf
U1RBVEVfRk9DVVNBQkxFKTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVf
bmV3KAorICAgICAgICBzZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAg
ICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxw
dHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgaW50ZXJmYWNlcywgQVRT
UElfQ29sbGVjdGlvbl9NQVRDSF9BTEwsCisgICAgICAgIEZBTFNFKSk7CisgICAgZ19hcnJheV9m
cmVlKGludGVyZmFjZXMsIFRSVUUpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dl
dF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgp
LCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRy
KTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
bWF0Y2hlcy0+bGVuLCA9PSwgMik7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1h
dGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGxpbmsxLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gbGlu
azIuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKK30KKwogdm9pZCBi
ZWZvcmVBbGwoKQogewogICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2li
aWxpdHkiLCAiYWNjZXNzaWJsZS9iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QWNjZXNzaWJsZUJhc2lj
SGllcmFyY2h5KTsKQEAgLTMyNzQsNiArMzYxMCw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBB
Y2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInNlbGVjdGlvbi9s
aXN0Ym94IiwgdGVzdFNlbGVjdGlvbkxpc3RCb3gpOwogICAgIEFjY2Vzc2liaWxpdHlUZXN0Ojph
ZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAic2VsZWN0aW9uL21lbnVsaXN0IiwgdGVzdFNlbGVj
dGlvbk1lbnVMaXN0KTsKICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3Np
YmlsaXR5IiwgInRhYmxlL2Jhc2ljIiwgdGVzdFRhYmxlQmFzaWMpOworICAgIEFjY2Vzc2liaWxp
dHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiY29sbGVjdGlvbi9nZXQtbWF0Y2hl
cyIsIHRlc3RDb2xsZWN0aW9uR2V0TWF0Y2hlcyk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQotLSAK
Mi4zNS4xCgo=
</data>
<flag name="commit-queue"
          id="489534"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>460501</attachid>
            <date>2022-06-27 02:34:10 -0700</date>
            <delta_ts>2022-06-28 02:54:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-GTK-AX-AtspiCollection-is-not-implemented-on-the-doc.patch</filename>
            <type>text/plain</type>
            <size>42743</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">RnJvbSA2ZjA5OWU3ODhkOWNiMjhhZGE2MDM4MDkwNGU2YzhiMmUwMTMyY2M4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDYXJsb3MgR2FyY2lhIENhbXBvcyA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDI0IEp1biAyMDIyIDEzOjAwOjAxICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gW0dUS10gQVg6IEF0c3BpQ29sbGVjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhlIGRv
Y3VtZW50CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQwNTE3CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9m
IENvbGxlY3Rpb24gaW50ZXJmYWNlLiBPbmx5IEdldE1hdGNoZXMKbWV0aG9kIGlzIGltcGxlbWVu
dGVkLCBzaW5jZSBpdCdzIHRoZSBvbmx5IG9uZSB1c2VkIGJ5IG9yY2EgKHRoZSBvbmx5CnVzZXIg
b2YgdGhlIGNvbGxlY3Rpb24gaW50ZXJmYWNlIHRvbykuCgpTb3VyY2UvV2ViQ29yZToKCiogU291
cmNlc0dUSy50eHQ6CiogU291cmNlc1dQRS50eHQ6CiogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5QXRzcGlFbnVtcy5oOgoqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW50
ZXJmYWNlc0Zvck9iamVjdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJl
Z2lzdGVyT2JqZWN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJ
bnRlcmZhY2VzIGNvbnN0KToKKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaS5oOgoqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdENvbGxl
Y3Rpb25BdHNwaS5jcHA6IEFkZGVkLgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
OjpDb2xsZWN0aW9uTWF0Y2hSdWxlOjpDb2xsZWN0aW9uTWF0Y2hSdWxlKToKKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hJbnRlcmZh
Y2VzKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNo
UnVsZTo6bWF0Y2hTdGF0ZXMpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpD
b2xsZWN0aW9uTWF0Y2hSdWxlOjptYXRjaFJvbGVzKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hBdHRyaWJ1dGVzKToKKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2gp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphZGRNYXRjaGVzSW5DYW5vbmlj
YWxPcmRlcik6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om1hdGNoZXMpOgoq
IGFjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24ueG1sOgoKVG9vbHM6CiogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwOgoodGVz
dENvbGxlY3Rpb25HZXRNYXRjaGVzKToKKGJlZm9yZUFsbCk6Ci0tLQogU291cmNlL1dlYkNvcmUv
U291cmNlc0dUSy50eHQgICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNXUEUudHh0ICAgICAgICAgICAgICAgICB8ICAgMSArCiAuLi4vYXRzcGkvQWNjZXNzaWJp
bGl0eUF0c3BpRW51bXMuaCAgICAgICAgICAgfCAgMTggKwogLi4uL2F0c3BpL0FjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaS5jcHAgICAgICAgIHwgICA2ICstCiAuLi4vYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpLmggICAgICAgICAgfCAgMzYgKy0KIC4uLi9BY2Nlc3NpYmlsaXR5T2JqZWN0
Q29sbGVjdGlvbkF0c3BpLmNwcCAgICB8IDM4MCArKysrKysrKysrKysrKysrKysKIC4uLi9hY2Nl
c3NpYmlsaXR5L2F0c3BpL3htbC9Db2xsZWN0aW9uLnhtbCAgICB8ICAgNiArLQogLi4uL1dlYktp
dEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAgICAgIHwgMzM3ICsrKysrKysrKysrKysr
KysKIDggZmlsZXMgY2hhbmdlZCwgNzgwIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5T2JqZWN0Q29sbGVjdGlvbkF0c3BpLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5k
ZXggM2M5OTg5OTlhOGQyLi4wNTZjZDAwZGJmZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC0y
NCw2ICsyNCw3IEBACiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAK
IGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAogYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QWN0aW9uQXRzcGkuY3BwCithY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb2xsZWN0aW9uQXRzcGkuY3BwCiBhY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb21wb25lbnRBdHNwaS5jcHAKIGFj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdERvY3VtZW50QXRzcGkuY3BwCiBh
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RIeXBlcmxpbmtBdHNwaS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlc1dQRS50eHQKaW5kZXggNmFlMjMwMDRjNDExLi42MzQwZTk2NjMxMWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNXUEUudHh0CkBAIC0yNCw2ICsyNCw3IEBACiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0Fj
Y2Vzc2liaWxpdHlBdHNwaS5jcHAKIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QWN0
aW9uQXRzcGkuY3BwCithY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb2xs
ZWN0aW9uQXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RD
b21wb25lbnRBdHNwaS5jcHAKIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVj
dERvY3VtZW50QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RIeXBlcmxpbmtBdHNwaS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaAppbmRleCA4YjUxOTY5
N2EwYzEuLmEzYzBhYmEwMjNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaApAQCAtMjc2LDYg
KzI3NiwyNCBAQCBlbnVtIFRleHRHcmFudWxhcml0eVR5cGUgewogICAgIFBhcmFncmFwaEdyYW51
bGFyaXR5CiB9OwogCitlbnVtIENvbGxlY3Rpb25NYXRjaFR5cGUgeworICAgIE1hdGNoSW52YWxp
ZCwKKyAgICBNYXRjaEFsbCwKKyAgICBNYXRjaEFueSwKKyAgICBNYXRjaE5vbmUsCisgICAgTWF0
Y2hFbXB0eQorfTsKKworZW51bSBDb2xsZWN0aW9uU29ydE9yZGVyIHsKKyAgICBTb3J0T3JkZXJJ
bnZhbGlkLAorICAgIFNvcnRPcmRlckNhbm9uaWNhbCwKKyAgICBTb3J0T3JkZXJGbG93LAorICAg
IFNvcnRPcmRlclRhYiwKKyAgICBTb3J0T3JkZXJSZXZlcnNlQ2Fub25pY2FsLAorICAgIFNvcnRP
cmRlclJldmVyc2VGbG93LAorICAgIFNvcnRPcmRlclJldmVyc2VUYWIKK307CisKIH0gLy8gbmFt
ZXNwYWNlIEF0c3BpCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpLmNwcAppbmRleCBmODgwYjhhMTVjMWYuLmUzNjRiMjE5NDkxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpLmNwcApAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
cm9sZUlzVGV4dFR5cGUoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkKIAogT3B0aW9uU2V0PEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmludGVyZmFjZXNGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiBjb3JlT2JqZWN0KQogewotICAgIE9w
dGlvblNldDxJbnRlcmZhY2U+IGludGVyZmFjZXMgPSB7IEludGVyZmFjZTo6QWNjZXNzaWJsZSwg
SW50ZXJmYWNlOjpDb21wb25lbnQsIEludGVyZmFjZTo6QWN0aW9uIH07CisgICAgT3B0aW9uU2V0
PEludGVyZmFjZT4gaW50ZXJmYWNlcyA9IHsgSW50ZXJmYWNlOjpBY2Nlc3NpYmxlLCBJbnRlcmZh
Y2U6OkNvbXBvbmVudCwgSW50ZXJmYWNlOjpBY3Rpb24sIEludGVyZmFjZTo6Q29sbGVjdGlvbiB9
OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QuaXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkgPyBjb3JlT2JqZWN0LnJlbmRlcmVyKCkgOiBudWxscHRyOwogICAg
IGlmIChjb3JlT2JqZWN0LnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNU
ZXh0IHx8IGNvcmVPYmplY3Qucm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkNvbG9y
V2VsbCkKQEAgLTUwNiw2ICs1MDYsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
cmVnaXN0ZXJPYmplY3QoKQogICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8
R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtpdF90YWJsZV9pbnRlcmZhY2UpLCAmc190YWJsZUZ1
bmN0aW9ucyB9KTsKICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6VGFi
bGVDZWxsKSkKICAgICAgICAgaW50ZXJmYWNlcy5hcHBlbmQoeyBjb25zdF9jYXN0PEdEQnVzSW50
ZXJmYWNlSW5mbyo+KCZ3ZWJraXRfdGFibGVfY2VsbF9pbnRlcmZhY2UpLCAmc190YWJsZUNlbGxG
dW5jdGlvbnMgfSk7CisgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkNv
bGxlY3Rpb24pKQorICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJ
bnRlcmZhY2VJbmZvKj4oJndlYmtpdF9jb2xsZWN0aW9uX2ludGVyZmFjZSksICZzX2NvbGxlY3Rp
b25GdW5jdGlvbnMgfSk7CiAKICAgICBtX3BhdGggPSBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNpbmds
ZXRvbigpLnJlZ2lzdGVyT2JqZWN0KCp0aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTExMzEsNiArMTEzMyw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyKSBjb25zdAog
ICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInMiLCB3ZWJraXRfdGFibGVf
aW50ZXJmYWNlLm5hbWUpOwogICAgIGlmIChtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNl
OjpUYWJsZUNlbGwpKQogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInMi
LCB3ZWJraXRfdGFibGVfY2VsbF9pbnRlcmZhY2UubmFtZSk7CisgICAgaWYgKG1faW50ZXJmYWNl
cy5jb250YWlucyhJbnRlcmZhY2U6OkNvbGxlY3Rpb24pKQorICAgICAgICBnX3ZhcmlhbnRfYnVp
bGRlcl9hZGQoYnVpbGRlciwgInMiLCB3ZWJraXRfY29sbGVjdGlvbl9pbnRlcmZhY2UubmFtZSk7
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZXJpYWxpemUoR1ZhcmlhbnRC
dWlsZGVyKiBidWlsZGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKaW5kZXggMDdh
NTc5MjUzYzU3Li40NjgwNjlhNTAwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaApAQCAt
NTUsNyArNTUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEltYWdlID0gMSA8PCA4LAogICAgICAgICBT
ZWxlY3Rpb24gPSAxIDw8IDksCiAgICAgICAgIFRhYmxlID0gMSA8PCAxMCwKLSAgICAgICAgVGFi
bGVDZWxsID0gMSA8PCAxMQorICAgICAgICBUYWJsZUNlbGwgPSAxIDw8IDExLAorICAgICAgICBD
b2xsZWN0aW9uID0gIDEgPDwgMTIKICAgICB9OwogICAgIGNvbnN0IE9wdGlvblNldDxJbnRlcmZh
Y2U+JiBpbnRlcmZhY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmZhY2VzOyB9CiAKQEAgLTIy
Myw2ICsyMjQsMzggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgcm93RGVzY3JpcHRpb24odW5zaWdu
ZWQpIGNvbnN0OwogICAgIFN0cmluZyBjb2x1bW5EZXNjcmlwdGlvbih1bnNpZ25lZCkgY29uc3Q7
CiAKKyAgICBzdHJ1Y3QgQ29sbGVjdGlvbk1hdGNoUnVsZSB7CisgICAgICAgIENvbGxlY3Rpb25N
YXRjaFJ1bGUoR1ZhcmlhbnQqKTsKKworICAgICAgICBib29sIG1hdGNoKEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSYpOworICAgICAgICBib29sIG1hdGNoSW50ZXJmYWNlcyhBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkmKTsKKyAgICAgICAgYm9vbCBtYXRjaFN0YXRlcyhBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkmKTsKKyAgICAgICAgYm9vbCBtYXRjaFJvbGVzKEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaSYpOworICAgICAgICBib29sIG1hdGNoQXR0cmlidXRlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkmKTsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDY0X3QgdmFsdWUg
eyAwIH07CisgICAgICAgICAgICB1aW50MTZfdCB0eXBlIHsgMCB9OworICAgICAgICB9IHN0YXRl
czsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3Rv
cjxTdHJpbmc+PiB2YWx1ZTsKKyAgICAgICAgICAgIHVpbnQxNl90IHR5cGUgeyAwIH07CisgICAg
ICAgIH0gYXR0cmlidXRlczsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgVmVjdG9y
PHVuc2lnbmVkPiB2YWx1ZTsKKyAgICAgICAgICAgIHVpbnQxNl90IHR5cGUgeyAwIH07CisgICAg
ICAgIH0gcm9sZXM7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IHZhbHVlOworICAgICAgICAgICAgdWludDE2X3QgdHlwZSB7IDAgfTsKKyAgICAgICAgfSBp
bnRlcmZhY2VzOworICAgIH07CisgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk+PiBtYXRjaGVzKENvbGxlY3Rpb25NYXRjaFJ1bGUmLCB1aW50MzJfdCBzb3J0T3JkZXIs
IHVpbnQzMl90IG1heFJlc3VsdENvdW50LCBib29sIHRyYXZlcnNlKTsKKyAgICB2b2lkIGFkZE1h
dGNoZXNJbkNhbm9uaWNhbE9yZGVyKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpPj4mLCBDb2xsZWN0aW9uTWF0Y2hSdWxlJiwgdWludDMyX3QgbWF4UmVzdWx0Q291bnQsIGJv
b2wgdHJhdmVyc2UpOworCiAgICAgc3RhdGljIE9wdGlvblNldDxJbnRlcmZhY2U+IGludGVyZmFj
ZXNGb3JPYmplY3QoQVhDb3JlT2JqZWN0Jik7CiAKICAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VW
VGFibGUgc19hY2Nlc3NpYmxlRnVuY3Rpb25zOwpAQCAtMjM3LDYgKzI3MCw3IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfc2VsZWN0aW9uRnVuY3Rpb25zOwog
ICAgIHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX3RhYmxlRnVuY3Rpb25zOwogICAgIHN0
YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX3RhYmxlQ2VsbEZ1bmN0aW9uczsKKyAgICBzdGF0
aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19jb2xsZWN0aW9uRnVuY3Rpb25zOwogCiAgICAgQVhD
b3JlT2JqZWN0KiBtX2NvcmVPYmplY3QgeyBudWxscHRyIH07CiAgICAgT3B0aW9uU2V0PEludGVy
ZmFjZT4gbV9pbnRlcmZhY2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29sbGVjdGlvbkF0c3BpLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdENvbGxlY3Rp
b25BdHNwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lZmUw
NzY2ODc1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb2xsZWN0aW9uQXRzcGkuY3BwCkBAIC0wLDAgKzEs
MzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaCIKKworI2lmIFVT
RShBVFNQSSkKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGkuaCIKKyNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5QXRzcGlFbnVtcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dEQnVzSW50
ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19jb2xsZWN0aW9uRnVuY3Rp
b25zID0geworICAgIC8vIG1ldGhvZF9jYWxsCisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29u
c3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhv
ZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9j
YXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBS
ZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07
CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0TWF0Y2hlcyIpKSB7CisgICAgICAgICAgICBH
UmVmUHRyPEdWYXJpYW50PiBydWxlOworICAgICAgICAgICAgdWludDMyX3Qgc29ydHlCeTsKKyAg
ICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgIGdib29sZWFuIHRyYXZlcnNlOworICAg
ICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKEAoYWlpYXtzc31pYWlpYXNpYil1
aWIpIiwgJnJ1bGUub3V0UHRyKCksICZzb3J0eUJ5LCAmY291bnQsICZ0cmF2ZXJzZSk7CisgICAg
ICAgICAgICBpZiAoc29ydHlCeSA+IEF0c3BpOjpDb2xsZWN0aW9uU29ydE9yZGVyOjpTb3J0T3Jk
ZXJSZXZlcnNlVGFiKSB7CisgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9u
X3JldHVybl9lcnJvcihpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9JTlZB
TElEX0FSR1MsICJOb3QgYSB2YWxpZCBzb3J0IG9yZGVyOiAldSIsIHNvcnR5QnkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbGxlY3Rpb25N
YXRjaFJ1bGUgbWF0Y2hSdWxlKHJ1bGUuZ2V0KCkpOworICAgICAgICAgICAgR1ZhcmlhbnRCdWls
ZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJhKHNv
KSIpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgd3JhcHBlciA6IGF0c3BpT2JqZWN0
LT5tYXRjaGVzKG1hdGNoUnVsZSwgc29ydHlCeSwgc3RkOjptYXg8aW50PigwLCBjb3VudCksIHRy
YXZlcnNlKSkKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIs
ICJAKHNvKSIsIHdyYXBwZXItPnJlZmVyZW5jZSgpKTsKKyAgICAgICAgICAgIGdfZGJ1c19tZXRo
b2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKGEo
c28pKSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2RO
YW1lLCAiR2V0TWF0Y2hlc1RvIikgfHwgIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0TWF0Y2hl
c0Zyb20iKSB8fCAhZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBY3RpdmVEZXNjZW5kYW50Iikp
CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX2Vycm9yX2xpdGVy
YWwoaW52b2NhdGlvbiwgR19EQlVTX0VSUk9SLCBHX0RCVVNfRVJST1JfTk9UX1NVUFBPUlRFRCwg
IiIpOworICAgIH0sCisgICAgLy8gZ2V0X3Byb3BlcnR5CisgICAgbnVsbHB0ciwKKyAgICAvLyBz
ZXRfcHJvcGVydHksCisgICAgbnVsbHB0ciwKKyAgICAvLyBwYWRkaW5nCisgICAgeyBudWxscHRy
IH0KK307CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6
Q29sbGVjdGlvbk1hdGNoUnVsZShHVmFyaWFudCogcnVsZSkKK3sKKyAgICBHVW5pcXVlT3V0UHRy
PEdWYXJpYW50SXRlcj4gc3RhdGVzSXRlcjsKKyAgICBpbnQgc3RhdGVzTWF0Y2hUeXBlOworICAg
IEdVbmlxdWVPdXRQdHI8R1ZhcmlhbnRJdGVyPiBhdHRyaWJ1dGVzSXRlcjsKKyAgICBpbnQgYXR0
cmlidXRlc01hdGNoVHlwZTsKKyAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gcm9sZXNJ
dGVyOworICAgIGludCByb2xlc01hdGNoVHlwZTsKKyAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50
SXRlcj4gaW50ZXJmYWNlc0l0ZXI7CisgICAgaW50IGludGVyZmFjZXNNYXRjaFR5cGU7CisgICAg
Z2Jvb2xlYW4gaW52ZXJ0ZWQ7CisgICAgZ192YXJpYW50X2dldChydWxlLCAiKGFpaWF7c3N9aWFp
aWFzaWIpIiwgJnN0YXRlc0l0ZXIub3V0UHRyKCksICZzdGF0ZXNNYXRjaFR5cGUsICZhdHRyaWJ1
dGVzSXRlci5vdXRQdHIoKSwgJmF0dHJpYnV0ZXNNYXRjaFR5cGUsICZyb2xlc0l0ZXIub3V0UHRy
KCksICZyb2xlc01hdGNoVHlwZSwgJmludGVyZmFjZXNJdGVyLm91dFB0cigpLCAmaW50ZXJmYWNl
c01hdGNoVHlwZSwgJmludmVydGVkKTsKKworICAgIGludCBzdGF0ZTsKKyAgICBpbnQgaSA9IDA7
CisgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX25leHQoc3RhdGVzSXRlci5nZXQoKSwgImkiLCAm
c3RhdGUpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzI7ICsraikgeworICAgICAg
ICAgICAgaWYgKHN0YXRlICYgKDEgPDwgaikpCisgICAgICAgICAgICAgICAgc3RhdGVzLnZhbHVl
IHw9IEdfR1VJTlQ2NF9DT05TVEFOVCgxKSA8PCAoaSAqIDMyICsgaik7CisgICAgICAgIH0KKyAg
ICAgICAgaSsrOworICAgIH0KKyAgICBzdGF0ZXMudHlwZSA9IHN0YXRlc01hdGNoVHlwZTsKKwor
ICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWU7CisgICAgY29uc3QgY2hhciogYXR0cmlidXRl
VmFsdWU7CisgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX25leHQoYXR0cmlidXRlc0l0ZXIuZ2V0
KCksICJ7JnMmc30iLCAmYXR0cmlidXRlTmFtZSwgJmF0dHJpYnV0ZVZhbHVlKSkgeworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IGF0dHJpYnV0ZXMudmFsdWUuYWRkKFN0cmluZzo6ZnJvbVVURjgo
YXR0cmlidXRlTmFtZSksIFZlY3RvcjxTdHJpbmc+IHsgfSk7CisgICAgICAgIFN0cmluZyB2YWx1
ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXR0cmlidXRlVmFsdWUpOworICAgICAgICB1bnNpZ25lZCBj
dXJyZW50UG9zID0gMDsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgICAgICBz
aXplX3QgZW5kUG9zOworICAgICAgICB3aGlsZSAoKGVuZFBvcyA9IHZhbHVlLmZpbmQoJzonLCBj
dXJyZW50UG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zICE9
IGVuZFBvcykgeworICAgICAgICAgICAgICAgIGlmIChzdGFydFBvcyAhPSBlbmRQb3MgJiYgKChl
bmRQb3MgJiYgdmFsdWVbZW5kUG9zIC0gMV0gIT0gJ1xcJykgfHwgKGVuZFBvcyA+IDEgJiYgdmFs
dWVbZW5kUG9zIC0gMl0gPT0gJ1xcJykpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5l
c2NhcGVkVmFsdWUgPSBtYWtlU3RyaW5nQnlSZXBsYWNpbmdBbGwodmFsdWUuc3Vic3RyaW5nKHN0
YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcyksICJcXDoiX3MsICI6Il9zKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWFrZVN0cmluZ0J5UmVw
bGFjaW5nQWxsKHVuZXNjYXBlZFZhbHVlLCAiXFxcXCJfcywgIlxcIl9zKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50UG9zID0gZW5kUG9zICsgMTsKKyAgICAgICAg
ICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MpCisgICAgICAgICAgICAgICAgc3RhcnRQb3MrKzsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3RhcnRQb3MgIT0gdmFsdWUubGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gdW5lc2NhcGVkVmFsdWUgPSBtYWtlU3RyaW5nQnlSZXBsYWNpbmdBbGwo
dmFsdWUuc3Vic3RyaW5nKHN0YXJ0UG9zKSwgIlxcOiJfcywgIjoiX3MpOworICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobWFrZVN0cmluZ0J5UmVwbGFjaW5nQWxs
KHVuZXNjYXBlZFZhbHVlLCAiXFxcXCJfcywgIlxcIl9zKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYXR0cmlidXRlcy50eXBlID0gYXR0cmlidXRlc01hdGNoVHlwZTsKKworICAgIGludCByb2xl
OworICAgIGkgPSAwOworICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9uZXh0KHJvbGVzSXRlci5n
ZXQoKSwgImkiLCAmcm9sZSkpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzMjsgKytq
KSB7CisgICAgICAgICAgICBpZiAocm9sZSAmICgxIDw8IGopKQorICAgICAgICAgICAgICAgIHJv
bGVzLnZhbHVlLmFwcGVuZChpICogMzIgKyBqKTsKKyAgICAgICAgfQorICAgICAgICBpKys7Cisg
ICAgfQorICAgIHJvbGVzLnR5cGUgPSByb2xlc01hdGNoVHlwZTsKKworICAgIGNvbnN0IGNoYXIq
IGludGVyZmFjZTsKKyAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbmV4dChpbnRlcmZhY2VzSXRl
ci5nZXQoKSwgIiZzIiwgJmludGVyZmFjZSkpCisgICAgICAgIGludGVyZmFjZXMudmFsdWUuYXBw
ZW5kKFN0cmluZzo6ZnJvbVVURjgoaW50ZXJmYWNlKSk7CisgICAgaW50ZXJmYWNlcy50eXBlID0g
aW50ZXJmYWNlc01hdGNoVHlwZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OkNvbGxlY3Rpb25NYXRjaFJ1bGU6Om1hdGNoSW50ZXJmYWNlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkmIGF4T2JqZWN0KQoreworICAgIGlmIChpbnRlcmZhY2VzLnZhbHVlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIG1hdGNoSW50ZXJmYWNlID0gWyZdKGNv
bnN0IFN0cmluZyYgaW50ZXJmYWNlKSB7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gImFjY2Vz
c2libGUiX3MpCisgICAgICAgICAgICByZXR1cm4gYXhPYmplY3QuaW50ZXJmYWNlcygpLmNvbnRh
aW5zKEludGVyZmFjZTo6QWNjZXNzaWJsZSk7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gImFj
dGlvbiJfcykKKyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFp
bnMoSW50ZXJmYWNlOjpBY3Rpb24pOworICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJjb21wb25l
bnQiX3MpCisgICAgICAgICAgICByZXR1cm4gYXhPYmplY3QuaW50ZXJmYWNlcygpLmNvbnRhaW5z
KEludGVyZmFjZTo6Q29tcG9uZW50KTsKKyAgICAgICAgaWYgKGludGVyZmFjZSA9PSAidGV4dCJf
cykKKyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50
ZXJmYWNlOjpUZXh0KTsKKyAgICAgICAgaWYgKGludGVyZmFjZSA9PSAiaHlwZXJ0ZXh0Il9zKQor
ICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LmludGVyZmFjZXMoKS5jb250YWlucyhJbnRlcmZh
Y2U6Okh5cGVydGV4dCk7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gImh5cGVybGluayJfcykK
KyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJm
YWNlOjpIeXBlcmxpbmspOworICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJpbWFnZSJfcykKKyAg
ICAgICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNl
OjpJbWFnZSk7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gInNlbGVjdGlvbiJfcykKKyAgICAg
ICAgICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpT
ZWxlY3Rpb24pOworICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJ0YWJsZSJfcykKKyAgICAgICAg
ICAgIHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpUYWJs
ZSk7CisgICAgICAgIGlmIChpbnRlcmZhY2UgPT0gInRhYmxlY2VsbCJfcykKKyAgICAgICAgICAg
IHJldHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpUYWJsZUNl
bGwpOworICAgICAgICBpZiAoaW50ZXJmYWNlID09ICJ2YWx1ZSJfcykKKyAgICAgICAgICAgIHJl
dHVybiBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpWYWx1ZSk7Cisg
ICAgICAgIGlmIChpbnRlcmZhY2UgPT0gImRvY3VtZW50Il9zKQorICAgICAgICAgICAgcmV0dXJu
IGF4T2JqZWN0LmludGVyZmFjZXMoKS5jb250YWlucyhJbnRlcmZhY2U6OkRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKGludGVyZmFjZSA9PSAiY29sbGVjdGlvbiJfcykKKyAgICAgICAgICAgIHJldHVy
biBheE9iamVjdC5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpDb2xsZWN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBzd2l0Y2ggKGludGVyZmFjZXMu
dHlwZSkgeworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoSW52YWxp
ZDoKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEVtcHR5OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6
TWF0Y2hBbGw6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJmYWNlIDogaW50ZXJmYWNl
cy52YWx1ZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaEludGVyZmFjZShpbnRlcmZhY2UpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoQW55Ogor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyZmFjZSA6IGludGVyZmFjZXMudmFsdWUpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaEludGVyZmFjZShpbnRlcmZhY2UpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoTm9uZToKKyAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBpbnRlcmZhY2UgOiBpbnRlcmZhY2VzLnZhbHVlKSB7CisgICAgICAgICAg
ICBpZiAobWF0Y2hJbnRlcmZhY2UoaW50ZXJmYWNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpDb2xsZWN0
aW9uTWF0Y2hSdWxlOjptYXRjaFN0YXRlcyhBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF4T2Jq
ZWN0KQoreworICAgIGlmICghc3RhdGVzLnZhbHVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHN3aXRjaCAoc3RhdGVzLnR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0
Y2hUeXBlOjpNYXRjaEludmFsaWQ6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlw
ZTo6TWF0Y2hFbXB0eToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXRzcGk6OkNv
bGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoQWxsOgorICAgICAgICByZXR1cm4gKGF4T2JqZWN0LnN0
YXRlKCkgJiBzdGF0ZXMudmFsdWUpID09IHN0YXRlcy52YWx1ZTsKKyAgICBjYXNlIEF0c3BpOjpD
b2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEFueToKKyAgICAgICAgcmV0dXJuICEhKGF4T2JqZWN0
LnN0YXRlKCkgJiBzdGF0ZXMudmFsdWUpOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRj
aFR5cGU6Ok1hdGNoTm9uZToKKyAgICAgICAgcmV0dXJuICEoYXhPYmplY3Quc3RhdGUoKSAmIHN0
YXRlcy52YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6Q29sbGVjdGlvbk1hdGNoUnVsZTo6bWF0Y2hSb2xlcyhBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF4T2JqZWN0KQoreworICAgIGlmIChyb2xlcy52YWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoIChyb2xlcy50eXBl
KSB7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0Y2hJbnZhbGlkOgor
ICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1hdGNoRW1wdHk6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRj
aEFsbDoKKyAgICAgICAgaWYgKHJvbGVzLnZhbHVlLnNpemUoKSAhPSAxKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiByb2xlcy52YWx1ZVswXSA9PSBheE9iamVj
dC5yb2xlKCk7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0Y2hBbnk6
CisgICAgICAgIGZvciAoYXV0byByb2xlIDogcm9sZXMudmFsdWUpIHsKKyAgICAgICAgICAgIGlm
IChyb2xlID09IGF4T2JqZWN0LnJvbGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEF0c3BpOjpDb2xs
ZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaE5vbmU6CisgICAgICAgIGZvciAoYXV0byByb2xlIDogcm9s
ZXMudmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChyb2xlID09IGF4T2JqZWN0LnJvbGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hSdWxlOjptYXRjaEF0dHJpYnV0ZXMoQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpJiBheE9iamVjdCkKK3sKKyAgICBpZiAoYXR0cmlidXRlcy52YWx1
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoIChhdHRyaWJ1
dGVzLnR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaElu
dmFsaWQ6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvbk1hdGNoVHlwZTo6TWF0Y2hFbXB0eToK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5
cGU6Ok1hdGNoQWxsOiB7CisgICAgICAgIGF1dG8gYXhBdHRyaWJ1dGVzID0gYXhPYmplY3QuYXR0
cmlidXRlcygpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRlcy52YWx1
ZSkgeworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGF4QXR0cmlidXRlcy5nZXQoaXQua2V5KTsK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChpdC52YWx1ZS5pc0VtcHR5KCkgfHwgaXQudmFsdWUu
c2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShpdC52YWx1ZVswXSwgdmFsdWUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hUeXBlOjpNYXRjaEFueTog
eworICAgICAgICBhdXRvIGF4QXR0cmlidXRlcyA9IGF4T2JqZWN0LmF0dHJpYnV0ZXMoKTsKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMudmFsdWUpIHsKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWUgPSBheEF0dHJpYnV0ZXMuZ2V0KGl0LmtleSk7CisgICAgICAgICAgICBp
ZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIGJvb2wgZm91bmQgPSBpdC52YWx1ZS5maW5kSWYoWyZ2YWx1ZV0oYXV0byYgaXRlbSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGl0ZW0sIHZhbHVl
KTsKKyAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOworICAgICAgICAgICAgaWYgKGZvdW5kKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25NYXRjaFR5cGU6Ok1h
dGNoTm9uZTogeworICAgICAgICBhdXRvIGF4QXR0cmlidXRlcyA9IGF4T2JqZWN0LmF0dHJpYnV0
ZXMoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMudmFsdWUpIHsK
KyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBheEF0dHJpYnV0ZXMuZ2V0KGl0LmtleSk7CisgICAg
ICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBpdC52YWx1ZS5maW5kSWYoWyZ2YWx1ZV0oYXV0byYg
aXRlbSkgeworICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGl0
ZW0sIHZhbHVlKTsKKyAgICAgICAgICAgIH0pICE9IG5vdEZvdW5kOworICAgICAgICAgICAgaWYg
KGZvdW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpDb2xsZWN0aW9uTWF0Y2hSdWxlOjptYXRj
aChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF4T2JqZWN0KQoreworICAgIGlmICghbWF0Y2hJ
bnRlcmZhY2VzKGF4T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFt
YXRjaFN0YXRlcyhheE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
bWF0Y2hSb2xlcyhheE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
bWF0Y2hBdHRyaWJ1dGVzKGF4T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphZGRNYXRj
aGVzSW5DYW5vbmljYWxPcmRlcihWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aT4+JiBtYXRjaExpc3QsIENvbGxlY3Rpb25NYXRjaFJ1bGUmIHJ1bGUsIHVpbnQzMl90IG1heFJl
c3VsdENvdW50LCBib29sIHRyYXZlcnNlKQoreworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0g
bV9jb3JlT2JqZWN0LT5jaGlsZHJlbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bikgeworICAgICAgICBhdXRvKiB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKTsKKyAgICAgICAg
aWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJ1bGUu
bWF0Y2goKndyYXBwZXIpKSB7CisgICAgICAgICAgICBtYXRjaExpc3QuYXBwZW5kKHdyYXBwZXIp
OworICAgICAgICAgICAgaWYgKG1heFJlc3VsdENvdW50ICYmIG1hdGNoTGlzdC5zaXplKCkgPj0g
bWF4UmVzdWx0Q291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRyYXZlcnNlKSB7CisgICAgICAgICAgICB3cmFwcGVyLT5hZGRNYXRjaGVzSW5D
YW5vbmljYWxPcmRlcihtYXRjaExpc3QsIHJ1bGUsIG1heFJlc3VsdENvdW50LCB0cmF2ZXJzZSk7
CisgICAgICAgICAgICBpZiAobWF4UmVzdWx0Q291bnQgJiYgbWF0Y2hMaXN0LnNpemUoKSA+PSBt
YXhSZXN1bHRDb3VudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
Cit9CisKK1ZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4gQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjptYXRjaGVzKENvbGxlY3Rpb25NYXRjaFJ1bGUmIHJ1bGUsIHVpbnQz
Ml90IHNvcnRPcmRlciwgdWludDMyX3QgbWF4UmVzdWx0Q291bnQsIGJvb2wgdHJhdmVyc2UpCit7
CisgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0
b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IG1hdGNoTGlzdDsKKworICAgIHN3
aXRjaCAoc29ydE9yZGVyKSB7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvblNvcnRPcmRlcjo6
U29ydE9yZGVySW52YWxpZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNwaTo6Q29sbGVj
dGlvblNvcnRPcmRlcjo6U29ydE9yZGVyQ2Fub25pY2FsOgorICAgICAgICBhZGRNYXRjaGVzSW5D
YW5vbmljYWxPcmRlcihtYXRjaExpc3QsIHJ1bGUsIG1heFJlc3VsdENvdW50LCB0cmF2ZXJzZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXRzcGk6OkNvbGxlY3Rpb25Tb3J0T3JkZXI6OlNv
cnRPcmRlclJldmVyc2VDYW5vbmljYWw6CisgICAgICAgIGFkZE1hdGNoZXNJbkNhbm9uaWNhbE9y
ZGVyKG1hdGNoTGlzdCwgcnVsZSwgbWF4UmVzdWx0Q291bnQsIHRyYXZlcnNlKTsKKyAgICAgICAg
bWF0Y2hMaXN0LnJldmVyc2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNwaTo6Q29s
bGVjdGlvblNvcnRPcmRlcjo6U29ydE9yZGVyRmxvdzoKKyAgICBjYXNlIEF0c3BpOjpDb2xsZWN0
aW9uU29ydE9yZGVyOjpTb3J0T3JkZXJUYWI6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlvblNv
cnRPcmRlcjo6U29ydE9yZGVyUmV2ZXJzZUZsb3c6CisgICAgY2FzZSBBdHNwaTo6Q29sbGVjdGlv
blNvcnRPcmRlcjo6U29ydE9yZGVyUmV2ZXJzZVRhYjoKKyAgICAgICAgZ193YXJuaW5nKCJBdHNw
aSBjb2xsZWN0aW9uIHNvcnQgbWV0aG9kICV1IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCBzb3J0T3Jk
ZXIpOworICAgICAgICBicmVhazsKKworICAgIH0KKworICAgIHJldHVybiBtYXRjaExpc3Q7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBVFNQSSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24u
eG1sIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS94bWwvQ29sbGVjdGlvbi54
bWwKaW5kZXggYTZkZmY3NGFmZDY5Li45MTNlYmNiODJjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24ueG1sCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkveG1sL0NvbGxlY3Rpb24ueG1sCkBAIC0zLDcg
KzMsNyBAQAogPGludGVyZmFjZSBuYW1lPSJvcmcuYTExeS5hdHNwaS5Db2xsZWN0aW9uIj4KIAog
ICA8bWV0aG9kIG5hbWU9IkdldE1hdGNoZXMiPgotICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFt
ZT0icnVsZSIgdHlwZT0iKGF1dWFzdWF1dXN1YikiLz4KKyAgICA8YXJnIGRpcmVjdGlvbj0iaW4i
IG5hbWU9InJ1bGUiIHR5cGU9IihhaWlhe3NzfWlhaWlhc2liKSIvPgogICAgIDxhbm5vdGF0aW9u
IG5hbWU9Im9yZy5xdHByb2plY3QuUXREQnVzLlF0VHlwZU5hbWUuSW4wIiB2YWx1ZT0iUVNwaU1h
dGNoUnVsZSIvPgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0ic29ydGJ5IiB0eXBlPSJ1
Ii8+CiAgICAgPGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJjb3VudCIgdHlwZT0iaSIvPgpAQCAt
MTUsNyArMTUsNyBAQAogICA8bWV0aG9kIG5hbWU9IkdldE1hdGNoZXNUbyI+CiAgICAgPGFyZyBk
aXJlY3Rpb249ImluIiBuYW1lPSJjdXJyZW50X29iamVjdCIgdHlwZT0ibyIvPgogICAgIDxhbm5v
dGF0aW9uIG5hbWU9Im9yZy5xdHByb2plY3QuUXREQnVzLlF0VHlwZU5hbWUuSW4wIiB2YWx1ZT0i
UVNwaU9iamVjdFJlZmVyZW5jZSIvPgotICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0icnVs
ZSIgdHlwZT0iKGF1dWFzdWF1dXN1YikiLz4KKyAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9
InJ1bGUiIHR5cGU9IihhaWlhe3NzfWlhaWlhc2liKSIvPgogICAgIDxhbm5vdGF0aW9uIG5hbWU9
Im9yZy5xdHByb2plY3QuUXREQnVzLlF0VHlwZU5hbWUuSW4xIiB2YWx1ZT0iUVNwaU1hdGNoUnVs
ZSIvPgogICAgIDxhcmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0ic29ydGJ5IiB0eXBlPSJ1Ii8+CiAg
ICAgPGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJ0cmVlIiB0eXBlPSJ1Ii8+CkBAIC0yOSw3ICsy
OSw3IEBACiAgIDxtZXRob2QgbmFtZT0iR2V0TWF0Y2hlc0Zyb20iPgogICAgIDxhcmcgZGlyZWN0
aW9uPSJpbiIgbmFtZT0iY3VycmVudF9vYmplY3QiIHR5cGU9Im8iLz4KICAgICA8YW5ub3RhdGlv
biBuYW1lPSJvcmcucXRwcm9qZWN0LlF0REJ1cy5RdFR5cGVOYW1lLkluMCIgdmFsdWU9IlFTcGlP
YmplY3RSZWZlcmVuY2UiLz4KLSAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9InJ1bGUiIHR5
cGU9IihhdXVhc3VhdXVzdWIpIi8+CisgICAgPGFyZyBkaXJlY3Rpb249ImluIiBuYW1lPSJydWxl
IiB0eXBlPSIoYWlpYXtzc31pYWlpYXNpYikiLz4KICAgICA8YW5ub3RhdGlvbiBuYW1lPSJvcmcu
cXRwcm9qZWN0LlF0REJ1cy5RdFR5cGVOYW1lLkluMSIgdmFsdWU9IlFTcGlNYXRjaFJ1bGUiLz4K
ICAgICA8YXJnIGRpcmVjdGlvbj0iaW4iIG5hbWU9InNvcnRieSIgdHlwZT0idSIvPgogICAgIDxh
cmcgZGlyZWN0aW9uPSJpbiIgbmFtZT0idHJlZSIgdHlwZT0idSIvPgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHku
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHkuY3BwCmluZGV4IDU1NGU5YWJkZDhiYS4uNmVmNzQ5ZTVkMzc5IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJp
bGl0eS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdl
YktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0zMDQzLDYgKzMwNDMsMzQyIEBAIHN0YXRpYyB2b2lk
IHRlc3RUYWJsZUJhc2ljKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
ICAgIGdfYXNzZXJ0X3RydWUoY2VsbDguZ2V0KCkgPT0gY2VsbC5nZXQoKSk7CiB9CiAKK3N0YXRp
YyB2b2lkIHRlc3RDb2xsZWN0aW9uR2V0TWF0Y2hlcyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coODAwLCA2MDApOworICAg
IHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisg
ICAgICAgICIgICAgPGgxPkNvbGxlY3Rpb248L2gxPiIKKyAgICAgICAgIiAgICA8cD5UaGlzIGlz
IDxhIGhyZWY9JyMnPmxpbmsxPC9hPiBhbmQgPGEgaHJlZj0nIyc+bGluazI8L2E+IGluIHBhcmFn
cmFwaDwvcD4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAg
ICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBh
dXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnRf
dHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAgIGF1dG8gZG9j
dW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShBVFNQSV9JU19DT0xMRUNUSU9OKGRvY3VtZW50V2ViLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3Vt
ZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDIpOworCisgICAgYXV0byBoMSA9IGFkb3B0R1Jl
ZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwg
MCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShoMS5n
ZXQoKSkpOworCisgICAgYXV0byBwID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAxLCBudWxscHRyKSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHAuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQocC5nZXQoKSwgbnVsbHB0ciksID09
LCAyKTsKKworICAgIGF1dG8gbGluazEgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfYXRfaW5kZXgocC5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUo
QVRTUElfSVNfQUNDRVNTSUJMRShsaW5rMS5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
dGV4dChhdHNwaV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQobGluazEuZ2V0KCkpLCAwLCAtMSwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LmdldCgpLCA9PSwgImxpbmsxIik7
CisKKyAgICBhdXRvIGxpbmsyID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2F0X2luZGV4KHAuZ2V0KCksIDEsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX0FDQ0VTU0lCTEUobGluazIuZ2V0KCkpKTsKKyAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRf
Z2V0X3RleHQoQVRTUElfVEVYVChsaW5rMi5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAibGluazIiKTsKKworICAgIC8vIEEgc2lt
cGxlIHJ1bGUgYmFzZWQgb24gcm9sZXMuCisgICAgR0FycmF5KiByb2xlcyA9IGdfYXJyYXlfc2l6
ZWRfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKGludCksIDEpOworICAgIGludCBsaW5rUm9sZSA9
IEFUU1BJX1JPTEVfTElOSzsKKyAgICBnX2FycmF5X3ByZXBlbmRfdmFsKHJvbGVzLCBsaW5rUm9s
ZSk7CisgICAgR1JlZlB0cjxBdHNwaU1hdGNoUnVsZT4gcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9t
YXRjaF9ydWxlX25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9O
T05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAg
ICAgIHJvbGVzLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX0FMTCwKKyAgICAgICAgbnVsbHB0ciwg
QVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIGdfYXJy
YXlfZnJlZShyb2xlcywgVFJVRSk7CisgICAgR0FycmF5KiBtYXRjaGVzID0gYXRzcGlfY29sbGVj
dGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKGRvY3VtZW50V2ViLmdldCgpKSwgcnVs
ZS5nZXQoKSwgQVRTUElfQ29sbGVjdGlvbl9TT1JUX09SREVSX0NBTk9OSUNBTCwgMCwgVFJVRSwg
bnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChtYXRjaGVzKTsKKyAgICBnX2Fzc2VydF9j
bXB1aW50KG1hdGNoZXMtPmxlbiwgPT0sIDIpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJheV9p
bmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAwKSA9PSBsaW5rMS5nZXQoKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDEp
ID09IGxpbmsyLmdldCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAg
ICAvLyBSZXZlcnNlIG9yZGVyLgorICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9t
YXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBB
VFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfUkVWRVJTRV9DQU5PTklDQUwsIDAsIFRSVUUsIG51
bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21w
dWludChtYXRjaGVzLT5sZW4sID09LCAyKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5k
ZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0gbGluazIuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9
PSBsaW5rMS5nZXQoKSk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUpOworCisgICAg
Ly8gTGltaXQgcmVzdWx0cyB0byAxLgorICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dl
dF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgp
LCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAxLCBUUlVFLCBudWxscHRy
KTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
bWF0Y2hlcy0+bGVuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1h
dGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGxpbmsxLmdldCgpKTsKKyAgICBnX2FycmF5
X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICAvLyBEb24ndCB0cmF2ZXJzZS4KKyAgICBtYXRj
aGVzID0gYXRzcGlfY29sbGVjdGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKGRvY3Vt
ZW50V2ViLmdldCgpKSwgcnVsZS5nZXQoKSwgQVRTUElfQ29sbGVjdGlvbl9TT1JUX09SREVSX0NB
Tk9OSUNBTCwgMCwgRkFMU0UsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hl
cyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAwKTsKKyAgICBnX2Fy
cmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICBtYXRjaGVzID0gYXRzcGlfY29sbGVjdGlv
bl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKHAuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQ
SV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBGQUxTRSwgbnVsbHB0cik7Cisg
ICAgZ19hc3NlcnRfbm9ubnVsbChtYXRjaGVzKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KG1hdGNo
ZXMtPmxlbiwgPT0sIDIpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVz
LCBBdHNwaUFjY2Vzc2libGUqLCAwKSA9PSBsaW5rMS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDEpID09IGxpbmsyLmdl
dCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICAvLyBSdWxlIHRv
IG1hdGNoIGFsbCBpbnRlcmZhY2VzLgorICAgIEdBcnJheSogaW50ZXJmYWNlcyA9IGdfYXJyYXlf
c2l6ZWRfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKGNoYXIqKSwgMyk7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGxpbmtJbnRlcmZhY2UgPSAiaHlwZXJsaW5rIjsKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdGV4dEludGVyZmFjZSA9ICJ0ZXh0IjsKKyAgICBnX2FycmF5X2FwcGVuZF92YWwoaW50
ZXJmYWNlcywgbGlua0ludGVyZmFjZSk7CisgICAgZ19hcnJheV9hcHBlbmRfdmFsKGludGVyZmFj
ZXMsIHRleHRJbnRlcmZhY2UpOworICAgIHJ1bGUgPSBhZG9wdEdSZWYoYXRzcGlfbWF0Y2hfcnVs
ZV9uZXcoCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAg
ICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxs
cHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIGludGVyZmFjZXMsIEFU
U1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMg
PSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRX
ZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05J
Q0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMik7CisgICAgZ19hc3NlcnRf
dHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGxpbmsx
LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlB
Y2Nlc3NpYmxlKiwgMSkgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVz
LCBUUlVFKTsKKworICAgIC8vIEFkZGluZyB0YWJsZSBpbnRlcmZhY2UgdG8gbWFrZSB0aGUgbWF0
Y2ggZmFpbC4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogdGFibGVJbnRlcmZhY2UgPSAidGFibGUi
OworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbChpbnRlcmZhY2VzLCB0YWJsZUludGVyZmFjZSk7Cisg
ICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAgICAgICAgbnVsbHB0
ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9D
b2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25f
TUFUQ0hfTk9ORSwKKyAgICAgICAgaW50ZXJmYWNlcywgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9B
TEwsCisgICAgICAgIEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0
X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCks
IEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIp
OworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludCht
YXRjaGVzLT5sZW4sID09LCAwKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisK
KyAgICAvLyBSdWxlIHRvIG1hdGNoIGFueSBvZiB0aGUgaW50ZXJmYWNlcy4KKyAgICBydWxlID0g
YWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorCW51bGxwdHIsIEFUU1BJX0NvbGxlY3Rp
b25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9O
T05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAg
ICAgIGludGVyZmFjZXMsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQU5ZLAorICAgICAgICBGQUxT
RSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NP
TExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9u
X1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9u
b25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwg
NCk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNz
aWJsZSosIDApID09IGgxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgo
bWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gcC5nZXQoKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDIpID09IGxpbmsx
LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlB
Y2Nlc3NpYmxlKiwgMykgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVz
LCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggbm9uZSBvZiB0aGUgaW50ZXJmYWNlcy4K
KyAgICBnX2FycmF5X3JlbW92ZV9yYW5nZShpbnRlcmZhY2VzLCAxLCAyKTsKKyAgICBydWxlID0g
YWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBudWxscHRyLCBBVFNQSV9D
b2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25f
TUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05F
LAorICAgICAgICBpbnRlcmZhY2VzLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAg
ICAgIEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMo
QVRTUElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0Nv
bGxlY3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdf
YXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5s
ZW4sID09LCAyKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRz
cGlBY2Nlc3NpYmxlKiwgMCkgPT0gaDEuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJh
eV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9PSBwLmdldCgpKTsKKyAgICBn
X2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisgICAgZ19hcnJheV9mcmVlKGludGVyZmFjZXMs
IFRSVUUpOworCisgICAgLy8gUnVsZSB0byBtYXRjaCBhbGwgc3RhdGVzLgorICAgIEdSZWZQdHI8
QXRzcGlTdGF0ZVNldD4gc2V0ID0gYWRvcHRHUmVmKGF0c3BpX3N0YXRlX3NldF9uZXcobnVsbHB0
cikpOworICAgIGF0c3BpX3N0YXRlX3NldF9hZGQoc2V0LmdldCgpLCBBVFNQSV9TVEFURV9TSE9X
SU5HKTsKKyAgICBhdHNwaV9zdGF0ZV9zZXRfYWRkKHNldC5nZXQoKSwgQVRTUElfU1RBVEVfRk9D
VVNBQkxFKTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAg
ICAgICBzZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAgICAgICBudWxs
cHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJ
X0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlv
bl9NQVRDSF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xs
ZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBy
dWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVF
LCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMik7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5
X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IGxpbmsxLmdldCgpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwg
MSkgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKwor
ICAgIC8vIEFkZGluZyBjaGVja2FibGUgc3RhdGUgdG8gbWFrZSB0aGUgbWF0Y2ggZmFpbC4KKyAg
ICBhdHNwaV9zdGF0ZV9zZXRfYWRkKHNldC5nZXQoKSwgQVRTUElfU1RBVEVfQ0hFQ0tBQkxFKTsK
KyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBzZXQu
Z2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAgICAgICBudWxscHRyLCBBVFNQ
SV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rp
b25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9O
T05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dl
dF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgp
LCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRy
KTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
bWF0Y2hlcy0+bGVuLCA9PSwgMCk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUpOwor
CisgICAgLy8gUnVsZSB0byBtYXRjaCBhbnkgb2YgdGhlIHN0YXRlcy4KKyAgICBydWxlID0gYWRv
cHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBzZXQuZ2V0KCksIEFUU1BJX0Nv
bGxlY3Rpb25fTUFUQ0hfQU5ZLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01B
VENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwK
KyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBG
QUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJ
X0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0
aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2Vy
dF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9
PSwgNCk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNj
ZXNzaWJsZSosIDApID09IGgxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5k
ZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gcC5nZXQoKSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDIpID09IGxp
bmsxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRz
cGlBY2Nlc3NpYmxlKiwgMykgPT0gbGluazIuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRj
aGVzLCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggbm9uZSBvZiB0aGUgc3RhdGVzLgor
ICAgIGF0c3BpX3N0YXRlX3NldF9yZW1vdmUoc2V0LmdldCgpLCBBVFNQSV9TVEFURV9DSEVDS0FC
TEUpOworICAgIGF0c3BpX3N0YXRlX3NldF9yZW1vdmUoc2V0LmdldCgpLCBBVFNQSV9TVEFURV9T
SE9XSU5HKTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAg
ICAgICBzZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVs
bHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRyLCBBVFNQ
SV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rp
b25fTUFUQ0hfTk9ORSwKKyAgICAgICAgRkFMU0UpKTsKKyAgICBtYXRjaGVzID0gYXRzcGlfY29s
bGVjdGlvbl9nZXRfbWF0Y2hlcyhBVFNQSV9DT0xMRUNUSU9OKGRvY3VtZW50V2ViLmdldCgpKSwg
cnVsZS5nZXQoKSwgQVRTUElfQ29sbGVjdGlvbl9TT1JUX09SREVSX0NBTk9OSUNBTCwgMCwgVFJV
RSwgbnVsbHB0cik7CisgICAgZ19hc3NlcnRfbm9ubnVsbChtYXRjaGVzKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KG1hdGNoZXMtPmxlbiwgPT0sIDIpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJh
eV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAwKSA9PSBoMS5nZXQoKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDEp
ID09IHAuZ2V0KCkpOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKworICAgIC8v
IFJ1bGUgdG8gbWF0Y2ggYWxsIHJvbGVzLgorICAgIHJvbGVzID0gZ19hcnJheV9zaXplZF9uZXco
RkFMU0UsIEZBTFNFLCBzaXplb2YoaW50KSwgMik7CisgICAgaW50IGhlYWRpbmdSb2xlID0gQVRT
UElfUk9MRV9IRUFESU5HOworICAgIGdfYXJyYXlfcHJlcGVuZF92YWwocm9sZXMsIGxpbmtSb2xl
KTsKKyAgICBnX2FycmF5X3ByZXBlbmRfdmFsKHJvbGVzLCBoZWFkaW5nUm9sZSk7CisgICAgcnVs
ZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRT
UElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0
aW9uX01BVENIX05PTkUsCisgICAgICAgIHJvbGVzLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX0FM
TCwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAg
ICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFU
U1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xs
ZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fz
c2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIC8vIE5vIG1hdGNoZXMgd2hlbiBtb3JlIHRoYW4g
b25lIHJvbGUgaXMgZ2l2ZW4gZm9yIE1BVENIX0FMTC4KKyAgICBnX2Fzc2VydF9jbXB1aW50KG1h
dGNoZXMtPmxlbiwgPT0sIDApOworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKwor
ICAgIC8vIFJ1bGUgdG8gbWF0Y2ggYW55IG9mIHRoZSByb2xlcy4KKyAgICBydWxlID0gYWRvcHRH
UmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0
aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hf
Tk9ORSwKKyAgICAgICAgcm9sZXMsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQU5ZLAorICAgICAg
ICBudWxscHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIEZBTFNFKSk7
CisgICAgbWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVD
VElPTihkb2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09S
VF9PUkRFUl9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51
bGwobWF0Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAzKTsK
KyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxl
KiwgMCkgPT0gaDEuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRj
aGVzLCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9PSBsaW5rMS5nZXQoKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDIpID09IGxpbmsy
LmdldCgpKTsKKyAgICBnX2FycmF5X2ZyZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICAvLyBSdWxl
IHRvIG1hdGNoIG5vbmUgb2YgdGhlIHJvbGVzLgorICAgIHJ1bGUgPSBhZG9wdEdSZWYoYXRzcGlf
bWF0Y2hfcnVsZV9uZXcoCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hf
Tk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAg
ICAgICByb2xlcywgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRy
LCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIEZBTFNFKSk7CisgICAgbWF0
Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihkb2N1
bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRFUl9D
QU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hl
cyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAxKTsKKyAgICBnX2Fz
c2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0g
cC5nZXQoKSk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUpOworCisgICAgZ19hcnJh
eV9mcmVlKHJvbGVzLCBUUlVFKTsKKworICAgIC8vIFJ1bGUgdG8gbWF0Y2ggYWxsIGF0dHJpYnV0
ZXMuCisgICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGdfaGFz
aF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX2ZyZWUp
KTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGF0dHJpYnV0ZXMuZ2V0KCksIGdfc3RyZHVwKCJ0
YWciKSwgZ19zdHJkdXAoImEiKSk7CisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9y
dWxlX25ldygKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAor
ICAgICAgICBhdHRyaWJ1dGVzLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX0FMTCwKKyAg
ICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxs
cHRyLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIEZBTFNFKSk7CisgICAg
bWF0Y2hlcyA9IGF0c3BpX2NvbGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihk
b2N1bWVudFdlYi5nZXQoKSksIHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRF
Ul9DQU5PTklDQUwsIDAsIFRSVUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0
Y2hlcyk7CisgICAgZ19hc3NlcnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAyKTsKKyAgICBn
X2Fzc2VydF90cnVlKGdfYXJyYXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkg
PT0gbGluazEuZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVz
LCBBdHNwaUFjY2Vzc2libGUqLCAxKSA9PSBsaW5rMi5nZXQoKSk7CisgICAgZ19hcnJheV9mcmVl
KG1hdGNoZXMsIFRSVUUpOworCisgICAgLy8gQWRkaW5nIGxldmVsIGF0dHJpYnV0ZSB0byBtYWtl
IHRoZSBtYXRjaCBmYWlsLgorICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoYXR0cmlidXRlcy5nZXQo
KSwgZ19zdHJkdXAoImxldmVsIiksIGdfc3RyZHVwKCIxIikpOworICAgIHJ1bGUgPSBhZG9wdEdS
ZWYoYXRzcGlfbWF0Y2hfcnVsZV9uZXcoCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rp
b25fTUFUQ0hfTk9ORSwKKyAgICAgICAgYXR0cmlidXRlcy5nZXQoKSwgQVRTUElfQ29sbGVjdGlv
bl9NQVRDSF9BTEwsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9O
RSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAg
ICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFU
U1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xs
ZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fz
c2VydF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVu
LCA9PSwgMCk7CisgICAgZ19hcnJheV9mcmVlKG1hdGNoZXMsIFRSVUUpOworCisgICAgLy8gUnVs
ZSB0byBtYXRjaCBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMuCisgICAgZ19oYXNoX3RhYmxlX2luc2Vy
dChhdHRyaWJ1dGVzLmdldCgpLCBnX3N0cmR1cCgibGV2ZWwiKSwgZ19zdHJkdXAoIjE6MjozOjQi
KSk7CisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAgICAgICAg
bnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBhdHRyaWJ1dGVz
LmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX0FOWSwKKyAgICAgICAgbnVsbHB0ciwgQVRT
UElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBudWxscHRyLCBBVFNQSV9Db2xsZWN0
aW9uX01BVENIX05PTkUsCisgICAgICAgIEZBTFNFKSk7CisgICAgbWF0Y2hlcyA9IGF0c3BpX2Nv
bGxlY3Rpb25fZ2V0X21hdGNoZXMoQVRTUElfQ09MTEVDVElPTihkb2N1bWVudFdlYi5nZXQoKSks
IHJ1bGUuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fU09SVF9PUkRFUl9DQU5PTklDQUwsIDAsIFRS
VUUsIG51bGxwdHIpOworICAgIGdfYXNzZXJ0X25vbm51bGwobWF0Y2hlcyk7CisgICAgZ19hc3Nl
cnRfY21wdWludChtYXRjaGVzLT5sZW4sID09LCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJy
YXlfaW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMCkgPT0gaDEuZ2V0KCkpOworICAg
IGdfYXNzZXJ0X3RydWUoZ19hcnJheV9pbmRleChtYXRjaGVzLCBBdHNwaUFjY2Vzc2libGUqLCAx
KSA9PSBsaW5rMS5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNo
ZXMsIEF0c3BpQWNjZXNzaWJsZSosIDIpID09IGxpbmsyLmdldCgpKTsKKyAgICBnX2FycmF5X2Zy
ZWUobWF0Y2hlcywgVFJVRSk7CisKKyAgICAvLyBSdWxlIHRvIG1hdGNoIG5vbmUgb2YgdGhlIGF0
dHJpYnV0ZXMuCisgICAgcnVsZSA9IGFkb3B0R1JlZihhdHNwaV9tYXRjaF9ydWxlX25ldygKKyAg
ICAgICAgbnVsbHB0ciwgQVRTUElfQ29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBhdHRy
aWJ1dGVzLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxw
dHIsIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgbnVsbHB0ciwgQVRTUElf
Q29sbGVjdGlvbl9NQVRDSF9OT05FLAorICAgICAgICBGQUxTRSkpOworICAgIG1hdGNoZXMgPSBh
dHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJX0NPTExFQ1RJT04oZG9jdW1lbnRXZWIu
Z2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FM
LCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2VydF9ub25udWxsKG1hdGNoZXMpOworICAg
IGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNjZXNzaWJsZSosIDApID09IHAuZ2V0KCkp
OworICAgIGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKKworICAgIC8vIENvbWJpbmVkIHJ1
bGUgdG8gZmluZCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRleHQuCisg
ICAgaW50ZXJmYWNlcyA9IGdfYXJyYXlfc2l6ZWRfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKGNo
YXIqKSwgMSk7CisgICAgZ19hcnJheV9hcHBlbmRfdmFsKGludGVyZmFjZXMsIHRleHRJbnRlcmZh
Y2UpOworICAgIHNldCA9IGFkb3B0R1JlZihhdHNwaV9zdGF0ZV9zZXRfbmV3KG51bGxwdHIpKTsK
KyAgICBhdHNwaV9zdGF0ZV9zZXRfYWRkKHNldC5nZXQoKSwgQVRTUElfU1RBVEVfRk9DVVNBQkxF
KTsKKyAgICBydWxlID0gYWRvcHRHUmVmKGF0c3BpX21hdGNoX3J1bGVfbmV3KAorICAgICAgICBz
ZXQuZ2V0KCksIEFUU1BJX0NvbGxlY3Rpb25fTUFUQ0hfQUxMLAorICAgICAgICBudWxscHRyLCBB
VFNQSV9Db2xsZWN0aW9uX01BVENIX05PTkUsCisgICAgICAgIG51bGxwdHIsIEFUU1BJX0NvbGxl
Y3Rpb25fTUFUQ0hfTk9ORSwKKyAgICAgICAgaW50ZXJmYWNlcywgQVRTUElfQ29sbGVjdGlvbl9N
QVRDSF9BTEwsCisgICAgICAgIEZBTFNFKSk7CisgICAgZ19hcnJheV9mcmVlKGludGVyZmFjZXMs
IFRSVUUpOworICAgIG1hdGNoZXMgPSBhdHNwaV9jb2xsZWN0aW9uX2dldF9tYXRjaGVzKEFUU1BJ
X0NPTExFQ1RJT04oZG9jdW1lbnRXZWIuZ2V0KCkpLCBydWxlLmdldCgpLCBBVFNQSV9Db2xsZWN0
aW9uX1NPUlRfT1JERVJfQ0FOT05JQ0FMLCAwLCBUUlVFLCBudWxscHRyKTsKKyAgICBnX2Fzc2Vy
dF9ub25udWxsKG1hdGNoZXMpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQobWF0Y2hlcy0+bGVuLCA9
PSwgMik7CisgICAgZ19hc3NlcnRfdHJ1ZShnX2FycmF5X2luZGV4KG1hdGNoZXMsIEF0c3BpQWNj
ZXNzaWJsZSosIDApID09IGxpbmsxLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfYXJyYXlf
aW5kZXgobWF0Y2hlcywgQXRzcGlBY2Nlc3NpYmxlKiwgMSkgPT0gbGluazIuZ2V0KCkpOworICAg
IGdfYXJyYXlfZnJlZShtYXRjaGVzLCBUUlVFKTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewog
ICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYWNjZXNz
aWJsZS9iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QWNjZXNzaWJsZUJhc2ljSGllcmFyY2h5KTsKQEAg
LTMwNzYsNiArMzQxMiw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBBY2Nlc3NpYmlsaXR5VGVz
dDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInNlbGVjdGlvbi9saXN0Ym94IiwgdGVzdFNl
bGVjdGlvbkxpc3RCb3gpOwogICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vz
c2liaWxpdHkiLCAic2VsZWN0aW9uL21lbnVsaXN0IiwgdGVzdFNlbGVjdGlvbk1lbnVMaXN0KTsK
ICAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgInRhYmxl
L2Jhc2ljIiwgdGVzdFRhYmxlQmFzaWMpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldl
YktpdEFjY2Vzc2liaWxpdHkiLCAiY29sbGVjdGlvbi9nZXQtbWF0Y2hlcyIsIHRlc3RDb2xsZWN0
aW9uR2V0TWF0Y2hlcyk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQotLSAKMi4zNS4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>