<?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>45927</bug_id>
          
          <creation_ts>2010-09-16 15:41:53 -0700</creation_ts>
          <short_desc>AX: CrashTracer: 1,382 crashes in Safari at com.apple.WebCore: WebCore::VisiblePosition::canonicalPosition + 78</short_desc>
          <delta_ts>2010-09-28 10:59:58 -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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>280410</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-16 15:41:53 -0700</bug_when>
    <thetext>A lot of crashes for this one.

What happens is when someone holds onto a AXTextMarker and then tries to do something with it after the node that the
text marker references is deallocated.

we need a way to know whether a node is gone or not before trying to make a VisiblePosition out of it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280417</commentid>
    <comment_count>1</comment_count>
      <attachid>67850</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-16 15:50:46 -0700</bug_when>
    <thetext>Created attachment 67850
patch

The solution in this patch is:


The AXObjectCache instance now keeps a HashSet of Node&apos;s being used. When a node becomes deallocated, it removes itself
from the HashSet. When creating a VisiblePosition from an AXTextMarker, the cache can then check if the node is valid
before proceeding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280421</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-16 15:57:30 -0700</bug_when>
    <thetext>Attachment 67850 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/dom/Node.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280424</commentid>
    <comment_count>3</comment_count>
      <attachid>67852</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-16 16:00:36 -0700</bug_when>
    <thetext>Created attachment 67852
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281261</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-18 23:22:33 -0700</bug_when>
    <thetext>The mac EWS hung processing this patch.  Suggesting it failed to build (we have a subprocess problem with our python, wherby if the subprocess -- in this case buildw-ebkit -- produces to much output, we deadlock.  Workign on a fix.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281431</commentid>
    <comment_count>5</comment_count>
      <attachid>67852</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-20 01:04:42 -0700</bug_when>
    <thetext>Comment on attachment 67852
patch

The EWS is hanging on this patch, suggesting it&apos;s a build failure.  I&apos;m still trying to diagnose the EWS hang and get you a build log, but for now i&apos;m setting r- to not hang the queue overnight.

If this builds fine on your mac, feel free to set r? again and if the queue hangs that&apos;s my fault and I&apos;ll deal. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281432</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-20 01:04:59 -0700</bug_when>
    <thetext>FYI the Mac EWS is currently Mac Leopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281433</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-20 01:06:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 67852 [details])
&gt; The EWS is hanging on this patch, suggesting it&apos;s a build failure.  I&apos;m still trying to diagnose the EWS hang and get you a build log, but for now i&apos;m setting r- to not hang the queue overnight.
&gt; 
&gt; If this builds fine on your mac, feel free to set r? again and if the queue hangs that&apos;s my fault and I&apos;ll deal. :)

SnowLeopard was building for me. Possible it was leopard related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281624</commentid>
    <comment_count>8</comment_count>
      <attachid>68101</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-20 10:09:41 -0700</bug_when>
    <thetext>Created attachment 68101
patch

had no problems compiling this morning after updating. let&apos;s see if this compiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281679</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-20 11:14:25 -0700</bug_when>
    <thetext>looks like it built on mac alright now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285969</commentid>
    <comment_count>10</comment_count>
      <attachid>68101</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-09-27 17:55:53 -0700</bug_when>
    <thetext>Comment on attachment 68101
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=68101&amp;action=review

&gt; WebCore/dom/Node.cpp:386
&gt; +        m_document-&gt;axObjectCache()-&gt;removeNodeForUse(this);

What&apos;s the performance impact of this? For whom is AXObjectCache::accessibilityEnabled() true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285974</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-27 18:01:33 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 68101 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68101&amp;action=review
&gt; 
&gt; &gt; WebCore/dom/Node.cpp:386
&gt; &gt; +        m_document-&gt;axObjectCache()-&gt;removeNodeForUse(this);
&gt; 
&gt; What&apos;s the performance impact of this? For whom is AXObjectCache::accessibilityEnabled() true?

Non that was noticeable. We&apos;re already doing the same thing for all RenderObjects, which hasn&apos;t proved to be a perf. bottleneck. so at worse this will be 2x what the RenderObject code imposes, but most likely will be less, since we don&apos;t need to actually store very many Nodes, so that HashMap will generally be small

accessibilityEnabled() only turns on when someone is using VoiceOver (or a screen reader) or using something accessing the accessibility info. so for the vast majority of customers, this is a no-op.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286377</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-28 10:59:58 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/68541</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67850</attachid>
            <date>2010-09-16 15:50:46 -0700</date>
            <delta_ts>2010-09-16 16:00:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>30095</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDktMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDcmFzaFRyYWNlcjogMSwzODIgY3Jhc2hlcyBpbiBTYWZhcmkgYXQgY29tLmFwcGxlLldlYkNv
cmU6IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXRpb24gKyA3OAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU5MjcKKworICAg
ICAgICBBWFRleHRNYXJrZXJzIHN0b3JlIHBvaW50ZXJzIHRvIE5vZGVzIHdpdGhvdXQgYW55IHJl
dGFpbiBvciByZWZlcmVuY2UuIElmIGEgTm9kZSBpcyBkZWFsbG9jYXRlZCBhbmQgdGhlbgorICAg
ICAgICBhIGNsaWVudCB0cmllcyB0byB1c2UgYSB0ZXh0IG1hcmtlciB0aGF0IHJlZmVyZW5jZXMg
dGhhdCBub2RlLCBpdCBsZWFkcyB0byB0aGlzIGNyYXNoLgorCisgICAgICAgIFRoZSBBWE9iamVj
dENhY2hlIGluc3RhbmNlIG5vdyBrZWVwcyBhIEhhc2hTZXQgb2YgTm9kZSdzIGJlaW5nIHVzZWQu
IFdoZW4gYSBub2RlIGJlY29tZXMgZGVhbGxvY2F0ZWQsIGl0IHJlbW92ZXMgaXRzZWxmCisgICAg
ICAgIGZyb20gdGhlIEhhc2hTZXQuIFdoZW4gY3JlYXRpbmcgYSBWaXNpYmxlUG9zaXRpb24gZnJv
bSBhbiBBWFRleHRNYXJrZXIsIHRoZSBjYWNoZSBjYW4gdGhlbiBjaGVjayBpZiB0aGUgbm9kZSBp
cyB2YWxpZAorICAgICAgICBiZWZvcmUgcHJvY2VlZGluZy4KKworICAgICAgICBUZXN0OiBwbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUuaHRt
bAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgICAgIE1vZGlmeSB0byBjaGVjayB3aGV0aGVyIGEgbm9k
ZSBpcyB2YWxpZCBiZWZvcmUgcHJvY2VlZWRpbmcuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzZXROb2Rl
SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlTm9kZUZvclVz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjppc05vZGVJblVzZSk6CisgICAg
ICAgICAgICBNZXRob2RzIGZvciBtYW5hZ2luZyB3aGV0aGVyIGEgbm9kZSBpcyBpbiB1c2UgYnkg
dGV4dCBtYXJrZXJzLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLm1tOgorICAgICAgICAodGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbik6
CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246XSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKToK
KyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjpdKToKKyAgICAgICAgKHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFu
Z2UpOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRl
ZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpdKToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6Cisg
ICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJh
bmdlOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAgICAgIENoYW5nZSB0
aGVzZSBjYWxscyBzbyB0aGF0IHRoZSBheE9iamVjdENhY2hlKCkgY2FuIGJlIHBhc3NlZCBpbiB0
byBjcmVhdGUgdGhlIHZpc2libGUgcG9zaXRpb24uCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlRXhpc3RzKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjp+Tm9kZSk6CisgICAgICAgICAgICAgSWYgYWNjZXNzaWJpbGl0eSBp
cyBlbmFibGVkLCBpbmZvcm0gdGhlIGF4T2JqZWN0Q2FjaGUoKSB0aGF0IHRoaXMgbm9kZSBpcyBk
aXNhcHBlYXJpbmcuCisKIDIwMTAtMDktMTYgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5n
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gNjc2NzUpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5NSw5ICs0OTUsMTIgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNo
YW5nZQogICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ob2Jq
KS0+dXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKIH0KICNlbmRpZgotICAgIAorCiBWaXNpYmxl
UG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEo
VGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhKQogeworICAgIGlmICghaXNOb2RlSW5Vc2Uo
dGV4dE1hcmtlckRhdGEubm9kZSkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
KyAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbih0
ZXh0TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFya2VyRGF0YS5vZmZzZXQsIHRleHRNYXJrZXJEYXRh
LmFmZmluaXR5KTsKICAgICBQb3NpdGlvbiBkZWVwUG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZh
bGVudCgpOwogICAgIGlmIChkZWVwUG9zLmlzTnVsbCgpKQpAQCAtNTQ5LDcgKzU1Miw5IEBAIHZv
aWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXMKICAgICB0ZXh0TWFya2VyRGF0
YS5heElEID0gb2JqLmdldCgpLT5heE9iamVjdElEKCk7CiAgICAgdGV4dE1hcmtlckRhdGEubm9k
ZSA9IGRvbU5vZGU7CiAgICAgdGV4dE1hcmtlckRhdGEub2Zmc2V0ID0gZGVlcFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOwotICAgIHRleHRNYXJrZXJEYXRhLmFmZmluaXR5ID0gdmlzaWJs
ZVBvcy5hZmZpbml0eSgpOyAgICAKKyAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSA9IHZpc2li
bGVQb3MuYWZmaW5pdHkoKTsgICAKKyAgICAKKyAgICBjYWNoZS0+c2V0Tm9kZUluVXNlKGRvbU5v
ZGUpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiA2NzY3NSkKKysrIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsMTQg
QEAgcHVibGljOgogICAgIEFYSUQgcGxhdGZvcm1HZW5lcmF0ZUFYSUQoKSBjb25zdDsKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RGcm9tQVhJRChBWElEIGlkKSBjb25zdCB7IHJldHVy
biBtX29iamVjdHMuZ2V0KGlkKS5nZXQoKTsgfQogCisgICAgLy8gVGhpcyBpcyBhIHdlYWsgcmVm
ZXJlbmNlIGNhY2hlIGZvciBrbm93aW5nIGlmIE5vZGVzIHVzZWQgYnkgVGV4dE1hcmtlcnMgYXJl
IHZhbGlkLgorICAgIHZvaWQgc2V0Tm9kZUluVXNlKE5vZGUqIG4pIHsgbV90ZXh0TWFya2VyTm9k
ZXMuYWRkKG4pOyB9CisgICAgdm9pZCByZW1vdmVOb2RlRm9yVXNlKE5vZGUqIG4pIHsgbV90ZXh0
TWFya2VyTm9kZXMucmVtb3ZlKG4pOyB9CisgICAgYm9vbCBpc05vZGVJblVzZShOb2RlKiBuKSB7
IHJldHVybiBtX3RleHRNYXJrZXJOb2Rlcy5jb250YWlucyhuKTsgfQorICAgIAogICAgIC8vIFRl
eHQgbWFya2VyIHV0aWxpdGllcy4KLSAgICBzdGF0aWMgdm9pZCB0ZXh0TWFya2VyRGF0YUZvclZp
c2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
ICAgIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRh
dGEoVGV4dE1hcmtlckRhdGEmKTsKKyAgICB2b2lkIHRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBv
c2l0aW9uKFRleHRNYXJrZXJEYXRhJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJE
YXRhJik7CiAKICAgICBlbnVtIEFYTm90aWZpY2F0aW9uIHsKICAgICAgICAgQVhBY3RpdmVEZXNj
ZW5kYW50Q2hhbmdlZCwKQEAgLTEzMSw2ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID4gbV9vYmplY3Rz
OwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQVhJRD4gbV9yZW5kZXJPYmplY3RNYXBwaW5n
OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fdGV4dE1hcmtlck5vZGVzOwogICAgIHN0YXRpYyBib29s
IGdBY2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVu
aGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CiAgICAgCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJl
dmlzaW9uIDY3Njc1KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE0LDM1ICsyMTQsNDkgQEAgLSAo
TlNWaWV3KilhdHRhY2htZW50VmlldwogICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmlnbm9y
ZWREZXNjZW5kYW50KHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CiB9CiAKLXN0YXRpYyBXZWJD
b3JlVGV4dE1hcmtlciogdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpCitzdGF0aWMgV2ViQ29yZVRleHRNYXJrZXIqIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvcykKIHsKKyAgICBBU1NFUlQoY2FjaGUpOworICAgIAogICAgIFRl
eHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJr
ZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxlUG9zKTsKKyAg
ICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEs
IHZpc2libGVQb3MpOwogICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKICAgICByZXR1cm4gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFj
dG9yeV0gdGV4dE1hcmtlcldpdGhCeXRlczomdGV4dE1hcmtlckRhdGEgbGVuZ3RoOnNpemVvZih0
ZXh0TWFya2VyRGF0YSldOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIoV2ViQ29yZVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCistIChXZWJD
b3JlVGV4dE1hcmtlciAqKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmKXZpc2libGVQb3MKK3sKKyAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKK30KKwor
c3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlLCBXZWJDb3JlVGV4dE1hcmtlciogdGV4dE1hcmtlcikKIHsKKyAgICBB
U1NFUlQoY2FjaGUpOworCiAgICAgaWYgKCF0ZXh0TWFya2VyKQogICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiAgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CiAgICAg
aWYgKCFbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBnZXRCeXRlczomdGV4dE1h
cmtlckRhdGEgZnJvbVRleHRNYXJrZXI6dGV4dE1hcmtlciBsZW5ndGg6c2l6ZW9mKHRleHRNYXJr
ZXJEYXRhKV0pCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKLSAgICBy
ZXR1cm4gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEodGV4
dE1hcmtlckRhdGEpOworICAgIHJldHVybiBjYWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlckRhdGEodGV4dE1hcmtlckRhdGEpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoV2ViQ29yZVRleHRNYXJrZXJS
YW5nZSogdGV4dE1hcmtlclJhbmdlKQorLSAoVmlzaWJsZVBvc2l0aW9uKXZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXI6KFdlYkNvcmVUZXh0TWFya2VyICopdGV4dE1hcmtlcgogewotICAgIHJl
dHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNo
YXJlZEZhY3RvcnldIHN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7Cisg
ICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIobV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKSwgdGV4dE1hcmtlcik7CiB9CiAKLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoV2ViQ29yZVRleHRNYXJrZXJSYW5nZSog
dGV4dE1hcmtlclJhbmdlKQorc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25G
b3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBXZWJDb3JlVGV4
dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIoW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gZW5k
T2ZUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CisgICAgcmV0dXJuIHZpc2libGVQ
b3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldIHN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7Cit9CisKK3N0
YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFu
Z2UoQVhPYmplY3RDYWNoZSAqY2FjaGUsIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRleHRNYXJr
ZXJSYW5nZSkKK3sKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNo
ZSwgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gZW5kT2ZUZXh0TWFya2VyUmFu
Z2U6dGV4dE1hcmtlclJhbmdlXSk7CiB9CiAKIHN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdl
KiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhXZWJDb3JlVGV4dE1hcmtlciogdGV4dE1hcmtl
cjEsIFdlYkNvcmVUZXh0TWFya2VyKiB0ZXh0TWFya2VyMikKQEAgLTUxMiwxMSArNTI2LDExIEBA
IC0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRTdHIKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKICAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3Np
dGlvbgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQ
b3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JT
dGFydE9mVGV4dE1hcmtlclJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJr
ZXJSYW5nZSk7CiAgICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbiA9
IHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRN
YXJrZXJSYW5nZSk7CiAgICAgaWYgKGVuZFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIApAQCAtNTYyLDEzICs1NzYsMTggQEAgLSAoTlNBdHRyaWJ1dGVkU3Ry
aW5nKilkb0FYQXR0cmlidXRlZFN0cgogICAgIHJldHVybiBbYXR0clN0cmluZyBhdXRvcmVsZWFz
ZV07CiB9CiAKLXN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFuZ2VG
cm9tVmlzaWJsZVBvc2l0aW9ucyhWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uKQorc3RhdGljIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRl
eHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBW
aXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
KQogewotICAgIFdlYkNvcmVUZXh0TWFya2VyKiBzdGFydFRleHRNYXJrZXIgPSB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwotICAgIFdlYkNvcmVUZXh0TWFya2Vy
KiBlbmRUZXh0TWFya2VyICAgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGVuZFBvc2l0
aW9uKTsKKyAgICBXZWJDb3JlVGV4dE1hcmtlciogc3RhcnRUZXh0TWFya2VyID0gdGV4dE1hcmtl
ckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3NpdGlvbik7CisgICAgV2ViQ29yZVRl
eHRNYXJrZXIqIGVuZFRleHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNh
Y2hlLCBlbmRQb3NpdGlvbik7CiAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJz
KHN0YXJ0VGV4dE1hcmtlciwgZW5kVGV4dE1hcmtlcik7CiB9CiAKKy0gKFdlYkNvcmVUZXh0TWFy
a2VyUmFuZ2UgKil0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooVmlzaWJsZVBv
c2l0aW9uKXN0YXJ0UG9zaXRpb24gZW5kUG9zaXRpb246KFZpc2libGVQb3NpdGlvbillbmRQb3Np
dGlvbgoreworICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyht
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Cit9
CisKIC0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lcwogewogICAgIGlmICghbV9v
YmplY3QpCkBAIC05ODIsNyArMTAwMSw4IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2li
bGVQb3NpdGlvblIKIHsKICAgICBpZiAoIXRleHRNYXJrZXJSYW5nZSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdl
KHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdl
KSwgdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdl
KSk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
OworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25Gb3JTdGFy
dE9mVGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpLCB2aXNpYmxlUG9zaXRp
b25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSk7CiB9CiAK
IC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENoaWxkcmVuCkBAIC0xMDI4LDcgKzEwNDgsNyBAQCAt
IChXZWJDb3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2VyUmFuCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnMoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpKTsKKyAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnM6c2VsZWN0aW9uLnZpc2libGVTdGFydCgpIGVuZFBvc2l0aW9uOnNlbGVj
dGlvbi52aXNpYmxlRW5kKCldOwogfQogCiAtIChOU1ZhbHVlKilwb3NpdGlvbgpAQCAtMTc4NCw5
ICsxODA0LDkgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXIiXSkKLSAgICAgICAgICAgIHJl
dHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0T2ZEb2N1bWVudChyZW5kZXJl
ci0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3VtZW50KHJlbmRlcmVyLT5kb2N1bWVudCgpKV07CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhFbmRUZXh0TWFy
a2VyIl0pCi0gICAgICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihl
bmRPZkRvY3VtZW50KHJlbmRlcmVyLT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjplbmRPZkRvY3VtZW50KHJlbmRlcmVy
LT5kb2N1bWVudCgpKV07CiAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGVdKQogICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmJsb2NrcXVvdGVMZXZlbChyZW5kZXJl
cildOwpAQCAtMjI5MCw3ICsyMzEwLDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0
cmlidXRlZFN0cgogewogICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IFBsYWluVGV4dFJh
bmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwogICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJh
bmdlKHRleHRSYW5nZSk7Ci0gICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHZpc2li
bGVQb3NSYW5nZS5zdGFydCwgdmlzaWJsZVBvc1JhbmdlLmVuZCldOworICAgIHJldHVybiBbc2Vs
ZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2Vy
UmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2aXNpYmxlUG9zUmFuZ2Uuc3RhcnQgZW5kUG9zaXRp
b246dmlzaWJsZVBvc1JhbmdlLmVuZF1dOwogfQogCiAvLyBUaGUgUlRGIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRo
YXQgaXMKQEAgLTIzNTMsNyArMjM3Myw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHIKICAgICAKICAgICAvLyBkaXNwYXRjaAogICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYVUlFbGVtZW50Rm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0
ZXh0TWFya2VyKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CiAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlPYmplY3RG
b3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKICAgICAgICAgaWYgKCFheE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBuaWw7CkBAIC0yMzYyLDE3ICsyMzgyLDE3IEBAIC0gKGlkKWFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHVpRWxlbWVudC5nZXQoKS0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBv
c2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBv
c2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWExpbmVGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJrZXIp
OworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKICAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxl
UG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhU
ZXh0TWFya2VyUmFuZ2VGb3JMaW5lIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dnBSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUoW251bWJlciBp
bnRWYWx1ZV0pOwotICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zKHZwUmFuZ2Uuc3RhcnQsIHZwUmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5k
UG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKQEAgLTIzODIsNyAr
MjQwMiw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKIAogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9u
Il0pIHsKICAgICAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwot
ICAgICAgICByZXR1cm4gcG9pbnRTZXQgPyB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1f
b2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludCh3ZWJDb3JlUG9pbnQpKSA6IG5pbDsKKyAg
ICAgICAgcmV0dXJuIHBvaW50U2V0ID8gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bjptX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQod2ViQ29yZVBvaW50KV0gOiBuaWw7
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNG
b3JUZXh0TWFya2VyUmFuZ2UiXSkgewpAQCAtMjQyMSwxMDIgKzI0NDEsMTAyIEBAIC0gKGlkKWFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgICAgIHx8ICFbW1dlYkNv
cmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBvYmplY3RJc1RleHRNYXJrZXI6dGV4dE1hcmtl
cjJdKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvczEgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJrZXIxKTsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MyID0gdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcih0ZXh0TWFya2VyMik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zMSA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIxKV07
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zMiA9IFtzZWxmIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIyKV07CiAgICAgICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVy
ZWRQb3NpdGlvbnModmlzaWJsZVBvczEsIHZpc2libGVQb3MyKTsKLSAgICAgICAgcmV0dXJuIChp
ZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJh
bmdlLmVuZCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0g
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAgICAgICAgcmV0dXJu
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPm5leHRWaXNpYmxlUG9zaXRp
b24odmlzaWJsZVBvcykpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRW
aXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb24obV9vYmplY3QtPnByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3Mp
KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1Zpc2libGVQb3Np
dGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhMZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0g
W3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwogICAgICAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBvc2l0aW9uT2ZMZWZ0
V29yZCh2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBv
c2l0aW9uT2ZSaWdodFdvcmQodmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQp
OworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlv
bnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0g
bV9vYmplY3QtPmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7Ci0gICAg
ICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5n
ZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdl
LmVuZF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhS
aWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRN
YXJrZXIpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5yaWdodExpbmVWaXNpYmxlUG9zaXRpb25S
YW5nZSh2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbnRlbmNlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
ciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2Vy
KV07CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+c2Vu
dGVuY2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7
CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9u
czp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0g
bV9vYmplY3QtPnBhcmFncmFwaEZvclBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICByZXR1
cm4gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHZwUmFuZ2Uuc3RhcnQs
IHZwUmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAg
ICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPm5leHRX
b3JkRW5kKHZpc2libGVQb3MpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Mg
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5u
ZXh0V29yZEVuZCh2aXNpYmxlUG9zKV07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPnByZXZpb3VzV29yZFN0YXJ0KHZpc2libGVQ
b3MpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1dvcmRTdGFy
dCh2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
KHRleHRNYXJrZXIpOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihtX29iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zKSk7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91
c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJr
ZXIpOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29iamVj
dC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKSk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9z
KV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0
U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFy
a2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmpl
Y3QtPm5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpKTsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
Oih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0U2VudGVuY2VFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91
c1NlbnRlbmNlU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0
TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9v
YmplY3QtPnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlv
bih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhOZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKG1fb2JqZWN0LT5uZXh0UGFyYWdyYXBoRW5kUG9zaXRpb24odmlzaWJsZVBvcykpOwor
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRQYXJhZ3JhcGhFbmRQb3NpdGlv
bih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhQcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkg
ewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRpb24odmlz
aWJsZVBvcykpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZpb3VzUGFy
YWdyYXBoU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnN0
eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0
TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVu
ZCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlbmd0aEZvclRleHRNYXJrZXJS
YW5nZSJdKSB7CkBAIC0yNTMwLDEyICsyNTUwLDEyIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTooTlNTdHIKICAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNv
IGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zUmFuZ2Uuc3RhcnRdOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRW5kVGV4dE1h
cmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKHZpc2libGVQb3NSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zUmFuZ2UuZW5kXTsKICAgICB9
CiAgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc4MSw2ICsxNzgxLDE4IEBAIHZvaWQgRG9jdW1lbnQ6OmNsZWFyQVhPYmplY3RD
YWNoZSgpCiAgICAgICAgIGRvYy0+Y2xlYXJBWE9iamVjdENhY2hlKCk7CiB9CiAKK2Jvb2wgRG9j
dW1lbnQ6OmF4T2JqZWN0Q2FjaGVFeGlzdHMoKSBjb25zdAoreworICAgIGlmIChtX2F4T2JqZWN0
Q2FjaGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIERvY3VtZW50KiBkb2MgPSB0
b3BEb2N1bWVudCgpOworICAgIGlmIChkb2MgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIGRvYy0+
YXhPYmplY3RDYWNoZUV4aXN0cygpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAK
IEFYT2JqZWN0Q2FjaGUqIERvY3VtZW50OjpheE9iamVjdENhY2hlKCkgY29uc3QKIHsKICAgICAv
LyBUaGUgb25seSBkb2N1bWVudCB0aGF0IGFjdHVhbGx5IGhhcyBhIEFYT2JqZWN0Q2FjaGUgaXMg
dGhlIHRvcC1sZXZlbApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMCw2ICs1MjAsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogICAgIEFYT2JqZWN0Q2FjaGUqIGF4T2Jq
ZWN0Q2FjaGUoKSBjb25zdDsKKyAgICBib29sIGF4T2JqZWN0Q2FjaGVFeGlzdHMoKSBjb25zdDsK
ICAgICAKICAgICAvLyB0byBnZXQgdmlzdWFsbHkgb3JkZXJlZCBoZWJyZXcgYW5kIGFyYWJpYyBw
YWdlcyByaWdodAogICAgIHZvaWQgc2V0VmlzdWFsbHlPcmRlcmVkKCk7CkluZGV4OiBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNp
b24gNjc1NjcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgor
I2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNs
dWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKQEAgLTM4MSw2ICszODIs
OSBAQCBOb2RlOjp+Tm9kZSgpCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIGRldGFjaCgp
OwogCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgbV9k
b2N1bWVudCAmJiBtX2RvY3VtZW50LT5heE9iamVjdENhY2hlRXhpc3RzKCkpCisgICAgICAgIG1f
ZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlTm9kZUZvclVzZSh0aGlzKTsKKyAgICAK
ICAgICBpZiAobV9wcmV2aW91cykKICAgICAgICAgbV9wcmV2aW91cy0+c2V0TmV4dFNpYmxpbmco
MCk7CiAgICAgaWYgKG1fbmV4dCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3Njc1KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDkt
MTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmFzaFRyYWNlcjogMSwzODIgY3Jh
c2hlcyBpbiBTYWZhcmkgYXQgY29tLmFwcGxlLldlYkNvcmU6IFdlYkNvcmU6OlZpc2libGVQb3Np
dGlvbjo6Y2Fub25pY2FsUG9zaXRpb24gKyA3OAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU5MjcKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2NyYXNoLWludmFsaWQtdGV4dC1tYXJrZXItbm9kZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NyYXNoLWludmFsaWQt
dGV4dC1tYXJrZXItbm9kZS5odG1sOiBBZGRlZC4KKwogMjAxMC0wOS0xNiAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5v
ZGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L2NyYXNoLWludmFsaWQtdGV4dC1tYXJrZXItbm9kZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9j
cmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwIEBACisKK1RoaXMgcHJvdGVjdHMgYWdhaW5zdCBhIGNyYXNoIHdoZW4gYSB0
ZXh0IG1hcmtlciBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSB0byBhIG5vZGUgdGhhdCdzIGJlZW4g
ZGVhbGxvY2F0ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jhc2gtaW52YWxpZC10ZXh0LW1hcmtlci1u
b2RlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvY3Jhc2gtaW52YWxpZC10ZXh0LW1hcmtlci1ub2RlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRl
eHQtbWFya2VyLW5vZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBm
YWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKwor
PGlmcmFtZSBpZD0iaWZyYW1lIiB3aWR0aD0xMDAgaGVpZ2h0PTEwMD48L2lmcmFtZT4KKworPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHByb3RlY3RzIGFnYWluc3QgYSBjcmFzaCB3aGVu
IGEgdGV4dCBtYXJrZXIgc3RpbGwgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSBub2RlIHRoYXQncyBi
ZWVuIGRlYWxsb2NhdGVkLiIpOworCisgICAgLy8gQWRkIGFuIGVsZW1lbnQgdGhhdCBhIHRleHQg
bWFya2VyIGNhbiBiZSByZXRyaWV2ZWQgZnJvbS4KKyAgICB2YXIgY29udGVudERvYyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWUiKS5jb250ZW50RG9jdW1lbnQ7IAorICAgIGNvbnRl
bnREb2MuYm9keS5pbm5lckhUTUwgPSAiPGgxIHRhYmluZGV4PScwJz5jb250ZW50PC9oMT4iOwor
CisgICAgLy8gVGFiIHRvIHRoZSBlbGVtZW50LiAKKyAgICAvLyBOb3RlOiBJZiB0aGUgZWxlbWVu
dCBoYXMgYW4gImlkIiBpdCB3b24ndCBnZXQgZGUtYWxsb2NhdGVkIGluIHRpbWUsIHNvIC5mb2N1
cygpIGNhbid0IGJlIHVzZWQuCisgICAgZXZlbnRTZW5kZXIua2V5RG93bigiXHQiKTsKKworICAg
IC8vIGdldCBhIG1hcmtlciB0aGF0IHdpbGwgYmVjb21lIGludmFsaWQgd2hlbiB0aGUgbm9kZSBk
aXNhcHBlYXJzLgorICAgIHZhciBheERpdiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3Vz
ZWRFbGVtZW50OworICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UgPSBheERpdi50ZXh0TWFya2VyUmFu
Z2VGb3JFbGVtZW50KGF4RGl2KTsKKyAgICB2YXIgaW52YWxpZE1hcmtlciA9IGF4RGl2LnN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworCis8L3Njcmlw
dD4KKworPHNjcmlwdD4KKyAgICAgLy8gV3JpdGUgbmV3IGNvbnRlbnQgdG8gY2F1c2UgYWxsIGNv
bnRlbnQgdG8gZGlzYXBwZWFyLgorICAgICBjb250ZW50RG9jLmJvZHkuaW5uZXJIVE1MID0gIjxo
Mj5uZXcgY29udGVudDwvaDI+IjsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgorICAgIC8vIEFjY2Vz
cyB0aGUgaW52YWxpZCBtYXJrZXIgKGl0IHNob3VsZCBub3QgY3Jhc2gpLgorICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJib2R5IikuZm9jdXMoKTsKKyAgICB2YXIgYm9keSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgYm9keS5hY2Nlc3NpYmlsaXR5
RWxlbWVudEZvclRleHRNYXJrZXIoaW52YWxpZE1hcmtlcik7CisKKyAgICBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67852</attachid>
            <date>2010-09-16 16:00:36 -0700</date>
            <delta_ts>2010-09-20 10:09:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>30087</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDktMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDcmFzaFRyYWNlcjogMSwzODIgY3Jhc2hlcyBpbiBTYWZhcmkgYXQgY29tLmFwcGxlLldlYkNv
cmU6IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXRpb24gKyA3OAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU5MjcKKworICAg
ICAgICBBWFRleHRNYXJrZXJzIHN0b3JlIHBvaW50ZXJzIHRvIE5vZGVzIHdpdGhvdXQgYW55IHJl
dGFpbiBvciByZWZlcmVuY2UuIElmIGEgTm9kZSBpcyBkZWFsbG9jYXRlZCBhbmQgdGhlbgorICAg
ICAgICBhIGNsaWVudCB0cmllcyB0byB1c2UgYSB0ZXh0IG1hcmtlciB0aGF0IHJlZmVyZW5jZXMg
dGhhdCBub2RlLCBpdCBsZWFkcyB0byB0aGlzIGNyYXNoLgorCisgICAgICAgIFRoZSBBWE9iamVj
dENhY2hlIGluc3RhbmNlIG5vdyBrZWVwcyBhIEhhc2hTZXQgb2YgTm9kZSdzIGJlaW5nIHVzZWQu
IFdoZW4gYSBub2RlIGJlY29tZXMgZGVhbGxvY2F0ZWQsIGl0IHJlbW92ZXMgaXRzZWxmCisgICAg
ICAgIGZyb20gdGhlIEhhc2hTZXQuIFdoZW4gY3JlYXRpbmcgYSBWaXNpYmxlUG9zaXRpb24gZnJv
bSBhbiBBWFRleHRNYXJrZXIsIHRoZSBjYWNoZSBjYW4gdGhlbiBjaGVjayBpZiB0aGUgbm9kZSBp
cyB2YWxpZAorICAgICAgICBiZWZvcmUgcHJvY2VlZGluZy4KKworICAgICAgICBUZXN0OiBwbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUuaHRt
bAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgICAgIE1vZGlmeSB0byBjaGVjayB3aGV0aGVyIGEgbm9k
ZSBpcyB2YWxpZCBiZWZvcmUgcHJvY2VlZWRpbmcuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzZXROb2Rl
SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlTm9kZUZvclVz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjppc05vZGVJblVzZSk6CisgICAg
ICAgICAgICBNZXRob2RzIGZvciBtYW5hZ2luZyB3aGV0aGVyIGEgbm9kZSBpcyBpbiB1c2UgYnkg
dGV4dCBtYXJrZXJzLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLm1tOgorICAgICAgICAodGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbik6
CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246XSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKToK
KyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjpdKToKKyAgICAgICAgKHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFu
Z2UpOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRl
ZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpdKToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6Cisg
ICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJh
bmdlOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAgICAgIENoYW5nZSB0
aGVzZSBjYWxscyBzbyB0aGF0IHRoZSBheE9iamVjdENhY2hlKCkgY2FuIGJlIHBhc3NlZCBpbiB0
byBjcmVhdGUgdGhlIHZpc2libGUgcG9zaXRpb24uCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlRXhpc3RzKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjp+Tm9kZSk6CisgICAgICAgICAgICAgSWYgYWNjZXNzaWJpbGl0eSBp
cyBlbmFibGVkLCBpbmZvcm0gdGhlIGF4T2JqZWN0Q2FjaGUoKSB0aGF0IHRoaXMgbm9kZSBpcyBk
aXNhcHBlYXJpbmcuCisKIDIwMTAtMDktMTYgIEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5n
QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gNjc2NzUpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5NSw5ICs0OTUsMTIgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVBcmlhUm9sZUNo
YW5nZQogICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4ob2Jq
KS0+dXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKIH0KICNlbmRpZgotICAgIAorCiBWaXNpYmxl
UG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEo
VGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhKQogeworICAgIGlmICghaXNOb2RlSW5Vc2Uo
dGV4dE1hcmtlckRhdGEubm9kZSkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
KyAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbih0
ZXh0TWFya2VyRGF0YS5ub2RlLCB0ZXh0TWFya2VyRGF0YS5vZmZzZXQsIHRleHRNYXJrZXJEYXRh
LmFmZmluaXR5KTsKICAgICBQb3NpdGlvbiBkZWVwUG9zID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZh
bGVudCgpOwogICAgIGlmIChkZWVwUG9zLmlzTnVsbCgpKQpAQCAtNTQ5LDcgKzU1Miw5IEBAIHZv
aWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXMKICAgICB0ZXh0TWFya2VyRGF0
YS5heElEID0gb2JqLmdldCgpLT5heE9iamVjdElEKCk7CiAgICAgdGV4dE1hcmtlckRhdGEubm9k
ZSA9IGRvbU5vZGU7CiAgICAgdGV4dE1hcmtlckRhdGEub2Zmc2V0ID0gZGVlcFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOwotICAgIHRleHRNYXJrZXJEYXRhLmFmZmluaXR5ID0gdmlzaWJs
ZVBvcy5hZmZpbml0eSgpOyAgICAKKyAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSA9IHZpc2li
bGVQb3MuYWZmaW5pdHkoKTsgICAKKyAgICAKKyAgICBjYWNoZS0+c2V0Tm9kZUluVXNlKGRvbU5v
ZGUpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiA2NzY3NSkKKysrIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsMTQg
QEAgcHVibGljOgogICAgIEFYSUQgcGxhdGZvcm1HZW5lcmF0ZUFYSUQoKSBjb25zdDsKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RGcm9tQVhJRChBWElEIGlkKSBjb25zdCB7IHJldHVy
biBtX29iamVjdHMuZ2V0KGlkKS5nZXQoKTsgfQogCisgICAgLy8gVGhpcyBpcyBhIHdlYWsgcmVm
ZXJlbmNlIGNhY2hlIGZvciBrbm93aW5nIGlmIE5vZGVzIHVzZWQgYnkgVGV4dE1hcmtlcnMgYXJl
IHZhbGlkLgorICAgIHZvaWQgc2V0Tm9kZUluVXNlKE5vZGUqIG4pIHsgbV90ZXh0TWFya2VyTm9k
ZXMuYWRkKG4pOyB9CisgICAgdm9pZCByZW1vdmVOb2RlRm9yVXNlKE5vZGUqIG4pIHsgbV90ZXh0
TWFya2VyTm9kZXMucmVtb3ZlKG4pOyB9CisgICAgYm9vbCBpc05vZGVJblVzZShOb2RlKiBuKSB7
IHJldHVybiBtX3RleHRNYXJrZXJOb2Rlcy5jb250YWlucyhuKTsgfQorICAgIAogICAgIC8vIFRl
eHQgbWFya2VyIHV0aWxpdGllcy4KLSAgICBzdGF0aWMgdm9pZCB0ZXh0TWFya2VyRGF0YUZvclZp
c2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
ICAgIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRh
dGEoVGV4dE1hcmtlckRhdGEmKTsKKyAgICB2b2lkIHRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBv
c2l0aW9uKFRleHRNYXJrZXJEYXRhJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJE
YXRhJik7CiAKICAgICBlbnVtIEFYTm90aWZpY2F0aW9uIHsKICAgICAgICAgQVhBY3RpdmVEZXNj
ZW5kYW50Q2hhbmdlZCwKQEAgLTEzMSw2ICsxMzYsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID4gbV9vYmplY3Rz
OwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQVhJRD4gbV9yZW5kZXJPYmplY3RNYXBwaW5n
OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fdGV4dE1hcmtlck5vZGVzOwogICAgIHN0YXRpYyBib29s
IGdBY2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVu
aGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CiAgICAgCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJl
dmlzaW9uIDY3Njc1KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjE0LDM1ICsyMTQsNDkgQEAgLSAo
TlNWaWV3KilhdHRhY2htZW50VmlldwogICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlVbmlnbm9y
ZWREZXNjZW5kYW50KHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSk7CiB9CiAKLXN0YXRpYyBXZWJD
b3JlVGV4dE1hcmtlciogdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpCitzdGF0aWMgV2ViQ29yZVRleHRNYXJrZXIqIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvcykKIHsKKyAgICBBU1NFUlQoY2FjaGUpOworICAgIAogICAgIFRl
eHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJr
ZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNpYmxlUG9zKTsKKyAg
ICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24odGV4dE1hcmtlckRhdGEs
IHZpc2libGVQb3MpOwogICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKICAgICByZXR1cm4gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFj
dG9yeV0gdGV4dE1hcmtlcldpdGhCeXRlczomdGV4dE1hcmtlckRhdGEgbGVuZ3RoOnNpemVvZih0
ZXh0TWFya2VyRGF0YSldOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIoV2ViQ29yZVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCistIChXZWJD
b3JlVGV4dE1hcmtlciAqKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmKXZpc2libGVQb3MKK3sKKyAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxlUG9zKTsKK30KKwor
c3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlLCBXZWJDb3JlVGV4dE1hcmtlciogdGV4dE1hcmtlcikKIHsKKyAgICBB
U1NFUlQoY2FjaGUpOworCiAgICAgaWYgKCF0ZXh0TWFya2VyKQogICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiAgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CiAgICAg
aWYgKCFbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBnZXRCeXRlczomdGV4dE1h
cmtlckRhdGEgZnJvbVRleHRNYXJrZXI6dGV4dE1hcmtlciBsZW5ndGg6c2l6ZW9mKHRleHRNYXJr
ZXJEYXRhKV0pCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKLSAgICBy
ZXR1cm4gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEodGV4
dE1hcmtlckRhdGEpOworICAgIHJldHVybiBjYWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlckRhdGEodGV4dE1hcmtlckRhdGEpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoV2ViQ29yZVRleHRNYXJrZXJS
YW5nZSogdGV4dE1hcmtlclJhbmdlKQorLSAoVmlzaWJsZVBvc2l0aW9uKXZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXI6KFdlYkNvcmVUZXh0TWFya2VyICopdGV4dE1hcmtlcgogewotICAgIHJl
dHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNo
YXJlZEZhY3RvcnldIHN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7Cisg
ICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIobV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKSwgdGV4dE1hcmtlcik7CiB9CiAKLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoV2ViQ29yZVRleHRNYXJrZXJSYW5nZSog
dGV4dE1hcmtlclJhbmdlKQorc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25G
b3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBXZWJDb3JlVGV4
dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIoW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gZW5k
T2ZUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7CisgICAgcmV0dXJuIHZpc2libGVQ
b3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldIHN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXSk7Cit9CisKK3N0
YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFu
Z2UoQVhPYmplY3RDYWNoZSAqY2FjaGUsIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRleHRNYXJr
ZXJSYW5nZSkKK3sKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNo
ZSwgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gZW5kT2ZUZXh0TWFya2VyUmFu
Z2U6dGV4dE1hcmtlclJhbmdlXSk7CiB9CiAKIHN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdl
KiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhXZWJDb3JlVGV4dE1hcmtlciogdGV4dE1hcmtl
cjEsIFdlYkNvcmVUZXh0TWFya2VyKiB0ZXh0TWFya2VyMikKQEAgLTUxMiwxMSArNTI2LDExIEBA
IC0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRTdHIKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKICAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3Np
dGlvbgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQ
b3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JT
dGFydE9mVGV4dE1hcmtlclJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJr
ZXJSYW5nZSk7CiAgICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbiA9
IHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7
CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRN
YXJrZXJSYW5nZSk7CiAgICAgaWYgKGVuZFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIApAQCAtNTYyLDEzICs1NzYsMTggQEAgLSAoTlNBdHRyaWJ1dGVkU3Ry
aW5nKilkb0FYQXR0cmlidXRlZFN0cgogICAgIHJldHVybiBbYXR0clN0cmluZyBhdXRvcmVsZWFz
ZV07CiB9CiAKLXN0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFuZ2VG
cm9tVmlzaWJsZVBvc2l0aW9ucyhWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uKQorc3RhdGljIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRl
eHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBW
aXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
KQogewotICAgIFdlYkNvcmVUZXh0TWFya2VyKiBzdGFydFRleHRNYXJrZXIgPSB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwotICAgIFdlYkNvcmVUZXh0TWFya2Vy
KiBlbmRUZXh0TWFya2VyICAgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGVuZFBvc2l0
aW9uKTsKKyAgICBXZWJDb3JlVGV4dE1hcmtlciogc3RhcnRUZXh0TWFya2VyID0gdGV4dE1hcmtl
ckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3NpdGlvbik7CisgICAgV2ViQ29yZVRl
eHRNYXJrZXIqIGVuZFRleHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNh
Y2hlLCBlbmRQb3NpdGlvbik7CiAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJz
KHN0YXJ0VGV4dE1hcmtlciwgZW5kVGV4dE1hcmtlcik7CiB9CiAKKy0gKFdlYkNvcmVUZXh0TWFy
a2VyUmFuZ2UgKil0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczooVmlzaWJsZVBv
c2l0aW9uKXN0YXJ0UG9zaXRpb24gZW5kUG9zaXRpb246KFZpc2libGVQb3NpdGlvbillbmRQb3Np
dGlvbgoreworICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyht
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Cit9
CisKIC0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBY3Rpb25OYW1lcwogewogICAgIGlmICghbV9v
YmplY3QpCkBAIC05ODIsNyArMTAwMSw4IEBAIC0gKFZpc2libGVQb3NpdGlvblJhbmdlKXZpc2li
bGVQb3NpdGlvblIKIHsKICAgICBpZiAoIXRleHRNYXJrZXJSYW5nZSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvblJhbmdlKCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdl
KHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdl
KSwgdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdl
KSk7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
OworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25Gb3JTdGFy
dE9mVGV4dE1hcmtlclJhbmdlKGNhY2hlLCB0ZXh0TWFya2VyUmFuZ2UpLCB2aXNpYmxlUG9zaXRp
b25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSk7CiB9CiAK
IC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENoaWxkcmVuCkBAIC0xMDI4LDcgKzEwNDgsNyBAQCAt
IChXZWJDb3JlVGV4dE1hcmtlclJhbmdlKil0ZXh0TWFya2VyUmFuCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnMoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpKTsKKyAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnM6c2VsZWN0aW9uLnZpc2libGVTdGFydCgpIGVuZFBvc2l0aW9uOnNlbGVj
dGlvbi52aXNpYmxlRW5kKCldOwogfQogCiAtIChOU1ZhbHVlKilwb3NpdGlvbgpAQCAtMTc4NCw5
ICsxODA0LDkgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXIiXSkKLSAgICAgICAgICAgIHJl
dHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0T2ZEb2N1bWVudChyZW5kZXJl
ci0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb246c3RhcnRPZkRvY3VtZW50KHJlbmRlcmVyLT5kb2N1bWVudCgpKV07CiAg
ICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhFbmRUZXh0TWFy
a2VyIl0pCi0gICAgICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihl
bmRPZkRvY3VtZW50KHJlbmRlcmVyLT5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjplbmRPZkRvY3VtZW50KHJlbmRlcmVy
LT5kb2N1bWVudCgpKV07CiAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlCbG9ja1F1b3RlTGV2ZWxBdHRyaWJ1dGVdKQogICAgICAgICAg
ICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50OmJsb2NrcXVvdGVMZXZlbChyZW5kZXJl
cildOwpAQCAtMjI5MCw3ICsyMzEwLDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0
cmlidXRlZFN0cgogewogICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZSA9IFBsYWluVGV4dFJh
bmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwogICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJh
bmdlKHRleHRSYW5nZSk7Ci0gICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHZpc2li
bGVQb3NSYW5nZS5zdGFydCwgdmlzaWJsZVBvc1JhbmdlLmVuZCldOworICAgIHJldHVybiBbc2Vs
ZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2Vy
UmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2aXNpYmxlUG9zUmFuZ2Uuc3RhcnQgZW5kUG9zaXRp
b246dmlzaWJsZVBvc1JhbmdlLmVuZF1dOwogfQogCiAvLyBUaGUgUlRGIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRo
YXQgaXMKQEAgLTIzNTMsNyArMjM3Myw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHIKICAgICAKICAgICAvLyBkaXNwYXRjaAogICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYVUlFbGVtZW50Rm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0
ZXh0TWFya2VyKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CiAgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlPYmplY3RG
b3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKICAgICAgICAgaWYgKCFheE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBuaWw7CkBAIC0yMzYyLDE3ICsyMzgyLDE3IEBAIC0gKGlkKWFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IHVpRWxlbWVudC5nZXQoKS0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBv
c2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBv
c2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWExpbmVGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJrZXIp
OworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKICAgICAgICAgcmV0dXJuIFtOU051bWJl
ciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6bV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNpYmxl
UG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhU
ZXh0TWFya2VyUmFuZ2VGb3JMaW5lIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dnBSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUoW251bWJlciBp
bnRWYWx1ZV0pOwotICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zKHZwUmFuZ2Uuc3RhcnQsIHZwUmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5k
UG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKQEAgLTIzODIsNyAr
MjQwMiw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKIAogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9u
Il0pIHsKICAgICAgICAgSW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwot
ICAgICAgICByZXR1cm4gcG9pbnRTZXQgPyB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1f
b2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludCh3ZWJDb3JlUG9pbnQpKSA6IG5pbDsKKyAg
ICAgICAgcmV0dXJuIHBvaW50U2V0ID8gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bjptX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQod2ViQ29yZVBvaW50KV0gOiBuaWw7
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNG
b3JUZXh0TWFya2VyUmFuZ2UiXSkgewpAQCAtMjQyMSwxMDIgKzI0NDEsMTAyIEBAIC0gKGlkKWFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgICAgIHx8ICFbW1dlYkNv
cmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBvYmplY3RJc1RleHRNYXJrZXI6dGV4dE1hcmtl
cjJdKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvczEgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJrZXIxKTsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MyID0gdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcih0ZXh0TWFya2VyMik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zMSA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIxKV07
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zMiA9IFtzZWxmIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIyKV07CiAgICAgICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVy
ZWRQb3NpdGlvbnModmlzaWJsZVBvczEsIHZpc2libGVQb3MyKTsKLSAgICAgICAgcmV0dXJuIChp
ZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJh
bmdlLmVuZCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0g
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAgICAgICAgcmV0dXJu
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPm5leHRWaXNpYmxlUG9zaXRp
b24odmlzaWJsZVBvcykpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRW
aXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb24obV9vYmplY3QtPnByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3Mp
KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1Zpc2libGVQb3Np
dGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhMZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0g
W3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwogICAgICAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBvc2l0aW9uT2ZMZWZ0
V29yZCh2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBv
c2l0aW9uT2ZSaWdodFdvcmQodmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQp
OworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlv
bnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0g
bV9vYmplY3QtPmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvcyk7Ci0gICAg
ICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5n
ZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdl
LmVuZF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhS
aWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRN
YXJrZXIpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2li
bGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5yaWdodExpbmVWaXNpYmxlUG9zaXRpb25S
YW5nZSh2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbnRlbmNlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
ciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2Vy
KV07CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+c2Vu
dGVuY2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7
CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9u
czp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0g
bV9vYmplY3QtPnBhcmFncmFwaEZvclBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICByZXR1
cm4gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHZwUmFuZ2Uuc3RhcnQs
IHZwUmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAg
ICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPm5leHRX
b3JkRW5kKHZpc2libGVQb3MpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Mg
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5u
ZXh0V29yZEVuZCh2aXNpYmxlUG9zKV07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPnByZXZpb3VzV29yZFN0YXJ0KHZpc2libGVQ
b3MpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1dvcmRTdGFy
dCh2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
KHRleHRNYXJrZXIpOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihtX29iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zKSk7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dExpbmVFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91
c0xpbmVTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJr
ZXIpOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29iamVj
dC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKSk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9z
KV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0
U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFy
a2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmpl
Y3QtPm5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKHZpc2libGVQb3MpKTsKKyAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
Oih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0U2VudGVuY2VFbmRQb3NpdGlvbih2aXNpYmxlUG9zKV07
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91
c1NlbnRlbmNlU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0
TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9v
YmplY3QtPnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKHZpc2libGVQb3MpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlv
bih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhOZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKG1fb2JqZWN0LT5uZXh0UGFyYWdyYXBoRW5kUG9zaXRpb24odmlzaWJsZVBvcykpOwor
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPm5leHRQYXJhZ3JhcGhFbmRQb3NpdGlv
bih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhQcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkg
ewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRpb24odmlz
aWJsZVBvcykpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnByZXZpb3VzUGFy
YWdyYXBoU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07CiAgICAgfQogCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJr
ZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtl
cildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnN0
eWxlUmFuZ2VGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0
TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVu
ZCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlbmd0aEZvclRleHRNYXJrZXJS
YW5nZSJdKSB7CkBAIC0yNTMwLDEyICsyNTUwLDEyIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTooTlNTdHIKICAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNv
IGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zUmFuZ2Uuc3RhcnRdOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRW5kVGV4dE1h
cmtlckZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHZpc2libGVQb3NSYW5nZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKHZpc2libGVQb3NSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zUmFuZ2UuZW5kXTsKICAgICB9
CiAgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CkluZGV4OiBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc4MSw2ICsxNzgxLDE4IEBAIHZvaWQgRG9jdW1lbnQ6OmNsZWFyQVhPYmplY3RD
YWNoZSgpCiAgICAgICAgIGRvYy0+Y2xlYXJBWE9iamVjdENhY2hlKCk7CiB9CiAKK2Jvb2wgRG9j
dW1lbnQ6OmF4T2JqZWN0Q2FjaGVFeGlzdHMoKSBjb25zdAoreworICAgIGlmIChtX2F4T2JqZWN0
Q2FjaGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIERvY3VtZW50KiBkb2MgPSB0
b3BEb2N1bWVudCgpOworICAgIGlmIChkb2MgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIGRvYy0+
YXhPYmplY3RDYWNoZUV4aXN0cygpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAK
IEFYT2JqZWN0Q2FjaGUqIERvY3VtZW50OjpheE9iamVjdENhY2hlKCkgY29uc3QKIHsKICAgICAv
LyBUaGUgb25seSBkb2N1bWVudCB0aGF0IGFjdHVhbGx5IGhhcyBhIEFYT2JqZWN0Q2FjaGUgaXMg
dGhlIHRvcC1sZXZlbApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMCw2ICs1MjAsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogICAgIEFYT2JqZWN0Q2FjaGUqIGF4T2Jq
ZWN0Q2FjaGUoKSBjb25zdDsKKyAgICBib29sIGF4T2JqZWN0Q2FjaGVFeGlzdHMoKSBjb25zdDsK
ICAgICAKICAgICAvLyB0byBnZXQgdmlzdWFsbHkgb3JkZXJlZCBoZWJyZXcgYW5kIGFyYWJpYyBw
YWdlcyByaWdodAogICAgIHZvaWQgc2V0VmlzdWFsbHlPcmRlcmVkKCk7CkluZGV4OiBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNp
b24gNjc1NjcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKIAorI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0
cmlidXRlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCkBAIC0zODEsNiArMzgyLDkgQEAgTm9k
ZTo6fk5vZGUoKQogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICBkZXRhY2goKTsKIAorICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fZG9jdW1lbnQg
JiYgbV9kb2N1bWVudC0+YXhPYmplY3RDYWNoZUV4aXN0cygpKQorICAgICAgICBtX2RvY3VtZW50
LT5heE9iamVjdENhY2hlKCktPnJlbW92ZU5vZGVGb3JVc2UodGhpcyk7CisgICAgCiAgICAgaWYg
KG1fcHJldmlvdXMpCiAgICAgICAgIG1fcHJldmlvdXMtPnNldE5leHRTaWJsaW5nKDApOwogICAg
IGlmIChtX25leHQpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzY3NSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA5LTE2ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Jhc2hUcmFjZXI6IDEsMzgyIGNyYXNoZXMgaW4g
U2FmYXJpIGF0IGNvbS5hcHBsZS5XZWJDb3JlOiBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmNh
bm9uaWNhbFBvc2l0aW9uICsgNzgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ1OTI3CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFy
a2VyLW5vZGUuaHRtbDogQWRkZWQuCisKIDIwMTAtMDktMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29v
Z2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jhc2gtaW52YWxpZC10ZXh0LW1hcmtlci1ub2RlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jhc2gtaW52
YWxpZC10ZXh0LW1hcmtlci1ub2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMCBAQAorCitUaGlzIHByb3RlY3RzIGFnYWluc3QgYSBjcmFzaCB3aGVuIGEgdGV4dCBtYXJr
ZXIgc3RpbGwgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSBub2RlIHRoYXQncyBiZWVuIGRlYWxsb2Nh
dGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NyYXNoLWludmFsaWQtdGV4dC1tYXJrZXItbm9kZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2Ny
YXNoLWludmFsaWQtdGV4dC1tYXJrZXItbm9kZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jhc2gtaW52YWxpZC10ZXh0LW1hcmtl
ci1ub2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxpZnJhbWUg
aWQ9ImlmcmFtZSIgd2lkdGg9MTAwIGhlaWdodD0xMDA+PC9pZnJhbWU+CisKKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGEgY3Jhc2ggd2hlbiBhIHRleHQg
bWFya2VyIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSB0aGF0J3MgYmVlbiBkZWFs
bG9jYXRlZC4iKTsKKworICAgIC8vIEFkZCBhbiBlbGVtZW50IHRoYXQgYSB0ZXh0IG1hcmtlciBj
YW4gYmUgcmV0cmlldmVkIGZyb20uCisgICAgdmFyIGNvbnRlbnREb2MgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaWZyYW1lIikuY29udGVudERvY3VtZW50OyAKKyAgICBjb250ZW50RG9jLmJv
ZHkuaW5uZXJIVE1MID0gIjxoMSB0YWJpbmRleD0nMCc+Y29udGVudDwvaDE+IjsKKworICAgIC8v
IFRhYiB0byB0aGUgZWxlbWVudC4gCisgICAgLy8gTm90ZTogSWYgdGhlIGVsZW1lbnQgaGFzIGFu
ICJpZCIgaXQgd29uJ3QgZ2V0IGRlLWFsbG9jYXRlZCBpbiB0aW1lLCBzbyAuZm9jdXMoKSBjYW4n
dCBiZSB1c2VkLgorICAgIGV2ZW50U2VuZGVyLmtleURvd24oIlx0Iik7CisKKyAgICAvLyBnZXQg
YSBtYXJrZXIgdGhhdCB3aWxsIGJlY29tZSBpbnZhbGlkIHdoZW4gdGhlIG5vZGUgZGlzYXBwZWFy
cy4KKyAgICB2YXIgYXhEaXYgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVu
dDsKKyAgICB2YXIgdGV4dE1hcmtlclJhbmdlID0gYXhEaXYudGV4dE1hcmtlclJhbmdlRm9yRWxl
bWVudChheERpdik7CisgICAgdmFyIGludmFsaWRNYXJrZXIgPSBheERpdi5zdGFydFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKworPC9zY3JpcHQ+CisKKzxz
Y3JpcHQ+CisgICAgIC8vIFdyaXRlIG5ldyBjb250ZW50IHRvIGNhdXNlIGFsbCBjb250ZW50IHRv
IGRpc2FwcGVhci4KKyAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9ICI8aDI+bmV3IGNv
bnRlbnQ8L2gyPiI7Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgICAvLyBBY2Nlc3MgdGhlIGlu
dmFsaWQgbWFya2VyIChpdCBzaG91bGQgbm90IGNyYXNoKS4KKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYm9keSIpLmZvY3VzKCk7CisgICAgdmFyIGJvZHkgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgIGJvZHkuYWNjZXNzaWJpbGl0eUVsZW1lbnRG
b3JUZXh0TWFya2VyKGludmFsaWRNYXJrZXIpOworCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="57275"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68101</attachid>
            <date>2010-09-20 10:09:41 -0700</date>
            <delta_ts>2010-09-28 10:24:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>30160</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzg1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMDktMTYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDcmFzaFRyYWNlcjogMSwzODIgY3Jhc2hlcyBpbiBTYWZhcmkgYXQgY29tLmFwcGxlLldlYkNv
cmU6IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXRpb24gKyA3OAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU5MjcKKworICAg
ICAgICBBWFRleHRNYXJrZXJzIHN0b3JlIHBvaW50ZXJzIHRvIE5vZGVzIHdpdGhvdXQgYW55IHJl
dGFpbiBvciByZWZlcmVuY2UuIElmIGEgTm9kZSBpcyBkZWFsbG9jYXRlZCBhbmQgdGhlbgorICAg
ICAgICBhIGNsaWVudCB0cmllcyB0byB1c2UgYSB0ZXh0IG1hcmtlciB0aGF0IHJlZmVyZW5jZXMg
dGhhdCBub2RlLCBpdCBsZWFkcyB0byB0aGlzIGNyYXNoLgorCisgICAgICAgIFRoZSBBWE9iamVj
dENhY2hlIGluc3RhbmNlIG5vdyBrZWVwcyBhIEhhc2hTZXQgb2YgTm9kZSdzIGJlaW5nIHVzZWQu
IFdoZW4gYSBub2RlIGJlY29tZXMgZGVhbGxvY2F0ZWQsIGl0IHJlbW92ZXMgaXRzZWxmCisgICAg
ICAgIGZyb20gdGhlIEhhc2hTZXQuIFdoZW4gY3JlYXRpbmcgYSBWaXNpYmxlUG9zaXRpb24gZnJv
bSBhbiBBWFRleHRNYXJrZXIsIHRoZSBjYWNoZSBjYW4gdGhlbiBjaGVjayBpZiB0aGUgbm9kZSBp
cyB2YWxpZAorICAgICAgICBiZWZvcmUgcHJvY2VlZGluZy4KKworICAgICAgICBUZXN0OiBwbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUuaHRt
bAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yVmlz
aWJsZVBvc2l0aW9uKToKKyAgICAgICAgICAgIE1vZGlmeSB0byBjaGVjayB3aGV0aGVyIGEgbm9k
ZSBpcyB2YWxpZCBiZWZvcmUgcHJvY2VlZWRpbmcuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzZXROb2Rl
SW5Vc2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlTm9kZUZvclVz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjppc05vZGVJblVzZSk6CisgICAg
ICAgICAgICBNZXRob2RzIGZvciBtYW5hZ2luZyB3aGV0aGVyIGEgbm9kZSBpcyBpbiB1c2UgYnkg
dGV4dCBtYXJrZXJzLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLm1tOgorICAgICAgICAodGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbik6
CisgICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246XSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKToK
KyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjpdKToKKyAgICAgICAgKHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFu
Z2UpOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRl
ZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpdKToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6Cisg
ICAgICAgICgtW0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorICAgICAg
ICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJh
bmdlOl0pOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAgICAgIENoYW5nZSB0
aGVzZSBjYWxscyBzbyB0aGF0IHRoZSBheE9iamVjdENhY2hlKCkgY2FuIGJlIHBhc3NlZCBpbiB0
byBjcmVhdGUgdGhlIHZpc2libGUgcG9zaXRpb24uCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpheE9iamVjdENhY2hlRXhpc3RzKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjp+Tm9kZSk6CisgICAgICAgICAgICAgSWYgYWNjZXNzaWJpbGl0eSBp
cyBlbmFibGVkLCBpbmZvcm0gdGhlIGF4T2JqZWN0Q2FjaGUoKSB0aGF0IHRoaXMgbm9kZSBpcyBk
aXNhcHBlYXJpbmcuCisKIDIwMTAtMDktMjAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBh
cm9nYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDY3ODU2KQorKysgV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OTUsOSArNDk1LDEyIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYVJvbGVDaGFuZ2UK
ICAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KG9iaiktPnVw
ZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCk7CiB9CiAjZW5kaWYKLSAgICAKKwogVmlzaWJsZVBvc2l0
aW9uIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRleHRN
YXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSkKIHsKKyAgICBpZiAoIWlzTm9kZUluVXNlKHRleHRN
YXJrZXJEYXRhLm5vZGUpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAg
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24odGV4dE1h
cmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEub2Zmc2V0LCB0ZXh0TWFya2VyRGF0YS5hZmZp
bml0eSk7CiAgICAgUG9zaXRpb24gZGVlcFBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQo
KTsKICAgICBpZiAoZGVlcFBvcy5pc051bGwoKSkKQEAgLTU0OSw3ICs1NTIsOSBAQCB2b2lkIEFY
T2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yVmlzCiAgICAgdGV4dE1hcmtlckRhdGEuYXhJ
RCA9IG9iai5nZXQoKS0+YXhPYmplY3RJRCgpOwogICAgIHRleHRNYXJrZXJEYXRhLm5vZGUgPSBk
b21Ob2RlOwogICAgIHRleHRNYXJrZXJEYXRhLm9mZnNldCA9IGRlZXBQb3MuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKLSAgICB0ZXh0TWFya2VyRGF0YS5hZmZpbml0eSA9IHZpc2libGVQb3Mu
YWZmaW5pdHkoKTsgICAgCisgICAgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkgPSB2aXNpYmxlUG9z
LmFmZmluaXR5KCk7ICAgCisgICAgCisgICAgY2FjaGUtPnNldE5vZGVJblVzZShkb21Ob2RlKTsK
IH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gNjc4NTYpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsOSArMTAwLDE0IEBAIHB1
YmxpYzoKICAgICBBWElEIHBsYXRmb3JtR2VuZXJhdGVBWElEKCkgY29uc3Q7CiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0RnJvbUFYSUQoQVhJRCBpZCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3RzLmdldChpZCkuZ2V0KCk7IH0KIAorICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5j
ZSBjYWNoZSBmb3Iga25vd2luZyBpZiBOb2RlcyB1c2VkIGJ5IFRleHRNYXJrZXJzIGFyZSB2YWxp
ZC4KKyAgICB2b2lkIHNldE5vZGVJblVzZShOb2RlKiBuKSB7IG1fdGV4dE1hcmtlck5vZGVzLmFk
ZChuKTsgfQorICAgIHZvaWQgcmVtb3ZlTm9kZUZvclVzZShOb2RlKiBuKSB7IG1fdGV4dE1hcmtl
ck5vZGVzLnJlbW92ZShuKTsgfQorICAgIGJvb2wgaXNOb2RlSW5Vc2UoTm9kZSogbikgeyByZXR1
cm4gbV90ZXh0TWFya2VyTm9kZXMuY29udGFpbnMobik7IH0KKyAgICAKICAgICAvLyBUZXh0IG1h
cmtlciB1dGlsaXRpZXMuCi0gICAgc3RhdGljIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JWaXNpYmxl
UG9zaXRpb24oVGV4dE1hcmtlckRhdGEmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLSAgICBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRl
eHRNYXJrZXJEYXRhJik7CisgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlv
bihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYp
OwogCiAgICAgZW51bSBBWE5vdGlmaWNhdGlvbiB7CiAgICAgICAgIEFYQWN0aXZlRGVzY2VuZGFu
dENoYW5nZWQsCkBAIC0xMzEsNiArMTM2LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBI
YXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAg
ICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFYSUQ+IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKKyAg
ICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJrZXJOb2RlczsKICAgICBzdGF0aWMgYm9vbCBnQWNj
ZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxpdHlFbmhhbmNl
ZFVzZXJJbnRlcmZhY2VFbmFibGVkOwogICAgIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lv
biA2Nzg1NikKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTIxNCwzNSArMjE0LDQ5IEBAIC0gKE5TVmll
dyopYXR0YWNobWVudFZpZXcKICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkRGVz
Y2VuZGFudCh3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpOwogfQogCi1zdGF0aWMgV2ViQ29yZVRl
eHRNYXJrZXIqIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zKQorc3RhdGljIFdlYkNvcmVUZXh0TWFya2VyKiB0ZXh0TWFya2VyRm9y
VmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3MpCiB7CisgICAgQVNTRVJUKGNhY2hlKTsKKyAgICAKICAgICBUZXh0TWFy
a2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0
YUZvclZpc2libGVQb3NpdGlvbih0ZXh0TWFya2VyRGF0YSwgdmlzaWJsZVBvcyk7CisgICAgY2Fj
aGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRNYXJrZXJEYXRhLCB2aXNp
YmxlUG9zKTsKICAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgCiAgICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3Rvcnld
IHRleHRNYXJrZXJXaXRoQnl0ZXM6JnRleHRNYXJrZXJEYXRhIGxlbmd0aDpzaXplb2YodGV4dE1h
cmtlckRhdGEpXTsKIH0KIAotc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKFdlYkNvcmVUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQorLSAoV2ViQ29yZVRl
eHRNYXJrZXIgKil0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOihjb25zdCBWaXNpYmxlUG9z
aXRpb24gJil2aXNpYmxlUG9zCit7CisgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb24obV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcyk7Cit9CisKK3N0YXRp
YyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihBWE9iamVjdENh
Y2hlKiBjYWNoZSwgV2ViQ29yZVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCiB7CisgICAgQVNTRVJU
KGNhY2hlKTsKKwogICAgIGlmICghdGV4dE1hcmtlcikKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwogICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwogICAgIGlmICgh
W1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gZ2V0Qnl0ZXM6JnRleHRNYXJrZXJE
YXRhIGZyb21UZXh0TWFya2VyOnRleHRNYXJrZXIgbGVuZ3RoOnNpemVvZih0ZXh0TWFya2VyRGF0
YSldKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCi0gICAgcmV0dXJu
IEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJr
ZXJEYXRhKTsKKyAgICByZXR1cm4gY2FjaGUtPnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJE
YXRhKHRleHRNYXJrZXJEYXRhKTsKIH0KIAotc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKFdlYkNvcmVUZXh0TWFya2VyUmFuZ2Uq
IHRleHRNYXJrZXJSYW5nZSkKKy0gKFZpc2libGVQb3NpdGlvbil2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOihXZWJDb3JlVGV4dE1hcmtlciAqKXRleHRNYXJrZXIKIHsKLSAgICByZXR1cm4g
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRG
YWN0b3J5XSBzdGFydE9mVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV0pOworICAgIHJl
dHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hl
KCksIHRleHRNYXJrZXIpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Np
dGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKFdlYkNvcmVUZXh0TWFya2VyUmFuZ2UqIHRleHRN
YXJrZXJSYW5nZSkKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yU3Rh
cnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlICpjYWNoZSwgV2ViQ29yZVRleHRNYXJr
ZXJSYW5nZSogdGV4dE1hcmtlclJhbmdlKQogewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGVuZE9mVGV4
dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV0pOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyKGNhY2hlLCBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSBzdGFydE9mVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV0pOworfQorCitzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKEFY
T2JqZWN0Q2FjaGUgKmNhY2hlLCBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFya2VyUmFu
Z2UpCit7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIFtb
V2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGVuZE9mVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV0pOwogfQogCiBzdGF0aWMgV2ViQ29yZVRleHRNYXJrZXJSYW5nZSogdGV4
dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoV2ViQ29yZVRleHRNYXJrZXIqIHRleHRNYXJrZXIxLCBX
ZWJDb3JlVGV4dE1hcmtlciogdGV4dE1hcmtlcjIpCkBAIC01MTIsMTEgKzUyNiwxMSBAQCAtIChO
U0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyCiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgCiAgICAgLy8gZXh0cmFjdCB0aGUgc3RhcnQgYW5kIGVuZCBWaXNpYmxlUG9zaXRpb24K
LSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRp
b25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRP
ZlRleHRNYXJrZXJSYW5nZShtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFu
Z2UpOwogICAgIGlmIChzdGFydFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSB2aXNp
YmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAg
IFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JF
bmRPZlRleHRNYXJrZXJSYW5nZShtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2Vy
UmFuZ2UpOwogICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKQEAgLTU2MiwxMyArNTc2LDE4IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyop
ZG9BWEF0dHJpYnV0ZWRTdHIKICAgICByZXR1cm4gW2F0dHJTdHJpbmcgYXV0b3JlbGVhc2VdOwog
fQogCi1zdGF0aWMgV2ViQ29yZVRleHRNYXJrZXJSYW5nZSogdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnMoVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24sIFZpc2libGVQb3Np
dGlvbiBlbmRQb3NpdGlvbikKK3N0YXRpYyBXZWJDb3JlVGV4dE1hcmtlclJhbmdlKiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlICpjYWNoZSwgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24sIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbikKIHsK
LSAgICBXZWJDb3JlVGV4dE1hcmtlciogc3RhcnRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKLSAgICBXZWJDb3JlVGV4dE1hcmtlciogZW5k
VGV4dE1hcmtlciAgID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihlbmRQb3NpdGlvbik7
CisgICAgV2ViQ29yZVRleHRNYXJrZXIqIHN0YXJ0VGV4dE1hcmtlciA9IHRleHRNYXJrZXJGb3JW
aXNpYmxlUG9zaXRpb24oY2FjaGUsIHN0YXJ0UG9zaXRpb24pOworICAgIFdlYkNvcmVUZXh0TWFy
a2VyKiBlbmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwg
ZW5kUG9zaXRpb24pOwogICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhzdGFy
dFRleHRNYXJrZXIsIGVuZFRleHRNYXJrZXIpOwogfQogCistIChXZWJDb3JlVGV4dE1hcmtlclJh
bmdlICopdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6KFZpc2libGVQb3NpdGlv
bilzdGFydFBvc2l0aW9uIGVuZFBvc2l0aW9uOihWaXNpYmxlUG9zaXRpb24pZW5kUG9zaXRpb24K
K3sKKyAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMobV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworfQorCiAt
IChOU0FycmF5KilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKIHsKICAgICBpZiAoIW1fb2JqZWN0
KQpAQCAtOTgyLDcgKzEwMDEsOCBAQCAtIChWaXNpYmxlUG9zaXRpb25SYW5nZSl2aXNpYmxlUG9z
aXRpb25SCiB7CiAgICAgaWYgKCF0ZXh0TWFya2VyUmFuZ2UpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb25SYW5nZSgpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNp
YmxlUG9zaXRpb25Gb3JTdGFydE9mVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSksIHZp
c2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSkpOwor
ICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRl
eHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9uRm9y
RW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOwogfQogCiAtIChO
U0FycmF5KilyZW5kZXJXaWRnZXRDaGlsZHJlbgpAQCAtMTAyOCw3ICsxMDQ4LDcgQEAgLSAoV2Vi
Q29yZVRleHRNYXJrZXJSYW5nZSopdGV4dE1hcmtlclJhbgogICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9vYmplY3QtPnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNO
b25lKCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgc2VsZWN0aW9uLnZp
c2libGVFbmQoKSk7CisgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxl
UG9zaXRpb25zOnNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSBlbmRQb3NpdGlvbjpzZWxlY3Rpb24u
dmlzaWJsZUVuZCgpXTsKIH0KIAogLSAoTlNWYWx1ZSopcG9zaXRpb24KQEAgLTE3ODQsOSArMTgw
NCw5IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBAIkFYU3RhcnRUZXh0TWFya2VyIl0pCi0gICAgICAgICAgICByZXR1cm4g
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihzdGFydE9mRG9jdW1lbnQocmVuZGVyZXItPmRv
Y3VtZW50KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOnN0YXJ0T2ZEb2N1bWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSldOwogICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBAIkFYRW5kVGV4dE1hcmtlciJd
KQotICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oZW5kT2ZE
b2N1bWVudChyZW5kZXJlci0+ZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgcmV0dXJuIFtzZWxm
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246ZW5kT2ZEb2N1bWVudChyZW5kZXJlci0+ZG9j
dW1lbnQoKSldOwogCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
TlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlXSkKICAgICAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpibG9ja3F1b3RlTGV2ZWwocmVuZGVyZXIpXTsK
QEAgLTIyOTAsNyArMjMxMCw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0
ZWRTdHIKIHsKICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShy
YW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2
aXNpYmxlUG9zUmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0
ZXh0UmFuZ2UpOwotICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRN
YXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2aXNpYmxlUG9z
UmFuZ2Uuc3RhcnQsIHZpc2libGVQb3NSYW5nZS5lbmQpXTsKKyAgICByZXR1cm4gW3NlbGYgZG9B
WEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdl
RnJvbVZpc2libGVQb3NpdGlvbnM6dmlzaWJsZVBvc1JhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZp
c2libGVQb3NSYW5nZS5lbmRdXTsKIH0KIAogLy8gVGhlIFJURiByZXByZXNlbnRhdGlvbiBvZiB0
aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGlz
CkBAIC0yMzUzLDcgKzIzNzMsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
KE5TU3RyCiAgICAgCiAgICAgLy8gZGlzcGF0Y2gKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWFVJRWxlbWVudEZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1h
cmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwogICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBheE9iamVjdCA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yUG9z
aXRpb24odmlzaWJsZVBvcyk7CiAgICAgICAgIGlmICghYXhPYmplY3QpCiAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwpAQCAtMjM2MiwxNyArMjM4MiwxNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6KE5TU3RyCiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCJdKSB7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHZwUmFuZ2UgPSB1aUVsZW1lbnQuZ2V0KCktPnZpc2libGVQb3NpdGlvblJhbmdl
KCk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlv
bnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlv
bjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhMaW5lRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aFVuc2lnbmVkSW50Om1fb2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyld
OwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1h
cmtlclJhbmdlRm9yTGluZSJdKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFu
Z2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIgaW50VmFs
dWVdKTsKLSAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0
aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7CkBAIC0yMzgyLDcgKzI0MDIs
NyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiJdKSB7
CiAgICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKLSAgICAg
ICAgcmV0dXJuIHBvaW50U2V0ID8gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihtX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQod2ViQ29yZVBvaW50KSkgOiBuaWw7CisgICAgICAg
IHJldHVybiBwb2ludFNldCA/IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9v
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHdlYkNvcmVQb2ludCldIDogbmlsOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYQm91bmRzRm9yVGV4
dE1hcmtlclJhbmdlIl0pIHsKQEAgLTI0MjEsMTAyICsyNDQxLDEwMiBAQCAtIChpZClhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICB8fCAhW1tXZWJDb3JlVmll
d0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gb2JqZWN0SXNUZXh0TWFya2VyOnRleHRNYXJrZXIyXSkK
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3MxID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyMSk7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zMiA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIodGV4dE1hcmtlcjIpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvczEg
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyMSldOworICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvczIgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyOih0ZXh0TWFya2VyMildOwogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2cFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9z
aXRpb25zKHZpc2libGVQb3MxLCB2aXNpYmxlUG9zMik7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4
dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5l
bmQpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3Np
dGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2li
bGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0
TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5uZXh0VmlzaWJsZVBvc2l0aW9uKHZp
c2libGVQb3MpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0VmlzaWJs
ZVBvc2l0aW9uKHZpc2libGVQb3MpXTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKG1fb2JqZWN0LT5wcmV2aW91c1Zpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKSk7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNWaXNpYmxlUG9zaXRpb24o
dmlzaWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYTGVmdFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
KHRleHRNYXJrZXIpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxm
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5wb3NpdGlvbk9mTGVmdFdvcmQo
dmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBl
bmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhSaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0p
IHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsK
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5wb3NpdGlv
bk9mUmlnaHRXb3JkKHZpc2libGVQb3MpOwotICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJS
YW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHZwUmFuZ2Uuc3RhcnQsIHZwUmFuZ2UuZW5kKTsKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZw
UmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRdOwogICAgIH0KIAogICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGVmdExpbmVUZXh0TWFya2VyUmFuZ2VGb3JU
ZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRl
eHRNYXJrZXIpXTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2Jq
ZWN0LT5sZWZ0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3MpOwotICAgICAgICBy
ZXR1cm4gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKHZwUmFuZ2Uuc3Rh
cnQsIHZwUmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBSYW5nZS5lbmRd
OwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUmlnaHRM
aW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2Vy
KTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CiAgICAgICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZwUmFuZ2UgPSBtX29iamVjdC0+cmlnaHRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBl
bmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhTZW50ZW5jZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkg
ewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwog
ICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnNlbnRlbmNl
Rm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOworICAg
ICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBS
YW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYgKFth
dHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JU
ZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRl
eHRNYXJrZXIpXTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2Jq
ZWN0LT5wYXJhZ3JhcGhGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIChp
ZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh2cFJhbmdlLnN0YXJ0LCB2cFJh
bmdlLmVuZCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczp2cFJhbmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRXb3JkRW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAg
IHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5uZXh0V29yZEVu
ZCh2aXNpYmxlUG9zKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3Nl
bGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICBy
ZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dFdv
cmRFbmQodmlzaWJsZVBvcyldOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIi
XSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9y
VmlzaWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5wcmV2aW91c1dvcmRTdGFydCh2aXNpYmxlUG9zKSk7
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNXb3JkU3RhcnQodmlz
aWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYTmV4dExpbmVFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0
TWFya2VyKTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9v
YmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcykpOworICAgICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
KHRleHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb246bV9vYmplY3QtPm5leHRMaW5lRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNMaW5l
U3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsK
LSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24obV9vYmplY3QtPnBy
ZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcykpOworICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRl
eHRNYXJrZXIpXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb246bV9vYmplY3QtPnByZXZpb3VzTGluZVN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOwog
ICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFNlbnRl
bmNlRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7
Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1fb2JqZWN0LT5u
ZXh0U2VudGVuY2VFbmRQb3NpdGlvbih2aXNpYmxlUG9zKSk7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4
dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3Np
dGlvbjptX29iamVjdC0+bmV4dFNlbnRlbmNlRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNTZW50
ZW5jZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIodGV4dE1hcmtl
cik7Ci0gICAgICAgIHJldHVybiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKG1fb2JqZWN0
LT5wcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKSk7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjoodGV4dE1hcmtlcildOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZp
c2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24odmlz
aWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
KHRleHRNYXJrZXIpOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihtX29iamVjdC0+bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKHZpc2libGVQb3MpKTsKKyAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5uZXh0UGFyYWdyYXBoRW5kUG9zaXRpb24odmlz
aWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyKHRleHRNYXJrZXIpOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbihtX29iamVjdC0+cHJldmlvdXNQYXJhZ3JhcGhTdGFydFBvc2l0aW9uKHZpc2libGVQ
b3MpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07CisgICAgICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1BhcmFncmFw
aFN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYU3R5bGVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0p
IHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsK
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5zdHlsZVJh
bmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnModnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOwor
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2cFJhbmdlLmVuZF07CiAgICAgfQogCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZW5ndGhGb3JUZXh0TWFya2VyUmFuZ2Ui
XSkgewpAQCAtMjUzMCwxMiArMjU1MCwxMiBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6KE5TU3RyCiAgICAgLy8gVXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIChzbyBmYXIp
LgogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugdmlz
aWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFu
Z2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JWaXNpYmxl
UG9zaXRpb24odmlzaWJsZVBvc1JhbmdlLnN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLnN0YXJ0XTsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEVuZFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5n
ZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQ
b3NpdGlvbih2aXNpYmxlUG9zUmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb246dmlzaWJsZVBvc1JhbmdlLmVuZF07CiAgICAgfQogICAg
IAogICAgIGlmIChtX29iamVjdC0+aXNEYXRhVGFibGUoKSkgewpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gNjc4NTYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3ODEsNiArMTc4MSwxOCBAQCB2b2lkIERvY3VtZW50OjpjbGVhckFYT2JqZWN0Q2FjaGUo
KQogICAgICAgICBkb2MtPmNsZWFyQVhPYmplY3RDYWNoZSgpOwogfQogCitib29sIERvY3VtZW50
OjpheE9iamVjdENhY2hlRXhpc3RzKCkgY29uc3QKK3sKKyAgICBpZiAobV9heE9iamVjdENhY2hl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBEb2N1bWVudCogZG9jID0gdG9wRG9j
dW1lbnQoKTsKKyAgICBpZiAoZG9jICE9IHRoaXMpCisgICAgICAgIHJldHVybiBkb2MtPmF4T2Jq
ZWN0Q2FjaGVFeGlzdHMoKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCiBBWE9i
amVjdENhY2hlKiBEb2N1bWVudDo6YXhPYmplY3RDYWNoZSgpIGNvbnN0CiB7CiAgICAgLy8gVGhl
IG9ubHkgZG9jdW1lbnQgdGhhdCBhY3R1YWxseSBoYXMgYSBBWE9iamVjdENhY2hlIGlzIHRoZSB0
b3AtbGV2ZWwKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gNjc4NTYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNiArNTIwLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBjbGVhckFYT2JqZWN0Q2FjaGUoKTsKICAgICBBWE9iamVjdENhY2hlKiBheE9iamVjdENh
Y2hlKCkgY29uc3Q7CisgICAgYm9vbCBheE9iamVjdENhY2hlRXhpc3RzKCkgY29uc3Q7CiAgICAg
CiAgICAgLy8gdG8gZ2V0IHZpc3VhbGx5IG9yZGVyZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMg
cmlnaHQKICAgICB2b2lkIHNldFZpc3VhbGx5T3JkZXJlZCgpOwpJbmRleDogV2ViQ29yZS9kb20v
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDY3
ODU2KQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKKyNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgpAQCAtMzgxLDYgKzM4Miw5IEBAIE5vZGU6On5O
b2RlKCkKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgZGV0YWNoKCk7CiAKKyAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBtX2RvY3VtZW50ICYmIG1f
ZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGVFeGlzdHMoKSkKKyAgICAgICAgbV9kb2N1bWVudC0+YXhP
YmplY3RDYWNoZSgpLT5yZW1vdmVOb2RlRm9yVXNlKHRoaXMpOworICAgIAogICAgIGlmIChtX3By
ZXZpb3VzKQogICAgICAgICBtX3ByZXZpb3VzLT5zZXROZXh0U2libGluZygwKTsKICAgICBpZiAo
bV9uZXh0KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjc4NTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOS0xNiAgQ2hyaXMgRmxl
aXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENyYXNoVHJhY2VyOiAxLDM4MiBjcmFzaGVzIGluIFNhZmFy
aSBhdCBjb20uYXBwbGUuV2ViQ29yZTogV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjYW5vbmlj
YWxQb3NpdGlvbiArIDc4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTkyNworCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jh
c2gtaW52YWxpZC10ZXh0LW1hcmtlci1ub2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jhc2gtaW52YWxpZC10ZXh0LW1hcmtlci1u
b2RlLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA5LTIwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTW92ZSBhIGZldyBtb3JlIHhwLXNwZWNpZmljIHJl
c3VsdHMgdG8gd2luLXhwIGFuZCBjbGVhbiB1cCB0ZXN0IGV4cGVjdGF0aW9ucy4KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NyYXNoLWludmFsaWQtdGV4dC1t
YXJrZXItbm9kZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvY3Jhc2gtaW52YWxpZC10ZXh0LW1hcmtlci1ub2RlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2NyYXNoLWludmFsaWQtdGV4dC1tYXJrZXItbm9kZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKworVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IGEgY3Jhc2gg
d2hlbiBhIHRleHQgbWFya2VyIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgbm9kZSB0aGF0
J3MgYmVlbiBkZWFsbG9jYXRlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQt
bWFya2VyLW5vZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS9jcmFzaC1pbnZhbGlkLXRleHQtbWFya2VyLW5vZGUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2NyYXNoLWlu
dmFsaWQtdGV4dC1tYXJrZXItbm9kZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IGZhbHNlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJv
ZHkiPgorCis8aWZyYW1lIGlkPSJpZnJhbWUiIHdpZHRoPTEwMCBoZWlnaHQ9MTAwPjwvaWZyYW1l
PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
Cis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgcHJvdGVjdHMgYWdhaW5zdCBhIGNy
YXNoIHdoZW4gYSB0ZXh0IG1hcmtlciBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSB0byBhIG5vZGUg
dGhhdCdzIGJlZW4gZGVhbGxvY2F0ZWQuIik7CisKKyAgICAvLyBBZGQgYW4gZWxlbWVudCB0aGF0
IGEgdGV4dCBtYXJrZXIgY2FuIGJlIHJldHJpZXZlZCBmcm9tLgorICAgIHZhciBjb250ZW50RG9j
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmcmFtZSIpLmNvbnRlbnREb2N1bWVudDsgCisg
ICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9ICI8aDEgdGFiaW5kZXg9JzAnPmNvbnRlbnQ8
L2gxPiI7CisKKyAgICAvLyBUYWIgdG8gdGhlIGVsZW1lbnQuIAorICAgIC8vIE5vdGU6IElmIHRo
ZSBlbGVtZW50IGhhcyBhbiAiaWQiIGl0IHdvbid0IGdldCBkZS1hbGxvY2F0ZWQgaW4gdGltZSwg
c28gLmZvY3VzKCkgY2FuJ3QgYmUgdXNlZC4KKyAgICBldmVudFNlbmRlci5rZXlEb3duKCJcdCIp
OworCisgICAgLy8gZ2V0IGEgbWFya2VyIHRoYXQgd2lsbCBiZWNvbWUgaW52YWxpZCB3aGVuIHRo
ZSBub2RlIGRpc2FwcGVhcnMuCisgICAgdmFyIGF4RGl2ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgdmFyIHRleHRNYXJrZXJSYW5nZSA9IGF4RGl2LnRleHRN
YXJrZXJSYW5nZUZvckVsZW1lbnQoYXhEaXYpOworICAgIHZhciBpbnZhbGlkTWFya2VyID0gYXhE
aXYuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisK
Kzwvc2NyaXB0PgorCis8c2NyaXB0PgorICAgICAvLyBXcml0ZSBuZXcgY29udGVudCB0byBjYXVz
ZSBhbGwgY29udGVudCB0byBkaXNhcHBlYXIuCisgICAgIGNvbnRlbnREb2MuYm9keS5pbm5lckhU
TUwgPSAiPGgyPm5ldyBjb250ZW50PC9oMj4iOworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgICAg
Ly8gQWNjZXNzIHRoZSBpbnZhbGlkIG1hcmtlciAoaXQgc2hvdWxkIG5vdCBjcmFzaCkuCisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvZHkiKS5mb2N1cygpOworICAgIHZhciBib2R5ID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisKKyAgICBib2R5LmFjY2Vz
c2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihpbnZhbGlkTWFya2VyKTsKKworICAgIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>
<flag name="review"
          id="57547"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>